@sapui5/sap.fe.templates 1.144.0 → 1.145.1

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.
Files changed (95) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
  4. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +10 -34
  5. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +8 -32
  6. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +22 -19
  7. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +23 -20
  8. package/src/sap/fe/templates/ListReport/manifest.json +1 -1
  9. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +2 -3
  10. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +1 -2
  11. package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +32 -0
  12. package/src/sap/fe/templates/ListReport/view/fragments/MacroChart.fragment.xml +1 -0
  13. package/src/sap/fe/templates/ListReport/view/fragments/Table.fragment.xml +3 -1
  14. package/src/sap/fe/templates/ObjectPage/Component.js +4 -2
  15. package/src/sap/fe/templates/ObjectPage/Component.ts +3 -1
  16. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +78 -3
  17. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +85 -1
  18. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +1 -0
  19. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +40 -32
  20. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +43 -42
  21. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +2 -71
  22. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +0 -74
  23. package/src/sap/fe/templates/ObjectPage/card/actions/HeaderActions.js +6 -7
  24. package/src/sap/fe/templates/ObjectPage/card/actions/HeaderActions.ts +5 -6
  25. package/src/sap/fe/templates/ObjectPage/components/DraftToggle.js +75 -8
  26. package/src/sap/fe/templates/ObjectPage/components/DraftToggle.tsx +83 -13
  27. package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.helper.js +22 -3
  28. package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.helper.ts +30 -1
  29. package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.js +5 -2
  30. package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.ts +7 -0
  31. package/src/sap/fe/templates/ObjectPage/manifest.json +5 -5
  32. package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.js +2 -1
  33. package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.ts +1 -0
  34. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +6 -2
  35. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +6 -1
  36. package/src/sap/fe/templates/ObjectPage/view/fragments/ExpandedHeading.fragment.xml +45 -7
  37. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderContent.fragment.xml +8 -13
  38. package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +36 -6
  39. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderAddress.fragment.xml +1 -1
  40. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +1 -1
  41. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +0 -1
  42. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +82 -39
  43. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionCustomSection.fragment.xml +6 -1
  44. package/src/sap/fe/templates/ObjectPage/view/fragments/Table.fragment.xml +3 -1
  45. package/src/sap/fe/templates/library.js +1 -1
  46. package/src/sap/fe/templates/messagebundle.properties +18 -6
  47. package/src/sap/fe/templates/messagebundle_ar.properties +14 -0
  48. package/src/sap/fe/templates/messagebundle_bg.properties +14 -0
  49. package/src/sap/fe/templates/messagebundle_ca.properties +14 -0
  50. package/src/sap/fe/templates/messagebundle_cnr.properties +15 -1
  51. package/src/sap/fe/templates/messagebundle_cs.properties +14 -0
  52. package/src/sap/fe/templates/messagebundle_cy.properties +14 -0
  53. package/src/sap/fe/templates/messagebundle_da.properties +14 -0
  54. package/src/sap/fe/templates/messagebundle_de.properties +14 -0
  55. package/src/sap/fe/templates/messagebundle_el.properties +14 -0
  56. package/src/sap/fe/templates/messagebundle_en.properties +14 -0
  57. package/src/sap/fe/templates/messagebundle_en_GB.properties +14 -0
  58. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +11 -3
  59. package/src/sap/fe/templates/messagebundle_es.properties +14 -0
  60. package/src/sap/fe/templates/messagebundle_es_MX.properties +14 -0
  61. package/src/sap/fe/templates/messagebundle_et.properties +14 -0
  62. package/src/sap/fe/templates/messagebundle_fi.properties +14 -0
  63. package/src/sap/fe/templates/messagebundle_fr.properties +14 -0
  64. package/src/sap/fe/templates/messagebundle_fr_CA.properties +14 -0
  65. package/src/sap/fe/templates/messagebundle_hi.properties +14 -0
  66. package/src/sap/fe/templates/messagebundle_hr.properties +14 -0
  67. package/src/sap/fe/templates/messagebundle_hu.properties +14 -0
  68. package/src/sap/fe/templates/messagebundle_id.properties +14 -0
  69. package/src/sap/fe/templates/messagebundle_it.properties +14 -0
  70. package/src/sap/fe/templates/messagebundle_iw.properties +15 -1
  71. package/src/sap/fe/templates/messagebundle_ja.properties +15 -1
  72. package/src/sap/fe/templates/messagebundle_kk.properties +14 -0
  73. package/src/sap/fe/templates/messagebundle_ko.properties +14 -0
  74. package/src/sap/fe/templates/messagebundle_lt.properties +16 -2
  75. package/src/sap/fe/templates/messagebundle_lv.properties +14 -0
  76. package/src/sap/fe/templates/messagebundle_mk.properties +14 -0
  77. package/src/sap/fe/templates/messagebundle_ms.properties +14 -0
  78. package/src/sap/fe/templates/messagebundle_nl.properties +14 -0
  79. package/src/sap/fe/templates/messagebundle_no.properties +14 -0
  80. package/src/sap/fe/templates/messagebundle_pl.properties +14 -0
  81. package/src/sap/fe/templates/messagebundle_pt.properties +14 -0
  82. package/src/sap/fe/templates/messagebundle_pt_PT.properties +14 -0
  83. package/src/sap/fe/templates/messagebundle_ro.properties +14 -0
  84. package/src/sap/fe/templates/messagebundle_ru.properties +14 -0
  85. package/src/sap/fe/templates/messagebundle_sh.properties +15 -1
  86. package/src/sap/fe/templates/messagebundle_sk.properties +14 -0
  87. package/src/sap/fe/templates/messagebundle_sl.properties +17 -3
  88. package/src/sap/fe/templates/messagebundle_sr.properties +15 -1
  89. package/src/sap/fe/templates/messagebundle_sv.properties +14 -0
  90. package/src/sap/fe/templates/messagebundle_th.properties +14 -0
  91. package/src/sap/fe/templates/messagebundle_tr.properties +14 -0
  92. package/src/sap/fe/templates/messagebundle_uk.properties +14 -0
  93. package/src/sap/fe/templates/messagebundle_vi.properties +16 -2
  94. package/src/sap/fe/templates/messagebundle_zh_CN.properties +14 -0
  95. package/src/sap/fe/templates/messagebundle_zh_TW.properties +14 -0
@@ -2,12 +2,11 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/KPIManagement", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/MessageStrip", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/filter/FilterUtils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ListReport/ExtensionAPI", "sap/fe/templates/ListReport/overrides/SideEffects", "sap/fe/templates/TableScroller", "sap/ui/Device", "sap/ui/core/Element", "sap/ui/core/InvisibleMessage", "sap/ui/core/library", "sap/ui/core/mvc/OverrideExecution", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/hasher", "./ListReportTemplating", "./overrides/IntentBasedNavigation", "./overrides/MessageHandler", "./overrides/Share", "./overrides/ViewState"], function (Log, ObjectPath, ClassSupport, CommonUtils, PageController, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, KPIManagement, MessageHandler, Placeholder, Share, SideEffects, ViewState, EditState, MessageStrip, ResourceModelHelper, StableIdHelper, CoreLibrary, ChartUtils, FilterUtils, SelectionVariant, ExtensionAPI, SideEffectsOverride, TableScroller, Device, UI5Element, InvisibleMessage, library, OverrideExecution, StateUtil, hasher, ListReportTemplating, IntentBasedNavigationOverride, MessageHandlerOverride, ShareOverrides, ViewStateOverrides) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/PageController", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/KPIManagement", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/MessageStrip", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/filter/FilterUtils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ListReport/ExtensionAPI", "sap/fe/templates/ListReport/overrides/SideEffects", "sap/fe/templates/TableScroller", "sap/ui/Device", "sap/ui/core/InvisibleMessage", "sap/ui/core/library", "sap/ui/core/mvc/OverrideExecution", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/hasher", "./ListReportTemplating", "./overrides/IntentBasedNavigation", "./overrides/MessageHandler", "./overrides/Share", "./overrides/ViewState"], function (Log, ObjectPath, ClassSupport, CommonUtils, PageController, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, KPIManagement, MessageHandler, Placeholder, Share, SideEffects, ViewState, EditState, MessageStrip, ResourceModelHelper, StableIdHelper, CoreLibrary, ChartUtils, FilterUtils, SelectionVariant, ExtensionAPI, SideEffectsOverride, TableScroller, Device, InvisibleMessage, library, OverrideExecution, StateUtil, hasher, ListReportTemplating, IntentBasedNavigationOverride, MessageHandlerOverride, ShareOverrides, ViewStateOverrides) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;
9
9
  var InvisibleMessageMode = library.InvisibleMessageMode;
10
- var generate = StableIdHelper.generate;
11
10
  var getResourceModel = ResourceModelHelper.getResourceModel;
12
11
  var usingExtension = ClassSupport.usingExtension;
13
12
  var publicExtension = ClassSupport.publicExtension;
@@ -244,7 +243,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
244
243
  }
245
244
  this.getExtensionAPI().updateAppState();
246
245
  // setTimeout cause the variant needs to be applied before judging the auto search or updating the app state
247
- this.focusHandlingForSegmentedButton(selectedKey);
246
+ this.focusHandlingForSegmentedButton();
248
247
  },
249
248
  onDynamicPageTitleStateChanged(event) {
250
249
  const filterBar = this._getFilterBarControl();
@@ -510,6 +509,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
510
509
  filterBar = this._getFilterBarControl();
511
510
  if (filterBar && !this._isFilterBarHiddenUsed()) {
512
511
  //Enabling mandatory filter fields message dialog
512
+ await filterBar.whenInitialized();
513
513
  if (!filterBar.getShowMessages()) {
514
514
  filterBar.setShowMessages(true);
515
515
  }
@@ -576,9 +576,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
576
576
  }
577
577
  }
578
578
  };
579
- _proto._getSegmentedButton = function _getSegmentedButton(sControl) {
580
- const sSegmentedButtonId = (sControl === "Chart" ? this.getChartControl() : this._getTable())?.data("segmentedButtonId");
581
- return this.getView().byId(sSegmentedButtonId);
579
+ _proto._getSegmentedButton = function _getSegmentedButton() {
580
+ const contentSwitcher = this.getView().byId("fe::ContentSwitcher");
581
+ return contentSwitcher?.$segmentedButton?.current;
582
582
  };
583
583
  _proto._getControlFromPageModelProperty = function _getControlFromPageModelProperty(sPath) {
584
584
  const controlId = this._getPageModel()?.getProperty(sPath);
@@ -839,34 +839,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
839
839
  filterBar?.getSegmentedButton()?.setVisible(buttonVisible);
840
840
  };
841
841
  /**
842
- * Handles focus for the segmented button based on the selected key.
843
- * @param selectedKey The key representing the selected template content view
842
+ * Handles focus for the segmented button.
844
843
  */
845
- _proto.focusHandlingForSegmentedButton = function focusHandlingForSegmentedButton(selectedKey) {
846
- const oChart = this.getChartControl();
847
- const oTable = this._getTable();
848
- let segmentedButtonId;
849
- switch (selectedKey) {
850
- case TemplateContentView.Table:
851
- segmentedButtonId = generate([oTable?.getId(), "SegmentedButton", "TemplateContentView"]);
852
- this.addFocusDelegate(segmentedButtonId);
853
- break;
854
- case TemplateContentView.Chart:
855
- case TemplateContentView.Hybrid:
856
- segmentedButtonId = generate([oChart?.getId(), "SegmentedButton", "TemplateContentView"]);
857
- this.addFocusDelegate(segmentedButtonId);
858
- break;
859
- default:
860
- break;
861
- }
862
- }
863
-
864
- /**
865
- * Adds an event delegate to a control and sets focus on it.
866
- * @param segmentedButtonId The control to which the event delegate will be added.
867
- */;
868
- _proto.addFocusDelegate = function addFocusDelegate(segmentedButtonId) {
869
- const segmentedButton = UI5Element.getElementById(segmentedButtonId);
844
+ _proto.focusHandlingForSegmentedButton = function focusHandlingForSegmentedButton() {
845
+ const segmentedButton = this._getSegmentedButton();
870
846
  if (segmentedButton) {
871
847
  const eventDelegate = {
872
848
  onAfterRendering: () => {
@@ -961,4 +937,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/base/ClassSup
961
937
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterClear", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterClear"), _class2.prototype), _class2)) || _class);
962
938
  return ListReportController;
963
939
  }, false);
964
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjMTEiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTIiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTQiLCJleHRlbnNpYmxlIiwiX2RlYzE1IiwiX2RlYzE2IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbkZpbHRlckxheW91dFN3aXRjaCIsIm9FdmVudCIsImN1cnJlbnRLZXkiLCJnZXRTb3VyY2UiLCJzZWxlY3RlZEtleSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkiLCJzZXRWaXNpYmxlIiwib25JbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXRGbG93IiwiaW5saW5lRWRpdFNhdmUiLCJvbkZpbHRlclNlYXJjaCIsImZpbHRlckJhckFQSSIsImdldFBhcmVudCIsInRyaWdnZXJTZWFyY2giLCJvbkZpbHRlcnNDaGFuZ2VkIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvblBlbmRpbmdGaWx0ZXJzIiwiZ2V0UGFyYW1ldGVyIiwic2V0UHJvcGVydHkiLCJfc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50Iiwib25WYXJpYW50U2VsZWN0ZWQiLCJwYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsIm9yaWdpbmFsU291cmNlIiwiY3VycmVudFZhcmlhbnRLZXkiLCJtdWx0aU1vZGVDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJpc0EiLCJpbnZhbGlkYXRlQ29udGVudCIsInNldEZyZWV6ZUNvbnRlbnQiLCJzZXRUaW1lb3V0IiwiZmlsdGVyQmFyIiwiZHluYW1pY1BhZ2UiLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sIiwiZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIiwiZ2V0RmlsdGVySXRlbXMiLCJmaW5kIiwiZmlsdGVySXRlbSIsImdldFJlcXVpcmVkIiwiZ2V0Q29uZGl0aW9ucyIsInNldEhlYWRlckV4cGFuZGVkIiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwiX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwib25WYXJpYW50U2F2ZWQiLCJvblNlYXJjaCIsIm9NZGNDaGFydCIsImdldENoYXJ0Q29udHJvbCIsImJIaWRlRHJhZnQiLCJGaWx0ZXJVdGlscyIsImdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0IiwiX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvUGFnZUludGVybmFsTW9kZWxDb250ZXh0Iiwic1RlbXBsYXRlQ29udGVudFZpZXciLCJnZXRQcm9wZXJ0eSIsImdldFBhdGgiLCJDaGFydCIsImhhc1BlbmRpbmdDaGFydENoYW5nZXMiLCJUYWJsZSIsImhhc1BlbmRpbmdUYWJsZUNoYW5nZXMiLCJEZXZpY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwiZ2V0SGVhZGVyRXhwYW5kZWQiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJ0aGVuIiwib0V4dGVybmFsU3RhdGUiLCJmaWx0ZXJCYXJDb25kaXRpb25zIiwiZmlsdGVyIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsInBob25lIiwib0R5bmFtaWNQYWdlIiwiX2lzSW5pdExvYWRFbmFibGVkIiwic2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eSIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsIm9Db250cm9sbGVyIiwic091dGJvdW5kVGFyZ2V0Iiwib0NvbnRleHQiLCJzQ3JlYXRlUGF0aCIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCIsImdldENvbnRlbnQiLCJvVGFibGUiLCJfZ2V0VGFibGUiLCJhRGF0YSIsIkNoYXJ0VXRpbHMiLCJzZXRDaGFydEZpbHRlcnMiLCJyZWJpbmQiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJrZXkiLCJvQ2hhcnQiLCJfdXBkYXRlVGFibGUiLCJfdXBkYXRlQ2hhcnQiLCJIeWJyaWQiLCJmb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiZXZlbnQiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJhbm5vdW5jZSIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwiZ2V0T3duZXJDb21wb25lbnQiLCJ1aU1vZGVsQ29udGV4dCIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiYWxwQ29udGVudFZpZXciLCJfZ2V0RGVmYXVsdFBhdGgiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsIndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbiIsIl9zZXRJbml0TG9hZCIsImlzRWRpdGFibGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImR5bm1pY1BhZ2VIZWFkZXJUaXRsZSIsImdldFRpdGxlIiwiYnJlYWRjcnVtYnNCQiIsImdldEJyZWFkY3J1bWJzIiwic2V0QnJlYWRjcnVtYkxpbmtzIiwib25FeGl0IiwiZGVzdHJveSIsImludGVybmFsTW9kZWxDb250ZXh0IiwicGFnZVJlYWR5Iiwid2FpdEZvciIsIl9hcHBseUFwcFN0YXRlIiwiQ29tbW9uVXRpbHMiLCJpc0FwcENvbXBvbmVudEJ1c3kiLCJhVGFibGVzIiwiX2dldENvbnRyb2xzIiwidXBkYXRlQWN0aW9ucyIsIkVkaXRTdGF0ZSIsImlzRWRpdFN0YXRlRGlydHkiLCJ0YWJsZSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwidGFibGVBUEkiLCJnZXRSb3V0aW5nU2VydmljZSIsIndhaXRGb3JCaW5kaW5nQ2xlYW51cCIsImF0dGFjaEV2ZW50T25jZSIsIl91cGRhdGVUYWJsZUFjdGlvbnMiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsImdldE1vZGVsIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsImUiLCJ3YXJuaW5nIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImlzSW5zaWdodHNFbmFibGVkIiwib25QYWdlUmVhZHkiLCJtUGFyYW1ldGVycyIsImZvcmNlRm9jdXMiLCJfc2V0SW5pdGlhbEZvY3VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwidW5kZWZpbmVkIiwib25WaWV3TmVlZHNSZWZyZXNoIiwic2xpY2UiLCJvbkFmdGVyQ2xlYXIiLCJhSUJOQWN0aW9ucyIsImZvckVhY2giLCJnZXRJQk5BY3Rpb25zIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJ1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5IiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9mb2N1c1NpbGVudCIsImZpbHRlckZpZWxkIiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiX2ZvY3VzV2hlbkhlYWRlckV4cGFuZGVkIiwib0ZpbHRlckl0ZW0iLCJiYXNpY1NlYXJjaEZpZWxkIiwiZ2V0QmFzaWNTZWFyY2hGaWVsZCIsImZpZWxkVG9Gb2N1cyIsImlzRm9jdXNhYmxlIiwiYnlJZCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sSWQiLCJpc0hlYWRlckV4cGFuZGVkIiwiX2lzRmlsdGVyQmFySGlkZGVuVXNlZCIsImdldFNob3dNZXNzYWdlcyIsInNldFNob3dNZXNzYWdlcyIsImZvY3VzUm93IiwiaW5mbyIsIl9nZXRCcm93c2VyVGl0bGUiLCJfcGFnZVRpdGxlSW5mb3JtYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInRpdGxlIiwic3VidGl0bGUiLCJzdWJUaXRsZSIsImludGVudCIsImljb24iLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhZGFwdGF0aW9uRmlsdGVyQmFyIiwiZ2V0SW5idWlsdEZpbHRlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJlbmFibGVSZXF1ZXN0cyIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIl9pc011bHRpTW9kZSIsInNldENvdW50c091dERhdGVkIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsInNDb250cm9sIiwic1NlZ21lbnRlZEJ1dHRvbklkIiwic1BhdGgiLCJjb250cm9sSWQiLCJfZ2V0UGFnZU1vZGVsIiwiX2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2wiLCJzVmlzdWFsRmlsdGVyQmFySWQiLCJTdGFibGVJZEhlbHBlciIsImdlbmVyYXRlIiwiX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sIiwiX2dldEljb25UYWJCYXIiLCJvQ29udHJvbCIsImdldFNlbGVjdGVkSW5uZXJDb250cm9sIiwiY29udGVudCIsInNLZXkiLCJhQ29udHJvbHMiLCJvVGFiTXVsdGlNb2RlIiwiZ2V0SXRlbXMiLCJvSXRlbSIsImdldEtleSIsImluY2x1ZGVzIiwicHVzaCIsImRlZmF1bHRQYXRoIiwiTGlzdFJlcG9ydFRlbXBsYXRpbmciLCJnZXREZWZhdWx0UGF0aCIsImluaXRMb2FkTW9kZSIsImdldFZpZXdEYXRhIiwiaW5pdGlhbExvYWQiLCJFbmFibGVkIiwiX2Rpc2FibGVJbml0TG9hZCIsIl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsImdldERhdGEiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwibUNhY2hlIiwiaWdub3JlZEZpZWxkcyIsImFDaGFydHMiLCJzQ2hhcnRFbnRpdHlQYXRoIiwic0NoYXJ0RW50aXR5U2V0Iiwic0NhY2hlS2V5IiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJoaWRlRmlsdGVyQmFyIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwidmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudCIsIm9WTSIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsInN0YW5kYXJkVmFyaWFudCIsImdldEV4ZWN1dGVPblNlbGVjdCIsImlzVGFibGVCb3VuZCIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiaXNCb3VuZCIsImdldEJpbmRpbmdJbmZvIiwiYnV0dG9uVmlzaWJsZSIsImdldFNlZ21lbnRlZEJ1dHRvbiIsInNlZ21lbnRlZEJ1dHRvbklkIiwiZ2V0SWQiLCJhZGRGb2N1c0RlbGVnYXRlIiwic2VnbWVudGVkQnV0dG9uIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZXZlbnREZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsInN2IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImVyciIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsImdldEZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwiaGFuZGxlTWVzc2FnZUJ1dHRvblZpc2liaWxpdHkiLCJzZXRTaG93Rm9vdGVyIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJMaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1BhZ2UgZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlXCI7XG5pbXBvcnQgdHlwZSB7IER5bmFtaWNQYWdlVGl0bGUkU3RhdGVDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVRpdGxlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IEtQSU1hbmFnZW1lbnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0tQSU1hbmFnZW1lbnRcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBTaWRlRWZmZWN0cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL3RlbXBsYXRlcy9MaXN0UmVwb3J0Q29udmVydGVyXCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlkSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgVGl0bGVJbmZvcm1hdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCcmVhZGNydW1icyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9CcmVhZGNydW1ic1wiO1xuaW1wb3J0IHR5cGUgQ2hhcnRUeXBlIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBNYWNyb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NZXNzYWdlQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnREZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydERlbGVnYXRlXCI7XG5pbXBvcnQgQ2hhcnRVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFV0aWxzXCI7XG5pbXBvcnQgdHlwZSBDb250ZW50U3dpdGNoZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udGVudFN3aXRjaGVyL0NvbnRlbnRTd2l0Y2hlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJBUElcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBNdWx0aXBsZU1vZGVDb250cm9sIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvY29udHJvbHMvTXVsdGlwbGVNb2RlQ29udHJvbFwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzT3ZlcnJpZGUgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9vdmVycmlkZXMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEljb25UYWJCYXIgZnJvbSBcInNhcC9tL0ljb25UYWJCYXJcIjtcbmltcG9ydCB0eXBlIFRhYkNvbnRhaW5lckl0ZW0gZnJvbSBcInNhcC9tL1RhYkNvbnRhaW5lckl0ZW1cIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgeyBJbnZpc2libGVNZXNzYWdlTW9kZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRGaWx0ZXJzQ2hhbmdlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IGhhc2hlciBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvaGFzaGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlQWRkaXRpb25hbEluZm8gfSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBMaXN0UmVwb3J0VGVtcGxhdGluZyBmcm9tIFwiLi9MaXN0UmVwb3J0VGVtcGxhdGluZ1wiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmNvbnN0IFRlbXBsYXRlQ29udGVudFZpZXcgPSBDb3JlTGlicmFyeS5UZW1wbGF0ZUNvbnRlbnRWaWV3LFxuXHRJbml0aWFsTG9hZE1vZGUgPSBDb3JlTGlicmFyeS5Jbml0aWFsTG9hZE1vZGU7XG5cbi8qKlxuICogQ29udHJvbGxlciBjbGFzcyBmb3IgdGhlIGxpc3QgcmVwb3J0IHBhZ2UsIHVzZWQgaW5zaWRlIGFuIFNBUCBGaW9yaSBlbGVtZW50cyBhcHBsaWNhdGlvbi5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCIpXG5jbGFzcyBMaXN0UmVwb3J0Q29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsUm91dGluZy5vdmVycmlkZSh7XG5cdFx0XHRvbkFmdGVyQmluZGluZzogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsUm91dGluZykge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fb25BZnRlckJpbmRpbmcoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gKHRoaXMuYmFzZSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuZ2V0Q3VycmVudEVudGl0eVNldCgpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaWRlRWZmZWN0cy5vdmVycmlkZShTaWRlRWZmZWN0c092ZXJyaWRlKSlcblx0X3NpZGVFZmZlY3RzITogU2lkZUVmZmVjdHM7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihLUElNYW5hZ2VtZW50KVxuXHRrcGlNYW5hZ2VtZW50ITogS1BJTWFuYWdlbWVudDtcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJDb25kaXRpb25zPzogdW5rbm93bjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdDaGFydENoYW5nZXM/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcz86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgZXh0ZW5zaW9uIEFQSS5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25Jbml0LmFwcGx5KHRoaXMpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHVpTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldEJpbmRpbmdDb250ZXh0KFwidWlcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdHRoaXMuX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChmaWx0ZXJCYXIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgZmFsc2UpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInVvbVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yTnVtYmVyXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjdXJyZW5jeVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c1N1cHBvcnRlZFwiLCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5faGFzTXVsdGlWaXN1YWxpemF0aW9ucygpKSB7XG5cdFx0XHRsZXQgYWxwQ29udGVudFZpZXcgPSB0aGlzLl9nZXREZWZhdWx0UGF0aCgpO1xuXHRcdFx0aWYgKCFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgJiYgYWxwQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkKSB7XG5cdFx0XHRcdGFscENvbnRlbnRWaWV3ID0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdH1cblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIGFscENvbnRlbnRWaWV3KTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBjb25kaXRpb25zIGZyb20gZmlsdGVyIGJhclxuXHRcdC8vIHRoaXMgaXMgbGF0ZXIgdXNlZCBiZWZvcmUgbmF2aWdhdGlvbiB0byBnZXQgY29uZGl0aW9ucyBhcHBsaWVkIG9uIHRoZSBmaWx0ZXIgYmFyXG5cdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0ge307XG5cblx0XHQvLyBBcyBBcHBTdGF0ZUhhbmRsZXIuYXBwbHlBcHBTdGF0ZSB0cmlnZ2VycyBhIG5hdmlnYXRpb24gd2Ugd2FudCB0byBtYWtlIHN1cmUgaXQgd2lsbFxuXHRcdC8vIGhhcHBlbiBhZnRlciB0aGUgcm91dGVNYXRjaCBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQgKG90aGVyd2lzZSB0aGUgcm91dGVyIGdldHMgYnJva2VuKVxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS53YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKTtcblxuXHRcdC8vIENvbmZpZ3VyZSB0aGUgaW5pdGlhbCBsb2FkIHNldHRpbmdzXG5cdFx0dGhpcy5fc2V0SW5pdExvYWQoKTtcblx0XHR1aU1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIlwiLCB7IGlzRWRpdGFibGU6IGZhbHNlIH0pO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0Y29uc3QgZHlubWljUGFnZUhlYWRlclRpdGxlID0gZHluYW1pY1BhZ2U/LmdldFRpdGxlKCk7XG5cdFx0Y29uc3QgYnJlYWRjcnVtYnNCQiA9IGR5bm1pY1BhZ2VIZWFkZXJUaXRsZS5nZXRCcmVhZGNydW1icygpIGFzIEJyZWFkY3J1bWJzIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChicmVhZGNydW1ic0JCKSB7XG5cdFx0XHRicmVhZGNydW1ic0JCLnNldEJyZWFkY3J1bWJMaW5rcyhcIlwiKTtcblx0XHR9XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0ZGVsZXRlIHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucztcblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0YXN5bmMgX29uQWZ0ZXJCaW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRpZiAoIWludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiaW5pdGlhbFZhcmlhbnRBcHBsaWVkXCIpKSB7XG5cdFx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKHRoaXMuX2FwcGx5QXBwU3RhdGUoKSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiLCB0cnVlKTtcblx0XHR9XG5cdFx0YXdhaXQgQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKS5pc0FwcENvbXBvbmVudEJ1c3koKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSBhcyBUYWJsZVtdO1xuXHRcdGxldCB1cGRhdGVBY3Rpb25zID0gdHJ1ZTtcblx0XHRpZiAoRWRpdFN0YXRlLmlzRWRpdFN0YXRlRGlydHkoKSkge1xuXHRcdFx0dGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5pbnZhbGlkYXRlQ29udGVudCgpO1xuXHRcdFx0Y29uc3QgdGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlQmluZGluZyA9IHRhYmxlPy5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHR1cGRhdGVBY3Rpb25zID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGU/LmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHQvLyBVcGRhdGUgdGhlIHRhYmxlIGNvbnRlbnQgdXNpbmcgc2lkZSBlZmZlY3RzIChsaXN0QmluZGluZy5yZWZyZXNoIGRvZXNuJ3Qga2VlcCBleHBhbnNpb24gc3RhdGVzIGluIGEgVHJlZVRhYmxlKVxuXHRcdFx0XHRDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpXG5cdFx0XHRcdFx0LmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0XHQud2FpdEZvckJpbmRpbmdDbGVhbnVwKClcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZWNlaXZlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0XHRcdFx0XHQvLyBBcyB0aGUgcmVmcmVzaCBvbiBhIFRyZWVUYWJsZSB1c2VzIHNpZGUtZWZmZWN0cywgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHBlbmRpbmcgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHQvLyBiZWZvcmUgdGhlIHNpZGUtZWZmZWN0cyBhcmUgcXVlcmllZCAoZS5nLiBmYWlsZWQgUEFUQ0ggcXVlcmllcyB0aGF0IHdvdWxkIGJlIHJlc2VudCB0b2dldGhlciB3aXRoIHNpZGUgZWZmZWN0cyBHRVQpXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRhYmxlQVBJLnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSB3YWl0aW5nIHJlZnJlc2hpbmcgTGlzdFJlcG9ydCB0YWJsZVwiLCBlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdEVkaXRTdGF0ZS5zZXRFZGl0U3RhdGVQcm9jZXNzZWQoKTtcblx0XHR9XG5cblx0XHRpZiAodXBkYXRlQWN0aW9ucykge1xuXHRcdFx0dGhpcy5fdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXMpO1xuXHRcdH1cblx0XHRjb25zdCBlbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllc1xuXHRcdFx0LmlzSW5zaWdodHNFbmFibGVkKClcblx0XHRcdC50aGVuKChpc0luc2lnaHRzRW5hYmxlZDogYm9vbGVhbikgPT4ge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgaXNJbnNpZ2h0c0VuYWJsZWQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjaGVja2luZyBpZiBpbnNpZ2h0cyBhcmUgZW5hYmxlZFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRmb3JtYXR0ZXJzID0ge1xuXHRcdHNldEFMUENvbnRyb2xNZXNzYWdlU3RyaXAoXG5cdFx0XHR0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdGFJZ25vcmVkRmllbGRzOiBzdHJpbmdbXSxcblx0XHRcdGJJc0NoYXJ0OiBib29sZWFuIHwgc3RyaW5nLFxuXHRcdFx0b0FwcGx5U3VwcG9ydGVkPzogeyBlbmFibGVTZWFyY2g6IGJvb2xlYW4gfVxuXHRcdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdFx0YklzQ2hhcnQgPSBiSXNDaGFydCA9PT0gXCJ0cnVlXCIgfHwgYklzQ2hhcnQgPT09IHRydWU7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBiSXNDaGFydCkge1xuXHRcdFx0XHRjb25zdCBhSWdub3JlZExhYmVscyA9IE1lc3NhZ2VTdHJpcC5nZXRMYWJlbHMoXG5cdFx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0b0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRvRmlsdGVyQmFyLFxuXHRcdFx0XHRcdGdldFJlc291cmNlTW9kZWwob0ZpbHRlckJhcilcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgYklzU2VhcmNoSWdub3JlZCA9ICFvQXBwbHlTdXBwb3J0ZWQ/LmVuYWJsZVNlYXJjaDtcblx0XHRcdFx0c1RleHQgPSBiSXNDaGFydFxuXHRcdFx0XHRcdD8gTWVzc2FnZVN0cmlwLmdldEFMUFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIGJJc1NlYXJjaElnbm9yZWQpXG5cdFx0XHRcdFx0OiBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckJhciwgXCJcIik7XG5cdFx0XHRcdHJldHVybiBzVGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShcIkFmdGVyXCIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0dGhpcy5fc2V0SW5pdGlhbEZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vIFJlbW92ZSB0aGUgaGFuZGxlciBvbiBiYWNrIG5hdmlnYXRpb24gdGhhdCBkaXNwbGF5cyBEcmFmdCBjb25maXJtYXRpb25cblx0XHRhd2FpdCB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbih1bmRlZmluZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgY29udGVudCBvZiBhIGN1c3RvbSB2aWV3IHVzZWQgaW4gYSBsaXN0IHJlcG9ydCBuZWVkcyB0byBiZSByZWZyZXNoZWQuXG5cdCAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBvbiB0aGUgRmlsdGVyQmFyIGFuZCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCxcblx0ICogb3Igd2hlbiBhIHRhYiB3aXRoIGN1c3RvbSBjb250ZW50IGlzIHNlbGVjdGVkLFxuXHQgKiBvciB3aGVuIHRoZSB2aWV3IGlzIGZvcmNlZCB0byBiZSByZWZyZXNoZWQgdGhyb3VnaCB0aGUgRXh0ZW5zaW9uIEFQSSBmb3IgdGhlIGxpc3QgcmVwb3J0J3MgcHVibGljIG1ldGhvZCBzZXRUYWJDb250ZW50VG9CZVJlZnJlc2hlZE9uTmV4dE9wZW5pbmcuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gZm9yIGN1c3RvbWl6YXRpb24uXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBNYXAgY29udGFpbmluZyB0aGUgZmlsdGVyIGNvbmRpdGlvbnMgb2YgdGhlIEZpbHRlckJhciwgdGhlIGN1cnJlbnRUYWJJRCxcblx0ICogYW5kIHRoZSB2aWV3IHJlZnJlc2ggY2F1c2Ugc3VjaCBhcyB0YWJDaGFuZ2VkLCBzZWFyY2gsIG9yIGZvcmNlZFJlZnJlc2guXG5cdCAqIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGUgb2YgYSBtYXA6XG5cdCAqIDxjb2RlPjxwcmU+XG5cdCAqIFx0e1xuXHQgKiBcdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHQgKiBcdFx0XHRDb3VudHJ5OiBbXG5cdCAqIFx0XHRcdFx0e1xuXHQgKiBcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIlxuXHQgKlx0XHRcdFx0XHR2YWxpZGF0ZWQ6IFwiTm90VmFsaWRhdGVkXCJcblx0ICpcdFx0XHRcdFx0dmFsdWVzOiBbXCJHZXJtYW55XCIsIC4uLl1cblx0ICogXHRcdFx0XHR9LFxuXHQgKiBcdFx0XHRcdC4uLlxuXHQgKiBcdFx0XHRdXG5cdCAqIFx0XHRcdC4uLlxuXHQgKiBcdFx0fSxcblx0ICpcdFx0Y3VycmVudFRhYklkOiBcImZlOjpDdXN0b21UYWI6OnRhYjFcIixcblx0ICpcdFx0cmVmcmVzaENhdXNlOiBcInRhYkNoYW5nZWRcIiB8IFwic2VhcmNoXCIgfCBcImZvcmNlZFJlZnJlc2hcIlxuXHQgKlx0fVxuXHQgKiA8L3ByZT48L2NvZGU+XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvblZpZXdOZWVkc1JlZnJlc2gobVBhcmFtZXRlcnM6IHVua25vd24pOiB2b2lkIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBmaWx0ZXIgb3Igc2VhcmNoIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIEZpbHRlckJhcixcblx0ICogYnV0IGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgeWV0IGJ5IHRoZSBlbmQgdXNlciB3aXRoIHRoZSAnR28nIG9yICdTZWFyY2gnIGJ1dHRvbi5cblx0ICogVHlwaWNhbGx5LCB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCB0YWIgaXMgZ3JleWVkIG91dCB1bnRpbCB0aGUgZmlsdGVycyBhcmUgdmFsaWRhdGVkLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciBjdXN0b21pemF0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGVuZGluZ0ZpbHRlcnMoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHRnZXRDdXJyZW50RW50aXR5U2V0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKS5zbGljZSgxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIG9uIHRoZSBGaWx0ZXJCYXIgaXMgcHJlc3NlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkFmdGVyQ2xlYXIoKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaW5pdGlhdGVzIHRoZSB1cGRhdGUgb2YgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgdGhlIHZpc2libGUgc3RhdGUgb2YgdGhlIERhdGFGaWVsZEZvcklCTiBidXR0b25zLlxuXHQgKiBAcGFyYW0gYVRhYmxlcyBBcnJheSBvZiB0YWJsZXMgaW4gdGhlIGxpc3QgcmVwb3J0XG5cdCAqL1xuXHRfdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXM6IFRhYmxlW10pOiB2b2lkIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlKSB7XG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5KGFJQk5BY3Rpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICogQHBhcmFtIHNSb3dQYXRoIFRoZSBwYXRoIG9mIHRoZSB0YWJsZSByb3cgY29udGV4dCB0byBiZSBzY3JvbGxlZCB0b1xuXHQgKi9cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogQ29udHJvbCkge1xuXHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KG9UYWJsZSBhcyBUYWJsZSwgc1Jvd1BhdGgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBzaWxlbnQgZm9jdXMgb24gdGhlIGZpbHRlciBmaWVsZC4gU3VwcHJlc3NlcyB0aGUgb3BlbmluZyBvZiB0aGUgdHlwZS1haGVhZCBwb3B1cC5cblx0ICogQHBhcmFtIGZpbHRlckZpZWxkIFRoZSBmaWVsZCB3aGVyZSB0aGUgZm9jdXMgc2hvdWxkIGJlIHNldCBhZnRlciB0aGUgaW5pdGlhbCBsb2FkXG5cdCAqL1xuXHRfZm9jdXNTaWxlbnQoZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkKTogdm9pZCB7XG5cdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlsdGVyRmllbGQuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0ZmlsdGVyRmllbGQuZm9jdXMoZm9jdXNJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBmb2N1cyB3aGVuIHRoZSBoZWFkZXIgaXMgZXhwYW5kZWQuXG5cdCAqIFRoZSBwcmlvcml0aWVzIGFyZTogKDEpIGZpcnN0IGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsICgyKSBzZWFyY2ggZmllbGQgaWYgZm9jdXNhYmxlIG9yIGZpcnN0IGZpbHRlciBmaWVsZCwgYW5kICgzKSBHbyBidXR0b24uXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgX2ZvY3VzV2hlbkhlYWRlckV4cGFuZGVkKGZpbHRlckJhcjogRmlsdGVyQmFyKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAob0ZpbHRlckl0ZW06IEZpbHRlckZpZWxkKSB7XG5cdFx0XHRyZXR1cm4gb0ZpbHRlckl0ZW0uZ2V0UmVxdWlyZWQoKSAmJiBvRmlsdGVySXRlbS5nZXRDb25kaXRpb25zKCkubGVuZ3RoID09PSAwO1xuXHRcdH0pO1xuXHRcdC8vRm9jdXNpbmcgb24gdGhlIGZpcnN0IGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIG9yIG9uIHRoZSBmaXJzdCBmaWx0ZXIgZmllbGQgaWYgdGhlIHRhYmxlIGRhdGEgaXMgbG9hZGVkXG5cdFx0Ly8gRG8gYSBcInNpbGVudFwiIGZvY3VzIGZvciBGaWx0ZXJGaWVsZCwgYnkgYWRkaW5nIHRoZSBzaWxlbnQgYXR0cmlidXRlLiBUaGUgc2lsZW50IGF0dHJpYnV0ZSBzdXBwcmVzc2VzIHR5cGVhaGVhZCBvcGVuaW5nLlxuXHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdFx0dGhpcy5fZm9jdXNTaWxlbnQoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgYXMgQ29udHJvbCkuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkgJiYgZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgbm8gZW1wdHkgbWFuZGF0b3J5IGZpbHRlciBmaWVsZCwgc2V0IHNpbGVudCBmb2N1cyBvbiBzZWFyY2ggZmllbGQgKGlmIGZvY3VzYWJsZSksIG90aGVyd2lzZSBvbiBmaXJzdCBmaWx0ZXIgZmllbGRcblx0XHRcdGNvbnN0IGJhc2ljU2VhcmNoRmllbGQgPSBmaWx0ZXJCYXIuZ2V0QmFzaWNTZWFyY2hGaWVsZCgpO1xuXHRcdFx0Y29uc3QgZmllbGRUb0ZvY3VzID0gYmFzaWNTZWFyY2hGaWVsZD8uaXNGb2N1c2FibGUoKSA/IGJhc2ljU2VhcmNoRmllbGQgOiBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKVswXTtcblx0XHRcdGlmIChmaWVsZFRvRm9jdXMuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdFx0dGhpcy5fZm9jdXNTaWxlbnQoZmllbGRUb0ZvY3VzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChmaWVsZFRvRm9jdXMgYXMgQ29udHJvbCkuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9Gb2N1c2luZyBvbiB0aGUgR28gYnV0dG9uXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5ieUlkKGAke3RoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpfS1idG5TZWFyY2hgKT8uZm9jdXMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgaW5pdGlhbCBmb2N1cyBpbiBhIGxpc3QgcmVwb3J0IGJhc2VkIG9uIHRoZSBVc2VyIEV4cGVyaWVuY2UgZ3VpZGVsaW5lcy5cblx0ICpcblx0ICovXG5cdGFzeW5jIF9zZXRJbml0aWFsRm9jdXMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKSxcblx0XHRcdGlzSGVhZGVyRXhwYW5kZWQgPSBkeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpLFxuXHRcdFx0ZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIEZpbHRlckJhcjtcblx0XHRpZiAoZmlsdGVyQmFyICYmICF0aGlzLl9pc0ZpbHRlckJhckhpZGRlblVzZWQoKSkge1xuXHRcdFx0Ly9FbmFibGluZyBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkcyBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0aWYgKCFmaWx0ZXJCYXIuZ2V0U2hvd01lc3NhZ2VzKCkpIHtcblx0XHRcdFx0ZmlsdGVyQmFyLnNldFNob3dNZXNzYWdlcyh0cnVlKTtcblx0XHRcdH1cblx0XHRcdGlmIChpc0hlYWRlckV4cGFuZGVkKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzV2hlbkhlYWRlckV4cGFuZGVkKGZpbHRlckJhcik7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gZXJyb3IgaXQgY2FuIGp1c3QgYmUgdGhhdCB0aGVyZSBhcmUgbm8gbGluZXMgdG8gZm9jdXNcblx0XHRcdFx0XHRcdFx0TG9nLmluZm8oXCJFcnJvciB3aGlsZSBzZXR0aW5nIGluaXRpYWwgZm9jdXMgb24gdGhlIHRhYmxlIFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhd2FpdCB0aGlzLl9nZXRUYWJsZSgpXG5cdFx0XHRcdD8uZm9jdXNSb3coMClcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdGlmIChlcnJvcikge1xuXHRcdFx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gZXJyb3IgaXQgY2FuIGp1c3QgYmUgdGhhdCB0aGVyZSBhcmUgbm8gbGluZXMgdG8gZm9jdXNcblx0XHRcdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBpbml0aWFsIGZvY3VzIG9uIHRoZSB0YWJsZSBcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPdmVycmlkZSB0byBnZXQgdGhlIGJyb3dzZXIgdGl0bGUgb2YgdGhlIExSIHBhZ2UuXG5cdCAqIEBwYXJhbSBfcGFnZVRpdGxlSW5mb3JtYXRpb24gUHJlc2VudCBwYWdlIHRpdGxlIGluZm9ybWF0aW9uXG5cdCAqIEByZXR1cm5zIFRpdGxlIGluZm9ybWF0aW9uIHRvIGJlIHVzZWQgYnkgc2hlbGwgc2VydmljZXMgZm9yIGJyb3dzZXIgdGl0bGVcblx0ICovXG5cdGFzeW5jIF9nZXRCcm93c2VyVGl0bGUoX3BhZ2VUaXRsZUluZm9ybWF0aW9uOiBUaXRsZUluZm9ybWF0aW9uKTogUHJvbWlzZTxUaXRsZUFkZGl0aW9uYWxJbmZvIHwgdW5kZWZpbmVkPiB7XG5cdFx0Ly8gV2Ugc2hhbGwgZmFsbGJhY2sgdG8gZGVmYXVsIGFwcCB0aXRsZSBpbiBjYXNlIG9mIGxpc3QgcmVwb3J0LlxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGFzeW5jIF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpOiBQcm9taXNlPHsgdGl0bGU/OiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmcgfT4ge1xuXHRcdGNvbnN0IG9NYW5pZmVzdEVudHJ5ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdHRpdGxlOiBvTWFuaWZlc3RFbnRyeS50aXRsZSxcblx0XHRcdHN1YnRpdGxlOiBvTWFuaWZlc3RFbnRyeS5zdWJUaXRsZSB8fCBcIlwiLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH0pO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2woKTogRmlsdGVyQmFyIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpOiBEeW5hbWljUGFnZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQoKSkgYXMgRHluYW1pY1BhZ2U7XG5cdH1cblxuXHRfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2woKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gSWYgdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBpcyBwYXJ0IG9mIHRoZSBET00gdHJlZSwgdGhlIFwiQWRhcHQgRmlsdGVyXCIgZGlhbG9nIGlzIG9wZW4sXG5cdFx0Ly8gYW5kIHdlIHJldHVybiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGFzIGFuIGFjdGl2ZSBjb250cm9sICh2aXNpYmxlIGZvciB0aGUgdXNlcilcblx0XHRjb25zdCBhZGFwdGF0aW9uRmlsdGVyQmFyID0gKHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyB7IGdldEluYnVpbHRGaWx0ZXI/OiBGdW5jdGlvbiB9KS5nZXRJbmJ1aWx0RmlsdGVyPy4oKTtcblx0XHRyZXR1cm4gYWRhcHRhdGlvbkZpbHRlckJhcj8uZ2V0UGFyZW50KCkgPyBhZGFwdGF0aW9uRmlsdGVyQmFyIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgX2FwcGx5QXBwU3RhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRBcHBTdGF0ZUhhbmRsZXIoKS5hcHBseUFwcFN0YXRlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRvRmlsdGVyQmFyLmVuYWJsZVJlcXVlc3RzKHRydWUpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5faXNGaWx0ZXJCYXJIaWRkZW4oKSkge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKS5zZXRDb3VudHNPdXREYXRlZCh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0U2VnbWVudGVkQnV0dG9uKHNDb250cm9sOiBzdHJpbmcpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzU2VnbWVudGVkQnV0dG9uSWQgPSAoc0NvbnRyb2wgPT09IFwiQ2hhcnRcIiA/IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCkgOiB0aGlzLl9nZXRUYWJsZSgpKT8uZGF0YShcInNlZ21lbnRlZEJ1dHRvbklkXCIpO1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHNTZWdtZW50ZWRCdXR0b25JZCk7XG5cdH1cblxuXHRfZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShzUGF0aDogc3RyaW5nKTogQ29udHJvbCB8IE1hY3JvQVBJIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb250cm9sSWQgPSB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoc1BhdGgpO1xuXHRcdHJldHVybiBjb250cm9sSWQgPyAodGhpcy5nZXRWaWV3KCkuYnlJZChjb250cm9sSWQpIGFzIENvbnRyb2wpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9keW5hbWljTGlzdFJlcG9ydElkXCIpIHx8IFwiXCI7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9maWx0ZXJCYXJJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0Z2V0Q2hhcnRDb250cm9sKCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3NpbmdsZUNoYXJ0SWRcIikgYXMgQ2hhcnRUeXBlO1xuXHR9XG5cblx0X2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2woKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1Zpc3VhbEZpbHRlckJhcklkID0gU3RhYmxlSWRIZWxwZXIuZ2VuZXJhdGUoW1widmlzdWFsRmlsdGVyXCIsIHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpXSk7XG5cdFx0cmV0dXJuIHNWaXN1YWxGaWx0ZXJCYXJJZCA/IHRoaXMuZ2V0VmlldygpLmJ5SWQoc1Zpc3VhbEZpbHRlckJhcklkKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpOiBWYXJpYW50TWFuYWdlbWVudCB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvdmFyaWFudE1hbmFnZW1lbnQvaWRcIikgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdH1cblxuXHRfZ2V0TXVsdGlNb2RlQ29udHJvbCgpOiBNdWx0aXBsZU1vZGVDb250cm9sIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGU6OkNvbnRyb2xcIikgYXMgTXVsdGlwbGVNb2RlQ29udHJvbDtcblx0fVxuXG5cdF9nZXRJY29uVGFiQmFyKCk6IEljb25UYWJCYXIge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OlRhYk11bHRpcGxlTW9kZVwiKSBhcyBJY29uVGFiQmFyO1xuXHR9XG5cblx0X2dldFRhYmxlKCk6IFRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk/LmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk/LmNvbnRlbnQ7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2w/LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPyAob0NvbnRyb2wgYXMgVGFibGUpIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVUYWJsZUlkXCIpIGFzIFRhYmxlIHwgdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRDb250cm9scyhzS2V5Pzogc3RyaW5nKTogQ29udHJvbFtdIHtcblx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiBDb250cm9sW10gPSBbXTtcblx0XHRcdGNvbnN0IG9UYWJNdWx0aU1vZGUgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuY29udGVudDtcblx0XHRcdG9UYWJNdWx0aU1vZGUuZ2V0SXRlbXMoKS5mb3JFYWNoKChvSXRlbTogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoKG9JdGVtIGFzIFRhYkNvbnRhaW5lckl0ZW0pLmdldEtleSgpKSBhcyBDb250cm9sO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wgJiYgc0tleSkge1xuXHRcdFx0XHRcdGlmICgob0l0ZW0gYXMgVGFiQ29udGFpbmVySXRlbSkuZ2V0S2V5KCkuaW5jbHVkZXMoYGZlOjoke3NLZXl9YCkpIHtcblx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob0NvbnRyb2wgIT09IHVuZGVmaW5lZCAmJiBvQ29udHJvbCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gYUNvbnRyb2xzO1xuXHRcdH0gZWxzZSBpZiAoc0tleSA9PT0gXCJDaGFydFwiKSB7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0cmV0dXJuIG9DaGFydCA/IFtvQ2hhcnRdIDogW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRyZXR1cm4gb1RhYmxlID8gW29UYWJsZV0gOiBbXTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0RGVmYXVsdFBhdGgoKTogc3RyaW5nIHtcblx0XHRjb25zdCBkZWZhdWx0UGF0aCA9IExpc3RSZXBvcnRUZW1wbGF0aW5nLmdldERlZmF1bHRQYXRoKHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi92aWV3c1wiKSB8fCBbXSk7XG5cdFx0c3dpdGNoIChkZWZhdWx0UGF0aCkge1xuXHRcdFx0Y2FzZSBcInByaW1hcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHRjYXNlIFwic2Vjb25kYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlO1xuXHRcdFx0Y2FzZSBcImJvdGhcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHdpdGggTXVsdGlwbGUgVGFibGUgbW9kZS5cblx0ICogQHJldHVybnMgSXMgTXVsdGlwbGUgVGFibGUgbW9kZSBzZXQ/XG5cdCAqL1xuXHRfaXNNdWx0aU1vZGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL211bHRpVmlld3NDb250cm9sXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB0byBsb2FkIGRhdGEgYXQgc3RhcnQgdXAuXG5cdCAqIEByZXR1cm5zIElzIEluaXRMb2FkIGVuYWJsZWQ/XG5cdCAqL1xuXHRfaXNJbml0TG9hZEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaW5pdExvYWRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZDtcblx0XHRyZXR1cm4gaW5pdExvYWRNb2RlID09PSBJbml0aWFsTG9hZE1vZGUuRW5hYmxlZDtcblx0fVxuXG5cdF9oYXNNdWx0aVZpc3VhbGl6YXRpb25zKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvaGFzTXVsdGlWaXN1YWxpemF0aW9uc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc3VzcGVuZCBzZWFyY2ggb24gdGhlIGZpbHRlciBiYXIuIFRoZSBpbml0aWFsIGxvYWRpbmcgb2YgZGF0YSBpcyBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBJbml0TG9hZCAtIERpc2FibGVkL0F1dG8uXG5cdCAqIEl0IGlzIGVuYWJsZWQgbGF0ZXIgd2hlbiB0aGUgdmlldyBzdGF0ZSBpcyBzZXQsIHdoZW4gaXQgaXMgcG9zc2libGUgdG8gcmVhbGl6ZSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzLlxuXHQgKi9cblx0X2Rpc2FibGVJbml0TG9hZCgpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0Ly8gY2hlY2sgZm9yIGZpbHRlciBiYXIgaGlkZGVuXG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0ZmlsdGVyQmFyLmVuYWJsZVJlcXVlc3RzKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCBieSBmbGV4IHRvIGRldGVybWluZSBpZiB0aGUgYXBwbHlBdXRvbWF0aWNhbGx5IHNldHRpbmcgb24gdGhlIHZhcmlhbnQgaXMgdmFsaWQuXG5cdCAqIENhbGxlZCBvbmx5IGZvciBTdGFuZGFyZCBWYXJpYW50IGFuZCBvbmx5IHdoZW4gdGhlcmUgaXMgZGlzcGxheSB0ZXh0IHNldCBmb3IgYXBwbHlBdXRvbWF0aWNhbGx5IChGRSBvbmx5IHNldHMgaXQgZm9yIEF1dG8pLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZGF0YSBzaG91bGQgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50KCk6IGJvb2xlYW4ge1xuXHRcdC8vIFdlIGFsd2F5cyByZXR1cm4gZmFsc2UgYW5kIHRha2UgY2FyZSBvZiBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZSB0aGUgc2V0dGluZ3MgZm9yIGluaXRpYWwgbG9hZCBiYXNlZCBvblxuXHQgKiAtIG1hbmlmZXN0IHNldHRpbmcgaW5pdExvYWQgLSBFbmFibGVkL0Rpc2FibGVkL0F1dG9cblx0ICogLSB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdmFyaWFudFxuXHQgKiAtIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnNcblx0ICogV2UgZGlzYWJsZSB0aGUgZmlsdGVyIGJhciBzZWFyY2ggYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5hYmxlIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRfc2V0SW5pdExvYWQoKTogdm9pZCB7XG5cdFx0Ly8gaWYgaW5pdExvYWQgaXMgRGlzYWJsZWQgb3IgQXV0bywgc3dpdGNoIG9mZiBmaWx0ZXIgYmFyIHNlYXJjaCB0ZW1wb3JhcmlseSBhdCBzdGFydFxuXHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUluaXRMb2FkKCk7XG5cdFx0fVxuXHRcdC8vIHNldCBob29rIGZvciBmbGV4IGZvciB3aGVuIHN0YW5kYXJkIHZhcmlhbnQgaXMgc2V0IChhdCBzdGFydCBvciBieSB1c2VyIGF0IHJ1bnRpbWUpXG5cdFx0Ly8gcmVxdWlyZWQgdG8gb3ZlcnJpZGUgdGhlIHVzZXIgc2V0dGluZyAnYXBwbHkgYXV0b21hdGljYWxseScgYmVoYXZpb3VyIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzXG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnRJZCA9IExpc3RSZXBvcnRUZW1wbGF0aW5nLmdldFZhcmlhbnRCYWNrUmVmZXJlbmNlKFxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXREYXRhKCkgYXMgTGlzdFJlcG9ydERlZmluaXRpb25cblx0XHQpO1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdmFyaWFudE1hbmFnZW1lbnRJZCAmJiAodGhpcy5nZXRWaWV3KCkuYnlJZCh2YXJpYW50TWFuYWdlbWVudElkKSBhcyBWYXJpYW50TWFuYWdlbWVudCk7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHQoXG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50IGFzIHsgcmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudD86IEZ1bmN0aW9uIH1cblx0XHRcdCk/LnJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQ/Lih0aGlzLl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRfc2V0U2hhcmVNb2RlbCgpOiB2b2lkIHtcblx0XHQvLyBUT0RPOiBkZWFjdGl2YXRlZCBmb3Igbm93IC0gY3VycmVudGx5IHRoZXJlIGlzIG5vIF90ZW1wbFByaXYgYW55bW9yZSwgdG8gYmUgZGlzY3Vzc2VkXG5cdFx0Ly8gdGhpcyBtZXRob2QgaXMgY3VycmVudGx5IG5vdCBjYWxsZWQgYW55bW9yZSBmcm9tIHRoZSBpbml0IG1ldGhvZFxuXG5cdFx0Y29uc3QgZm5HZXRVc2VyID0gT2JqZWN0UGF0aC5nZXQoXCJzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRVc2VyXCIpO1xuXHRcdC8vdmFyIG9NYW5pZmVzdCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWlcIik7XG5cdFx0Ly92YXIgc0Jvb2ttYXJrSWNvbiA9IChvTWFuaWZlc3QgJiYgb01hbmlmZXN0Lmljb25zICYmIG9NYW5pZmVzdC5pY29ucy5pY29uKSB8fCBcIlwiO1xuXG5cdFx0Ly9zaGFyZU1vZGVsOiBIb2xkcyBhbGwgdGhlIHNoYXJpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGluZm8gdXNlZCBpbiBYTUwgdmlld1xuXHRcdGNvbnN0IG9TaGFyZUluZm8gPSB7XG5cdFx0XHRib29rbWFya1RpdGxlOiBkb2N1bWVudC50aXRsZSwgLy9UbyBuYW1lIHRoZSBib29rbWFyayBhY2NvcmRpbmcgdG8gdGhlIGFwcCB0aXRsZS5cblx0XHRcdGJvb2ttYXJrQ3VzdG9tVXJsOiBmdW5jdGlvbiAoKTogc3RyaW5nIHtcblx0XHRcdFx0Y29uc3Qgc0hhc2ggPSBoYXNoZXIuZ2V0SGFzaCgpO1xuXHRcdFx0XHRyZXR1cm4gc0hhc2ggPyBgIyR7c0hhc2h9YCA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0fSxcblx0XHRcdC8qXG5cdFx0XHRcdFx0XHRcdFRvIGJlIGFjdGl2YXRlZCBvbmNlIHRoZSBGTFAgc2hvd3MgdGhlIGNvdW50IC0gc2VlIGNvbW1lbnQgYWJvdmVcblx0XHRcdFx0XHRcdFx0Ym9va21hcmtTZXJ2aWNlVXJsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHQvL3ZhciBvVGFibGUgPSBvVGFibGUuZ2V0SW5uZXJUYWJsZSgpOyBvVGFibGUgaXMgYWxyZWFkeSB0aGUgc2FwLmZlIHRhYmxlIChidXQgbm90IHRoZSBpbm5lciBvbmUpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHVzZSB0YWJsZS5nZXRMaXN0QmluZGluZ0luZm8gaW5zdGVhZCBvZiB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdFx0XHRcdHZhciBvQmluZGluZyA9IG9UYWJsZS5nZXRCaW5kaW5nKFwicm93c1wiKSB8fCBvVGFibGUuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZyA/IGZuR2V0RG93bmxvYWRVcmwob0JpbmRpbmcpIDogXCJcIjtcblx0XHRcdFx0XHRcdFx0fSwqL1xuXHRcdFx0aXNTaGFyZUluSmFtQWN0aXZlOiAhIWZuR2V0VXNlciAmJiBmbkdldFVzZXIoKS5pc0phbUFjdGl2ZSgpXG5cdFx0fTtcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZVByaXZhdGVNb2RlbCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcIl90ZW1wbFByaXZcIikgYXMgSlNPTk1vZGVsO1xuXHRcdG9UZW1wbGF0ZVByaXZhdGVNb2RlbC5zZXRQcm9wZXJ0eShcIi9saXN0UmVwb3J0L3NoYXJlXCIsIG9TaGFyZUluZm8pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIGZpZWxkcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byB0aGUgZmlsdGVyIGJhciAodGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgQUxQIHNjZW5hcmlvKS5cblx0ICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHQgKiBAcGFyYW0gb0ZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKi9cblx0X3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcjogRmlsdGVyQmFyKTogdm9pZCB7XG5cdFx0Y29uc3QgbUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0XHRjb25zdCBpZ25vcmVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fSxcblx0XHRcdGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLFxuXHRcdFx0YUNoYXJ0cyA9IHRoaXMuX2dldENvbnRyb2xzKFwiQ2hhcnRcIik7XG5cblx0XHRpZiAoIWFUYWJsZXMubGVuZ3RoIHx8ICFhQ2hhcnRzLmxlbmd0aCkge1xuXHRcdFx0Ly8gSWYgdGhlcmUncyBub3QgYSB0YWJsZSBhbmQgYSBjaGFydCwgd2UncmUgbm90IGluIHRoZSBBTFAgY2FzZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZvciB0aGUgbW9tZW50LCB0aGVyZSdzIG5vdGhpbmcgZm9yIHRhYmxlcy4uLlxuXHRcdGFDaGFydHMuZm9yRWFjaChmdW5jdGlvbiAob0NoYXJ0KSB7XG5cdFx0XHRjb25zdCBzQ2hhcnRFbnRpdHlQYXRoID0gb0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c0NoYXJ0RW50aXR5U2V0ID0gc0NoYXJ0RW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gYCR7c0NoYXJ0RW50aXR5U2V0fUNoYXJ0YDtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzQ2FjaGVLZXldID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29udHJvbHMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgc2V0dGluZyB3aGV0aGVyIEZpbHRlckJhciBpcyBoaWRkZW4gYmFzZWQgb24gdGhlIG1hbmlmZXN0IHNldHRpbmcgJ2hpZGVGaWx0ZXJCYXInLlxuXHQgKiBTaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIF9pc0ZpbHRlckJhckhpZGRlblVzZWQgYXMgaXQgbWF5IGhhdmUgb3ZlcnJpZGRlbiB0aGlzIHNldHRpbmcuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIEZpbHRlckJhciBpcyBoaWRkZW4sIGZhbHNlIGlmIHVua25vd25cblx0ICovXG5cdF9pc0ZpbHRlckJhckhpZGRlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5oaWRlRmlsdGVyQmFyIHx8IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBzZXR0aW5nIHdoZXRoZXIgRmlsdGVyQmFyIGlzIGhpZGRlbiBidXQgc3RpbGwgZXhpc3RzIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5nICd1c2VIaWRkZW5GaWx0ZXJCYXInLlxuXHQgKiBTaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIF9pc0ZpbHRlckJhckhpZGRlbiBhcyBpdCBjYW4gYWxzbyBoaWRlIHRoZSBGaWx0ZXJCYXIuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIEZpbHRlckJhciBpcyBoaWRkZW4sIGZhbHNlIGlmIHVua25vd25cblx0ICovXG5cdF9pc0ZpbHRlckJhckhpZGRlblVzZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudXNlSGlkZGVuRmlsdGVyQmFyIHx8IGZhbHNlO1xuXHR9XG5cblx0X2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQsIGtleTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IEJvb2xlYW4ge1xuXHRcdGlmICghdmFyaWFudE1hbmFnZW1lbnQgfHwgIWtleSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50cyA9IHZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB2YXJpYW50cy5maW5kKGZ1bmN0aW9uICh2YXJpYW50KSB7XG5cdFx0XHRyZXR1cm4gdmFyaWFudCAmJiB2YXJpYW50LmdldEtleSgpID09PSBrZXk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChjdXJyZW50VmFyaWFudCAmJiBjdXJyZW50VmFyaWFudC5nZXRQcm9wZXJ0eShcImV4ZWN1dGVPblNlbGVjdFwiKSkgfHwgZmFsc2U7XG5cdH1cblxuXHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2gob1ZNOiBWYXJpYW50TWFuYWdlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmluaXRpYWxMb2FkID09PSBJbml0aWFsTG9hZE1vZGUuQXV0byAmJlxuXHRcdFx0KCFvVk0gfHwgb1ZNLmdldFN0YW5kYXJkVmFyaWFudEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb0NvbmRpdGlvbnMpIHtcblx0XHRcdFx0XHQvLyBpZ25vcmUgZmlsdGVycyBzdGFydGluZyB3aXRoICQgKGUuZy4gJHNlYXJjaCwgJGVkaXRTdGF0ZSlcblx0XHRcdFx0XHRpZiAob1ZNICYmICFzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpICYmIEFycmF5LmlzQXJyYXkob0NvbmRpdGlvbnNbc0tleV0pICYmIG9Db25kaXRpb25zW3NLZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gbG9hZCBkYXRhIGFzIHBlciB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdGhlIHZhcmlhbnRcblx0XHRcdFx0XHRcdGNvbnN0IHN0YW5kYXJkVmFyaWFudCA9IG9WTS5nZXRWYXJpYW50cygpLmZpbmQoKHZhcmlhbnQpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhcmlhbnQuZ2V0S2V5KCkgPT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3RhbmRhcmRWYXJpYW50ICYmIHN0YW5kYXJkVmFyaWFudC5nZXRFeGVjdXRlT25TZWxlY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3VwZGF0ZVRhYmxlKG9UYWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRpZiAoIW9UYWJsZS5pc1RhYmxlQm91bmQoKSB8fCB0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMpIHtcblx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF91cGRhdGVDaGFydChvQ2hhcnQ6IENoYXJ0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSAob0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBDaGFydERlbGVnYXRlKS5fZ2V0Q2hhcnQob0NoYXJ0KTtcblx0XHRpZiAoIShvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5pc0JvdW5kKFwiZGF0YVwiKSkgfHwgdGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzKSB7XG5cdFx0XHQob0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBDaGFydERlbGVnYXRlKS5yZWJpbmQob0NoYXJ0LCBvSW5uZXJDaGFydC5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIikpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmlsdGVyIHRvZ2dsZSBidXR0b24uXG5cdCAqIEBwYXJhbSBidXR0b25WaXNpYmxlIEZpbHRlciB0b2dnbGUgYnV0dG9uIHZpc2liaWxpdHlcblx0ICovXG5cdHNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoYnV0dG9uVmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRmaWx0ZXJCYXI/LmdldFNlZ21lbnRlZEJ1dHRvbigpPy5zZXRWaXNpYmxlKGJ1dHRvblZpc2libGUpO1xuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25GaWx0ZXJMYXlvdXRTd2l0Y2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQ8e30sIENvbnRlbnRTd2l0Y2hlcj4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRLZXkgPSBvRXZlbnQuZ2V0U291cmNlKCkuc2VsZWN0ZWRLZXk7XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvdmFyaWFudE1hbmFnZW1lbnQvcGFnZUlkXCIpO1xuXHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdGlmIChjdXJyZW50S2V5ID09PSBcImFpXCIpIHtcblx0XHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudC5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudC5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbklubGluZUVkaXRTYXZlKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRGbG93LmlubGluZUVkaXRTYXZlKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlclNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIS5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJzQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBGaWx0ZXJCYXJCYXNlJEZpbHRlcnNDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBQZW5kaW5nIGZpbHRlcnMgaW50byBGaWx0ZXJCYXIgdG8gYmUgdXNlZCBmb3IgY3VzdG9tIHZpZXdzXG5cdFx0XHRcdHRoaXMub25QZW5kaW5nRmlsdGVycygpO1xuXG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQob0ZpbHRlckJhciwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSAob0V2ZW50IGFzIFVJNUV2ZW50KS5nZXRQYXJhbWV0ZXJzKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHBhcmFtZXRlcnMub3JpZ2luYWxTb3VyY2UgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFyaWFudEtleSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIik7XG5cdFx0XHRjb25zdCBtdWx0aU1vZGVDb250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXG5cdFx0XHRpZiAobXVsdGlNb2RlQ29udHJvbCAmJiAhdmFyaWFudE1hbmFnZW1lbnQ/LmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLkFjdGlvblRvb2xiYXJcIikpIHtcblx0XHRcdFx0Ly9Ob3QgYSBDb250cm9sIFZhcmlhbnRcblx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0VGltZW91dCBjYXVzZSB0aGUgdmFyaWFudCBuZWVkcyB0byBiZSBhcHBsaWVkIGJlZm9yZSBqdWRnaW5nIHRoZSBhdXRvIHNlYXJjaCBvciB1cGRhdGluZyB0aGUgYXBwIHN0YXRlXG5cdFx0XHRzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgPSBmaWx0ZXJCYXI/LmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAoZmlsdGVySXRlbSkge1xuXHRcdFx0XHRcdHJldHVybiBmaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgZmlsdGVySXRlbS5nZXRDb25kaXRpb25zKCkubGVuZ3RoID09PSAwO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCh2YXJpYW50TWFuYWdlbWVudCkpIHtcblx0XHRcdFx0XHQvLyB0aGUgYXBwIHN0YXRlIHdpbGwgYmUgdXBkYXRlZCB2aWEgb25TZWFyY2ggaGFuZGxlclxuXHRcdFx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSEuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0XHRcdGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpKSB7XG5cdFx0XHRcdFx0bXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlISEhXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSxcblx0XHRvblNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7IC8vIG9uc2VhcmNoIGlzIGNhbGxlZCBvbmx5IGlmIHRoZSBmaWx0ZXJiYXIgZXhpc3RzXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGJIaWRlRHJhZnQgPSBGaWx0ZXJVdGlscy5nZXRFZGl0U3RhdGVJc0hpZGVEcmFmdChvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGJIaWRlRHJhZnQpO1xuXHRcdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdGlmICghdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdH1cblx0XHRcdGlmIChvTWRjQ2hhcnQpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZSBib3VuZCBhY3Rpb25zIFRPRE86IHRoaXMgY2xlYXJzIGV2ZXJ5dGhpbmcgZm9yIHRoZSBjaGFydD9cblx0XHRcdFx0KG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcIlwiLCB7fSk7XG5cblx0XHRcdFx0Y29uc3Qgb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly9sb2dpYyBmb3IgZXhwYW5zaW9uIG9yIGNvbGxhcHNlIG9mIGZpbHRlciBiYXIgc3RhcnRzXG5cdFx0XHRpZiAoIURldmljZS5zeXN0ZW0uZGVza3RvcCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmIChkeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdGR5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL3NldHRpbmcgaXQgdG8gZmFsc2Ugc28gdGhhdCBmdXJ0aGVyIHNlYXJjaCBvciAnR28nIHRyaWdnZXJzIHdvbid0IGNvbGxhcHNlIHRoZSBmaWx0ZXIgYmFyXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWRcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzdG9yZSBmaWx0ZXIgYmFyIGNvbmRpdGlvbnMgdG8gdXNlIGxhdGVyIHdoaWxlIG5hdmlnYXRpb25cblx0XHRcdFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUob0ZpbHRlckJhcilcblx0XHRcdFx0LnRoZW4oKG9FeHRlcm5hbFN0YXRlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0gb0V4dGVybmFsU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGlmIChEZXZpY2Uuc3lzdGVtLnBob25lKSB7XG5cdFx0XHRcdGNvbnN0IG9EeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQodHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdFx0XHR0aGlzLnNldEZpbHRlclRvZ2dsZVZpc2liaWxpdHkoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChcblx0XHRcdG9Db250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHNPdXRib3VuZFRhcmdldDogc3RyaW5nLFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgZGF0YTogdW5rbm93biB9LCBDaGFydFR5cGU+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0Q29udGVudCgpIGFzIENoYXJ0LFxuXHRcdFx0XHRvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpLFxuXHRcdFx0XHRhRGF0YSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJkYXRhXCIpLFxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKGFEYXRhKSB7XG5cdFx0XHRcdENoYXJ0VXRpbHMuc2V0Q2hhcnRGaWx0ZXJzKG9NZGNDaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzVGVtcGxhdGVDb250ZW50VmlldyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0KSB7XG5cdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKG9UYWJsZSkge1xuXHRcdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZEtleTogc3RyaW5nID1cblx0XHRcdFx0KG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0pLnNlbGVjdGVkS2V5IHx8IChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIHsga2V5OiBzdHJpbmcgfSkua2V5O1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIHNlbGVjdGVkS2V5KTtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXG5cdFx0XHRzd2l0Y2ggKHNlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTpcblx0XHRcdFx0XHRpZiAob1RhYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0OlxuXHRcdFx0XHRcdGlmIChvQ2hhcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCBhcyBDaGFydCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkOlxuXHRcdFx0XHRcdGlmIChvVGFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChvQ2hhcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCBhcyBDaGFydCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0Ly8gc2V0VGltZW91dCBjYXVzZSB0aGUgdmFyaWFudCBuZWVkcyB0byBiZSBhcHBsaWVkIGJlZm9yZSBqdWRnaW5nIHRoZSBhdXRvIHNlYXJjaCBvciB1cGRhdGluZyB0aGUgYXBwIHN0YXRlXG5cdFx0XHR0aGlzLmZvY3VzSGFuZGxpbmdGb3JTZWdtZW50ZWRCdXR0b24oc2VsZWN0ZWRLZXkpO1xuXHRcdH0sXG5cdFx0b25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBldmVudDogRHluYW1pY1BhZ2VUaXRsZSRTdGF0ZUNoYW5nZUV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRcdHRoaXMuc2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eSghIWV2ZW50LmdldFBhcmFtZXRlcihcImlzRXhwYW5kZWRcIikpO1xuXHRcdFx0XHRpZiAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCkuYW5ub3VuY2UoXG5cdFx0XHRcdFx0XHRmaWx0ZXJCYXIuZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpLmZpbHRlcnNUZXh0IGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2VNb2RlLkFzc2VydGl2ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgZm9jdXMgZm9yIHRoZSBzZWdtZW50ZWQgYnV0dG9uIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBrZXkuXG5cdCAqIEBwYXJhbSBzZWxlY3RlZEtleSBUaGUga2V5IHJlcHJlc2VudGluZyB0aGUgc2VsZWN0ZWQgdGVtcGxhdGUgY29udGVudCB2aWV3XG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uKHNlbGVjdGVkS2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0bGV0IHNlZ21lbnRlZEJ1dHRvbklkOiBzdHJpbmc7XG5cdFx0c3dpdGNoIChzZWxlY3RlZEtleSkge1xuXHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlOlxuXHRcdFx0XHRzZWdtZW50ZWRCdXR0b25JZCA9IGdlbmVyYXRlKFtvVGFibGU/LmdldElkKCksIFwiU2VnbWVudGVkQnV0dG9uXCIsIFwiVGVtcGxhdGVDb250ZW50Vmlld1wiXSk7XG5cdFx0XHRcdHRoaXMuYWRkRm9jdXNEZWxlZ2F0ZShzZWdtZW50ZWRCdXR0b25JZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0OlxuXHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDpcblx0XHRcdFx0c2VnbWVudGVkQnV0dG9uSWQgPSBnZW5lcmF0ZShbb0NoYXJ0Py5nZXRJZCgpLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pO1xuXHRcdFx0XHR0aGlzLmFkZEZvY3VzRGVsZWdhdGUoc2VnbWVudGVkQnV0dG9uSWQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGV2ZW50IGRlbGVnYXRlIHRvIGEgY29udHJvbCBhbmQgc2V0cyBmb2N1cyBvbiBpdC5cblx0ICogQHBhcmFtIHNlZ21lbnRlZEJ1dHRvbklkIFRoZSBjb250cm9sIHRvIHdoaWNoIHRoZSBldmVudCBkZWxlZ2F0ZSB3aWxsIGJlIGFkZGVkLlxuXHQgKi9cblx0YWRkRm9jdXNEZWxlZ2F0ZShzZWdtZW50ZWRCdXR0b25JZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2VnbWVudGVkQnV0dG9uID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzZWdtZW50ZWRCdXR0b25JZCk7XG5cdFx0aWYgKHNlZ21lbnRlZEJ1dHRvbikge1xuXHRcdFx0Y29uc3QgZXZlbnREZWxlZ2F0ZSA9IHtcblx0XHRcdFx0b25BZnRlclJlbmRlcmluZzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHNlZ21lbnRlZEJ1dHRvbi5mb2N1cygpO1xuXHRcdFx0XHRcdHNlZ21lbnRlZEJ1dHRvbi5yZW1vdmVFdmVudERlbGVnYXRlKGV2ZW50RGVsZWdhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0c2VnbWVudGVkQnV0dG9uLmFkZEV2ZW50RGVsZWdhdGUoZXZlbnREZWxlZ2F0ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIFNlbGVjdGlvbiBWYXJpYW50LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIE1EQyBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHQgKi9cblx0YXN5bmMgX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChmaWx0ZXJCYXI6IEZpbHRlckJhciwgaW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRjb25zdCBzdiA9IGF3YWl0IGZpbHRlckJhckFQSS5nZXRTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImZpbHRlckJhclNlbGVjdGlvblZhcmlhbnRcIiwgc3YpO1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBFcnJvciBmZXRjaGluZyBzZWxlY3Rpb24gdmFyaWFudCBvbiBmaWx0ZXIgY2hhbmdlOiAke21lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIFNlbGVjdGlvbiBWYXJpYW50IGZyb20gaW50ZXJuYWwgbW9kZWwuXG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvblZhcmlhbnRcblx0ICovXG5cdGdldEZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoKTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdHJldHVybiAoaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudFwiKSBhcyBTZWxlY3Rpb25WYXJpYW50KSB8fCBuZXcgU2VsZWN0aW9uVmFyaWFudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIG1lc3NhZ2UgYnV0dG9uIGluIHRoZSBmb290ZXIgaW4gY2FzZSB0aGVyZSBpcyBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqL1xuXHRoYW5kbGVNZXNzYWdlQnV0dG9uVmlzaWJpbGl0eShldmVudDogVUk1RXZlbnQ8eyB2aXNpYmxlOiBib29sZWFuIH0sIE1lc3NhZ2VCdXR0b24+KTogdm9pZCB7XG5cdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcInZpc2libGVcIikpIHtcblx0XHRcdHRoaXMuc2V0U2hvd0Zvb3RlcihldmVudC5nZXRQYXJhbWV0ZXIoXCJ2aXNpYmxlXCIpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtRUEsTUFBTUEsbUJBQW1CLEdBQUdDLFdBQVcsQ0FBQ0QsbUJBQW1CO0lBQzFERSxlQUFlLEdBQUdELFdBQVcsQ0FBQ0MsZUFBZTs7RUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBLElBTU1DLG9CQUFvQixJQUFBQyxJQUFBLEdBRHpCQyxjQUFjLENBQUMsa0RBQWtELENBQUMsRUFBQUMsS0FBQSxHQUVqRUMsY0FBYyxDQUNkQyxlQUFlLENBQUNDLFFBQVEsQ0FBQztJQUN4QkMsY0FBYyxFQUFFLFNBQUFBLENBQUEsRUFBaUM7TUFDL0MsSUFBSSxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxDQUEwQkMsZUFBZSxDQUFDLENBQUM7SUFDM0U7RUFDRCxDQUFDLENBQ0YsQ0FBQyxFQUFBQyxLQUFBLEdBR0FQLGNBQWMsQ0FDZFEsNkJBQTZCLENBQUNOLFFBQVEsQ0FBQztJQUN0Q08sWUFBWSxFQUFFLFNBQUFBLENBQUEsRUFBK0M7TUFDNUQsT0FBUSxJQUFJLENBQUNDLElBQUksQ0FBMEJDLG1CQUFtQixDQUFDLENBQUM7SUFDakU7RUFDRCxDQUFDLENBQ0YsQ0FBQyxFQUFBQyxLQUFBLEdBR0FaLGNBQWMsQ0FBQ2EsV0FBVyxDQUFD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
940
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJfZGVjMyIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0RW50aXR5U2V0IiwiYmFzZSIsImdldEN1cnJlbnRFbnRpdHlTZXQiLCJfZGVjNCIsIlNpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHNPdmVycmlkZSIsIl9kZWM1IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJfZGVjNiIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIl9kZWM4IiwiS1BJTWFuYWdlbWVudCIsIl9kZWM5IiwiUGxhY2Vob2xkZXIiLCJfZGVjMTAiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjMTEiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTIiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTQiLCJleHRlbnNpYmxlIiwiX2RlYzE1IiwiX2RlYzE2IiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfUGFnZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQXJyYXkiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsImRhdGEiLCJnZXRSZXNvdXJjZU1vZGVsIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiaGFuZGxlcnMiLCJvbkZpbHRlckxheW91dFN3aXRjaCIsIm9FdmVudCIsImN1cnJlbnRLZXkiLCJnZXRTb3VyY2UiLCJzZWxlY3RlZEtleSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkiLCJzZXRWaXNpYmxlIiwib25JbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXRGbG93IiwiaW5saW5lRWRpdFNhdmUiLCJvbkZpbHRlclNlYXJjaCIsImZpbHRlckJhckFQSSIsImdldFBhcmVudCIsInRyaWdnZXJTZWFyY2giLCJvbkZpbHRlcnNDaGFuZ2VkIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvblBlbmRpbmdGaWx0ZXJzIiwiZ2V0UGFyYW1ldGVyIiwic2V0UHJvcGVydHkiLCJfc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50Iiwib25WYXJpYW50U2VsZWN0ZWQiLCJwYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsIm9yaWdpbmFsU291cmNlIiwiY3VycmVudFZhcmlhbnRLZXkiLCJtdWx0aU1vZGVDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJpc0EiLCJpbnZhbGlkYXRlQ29udGVudCIsInNldEZyZWV6ZUNvbnRlbnQiLCJzZXRUaW1lb3V0IiwiZmlsdGVyQmFyIiwiZHluYW1pY1BhZ2UiLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sIiwiZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIiwiZ2V0RmlsdGVySXRlbXMiLCJmaW5kIiwiZmlsdGVySXRlbSIsImdldFJlcXVpcmVkIiwiZ2V0Q29uZGl0aW9ucyIsInNldEhlYWRlckV4cGFuZGVkIiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwiX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwib25WYXJpYW50U2F2ZWQiLCJvblNlYXJjaCIsIm9NZGNDaGFydCIsImdldENoYXJ0Q29udHJvbCIsImJIaWRlRHJhZnQiLCJGaWx0ZXJVdGlscyIsImdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0IiwiX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvUGFnZUludGVybmFsTW9kZWxDb250ZXh0Iiwic1RlbXBsYXRlQ29udGVudFZpZXciLCJnZXRQcm9wZXJ0eSIsImdldFBhdGgiLCJDaGFydCIsImhhc1BlbmRpbmdDaGFydENoYW5nZXMiLCJUYWJsZSIsImhhc1BlbmRpbmdUYWJsZUNoYW5nZXMiLCJEZXZpY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwiZ2V0SGVhZGVyRXhwYW5kZWQiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJ0aGVuIiwib0V4dGVybmFsU3RhdGUiLCJmaWx0ZXJCYXJDb25kaXRpb25zIiwiZmlsdGVyIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsInBob25lIiwib0R5bmFtaWNQYWdlIiwiX2lzSW5pdExvYWRFbmFibGVkIiwic2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eSIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsIm9Db250cm9sbGVyIiwic091dGJvdW5kVGFyZ2V0Iiwib0NvbnRleHQiLCJzQ3JlYXRlUGF0aCIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCIsImdldENvbnRlbnQiLCJvVGFibGUiLCJfZ2V0VGFibGUiLCJhRGF0YSIsIkNoYXJ0VXRpbHMiLCJzZXRDaGFydEZpbHRlcnMiLCJyZWJpbmQiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJrZXkiLCJvQ2hhcnQiLCJfdXBkYXRlVGFibGUiLCJfdXBkYXRlQ2hhcnQiLCJIeWJyaWQiLCJmb2N1c0hhbmRsaW5nRm9yU2VnbWVudGVkQnV0dG9uIiwib25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkIiwiZXZlbnQiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJhbm5vdW5jZSIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwiZ2V0T3duZXJDb21wb25lbnQiLCJ1aU1vZGVsQ29udGV4dCIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiYWxwQ29udGVudFZpZXciLCJfZ2V0RGVmYXVsdFBhdGgiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsIndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbiIsIl9zZXRJbml0TG9hZCIsImlzRWRpdGFibGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImR5bm1pY1BhZ2VIZWFkZXJUaXRsZSIsImdldFRpdGxlIiwiYnJlYWRjcnVtYnNCQiIsImdldEJyZWFkY3J1bWJzIiwic2V0QnJlYWRjcnVtYkxpbmtzIiwib25FeGl0IiwiZGVzdHJveSIsImludGVybmFsTW9kZWxDb250ZXh0IiwicGFnZVJlYWR5Iiwid2FpdEZvciIsIl9hcHBseUFwcFN0YXRlIiwiQ29tbW9uVXRpbHMiLCJpc0FwcENvbXBvbmVudEJ1c3kiLCJhVGFibGVzIiwiX2dldENvbnRyb2xzIiwidXBkYXRlQWN0aW9ucyIsIkVkaXRTdGF0ZSIsImlzRWRpdFN0YXRlRGlydHkiLCJ0YWJsZSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwidGFibGVBUEkiLCJnZXRSb3V0aW5nU2VydmljZSIsIndhaXRGb3JCaW5kaW5nQ2xlYW51cCIsImF0dGFjaEV2ZW50T25jZSIsIl91cGRhdGVUYWJsZUFjdGlvbnMiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsImdldE1vZGVsIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsImUiLCJ3YXJuaW5nIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImlzSW5zaWdodHNFbmFibGVkIiwib25QYWdlUmVhZHkiLCJtUGFyYW1ldGVycyIsImZvcmNlRm9jdXMiLCJfc2V0SW5pdGlhbEZvY3VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwidW5kZWZpbmVkIiwib25WaWV3TmVlZHNSZWZyZXNoIiwic2xpY2UiLCJvbkFmdGVyQ2xlYXIiLCJhSUJOQWN0aW9ucyIsImZvckVhY2giLCJnZXRJQk5BY3Rpb25zIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJ1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5IiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9mb2N1c1NpbGVudCIsImZpbHRlckZpZWxkIiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiX2ZvY3VzV2hlbkhlYWRlckV4cGFuZGVkIiwib0ZpbHRlckl0ZW0iLCJiYXNpY1NlYXJjaEZpZWxkIiwiZ2V0QmFzaWNTZWFyY2hGaWVsZCIsImZpZWxkVG9Gb2N1cyIsImlzRm9jdXNhYmxlIiwiYnlJZCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sSWQiLCJpc0hlYWRlckV4cGFuZGVkIiwiX2lzRmlsdGVyQmFySGlkZGVuVXNlZCIsIndoZW5Jbml0aWFsaXplZCIsImdldFNob3dNZXNzYWdlcyIsInNldFNob3dNZXNzYWdlcyIsImZvY3VzUm93IiwiaW5mbyIsIl9nZXRCcm93c2VyVGl0bGUiLCJfcGFnZVRpdGxlSW5mb3JtYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInRpdGxlIiwic3VidGl0bGUiLCJzdWJUaXRsZSIsImludGVudCIsImljb24iLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhZGFwdGF0aW9uRmlsdGVyQmFyIiwiZ2V0SW5idWlsdEZpbHRlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJlbmFibGVSZXF1ZXN0cyIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIl9pc011bHRpTW9kZSIsInNldENvdW50c091dERhdGVkIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsImNvbnRlbnRTd2l0Y2hlciIsIiRzZWdtZW50ZWRCdXR0b24iLCJjdXJyZW50Iiwic1BhdGgiLCJjb250cm9sSWQiLCJfZ2V0UGFnZU1vZGVsIiwiX2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2wiLCJzVmlzdWFsRmlsdGVyQmFySWQiLCJTdGFibGVJZEhlbHBlciIsImdlbmVyYXRlIiwiX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sIiwiX2dldEljb25UYWJCYXIiLCJvQ29udHJvbCIsImdldFNlbGVjdGVkSW5uZXJDb250cm9sIiwiY29udGVudCIsInNLZXkiLCJhQ29udHJvbHMiLCJvVGFiTXVsdGlNb2RlIiwiZ2V0SXRlbXMiLCJvSXRlbSIsImdldEtleSIsImluY2x1ZGVzIiwicHVzaCIsImRlZmF1bHRQYXRoIiwiTGlzdFJlcG9ydFRlbXBsYXRpbmciLCJnZXREZWZhdWx0UGF0aCIsImluaXRMb2FkTW9kZSIsImdldFZpZXdEYXRhIiwiaW5pdGlhbExvYWQiLCJFbmFibGVkIiwiX2Rpc2FibGVJbml0TG9hZCIsIl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsInZhcmlhbnRNYW5hZ2VtZW50SWQiLCJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsImdldERhdGEiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwibUNhY2hlIiwiaWdub3JlZEZpZWxkcyIsImFDaGFydHMiLCJzQ2hhcnRFbnRpdHlQYXRoIiwic0NoYXJ0RW50aXR5U2V0Iiwic0NhY2hlS2V5IiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJoaWRlRmlsdGVyQmFyIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwidmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudCIsIm9WTSIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsInN0YW5kYXJkVmFyaWFudCIsImdldEV4ZWN1dGVPblNlbGVjdCIsImlzVGFibGVCb3VuZCIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiaXNCb3VuZCIsImdldEJpbmRpbmdJbmZvIiwiYnV0dG9uVmlzaWJsZSIsImdldFNlZ21lbnRlZEJ1dHRvbiIsInNlZ21lbnRlZEJ1dHRvbiIsImV2ZW50RGVsZWdhdGUiLCJvbkFmdGVyUmVuZGVyaW5nIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJzdiIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJlcnIiLCJtZXNzYWdlIiwiRXJyb3IiLCJTdHJpbmciLCJnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsImhhbmRsZU1lc3NhZ2VCdXR0b25WaXNpYmlsaXR5Iiwic2V0U2hvd0Zvb3RlciIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNQYWdlIGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVwiO1xuaW1wb3J0IHR5cGUgeyBEeW5hbWljUGFnZVRpdGxlJFN0YXRlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VUaXRsZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBLUElNYW5hZ2VtZW50IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9LUElNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydERlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy90ZW1wbGF0ZXMvTGlzdFJlcG9ydENvbnZlcnRlclwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBTdGFibGVJZEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvcmVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlSW5mb3JtYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgQnJlYWRjcnVtYnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvQnJlYWRjcnVtYnNcIjtcbmltcG9ydCB0eXBlIENoYXJ0VHlwZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvTWVzc2FnZUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvVGFibGVcIjtcbmltcG9ydCB0eXBlIENoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IENoYXJ0VXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRVdGlsc1wiO1xuaW1wb3J0IHR5cGUgQ29udGVudFN3aXRjaGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRlbnRTd2l0Y2hlci9Db250ZW50U3dpdGNoZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlwbGVNb2RlQ29udHJvbCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L2NvbnRyb2xzL011bHRpcGxlTW9kZUNvbnRyb2xcIjtcbmltcG9ydCBTaWRlRWZmZWN0c092ZXJyaWRlIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvb3ZlcnJpZGVzL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiQmFyIGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJDb250YWluZXJJdGVtIGZyb20gXCJzYXAvbS9UYWJDb250YWluZXJJdGVtXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBoYXNoZXIgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2hhc2hlclwiO1xuaW1wb3J0IHR5cGUgeyBUaXRsZUFkZGl0aW9uYWxJbmZvIH0gZnJvbSBcInNhcC91c2hlbGwvdWk1c2VydmljZS9TaGVsbFVJU2VydmljZVwiO1xuaW1wb3J0ICogYXMgTGlzdFJlcG9ydFRlbXBsYXRpbmcgZnJvbSBcIi4vTGlzdFJlcG9ydFRlbXBsYXRpbmdcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5jb25zdCBUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gQ29yZUxpYnJhcnkuVGVtcGxhdGVDb250ZW50Vmlldyxcblx0SW5pdGlhbExvYWRNb2RlID0gQ29yZUxpYnJhcnkuSW5pdGlhbExvYWRNb2RlO1xuXG4vKipcbiAqIENvbnRyb2xsZXIgY2xhc3MgZm9yIHRoZSBsaXN0IHJlcG9ydCBwYWdlLCB1c2VkIGluc2lkZSBhbiBTQVAgRmlvcmkgZWxlbWVudHMgYXBwbGljYXRpb24uXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiKVxuY2xhc3MgTGlzdFJlcG9ydENvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoe1xuXHRcdFx0b25BZnRlckJpbmRpbmc6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbFJvdXRpbmcpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX29uQWZ0ZXJCaW5kaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuICh0aGlzLmJhc2UgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLmdldEN1cnJlbnRFbnRpdHlTZXQoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2lkZUVmZmVjdHMub3ZlcnJpZGUoU2lkZUVmZmVjdHNPdmVycmlkZSkpXG5cdF9zaWRlRWZmZWN0cyE6IFNpZGVFZmZlY3RzO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgZmlsdGVyQmFyQ29uZGl0aW9ucz86IHVua25vd247XG5cblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGV4dGVuc2lvbiBBUEkgZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGV4dGVuc2lvbiBBUEkuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCB1aU1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHR0aGlzLl9zdG9yZUZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoZmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGZhbHNlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1b21cIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3VycmVuY3lcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNTdXBwb3J0ZWRcIiwgZmFsc2UpO1xuXG5cdFx0aWYgKHRoaXMuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0bGV0IGFscENvbnRlbnRWaWV3ID0gdGhpcy5fZ2V0RGVmYXVsdFBhdGgoKTtcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBDb25maWd1cmUgdGhlIGluaXRpYWwgbG9hZCBzZXR0aW5nc1xuXHRcdHRoaXMuX3NldEluaXRMb2FkKCk7XG5cdFx0dWlNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgeyBpc0VkaXRhYmxlOiBmYWxzZSB9KTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGR5bm1pY1BhZ2VIZWFkZXJUaXRsZSA9IGR5bmFtaWNQYWdlPy5nZXRUaXRsZSgpO1xuXHRcdGNvbnN0IGJyZWFkY3J1bWJzQkIgPSBkeW5taWNQYWdlSGVhZGVyVGl0bGUuZ2V0QnJlYWRjcnVtYnMoKSBhcyBCcmVhZGNydW1icyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYnJlYWRjcnVtYnNCQikge1xuXHRcdFx0YnJlYWRjcnVtYnNCQi5zZXRCcmVhZGNydW1iTGlua3MoXCJcIik7XG5cdFx0fVxuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLmZpbHRlckJhckNvbmRpdGlvbnM7XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdGFzeW5jIF9vbkFmdGVyQmluZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKCFpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImluaXRpYWxWYXJpYW50QXBwbGllZFwiKSkge1xuXHRcdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcih0aGlzLl9hcHBseUFwcFN0YXRlKCkpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpbml0aWFsVmFyaWFudEFwcGxpZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGF3YWl0IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuaXNBcHBDb21wb25lbnRCdXN5KCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikgYXMgVGFibGVbXTtcblx0XHRsZXQgdXBkYXRlQWN0aW9ucyA9IHRydWU7XG5cdFx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSB0YWJsZT8uZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0dXBkYXRlQWN0aW9ucyA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSB0YWJsZSBjb250ZW50IHVzaW5nIHNpZGUgZWZmZWN0cyAobGlzdEJpbmRpbmcucmVmcmVzaCBkb2Vzbid0IGtlZXAgZXhwYW5zaW9uIHN0YXRlcyBpbiBhIFRyZWVUYWJsZSlcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKVxuXHRcdFx0XHRcdC5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdFx0LndhaXRGb3JCaW5kaW5nQ2xlYW51cCgpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXMgdGhlIHJlZnJlc2ggb24gYSBUcmVlVGFibGUgdXNlcyBzaWRlLWVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0Ly8gYmVmb3JlIHRoZSBzaWRlLWVmZmVjdHMgYXJlIHF1ZXJpZWQgKGUuZy4gZmFpbGVkIFBBVENIIHF1ZXJpZXMgdGhhdCB3b3VsZCBiZSByZXNlbnQgdG9nZXRoZXIgd2l0aCBzaWRlIGVmZmVjdHMgR0VUKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgd2FpdGluZyByZWZyZXNoaW5nIExpc3RSZXBvcnQgdGFibGVcIiwgZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlUHJvY2Vzc2VkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVwZGF0ZUFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cdFx0Y29uc3QgZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk7XG5cdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcblx0XHRcdC5pc0luc2lnaHRzRW5hYmxlZCgpXG5cdFx0XHQudGhlbigoaXNJbnNpZ2h0c0VuYWJsZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzU3VwcG9ydGVkXCIsIGlzSW5zaWdodHNFbmFibGVkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgaW5zaWdodHMgYXJlIGVuYWJsZWRcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Zm9ybWF0dGVycyA9IHtcblx0XHRzZXRBTFBDb250cm9sTWVzc2FnZVN0cmlwKFxuXHRcdFx0dGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRhSWdub3JlZEZpZWxkczogc3RyaW5nW10sXG5cdFx0XHRiSXNDaGFydDogYm9vbGVhbiB8IHN0cmluZyxcblx0XHRcdG9BcHBseVN1cHBvcnRlZD86IHsgZW5hYmxlU2VhcmNoOiBib29sZWFuIH1cblx0XHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRcdGJJc0NoYXJ0ID0gYklzQ2hhcnQgPT09IFwidHJ1ZVwiIHx8IGJJc0NoYXJ0ID09PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgYklzQ2hhcnQpIHtcblx0XHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdFx0XHRnZXRSZXNvdXJjZU1vZGVsKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlYXJjaElnbm9yZWQgPSAhb0FwcGx5U3VwcG9ydGVkPy5lbmFibGVTZWFyY2g7XG5cdFx0XHRcdHNUZXh0ID0gYklzQ2hhcnRcblx0XHRcdFx0XHQ/IE1lc3NhZ2VTdHJpcC5nZXRBTFBUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBiSXNTZWFyY2hJZ25vcmVkKVxuXHRcdFx0XHRcdDogTWVzc2FnZVN0cmlwLmdldFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIFwiXCIpO1xuXHRcdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlclwiKVxuXHRhc3luYyBvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogeyBmb3JjZUZvY3VzPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdHRoaXMuX3NldEluaXRpYWxGb2N1cygpO1xuXHRcdH1cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0YXdhaXQgdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBjdXN0b20gdmlldyB1c2VkIGluIGEgbGlzdCByZXBvcnQgbmVlZHMgdG8gYmUgcmVmcmVzaGVkLlxuXHQgKiBUaGlzIGhhcHBlbnMgZWl0aGVyIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2Ugb24gdGhlIEZpbHRlckJhciBhbmQgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQsXG5cdCAqIG9yIHdoZW4gYSB0YWIgd2l0aCBjdXN0b20gY29udGVudCBpcyBzZWxlY3RlZCxcblx0ICogb3Igd2hlbiB0aGUgdmlldyBpcyBmb3JjZWQgdG8gYmUgcmVmcmVzaGVkIHRocm91Z2ggdGhlIEV4dGVuc2lvbiBBUEkgZm9yIHRoZSBsaXN0IHJlcG9ydCdzIHB1YmxpYyBtZXRob2Qgc2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciBjdXN0b21pemF0aW9uLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSUQsXG5cdCAqIGFuZCB0aGUgdmlldyByZWZyZXNoIGNhdXNlIHN1Y2ggYXMgdGFiQ2hhbmdlZCwgc2VhcmNoLCBvciBmb3JjZWRSZWZyZXNoLlxuXHQgKiBTZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlIG9mIGEgbWFwOlxuXHQgKiA8Y29kZT48cHJlPlxuXHQgKiBcdHtcblx0ICogXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0ICogXHRcdFx0Q291bnRyeTogW1xuXHQgKiBcdFx0XHRcdHtcblx0ICogXHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCJcblx0ICpcdFx0XHRcdFx0dmFsaWRhdGVkOiBcIk5vdFZhbGlkYXRlZFwiXG5cdCAqXHRcdFx0XHRcdHZhbHVlczogW1wiR2VybWFueVwiLCAuLi5dXG5cdCAqIFx0XHRcdFx0fSxcblx0ICogXHRcdFx0XHQuLi5cblx0ICogXHRcdFx0XVxuXHQgKiBcdFx0XHQuLi5cblx0ICogXHRcdH0sXG5cdCAqXHRcdGN1cnJlbnRUYWJJZDogXCJmZTo6Q3VzdG9tVGFiOjp0YWIxXCIsXG5cdCAqXHRcdHJlZnJlc2hDYXVzZTogXCJ0YWJDaGFuZ2VkXCIgfCBcInNlYXJjaFwiIHwgXCJmb3JjZWRSZWZyZXNoXCJcblx0ICpcdH1cblx0ICogPC9wcmU+PC9jb2RlPlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25WaWV3TmVlZHNSZWZyZXNoKG1QYXJhbWV0ZXJzOiB1bmtub3duKTogdm9pZCB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgZmlsdGVyIG9yIHNlYXJjaCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGluIHRoZSBGaWx0ZXJCYXIsXG5cdCAqIGJ1dCBoYXMgbm90IGJlZW4gdmFsaWRhdGVkIHlldCBieSB0aGUgZW5kIHVzZXIgd2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24uXG5cdCAqIFR5cGljYWxseSwgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgdGFiIGlzIGdyZXllZCBvdXQgdW50aWwgdGhlIGZpbHRlcnMgYXJlIHZhbGlkYXRlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgY3VzdG9taXphdGlvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBlbmRpbmdGaWx0ZXJzKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0Z2V0Q3VycmVudEVudGl0eVNldCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYWJsZSgpPy5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikuc2xpY2UoMSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBvbiB0aGUgRmlsdGVyQmFyIGlzIHByZXNzZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25BZnRlckNsZWFyKCk6IHZvaWQge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBUYWJsZVtdKTogdm9pZCB7XG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10gPSBbXTtcblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlTWVudUJ1dHRvblZpc2libGl0eShhSUJOQWN0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2Nyb2xscyB0byBhIHNwZWNpZmljIHJvdyBvbiBhbGwgdGhlIGF2YWlsYWJsZSB0YWJsZXMuXG5cdCAqIEBwYXJhbSBzUm93UGF0aCBUaGUgcGF0aCBvZiB0aGUgdGFibGUgcm93IGNvbnRleHQgdG8gYmUgc2Nyb2xsZWQgdG9cblx0ICovXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKS5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IENvbnRyb2wpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUgYXMgVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgc2lsZW50IGZvY3VzIG9uIHRoZSBmaWx0ZXIgZmllbGQuIFN1cHByZXNzZXMgdGhlIG9wZW5pbmcgb2YgdGhlIHR5cGUtYWhlYWQgcG9wdXAuXG5cdCAqIEBwYXJhbSBmaWx0ZXJGaWVsZCBUaGUgZmllbGQgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZSBzZXQgYWZ0ZXIgdGhlIGluaXRpYWwgbG9hZFxuXHQgKi9cblx0X2ZvY3VzU2lsZW50KGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpbHRlckZpZWxkLmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0Zm9jdXNJbmZvLnRhcmdldEluZm8gPSB7IHNpbGVudDogdHJ1ZSB9O1xuXHRcdGZpbHRlckZpZWxkLmZvY3VzKGZvY3VzSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZm9jdXMgd2hlbiB0aGUgaGVhZGVyIGlzIGV4cGFuZGVkLlxuXHQgKiBUaGUgcHJpb3JpdGllcyBhcmU6ICgxKSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCAoMikgc2VhcmNoIGZpZWxkIGlmIGZvY3VzYWJsZSBvciBmaXJzdCBmaWx0ZXIgZmllbGQsIGFuZCAoMykgR28gYnV0dG9uLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIF9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZChmaWx0ZXJCYXI6IEZpbHRlckJhcik6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCA9IGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoZnVuY3Rpb24gKG9GaWx0ZXJJdGVtOiBGaWx0ZXJGaWVsZCkge1xuXHRcdFx0cmV0dXJuIG9GaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgb0ZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHR9KTtcblx0XHQvL0ZvY3VzaW5nIG9uIHRoZSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCBvciBvbiB0aGUgZmlyc3QgZmlsdGVyIGZpZWxkIGlmIHRoZSB0YWJsZSBkYXRhIGlzIGxvYWRlZFxuXHRcdC8vIERvIGEgXCJzaWxlbnRcIiBmb2N1cyBmb3IgRmlsdGVyRmllbGQsIGJ5IGFkZGluZyB0aGUgc2lsZW50IGF0dHJpYnV0ZS4gVGhlIHNpbGVudCBhdHRyaWJ1dGUgc3VwcHJlc3NlcyB0eXBlYWhlYWQgb3BlbmluZy5cblx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpICYmIGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIElmIHRoZXJlIGlzIG5vIGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIHNldCBzaWxlbnQgZm9jdXMgb24gc2VhcmNoIGZpZWxkIChpZiBmb2N1c2FibGUpLCBvdGhlcndpc2Ugb24gZmlyc3QgZmlsdGVyIGZpZWxkXG5cdFx0XHRjb25zdCBiYXNpY1NlYXJjaEZpZWxkID0gZmlsdGVyQmFyLmdldEJhc2ljU2VhcmNoRmllbGQoKTtcblx0XHRcdGNvbnN0IGZpZWxkVG9Gb2N1cyA9IGJhc2ljU2VhcmNoRmllbGQ/LmlzRm9jdXNhYmxlKCkgPyBiYXNpY1NlYXJjaEZpZWxkIDogZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKClbMF07XG5cdFx0XHRpZiAoZmllbGRUb0ZvY3VzLmlzQTxGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzU2lsZW50KGZpZWxkVG9Gb2N1cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQoZmllbGRUb0ZvY3VzIGFzIENvbnRyb2wpLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIEdvIGJ1dHRvblxuXHRcdFx0dGhpcy5nZXRWaWV3KCkuYnlJZChgJHt0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKX0tYnRuU2VhcmNoYCk/LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGluaXRpYWwgZm9jdXMgaW4gYSBsaXN0IHJlcG9ydCBiYXNlZCBvbiB0aGUgVXNlciBFeHBlcmllbmNlIGd1aWRlbGluZXMuXG5cdCAqXG5cdCAqL1xuXHRhc3luYyBfc2V0SW5pdGlhbEZvY3VzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCksXG5cdFx0XHRpc0hlYWRlckV4cGFuZGVkID0gZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSxcblx0XHRcdGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXI7XG5cdFx0aWYgKGZpbHRlckJhciAmJiAhdGhpcy5faXNGaWx0ZXJCYXJIaWRkZW5Vc2VkKCkpIHtcblx0XHRcdC8vRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2dcblx0XHRcdGF3YWl0IGZpbHRlckJhci53aGVuSW5pdGlhbGl6ZWQoKTtcblx0XHRcdGlmICghZmlsdGVyQmFyLmdldFNob3dNZXNzYWdlcygpKSB7XG5cdFx0XHRcdGZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNIZWFkZXJFeHBhbmRlZCkge1xuXHRcdFx0XHR0aGlzLl9mb2N1c1doZW5IZWFkZXJFeHBhbmRlZChmaWx0ZXJCYXIpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX2dldFRhYmxlKClcblx0XHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVycm9yIGl0IGNhbiBqdXN0IGJlIHRoYXQgdGhlcmUgYXJlIG5vIGxpbmVzIHRvIGZvY3VzXG5cdFx0XHRcdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBpbml0aWFsIGZvY3VzIG9uIHRoZSB0YWJsZSBcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgdGhpcy5fZ2V0VGFibGUoKVxuXHRcdFx0XHQ/LmZvY3VzUm93KDApXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVycm9yIGl0IGNhbiBqdXN0IGJlIHRoYXQgdGhlcmUgYXJlIG5vIGxpbmVzIHRvIGZvY3VzXG5cdFx0XHRcdFx0XHRMb2cuaW5mbyhcIkVycm9yIHdoaWxlIHNldHRpbmcgaW5pdGlhbCBmb2N1cyBvbiB0aGUgdGFibGUgXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3ZlcnJpZGUgdG8gZ2V0IHRoZSBicm93c2VyIHRpdGxlIG9mIHRoZSBMUiBwYWdlLlxuXHQgKiBAcGFyYW0gX3BhZ2VUaXRsZUluZm9ybWF0aW9uIFByZXNlbnQgcGFnZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKiBAcmV0dXJucyBUaXRsZSBpbmZvcm1hdGlvbiB0byBiZSB1c2VkIGJ5IHNoZWxsIHNlcnZpY2VzIGZvciBicm93c2VyIHRpdGxlXG5cdCAqL1xuXHRhc3luYyBfZ2V0QnJvd3NlclRpdGxlKF9wYWdlVGl0bGVJbmZvcm1hdGlvbjogVGl0bGVJbmZvcm1hdGlvbik6IFByb21pc2U8VGl0bGVBZGRpdGlvbmFsSW5mbyB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vIFdlIHNoYWxsIGZhbGxiYWNrIHRvIGRlZmF1bCBhcHAgdGl0bGUgaW4gY2FzZSBvZiBsaXN0IHJlcG9ydC5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlPzogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0+IHtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHR0aXRsZTogb01hbmlmZXN0RW50cnkudGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogb01hbmlmZXN0RW50cnkuc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTogRHluYW1pY1BhZ2Uge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCkpIGFzIER5bmFtaWNQYWdlO1xuXHR9XG5cblx0X2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sKCk6IENvbnRyb2wgfCB1bmRlZmluZWQge1xuXHRcdC8vIElmIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgaXMgcGFydCBvZiB0aGUgRE9NIHRyZWUsIHRoZSBcIkFkYXB0IEZpbHRlclwiIGRpYWxvZyBpcyBvcGVuLFxuXHRcdC8vIGFuZCB3ZSByZXR1cm4gdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBhcyBhbiBhY3RpdmUgY29udHJvbCAodmlzaWJsZSBmb3IgdGhlIHVzZXIpXG5cdFx0Y29uc3QgYWRhcHRhdGlvbkZpbHRlckJhciA9ICh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgeyBnZXRJbmJ1aWx0RmlsdGVyPzogRnVuY3Rpb24gfSkuZ2V0SW5idWlsdEZpbHRlcj8uKCk7XG5cdFx0cmV0dXJuIGFkYXB0YXRpb25GaWx0ZXJCYXI/LmdldFBhcmVudCgpID8gYWRhcHRhdGlvbkZpbHRlckJhciA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF9hcHBseUFwcFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0b0ZpbHRlckJhci5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzRmlsdGVyQmFySGlkZGVuKCkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldFNlZ21lbnRlZEJ1dHRvbigpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb250ZW50U3dpdGNoZXIgPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkNvbnRlbnRTd2l0Y2hlclwiKSBhcyBVSTVFbGVtZW50ICYgeyAkc2VnbWVudGVkQnV0dG9uPzogeyBjdXJyZW50PzogVUk1RWxlbWVudCB9IH07XG5cdFx0cmV0dXJuIGNvbnRlbnRTd2l0Y2hlcj8uJHNlZ21lbnRlZEJ1dHRvbj8uY3VycmVudDtcblx0fVxuXG5cdF9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KHNQYXRoOiBzdHJpbmcpOiBDb250cm9sIHwgTWFjcm9BUEkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2xJZCA9IHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdFx0cmV0dXJuIGNvbnRyb2xJZCA/ICh0aGlzLmdldFZpZXcoKS5ieUlkKGNvbnRyb2xJZCkgYXMgQ29udHJvbCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2R5bmFtaWNMaXN0UmVwb3J0SWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2ZpbHRlckJhcklkXCIpIHx8IFwiXCI7XG5cdH1cblxuXHRnZXRDaGFydENvbnRyb2woKTogQ29udHJvbCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlQ2hhcnRJZFwiKSBhcyBDaGFydFR5cGU7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzVmlzdWFsRmlsdGVyQmFySWQgPSBTdGFibGVJZEhlbHBlci5nZW5lcmF0ZShbXCJ2aXN1YWxGaWx0ZXJcIiwgdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCldKTtcblx0XHRyZXR1cm4gc1Zpc3VhbEZpbHRlckJhcklkID8gdGhpcy5nZXRWaWV3KCkuYnlJZChzVmlzdWFsRmlsdGVyQmFySWQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk6IFZhcmlhbnRNYW5hZ2VtZW50IHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi92YXJpYW50TWFuYWdlbWVudC9pZFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0fVxuXG5cdF9nZXRNdWx0aU1vZGVDb250cm9sKCk6IE11bHRpcGxlTW9kZUNvbnRyb2wge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OlRhYk11bHRpcGxlTW9kZTo6Q29udHJvbFwiKSBhcyBNdWx0aXBsZU1vZGVDb250cm9sO1xuXHR9XG5cblx0X2dldEljb25UYWJCYXIoKTogSWNvblRhYkJhciB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlXCIpIGFzIEljb25UYWJCYXI7XG5cdH1cblxuXHRfZ2V0VGFibGUoKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uY29udGVudDtcblx0XHRcdHJldHVybiBvQ29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSA/IChvQ29udHJvbCBhcyBUYWJsZSkgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3NpbmdsZVRhYmxlSWRcIikgYXMgVGFibGUgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0X2dldENvbnRyb2xzKHNLZXk/OiBzdHJpbmcpOiBDb250cm9sW10ge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBhQ29udHJvbHM6IENvbnRyb2xbXSA9IFtdO1xuXHRcdFx0Y29uc3Qgb1RhYk11bHRpTW9kZSA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKS5jb250ZW50O1xuXHRcdFx0b1RhYk11bHRpTW9kZS5nZXRJdGVtcygpLmZvckVhY2goKG9JdGVtOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5nZXRWaWV3KCkuYnlJZCgob0l0ZW0gYXMgVGFiQ29udGFpbmVySXRlbSkuZ2V0S2V5KCkpIGFzIENvbnRyb2w7XG5cdFx0XHRcdGlmIChvQ29udHJvbCAmJiBzS2V5KSB7XG5cdFx0XHRcdFx0aWYgKChvSXRlbSBhcyBUYWJDb250YWluZXJJdGVtKS5nZXRLZXkoKS5pbmNsdWRlcyhgZmU6OiR7c0tleX1gKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbCAhPT0gdW5kZWZpbmVkICYmIG9Db250cm9sICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhQ29udHJvbHM7XG5cdFx0fSBlbHNlIGlmIChzS2V5ID09PSBcIkNoYXJ0XCIpIHtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRyZXR1cm4gb0NoYXJ0ID8gW29DaGFydF0gOiBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdHJldHVybiBvVGFibGUgPyBbb1RhYmxlXSA6IFtdO1xuXHRcdH1cblx0fVxuXG5cdF9nZXREZWZhdWx0UGF0aCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRlZmF1bHRQYXRoID0gTGlzdFJlcG9ydFRlbXBsYXRpbmcuZ2V0RGVmYXVsdFBhdGgodGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL3ZpZXdzXCIpIHx8IFtdKTtcblx0XHRzd2l0Y2ggKGRlZmF1bHRQYXRoKSB7XG5cdFx0XHRjYXNlIFwicHJpbWFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdGNhc2UgXCJzZWNvbmRhcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU7XG5cdFx0XHRjYXNlIFwiYm90aFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aCBNdWx0aXBsZSBUYWJsZSBtb2RlLlxuXHQgKiBAcmV0dXJucyBJcyBNdWx0aXBsZSBUYWJsZSBtb2RlIHNldD9cblx0ICovXG5cdF9pc011bHRpTW9kZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvbXVsdGlWaWV3c0NvbnRyb2xcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHRvIGxvYWQgZGF0YSBhdCBzdGFydCB1cC5cblx0ICogQHJldHVybnMgSXMgSW5pdExvYWQgZW5hYmxlZD9cblx0ICovXG5cdF9pc0luaXRMb2FkRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBpbml0TG9hZE1vZGUgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmluaXRpYWxMb2FkO1xuXHRcdHJldHVybiBpbml0TG9hZE1vZGUgPT09IEluaXRpYWxMb2FkTW9kZS5FbmFibGVkO1xuXHR9XG5cblx0X2hhc011bHRpVmlzdWFsaXphdGlvbnMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9oYXNNdWx0aVZpc3VhbGl6YXRpb25zXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzdXNwZW5kIHNlYXJjaCBvbiB0aGUgZmlsdGVyIGJhci4gVGhlIGluaXRpYWwgbG9hZGluZyBvZiBkYXRhIGlzIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIEluaXRMb2FkIC0gRGlzYWJsZWQvQXV0by5cblx0ICogSXQgaXMgZW5hYmxlZCBsYXRlciB3aGVuIHRoZSB2aWV3IHN0YXRlIGlzIHNldCwgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byByZWFsaXplIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnMuXG5cdCAqL1xuXHRfZGlzYWJsZUluaXRMb2FkKCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHQvLyBjaGVjayBmb3IgZmlsdGVyIGJhciBoaWRkZW5cblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRmaWx0ZXJCYXIuZW5hYmxlUmVxdWVzdHMoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIGJ5IGZsZXggdG8gZGV0ZXJtaW5lIGlmIHRoZSBhcHBseUF1dG9tYXRpY2FsbHkgc2V0dGluZyBvbiB0aGUgdmFyaWFudCBpcyB2YWxpZC5cblx0ICogQ2FsbGVkIG9ubHkgZm9yIFN0YW5kYXJkIFZhcmlhbnQgYW5kIG9ubHkgd2hlbiB0aGVyZSBpcyBkaXNwbGF5IHRleHQgc2V0IGZvciBhcHBseUF1dG9tYXRpY2FsbHkgKEZFIG9ubHkgc2V0cyBpdCBmb3IgQXV0bykuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBkYXRhIHNob3VsZCBiZSBsb2FkZWQgYXV0b21hdGljYWxseSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQoKTogYm9vbGVhbiB7XG5cdFx0Ly8gV2UgYWx3YXlzIHJldHVybiBmYWxzZSBhbmQgdGFrZSBjYXJlIG9mIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29uZmlndXJlIHRoZSBzZXR0aW5ncyBmb3IgaW5pdGlhbCBsb2FkIGJhc2VkIG9uXG5cdCAqIC0gbWFuaWZlc3Qgc2V0dGluZyBpbml0TG9hZCAtIEVuYWJsZWQvRGlzYWJsZWQvQXV0b1xuXHQgKiAtIHVzZXIncyBzZXR0aW5nIG9mIGFwcGx5QXV0b21hdGljYWxseSBvbiB2YXJpYW50XG5cdCAqIC0gaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVyc1xuXHQgKiBXZSBkaXNhYmxlIHRoZSBmaWx0ZXIgYmFyIHNlYXJjaCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmFibGUgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldC5cblx0ICovXG5cdF9zZXRJbml0TG9hZCgpOiB2b2lkIHtcblx0XHQvLyBpZiBpbml0TG9hZCBpcyBEaXNhYmxlZCBvciBBdXRvLCBzd2l0Y2ggb2ZmIGZpbHRlciBiYXIgc2VhcmNoIHRlbXBvcmFyaWx5IGF0IHN0YXJ0XG5cdFx0aWYgKCF0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlSW5pdExvYWQoKTtcblx0XHR9XG5cdFx0Ly8gc2V0IGhvb2sgZm9yIGZsZXggZm9yIHdoZW4gc3RhbmRhcmQgdmFyaWFudCBpcyBzZXQgKGF0IHN0YXJ0IG9yIGJ5IHVzZXIgYXQgcnVudGltZSlcblx0XHQvLyByZXF1aXJlZCB0byBvdmVycmlkZSB0aGUgdXNlciBzZXR0aW5nICdhcHBseSBhdXRvbWF0aWNhbGx5JyBiZWhhdmlvdXIgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnNcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudElkID0gTGlzdFJlcG9ydFRlbXBsYXRpbmcuZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UoXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLFxuXHRcdFx0dGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldERhdGEoKSBhcyBMaXN0UmVwb3J0RGVmaW5pdGlvblxuXHRcdCk7XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB2YXJpYW50TWFuYWdlbWVudElkICYmICh0aGlzLmdldFZpZXcoKS5ieUlkKHZhcmlhbnRNYW5hZ2VtZW50SWQpIGFzIFZhcmlhbnRNYW5hZ2VtZW50KTtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdChcblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgYXMgeyByZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50PzogRnVuY3Rpb24gfVxuXHRcdFx0KT8ucmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudD8uKHRoaXMuX2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50LmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdF9zZXRTaGFyZU1vZGVsKCk6IHZvaWQge1xuXHRcdC8vIFRPRE86IGRlYWN0aXZhdGVkIGZvciBub3cgLSBjdXJyZW50bHkgdGhlcmUgaXMgbm8gX3RlbXBsUHJpdiBhbnltb3JlLCB0byBiZSBkaXNjdXNzZWRcblx0XHQvLyB0aGlzIG1ldGhvZCBpcyBjdXJyZW50bHkgbm90IGNhbGxlZCBhbnltb3JlIGZyb20gdGhlIGluaXQgbWV0aG9kXG5cblx0XHRjb25zdCBmbkdldFVzZXIgPSBPYmplY3RQYXRoLmdldChcInNhcC51c2hlbGwuQ29udGFpbmVyLmdldFVzZXJcIik7XG5cdFx0Ly92YXIgb01hbmlmZXN0ID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFkYXRhKCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aVwiKTtcblx0XHQvL3ZhciBzQm9va21hcmtJY29uID0gKG9NYW5pZmVzdCAmJiBvTWFuaWZlc3QuaWNvbnMgJiYgb01hbmlmZXN0Lmljb25zLmljb24pIHx8IFwiXCI7XG5cblx0XHQvL3NoYXJlTW9kZWw6IEhvbGRzIGFsbCB0aGUgc2hhcmluZyByZWxldmFudCBpbmZvcm1hdGlvbiBhbmQgaW5mbyB1c2VkIGluIFhNTCB2aWV3XG5cdFx0Y29uc3Qgb1NoYXJlSW5mbyA9IHtcblx0XHRcdGJvb2ttYXJrVGl0bGU6IGRvY3VtZW50LnRpdGxlLCAvL1RvIG5hbWUgdGhlIGJvb2ttYXJrIGFjY29yZGluZyB0byB0aGUgYXBwIHRpdGxlLlxuXHRcdFx0Ym9va21hcmtDdXN0b21Vcmw6IGZ1bmN0aW9uICgpOiBzdHJpbmcge1xuXHRcdFx0XHRjb25zdCBzSGFzaCA9IGhhc2hlci5nZXRIYXNoKCk7XG5cdFx0XHRcdHJldHVybiBzSGFzaCA/IGAjJHtzSGFzaH1gIDogd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHR9LFxuXHRcdFx0Lypcblx0XHRcdFx0XHRcdFx0VG8gYmUgYWN0aXZhdGVkIG9uY2UgdGhlIEZMUCBzaG93cyB0aGUgY291bnQgLSBzZWUgY29tbWVudCBhYm92ZVxuXHRcdFx0XHRcdFx0XHRib29rbWFya1NlcnZpY2VVcmw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vdmFyIG9UYWJsZSA9IG9UYWJsZS5nZXRJbm5lclRhYmxlKCk7IG9UYWJsZSBpcyBhbHJlYWR5IHRoZSBzYXAuZmUgdGFibGUgKGJ1dCBub3QgdGhlIGlubmVyIG9uZSlcblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgdXNlIHRhYmxlLmdldExpc3RCaW5kaW5nSW5mbyBpbnN0ZWFkIG9mIHRoZSBiaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9CaW5kaW5nID0gb1RhYmxlLmdldEJpbmRpbmcoXCJyb3dzXCIpIHx8IG9UYWJsZS5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nID8gZm5HZXREb3dubG9hZFVybChvQmluZGluZykgOiBcIlwiO1xuXHRcdFx0XHRcdFx0XHR9LCovXG5cdFx0XHRpc1NoYXJlSW5KYW1BY3RpdmU6ICEhZm5HZXRVc2VyICYmIGZuR2V0VXNlcigpLmlzSmFtQWN0aXZlKClcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb1RlbXBsYXRlUHJpdmF0ZU1vZGVsID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldE1vZGVsKFwiX3RlbXBsUHJpdlwiKSBhcyBKU09OTW9kZWw7XG5cdFx0b1RlbXBsYXRlUHJpdmF0ZU1vZGVsLnNldFByb3BlcnR5KFwiL2xpc3RSZXBvcnQvc2hhcmVcIiwgb1NoYXJlSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9jYWwgVUkgbW9kZWwgb2YgdGhlIHBhZ2Ugd2l0aCB0aGUgZmllbGRzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIHRvIHRoZSBmaWx0ZXIgYmFyICh0aGlzIGlzIHNwZWNpZmljIHRvIHRoZSBBTFAgc2NlbmFyaW8pLlxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqIEBwYXJhbSBvRmlsdGVyQmFyIE1EQyBmaWx0ZXIgYmFyXG5cdCAqL1xuXHRfdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyhvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiB2b2lkIHtcblx0XHRjb25zdCBtQ2FjaGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXHRcdGNvbnN0IGlnbm9yZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9LFxuXHRcdFx0YVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIiksXG5cdFx0XHRhQ2hhcnRzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJDaGFydFwiKTtcblxuXHRcdGlmICghYVRhYmxlcy5sZW5ndGggfHwgIWFDaGFydHMubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSdzIG5vdCBhIHRhYmxlIGFuZCBhIGNoYXJ0LCB3ZSdyZSBub3QgaW4gdGhlIEFMUCBjYXNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIHRoZSBtb21lbnQsIHRoZXJlJ3Mgbm90aGluZyBmb3IgdGFibGVzLi4uXG5cdFx0YUNoYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hhcnQpIHtcblx0XHRcdGNvbnN0IHNDaGFydEVudGl0eVBhdGggPSBvQ2hhcnQuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLFxuXHRcdFx0XHRzQ2hhcnRFbnRpdHlTZXQgPSBzQ2hhcnRFbnRpdHlQYXRoLnNsaWNlKDEpLFxuXHRcdFx0XHRzQ2FjaGVLZXkgPSBgJHtzQ2hhcnRFbnRpdHlTZXR9Q2hhcnRgO1xuXHRcdFx0aWYgKCFtQ2FjaGVbc0NhY2hlS2V5XSkge1xuXHRcdFx0XHRtQ2FjaGVbc0NhY2hlS2V5XSA9IEZpbHRlclV0aWxzLmdldE5vdEFwcGxpY2FibGVGaWx0ZXJzKG9GaWx0ZXJCYXIsIG9DaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRpZ25vcmVkRmllbGRzW3NDYWNoZUtleV0gPSBtQ2FjaGVbc0NhY2hlS2V5XTtcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250cm9scy9pZ25vcmVkRmllbGRzXCIsIGlnbm9yZWRGaWVsZHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBzZXR0aW5nIHdoZXRoZXIgRmlsdGVyQmFyIGlzIGhpZGRlbiBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZyAnaGlkZUZpbHRlckJhcicuXG5cdCAqIFNob3VsZCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggX2lzRmlsdGVyQmFySGlkZGVuVXNlZCBhcyBpdCBtYXkgaGF2ZSBvdmVycmlkZGVuIHRoaXMgc2V0dGluZy5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgRmlsdGVyQmFyIGlzIGhpZGRlbiwgZmFsc2UgaWYgdW5rbm93blxuXHQgKi9cblx0X2lzRmlsdGVyQmFySGlkZGVuKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmhpZGVGaWx0ZXJCYXIgfHwgZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHNldHRpbmcgd2hldGhlciBGaWx0ZXJCYXIgaXMgaGlkZGVuIGJ1dCBzdGlsbCBleGlzdHMgYmFzZWQgb24gdGhlIG1hbmlmZXN0IHNldHRpbmcgJ3VzZUhpZGRlbkZpbHRlckJhcicuXG5cdCAqIFNob3VsZCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggX2lzRmlsdGVyQmFySGlkZGVuIGFzIGl0IGNhbiBhbHNvIGhpZGUgdGhlIEZpbHRlckJhci5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgRmlsdGVyQmFyIGlzIGhpZGRlbiwgZmFsc2UgaWYgdW5rbm93blxuXHQgKi9cblx0X2lzRmlsdGVyQmFySGlkZGVuVXNlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS51c2VIaWRkZW5GaWx0ZXJCYXIgfHwgZmFsc2U7XG5cdH1cblxuXHRfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCwga2V5OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogQm9vbGVhbiB7XG5cdFx0aWYgKCF2YXJpYW50TWFuYWdlbWVudCB8fCAha2V5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhbnRzID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBjdXJyZW50VmFyaWFudCA9IHZhcmlhbnRzLmZpbmQoZnVuY3Rpb24gKHZhcmlhbnQpIHtcblx0XHRcdHJldHVybiB2YXJpYW50ICYmIHZhcmlhbnQuZ2V0S2V5KCkgPT09IGtleTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGN1cnJlbnRWYXJpYW50ICYmIGN1cnJlbnRWYXJpYW50LmdldFByb3BlcnR5KFwiZXhlY3V0ZU9uU2VsZWN0XCIpKSB8fCBmYWxzZTtcblx0fVxuXG5cdF9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaChvVk06IFZhcmlhbnRNYW5hZ2VtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuaW5pdGlhbExvYWQgPT09IEluaXRpYWxMb2FkTW9kZS5BdXRvICYmXG5cdFx0XHQoIW9WTSB8fCBvVk0uZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCkgPT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdGNvbnN0IG9Db25kaXRpb25zID0gb0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCk7XG5cdFx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29uZGl0aW9ucykge1xuXHRcdFx0XHRcdC8vIGlnbm9yZSBmaWx0ZXJzIHN0YXJ0aW5nIHdpdGggJCAoZS5nLiAkc2VhcmNoLCAkZWRpdFN0YXRlKVxuXHRcdFx0XHRcdGlmIChvVk0gJiYgIXNLZXkuc3RhcnRzV2l0aChcIiRcIikgJiYgQXJyYXkuaXNBcnJheShvQ29uZGl0aW9uc1tzS2V5XSkgJiYgb0NvbmRpdGlvbnNbc0tleV0ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvLyBsb2FkIGRhdGEgYXMgcGVyIHVzZXIncyBzZXR0aW5nIG9mIGFwcGx5QXV0b21hdGljYWxseSBvbiB0aGUgdmFyaWFudFxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhbmRhcmRWYXJpYW50ID0gb1ZNLmdldFZhcmlhbnRzKCkuZmluZCgodmFyaWFudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFyaWFudC5nZXRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzdGFuZGFyZFZhcmlhbnQgJiYgc3RhbmRhcmRWYXJpYW50LmdldEV4ZWN1dGVPblNlbGVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfdXBkYXRlVGFibGUob1RhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGlmICghb1RhYmxlLmlzVGFibGVCb3VuZCgpIHx8IHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcykge1xuXHRcdFx0b1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0X3VwZGF0ZUNoYXJ0KG9DaGFydDogQ2hhcnQpOiB2b2lkIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IChvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIENoYXJ0RGVsZWdhdGUpLl9nZXRDaGFydChvQ2hhcnQpO1xuXHRcdGlmICghKG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmlzQm91bmQoXCJkYXRhXCIpKSB8fCB0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMpIHtcblx0XHRcdChvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIENoYXJ0RGVsZWdhdGUpLnJlYmluZChvQ2hhcnQsIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmdJbmZvKFwiZGF0YVwiKSk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmaWx0ZXIgdG9nZ2xlIGJ1dHRvbi5cblx0ICogQHBhcmFtIGJ1dHRvblZpc2libGUgRmlsdGVyIHRvZ2dsZSBidXR0b24gdmlzaWJpbGl0eVxuXHQgKi9cblx0c2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eShidXR0b25WaXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGZpbHRlckJhcj8uZ2V0U2VnbWVudGVkQnV0dG9uKCk/LnNldFZpc2libGUoYnV0dG9uVmlzaWJsZSk7XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvbkZpbHRlckxheW91dFN3aXRjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudDx7fSwgQ29udGVudFN3aXRjaGVyPik6IHZvaWQge1xuXHRcdFx0Y29uc3QgY3VycmVudEtleSA9IG9FdmVudC5nZXRTb3VyY2UoKS5zZWxlY3RlZEtleTtcblx0XHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi92YXJpYW50TWFuYWdlbWVudC9wYWdlSWRcIik7XG5cdFx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRLZXkgPT09IFwiYWlcIikge1xuXHRcdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uSW5saW5lRWRpdFNhdmUodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdHRoaXMuaW5saW5lRWRpdEZsb3cuaW5saW5lRWRpdFNhdmUoKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyU2VhcmNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkhLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlcnNDaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IEZpbHRlckJhckJhc2UkRmlsdGVyc0NoYW5nZWRFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIFBlbmRpbmcgZmlsdGVycyBpbnRvIEZpbHRlckJhciB0byBiZSB1c2VkIGZvciBjdXN0b20gdmlld3Ncblx0XHRcdFx0dGhpcy5vblBlbmRpbmdGaWx0ZXJzKCk7XG5cblx0XHRcdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZGl0aW9uc0Jhc2VkXCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuX3N0b3JlRmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudChvRmlsdGVyQmFyLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IChvRXZlbnQgYXMgVUk1RXZlbnQpLmdldFBhcmFtZXRlcnMoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gcGFyYW1ldGVycy5vcmlnaW5hbFNvdXJjZSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50S2V5ID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImtleVwiKTtcblx0XHRcdGNvbnN0IG11bHRpTW9kZUNvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cblx0XHRcdGlmIChtdWx0aU1vZGVDb250cm9sICYmICF2YXJpYW50TWFuYWdlbWVudD8uZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMuQWN0aW9uVG9vbGJhclwiKSkge1xuXHRcdFx0XHQvL05vdCBhIENvbnRyb2wgVmFyaWFudFxuXHRcdFx0XHRtdWx0aU1vZGVDb250cm9sPy5pbnZhbGlkYXRlQ29udGVudCgpO1xuXHRcdFx0XHRtdWx0aU1vZGVDb250cm9sPy5zZXRGcmVlemVDb250ZW50KHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzZXRUaW1lb3V0IGNhdXNlIHRoZSB2YXJpYW50IG5lZWRzIHRvIGJlIGFwcGxpZWQgYmVmb3JlIGp1ZGdpbmcgdGhlIGF1dG8gc2VhcmNoIG9yIHVwZGF0aW5nIHRoZSBhcHAgc3RhdGVcblx0XHRcdHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IGZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZCA9IGZpbHRlckJhcj8uZ2V0RmlsdGVySXRlbXMoKS5maW5kKGZ1bmN0aW9uIChmaWx0ZXJJdGVtKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZpbHRlckl0ZW0uZ2V0UmVxdWlyZWQoKSAmJiBmaWx0ZXJJdGVtLmdldENvbmRpdGlvbnMoKS5sZW5ndGggPT09IDA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRcdFx0ZHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKHZhcmlhbnRNYW5hZ2VtZW50KSkge1xuXHRcdFx0XHRcdC8vIHRoZSBhcHAgc3RhdGUgd2lsbCBiZSB1cGRhdGVkIHZpYSBvblNlYXJjaCBoYW5kbGVyXG5cdFx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIS5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyQVBJLnRyaWdnZXJTZWFyY2goKTtcblx0XHRcdFx0fSBlbHNlIGlmICghdGhpcy5fZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KHZhcmlhbnRNYW5hZ2VtZW50LCBjdXJyZW50VmFyaWFudEtleSkpIHtcblx0XHRcdFx0XHRtdWx0aU1vZGVDb250cm9sPy5zZXRGcmVlemVDb250ZW50KGZhbHNlKTtcblx0XHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHRcdFx0ZHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDApO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmUhISFcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCAxMDAwKTtcblx0XHR9LFxuXHRcdG9uU2VhcmNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIEZpbHRlckJhcjsgLy8gb25zZWFyY2ggaXMgY2FsbGVkIG9ubHkgaWYgdGhlIGZpbHRlcmJhciBleGlzdHNcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgYkhpZGVEcmFmdCA9IEZpbHRlclV0aWxzLmdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0KG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgYkhpZGVEcmFmdCk7XG5cdFx0XHRjb25zdCBkeW5hbWljUGFnZSA9IHRoaXMuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0aWYgKCF0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9NZGNDaGFydCkge1xuXHRcdFx0XHQvLyBkaXNhYmxlIGJvdW5kIGFjdGlvbnMgVE9ETzogdGhpcyBjbGVhcnMgZXZlcnl0aGluZyBmb3IgdGhlIGNoYXJ0P1xuXHRcdFx0XHQob01kY0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFwiXCIsIHt9KTtcblxuXHRcdFx0XHRjb25zdCBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0ID0gb01kY0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KFwicGFnZUludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0XHRjb25zdCBzVGVtcGxhdGVDb250ZW50VmlldyA9IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCk7XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvL2xvZ2ljIGZvciBleHBhbnNpb24gb3IgY29sbGFwc2Ugb2YgZmlsdGVyIGJhciBzdGFydHNcblx0XHRcdGlmICghRGV2aWNlLnN5c3RlbS5kZXNrdG9wICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKGR5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKCkgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0ZHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vc2V0dGluZyBpdCB0byBmYWxzZSBzbyB0aGF0IGZ1cnRoZXIgc2VhcmNoIG9yICdHbycgdHJpZ2dlcnMgd29uJ3QgY29sbGFwc2UgdGhlIGZpbHRlciBiYXJcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZFwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHN0b3JlIGZpbHRlciBiYXIgY29uZGl0aW9ucyB0byB1c2UgbGF0ZXIgd2hpbGUgbmF2aWdhdGlvblxuXHRcdFx0U3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvRmlsdGVyQmFyKVxuXHRcdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGUpID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpbHRlckJhckNvbmRpdGlvbnMgPSBvRXh0ZXJuYWxTdGF0ZS5maWx0ZXI7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0aWYgKERldmljZS5zeXN0ZW0ucGhvbmUpIHtcblx0XHRcdFx0Y29uc3Qgb0R5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCk7XG5cdFx0XHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZCh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuc2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eShmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdFx0b0NvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLFxuXHRcdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQ8eyBkYXRhOiB1bmtub3duIH0sIENoYXJ0VHlwZT4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRDb250ZW50KCkgYXMgQ2hhcnQsXG5cdFx0XHRcdG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCksXG5cdFx0XHRcdGFEYXRhID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImRhdGFcIiksXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoYURhdGEpIHtcblx0XHRcdFx0Q2hhcnRVdGlscy5zZXRDaGFydEZpbHRlcnMob01kY0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCk7XG5cdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAob1RhYmxlKSB7XG5cdFx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkS2V5OiBzdHJpbmcgPVxuXHRcdFx0XHQob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSkuc2VsZWN0ZWRLZXkgfHwgKG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgeyBrZXk6IHN0cmluZyB9KS5rZXk7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYWxwQ29udGVudFZpZXdcIiwgc2VsZWN0ZWRLZXkpO1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cblx0XHRcdHN3aXRjaCAoc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlOlxuXHRcdFx0XHRcdGlmIChvVGFibGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ6XG5cdFx0XHRcdFx0aWYgKG9DaGFydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0IGFzIENoYXJ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ6XG5cdFx0XHRcdFx0aWYgKG9UYWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG9DaGFydCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0IGFzIENoYXJ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHQvLyBzZXRUaW1lb3V0IGNhdXNlIHRoZSB2YXJpYW50IG5lZWRzIHRvIGJlIGFwcGxpZWQgYmVmb3JlIGp1ZGdpbmcgdGhlIGF1dG8gc2VhcmNoIG9yIHVwZGF0aW5nIHRoZSBhcHAgc3RhdGVcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0ZvclNlZ21lbnRlZEJ1dHRvbigpO1xuXHRcdH0sXG5cdFx0b25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBldmVudDogRHluYW1pY1BhZ2VUaXRsZSRTdGF0ZUNoYW5nZUV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRcdHRoaXMuc2V0RmlsdGVyVG9nZ2xlVmlzaWJpbGl0eSghIWV2ZW50LmdldFBhcmFtZXRlcihcImlzRXhwYW5kZWRcIikpO1xuXHRcdFx0XHRpZiAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCkuYW5ub3VuY2UoXG5cdFx0XHRcdFx0XHRmaWx0ZXJCYXIuZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpLmZpbHRlcnNUZXh0IGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2VNb2RlLkFzc2VydGl2ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgZm9jdXMgZm9yIHRoZSBzZWdtZW50ZWQgYnV0dG9uLlxuXHQgKi9cblx0Zm9jdXNIYW5kbGluZ0ZvclNlZ21lbnRlZEJ1dHRvbigpOiB2b2lkIHtcblx0XHRjb25zdCBzZWdtZW50ZWRCdXR0b24gPSB0aGlzLl9nZXRTZWdtZW50ZWRCdXR0b24oKTtcblx0XHRpZiAoc2VnbWVudGVkQnV0dG9uKSB7XG5cdFx0XHRjb25zdCBldmVudERlbGVnYXRlID0ge1xuXHRcdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0c2VnbWVudGVkQnV0dG9uLmZvY3VzKCk7XG5cdFx0XHRcdFx0c2VnbWVudGVkQnV0dG9uLnJlbW92ZUV2ZW50RGVsZWdhdGUoZXZlbnREZWxlZ2F0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRzZWdtZW50ZWRCdXR0b24uYWRkRXZlbnREZWxlZ2F0ZShldmVudERlbGVnYXRlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9jYWwgVUkgbW9kZWwgb2YgdGhlIHBhZ2Ugd2l0aCB0aGUgU2VsZWN0aW9uIFZhcmlhbnQuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqL1xuXHRhc3luYyBfc3RvcmVGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KGZpbHRlckJhcjogRmlsdGVyQmFyLCBpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRcdGNvbnN0IHN2ID0gYXdhaXQgZmlsdGVyQmFyQVBJLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudFwiLCBzdik7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEVycm9yIGZldGNoaW5nIHNlbGVjdGlvbiB2YXJpYW50IG9uIGZpbHRlciBjaGFuZ2U6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgU2VsZWN0aW9uIFZhcmlhbnQgZnJvbSBpbnRlcm5hbCBtb2RlbC5cblx0ICogQHJldHVybnMgU2VsZWN0aW9uVmFyaWFudFxuXHQgKi9cblx0Z2V0RmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCgpOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50XCIpIGFzIFNlbGVjdGlvblZhcmlhbnQpIHx8IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgbWVzc2FnZSBidXR0b24gaW4gdGhlIGZvb3RlciBpbiBjYXNlIHRoZXJlIGlzIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdGhhbmRsZU1lc3NhZ2VCdXR0b25WaXNpYmlsaXR5KGV2ZW50OiBVSTVFdmVudDx7IHZpc2libGU6IGJvb2xlYW4gfSwgTWVzc2FnZUJ1dHRvbj4pOiB2b2lkIHtcblx0XHRpZiAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlzaWJsZVwiKSkge1xuXHRcdFx0dGhpcy5zZXRTaG93Rm9vdGVyKGV2ZW50LmdldFBhcmFtZXRlcihcInZpc2libGVcIikpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0UmVwb3J0Q29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa0VBLE1BQU1BLG1CQUFtQixHQUFHQyxXQUFXLENBQUNELG1CQUFtQjtJQUMxREUsZUFBZSxHQUFHRCxXQUFXLENBQUNDLGVBQWU7O0VBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQSxJQU1NQyxvQkFBb0IsSUFBQUMsSUFBQSxHQUR6QkMsY0FBYyxDQUFDLGtEQUFrRCxDQUFDLEVBQUFDLEtBQUEsR0FFakVDLGNBQWMsQ0FDZEMsZUFBZSxDQUFDQyxRQUFRLENBQUM7SUFDeEJDLGNBQWMsRUFBRSxTQUFBQSxDQUFBLEVBQWlDO01BQy9DLElBQUksQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLENBQUMsQ0FBMEJDLGVBQWUsQ0FBQyxDQUFDO0lBQzNFO0VBQ0QsQ0FBQyxDQUNGLENBQUMsRUFBQUMsS0FBQSxHQUdBUCxjQUFjLENBQ2RRLDZCQUE2QixDQUFDTixRQUFRLENBQUM7SUFDdENPLFlBQVksRUFBRSxTQUFBQSxDQUFBLEVBQStDO01BQzVELE9BQVEsSUFBSSxDQUFDQyxJQUFJLENBQTBCQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2pFO0VBQ0QsQ0FBQyxDQUNGLENBQUMsRUFBQUMsS0FBQSxHQUdBWixjQUFjLENBQUNhLFdBQVcsQ0FBQ1gsUUFBUSxDQUFDWSxtQkFBbUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHekRmLGNBQWMsQ0FBQ2dCLHFCQUFxQixDQUFDZCxRQUFRLENBQUNlLDZCQUE2QixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc3RWxCLGNBQWMsQ0FBQ21CLEtBQUssQ0FBQ2pCLFFBQVEsQ0FBQ2tCLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHOUNyQixjQUFjLENBQUNz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