@sapui5/sap.fe.templates 1.101.1 → 1.102.0

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 (93) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +8 -5
  4. package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +11 -5
  5. package/src/sap/fe/templates/ListReport/ListReport.view.xml +104 -57
  6. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +104 -19
  7. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +98 -19
  8. package/src/sap/fe/templates/ListReport/ListReportTemplating.js +45 -0
  9. package/src/sap/fe/templates/ListReport/ListReportTemplating.ts +30 -0
  10. package/src/sap/fe/templates/ListReport/overrides/Share.js +7 -4
  11. package/src/sap/fe/templates/ListReport/overrides/Share.ts +4 -3
  12. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +10 -2
  13. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +7 -1
  14. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +164 -18
  15. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +51 -47
  16. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +52 -40
  17. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +872 -0
  18. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +837 -0
  19. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +3 -3
  20. package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +2 -2
  21. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +9 -10
  22. package/src/sap/fe/templates/ObjectPage/view/fragments/CollaborationDraft.fragment.xml +1 -2
  23. package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +15 -15
  24. package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +27 -23
  25. package/src/sap/fe/templates/ObjectPage/view/fragments/FormActionButtons.fragment.xml +15 -16
  26. package/src/sap/fe/templates/ObjectPage/view/fragments/FormActions.fragment.xml +1 -5
  27. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPoint.fragment.xml +1 -2
  28. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPointTitle.fragment.xml +1 -3
  29. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +3 -4
  30. package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +16 -17
  31. package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingTitle.fragment.xml +3 -3
  32. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +3 -3
  33. package/src/sap/fe/templates/ObjectPage/view/fragments/RelatedApps.fragment.xml +7 -4
  34. package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +71 -6
  35. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +114 -94
  36. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContentLazyLoader.fragment.xml +127 -107
  37. package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +81 -33
  38. package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.ts +71 -33
  39. package/src/sap/fe/templates/controls/MacroChart.fragment.xml +1 -0
  40. package/src/sap/fe/templates/controls/Table.fragment.xml +3 -4
  41. package/src/sap/fe/templates/library.js +1 -1
  42. package/src/sap/fe/templates/messagebundle_ar.properties +10 -6
  43. package/src/sap/fe/templates/messagebundle_bg.properties +6 -2
  44. package/src/sap/fe/templates/messagebundle_ca.properties +10 -6
  45. package/src/sap/fe/templates/messagebundle_cs.properties +6 -2
  46. package/src/sap/fe/templates/messagebundle_cy.properties +10 -6
  47. package/src/sap/fe/templates/messagebundle_da.properties +10 -6
  48. package/src/sap/fe/templates/messagebundle_de.properties +10 -6
  49. package/src/sap/fe/templates/messagebundle_el.properties +10 -6
  50. package/src/sap/fe/templates/messagebundle_en.properties +6 -2
  51. package/src/sap/fe/templates/messagebundle_en_GB.properties +8 -4
  52. package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +13 -5
  53. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +7 -3
  54. package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +7 -3
  55. package/src/sap/fe/templates/messagebundle_es.properties +6 -2
  56. package/src/sap/fe/templates/messagebundle_es_MX.properties +10 -6
  57. package/src/sap/fe/templates/messagebundle_et.properties +6 -2
  58. package/src/sap/fe/templates/messagebundle_fi.properties +10 -6
  59. package/src/sap/fe/templates/messagebundle_fr.properties +6 -2
  60. package/src/sap/fe/templates/messagebundle_fr_CA.properties +10 -6
  61. package/src/sap/fe/templates/messagebundle_hi.properties +10 -6
  62. package/src/sap/fe/templates/messagebundle_hr.properties +10 -6
  63. package/src/sap/fe/templates/messagebundle_hu.properties +6 -2
  64. package/src/sap/fe/templates/messagebundle_id.properties +6 -2
  65. package/src/sap/fe/templates/messagebundle_it.properties +10 -6
  66. package/src/sap/fe/templates/messagebundle_iw.properties +10 -6
  67. package/src/sap/fe/templates/messagebundle_ja.properties +6 -2
  68. package/src/sap/fe/templates/messagebundle_kk.properties +10 -6
  69. package/src/sap/fe/templates/messagebundle_ko.properties +6 -2
  70. package/src/sap/fe/templates/messagebundle_lt.properties +6 -2
  71. package/src/sap/fe/templates/messagebundle_lv.properties +6 -2
  72. package/src/sap/fe/templates/messagebundle_ms.properties +10 -6
  73. package/src/sap/fe/templates/messagebundle_nl.properties +6 -2
  74. package/src/sap/fe/templates/messagebundle_no.properties +10 -6
  75. package/src/sap/fe/templates/messagebundle_pl.properties +10 -6
  76. package/src/sap/fe/templates/messagebundle_pt.properties +7 -3
  77. package/src/sap/fe/templates/messagebundle_pt_PT.properties +6 -2
  78. package/src/sap/fe/templates/messagebundle_ro.properties +10 -6
  79. package/src/sap/fe/templates/messagebundle_ru.properties +10 -6
  80. package/src/sap/fe/templates/messagebundle_sh.properties +6 -2
  81. package/src/sap/fe/templates/messagebundle_sk.properties +6 -2
  82. package/src/sap/fe/templates/messagebundle_sl.properties +10 -6
  83. package/src/sap/fe/templates/messagebundle_sv.properties +6 -2
  84. package/src/sap/fe/templates/messagebundle_th.properties +10 -6
  85. package/src/sap/fe/templates/messagebundle_tr.properties +6 -2
  86. package/src/sap/fe/templates/messagebundle_uk.properties +6 -2
  87. package/src/sap/fe/templates/messagebundle_vi.properties +10 -6
  88. package/src/sap/fe/templates/messagebundle_zh_CN.properties +10 -6
  89. package/src/sap/fe/templates/messagebundle_zh_TW.properties +10 -6
  90. package/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +0 -482
  91. package/src/sap/fe/templates/ObjectPage/AnnotationHelper.ts +0 -511
  92. package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.js +0 -120
  93. package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.ts +0 -138
@@ -336,7 +336,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
336
336
  this.getView().byId(this.getView().getContent()[0].data("visualFilterBarId")).setVisible(true);
337
337
  }
338
338
  },
339
- onStateChanged: function () {
339
+ onStateChange: function () {
340
340
  this.getExtensionAPI().updateAppState();
341
341
  }
342
342
  };
@@ -447,7 +447,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
447
447
  // happen after the routeMatch event has been processed (otherwise the router gets broken)
448
448
 
449
449
  this.getAppComponent().getRouterProxy().waitForRouteMatchBeforeNavigation();
450
- this._isMultiMode() && this._updateMultiControlHiddenStatus();
450
+ this._isMultiMode() && this._updateMultiControlHiddenStatus(); // Configure the initial load settings
451
+
452
+ this._setInitLoad();
451
453
  };
452
454
 
453
455
  _proto.onExit = function onExit() {
@@ -466,28 +468,33 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
466
468
  var oTableBinding = this._getTableBinding();
467
469
 
468
470
  if (oTableBinding) {
469
- if (!this.sUpdateTimer) {
470
- this.sUpdateTimer = setTimeout(function () {
471
- oTableBinding.refresh();
471
+ if (CommonUtils.getAppComponent(this.getView())._isFclEnabled()) {
472
+ // there is an issue if we use a timeout with a kept alive context used on another page
473
+ oTableBinding.refresh();
474
+ } else {
475
+ if (!this.sUpdateTimer) {
476
+ this.sUpdateTimer = setTimeout(function () {
477
+ oTableBinding.refresh();
472
478
 
473
- if (_this6._isMultiMode()) {
474
- _this6._setCountsOutDated();
479
+ if (_this6._isMultiMode()) {
480
+ _this6._setCountsOutDated();
475
481
 
476
- _this6._updateCounts();
477
- }
482
+ _this6._updateCounts();
483
+ }
478
484
 
479
- delete _this6.sUpdateTimer;
480
- }, 0);
481
- } // Update action enablement and visibility upon table data update.
485
+ delete _this6.sUpdateTimer;
486
+ }, 0);
487
+ } // Update action enablement and visibility upon table data update.
482
488
 
483
489
 
484
- var fnUpdateTableActions = function () {
485
- _this6._updateTableActions(aTables);
490
+ var fnUpdateTableActions = function () {
491
+ _this6._updateTableActions(aTables);
486
492
 
487
- oTableBinding.detachDataReceived(fnUpdateTableActions);
488
- };
493
+ oTableBinding.detachDataReceived(fnUpdateTableActions);
494
+ };
489
495
 
490
- oTableBinding.attachDataReceived(fnUpdateTableActions);
496
+ oTableBinding.attachDataReceived(fnUpdateTableActions);
497
+ }
491
498
  }
492
499
 
493
500
  EditState.setEditStateProcessed();
@@ -642,10 +649,22 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
642
649
  return oTitleInfo;
643
650
  };
644
651
 
652
+ _proto._getPageOrFilterBarVariantManagement = function _getPageOrFilterBarVariantManagement() {
653
+ return this.getView().byId("fe::PageVariantManagement") || this.getView().byId(this._getFilterBarControlId() + "::VariantManagement");
654
+ };
655
+
645
656
  _proto._getFilterBarControl = function _getFilterBarControl() {
646
657
  return this.getView().byId(this._getFilterBarControlId());
647
658
  };
648
659
 
660
+ _proto._getAdaptationFilterBarControl = function _getAdaptationFilterBarControl() {
661
+ // If the adaptation filter bar is part of the DOM tree, the "Adapt Filter" dialog is open,
662
+ // and we return the adaptation filter bar as an active control (visible for the user)
663
+ var adaptationFilterBar = this._getFilterBarControl().getInbuiltFilter();
664
+
665
+ return adaptationFilterBar !== null && adaptationFilterBar !== void 0 && adaptationFilterBar.getParent() ? adaptationFilterBar : undefined;
666
+ };
667
+
649
668
  _proto._getSegmentedButton = function _getSegmentedButton(sControl) {
650
669
  return this.getView().byId(this._getSegmentedButtonId(sControl));
651
670
  };
@@ -782,6 +801,19 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
782
801
 
783
802
  return this._bMultiMode;
784
803
  }
804
+ /**
805
+ * Method to know if ListReport is configured to load data at start up.
806
+ *
807
+ * @function
808
+ * @name _isInitLoadDisabled
809
+ * @returns {boolean} Is InitLoad enabled?
810
+ */
811
+ ;
812
+
813
+ _proto._isInitLoadEnabled = function _isInitLoadEnabled() {
814
+ var initLoadMode = this.getView().getViewData().initialLoad;
815
+ return initLoadMode === InitialLoadMode.Enabled;
816
+ }
785
817
  /**
786
818
  * Method to know if ListReport is configured with Multiple EntitySets.
787
819
  *
@@ -797,6 +829,55 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
797
829
 
798
830
  _proto._hasMultiVisualizations = function _hasMultiVisualizations() {
799
831
  return this.getView().getContent()[0].data("hasMultiVisualizations") === "true";
832
+ }
833
+ /**
834
+ * Method to suspend search on the filter bar. The initial loading of data is disabled based on the manifest configuration InitLoad - Disabled/Auto.
835
+ * It is enabled later when the view state is set, when it is possible to realize if there are default filters.
836
+ */
837
+ ;
838
+
839
+ _proto._disableInitLoad = function _disableInitLoad() {
840
+ var filterBar = this._getFilterBarControl(); // check for filter bar hidden
841
+
842
+
843
+ if (filterBar) {
844
+ filterBar.setSuspendSelection(true);
845
+ }
846
+ }
847
+ /**
848
+ * Method called by flex to determine if the applyAutomatically setting on the variant is valid.
849
+ * Called only for Standard Variant and only when there is display text set for applyAutomatically (FE only sets it for Auto).
850
+ *
851
+ * @returns Boolean true if data should be loaded automatically, false otherwise
852
+ */
853
+ ;
854
+
855
+ _proto._applyAutomaticallyOnStandardVariant = function _applyAutomaticallyOnStandardVariant() {
856
+ // We always return false and take care of it when view state is set
857
+ return false;
858
+ }
859
+ /**
860
+ * Configure the settings for initial load based on
861
+ * - manifest setting initLoad - Enabled/Disabled/Auto
862
+ * - user's setting of applyAutomatically on variant
863
+ * - if there are default filters
864
+ * We disable the filter bar search at the beginning and enable it when view state is set.
865
+ */
866
+ ;
867
+
868
+ _proto._setInitLoad = function _setInitLoad() {
869
+ // if initLoad is Disabled or Auto, switch off filter bar search temporarily at start
870
+ if (!this._isInitLoadEnabled()) {
871
+ this._disableInitLoad();
872
+ } // set hook for flex for when standard variant is set (at start or by user at runtime)
873
+ // required to override the user setting 'apply automatically' behaviour if there are no filters
874
+
875
+
876
+ var variantManagement = this._getPageOrFilterBarVariantManagement();
877
+
878
+ if (variantManagement) {
879
+ variantManagement.registerApplyAutomaticallyOnStandardVariant(this._applyAutomaticallyOnStandardVariant.bind(this));
880
+ }
800
881
  };
801
882
 
802
883
  _proto._setShareModel = function _setShareModel() {
@@ -1033,7 +1114,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
1033
1114
  for (var sKey in oConditions) {
1034
1115
  // ignore filters starting with $ (e.g. $search, $editState)
1035
1116
  if (!sKey.startsWith("$") && Array.isArray(oConditions[sKey]) && oConditions[sKey].length) {
1036
- return true;
1117
+ // load data as per user's setting of applyAutomatically on the variant
1118
+ var standardVariant = oVM.getVariants().find(function (variant) {
1119
+ return variant.key === oVM.getCurrentVariantKey();
1120
+ });
1121
+ return standardVariant && standardVariant.executeOnSelect;
1037
1122
  }
1038
1123
  }
1039
1124
  }
@@ -1112,4 +1197,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
1112
1197
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype)), _class2)) || _class);
1113
1198
  return ListReportController;
1114
1199
  }, false);
1115
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOlsiVGVtcGxhdGVDb250ZW50VmlldyIsIkNvcmVMaWJyYXJ5IiwiSW5pdGlhbExvYWRNb2RlIiwiTGlzdFJlcG9ydENvbnRyb2xsZXIiLCJkZWZpbmVVSTVDbGFzcyIsInVzaW5nRXh0ZW5zaW9uIiwiSW50ZXJuYWxSb3V0aW5nIiwib3ZlcnJpZGUiLCJvbkFmdGVyQmluZGluZyIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiX29uQWZ0ZXJCaW5kaW5nIiwiSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRFbnRpdHlTZXQiLCJiYXNlIiwiZ2V0Q3VycmVudEVudGl0eVNldCIsIlNpZGVFZmZlY3RzIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJTaGFyZSIsIlNoYXJlT3ZlcnJpZGVzIiwiRWRpdEZsb3ciLCJFZGl0Rmxvd092ZXJyaWRlcyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIktQSU1hbmFnZW1lbnQiLCJQbGFjZWhvbGRlciIsIk1hc3NFZGl0IiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJwcml2YXRlRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uVGFiTXVsdGlNb2RlQ2hhbmdlIiwib0V2ZW50IiwiX3VwZGF0ZU11bHRpTW9kZVNlbGVjdGVkQ29udHJvbCIsIl91cGRhdGVNdWx0aUNvbnRyb2xIaWRkZW5TdGF0dXMiLCJvRmlsdGVyQmFyIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9EaXNwbGF5ZWRDb250cm9sIiwiX2dldEN1cnJlbnRDb250cm9sIiwib011bHRpTW9kZUNvbnRyb2wiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsInNTZWxlY3RlZEtleSIsImdldFNlbGVjdGVkS2V5Iiwic1ByZXZpb3VzU2VsZWN0ZWRLZXkiLCJtUGFyYW1ldGVycyIsInByZXZpb3VzS2V5IiwidW5kZWZpbmVkIiwic2V0UHJvcGVydHkiLCJnZXRQcm9wZXJ0eSIsIl9pc0N1c3RvbVRhYiIsIm9GaWx0ZXJDb25kaXRpb25zIiwiZ2V0RmlsdGVyQ29uZGl0aW9ucyIsIm9uVmlld05lZWRzUmVmcmVzaCIsImZpbHRlckNvbmRpdGlvbnMiLCJjdXJyZW50VGFiSWQiLCJyZWZyZXNoQ2F1c2UiLCJpc0EiLCJnZXRSb3dCaW5kaW5nIiwiZGF0YSIsInJlYmluZCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImdldEJpbmRpbmciLCJvSW5uZXJDaGFydCIsImdldEJpbmRpbmdJbmZvIiwic2VsZWN0ZWRLZXkiLCJDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkiLCJhZGQiLCJjaGFuZ2VzIiwiY2hhbmdlU3BlY2lmaWNEYXRhIiwiY2hhbmdlVHlwZSIsImNvbnRlbnQiLCJwcmV2aW91c1NlbGVjdGVkS2V5Iiwic2VsZWN0b3JFbGVtZW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJvbkZpbHRlcnNDaGFuZ2VkIiwib25QZW5kaW5nRmlsdGVycyIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsImdldFBhcmFtZXRlciIsIm9uVmFyaWFudFNlbGVjdGVkIiwib1ZNIiwiZ2V0U291cmNlIiwic2V0VGltZW91dCIsIl9pc011bHRpTW9kZSIsImFwcGx5IiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwidHJpZ2dlclNlYXJjaCIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsImdldENvbmRpdGlvbnMiLCJhQ29udHJvbHMiLCJfZ2V0Q29udHJvbHMiLCJfc2V0Q291bnRzT3V0RGF0ZWQiLCJzRGlzcGxheWVkQ29udHJvbElkIiwiZ2V0SWQiLCJfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzIiwiZm9yRWFjaCIsIm9Db250cm9sIiwiX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvUGFnZUludGVybmFsTW9kZWxDb250ZXh0Iiwic1RlbXBsYXRlQ29udGVudFZpZXciLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwic3lzdGVtIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJieUlkIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJvQ29udHJvbGxlciIsInNPdXRib3VuZFRhcmdldCIsIm9Db250ZXh0Iiwic0NyZWF0ZVBhdGgiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJnZXRDb250ZW50Iiwib1RhYmxlIiwiX2dldFRhYmxlIiwiYURhdGEiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0IiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImtleSIsIm9DaGFydCIsIm9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJhSXRlbXMiLCJvU2VnbWVudGVkQnV0dG9uIiwiZ2V0SXRlbXMiLCJvSXRlbSIsImdldEtleSIsImZvY3VzIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIl9nZXRTZWdtZW50ZWRCdXR0b24iLCJhZGRFdmVudERlbGVnYXRlIiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwib25GaWx0ZXJzU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNldFZpc2libGUiLCJvblN0YXRlQ2hhbmdlZCIsImZvcm1hdHRlcnMiLCJzZXRUYWJNZXNzYWdlU3RyaXAiLCJhSWdub3JlZEZpZWxkcyIsInNUYWJUaXRsZSIsImJJc0NoYXJ0Iiwib0FwcGx5U3VwcG9ydGVkIiwic1RleHQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJzRmlsdGVyQmFyRW50aXR5UGF0aCIsIm9NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9SZXNvdXJjZUJ1bmRsZSIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJhSWdub3JlZExhYmVscyIsIm1hcCIsInNQcm9wZXJ0eSIsIm9NYWNyb1Jlc291cmNlQnVuZGxlIiwiZ2V0VGV4dCIsInNMYWJlbCIsImdldE9iamVjdCIsIkRlbGVnYXRlVXRpbCIsImdldExvY2FsaXplZFRleHQiLCJiSXNTZWFyY2hJZ25vcmVkIiwiZW5hYmxlU2VhcmNoIiwiQ29tbW9uVXRpbHMiLCJnZXRNZXNzYWdlU3RyaXBUZXh0IiwiZXh0ZW5zaW9uQVBJIiwiRXh0ZW5zaW9uQVBJIiwib25Jbml0IiwiUGFnZUNvbnRyb2xsZXIiLCJwcm90b3R5cGUiLCJvTXVsdGlNb2RlVGFiIiwic2VsZWN0ZWQiLCJvVXBkYXRlQ291bnRzIiwiX3VwZGF0ZUNvdW50cyIsImFkZEV2ZW50VG9CaW5kaW5nSW5mbyIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiYWxwQ29udGVudFZpZXciLCJfZ2V0RGVmYXVsdFBhdGgiLCJkZXNrdG9wIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Um91dGVyUHJveHkiLCJ3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24iLCJvbkV4aXQiLCJfb0xpc3RSZXBvcnRDb250cm9sIiwiZGVzdHJveSIsImFUYWJsZXMiLCJFZGl0U3RhdGUiLCJpc0VkaXRTdGF0ZURpcnR5Iiwib1RhYmxlQmluZGluZyIsIl9nZXRUYWJsZUJpbmRpbmciLCJzVXBkYXRlVGltZXIiLCJyZWZyZXNoIiwiZm5VcGRhdGVUYWJsZUFjdGlvbnMiLCJfdXBkYXRlVGFibGVBY3Rpb25zIiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwicGFnZVJlYWR5Iiwid2FpdEZvciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldFJlc291cmNlQnVuZGxlIiwicmVzcG9uc2UiLCJzRW50aXR5U2V0IiwiZW50aXR5U2V0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJzZXROb0RhdGFUZXh0Iiwib25QYWdlUmVhZHkiLCJmb3JjZUZvY3VzIiwiZ2V0U2hvd01lc3NhZ2VzIiwic2V0U2hvd01lc3NhZ2VzIiwic2V0Rm9jdXNPbkZpcnN0RXJyb25lb3VzRmllbGQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJfc0VudGl0eVNldCIsInNsaWNlIiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsImdldEN1c3RvbURhdGEiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib1RpdGxlSW5mbyIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiTGlzdFJlcG9ydFRpdGxlIiwiTGlzdFJlcG9ydFN1YnRpdGxlIiwiX2dldEZpbHRlckJhckNvbnRyb2xJZCIsInNDb250cm9sIiwiX2dldFNlZ21lbnRlZEJ1dHRvbklkIiwiX2dldENoYXJ0Q29udHJvbElkIiwiX2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2wiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbElkIiwiX2dldFRhYmxlQ29udHJvbElkIiwic1RhYmxlSWQiLCJvVGFibGVDb250cm9sIiwib0JpbmRpbmciLCJfZ2V0Um93QmluZGluZyIsInNLZXkiLCJvVGFiTXVsdGlNb2RlIiwiaW5kZXhPZiIsInB1c2giLCJkZWZhdWx0UGF0aCIsIl9iTXVsdGlNb2RlIiwiX2lzTXVsdGlFbnRpdHlTZXRzIiwiX3NldFNoYXJlTW9kZWwiLCJmbkdldFVzZXIiLCJPYmplY3RQYXRoIiwiZ2V0Iiwib1NoYXJlSW5mbyIsImJvb2ttYXJrVGl0bGUiLCJkb2N1bWVudCIsImJvb2ttYXJrQ3VzdG9tVXJsIiwic0hhc2giLCJoYXNoZXIiLCJnZXRIYXNoIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiaXNTaGFyZUluSmFtQWN0aXZlIiwiaXNKYW1BY3RpdmUiLCJvVGVtcGxhdGVQcml2YXRlTW9kZWwiLCJnZXRPd25lckNvbXBvbmVudCIsInNEaXNwbGF5Q29udHJvbElkIiwic0NvbnRyb2xJZCIsIm1DYWNoZSIsImlnbm9yZWRGaWVsZHMiLCJpZ25vcmVkRmllbGRzVGl0bGUiLCJhQ2hhcnRzIiwic1RhYmxlRW50aXR5UGF0aCIsInNUYWJsZUVudGl0eVNldCIsInNUYWJJZCIsImdldFBhcmVudCIsInNDYWNoZUtleSIsImdldE5vdEFwcGxpY2FibGVGaWx0ZXJzIiwiY2FsbCIsInNDaGFydEVudGl0eVBhdGgiLCJzQ2hhcnRFbnRpdHlTZXQiLCJfdXBkYXRlTXVsdGlNb2RlQ291bnRzIiwiYUJpbmRpbmdQcm9taXNlcyIsImFDb21wbGlhbnRUYWJzIiwiY29udHJvbCIsIml0ZW0iLCJtVGFiIiwic2V0Q291bnQiLCJvRmlsdGVySW5mb3MiLCJUYWJsZVV0aWxzIiwiZ2V0RmlsdGVyc0luZm9Gb3JTViIsImdldExpc3RCaW5kaW5nRm9yQ291bnQiLCJiYXRjaEdyb3VwSWQiLCJhZGRpdGlvbmFsRmlsdGVycyIsImZpbHRlcnMiLCJQcm9taXNlIiwiYWxsIiwiYUNvdW50cyIsImsiLCJnZXRDb3VudEZvcm1hdHRlZCIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImhpZGVGaWx0ZXJCYXIiLCJpbml0aWFsTG9hZCIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsImlzVGFibGVCb3VuZCIsImlzQm91bmQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbURBLE1BQU1BLG1CQUFtQixHQUFHQyxXQUFXLENBQUNELG1CQUF4QztBQUFBLE1BQ0NFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUQvQjtNQUlNQyxvQixXQURMQyxjQUFjLENBQUMsa0RBQUQsQyxVQUViQyxjQUFjLENBQ2RDLGVBQWUsQ0FBQ0MsUUFBaEIsQ0FBeUI7QUFDeEJDLElBQUFBLGNBQWMsRUFBRSxZQUFpQztBQUMvQyxXQUFLQyxPQUFMLEdBQWVDLGFBQWYsRUFBRCxDQUF5REMsZUFBekQ7QUFDQTtBQUh1QixHQUF6QixDQURjLEMsVUFRZE4sY0FBYyxDQUNkTyw2QkFBNkIsQ0FBQ0wsUUFBOUIsQ0FBdUM7QUFDdENNLElBQUFBLFlBQVksRUFBRSxZQUErQztBQUM1RCxhQUFRLEtBQUtDLElBQU4sQ0FBb0NDLG1CQUFwQyxFQUFQO0FBQ0E7QUFIcUMsR0FBdkMsQ0FEYyxDLFVBUWRWLGNBQWMsQ0FBQ1csV0FBRCxDLFVBR2RYLGNBQWMsQ0FBQ1kscUJBQXFCLENBQUNWLFFBQXRCLENBQStCVyw2QkFBL0Is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QixLQUE5QjtBQUNBO0FBQ0QsSzs7O0lBdHBCaUNzRixjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0F1N0JwQnpNLG9CIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IER5bmFtaWNQYWdlIGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBLUElNYW5hZ2VtZW50IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9LUElNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IHtcblx0ZGVmaW5lVUk1Q2xhc3MsXG5cdGV4dGVuc2libGUsXG5cdGZpbmFsRXh0ZW5zaW9uLFxuXHRwcml2YXRlRXh0ZW5zaW9uLFxuXHRwdWJsaWNFeHRlbnNpb24sXG5cdHVzaW5nRXh0ZW5zaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBDb3JlTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENoYXJ0UnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFJ1bnRpbWVcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBFZGl0Rmxvd092ZXJyaWRlcyBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9Sb290Q29udGFpbmVyL292ZXJyaWRlcy9FZGl0Rmxvd1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IEljb25UYWJCYXIgZnJvbSBcInNhcC9tL0ljb25UYWJCYXJcIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkgZnJvbSBcInNhcC91aS9mbC93cml0ZS9hcGkvQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgaGFzaGVyIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9oYXNoZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuY29uc3QgVGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCIpXG5jbGFzcyBMaXN0UmVwb3J0Q29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsUm91dGluZy5vdmVycmlkZSh7XG5cdFx0XHRvbkFmdGVyQmluZGluZzogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsUm91dGluZykge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fb25BZnRlckJpbmRpbmcoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuICh0aGlzLmJhc2UgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLmdldEN1cnJlbnRFbnRpdHlTZXQoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFNpZGVFZmZlY3RzKVxuXHRzaWRlRWZmZWN0cyE6IFNpZGVFZmZlY3RzO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRlZGl0RmxvdyE6IEVkaXRGbG93O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihLUElNYW5hZ2VtZW50KVxuXHRrcGlNYW5hZ2VtZW50ITogS1BJTWFuYWdlbWVudDtcblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIF9vTGlzdFJlcG9ydENvbnRyb2w/OiBDb250cm9sO1xuXHRwcml2YXRlIGZpbHRlckJhckNvbmRpdGlvbnM/OiBhbnk7XG5cdHByaXZhdGUgX2JNdWx0aU1vZGU/OiBib29sZWFuO1xuXHRwcml2YXRlIHNVcGRhdGVUaW1lcj86IGFueTtcblx0cHJpdmF0ZSBvUmVzb3VyY2VCdW5kbGU/OiBSZXNvdXJjZUJ1bmRsZTtcblx0cHJpdmF0ZSBfc0VudGl0eVNldD86IHN0cmluZztcblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBoYXNQZW5kaW5nVGFibGVDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBhQ29udHJvbHMgPSB0aGlzLl9nZXRDb250cm9scygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9NdWx0aU1vZGVUYWIgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ0YWJzXCIsIHtcblx0XHRcdFx0c2VsZWN0ZWQ6IG9NdWx0aU1vZGVUYWIuZ2V0U2VsZWN0ZWRLZXkoKSB8fCAob011bHRpTW9kZVRhYi5nZXRJdGVtcygpWzBdIGFzIGFueSkuZ2V0S2V5KClcblx0XHRcdH0pO1xuXHRcdFx0YUNvbnRyb2xzLmZvckVhY2goKG9Db250cm9sOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb1VwZGF0ZUNvdW50cyA9ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVDb3VudHMoKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0Q29tbW9uVXRpbHMuYWRkRXZlbnRUb0JpbmRpbmdJbmZvKG9Db250cm9sLCBcImRhdGFSZXF1ZXN0ZWRcIiwgb1VwZGF0ZUNvdW50cyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly9UT0RPOiBUaGlzIGlzIG9ubHkgYSB0ZW1wb3JhcnkgYXBwcm9hY2ggYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIGFwcCBzdGF0ZSBiZWhhdmlvdXIgaXMgZmluYWxpemVkLlxuXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYXBwbGllZEZpbHRlcnNcIiwgXCJcIik7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBmYWxzZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwidW9tXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3RvclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JOdW1iZXJcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImN1cnJlbmN5XCIsIHt9KTtcblxuXHRcdGlmICh0aGlzLl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zKCkpIHtcblx0XHRcdGxldCBhbHBDb250ZW50VmlldyA9IHRoaXMuX2dldERlZmF1bHRQYXRoKCk7XG5cdFx0XHRpZiAoIXN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHR0aGlzLl9pc011bHRpTW9kZSgpICYmIHRoaXMuX3VwZGF0ZU11bHRpQ29udHJvbEhpZGRlblN0YXR1cygpO1xuXHR9XG5cblx0b25FeGl0KCkge1xuXHRcdGRlbGV0ZSB0aGlzLmZpbHRlckJhckNvbmRpdGlvbnM7XG5cdFx0ZGVsZXRlIHRoaXMuX29MaXN0UmVwb3J0Q29udHJvbDtcblx0XHR0aGlzLmV4dGVuc2lvbkFQSSAmJiB0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0X29uQWZ0ZXJCaW5kaW5nKCkge1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpO1xuXHRcdGlmIChFZGl0U3RhdGUuaXNFZGl0U3RhdGVEaXJ0eSgpKSB7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHRpZiAoIXRoaXMuc1VwZGF0ZVRpbWVyKSB7XG5cdFx0XHRcdFx0dGhpcy5zVXBkYXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0Q291bnRzT3V0RGF0ZWQoKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ291bnRzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5zVXBkYXRlVGltZXI7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBVcGRhdGUgYWN0aW9uIGVuYWJsZW1lbnQgYW5kIHZpc2liaWxpdHkgdXBvbiB0YWJsZSBkYXRhIHVwZGF0ZS5cblx0XHRcdFx0Y29uc3QgZm5VcGRhdGVUYWJsZUFjdGlvbnMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXMpO1xuXHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcuZGV0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlVGFibGVBY3Rpb25zKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVUYWJsZUFjdGlvbnMpO1xuXHRcdFx0fVxuXHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZVByb2Nlc3NlZCgpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5zVXBkYXRlVGltZXIpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSgpKTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCkge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0KCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHQudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IHJlc3BvbnNlO1xuXHRcdFx0XHRjb25zdCBhQ29udHJvbHMgPSB0aGlzLl9nZXRDb250cm9scygpO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXQ7XG5cdFx0XHRcdGNvbnN0IHNUZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIixcblx0XHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSBhcyBSZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c0VudGl0eVNldFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQ29udHJvbHMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRcdG9Db250cm9sLnNldE5vRGF0YVRleHQoc1RleHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2cgYW5kIGZvY3VzaW5nIG9uIHRoZW1cblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblxuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgIW9GaWx0ZXJCYXIuZ2V0U2hvd01lc3NhZ2VzKCkpIHtcblx0XHRcdFx0b0ZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHRcdChvRmlsdGVyQmFyIGFzIGFueSkuc2V0Rm9jdXNPbkZpcnN0RXJyb25lb3VzRmllbGQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBsaXN0IHJlcG9ydCB2aWV3IG5lZWRzIHRvIGJlIHJlZnJlc2hlZC5cblx0ICogVGhpcyBoYXBwZW5zIGVpdGhlciB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIG9uIHRoZSBGaWx0ZXJCYXIgYW5kIHRoZSBzZWFyY2ggaXMgdHJpZ2dlcmVkLFxuXHQgKiBvciB3aGVuIGEgdGFiIHdpdGggY3VzdG9tIGNvbnRlbnQgaXMgc2VsZWN0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge21hcH0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSURcblx0ICogYW5kIHRoZSB2aWV3IHJlZnJlc2ggY2F1c2UgKHRhYkNoYW5nZWQgb3Igc2VhcmNoKS5cblx0ICogVGhlIG1hcCBsb29rcyBsaWtlIHRoaXM6XG5cdCAqIDxjb2RlPjxwcmU+XG5cdCAqIFx0e1xuXHQgKiBcdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHQgKiBcdFx0XHRDb3VudHJ5OiBbXG5cdCAqIFx0XHRcdFx0e1xuXHQgKiBcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIlxuXHQgKlx0XHRcdFx0XHR2YWxpZGF0ZWQ6IFwiTm90VmFsaWRhdGVkXCJcblx0ICpcdFx0XHRcdFx0dmFsdWVzOiBbXCJHZXJtYW55XCIsIC4uLl1cblx0ICogXHRcdFx0XHR9LFxuXHQgKiBcdFx0XHRcdC4uLlxuXHQgKiBcdFx0XHRdXG5cdCAqIFx0XHRcdC4uLlxuXHQgKiBcdFx0fSxcblx0ICpcdFx0Y3VycmVudFRhYklkOiBcImZlOjpDdXN0b21UYWI6OnRhYjFcIixcblx0ICpcdFx0cmVmcmVzaENhdXNlOiBcInRhYkNoYW5nZWRcIiB8IFwic2VhcmNoXCJcblx0ICpcdH1cblx0ICogPC9wcmU+PC9jb2RlPlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25WaWV3TmVlZHNSZWZyZXNoKG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBmaWx0ZXIgb3Igc2VhcmNoIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIEZpbHRlckJhcixcblx0ICogYnV0IGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgeWV0IGJ5IHRoZSBlbmQgdXNlciAod2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24pLlxuXHQgKiBUeXBpY2FsbHksIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IHRhYiBpcyBncmV5ZWQgb3V0IHVudGlsIHRoZSBmaWx0ZXJzIGFyZSB2YWxpZGF0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGVuZGluZ0ZpbHRlcnMoKSB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHRnZXRDdXJyZW50RW50aXR5U2V0KCkge1xuXHRcdGlmICghdGhpcy5fc0VudGl0eVNldCkge1xuXHRcdFx0Y29uc3Qgb0Rpc3BsYXllZENvbnRyb2wgPSAodGhpcy5faXNNdWx0aU1vZGUoKSAmJiB0aGlzLl9nZXRDdXJyZW50Q29udHJvbCgpKSB8fCB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0dGhpcy5fc0VudGl0eVNldCA9IG9EaXNwbGF5ZWRDb250cm9sPy5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikuc2xpY2UoMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9zRW50aXR5U2V0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBhbnkpIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLFxuXHRcdFx0XHRvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpIGFzIGFueVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cblx0XHRcdENvbW1vblV0aWxzLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggVGhlIHBhdGggb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0IHRvIGJlIHNjcm9sbGVkIHRvXG5cdCAqL1xuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZykge1xuXHRcdHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpIHtcblx0XHRjb25zdCBvVGl0bGVJbmZvID0geyB0aXRsZTogXCJcIiwgc3VidGl0bGU6IFwiXCIsIGludGVudDogXCJcIiwgaWNvbjogXCJcIiB9O1xuXHRcdG9UaXRsZUluZm8udGl0bGUgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YSgpLkxpc3RSZXBvcnRUaXRsZTtcblx0XHRvVGl0bGVJbmZvLnN1YnRpdGxlID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoKS5MaXN0UmVwb3J0U3VidGl0bGU7XG5cdFx0cmV0dXJuIG9UaXRsZUluZm87XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSkgYXMgRmlsdGVyQmFyO1xuXHR9XG5cblx0X2dldFNlZ21lbnRlZEJ1dHRvbihzQ29udHJvbDogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uSWQoc0NvbnRyb2wpKTtcblx0fVxuXG5cdF9nZXRTZWdtZW50ZWRCdXR0b25JZChzQ29udHJvbDogYW55KSB7XG5cdFx0aWYgKHNDb250cm9sID09PSBcIkNoYXJ0XCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDaGFydCgpLmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcImZpbHRlckJhcklkXCIpO1xuXHR9XG5cblx0X2dldENoYXJ0Q29udHJvbElkKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcInNpbmdsZUNoYXJ0SWRcIik7XG5cdH1cblxuXHRnZXRDaGFydENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0Q2hhcnRDb250cm9sSWQoKSk7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sSWQoKSk7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbElkKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcInZpc3VhbEZpbHRlckJhcklkXCIpO1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlXCIpIGFzIEljb25UYWJCYXI7XG5cdH1cblxuXHRfZ2V0VGFibGVDb250cm9sSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwic2luZ2xlVGFibGVJZFwiKTtcblx0fVxuXG5cdF9nZXRDdXJyZW50Q29udHJvbCgpOiBDb250cm9sIHtcblx0XHRpZiAoIXRoaXMuX29MaXN0UmVwb3J0Q29udHJvbCkge1xuXHRcdFx0Y29uc3Qgb011bHRpTW9kZVRhYiA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblx0XHRcdHRoaXMuX29MaXN0UmVwb3J0Q29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXG5cdFx0XHRcdG9NdWx0aU1vZGVUYWIuZ2V0U2VsZWN0ZWRLZXkoKSB8fCAob011bHRpTW9kZVRhYi5nZXRJdGVtcygpWzBdIGFzIGFueSkuZ2V0S2V5KClcblx0XHRcdCkgYXMgQ29udHJvbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX29MaXN0UmVwb3J0Q29udHJvbCBhcyBDb250cm9sO1xuXHR9XG5cblx0X2dldFRhYmxlKCk6IFRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLl9nZXRDdXJyZW50Q29udHJvbCgpO1xuXHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPyAob0NvbnRyb2wgYXMgVGFibGUpIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRUYWJsZUNvbnRyb2xJZCgpKSBhcyBUYWJsZTtcblx0fVxuXG5cdF9nZXRDaGFydCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRDaGFydENvbnRyb2xJZCgpKTtcblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcoc1RhYmxlSWQ/OiBhbnkpIHtcblx0XHRjb25zdCBvVGFibGVDb250cm9sID0gc1RhYmxlSWQgPyB0aGlzLmdldFZpZXcoKS5ieUlkKHNUYWJsZUlkKSA6IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvVGFibGVDb250cm9sICYmIChvVGFibGVDb250cm9sIGFzIGFueSkuX2dldFJvd0JpbmRpbmcoKTtcblxuXHRcdHJldHVybiBvQmluZGluZztcblx0fVxuXG5cdF9nZXRDb250cm9scyhzS2V5PzogYW55KSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogYW55W10gPSBbXTtcblx0XHRcdGNvbnN0IG9UYWJNdWx0aU1vZGUgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0XHRvVGFiTXVsdGlNb2RlLmdldEl0ZW1zKCkuZm9yRWFjaCgob0l0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQob0l0ZW0uZ2V0S2V5KCkpO1xuXHRcdFx0XHRpZiAoc0tleSkge1xuXHRcdFx0XHRcdGlmIChvSXRlbS5nZXRLZXkoKS5pbmRleE9mKFwiZmU6OlwiICsgc0tleSkgPiAtMSkge1xuXHRcdFx0XHRcdFx0b0NvbnRyb2wgJiYgYUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvQ29udHJvbCAmJiBhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5fZ2V0Q2hhcnQoKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCkge1xuXHRcdGNvbnN0IGRlZmF1bHRQYXRoID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJkZWZhdWx0UGF0aFwiKTtcblx0XHRzd2l0Y2ggKGRlZmF1bHRQYXRoKSB7XG5cdFx0XHRjYXNlIFwicHJpbWFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdGNhc2UgXCJzZWNvbmRhcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU7XG5cdFx0XHRjYXNlIFwiYm90aFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aCBNdWx0aXBsZSBUYWJsZSBtb2RlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2lzTXVsdGlNb2RlXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBJcyBNdWx0aXBsZSBUYWJsZSBtb2RlIHNldD9cblx0ICovXG5cdF9pc011bHRpTW9kZSgpIHtcblx0XHRpZiAoIXRoaXMuX29MaXN0UmVwb3J0Q29udHJvbCkge1xuXHRcdFx0dGhpcy5fYk11bHRpTW9kZSA9ICEhdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fYk11bHRpTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aCBNdWx0aXBsZSBFbnRpdHlTZXRzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2lzTXVsdGlFbnRpdHlTZXRzXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBJcyBNdWx0aXBsZSBFbnRpdHlTZXRzIGNvbmZpZ3VyYXRpb24/XG5cdCAqL1xuXHRfaXNNdWx0aUVudGl0eVNldHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwiaXNNdWx0aUVudGl0eVNldHNcIikgPT09IFwidHJ1ZVwiO1xuXHR9XG5cblx0X2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwiaGFzTXVsdGlWaXN1YWxpemF0aW9uc1wiKSA9PT0gXCJ0cnVlXCI7XG5cdH1cblxuXHRfc2V0U2hhcmVNb2RlbCgpIHtcblx0XHQvLyBUT0RPOiBkZWFjdGl2YXRlZCBmb3Igbm93IC0gY3VycmVudGx5IHRoZXJlIGlzIG5vIF90ZW1wbFByaXYgYW55bW9yZSwgdG8gYmUgZGlzY3Vzc2VkXG5cdFx0Ly8gdGhpcyBtZXRob2QgaXMgY3VycmVudGx5IG5vdCBjYWxsZWQgYW55bW9yZSBmcm9tIHRoZSBpbml0IG1ldGhvZFxuXG5cdFx0Y29uc3QgZm5HZXRVc2VyID0gT2JqZWN0UGF0aC5nZXQoXCJzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRVc2VyXCIpO1xuXHRcdC8vdmFyIG9NYW5pZmVzdCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWlcIik7XG5cdFx0Ly92YXIgc0Jvb2ttYXJrSWNvbiA9IChvTWFuaWZlc3QgJiYgb01hbmlmZXN0Lmljb25zICYmIG9NYW5pZmVzdC5pY29ucy5pY29uKSB8fCBcIlwiO1xuXG5cdFx0Ly9zaGFyZU1vZGVsOiBIb2xkcyBhbGwgdGhlIHNoYXJpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGluZm8gdXNlZCBpbiBYTUwgdmlld1xuXHRcdGNvbnN0IG9TaGFyZUluZm8gPSB7XG5cdFx0XHRib29rbWFya1RpdGxlOiBkb2N1bWVudC50aXRsZSwgLy9UbyBuYW1lIHRoZSBib29rbWFyayBhY2NvcmRpbmcgdG8gdGhlIGFwcCB0aXRsZS5cblx0XHRcdGJvb2ttYXJrQ3VzdG9tVXJsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gXCIjXCIgKyBzSGFzaCA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0fSxcblx0XHRcdC8qXG5cdFx0XHRcdFx0XHRcdFRvIGJlIGFjdGl2YXRlZCBvbmNlIHRoZSBGTFAgc2hvd3MgdGhlIGNvdW50IC0gc2VlIGNvbW1lbnQgYWJvdmVcblx0XHRcdFx0XHRcdFx0Ym9va21hcmtTZXJ2aWNlVXJsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHQvL3ZhciBvVGFibGUgPSBvVGFibGUuZ2V0SW5uZXJUYWJsZSgpOyBvVGFibGUgaXMgYWxyZWFkeSB0aGUgc2FwLmZlIHRhYmxlIChidXQgbm90IHRoZSBpbm5lciBvbmUpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHVzZSB0YWJsZS5nZXRMaXN0QmluZGluZ0luZm8gaW5zdGVhZCBvZiB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdFx0XHRcdHZhciBvQmluZGluZyA9IG9UYWJsZS5nZXRCaW5kaW5nKFwicm93c1wiKSB8fCBvVGFibGUuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZyA/IGZuR2V0RG93bmxvYWRVcmwob0JpbmRpbmcpIDogXCJcIjtcblx0XHRcdFx0XHRcdFx0fSwqL1xuXHRcdFx0aXNTaGFyZUluSmFtQWN0aXZlOiAhIWZuR2V0VXNlciAmJiBmbkdldFVzZXIoKS5pc0phbUFjdGl2ZSgpXG5cdFx0fTtcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZVByaXZhdGVNb2RlbCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcIl90ZW1wbFByaXZcIikgYXMgSlNPTk1vZGVsO1xuXHRcdG9UZW1wbGF0ZVByaXZhdGVNb2RlbC5zZXRQcm9wZXJ0eShcIi9saXN0UmVwb3J0L3NoYXJlXCIsIG9TaGFyZUluZm8pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhpZGRlbiB0YWJsZXMgbXVzdCBiZSBtYXJrZWQgYXMgaGlkZGVuIHRvIGF2b2lkIHNlbmRpbmdcblx0ICogcmVxdWVzdHMgd2hlbiBGaWx0ZXJCYXIgaXMgY2hhbmdlZCBvciBMUiBpcyBpbml0aWFsaXplZFxuXHQgKiBCZXN0IHdvcmtmbG93IHdvdWxkIGJlIHRvIHN1c3BlbmQgdGFibGUgYmluZGluZyBidXRcblx0ICogaWYgdGhlIHVzZXIgc3dpdGNoIHF1aWNrbHkgYmV0d2VlbiB0YWJzIHRoZSBiYXRjaCByZXNwb25zZSBvZiBwcmV2aW91c1xuXHQgKiBpcyByZWNlaXZlZCB3aGVuIHByZXZpb3VzIHRhYiBpcyBhbHJlYWR5IGRpc2FibGVkIChiaW5kaW5nIGlzIHN1c3BlbmRlZCkgYW5kXG5cdCAqIGdlbmVyYXRlcyBlcnJvci5cblx0ICogQSB0ZW1wb3Jhcnkgc29sdXRpb24gKGlmIHdlIGZpbmQgYmV0dGVyIHdvcmtmbG93KSBpcyB0byBzZXQgYSBjdXN0b21EYXRhIGFuZCBkb24ndCB0cmlnZ2VyXG5cdCAqIHJlYmluZFRhYmxlIGlmIHRoaXMgY3VzdG9tRGF0YSBpcyBzZXQgdG8gdHJ1ZS5cblx0ICovXG5cdF91cGRhdGVNdWx0aUNvbnRyb2xIaWRkZW5TdGF0dXMoKSB7XG5cdFx0Y29uc3Qgb0Rpc3BsYXllZENvbnRyb2wgPSB0aGlzLl9nZXRDdXJyZW50Q29udHJvbCgpO1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpICYmIG9EaXNwbGF5ZWRDb250cm9sKSB7XG5cdFx0XHRjb25zdCBzRGlzcGxheUNvbnRyb2xJZCA9IG9EaXNwbGF5ZWRDb250cm9sLmdldElkKCk7XG5cdFx0XHRjb25zdCBhQ29udHJvbHMgPSB0aGlzLl9nZXRDb250cm9scygpO1xuXHRcdFx0YUNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24gKG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc0NvbnRyb2xJZCA9IG9Db250cm9sLmdldElkKCk7XG5cdFx0XHRcdG9Db250cm9sLmRhdGEoXCJjb250cm9sSGlkZGVuXCIsIHNDb250cm9sSWQgIT09IHNEaXNwbGF5Q29udHJvbElkKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIG11bHRpcGxlIHRhYmxlIHNjZW5hcmlvKS5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwuY29udGV4dH0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1kYy5GaWx0ZXJCYXJ9IG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIG9GaWx0ZXJCYXI6IGFueSkge1xuXHRcdGNvbnN0IG1DYWNoZTogYW55ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogYW55ID0ge30sXG5cdFx0XHRpZ25vcmVkRmllbGRzVGl0bGU6IGFueSA9IHt9LFxuXHRcdFx0YVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIiksXG5cdFx0XHRhQ2hhcnRzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJDaGFydFwiKTtcblx0XHRhVGFibGVzLmZvckVhY2goKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBzVGFibGVFbnRpdHlQYXRoID0gb1RhYmxlLmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c1RhYmxlRW50aXR5U2V0ID0gc1RhYmxlRW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c1RhYklkID0gb1RhYmxlLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldEtleSgpLFxuXHRcdFx0XHRzVGFiVGl0bGUgPSBvVGFibGUuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0VGV4dCgpLFxuXHRcdFx0XHRzQ2FjaGVLZXkgPSBzVGFibGVFbnRpdHlTZXQgKyAob1RhYmxlLmRhdGEoXCJlbmFibGVBbmFseXRpY3NcIikgPT09IFwidHJ1ZVwiID8gXCJBbmFseXRpY2FsXCIgOiBcIlJlZ3VsYXJcIik7XG5cdFx0XHRpZiAoIW1DYWNoZVtzQ2FjaGVLZXldKSB7XG5cdFx0XHRcdG1DYWNoZVtzQ2FjaGVLZXldID0gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckJhciwgb1RhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlnbm9yZWRGaWVsZHNbc1RhYklkXSA9IG1DYWNoZVtzQ2FjaGVLZXldO1xuXHRcdFx0aWdub3JlZEZpZWxkc1RpdGxlW3NUYWJJZF0gPSB0aGlzLmZvcm1hdHRlcnMuc2V0VGFiTWVzc2FnZVN0cmlwLmNhbGwodGhpcywgbUNhY2hlW3NDYWNoZUtleV0sIHNUYWJUaXRsZSwgXCJmYWxzZVwiLCB7fSk7XG5cdFx0fSk7XG5cdFx0YUNoYXJ0cy5mb3JFYWNoKChvQ2hhcnQ6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNUYWJJZCA9IG9DaGFydC5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRLZXkoKSxcblx0XHRcdFx0c1RhYlRpdGxlID0gb0NoYXJ0LmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFRleHQoKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gc0NoYXJ0RW50aXR5U2V0ICsgXCJDaGFydFwiO1xuXHRcdFx0aWYgKCFtQ2FjaGVbc0NhY2hlS2V5XSkge1xuXHRcdFx0XHRtQ2FjaGVbc0NhY2hlS2V5XSA9IEZpbHRlclV0aWxzLmdldE5vdEFwcGxpY2FibGVGaWx0ZXJzKG9GaWx0ZXJCYXIsIG9DaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRpZ25vcmVkRmllbGRzW3NUYWJJZF0gPSBtQ2FjaGVbc0NhY2hlS2V5XTtcblx0XHRcdGlnbm9yZWRGaWVsZHNUaXRsZVtzVGFiSWRdID0gdGhpcy5mb3JtYXR0ZXJzLnNldFRhYk1lc3NhZ2VTdHJpcC5jYWxsKHRoaXMsIG1DYWNoZVtzQ2FjaGVLZXldLCBzVGFiVGl0bGUsIFwiZmFsc2VcIiwge30pO1xuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInRhYnMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ0YWJzL2lnbm9yZWRGaWVsZHNUaXRsZVwiLCBpZ25vcmVkRmllbGRzVGl0bGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIGZpZWxkcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byB0aGUgZmlsdGVyIGJhciAodGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgQUxQIHNjZW5hcmlvKS5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwuY29udGV4dH0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1kYy5GaWx0ZXJCYXJ9IG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBvRmlsdGVyQmFyOiBhbnkpIHtcblx0XHRjb25zdCBtQ2FjaGU6IGFueSA9IHt9O1xuXHRcdGNvbnN0IGlnbm9yZWRGaWVsZHM6IGFueSA9IHt9LFxuXHRcdFx0YVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIiksXG5cdFx0XHRhQ2hhcnRzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJDaGFydFwiKTtcblxuXHRcdGlmICghYVRhYmxlcy5sZW5ndGggfHwgIWFDaGFydHMubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSdzIG5vdCBhIHRhYmxlIGFuZCBhIGNoYXJ0LCB3ZSdyZSBub3QgaW4gdGhlIEFMUCBjYXNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIHRoZSBtb21lbnQsIHRoZXJlJ3Mgbm90aGluZyBmb3IgdGFibGVzLi4uXG5cdFx0YUNoYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNDYWNoZUtleSA9IHNDaGFydEVudGl0eVNldCArIFwiQ2hhcnRcIjtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzQ2FjaGVLZXldID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29udHJvbHMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0fVxuXG5cdF91cGRhdGVNdWx0aU1vZGVTZWxlY3RlZENvbnRyb2woKSB7XG5cdFx0dGhpcy5fc0VudGl0eVNldCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLl9vTGlzdFJlcG9ydENvbnRyb2wgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5fZ2V0Q3VycmVudENvbnRyb2woKTtcblx0fVxuXG5cdF91cGRhdGVDb3VudHMoKSB7XG5cdFx0dGhpcy5fdXBkYXRlTXVsdGlNb2RlQ291bnRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiBhIHRhYiBmcm9tIHRoZSBsaXN0IHJlcG9ydCBpcyBhIGN1c3RvbSB0YWIuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfaXNDdXN0b21UYWJcblx0ICogQHJldHVybnMge2Jvb2xlYW59IERldGVybWluZXMgaWYgdGhlIHRhYiBpcyBhIGN1c3RvbSB0YWIuXG5cdCAqL1xuXHRfaXNDdXN0b21UYWIoKSB7XG5cdFx0Y29uc3Qgb011bHRpTW9kZUNvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0cmV0dXJuIG9NdWx0aU1vZGVDb250cm9sICYmIG9NdWx0aU1vZGVDb250cm9sLmdldFNlbGVjdGVkS2V5KCkuaW5kZXhPZihcIjo6Q3VzdG9tVGFiOjpcIikgPiAtMTtcblx0fVxuXG5cdF9zZXRDb3VudHNPdXREYXRlZCgpIHtcblx0XHRjb25zdCBvTXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblx0XHRpZiAob011bHRpTW9kZUNvbnRyb2wgJiYgb011bHRpTW9kZUNvbnRyb2wuZGF0YShcInNob3dDb3VudHNcIikgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRjb25zdCBhSXRlbXMgPSBvTXVsdGlNb2RlQ29udHJvbC5nZXRJdGVtcygpO1xuXHRcdFx0YUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKG9JdGVtOiBhbnkpIHtcblx0XHRcdFx0aWYgKG9JdGVtLmdldEtleSgpLmluZGV4T2YoXCJmZTo6Q2hhcnRcIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0b0l0ZW0uZGF0YShcIm91dGRhdGVkQ291bnRzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlTXVsdGlNb2RlQ291bnRzKCkge1xuXHRcdGxldCBhQmluZGluZ1Byb21pc2VzID0gW107XG5cdFx0Y29uc3Qgb011bHRpTW9kZUNvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0aWYgKG9NdWx0aU1vZGVDb250cm9sICYmIG9NdWx0aU1vZGVDb250cm9sLmRhdGEoXCJzaG93Q291bnRzXCIpID09PSBcInRydWVcIiAmJiAhdGhpcy5faXNDdXN0b21UYWIoKSkge1xuXHRcdFx0Y29uc3Qgb0Rpc3BsYXllZENvbnRyb2wgPSB0aGlzLl9nZXRDdXJyZW50Q29udHJvbCgpO1xuXHRcdFx0Y29uc3Qgc0Rpc3BsYXllZENvbnRyb2xJZCA9IG9EaXNwbGF5ZWRDb250cm9sLmdldElkKCk7XG5cdFx0XHRjb25zdCBhQ29tcGxpYW50VGFiczogYW55W10gPSBbXTtcblx0XHRcdGNvbnN0IGFJdGVtcyA9IG9NdWx0aU1vZGVDb250cm9sLmdldEl0ZW1zKCk7XG5cdFx0XHRhSXRlbXMuZm9yRWFjaCgob0l0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQob0l0ZW0uZ2V0S2V5KCkpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0NvbnRyb2wgJiZcblx0XHRcdFx0XHQhb0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSAmJlxuXHRcdFx0XHRcdChvSXRlbS5kYXRhKFwib3V0ZGF0ZWRDb3VudHNcIikgfHwgb0NvbnRyb2wuZ2V0SWQoKSA9PT0gc0Rpc3BsYXllZENvbnRyb2xJZClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YUNvbXBsaWFudFRhYnMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250cm9sOiBvQ29udHJvbCxcblx0XHRcdFx0XHRcdGl0ZW06IG9JdGVtXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRhQmluZGluZ1Byb21pc2VzID0gYUNvbXBsaWFudFRhYnMubWFwKChtVGFiOiBhbnkpID0+IHtcblx0XHRcdFx0bVRhYi5pdGVtLnNldENvdW50KFwiLi4uXCIpO1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IG1UYWIuY29udHJvbDtcblx0XHRcdFx0Y29uc3Qgb0ZpbHRlckluZm9zID0gVGFibGVVdGlscy5nZXRGaWx0ZXJzSW5mb0ZvclNWKG9Db250cm9sLCBtVGFiLml0ZW0uZGF0YShcInNlbGVjdGlvblZhcmlhbnRcIikpIGFzIGFueTtcblx0XHRcdFx0cmV0dXJuIFRhYmxlVXRpbHMuZ2V0TGlzdEJpbmRpbmdGb3JDb3VudChvQ29udHJvbCwgdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSwge1xuXHRcdFx0XHRcdGJhdGNoR3JvdXBJZDogb0NvbnRyb2wuZ2V0SWQoKSA9PT0gc0Rpc3BsYXllZENvbnRyb2xJZCA/IG9Db250cm9sLmRhdGEoXCJiYXRjaEdyb3VwSWRcIikgOiBcIiRhdXRvXCIsXG5cdFx0XHRcdFx0YWRkaXRpb25hbEZpbHRlcnM6IG9GaWx0ZXJJbmZvcy5maWx0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdFByb21pc2UuYWxsKGFCaW5kaW5nUHJvbWlzZXMpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhQ291bnRzOiBhbnlbXSkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgayBpbiBhQ291bnRzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvSXRlbSA9IGFDb21wbGlhbnRUYWJzW2tdLml0ZW07XG5cdFx0XHRcdFx0XHRvSXRlbS5zZXRDb3VudChUYWJsZVV0aWxzLmdldENvdW50Rm9ybWF0dGVkKGFDb3VudHNba10pKTtcblx0XHRcdFx0XHRcdG9JdGVtLmRhdGEoXCJvdXRkYXRlZENvdW50c1wiLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgdmFsdWVzIGZvciB0aGUgaWNvbiB0YWIgYmFyXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdF9pc0ZpbHRlckJhckhpZGRlbigpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5oaWRlRmlsdGVyQmFyO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogYW55KSB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKCFzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpICYmIEFycmF5LmlzQXJyYXkob0NvbmRpdGlvbnNbc0tleV0pICYmIG9Db25kaXRpb25zW3NLZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3VwZGF0ZVRhYmxlKG9UYWJsZTogYW55KSB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBhbnkpIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKS5fZ2V0Q2hhcnQob0NoYXJ0KTtcblx0XHRpZiAoIShvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5pc0JvdW5kKFwiZGF0YVwiKSkgfHwgdGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzKSB7XG5cdFx0XHRvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uVGFiTXVsdGlNb2RlQ2hhbmdlKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0dGhpcy5fdXBkYXRlTXVsdGlNb2RlU2VsZWN0ZWRDb250cm9sKCk7XG5cdFx0XHR0aGlzLl91cGRhdGVNdWx0aUNvbnRyb2xIaWRkZW5TdGF0dXMoKTtcblxuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvRGlzcGxheWVkQ29udHJvbCA9IHRoaXMuX2dldEN1cnJlbnRDb250cm9sKCkgYXMgYW55O1xuXHRcdFx0Y29uc3Qgb011bHRpTW9kZUNvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0XHRjb25zdCBzU2VsZWN0ZWRLZXkgPSBvTXVsdGlNb2RlQ29udHJvbC5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdFx0Y29uc3Qgc1ByZXZpb3VzU2VsZWN0ZWRLZXkgPSBvRXZlbnQgJiYgb0V2ZW50Lm1QYXJhbWV0ZXJzID8gb0V2ZW50Lm1QYXJhbWV0ZXJzLnByZXZpb3VzS2V5IDogdW5kZWZpbmVkO1xuXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ0YWJzL3NlbGVjdGVkXCIsIHNTZWxlY3RlZEtleSk7XG5cdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIikgIT09IHRydWUpIHtcblx0XHRcdFx0Ly8gTm8gcGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyXG5cdFx0XHRcdGlmIChvRmlsdGVyQmFyICYmIHRoaXMuX2lzQ3VzdG9tVGFiKCkpIHtcblx0XHRcdFx0XHRjb25zdCBvRmlsdGVyQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpO1xuXHRcdFx0XHRcdHRoaXMub25WaWV3TmVlZHNSZWZyZXNoKHtcblx0XHRcdFx0XHRcdGZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJDb25kaXRpb25zLFxuXHRcdFx0XHRcdFx0Y3VycmVudFRhYklkOiBzU2VsZWN0ZWRLZXksXG5cdFx0XHRcdFx0XHRyZWZyZXNoQ2F1c2U6IFwidGFiQ2hhbmdlZFwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0IW9EaXNwbGF5ZWRDb250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikgJiZcblx0XHRcdFx0XHQoIW9EaXNwbGF5ZWRDb250cm9sLmdldFJvd0JpbmRpbmcoKSB8fCAvLyBmaXJzdCB0aW1lIHRoZSB0YWIvdGFibGUgaXMgZGlzcGxheWVkXG5cdFx0XHRcdFx0XHRvRGlzcGxheWVkQ29udHJvbC5kYXRhKFwib3V0ZGF0ZWRSb3dzXCIpID09PSB0cnVlKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBTZWFyY2ggaGFzIGJlZW4gdHJpZ2dlcmVkIG9uIGEgZGlmZmVyZW50IHRhYiB7fVxuXHRcdFx0XHRcdG9EaXNwbGF5ZWRDb250cm9sLnJlYmluZCgpO1xuXHRcdFx0XHRcdG9EaXNwbGF5ZWRDb250cm9sLmRhdGEoXCJvdXRkYXRlZFJvd3NcIiwgZmFsc2UpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdG9EaXNwbGF5ZWRDb250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikgJiZcblx0XHRcdFx0XHQoIW9EaXNwbGF5ZWRDb250cm9sLmdldENvbnRyb2xEZWxlZ2F0ZSgpLl9nZXRDaGFydChvRGlzcGxheWVkQ29udHJvbCkuZ2V0QmluZGluZyhcImRhdGFcIikgfHwgLy8gZmlyc3QgdGltZSB0aGUgdGFiL2NoYXJ0IGlzIGRpc3BsYXllZFxuXHRcdFx0XHRcdFx0b0Rpc3BsYXllZENvbnRyb2wuZGF0YShcIm91dGRhdGVkUm93c1wiKSA9PT0gdHJ1ZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvRGlzcGxheWVkQ29udHJvbC5nZXRDb250cm9sRGVsZWdhdGUoKS5fZ2V0Q2hhcnQob0Rpc3BsYXllZENvbnRyb2wpO1xuXHRcdFx0XHRcdG9EaXNwbGF5ZWRDb250cm9sLmdldENvbnRyb2xEZWxlZ2F0ZSgpLnJlYmluZChvRGlzcGxheWVkQ29udHJvbCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdFx0XHRvRGlzcGxheWVkQ29udHJvbC5kYXRhKFwib3V0ZGF0ZWRSb3dzXCIsIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0V2ZW50ICYmIG9FdmVudC5tUGFyYW1ldGVycyAmJiBzUHJldmlvdXNTZWxlY3RlZEtleSAhPT0gb0V2ZW50Lm1QYXJhbWV0ZXJzLnNlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdENvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSS5hZGQoe1xuXHRcdFx0XHRcdGNoYW5nZXM6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Y2hhbmdlU3BlY2lmaWNEYXRhOiB7XG5cdFx0XHRcdFx0XHRcdFx0Y2hhbmdlVHlwZTogXCJzZWxlY3RJY29uVGFiQmFyRmlsdGVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXk6IHNTZWxlY3RlZEtleSxcblx0XHRcdFx0XHRcdFx0XHRcdHByZXZpb3VzU2VsZWN0ZWRLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RvckVsZW1lbnQ6IG9NdWx0aU1vZGVDb250cm9sXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc0NoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Ly8gUGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSB2aWV3c1xuXHRcdFx0XHR0aGlzLm9uUGVuZGluZ0ZpbHRlcnMoKTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYXBwbGllZEZpbHRlcnNcIiwgb0ZpbHRlckJhci5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCkuZmlsdGVyc1RleHQpO1xuXHRcdFx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9WTSA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRcdFx0KHRoaXMuaGFuZGxlcnMgYXMgYW55KS5vblRhYk11bHRpTW9kZUNoYW5nZS5hcHBseSh0aGlzLCBbb0V2ZW50XSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTSkpIHtcblx0XHRcdFx0XHQvLyB0aGUgYXBwIHN0YXRlIHdpbGwgYmUgdXBkYXRlZCB2aWEgb25TZWFyY2ggaGFuZGxlclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcikge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZSEhIVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdH0sXG5cdFx0b25TZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGJIaWRlRHJhZnQgPSBGaWx0ZXJVdGlscy5nZXRFZGl0U3RhdGVJc0hpZGVEcmFmdChvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGJIaWRlRHJhZnQpO1xuXHRcdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdFx0Y29uc3QgYUNvbnRyb2xzID0gdGhpcy5fZ2V0Q29udHJvbHMoKSxcblx0XHRcdFx0XHRvTXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblx0XHRcdFx0dGhpcy5fc2V0Q291bnRzT3V0RGF0ZWQoKTtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc0N1c3RvbVRhYigpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0Rpc3BsYXllZENvbnRyb2xJZCA9IHRoaXMuX2dldEN1cnJlbnRDb250cm9sKCkuZ2V0SWQoKTtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdFx0XHQvLyBUaGlzIHNob3VsZCBiZSBkb25lIG91dHNpZGUgdGhlIHNlYXJjaCBldmVudCBoYW5kbGVyIG9mIHRoZSBmaWx0ZXIgYmFyLlxuXHRcdFx0XHRcdC8vIFRoZSBzYW1lIGxvZ2ljIGlzIHJlcXVpcmVkIHdoZW4gZmlsdGVyIGJhciBpcyBoaWRkZW4gYW5kIG11bHRpcGxlIHRhYmxlcyBleGlzdCBvbiB0aGUgTFIuXG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBjdXJyZW50bHkgZG9uZSBpbiBMaXN0UmVwb3J0L292ZXJyaWRlcy9WaWV3U3RhdGUuanMjb25BZnRlclN0YXRlQXBwbGllZCgpXG5cdFx0XHRcdFx0YUNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24gKG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRcdG9Db250cm9sLmRhdGEoXCJvdXRkYXRlZFJvd3NcIiwgb0NvbnRyb2wuZ2V0SWQoKSAhPT0gc0Rpc3BsYXllZENvbnRyb2xJZCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0ZpbHRlckNvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKTtcblx0XHRcdFx0XHR0aGlzLm9uVmlld05lZWRzUmVmcmVzaCh7XG5cdFx0XHRcdFx0XHRmaWx0ZXJDb25kaXRpb25zOiBvRmlsdGVyQ29uZGl0aW9ucyxcblx0XHRcdFx0XHRcdGN1cnJlbnRUYWJJZDogb011bHRpTW9kZUNvbnRyb2wuZ2V0U2VsZWN0ZWRLZXkoKSxcblx0XHRcdFx0XHRcdHJlZnJlc2hDYXVzZTogXCJzZWFyY2hcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01kY0NoYXJ0KSB7XG5cdFx0XHRcdC8vIGRpc2FibGUgYm91bmQgYWN0aW9ucyBUT0RPOiB0aGlzIGNsZWFycyBldmVyeXRoaW5nIGZvciB0aGUgY2hhcnQ/XG5cdFx0XHRcdChvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXCJcIiwge30pO1xuXG5cdFx0XHRcdGNvbnN0IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKSArIFwiL2FscENvbnRlbnRWaWV3XCIpO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIHN0b3JlIGZpbHRlciBiYXIgY29uZGl0aW9ucyB0byB1c2UgbGF0ZXIgd2hpbGUgbmF2aWdhdGlvblxuXHRcdFx0U3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvRmlsdGVyQmFyKVxuXHRcdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0aWYgKCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkubGl2ZU1vZGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6Okxpc3RSZXBvcnRcIikgYXMgRHluYW1pY1BhZ2U7XG5cdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBhbnksIHNDcmVhdGVQYXRoOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0Q29udGVudCgpLFxuXHRcdFx0XHRvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpLFxuXHRcdFx0XHRhRGF0YSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJkYXRhXCIpLFxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKGFEYXRhKSB7XG5cdFx0XHRcdC8vIHVwZGF0ZSBhY3Rpb24gYnV0dG9ucyBlbmFibGVtZW50IC8gZGlzYWJsZW1lbnRcblx0XHRcdFx0Q2hhcnRSdW50aW1lLmZuVXBkYXRlQ2hhcnQob0V2ZW50KTtcblx0XHRcdFx0Ly8gdXBkYXRlIHNlbGVjdGlvbnMgb24gc2VsZWN0aW9uIG9yIGRlc2VsZWN0aW9uXG5cdFx0XHRcdENoYXJ0VXRpbHMuc2V0Q2hhcnRGaWx0ZXJzKG9NZGNDaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzVGVtcGxhdGVDb250ZW50VmlldyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpICsgXCIvYWxwQ29udGVudFZpZXdcIik7XG5cdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9UYWJsZSAmJiAob1RhYmxlIGFzIGFueSkucmViaW5kKCk7XG5cdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgc1NlbGVjdGVkS2V5ID0gb0V2ZW50Lm1QYXJhbWV0ZXJzLmtleSA/IG9FdmVudC5tUGFyYW1ldGVycy5rZXkgOiBudWxsO1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIHNTZWxlY3RlZEtleSk7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLl9nZXRDaGFydCgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdGNvbnN0IG9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSA9IHtcblx0XHRcdFx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvU2VnbWVudGVkQnV0dG9uLmdldEl0ZW1zKCk7XG5cdFx0XHRcdFx0YUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKG9JdGVtOiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmIChvSXRlbS5nZXRLZXkoKSA9PT0gc1NlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdFx0XHRcdG9JdGVtLmZvY3VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b1NlZ21lbnRlZEJ1dHRvbi5yZW1vdmVFdmVudERlbGVnYXRlKG9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBvU2VnbWVudGVkQnV0dG9uID0gKFxuXHRcdFx0XHRzU2VsZWN0ZWRLZXkgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGUgPyB0aGlzLl9nZXRTZWdtZW50ZWRCdXR0b24oXCJUYWJsZVwiKSA6IHRoaXMuX2dldFNlZ21lbnRlZEJ1dHRvbihcIkNoYXJ0XCIpXG5cdFx0XHQpIGFzIFNlZ21lbnRlZEJ1dHRvbjtcblx0XHRcdGlmIChvU2VnbWVudGVkQnV0dG9uICE9PSBvRXZlbnQuZ2V0U291cmNlKCkpIHtcblx0XHRcdFx0b1NlZ21lbnRlZEJ1dHRvbi5hZGRFdmVudERlbGVnYXRlKG9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSk7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKHNTZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU6XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0OlxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ6XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJzU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpID09PSBcIkNvbXBhY3RcIikge1xuXHRcdFx0XHR0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJ2aXN1YWxGaWx0ZXJCYXJJZFwiKSkgYXMgQ29udHJvbCkuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwidmlzdWFsRmlsdGVyQmFySWRcIikpIGFzIENvbnRyb2wpLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblN0YXRlQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH1cblx0fTtcblx0Zm9ybWF0dGVycyA9IHtcblx0XHQvKipcblx0XHQgKiBNZXRob2QgdG8gc2V0IHRoZSBtZXNzYWdlIHRleHQgZm9yIHRoZSBtdWx0aXBsZSBlbnRpdHkgc2V0cyB3aGVuIGZpZWxkcyBpbiB0aGUgRmlsdGVyQmFyIG5lZWQgdG8gYmUgaWdub3JlZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB0aGlzXG5cdFx0ICogQHBhcmFtIHtBcnJheX0gYUlnbm9yZWRGaWVsZHMgQXJyYXkgb2YgaWdub3JlZCBmaWVsZHMgaW4gdGhlIEZpbHRlckJhciBmb3IgdGhlIGN1cnJlbnQgdGFiIChtdWx0aXBsZSBlbnRpdHkgc2V0cylcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc1RhYlRpdGxlIFRhYiB0aXRsZVxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYklzQ2hhcnQgRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIGEgY2hhcnQgb3Igbm90XG5cdFx0ICogQHBhcmFtIHtvYmplY3R9IG9BcHBseVN1cHBvcnRlZCBBcHBseVN1cHBvcnRlZCBmb3IgdGhlIGNvbnRyb2xcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfSBNZXNzYWdlIHRleHRcblx0XHQgKi9cblx0XHRzZXRUYWJNZXNzYWdlU3RyaXAodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGFJZ25vcmVkRmllbGRzOiBhbnlbXSwgc1RhYlRpdGxlOiBzdHJpbmcsIGJJc0NoYXJ0PzogYW55LCBvQXBwbHlTdXBwb3J0ZWQ/OiBhbnkpIHtcblx0XHRcdGxldCBzVGV4dCA9IFwiXCI7XG5cdFx0XHRiSXNDaGFydCA9IGJJc0NoYXJ0ID09PSBcInRydWVcIiB8fCBiSXNDaGFydCA9PT0gdHJ1ZTtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhciAmJiBBcnJheS5pc0FycmF5KGFJZ25vcmVkRmllbGRzKSAmJiBhSWdub3JlZEZpZWxkcy5sZW5ndGggPiAwICYmIChzVGFiVGl0bGUgfHwgYklzQ2hhcnQpKSB7XG5cdFx0XHRcdGNvbnN0IHNGaWx0ZXJCYXJFbnRpdHlQYXRoID0gb0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRvTWV0YU1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS50ZW1wbGF0ZXNcIikgYXMgUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0YUlnbm9yZWRMYWJlbHMgPSBhSWdub3JlZEZpZWxkcy5tYXAoZnVuY3Rpb24gKHNQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hY3JvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5tYWNyb3NcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRcdFx0XHRpZiAoc1Byb3BlcnR5ID09PSBcIiRzZWFyY2hcIikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb01hY3JvUmVzb3VyY2VCdW5kbGUgPyBvTWFjcm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9GSUxURVJCQVJfU0VBUkNIXCIpIDogXCJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChzUHJvcGVydHkgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvTWFjcm9SZXNvdXJjZUJ1bmRsZSA/IG9NYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0NPTU1PTl9GSUxURVJCQVJfRURJVElOR19TVEFUVVNcIikgOiBcIlwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0xhYmVsID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0ZpbHRlckJhckVudGl0eVBhdGggKyBzUHJvcGVydHkgKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIik7XG5cdFx0XHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldExvY2FsaXplZFRleHQoc0xhYmVsLCBvRmlsdGVyQmFyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYklzU2VhcmNoSWdub3JlZCA9ICFvQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoO1xuXHRcdFx0XHRpZiAob1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdFx0c1RleHQgPSBDb21tb25VdGlscy5nZXRNZXNzYWdlU3RyaXBUZXh0KFxuXHRcdFx0XHRcdFx0dGhpcy5nZXRWaWV3KCksXG5cdFx0XHRcdFx0XHRhSWdub3JlZExhYmVscyxcblx0XHRcdFx0XHRcdG9GaWx0ZXJCYXIsXG5cdFx0XHRcdFx0XHRiSXNDaGFydCxcblx0XHRcdFx0XHRcdGJJc1NlYXJjaElnbm9yZWQsXG5cdFx0XHRcdFx0XHRzVGFiVGl0bGUsXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0TG9jYWxpemVkVGV4dFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBzVGV4dDtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RSZXBvcnRDb250cm9sbGVyO1xuIl19
1200
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOlsiVGVtcGxhdGVDb250ZW50VmlldyIsIkNvcmVMaWJyYXJ5IiwiSW5pdGlhbExvYWRNb2RlIiwiTGlzdFJlcG9ydENvbnRyb2xsZXIiLCJkZWZpbmVVSTVDbGFzcyIsInVzaW5nRXh0ZW5zaW9uIiwiSW50ZXJuYWxSb3V0aW5nIiwib3ZlcnJpZGUiLCJvbkFmdGVyQmluZGluZyIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiX29uQWZ0ZXJCaW5kaW5nIiwiSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRFbnRpdHlTZXQiLCJiYXNlIiwiZ2V0Q3VycmVudEVudGl0eVNldCIsIlNpZGVFZmZlY3RzIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJTaGFyZSIsIlNoYXJlT3ZlcnJpZGVzIiwiRWRpdEZsb3ciLCJFZGl0Rmxvd092ZXJyaWRlcyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIktQSU1hbmFnZW1lbnQiLCJQbGFjZWhvbGRlciIsIk1hc3NFZGl0IiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJwcml2YXRlRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uVGFiTXVsdGlNb2RlQ2hhbmdlIiwib0V2ZW50IiwiX3VwZGF0ZU11bHRpTW9kZVNlbGVjdGVkQ29udHJvbCIsIl91cGRhdGVNdWx0aUNvbnRyb2xIaWRkZW5TdGF0dXMiLCJvRmlsdGVyQmFyIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9EaXNwbGF5ZWRDb250cm9sIiwiX2dldEN1cnJlbnRDb250cm9sIiwib011bHRpTW9kZUNvbnRyb2wiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsInNTZWxlY3RlZEtleSIsImdldFNlbGVjdGVkS2V5Iiwic1ByZXZpb3VzU2VsZWN0ZWRLZXkiLCJtUGFyYW1ldGVycyIsInByZXZpb3VzS2V5IiwidW5kZWZpbmVkIiwic2V0UHJvcGVydHkiLCJnZXRQcm9wZXJ0eSIsIl9pc0N1c3RvbVRhYiIsIm9GaWx0ZXJDb25kaXRpb25zIiwiZ2V0RmlsdGVyQ29uZGl0aW9ucyIsIm9uVmlld05lZWRzUmVmcmVzaCIsImZpbHRlckNvbmRpdGlvbnMiLCJjdXJyZW50VGFiSWQiLCJyZWZyZXNoQ2F1c2UiLCJpc0EiLCJnZXRSb3dCaW5kaW5nIiwiZGF0YSIsInJlYmluZCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImdldEJpbmRpbmciLCJvSW5uZXJDaGFydCIsImdldEJpbmRpbmdJbmZvIiwic2VsZWN0ZWRLZXkiLCJDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkiLCJhZGQiLCJjaGFuZ2VzIiwiY2hhbmdlU3BlY2lmaWNEYXRhIiwiY2hhbmdlVHlwZSIsImNvbnRlbnQiLCJwcmV2aW91c1NlbGVjdGVkS2V5Iiwic2VsZWN0b3JFbGVtZW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJvbkZpbHRlcnNDaGFuZ2VkIiwib25QZW5kaW5nRmlsdGVycyIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsImdldFBhcmFtZXRlciIsIm9uVmFyaWFudFNlbGVjdGVkIiwib1ZNIiwiZ2V0U291cmNlIiwic2V0VGltZW91dCIsIl9pc011bHRpTW9kZSIsImFwcGx5IiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwidHJpZ2dlclNlYXJjaCIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsImdldENvbmRpdGlvbnMiLCJhQ29udHJvbHMiLCJfZ2V0Q29udHJvbHMiLCJfc2V0Q291bnRzT3V0RGF0ZWQiLCJzRGlzcGxheWVkQ29udHJvbElkIiwiZ2V0SWQiLCJfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzIiwiZm9yRWFjaCIsIm9Db250cm9sIiwiX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvUGFnZUludGVybmFsTW9kZWxDb250ZXh0Iiwic1RlbXBsYXRlQ29udGVudFZpZXciLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwic3lzdGVtIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJieUlkIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJvQ29udHJvbGxlciIsInNPdXRib3VuZFRhcmdldCIsIm9Db250ZXh0Iiwic0NyZWF0ZVBhdGgiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJnZXRDb250ZW50Iiwib1RhYmxlIiwiX2dldFRhYmxlIiwiYURhdGEiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0IiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImtleSIsIm9DaGFydCIsIm9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJhSXRlbXMiLCJvU2VnbWVudGVkQnV0dG9uIiwiZ2V0SXRlbXMiLCJvSXRlbSIsImdldEtleSIsImZvY3VzIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIl9nZXRTZWdtZW50ZWRCdXR0b24iLCJhZGRFdmVudERlbGVnYXRlIiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwib25GaWx0ZXJzU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNldFZpc2libGUiLCJvblN0YXRlQ2hhbmdlIiwiZm9ybWF0dGVycyIsInNldFRhYk1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwic1RhYlRpdGxlIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInNGaWx0ZXJCYXJFbnRpdHlQYXRoIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1Jlc291cmNlQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImFJZ25vcmVkTGFiZWxzIiwibWFwIiwic1Byb3BlcnR5Iiwib01hY3JvUmVzb3VyY2VCdW5kbGUiLCJnZXRUZXh0Iiwic0xhYmVsIiwiZ2V0T2JqZWN0IiwiRGVsZWdhdGVVdGlsIiwiZ2V0TG9jYWxpemVkVGV4dCIsImJJc1NlYXJjaElnbm9yZWQiLCJlbmFibGVTZWFyY2giLCJDb21tb25VdGlscyIsImdldE1lc3NhZ2VTdHJpcFRleHQiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsInByb3RvdHlwZSIsIm9NdWx0aU1vZGVUYWIiLCJzZWxlY3RlZCIsIm9VcGRhdGVDb3VudHMiLCJfdXBkYXRlQ291bnRzIiwiYWRkRXZlbnRUb0JpbmRpbmdJbmZvIiwiX2hhc011bHRpVmlzdWFsaXphdGlvbnMiLCJhbHBDb250ZW50VmlldyIsIl9nZXREZWZhdWx0UGF0aCIsImRlc2t0b3AiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsIndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbiIsIl9zZXRJbml0TG9hZCIsIm9uRXhpdCIsIl9vTGlzdFJlcG9ydENvbnRyb2wiLCJkZXN0cm95IiwiYVRhYmxlcyIsIkVkaXRTdGF0ZSIsImlzRWRpdFN0YXRlRGlydHkiLCJvVGFibGVCaW5kaW5nIiwiX2dldFRhYmxlQmluZGluZyIsIl9pc0ZjbEVuYWJsZWQiLCJyZWZyZXNoIiwic1VwZGF0ZVRpbWVyIiwiZm5VcGRhdGVUYWJsZUFjdGlvbnMiLCJfdXBkYXRlVGFibGVBY3Rpb25zIiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwicGFnZVJlYWR5Iiwid2FpdEZvciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldFJlc291cmNlQnVuZGxlIiwicmVzcG9uc2UiLCJzRW50aXR5U2V0IiwiZW50aXR5U2V0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJzZXROb0RhdGFUZXh0Iiwib25QYWdlUmVhZHkiLCJmb3JjZUZvY3VzIiwiZ2V0U2hvd01lc3NhZ2VzIiwic2V0U2hvd01lc3NhZ2VzIiwic2V0Rm9jdXNPbkZpcnN0RXJyb25lb3VzRmllbGQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJfc0VudGl0eVNldCIsInNsaWNlIiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsImdldEN1c3RvbURhdGEiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib1RpdGxlSW5mbyIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiTGlzdFJlcG9ydFRpdGxlIiwiTGlzdFJlcG9ydFN1YnRpdGxlIiwiX2dldFBhZ2VPckZpbHRlckJhclZhcmlhbnRNYW5hZ2VtZW50IiwiX2dldEZpbHRlckJhckNvbnRyb2xJZCIsIl9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCIsImFkYXB0YXRpb25GaWx0ZXJCYXIiLCJnZXRJbmJ1aWx0RmlsdGVyIiwiZ2V0UGFyZW50Iiwic0NvbnRyb2wiLCJfZ2V0U2VnbWVudGVkQnV0dG9uSWQiLCJfZ2V0Q2hhcnRDb250cm9sSWQiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCIsIl9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sSWQiLCJfZ2V0VGFibGVDb250cm9sSWQiLCJzVGFibGVJZCIsIm9UYWJsZUNvbnRyb2wiLCJvQmluZGluZyIsIl9nZXRSb3dCaW5kaW5nIiwic0tleSIsIm9UYWJNdWx0aU1vZGUiLCJpbmRleE9mIiwicHVzaCIsImRlZmF1bHRQYXRoIiwiX2JNdWx0aU1vZGUiLCJfaXNJbml0TG9hZEVuYWJsZWQiLCJpbml0TG9hZE1vZGUiLCJpbml0aWFsTG9hZCIsIkVuYWJsZWQiLCJfaXNNdWx0aUVudGl0eVNldHMiLCJfZGlzYWJsZUluaXRMb2FkIiwiZmlsdGVyQmFyIiwic2V0U3VzcGVuZFNlbGVjdGlvbiIsIl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsInZhcmlhbnRNYW5hZ2VtZW50IiwicmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCIsImJpbmQiLCJfc2V0U2hhcmVNb2RlbCIsImZuR2V0VXNlciIsIk9iamVjdFBhdGgiLCJnZXQiLCJvU2hhcmVJbmZvIiwiYm9va21hcmtUaXRsZSIsImRvY3VtZW50IiwiYm9va21hcmtDdXN0b21VcmwiLCJzSGFzaCIsImhhc2hlciIsImdldEhhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJpc1NoYXJlSW5KYW1BY3RpdmUiLCJpc0phbUFjdGl2ZSIsIm9UZW1wbGF0ZVByaXZhdGVNb2RlbCIsImdldE93bmVyQ29tcG9uZW50Iiwic0Rpc3BsYXlDb250cm9sSWQiLCJzQ29udHJvbElkIiwibUNhY2hlIiwiaWdub3JlZEZpZWxkcyIsImlnbm9yZWRGaWVsZHNUaXRsZSIsImFDaGFydHMiLCJzVGFibGVFbnRpdHlQYXRoIiwic1RhYmxlRW50aXR5U2V0Iiwic1RhYklkIiwic0NhY2hlS2V5IiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJjYWxsIiwic0NoYXJ0RW50aXR5UGF0aCIsInNDaGFydEVudGl0eVNldCIsIl91cGRhdGVNdWx0aU1vZGVDb3VudHMiLCJhQmluZGluZ1Byb21pc2VzIiwiYUNvbXBsaWFudFRhYnMiLCJjb250cm9sIiwiaXRlbSIsIm1UYWIiLCJzZXRDb3VudCIsIm9GaWx0ZXJJbmZvcyIsIlRhYmxlVXRpbHMiLCJnZXRGaWx0ZXJzSW5mb0ZvclNWIiwiZ2V0TGlzdEJpbmRpbmdGb3JDb3VudCIsImJhdGNoR3JvdXBJZCIsImFkZGl0aW9uYWxGaWx0ZXJzIiwiZmlsdGVycyIsIlByb21pc2UiLCJhbGwiLCJhQ291bnRzIiwiayIsImdldENvdW50Rm9ybWF0dGVkIiwiX2lzRmlsdGVyQmFySGlkZGVuIiwiaGlkZUZpbHRlckJhciIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsInN0YW5kYXJkVmFyaWFudCIsImdldFZhcmlhbnRzIiwiZmluZCIsInZhcmlhbnQiLCJleGVjdXRlT25TZWxlY3QiLCJpc1RhYmxlQm91bmQiLCJpc0JvdW5kIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1EQSxNQUFNQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRCxtQkFBeEM7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TUFBM0IsQ0FBM0M7QUFDQSxhQUFLZ0Qsc0JBQUwsR0FBOEIsS0FBOUI7QUFDQTtBQUNELEs7OztJQXJ1QmlDc0YsYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBc2dDcEJ6TSxvQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCBEeW5hbWljUGFnZSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgS1BJTWFuYWdlbWVudCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvS1BJTWFuYWdlbWVudFwiO1xuaW1wb3J0IE1hc3NFZGl0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NYXNzRWRpdFwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7XG5cdGRlZmluZVVJNUNsYXNzLFxuXHRleHRlbnNpYmxlLFxuXHRmaW5hbEV4dGVuc2lvbixcblx0cHJpdmF0ZUV4dGVuc2lvbixcblx0cHVibGljRXh0ZW5zaW9uLFxuXHR1c2luZ0V4dGVuc2lvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDaGFydFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRSdW50aW1lXCI7XG5pbXBvcnQgQ2hhcnRVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgRWRpdEZsb3dPdmVycmlkZXMgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvUm9vdENvbnRhaW5lci9vdmVycmlkZXMvRWRpdEZsb3dcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCBJY29uVGFiQmFyIGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgU2VnbWVudGVkQnV0dG9uIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25cIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB7IHN5c3RlbSB9IGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJIGZyb20gXCJzYXAvdWkvZmwvd3JpdGUvYXBpL0NvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSVwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IGhhc2hlciBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvaGFzaGVyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmNvbnN0IFRlbXBsYXRlQ29udGVudFZpZXcgPSBDb3JlTGlicmFyeS5UZW1wbGF0ZUNvbnRlbnRWaWV3LFxuXHRJbml0aWFsTG9hZE1vZGUgPSBDb3JlTGlicmFyeS5Jbml0aWFsTG9hZE1vZGU7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiKVxuY2xhc3MgTGlzdFJlcG9ydENvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoe1xuXHRcdFx0b25BZnRlckJpbmRpbmc6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbFJvdXRpbmcpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX29uQWZ0ZXJCaW5kaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldEVudGl0eVNldDogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiAodGhpcy5iYXNlIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5nZXRDdXJyZW50RW50aXR5U2V0KCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihTaWRlRWZmZWN0cylcblx0c2lkZUVmZmVjdHMhOiBTaWRlRWZmZWN0cztcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEVkaXRGbG93Lm92ZXJyaWRlKEVkaXRGbG93T3ZlcnJpZGVzKSlcblx0ZWRpdEZsb3chOiBFZGl0RmxvdztcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKE1hc3NFZGl0KVxuXHRtYXNzRWRpdCE6IE1hc3NFZGl0O1xuXHRwcml2YXRlIGV4dGVuc2lvbkFQST86IEV4dGVuc2lvbkFQSTtcblx0cHJpdmF0ZSBfb0xpc3RSZXBvcnRDb250cm9sPzogQ29udHJvbDtcblx0cHJpdmF0ZSBmaWx0ZXJCYXJDb25kaXRpb25zPzogYW55O1xuXHRwcml2YXRlIF9iTXVsdGlNb2RlPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBzVXBkYXRlVGltZXI/OiBhbnk7XG5cdHByaXZhdGUgb1Jlc291cmNlQnVuZGxlPzogUmVzb3VyY2VCdW5kbGU7XG5cdHByaXZhdGUgX3NFbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdHByaXZhdGUgaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcz86IGJvb2xlYW47XG5cdHByaXZhdGUgaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcz86IGJvb2xlYW47XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSSgpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0b25Jbml0KCkge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkluaXQuYXBwbHkodGhpcyk7XG5cdFx0Y29uc3QgYUNvbnRyb2xzID0gdGhpcy5fZ2V0Q29udHJvbHMoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBvTXVsdGlNb2RlVGFiID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwidGFic1wiLCB7XG5cdFx0XHRcdHNlbGVjdGVkOiBvTXVsdGlNb2RlVGFiLmdldFNlbGVjdGVkS2V5KCkgfHwgKG9NdWx0aU1vZGVUYWIuZ2V0SXRlbXMoKVswXSBhcyBhbnkpLmdldEtleSgpXG5cdFx0XHR9KTtcblx0XHRcdGFDb250cm9scy5mb3JFYWNoKChvQ29udHJvbDogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9VcGRhdGVDb3VudHMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ291bnRzKCk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdENvbW1vblV0aWxzLmFkZEV2ZW50VG9CaW5kaW5nSW5mbyhvQ29udHJvbCwgXCJkYXRhUmVxdWVzdGVkXCIsIG9VcGRhdGVDb3VudHMpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vVE9ETzogVGhpcyBpcyBvbmx5IGEgdGVtcG9yYXJ5IGFwcHJvYWNoIGFuZCB3aWxsIGJlIHJlbW92ZWQgb25jZSBhcHAgc3RhdGUgYmVoYXZpb3VyIGlzIGZpbmFsaXplZC5cblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFwcGxpZWRGaWx0ZXJzXCIsIFwiXCIpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgZmFsc2UpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInVvbVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yTnVtYmVyXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjdXJyZW5jeVwiLCB7fSk7XG5cblx0XHRpZiAodGhpcy5faGFzTXVsdGlWaXN1YWxpemF0aW9ucygpKSB7XG5cdFx0XHRsZXQgYWxwQ29udGVudFZpZXcgPSB0aGlzLl9nZXREZWZhdWx0UGF0aCgpO1xuXHRcdFx0aWYgKCFzeXN0ZW0uZGVza3RvcCAmJiBhbHBDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQpIHtcblx0XHRcdFx0YWxwQ29udGVudFZpZXcgPSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0fVxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYWxwQ29udGVudFZpZXdcIiwgYWxwQ29udGVudFZpZXcpO1xuXHRcdH1cblxuXHRcdC8vIFN0b3JlIGNvbmRpdGlvbnMgZnJvbSBmaWx0ZXIgYmFyXG5cdFx0Ly8gdGhpcyBpcyBsYXRlciB1c2VkIGJlZm9yZSBuYXZpZ2F0aW9uIHRvIGdldCBjb25kaXRpb25zIGFwcGxpZWQgb24gdGhlIGZpbHRlciBiYXJcblx0XHR0aGlzLmZpbHRlckJhckNvbmRpdGlvbnMgPSB7fTtcblxuXHRcdC8vIEFzIEFwcFN0YXRlSGFuZGxlci5hcHBseUFwcFN0YXRlIHRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBpdCB3aWxsXG5cdFx0Ly8gaGFwcGVuIGFmdGVyIHRoZSByb3V0ZU1hdGNoIGV2ZW50IGhhcyBiZWVuIHByb2Nlc3NlZCAob3RoZXJ3aXNlIHRoZSByb3V0ZXIgZ2V0cyBicm9rZW4pXG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpO1xuXG5cdFx0dGhpcy5faXNNdWx0aU1vZGUoKSAmJiB0aGlzLl91cGRhdGVNdWx0aUNvbnRyb2xIaWRkZW5TdGF0dXMoKTtcblxuXHRcdC8vIENvbmZpZ3VyZSB0aGUgaW5pdGlhbCBsb2FkIHNldHRpbmdzXG5cdFx0dGhpcy5fc2V0SW5pdExvYWQoKTtcblx0fVxuXG5cdG9uRXhpdCgpIHtcblx0XHRkZWxldGUgdGhpcy5maWx0ZXJCYXJDb25kaXRpb25zO1xuXHRcdGRlbGV0ZSB0aGlzLl9vTGlzdFJlcG9ydENvbnRyb2w7XG5cdFx0dGhpcy5leHRlbnNpb25BUEkgJiYgdGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdF9vbkFmdGVyQmluZGluZygpIHtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKTtcblx0XHRpZiAoRWRpdFN0YXRlLmlzRWRpdFN0YXRlRGlydHkoKSkge1xuXHRcdFx0Y29uc3Qgb1RhYmxlQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0aWYgKENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSkuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0Ly8gdGhlcmUgaXMgYW4gaXNzdWUgaWYgd2UgdXNlIGEgdGltZW91dCB3aXRoIGEga2VwdCBhbGl2ZSBjb250ZXh0IHVzZWQgb24gYW5vdGhlciBwYWdlXG5cdFx0XHRcdFx0b1RhYmxlQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLnNVcGRhdGVUaW1lcikge1xuXHRcdFx0XHRcdFx0dGhpcy5zVXBkYXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0b1RhYmxlQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0Q291bnRzT3V0RGF0ZWQoKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVDb3VudHMoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5zVXBkYXRlVGltZXI7XG5cdFx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBVcGRhdGUgYWN0aW9uIGVuYWJsZW1lbnQgYW5kIHZpc2liaWxpdHkgdXBvbiB0YWJsZSBkYXRhIHVwZGF0ZS5cblx0XHRcdFx0XHRjb25zdCBmblVwZGF0ZVRhYmxlQWN0aW9ucyA9ICgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcuZGV0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlVGFibGVBY3Rpb25zKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlVGFibGVBY3Rpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZVByb2Nlc3NlZCgpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5zVXBkYXRlVGltZXIpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSgpKTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCkge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0KCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHQudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IHJlc3BvbnNlO1xuXHRcdFx0XHRjb25zdCBhQ29udHJvbHMgPSB0aGlzLl9nZXRDb250cm9scygpO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXQ7XG5cdFx0XHRcdGNvbnN0IHNUZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIixcblx0XHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSBhcyBSZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c0VudGl0eVNldFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQ29udHJvbHMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRcdG9Db250cm9sLnNldE5vRGF0YVRleHQoc1RleHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2cgYW5kIGZvY3VzaW5nIG9uIHRoZW1cblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblxuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgIW9GaWx0ZXJCYXIuZ2V0U2hvd01lc3NhZ2VzKCkpIHtcblx0XHRcdFx0b0ZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHRcdChvRmlsdGVyQmFyIGFzIGFueSkuc2V0Rm9jdXNPbkZpcnN0RXJyb25lb3VzRmllbGQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBsaXN0IHJlcG9ydCB2aWV3IG5lZWRzIHRvIGJlIHJlZnJlc2hlZC5cblx0ICogVGhpcyBoYXBwZW5zIGVpdGhlciB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIG9uIHRoZSBGaWx0ZXJCYXIgYW5kIHRoZSBzZWFyY2ggaXMgdHJpZ2dlcmVkLFxuXHQgKiBvciB3aGVuIGEgdGFiIHdpdGggY3VzdG9tIGNvbnRlbnQgaXMgc2VsZWN0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge21hcH0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSURcblx0ICogYW5kIHRoZSB2aWV3IHJlZnJlc2ggY2F1c2UgKHRhYkNoYW5nZWQgb3Igc2VhcmNoKS5cblx0ICogVGhlIG1hcCBsb29rcyBsaWtlIHRoaXM6XG5cdCAqIDxjb2RlPjxwcmU+XG5cdCAqIFx0e1xuXHQgKiBcdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHQgKiBcdFx0XHRDb3VudHJ5OiBbXG5cdCAqIFx0XHRcdFx0e1xuXHQgKiBcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIlxuXHQgKlx0XHRcdFx0XHR2YWxpZGF0ZWQ6IFwiTm90VmFsaWRhdGVkXCJcblx0ICpcdFx0XHRcdFx0dmFsdWVzOiBbXCJHZXJtYW55XCIsIC4uLl1cblx0ICogXHRcdFx0XHR9LFxuXHQgKiBcdFx0XHRcdC4uLlxuXHQgKiBcdFx0XHRdXG5cdCAqIFx0XHRcdC4uLlxuXHQgKiBcdFx0fSxcblx0ICpcdFx0Y3VycmVudFRhYklkOiBcImZlOjpDdXN0b21UYWI6OnRhYjFcIixcblx0ICpcdFx0cmVmcmVzaENhdXNlOiBcInRhYkNoYW5nZWRcIiB8IFwic2VhcmNoXCJcblx0ICpcdH1cblx0ICogPC9wcmU+PC9jb2RlPlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25WaWV3TmVlZHNSZWZyZXNoKG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBmaWx0ZXIgb3Igc2VhcmNoIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIEZpbHRlckJhcixcblx0ICogYnV0IGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgeWV0IGJ5IHRoZSBlbmQgdXNlciAod2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24pLlxuXHQgKiBUeXBpY2FsbHksIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IHRhYiBpcyBncmV5ZWQgb3V0IHVudGlsIHRoZSBmaWx0ZXJzIGFyZSB2YWxpZGF0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGVuZGluZ0ZpbHRlcnMoKSB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHRnZXRDdXJyZW50RW50aXR5U2V0KCkge1xuXHRcdGlmICghdGhpcy5fc0VudGl0eVNldCkge1xuXHRcdFx0Y29uc3Qgb0Rpc3BsYXllZENvbnRyb2wgPSAodGhpcy5faXNNdWx0aU1vZGUoKSAmJiB0aGlzLl9nZXRDdXJyZW50Q29udHJvbCgpKSB8fCB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0dGhpcy5fc0VudGl0eVNldCA9IG9EaXNwbGF5ZWRDb250cm9sPy5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikuc2xpY2UoMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9zRW50aXR5U2V0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBhbnkpIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLFxuXHRcdFx0XHRvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpIGFzIGFueVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cblx0XHRcdENvbW1vblV0aWxzLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggVGhlIHBhdGggb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0IHRvIGJlIHNjcm9sbGVkIHRvXG5cdCAqL1xuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZykge1xuXHRcdHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpIHtcblx0XHRjb25zdCBvVGl0bGVJbmZvID0geyB0aXRsZTogXCJcIiwgc3VidGl0bGU6IFwiXCIsIGludGVudDogXCJcIiwgaWNvbjogXCJcIiB9O1xuXHRcdG9UaXRsZUluZm8udGl0bGUgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YSgpLkxpc3RSZXBvcnRUaXRsZTtcblx0XHRvVGl0bGVJbmZvLnN1YnRpdGxlID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoKS5MaXN0UmVwb3J0U3VidGl0bGU7XG5cdFx0cmV0dXJuIG9UaXRsZUluZm87XG5cdH1cblxuXHRfZ2V0UGFnZU9yRmlsdGVyQmFyVmFyaWFudE1hbmFnZW1lbnQoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpIHx8IHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkgKyBcIjo6VmFyaWFudE1hbmFnZW1lbnRcIilcblx0XHQpO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkpIGFzIEZpbHRlckJhcjtcblx0fVxuXG5cdF9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHQvLyBJZiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGlzIHBhcnQgb2YgdGhlIERPTSB0cmVlLCB0aGUgXCJBZGFwdCBGaWx0ZXJcIiBkaWFsb2cgaXMgb3Blbixcblx0XHQvLyBhbmQgd2UgcmV0dXJuIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgYXMgYW4gYWN0aXZlIGNvbnRyb2wgKHZpc2libGUgZm9yIHRoZSB1c2VyKVxuXHRcdGNvbnN0IGFkYXB0YXRpb25GaWx0ZXJCYXIgPSAodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIGFueSkuZ2V0SW5idWlsdEZpbHRlcigpO1xuXHRcdHJldHVybiBhZGFwdGF0aW9uRmlsdGVyQmFyPy5nZXRQYXJlbnQoKSA/IGFkYXB0YXRpb25GaWx0ZXJCYXIgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0U2VnbWVudGVkQnV0dG9uKHNDb250cm9sOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRTZWdtZW50ZWRCdXR0b25JZChzQ29udHJvbCkpO1xuXHR9XG5cblx0X2dldFNlZ21lbnRlZEJ1dHRvbklkKHNDb250cm9sOiBhbnkpIHtcblx0XHRpZiAoc0NvbnRyb2wgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENoYXJ0KCkuZGF0YShcInNlZ21lbnRlZEJ1dHRvbklkXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0VGFibGUoKT8uZGF0YShcInNlZ21lbnRlZEJ1dHRvbklkXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwiZmlsdGVyQmFySWRcIik7XG5cdH1cblxuXHRfZ2V0Q2hhcnRDb250cm9sSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwic2luZ2xlQ2hhcnRJZFwiKTtcblx0fVxuXG5cdGdldENoYXJ0Q29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRDaGFydENvbnRyb2xJZCgpKTtcblx0fVxuXG5cdF9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2xJZCgpKTtcblx0fVxuXG5cdF9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwidmlzdWFsRmlsdGVyQmFySWRcIik7XG5cdH1cblxuXHRfZ2V0TXVsdGlNb2RlQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGVcIikgYXMgSWNvblRhYkJhcjtcblx0fVxuXG5cdF9nZXRUYWJsZUNvbnRyb2xJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJzaW5nbGVUYWJsZUlkXCIpO1xuXHR9XG5cblx0X2dldEN1cnJlbnRDb250cm9sKCk6IENvbnRyb2wge1xuXHRcdGlmICghdGhpcy5fb0xpc3RSZXBvcnRDb250cm9sKSB7XG5cdFx0XHRjb25zdCBvTXVsdGlNb2RlVGFiID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXHRcdFx0dGhpcy5fb0xpc3RSZXBvcnRDb250cm9sID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcblx0XHRcdFx0b011bHRpTW9kZVRhYi5nZXRTZWxlY3RlZEtleSgpIHx8IChvTXVsdGlNb2RlVGFiLmdldEl0ZW1zKClbMF0gYXMgYW55KS5nZXRLZXkoKVxuXHRcdFx0KSBhcyBDb250cm9sO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fb0xpc3RSZXBvcnRDb250cm9sIGFzIENvbnRyb2w7XG5cdH1cblxuXHRfZ2V0VGFibGUoKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuX2dldEN1cnJlbnRDb250cm9sKCk7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSA/IChvQ29udHJvbCBhcyBUYWJsZSkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldFRhYmxlQ29udHJvbElkKCkpIGFzIFRhYmxlO1xuXHR9XG5cblx0X2dldENoYXJ0KCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldENoYXJ0Q29udHJvbElkKCkpO1xuXHR9XG5cblx0X2dldFRhYmxlQmluZGluZyhzVGFibGVJZD86IGFueSkge1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRyb2wgPSBzVGFibGVJZCA/IHRoaXMuZ2V0VmlldygpLmJ5SWQoc1RhYmxlSWQpIDogdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZUNvbnRyb2wgJiYgKG9UYWJsZUNvbnRyb2wgYXMgYW55KS5fZ2V0Um93QmluZGluZygpO1xuXG5cdFx0cmV0dXJuIG9CaW5kaW5nO1xuXHR9XG5cblx0X2dldENvbnRyb2xzKHNLZXk/OiBhbnkpIHtcblx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiBhbnlbXSA9IFtdO1xuXHRcdFx0Y29uc3Qgb1RhYk11bHRpTW9kZSA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblx0XHRcdG9UYWJNdWx0aU1vZGUuZ2V0SXRlbXMoKS5mb3JFYWNoKChvSXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5nZXRWaWV3KCkuYnlJZChvSXRlbS5nZXRLZXkoKSk7XG5cdFx0XHRcdGlmIChzS2V5KSB7XG5cdFx0XHRcdFx0aWYgKG9JdGVtLmdldEtleSgpLmluZGV4T2YoXCJmZTo6XCIgKyBzS2V5KSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRvQ29udHJvbCAmJiBhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9Db250cm9sICYmIGFDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gYUNvbnRyb2xzO1xuXHRcdH0gZWxzZSBpZiAoc0tleSA9PT0gXCJDaGFydFwiKSB7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLl9nZXRDaGFydCgpO1xuXHRcdFx0cmV0dXJuIG9DaGFydCA/IFtvQ2hhcnRdIDogW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRyZXR1cm4gb1RhYmxlID8gW29UYWJsZV0gOiBbXTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0RGVmYXVsdFBhdGgoKSB7XG5cdFx0Y29uc3QgZGVmYXVsdFBhdGggPSB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcImRlZmF1bHRQYXRoXCIpO1xuXHRcdHN3aXRjaCAoZGVmYXVsdFBhdGgpIHtcblx0XHRcdGNhc2UgXCJwcmltYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0Y2FzZSBcInNlY29uZGFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTtcblx0XHRcdGNhc2UgXCJib3RoXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB3aXRoIE11bHRpcGxlIFRhYmxlIG1vZGUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfaXNNdWx0aU1vZGVcblx0ICogQHJldHVybnMge2Jvb2xlYW59IElzIE11bHRpcGxlIFRhYmxlIG1vZGUgc2V0P1xuXHQgKi9cblx0X2lzTXVsdGlNb2RlKCkge1xuXHRcdGlmICghdGhpcy5fb0xpc3RSZXBvcnRDb250cm9sKSB7XG5cdFx0XHR0aGlzLl9iTXVsdGlNb2RlID0gISF0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9iTXVsdGlNb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB0byBsb2FkIGRhdGEgYXQgc3RhcnQgdXAuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfaXNJbml0TG9hZERpc2FibGVkXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBJcyBJbml0TG9hZCBlbmFibGVkP1xuXHQgKi9cblx0X2lzSW5pdExvYWRFbmFibGVkKCkge1xuXHRcdGNvbnN0IGluaXRMb2FkTW9kZSA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuaW5pdGlhbExvYWQ7XG5cdFx0cmV0dXJuIGluaXRMb2FkTW9kZSA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHdpdGggTXVsdGlwbGUgRW50aXR5U2V0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9pc011bHRpRW50aXR5U2V0c1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSXMgTXVsdGlwbGUgRW50aXR5U2V0cyBjb25maWd1cmF0aW9uP1xuXHQgKi9cblx0X2lzTXVsdGlFbnRpdHlTZXRzKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcImlzTXVsdGlFbnRpdHlTZXRzXCIpID09PSBcInRydWVcIjtcblx0fVxuXG5cdF9oYXNNdWx0aVZpc3VhbGl6YXRpb25zKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcImhhc011bHRpVmlzdWFsaXphdGlvbnNcIikgPT09IFwidHJ1ZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzdXNwZW5kIHNlYXJjaCBvbiB0aGUgZmlsdGVyIGJhci4gVGhlIGluaXRpYWwgbG9hZGluZyBvZiBkYXRhIGlzIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIEluaXRMb2FkIC0gRGlzYWJsZWQvQXV0by5cblx0ICogSXQgaXMgZW5hYmxlZCBsYXRlciB3aGVuIHRoZSB2aWV3IHN0YXRlIGlzIHNldCwgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byByZWFsaXplIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnMuXG5cdCAqL1xuXHRfZGlzYWJsZUluaXRMb2FkKCkge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHQvLyBjaGVjayBmb3IgZmlsdGVyIGJhciBoaWRkZW5cblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRmaWx0ZXJCYXIuc2V0U3VzcGVuZFNlbGVjdGlvbih0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCBieSBmbGV4IHRvIGRldGVybWluZSBpZiB0aGUgYXBwbHlBdXRvbWF0aWNhbGx5IHNldHRpbmcgb24gdGhlIHZhcmlhbnQgaXMgdmFsaWQuXG5cdCAqIENhbGxlZCBvbmx5IGZvciBTdGFuZGFyZCBWYXJpYW50IGFuZCBvbmx5IHdoZW4gdGhlcmUgaXMgZGlzcGxheSB0ZXh0IHNldCBmb3IgYXBwbHlBdXRvbWF0aWNhbGx5IChGRSBvbmx5IHNldHMgaXQgZm9yIEF1dG8pLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZGF0YSBzaG91bGQgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50KCkge1xuXHRcdC8vIFdlIGFsd2F5cyByZXR1cm4gZmFsc2UgYW5kIHRha2UgY2FyZSBvZiBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZSB0aGUgc2V0dGluZ3MgZm9yIGluaXRpYWwgbG9hZCBiYXNlZCBvblxuXHQgKiAtIG1hbmlmZXN0IHNldHRpbmcgaW5pdExvYWQgLSBFbmFibGVkL0Rpc2FibGVkL0F1dG9cblx0ICogLSB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdmFyaWFudFxuXHQgKiAtIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnNcblx0ICogV2UgZGlzYWJsZSB0aGUgZmlsdGVyIGJhciBzZWFyY2ggYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5hYmxlIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRfc2V0SW5pdExvYWQoKSB7XG5cdFx0Ly8gaWYgaW5pdExvYWQgaXMgRGlzYWJsZWQgb3IgQXV0bywgc3dpdGNoIG9mZiBmaWx0ZXIgYmFyIHNlYXJjaCB0ZW1wb3JhcmlseSBhdCBzdGFydFxuXHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUluaXRMb2FkKCk7XG5cdFx0fVxuXHRcdC8vIHNldCBob29rIGZvciBmbGV4IGZvciB3aGVuIHN0YW5kYXJkIHZhcmlhbnQgaXMgc2V0IChhdCBzdGFydCBvciBieSB1c2VyIGF0IHJ1bnRpbWUpXG5cdFx0Ly8gcmVxdWlyZWQgdG8gb3ZlcnJpZGUgdGhlIHVzZXIgc2V0dGluZyAnYXBwbHkgYXV0b21hdGljYWxseScgYmVoYXZpb3VyIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzXG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IGFueSA9IHRoaXMuX2dldFBhZ2VPckZpbHRlckJhclZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudC5yZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50KHRoaXMuX2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50LmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdF9zZXRTaGFyZU1vZGVsKCkge1xuXHRcdC8vIFRPRE86IGRlYWN0aXZhdGVkIGZvciBub3cgLSBjdXJyZW50bHkgdGhlcmUgaXMgbm8gX3RlbXBsUHJpdiBhbnltb3JlLCB0byBiZSBkaXNjdXNzZWRcblx0XHQvLyB0aGlzIG1ldGhvZCBpcyBjdXJyZW50bHkgbm90IGNhbGxlZCBhbnltb3JlIGZyb20gdGhlIGluaXQgbWV0aG9kXG5cblx0XHRjb25zdCBmbkdldFVzZXIgPSBPYmplY3RQYXRoLmdldChcInNhcC51c2hlbGwuQ29udGFpbmVyLmdldFVzZXJcIik7XG5cdFx0Ly92YXIgb01hbmlmZXN0ID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFkYXRhKCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aVwiKTtcblx0XHQvL3ZhciBzQm9va21hcmtJY29uID0gKG9NYW5pZmVzdCAmJiBvTWFuaWZlc3QuaWNvbnMgJiYgb01hbmlmZXN0Lmljb25zLmljb24pIHx8IFwiXCI7XG5cblx0XHQvL3NoYXJlTW9kZWw6IEhvbGRzIGFsbCB0aGUgc2hhcmluZyByZWxldmFudCBpbmZvcm1hdGlvbiBhbmQgaW5mbyB1c2VkIGluIFhNTCB2aWV3XG5cdFx0Y29uc3Qgb1NoYXJlSW5mbyA9IHtcblx0XHRcdGJvb2ttYXJrVGl0bGU6IGRvY3VtZW50LnRpdGxlLCAvL1RvIG5hbWUgdGhlIGJvb2ttYXJrIGFjY29yZGluZyB0byB0aGUgYXBwIHRpdGxlLlxuXHRcdFx0Ym9va21hcmtDdXN0b21Vcmw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Y29uc3Qgc0hhc2ggPSBoYXNoZXIuZ2V0SGFzaCgpO1xuXHRcdFx0XHRyZXR1cm4gc0hhc2ggPyBcIiNcIiArIHNIYXNoIDogd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHR9LFxuXHRcdFx0Lypcblx0XHRcdFx0XHRcdFx0VG8gYmUgYWN0aXZhdGVkIG9uY2UgdGhlIEZMUCBzaG93cyB0aGUgY291bnQgLSBzZWUgY29tbWVudCBhYm92ZVxuXHRcdFx0XHRcdFx0XHRib29rbWFya1NlcnZpY2VVcmw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vdmFyIG9UYWJsZSA9IG9UYWJsZS5nZXRJbm5lclRhYmxlKCk7IG9UYWJsZSBpcyBhbHJlYWR5IHRoZSBzYXAuZmUgdGFibGUgKGJ1dCBub3QgdGhlIGlubmVyIG9uZSlcblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgdXNlIHRhYmxlLmdldExpc3RCaW5kaW5nSW5mbyBpbnN0ZWFkIG9mIHRoZSBiaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9CaW5kaW5nID0gb1RhYmxlLmdldEJpbmRpbmcoXCJyb3dzXCIpIHx8IG9UYWJsZS5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nID8gZm5HZXREb3dubG9hZFVybChvQmluZGluZykgOiBcIlwiO1xuXHRcdFx0XHRcdFx0XHR9LCovXG5cdFx0XHRpc1NoYXJlSW5KYW1BY3RpdmU6ICEhZm5HZXRVc2VyICYmIGZuR2V0VXNlcigpLmlzSmFtQWN0aXZlKClcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb1RlbXBsYXRlUHJpdmF0ZU1vZGVsID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldE1vZGVsKFwiX3RlbXBsUHJpdlwiKSBhcyBKU09OTW9kZWw7XG5cdFx0b1RlbXBsYXRlUHJpdmF0ZU1vZGVsLnNldFByb3BlcnR5KFwiL2xpc3RSZXBvcnQvc2hhcmVcIiwgb1NoYXJlSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogSGlkZGVuIHRhYmxlcyBtdXN0IGJlIG1hcmtlZCBhcyBoaWRkZW4gdG8gYXZvaWQgc2VuZGluZ1xuXHQgKiByZXF1ZXN0cyB3aGVuIEZpbHRlckJhciBpcyBjaGFuZ2VkIG9yIExSIGlzIGluaXRpYWxpemVkXG5cdCAqIEJlc3Qgd29ya2Zsb3cgd291bGQgYmUgdG8gc3VzcGVuZCB0YWJsZSBiaW5kaW5nIGJ1dFxuXHQgKiBpZiB0aGUgdXNlciBzd2l0Y2ggcXVpY2tseSBiZXR3ZWVuIHRhYnMgdGhlIGJhdGNoIHJlc3BvbnNlIG9mIHByZXZpb3VzXG5cdCAqIGlzIHJlY2VpdmVkIHdoZW4gcHJldmlvdXMgdGFiIGlzIGFscmVhZHkgZGlzYWJsZWQgKGJpbmRpbmcgaXMgc3VzcGVuZGVkKSBhbmRcblx0ICogZ2VuZXJhdGVzIGVycm9yLlxuXHQgKiBBIHRlbXBvcmFyeSBzb2x1dGlvbiAoaWYgd2UgZmluZCBiZXR0ZXIgd29ya2Zsb3cpIGlzIHRvIHNldCBhIGN1c3RvbURhdGEgYW5kIGRvbid0IHRyaWdnZXJcblx0ICogcmViaW5kVGFibGUgaWYgdGhpcyBjdXN0b21EYXRhIGlzIHNldCB0byB0cnVlLlxuXHQgKi9cblx0X3VwZGF0ZU11bHRpQ29udHJvbEhpZGRlblN0YXR1cygpIHtcblx0XHRjb25zdCBvRGlzcGxheWVkQ29udHJvbCA9IHRoaXMuX2dldEN1cnJlbnRDb250cm9sKCk7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkgJiYgb0Rpc3BsYXllZENvbnRyb2wpIHtcblx0XHRcdGNvbnN0IHNEaXNwbGF5Q29udHJvbElkID0gb0Rpc3BsYXllZENvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGNvbnN0IGFDb250cm9scyA9IHRoaXMuX2dldENvbnRyb2xzKCk7XG5cdFx0XHRhQ29udHJvbHMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRjb25zdCBzQ29udHJvbElkID0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdFx0b0NvbnRyb2wuZGF0YShcImNvbnRyb2xIaWRkZW5cIiwgc0NvbnRyb2xJZCAhPT0gc0Rpc3BsYXlDb250cm9sSWQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIGZpZWxkcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byB0aGUgZmlsdGVyIGJhciAodGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgbXVsdGlwbGUgdGFibGUgc2NlbmFyaW8pLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5jb250ZXh0fSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIHtzYXAudWkubWRjLkZpbHRlckJhcn0gb0ZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKi9cblx0X3VwZGF0ZU11bHRpVGFiTm90QXBwbGljYWJsZUZpZWxkcyhvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgb0ZpbHRlckJhcjogYW55KSB7XG5cdFx0Y29uc3QgbUNhY2hlOiBhbnkgPSB7fTtcblx0XHRjb25zdCBpZ25vcmVkRmllbGRzOiBhbnkgPSB7fSxcblx0XHRcdGlnbm9yZWRGaWVsZHNUaXRsZTogYW55ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXHRcdGFUYWJsZXMuZm9yRWFjaCgob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IHNUYWJsZUVudGl0eVBhdGggPSBvVGFibGUuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLFxuXHRcdFx0XHRzVGFibGVFbnRpdHlTZXQgPSBzVGFibGVFbnRpdHlQYXRoLnNsaWNlKDEpLFxuXHRcdFx0XHRzVGFiSWQgPSBvVGFibGUuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0S2V5KCksXG5cdFx0XHRcdHNUYWJUaXRsZSA9IG9UYWJsZS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRUZXh0KCksXG5cdFx0XHRcdHNDYWNoZUtleSA9IHNUYWJsZUVudGl0eVNldCArIChvVGFibGUuZGF0YShcImVuYWJsZUFuYWx5dGljc1wiKSA9PT0gXCJ0cnVlXCIgPyBcIkFuYWx5dGljYWxcIiA6IFwiUmVndWxhclwiKTtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvVGFibGUpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzVGFiSWRdID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0XHRpZ25vcmVkRmllbGRzVGl0bGVbc1RhYklkXSA9IHRoaXMuZm9ybWF0dGVycy5zZXRUYWJNZXNzYWdlU3RyaXAuY2FsbCh0aGlzLCBtQ2FjaGVbc0NhY2hlS2V5XSwgc1RhYlRpdGxlLCBcImZhbHNlXCIsIHt9KTtcblx0XHR9KTtcblx0XHRhQ2hhcnRzLmZvckVhY2goKG9DaGFydDogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBzQ2hhcnRFbnRpdHlQYXRoID0gb0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c0NoYXJ0RW50aXR5U2V0ID0gc0NoYXJ0RW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c1RhYklkID0gb0NoYXJ0LmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldEtleSgpLFxuXHRcdFx0XHRzVGFiVGl0bGUgPSBvQ2hhcnQuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0VGV4dCgpLFxuXHRcdFx0XHRzQ2FjaGVLZXkgPSBzQ2hhcnRFbnRpdHlTZXQgKyBcIkNoYXJ0XCI7XG5cdFx0XHRpZiAoIW1DYWNoZVtzQ2FjaGVLZXldKSB7XG5cdFx0XHRcdG1DYWNoZVtzQ2FjaGVLZXldID0gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckJhciwgb0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGlnbm9yZWRGaWVsZHNbc1RhYklkXSA9IG1DYWNoZVtzQ2FjaGVLZXldO1xuXHRcdFx0aWdub3JlZEZpZWxkc1RpdGxlW3NUYWJJZF0gPSB0aGlzLmZvcm1hdHRlcnMuc2V0VGFiTWVzc2FnZVN0cmlwLmNhbGwodGhpcywgbUNhY2hlW3NDYWNoZUtleV0sIHNUYWJUaXRsZSwgXCJmYWxzZVwiLCB7fSk7XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwidGFicy9pZ25vcmVkRmllbGRzXCIsIGlnbm9yZWRGaWVsZHMpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInRhYnMvaWdub3JlZEZpZWxkc1RpdGxlXCIsIGlnbm9yZWRGaWVsZHNUaXRsZSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9jYWwgVUkgbW9kZWwgb2YgdGhlIHBhZ2Ugd2l0aCB0aGUgZmllbGRzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIHRvIHRoZSBmaWx0ZXIgYmFyICh0aGlzIGlzIHNwZWNpZmljIHRvIHRoZSBBTFAgc2NlbmFyaW8pLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5jb250ZXh0fSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIHtzYXAudWkubWRjLkZpbHRlckJhcn0gb0ZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKi9cblx0X3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIG9GaWx0ZXJCYXI6IGFueSkge1xuXHRcdGNvbnN0IG1DYWNoZTogYW55ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogYW55ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXG5cdFx0aWYgKCFhVGFibGVzLmxlbmd0aCB8fCAhYUNoYXJ0cy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3Mgbm90IGEgdGFibGUgYW5kIGEgY2hhcnQsIHdlJ3JlIG5vdCBpbiB0aGUgQUxQIGNhc2Vcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgdGhlIG1vbWVudCwgdGhlcmUncyBub3RoaW5nIGZvciB0YWJsZXMuLi5cblx0XHRhQ2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydDogYW55KSB7XG5cdFx0XHRjb25zdCBzQ2hhcnRFbnRpdHlQYXRoID0gb0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c0NoYXJ0RW50aXR5U2V0ID0gc0NoYXJ0RW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gc0NoYXJ0RW50aXR5U2V0ICsgXCJDaGFydFwiO1xuXHRcdFx0aWYgKCFtQ2FjaGVbc0NhY2hlS2V5XSkge1xuXHRcdFx0XHRtQ2FjaGVbc0NhY2hlS2V5XSA9IEZpbHRlclV0aWxzLmdldE5vdEFwcGxpY2FibGVGaWx0ZXJzKG9GaWx0ZXJCYXIsIG9DaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRpZ25vcmVkRmllbGRzW3NDYWNoZUtleV0gPSBtQ2FjaGVbc0NhY2hlS2V5XTtcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250cm9scy9pZ25vcmVkRmllbGRzXCIsIGlnbm9yZWRGaWVsZHMpO1xuXHR9XG5cblx0X3VwZGF0ZU11bHRpTW9kZVNlbGVjdGVkQ29udHJvbCgpIHtcblx0XHR0aGlzLl9zRW50aXR5U2V0ID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuX29MaXN0UmVwb3J0Q29udHJvbCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLl9nZXRDdXJyZW50Q29udHJvbCgpO1xuXHR9XG5cblx0X3VwZGF0ZUNvdW50cygpIHtcblx0XHR0aGlzLl91cGRhdGVNdWx0aU1vZGVDb3VudHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIGEgdGFiIGZyb20gdGhlIGxpc3QgcmVwb3J0IGlzIGEgY3VzdG9tIHRhYi5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9pc0N1c3RvbVRhYlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gRGV0ZXJtaW5lcyBpZiB0aGUgdGFiIGlzIGEgY3VzdG9tIHRhYi5cblx0ICovXG5cdF9pc0N1c3RvbVRhYigpIHtcblx0XHRjb25zdCBvTXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblx0XHRyZXR1cm4gb011bHRpTW9kZUNvbnRyb2wgJiYgb011bHRpTW9kZUNvbnRyb2wuZ2V0U2VsZWN0ZWRLZXkoKS5pbmRleE9mKFwiOjpDdXN0b21UYWI6OlwiKSA+IC0xO1xuXHR9XG5cblx0X3NldENvdW50c091dERhdGVkKCkge1xuXHRcdGNvbnN0IG9NdWx0aU1vZGVDb250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXHRcdGlmIChvTXVsdGlNb2RlQ29udHJvbCAmJiBvTXVsdGlNb2RlQ29udHJvbC5kYXRhKFwic2hvd0NvdW50c1wiKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdGNvbnN0IGFJdGVtcyA9IG9NdWx0aU1vZGVDb250cm9sLmdldEl0ZW1zKCk7XG5cdFx0XHRhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdFx0XHRpZiAob0l0ZW0uZ2V0S2V5KCkuaW5kZXhPZihcImZlOjpDaGFydFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRvSXRlbS5kYXRhKFwib3V0ZGF0ZWRDb3VudHNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdF91cGRhdGVNdWx0aU1vZGVDb3VudHMoKSB7XG5cdFx0bGV0IGFCaW5kaW5nUHJvbWlzZXMgPSBbXTtcblx0XHRjb25zdCBvTXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblx0XHRpZiAob011bHRpTW9kZUNvbnRyb2wgJiYgb011bHRpTW9kZUNvbnRyb2wuZGF0YShcInNob3dDb3VudHNcIikgPT09IFwidHJ1ZVwiICYmICF0aGlzLl9pc0N1c3RvbVRhYigpKSB7XG5cdFx0XHRjb25zdCBvRGlzcGxheWVkQ29udHJvbCA9IHRoaXMuX2dldEN1cnJlbnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBzRGlzcGxheWVkQ29udHJvbElkID0gb0Rpc3BsYXllZENvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGNvbnN0IGFDb21wbGlhbnRUYWJzOiBhbnlbXSA9IFtdO1xuXHRcdFx0Y29uc3QgYUl0ZW1zID0gb011bHRpTW9kZUNvbnRyb2wuZ2V0SXRlbXMoKTtcblx0XHRcdGFJdGVtcy5mb3JFYWNoKChvSXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5nZXRWaWV3KCkuYnlJZChvSXRlbS5nZXRLZXkoKSk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvQ29udHJvbCAmJlxuXHRcdFx0XHRcdCFvQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpICYmXG5cdFx0XHRcdFx0KG9JdGVtLmRhdGEoXCJvdXRkYXRlZENvdW50c1wiKSB8fCBvQ29udHJvbC5nZXRJZCgpID09PSBzRGlzcGxheWVkQ29udHJvbElkKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhQ29tcGxpYW50VGFicy5wdXNoKHtcblx0XHRcdFx0XHRcdGNvbnRyb2w6IG9Db250cm9sLFxuXHRcdFx0XHRcdFx0aXRlbTogb0l0ZW1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGFCaW5kaW5nUHJvbWlzZXMgPSBhQ29tcGxpYW50VGFicy5tYXAoKG1UYWI6IGFueSkgPT4ge1xuXHRcdFx0XHRtVGFiLml0ZW0uc2V0Q291bnQoXCIuLi5cIik7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gbVRhYi5jb250cm9sO1xuXHRcdFx0XHRjb25zdCBvRmlsdGVySW5mb3MgPSBUYWJsZVV0aWxzLmdldEZpbHRlcnNJbmZvRm9yU1Yob0NvbnRyb2wsIG1UYWIuaXRlbS5kYXRhKFwic2VsZWN0aW9uVmFyaWFudFwiKSkgYXMgYW55O1xuXHRcdFx0XHRyZXR1cm4gVGFibGVVdGlscy5nZXRMaXN0QmluZGluZ0ZvckNvdW50KG9Db250cm9sLCB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLCB7XG5cdFx0XHRcdFx0YmF0Y2hHcm91cElkOiBvQ29udHJvbC5nZXRJZCgpID09PSBzRGlzcGxheWVkQ29udHJvbElkID8gb0NvbnRyb2wuZGF0YShcImJhdGNoR3JvdXBJZFwiKSA6IFwiJGF1dG9cIixcblx0XHRcdFx0XHRhZGRpdGlvbmFsRmlsdGVyczogb0ZpbHRlckluZm9zLmZpbHRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0UHJvbWlzZS5hbGwoYUJpbmRpbmdQcm9taXNlcylcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFDb3VudHM6IGFueVtdKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBrIGluIGFDb3VudHMpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9JdGVtID0gYUNvbXBsaWFudFRhYnNba10uaXRlbTtcblx0XHRcdFx0XHRcdG9JdGVtLnNldENvdW50KFRhYmxlVXRpbHMuZ2V0Q291bnRGb3JtYXR0ZWQoYUNvdW50c1trXSkpO1xuXHRcdFx0XHRcdFx0b0l0ZW0uZGF0YShcIm91dGRhdGVkQ291bnRzXCIsIGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSB2YWx1ZXMgZm9yIHRoZSBpY29uIHRhYiBiYXJcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0X2lzRmlsdGVyQmFySGlkZGVuKCkge1xuXHRcdHJldHVybiAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmhpZGVGaWx0ZXJCYXI7XG5cdH1cblxuXHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2gob1ZNOiBhbnkpIHtcblx0XHRpZiAoXG5cdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmluaXRpYWxMb2FkID09PSBJbml0aWFsTG9hZE1vZGUuQXV0byAmJlxuXHRcdFx0KCFvVk0gfHwgb1ZNLmdldFN0YW5kYXJkVmFyaWFudEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb0NvbmRpdGlvbnMpIHtcblx0XHRcdFx0XHQvLyBpZ25vcmUgZmlsdGVycyBzdGFydGluZyB3aXRoICQgKGUuZy4gJHNlYXJjaCwgJGVkaXRTdGF0ZSlcblx0XHRcdFx0XHRpZiAoIXNLZXkuc3RhcnRzV2l0aChcIiRcIikgJiYgQXJyYXkuaXNBcnJheShvQ29uZGl0aW9uc1tzS2V5XSkgJiYgb0NvbmRpdGlvbnNbc0tleV0ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvLyBsb2FkIGRhdGEgYXMgcGVyIHVzZXIncyBzZXR0aW5nIG9mIGFwcGx5QXV0b21hdGljYWxseSBvbiB0aGUgdmFyaWFudFxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhbmRhcmRWYXJpYW50OiBhbnkgPSBvVk0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhcmlhbnQua2V5ID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN0YW5kYXJkVmFyaWFudCAmJiBzdGFuZGFyZFZhcmlhbnQuZXhlY3V0ZU9uU2VsZWN0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfdXBkYXRlVGFibGUob1RhYmxlOiBhbnkpIHtcblx0XHRpZiAoIW9UYWJsZS5pc1RhYmxlQm91bmQoKSB8fCB0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMpIHtcblx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF91cGRhdGVDaGFydChvQ2hhcnQ6IGFueSkge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gb0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpLl9nZXRDaGFydChvQ2hhcnQpO1xuXHRcdGlmICghKG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmlzQm91bmQoXCJkYXRhXCIpKSB8fCB0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMpIHtcblx0XHRcdG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKS5yZWJpbmQob0NoYXJ0LCBvSW5uZXJDaGFydC5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIikpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25UYWJNdWx0aU1vZGVDaGFuZ2UodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHR0aGlzLl91cGRhdGVNdWx0aU1vZGVTZWxlY3RlZENvbnRyb2woKTtcblx0XHRcdHRoaXMuX3VwZGF0ZU11bHRpQ29udHJvbEhpZGRlblN0YXR1cygpO1xuXG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9EaXNwbGF5ZWRDb250cm9sID0gdGhpcy5fZ2V0Q3VycmVudENvbnRyb2woKSBhcyBhbnk7XG5cdFx0XHRjb25zdCBvTXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblx0XHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG9NdWx0aU1vZGVDb250cm9sLmdldFNlbGVjdGVkS2V5KCk7XG5cdFx0XHRjb25zdCBzUHJldmlvdXNTZWxlY3RlZEtleSA9IG9FdmVudCAmJiBvRXZlbnQubVBhcmFtZXRlcnMgPyBvRXZlbnQubVBhcmFtZXRlcnMucHJldmlvdXNLZXkgOiB1bmRlZmluZWQ7XG5cblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInRhYnMvc2VsZWN0ZWRcIiwgc1NlbGVjdGVkS2V5KTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiKSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBObyBwZW5kaW5nIGZpbHRlcnMgaW50byBGaWx0ZXJCYXJcblx0XHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgdGhpcy5faXNDdXN0b21UYWIoKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9GaWx0ZXJDb25kaXRpb25zID0gb0ZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCk7XG5cdFx0XHRcdFx0dGhpcy5vblZpZXdOZWVkc1JlZnJlc2goe1xuXHRcdFx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uczogb0ZpbHRlckNvbmRpdGlvbnMsXG5cdFx0XHRcdFx0XHRjdXJyZW50VGFiSWQ6IHNTZWxlY3RlZEtleSxcblx0XHRcdFx0XHRcdHJlZnJlc2hDYXVzZTogXCJ0YWJDaGFuZ2VkXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHQhb0Rpc3BsYXllZENvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSAmJlxuXHRcdFx0XHRcdCghb0Rpc3BsYXllZENvbnRyb2wuZ2V0Um93QmluZGluZygpIHx8IC8vIGZpcnN0IHRpbWUgdGhlIHRhYi90YWJsZSBpcyBkaXNwbGF5ZWRcblx0XHRcdFx0XHRcdG9EaXNwbGF5ZWRDb250cm9sLmRhdGEoXCJvdXRkYXRlZFJvd3NcIikgPT09IHRydWUpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIFNlYXJjaCBoYXMgYmVlbiB0cmlnZ2VyZWQgb24gYSBkaWZmZXJlbnQgdGFiIHt9XG5cdFx0XHRcdFx0b0Rpc3BsYXllZENvbnRyb2wucmViaW5kKCk7XG5cdFx0XHRcdFx0b0Rpc3BsYXllZENvbnRyb2wuZGF0YShcIm91dGRhdGVkUm93c1wiLCBmYWxzZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0b0Rpc3BsYXllZENvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSAmJlxuXHRcdFx0XHRcdCghb0Rpc3BsYXllZENvbnRyb2wuZ2V0Q29udHJvbERlbGVnYXRlKCkuX2dldENoYXJ0KG9EaXNwbGF5ZWRDb250cm9sKS5nZXRCaW5kaW5nKFwiZGF0YVwiKSB8fCAvLyBmaXJzdCB0aW1lIHRoZSB0YWIvY2hhcnQgaXMgZGlzcGxheWVkXG5cdFx0XHRcdFx0XHRvRGlzcGxheWVkQ29udHJvbC5kYXRhKFwib3V0ZGF0ZWRSb3dzXCIpID09PSB0cnVlKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb25zdCBvSW5uZXJDaGFydCA9IG9EaXNwbGF5ZWRDb250cm9sLmdldENvbnRyb2xEZWxlZ2F0ZSgpLl9nZXRDaGFydChvRGlzcGxheWVkQ29udHJvbCk7XG5cdFx0XHRcdFx0b0Rpc3BsYXllZENvbnRyb2wuZ2V0Q29udHJvbERlbGVnYXRlKCkucmViaW5kKG9EaXNwbGF5ZWRDb250cm9sLCBvSW5uZXJDaGFydC5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIikpO1xuXHRcdFx0XHRcdG9EaXNwbGF5ZWRDb250cm9sLmRhdGEoXCJvdXRkYXRlZFJvd3NcIiwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRXZlbnQgJiYgb0V2ZW50Lm1QYXJhbWV0ZXJzICYmIHNQcmV2aW91c1NlbGVjdGVkS2V5ICE9PSBvRXZlbnQubVBhcmFtZXRlcnMuc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Q29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJLmFkZCh7XG5cdFx0XHRcdFx0Y2hhbmdlczogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRjaGFuZ2VTcGVjaWZpY0RhdGE6IHtcblx0XHRcdFx0XHRcdFx0XHRjaGFuZ2VUeXBlOiBcInNlbGVjdEljb25UYWJCYXJGaWx0ZXJcIixcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZEtleTogc1NlbGVjdGVkS2V5LFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJldmlvdXNTZWxlY3RlZEtleTogc1ByZXZpb3VzU2VsZWN0ZWRLZXlcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHNlbGVjdG9yRWxlbWVudDogb011bHRpTW9kZUNvbnRyb2xcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJzQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0XHQvLyBQZW5kaW5nIGZpbHRlcnMgaW50byBGaWx0ZXJCYXIgdG8gYmUgdXNlZCBmb3IgY3VzdG9tIHZpZXdzXG5cdFx0XHRcdHRoaXMub25QZW5kaW5nRmlsdGVycygpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhcHBsaWVkRmlsdGVyc1wiLCBvRmlsdGVyQmFyLmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKS5maWx0ZXJzVGV4dCk7XG5cdFx0XHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZGl0aW9uc0Jhc2VkXCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1ZNID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0Ly8gc2V0VGltZW91dCBjYXVzZSB0aGUgdmFyaWFudCBuZWVkcyB0byBiZSBhcHBsaWVkIGJlZm9yZSBqdWRnaW5nIHRoZSBhdXRvIHNlYXJjaCBvciB1cGRhdGluZyB0aGUgYXBwIHN0YXRlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdFx0XHQodGhpcy5oYW5kbGVycyBhcyBhbnkpLm9uVGFiTXVsdGlNb2RlQ2hhbmdlLmFwcGx5KHRoaXMsIFtvRXZlbnRdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2gob1ZNKSkge1xuXHRcdFx0XHRcdC8vIHRoZSBhcHAgc3RhdGUgd2lsbCBiZSB1cGRhdGVkIHZpYSBvblNlYXJjaCBoYW5kbGVyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlISEhXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSxcblx0XHRvblNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcikge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgYkhpZGVEcmFmdCA9IEZpbHRlclV0aWxzLmdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0KG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgYkhpZGVEcmFmdCk7XG5cdFx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHRjb25zdCBhQ29udHJvbHMgPSB0aGlzLl9nZXRDb250cm9scygpLFxuXHRcdFx0XHRcdG9NdWx0aU1vZGVDb250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXHRcdFx0XHR0aGlzLl9zZXRDb3VudHNPdXREYXRlZCgpO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2lzQ3VzdG9tVGFiKCkpIHtcblx0XHRcdFx0XHRjb25zdCBzRGlzcGxheWVkQ29udHJvbElkID0gdGhpcy5fZ2V0Q3VycmVudENvbnRyb2woKS5nZXRJZCgpO1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZU11bHRpVGFiTm90QXBwbGljYWJsZUZpZWxkcyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXIpO1xuXHRcdFx0XHRcdC8vIFRoaXMgc2hvdWxkIGJlIGRvbmUgb3V0c2lkZSB0aGUgc2VhcmNoIGV2ZW50IGhhbmRsZXIgb2YgdGhlIGZpbHRlciBiYXIuXG5cdFx0XHRcdFx0Ly8gVGhlIHNhbWUgbG9naWMgaXMgcmVxdWlyZWQgd2hlbiBmaWx0ZXIgYmFyIGlzIGhpZGRlbiBhbmQgbXVsdGlwbGUgdGFibGVzIGV4aXN0IG9uIHRoZSBMUi5cblx0XHRcdFx0XHQvLyBUaGlzIGlzIGN1cnJlbnRseSBkb25lIGluIExpc3RSZXBvcnQvb3ZlcnJpZGVzL1ZpZXdTdGF0ZS5qcyNvbkFmdGVyU3RhdGVBcHBsaWVkKClcblx0XHRcdFx0XHRhQ29udHJvbHMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRcdFx0b0NvbnRyb2wuZGF0YShcIm91dGRhdGVkUm93c1wiLCBvQ29udHJvbC5nZXRJZCgpICE9PSBzRGlzcGxheWVkQ29udHJvbElkKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBvRmlsdGVyQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpO1xuXHRcdFx0XHRcdHRoaXMub25WaWV3TmVlZHNSZWZyZXNoKHtcblx0XHRcdFx0XHRcdGZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJDb25kaXRpb25zLFxuXHRcdFx0XHRcdFx0Y3VycmVudFRhYklkOiBvTXVsdGlNb2RlQ29udHJvbC5nZXRTZWxlY3RlZEtleSgpLFxuXHRcdFx0XHRcdFx0cmVmcmVzaENhdXNlOiBcInNlYXJjaFwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdH1cblx0XHRcdGlmIChvTWRjQ2hhcnQpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZSBib3VuZCBhY3Rpb25zIFRPRE86IHRoaXMgY2xlYXJzIGV2ZXJ5dGhpbmcgZm9yIHRoZSBjaGFydD9cblx0XHRcdFx0KG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcIlwiLCB7fSk7XG5cblx0XHRcdFx0Y29uc3Qgb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpICsgXCIvYWxwQ29udGVudFZpZXdcIik7XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gc3RvcmUgZmlsdGVyIGJhciBjb25kaXRpb25zIHRvIHVzZSBsYXRlciB3aGlsZSBuYXZpZ2F0aW9uXG5cdFx0XHRTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdC50aGVuKChvRXh0ZXJuYWxTdGF0ZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0gb0V4dGVybmFsU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgZXh0ZXJuYWwgc3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRpZiAoKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5saXZlTW9kZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc3lzdGVtLnBob25lKSB7XG5cdFx0XHRcdGNvbnN0IG9EeW5hbWljUGFnZSA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6TGlzdFJlcG9ydFwiKSBhcyBEeW5hbWljUGFnZTtcblx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZywgb0NvbnRleHQ6IGFueSwgc0NyZWF0ZVBhdGg6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblx0XHRvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRDb250ZW50KCksXG5cdFx0XHRcdG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCksXG5cdFx0XHRcdGFEYXRhID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImRhdGFcIiksXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoYURhdGEpIHtcblx0XHRcdFx0Ly8gdXBkYXRlIGFjdGlvbiBidXR0b25zIGVuYWJsZW1lbnQgLyBkaXNhYmxlbWVudFxuXHRcdFx0XHRDaGFydFJ1bnRpbWUuZm5VcGRhdGVDaGFydChvRXZlbnQpO1xuXHRcdFx0XHQvLyB1cGRhdGUgc2VsZWN0aW9ucyBvbiBzZWxlY3Rpb24gb3IgZGVzZWxlY3Rpb25cblx0XHRcdFx0Q2hhcnRVdGlscy5zZXRDaGFydEZpbHRlcnMob01kY0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9hbHBDb250ZW50Vmlld1wiKTtcblx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1RhYmxlICYmIChvVGFibGUgYXMgYW55KS5yZWJpbmQoKTtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBzU2VsZWN0ZWRLZXkgPSBvRXZlbnQubVBhcmFtZXRlcnMua2V5ID8gb0V2ZW50Lm1QYXJhbWV0ZXJzLmtleSA6IG51bGw7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYWxwQ29udGVudFZpZXdcIiwgc1NlbGVjdGVkS2V5KTtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuX2dldENoYXJ0KCk7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0Y29uc3Qgb1NlZ21lbnRlZEJ1dHRvbkRlbGVnYXRlID0ge1xuXHRcdFx0XHRvbkFmdGVyUmVuZGVyaW5nKCkge1xuXHRcdFx0XHRcdGNvbnN0IGFJdGVtcyA9IG9TZWdtZW50ZWRCdXR0b24uZ2V0SXRlbXMoKTtcblx0XHRcdFx0XHRhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdFx0aWYgKG9JdGVtLmdldEtleSgpID09PSBzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0XHRcdFx0b0l0ZW0uZm9jdXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRvU2VnbWVudGVkQnV0dG9uLnJlbW92ZUV2ZW50RGVsZWdhdGUob1NlZ21lbnRlZEJ1dHRvbkRlbGVnYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IG9TZWdtZW50ZWRCdXR0b24gPSAoXG5cdFx0XHRcdHNTZWxlY3RlZEtleSA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSA/IHRoaXMuX2dldFNlZ21lbnRlZEJ1dHRvbihcIlRhYmxlXCIpIDogdGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uKFwiQ2hhcnRcIilcblx0XHRcdCkgYXMgU2VnbWVudGVkQnV0dG9uO1xuXHRcdFx0aWYgKG9TZWdtZW50ZWRCdXR0b24gIT09IG9FdmVudC5nZXRTb3VyY2UoKSkge1xuXHRcdFx0XHRvU2VnbWVudGVkQnV0dG9uLmFkZEV2ZW50RGVsZWdhdGUob1NlZ21lbnRlZEJ1dHRvbkRlbGVnYXRlKTtcblx0XHRcdH1cblx0XHRcdHN3aXRjaCAoc1NlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTpcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ6XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDpcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlcnNTZWdtZW50ZWRCdXR0b25QcmVzc2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0aWYgKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIikgPT09IFwiQ29tcGFjdFwiKSB7XG5cdFx0XHRcdHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKS5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcInZpc3VhbEZpbHRlckJhcklkXCIpKSBhcyBDb250cm9sKS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJ2aXN1YWxGaWx0ZXJCYXJJZFwiKSkgYXMgQ29udHJvbCkuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU3RhdGVDaGFuZ2UodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9XG5cdH07XG5cdGZvcm1hdHRlcnMgPSB7XG5cdFx0LyoqXG5cdFx0ICogTWV0aG9kIHRvIHNldCB0aGUgbWVzc2FnZSB0ZXh0IGZvciB0aGUgbXVsdGlwbGUgZW50aXR5IHNldHMgd2hlbiBmaWVsZHMgaW4gdGhlIEZpbHRlckJhciBuZWVkIHRvIGJlIGlnbm9yZWQuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gdGhpc1xuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IGFJZ25vcmVkRmllbGRzIEFycmF5IG9mIGlnbm9yZWQgZmllbGRzIGluIHRoZSBGaWx0ZXJCYXIgZm9yIHRoZSBjdXJyZW50IHRhYiAobXVsdGlwbGUgZW50aXR5IHNldHMpXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHNUYWJUaXRsZSBUYWIgdGl0bGVcblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJJc0NoYXJ0IEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY29udHJvbCBpcyBhIGNoYXJ0IG9yIG5vdFxuXHRcdCAqIEBwYXJhbSB7b2JqZWN0fSBvQXBwbHlTdXBwb3J0ZWQgQXBwbHlTdXBwb3J0ZWQgZm9yIHRoZSBjb250cm9sXG5cdFx0ICogQHJldHVybnMge3N0cmluZ30gTWVzc2FnZSB0ZXh0XG5cdFx0ICovXG5cdFx0c2V0VGFiTWVzc2FnZVN0cmlwKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBhSWdub3JlZEZpZWxkczogYW55W10sIHNUYWJUaXRsZTogc3RyaW5nLCBiSXNDaGFydD86IGFueSwgb0FwcGx5U3VwcG9ydGVkPzogYW55KSB7XG5cdFx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdFx0YklzQ2hhcnQgPSBiSXNDaGFydCA9PT0gXCJ0cnVlXCIgfHwgYklzQ2hhcnQgPT09IHRydWU7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiAoc1RhYlRpdGxlIHx8IGJJc0NoYXJ0KSkge1xuXHRcdFx0XHRjb25zdCBzRmlsdGVyQmFyRW50aXR5UGF0aCA9IG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0b01ldGFNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUudGVtcGxhdGVzXCIpIGFzIFJlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdGFJZ25vcmVkTGFiZWxzID0gYUlnbm9yZWRGaWVsZHMubWFwKGZ1bmN0aW9uIChzUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NYWNyb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eSA9PT0gXCIkc2VhcmNoXCIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9NYWNyb1Jlc291cmNlQnVuZGxlID8gb01hY3JvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRklMVEVSQkFSX1NFQVJDSFwiKSA6IFwiXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoc1Byb3BlcnR5ID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb01hY3JvUmVzb3VyY2VCdW5kbGUgPyBvTWFjcm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9DT01NT05fRklMVEVSQkFSX0VESVRJTkdfU1RBVFVTXCIpIDogXCJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHNMYWJlbCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNGaWx0ZXJCYXJFbnRpdHlQYXRoICsgc1Byb3BlcnR5ICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KHNMYWJlbCwgb0ZpbHRlckJhcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlYXJjaElnbm9yZWQgPSAhb0FwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaDtcblx0XHRcdFx0aWYgKG9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHRcdHNUZXh0ID0gQ29tbW9uVXRpbHMuZ2V0TWVzc2FnZVN0cmlwVGV4dChcblx0XHRcdFx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0XHRcdFx0YUlnbm9yZWRMYWJlbHMsXG5cdFx0XHRcdFx0XHRvRmlsdGVyQmFyLFxuXHRcdFx0XHRcdFx0YklzQ2hhcnQsXG5cdFx0XHRcdFx0XHRiSXNTZWFyY2hJZ25vcmVkLFxuXHRcdFx0XHRcdFx0c1RhYlRpdGxlLFxuXHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldExvY2FsaXplZFRleHRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0UmVwb3J0Q29udHJvbGxlcjtcbiJdfQ==