@sapui5/sap.fe.core 1.92.0 → 1.93.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/package.json +2 -3
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +2 -2
  4. package/src/sap/fe/core/AppComponent.js +21 -1
  5. package/src/sap/fe/core/CommonUtils.js +130 -48
  6. package/src/sap/fe/core/ExtensionAPI.js +238 -226
  7. package/src/sap/fe/core/PageController.js +5 -2
  8. package/src/sap/fe/core/TemplateComponent.js +1 -0
  9. package/src/sap/fe/core/TransactionHelper.js +35 -8
  10. package/src/sap/fe/core/actions/draft.js +1 -1
  11. package/src/sap/fe/core/actions/messageHandling.js +18 -6
  12. package/src/sap/fe/core/actions/operations.js +17 -41
  13. package/src/sap/fe/core/controllerextensions/EditFlow.js +127 -43
  14. package/src/sap/fe/core/controllerextensions/InternalRouting.js +11 -11
  15. package/src/sap/fe/core/controllerextensions/KPIManagement.js +417 -0
  16. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +399 -0
  17. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -3
  18. package/src/sap/fe/core/controllerextensions/PageReady.ts +1 -1
  19. package/src/sap/fe/core/controllerextensions/Share.js +102 -66
  20. package/src/sap/fe/core/controllerextensions/SideEffects.js +60 -14
  21. package/src/sap/fe/core/controllerextensions/SideEffects.ts +53 -12
  22. package/src/sap/fe/core/controllerextensions/ViewState.js +18 -18
  23. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +13 -0
  24. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +68 -2
  25. package/src/sap/fe/core/converters/ConverterContext.js +15 -1
  26. package/src/sap/fe/core/converters/ConverterContext.ts +11 -0
  27. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  28. package/src/sap/fe/core/converters/ManifestSettings.ts +14 -2
  29. package/src/sap/fe/core/converters/ManifestWrapper.js +14 -14
  30. package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -12
  31. package/src/sap/fe/core/converters/MetaModelConverter.js +32 -2
  32. package/src/sap/fe/core/converters/MetaModelConverter.ts +39 -2
  33. package/src/sap/fe/core/converters/annotations/DataField.js +10 -6
  34. package/src/sap/fe/core/converters/annotations/DataField.ts +9 -5
  35. package/src/sap/fe/core/converters/common/AnnotationConverter.js +14 -4
  36. package/src/sap/fe/core/converters/controls/Common/Action.js +25 -15
  37. package/src/sap/fe/core/converters/controls/Common/Action.ts +33 -19
  38. package/src/sap/fe/core/converters/controls/Common/Criticality.js +50 -0
  39. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +33 -0
  40. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -3
  41. package/src/sap/fe/core/converters/controls/Common/Form.ts +1 -2
  42. package/src/sap/fe/core/converters/controls/Common/KPI.js +181 -0
  43. package/src/sap/fe/core/converters/controls/Common/KPI.ts +220 -0
  44. package/src/sap/fe/core/converters/controls/Common/Table.js +121 -59
  45. package/src/sap/fe/core/converters/controls/Common/Table.ts +130 -62
  46. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -4
  47. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +9 -3
  48. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +62 -7
  49. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +58 -6
  50. package/src/sap/fe/core/converters/helpers/Aggregation.js +86 -11
  51. package/src/sap/fe/core/converters/helpers/Aggregation.ts +79 -8
  52. package/src/sap/fe/core/converters/helpers/BindingHelper.js +44 -2
  53. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +43 -2
  54. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  55. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  56. package/src/sap/fe/core/converters/helpers/IssueManager.js +8 -2
  57. package/src/sap/fe/core/converters/helpers/IssueManager.ts +7 -1
  58. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +93 -0
  59. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +92 -0
  60. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +102 -23
  61. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -17
  62. package/src/sap/fe/core/converters/templates/ListReportConverter.js +44 -5
  63. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +39 -2
  64. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +41 -30
  65. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +47 -30
  66. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -1
  67. package/src/sap/fe/core/formatters/CriticalityFormatter.js +77 -0
  68. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +58 -0
  69. package/src/sap/fe/core/formatters/KPIFormatter.js +103 -0
  70. package/src/sap/fe/core/formatters/KPIFormatter.ts +88 -0
  71. package/src/sap/fe/core/fpm/manifest.json +1 -3
  72. package/src/sap/fe/core/helpers/BindingExpression.js +161 -97
  73. package/src/sap/fe/core/helpers/BindingExpression.ts +188 -117
  74. package/src/sap/fe/core/library.js +1 -1
  75. package/src/sap/fe/core/messagebundle.properties +45 -1
  76. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -1
  77. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -0
  78. package/src/sap/fe/core/services/RoutingServiceFactory.js +30 -8
  79. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +16 -4
  80. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -3
  81. package/src/sap/fe/core/templating/DataModelPathHelper.js +7 -3
  82. package/src/sap/fe/core/templating/DataModelPathHelper.ts +7 -2
  83. package/src/sap/fe/core/templating/UIFormatters.js +1 -5
  84. package/src/sap/fe/core/templating/UIFormatters.ts +0 -3
@@ -147,7 +147,7 @@ sap.ui.define(
147
147
  retrieve: function(oView) {
148
148
  var oController = oView.getController();
149
149
  if (oController && oController.viewState) {
150
- return oController.viewState.retrieveViewState();
150
+ return oController.viewState.retrieveViewState(oController.viewState);
151
151
  }
152
152
  return {};
153
153
  },
@@ -190,38 +190,38 @@ sap.ui.define(
190
190
  methods: {
191
191
  collectResults: { "public": false, "final": true },
192
192
  adaptControlStateHandler: {
193
- "public": false,
193
+ "public": true,
194
194
  "final": false,
195
195
  overrideExecution: OverrideExecution.After
196
196
  },
197
197
  getControlStateHandler: { "public": false, "final": true },
198
198
  adaptStateControls: {
199
- "public": false,
199
+ "public": true,
200
200
  "final": false,
201
201
  overrideExecution: OverrideExecution.After
202
202
  },
203
203
  retrieveAdditionalStates: {
204
- "public": false,
204
+ "public": true,
205
205
  "final": false,
206
206
  overrideExecution: OverrideExecution.After
207
207
  },
208
208
  retrieveViewState: { "public": true, "final": true },
209
209
  retrieveControlState: { "public": false, "final": true },
210
210
  applyInitialStateOnly: {
211
- "public": false,
211
+ "public": true,
212
212
  "final": false,
213
213
  overrideExecution: OverrideExecution.Instead
214
214
  },
215
215
  applyViewState: { "public": true, "final": true },
216
216
  applyControlState: { "public": false, "final": true },
217
217
  applyAdditionalStates: {
218
- "public": false,
218
+ "public": true,
219
219
  "final": false,
220
220
  overrideExecution: OverrideExecution.After
221
221
  },
222
- applyNavigationParameters: { "public": false, "final": false, overrideExecution: OverrideExecution.After },
223
- onBeforeStateApplied: { "public": false, "final": false, overrideExecution: OverrideExecution.After },
224
- onAfterStateApplied: { "public": false, "final": false, overrideExecution: OverrideExecution.After }
222
+ applyNavigationParameters: { "public": true, "final": false, overrideExecution: OverrideExecution.After },
223
+ onBeforeStateApplied: { "public": true, "final": false, overrideExecution: OverrideExecution.After },
224
+ onAfterStateApplied: { "public": true, "final": false, overrideExecution: OverrideExecution.After }
225
225
  }
226
226
  },
227
227
 
@@ -307,7 +307,7 @@ sap.ui.define(
307
307
  }
308
308
  }
309
309
  }
310
- this.adaptControlStateHandler(oControl, aCustomControlStateHandler);
310
+ this.base.viewState.adaptControlStateHandler(oControl, aCustomControlStateHandler);
311
311
  return aInternalControlStateHandler.concat(aCustomControlStateHandler);
312
312
  },
313
313
 
@@ -350,7 +350,7 @@ sap.ui.define(
350
350
  ++that._iRetrievingStateCounter;
351
351
  return that._pInitialStateApplied
352
352
  .then(function() {
353
- return that.collectResults(that.adaptStateControls);
353
+ return that.collectResults(that.base.viewState.adaptStateControls);
354
354
  })
355
355
  .then(function(aControls) {
356
356
  return Promise.all(
@@ -413,7 +413,7 @@ sap.ui.define(
413
413
  */
414
414
  _retrieveAdditionalStates: function() {
415
415
  var mAdditionalStates = {};
416
- this.retrieveAdditionalStates(mAdditionalStates);
416
+ this.base.viewState.retrieveAdditionalStates(mAdditionalStates);
417
417
  return mAdditionalStates;
418
418
  },
419
419
 
@@ -477,12 +477,12 @@ sap.ui.define(
477
477
  */
478
478
  applyViewState: function(oViewState, oNavParameter) {
479
479
  var that = this;
480
- if (this.applyInitialStateOnly() && this._getInitialStateApplied()) {
480
+ if (this.base.viewState.applyInitialStateOnly() && this._getInitialStateApplied()) {
481
481
  return Promise.resolve();
482
482
  }
483
- return this.collectResults(this.onBeforeStateApplied)
483
+ return this.collectResults(this.base.viewState.onBeforeStateApplied)
484
484
  .then(function() {
485
- return that.collectResults(that.adaptStateControls);
485
+ return that.collectResults(that.base.viewState.adaptStateControls);
486
486
  })
487
487
  .then(function(aControls) {
488
488
  var oPromiseChain = Promise.resolve();
@@ -501,15 +501,15 @@ sap.ui.define(
501
501
  .then(function() {
502
502
  if (oNavParameter.navigationType === NavType.iAppState) {
503
503
  return that.collectResults(
504
- that.applyAdditionalStates,
504
+ that.base.viewState.applyAdditionalStates,
505
505
  oViewState ? oViewState[ADDITIONAL_STATES_KEY] : undefined
506
506
  );
507
507
  } else {
508
- return that.collectResults(that.applyNavigationParameters, oNavParameter);
508
+ return that.collectResults(that.base.viewState.applyNavigationParameters, oNavParameter);
509
509
  }
510
510
  })
511
511
  .finally(function() {
512
- return that.collectResults(that.onAfterStateApplied).then(that._setInitialStateApplied.bind(that));
512
+ return that.collectResults(that.base.viewState.onAfterStateApplied).then(that._setInitialStateApplied.bind(that));
513
513
  });
514
514
  },
515
515
 
@@ -22,6 +22,19 @@ sap.ui.define(["sap/ui/mdc/filterbar/aligned/FilterContainer"], function(MdcFilt
22
22
  MdcFilterContainer.prototype.init.apply(this, arguments);
23
23
  };
24
24
 
25
+ FilterContainer.prototype.exit = function() {
26
+ // destroy layout
27
+ var that = this;
28
+ MdcFilterContainer.prototype.exit.apply(this, arguments);
29
+ // destroy all filter fields which are not in the layout
30
+ this.aAllFilterFields.forEach(function(oFilterField) {
31
+ oFilterField.destroy();
32
+ });
33
+ Object.keys(this.aAllVisualFilters).forEach(function(sKey) {
34
+ that.aAllVisualFilters[sKey].destroy();
35
+ });
36
+ };
37
+
25
38
  FilterContainer.prototype.insertFilterField = function(oControl) {
26
39
  var oFilterItemLayoutEventDelegate = {
27
40
  onBeforeRendering: function() {
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  // Provides control sap.fe.core.controls.filterbar.VisualFilter.
7
- sap.ui.define(["sap/m/VBox", "sap/m/VBoxRenderer"], function(VBox, VBoxRenderer) {
7
+ sap.ui.define(["sap/m/VBox", "sap/m/VBoxRenderer", "sap/fe/macros/CommonHelper"], function(VBox, VBoxRenderer, CommonHelper) {
8
8
  "use strict";
9
9
 
10
10
  /**
@@ -36,9 +36,75 @@ sap.ui.define(["sap/m/VBox", "sap/m/VBoxRenderer"], function(VBox, VBoxRenderer)
36
36
  var oInteractiveChart = this.getItems()[1].getItems()[0];
37
37
  var oInteractiveChartListBinding =
38
38
  oInteractiveChart.getBinding("segments") || oInteractiveChart.getBinding("bars") || oInteractiveChart.getBinding("points");
39
+ var oInternalModelContext = oInteractiveChart.getBindingContext("internal");
40
+ var sId = oInteractiveChart.getId().split("fe::VisualFilter");
41
+ var sChartId = "fe::VisualFilter" + sId[1];
42
+ var oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.macros");
43
+ var bShowOverLayInitially = oInteractiveChart.data("showOverlayInitially");
44
+ var oSelectionVariantAnnotation = CommonHelper.parseCustomData(oInteractiveChart.data("selectionVariantAnnotation"));
45
+ var aRequiredProperties = CommonHelper.parseCustomData(oInteractiveChart.data("requiredProperties"));
46
+ var oMetaModel = oInteractiveChart.getModel().getMetaModel();
47
+ var sEntitySetPath = oInteractiveChartListBinding.getPath();
48
+ if (bShowOverLayInitially === "true") {
49
+ if (!Object.keys(oSelectionVariantAnnotation).length) {
50
+ if (aRequiredProperties.length > 1) {
51
+ oInternalModelContext.setProperty(sChartId, {
52
+ "VFOverLayMessage": oResourceBundle.getText("M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_MULTIPLEVF"),
53
+ "showOverLayForVF": true
54
+ });
55
+ } else {
56
+ var sLabel =
57
+ oMetaModel.getObject(sEntitySetPath + "/" + aRequiredProperties[0] + "@com.sap.vocabularies.Common.v1.Label") ||
58
+ aRequiredProperties[0];
59
+ oInternalModelContext.setProperty(sChartId, {
60
+ "VFOverLayMessage": oResourceBundle.getText("M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_SINGLEVF", sLabel),
61
+ "showOverLayForVF": true
62
+ });
63
+ }
64
+ } else {
65
+ var aSelectOptions = [];
66
+ var aNotMatchedConditions = [];
67
+ oSelectionVariantAnnotation.SelectOptions.forEach(function(oSelectOption) {
68
+ aSelectOptions.push(oSelectOption.PropertyName.$PropertyPath);
69
+ });
70
+ aRequiredProperties.forEach(function(sPath) {
71
+ if (aSelectOptions.indexOf(sPath) === -1) {
72
+ aNotMatchedConditions.push(sPath);
73
+ }
74
+ });
75
+ if (aNotMatchedConditions.length > 1) {
76
+ oInternalModelContext.setProperty(sChartId, {
77
+ "VFOverLayMessage": oResourceBundle.getText("M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_MULTIPLEVF"),
78
+ "showOverLayForVF": true
79
+ });
80
+ } else {
81
+ var sLabel =
82
+ oMetaModel.getObject(sEntitySetPath + "/" + aNotMatchedConditions[0] + "@com.sap.vocabularies.Common.v1.Label") ||
83
+ aNotMatchedConditions[0];
84
+ oInternalModelContext.setProperty(sChartId, {
85
+ "VFOverLayMessage": oResourceBundle.getText("M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_SINGLEVF", sLabel),
86
+ "showOverLayForVF": true
87
+ });
88
+ }
89
+ aNotMatchedConditions.length > 1
90
+ ? oInternalModelContext.setProperty(sChartId, {
91
+ "VFOverLayMessage": oResourceBundle.getText("M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_MULTIPLEVF"),
92
+ "showOverLayForVF": true
93
+ })
94
+ : oInternalModelContext.setProperty(sChartId, {
95
+ "VFOverLayMessage": oResourceBundle.getText(
96
+ "M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_SINGLEVF",
97
+ aNotMatchedConditions[0]
98
+ ),
99
+ "showOverLayForVF": true
100
+ });
101
+ }
102
+ }
103
+
104
+ var bShowOverlay = oInternalModelContext.getProperty(sChartId) && oInternalModelContext.getProperty(sChartId).showOverLayForVF;
39
105
  // resume binding for only those visual filters that do not have a in parameter attached.
40
106
  // Bindings of visual filters with inParameters will be resumed later after considering in parameters.
41
- if (oInteractiveChartListBinding && oInteractiveChartListBinding.isSuspended()) {
107
+ if (oInteractiveChartListBinding && oInteractiveChartListBinding.isSuspended() && !bShowOverlay) {
42
108
  oInteractiveChartListBinding.resume();
43
109
  }
44
110
  };
@@ -246,6 +246,20 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
246
246
  value: function getEntityType() {
247
247
  return this.targetDataModelPath.targetEntityType;
248
248
  }
249
+ /**
250
+ * Get a singleton based on fully qualified name.
251
+ *
252
+ * @param {string} fullyQualifiedName The fully qualified name of the singleton
253
+ * @returns {Singleton | undefined} The singleton instance.
254
+ */
255
+
256
+ }, {
257
+ key: "getSingleton",
258
+ value: function getSingleton(fullyQualifiedName) {
259
+ return this.convertedTypes.singletons.find(function (singleton) {
260
+ return singleton.fullyQualifiedName === fullyQualifiedName;
261
+ });
262
+ }
249
263
  /**
250
264
  * Retrieve an annotation from an EntityType based on an annotation path.
251
265
  *
@@ -483,4 +497,4 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
483
497
 
484
498
  return ConverterContext;
485
499
  }, false);
486
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnZlcnRlckNvbnRleHQudHMiXSwibmFtZXMiOlsiaXNBbm5vdGF0aW9uVGVybSIsInZBbm5vdGF0aW9uUGF0aCIsImlzU2VydmljZU9iamVjdCIsIm9iamVjdFBhcnQiLCJoYXNPd25Qcm9wZXJ0eSIsImdldERhdGFNb2RlbFBhdGhGb3JFbnRpdHlTZXQiLCJyZXNvbHZlZE1ldGFQYXRoIiwicm9vdEVudGl0eVNldCIsImN1cnJlbnRFbnRpdHlTZXQiLCJwcmV2aW91c0VudGl0eVNldCIsImN1cnJlbnRFbnRpdHlUeXBlIiwibmF2aWdhdGVkUGF0aHMiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm9iamVjdFBhdGgiLCJmb3JFYWNoIiwiX3R5cGUiLCJwdXNoIiwibmFtZSIsInRhcmdldFR5cGUiLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiam9pbiIsInVuZGVmaW5lZCIsImVudGl0eVR5cGUiLCJkYXRhTW9kZWxQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwidGFyZ2V0RW50aXR5U2V0IiwiY29udGV4dExvY2F0aW9uIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0IiwiQ29udmVydGVyQ29udGV4dCIsImNvbnZlcnRlZFR5cGVzIiwibWFuaWZlc3RTZXR0aW5ncyIsImRpYWdub3N0aWNzIiwibWVyZ2VGbiIsInRhcmdldERhdGFNb2RlbFBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJNYW5pZmVzdFdyYXBwZXIiLCJiYXNlQ29udGV4dFBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZW50aXR5VHlwZXMiLCJmaW5kIiwic3RhcnRzV2l0aCIsInJlcGxhY2VBbm5vdGF0aW9uIiwicmVwbGFjZSIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsIl9nZXRFbnRpdHlUeXBlRnJvbUZ1bGx5UXVhbGlmaWVkTmFtZSIsIkVycm9yIiwiZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJzQW5ub3RhdGlvblBhdGgiLCJlbnRpdHlDb250YWluZXIiLCJpbmRleE9mIiwicmVzb2x2ZVBhdGgiLCJzdGFydGluZ0VudGl0eVR5cGUiLCJjb25jYXQiLCJpIiwiY3VycmVudE9iamVjdCIsInZpc2l0ZWRPYmplY3RzIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0IiwibmF2T2JqZWN0IiwibGVuZ3RoIiwibmF2UGF0aCIsIm91dERhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0VGVtcGxhdGVUeXBlIiwiZW50aXR5VHlwZUZRTiIsIm1hdGNoIiwicmVwbGFjZWRBbm5vdGF0aW9uUGF0aCIsInN1YnN0ciIsImNvbnRleHRQYXRoIiwidGFyZ2V0UGF0aCIsInZvY2FidWxhcnlOYW1lIiwiYW5ub3RhdGlvblRlcm0iLCJhbm5vdGF0aW9uU291cmNlcyIsImdldEVudGl0eVR5cGUiLCJvdXRBbm5vdGF0aW9ucyIsImFubm90YXRpb25Tb3VyY2UiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwidGVybSIsInJlZHVjZSIsInByZXZpb3VzVmFsdWUiLCJrZXkiLCJzUGF0aCIsImVuaGFuY2VkUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInNFbnRpdHlTZXROYW1lIiwib01ldGFNb2RlbENvbnRleHQiLCJvTWV0YU1vZGVsIiwiaXNBIiwiZ2V0TW9kZWwiLCJvQ29udmVydGVyT3V0cHV0IiwiY29udmVydFR5cGVzIiwiZW50aXR5U2V0cyIsImVudGl0eVNldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEJBOzs7Ozs7QUFNQSxNQUFNQSxnQkFBZ0IsR0FBRyxVQUFTQyxlQUFULEVBQWdHO0FBQ3hILFdBQU8sT0FBT0EsZUFBUCxLQUEyQixRQUFsQztBQUNBLEdBRkQ7O0FBSUEsV0FBU0MsZUFBVCxDQUF5QkMsVUFBekIsRUFBOEY7QUFDN0YsV0FBT0EsVUFBVSxJ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LFlBQUFBLFlBQVksRUFBRUY7QUFMTyxXQUF0QjtBQU9BOztBQUNELGVBQU8sSUFBSUksZ0JBQUosQ0FBcUJtRSxnQkFBckIsRUFBdUNqRSxnQkFBdkMsRUFBeURDLFdBQXpELEVBQXNFQyxPQUF0RSxFQUErRUMsbUJBQS9FLENBQVA7QUFDQTs7Ozs7O1NBR2FMLGdCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbm5vdGF0aW9uVGVybSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHtcblx0QW55QW5ub3RhdGlvbixcblx0Q29udmVydGVyT3V0cHV0LFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdEVudGl0eUNvbnRhaW5lcixcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRTZXJ2aWNlT2JqZWN0LFxuXHRSZXNvbHV0aW9uVGFyZ2V0LFxuXHRTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvblxufSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgQmFzZU1hbmlmZXN0U2V0dGluZ3MsIFRlbXBsYXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IENvbnRleHQsIE9EYXRhTWV0YU1vZGVsIH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NFwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBSZXNvbHZlZFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgSURpYWdub3N0aWNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IEVudGl0eVR5cGVBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy90eXBlcy9nZW5lcmF0ZWQvRWRtX1R5cGVzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZEFubm90YXRpb25Db250ZXh0ID0ge1xuXHRhbm5vdGF0aW9uOiBBbnlBbm5vdGF0aW9uO1xuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0O1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBvYmplY3QgaXMgYW4gYW5ub3RhdGlvbiB0ZXJtLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFubm90YXRpb25UZXJtPG9iamVjdD59IHZBbm5vdGF0aW9uUGF0aFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGlzQW5ub3RhdGlvblRlcm0gPSBmdW5jdGlvbih2QW5ub3RhdGlvblBhdGg6IHN0cmluZyB8IEFubm90YXRpb25UZXJtPGFueT4pOiB2QW5ub3RhdGlvblBhdGggaXMgQW5ub3RhdGlvblRlcm08YW55PiB7XG5cdHJldHVybiB0eXBlb2YgdkFubm90YXRpb25QYXRoID09PSBcIm9iamVjdFwiO1xufTtcblxuZnVuY3Rpb24gaXNTZXJ2aWNlT2JqZWN0KG9iamVjdFBhcnQ6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uKTogb2JqZWN0UGFydCBpcyBTZXJ2aWNlT2JqZWN0IHtcblx0cmV0dXJuIG9iamVjdFBhcnQgJiYgb2JqZWN0UGFydC5oYXNPd25Qcm9wZXJ0eShcIl90eXBlXCIpO1xufVxuXG5jb25zdCBnZXREYXRhTW9kZWxQYXRoRm9yRW50aXR5U2V0ID0gZnVuY3Rpb24ocmVzb2x2ZWRNZXRhUGF0aDogUmVzb2x1dGlvblRhcmdldDxhbnk+KTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGxldCByb290RW50aXR5U2V0OiBFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG5cdGxldCBjdXJyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG5cdGxldCBwcmV2aW91c0VudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuXHRsZXQgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBuYXZpZ2F0ZWRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXM6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdID0gW107XG5cdHJlc29sdmVkTWV0YVBhdGgub2JqZWN0UGF0aC5mb3JFYWNoKChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbikgPT4ge1xuXHRcdGlmIChpc1NlcnZpY2VPYmplY3Qob2JqZWN0UGFydCkpIHtcblx0XHRcdHN3aXRjaCAob2JqZWN0UGFydC5fdHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdFx0bmF2aWdhdGVkUGF0aHMucHVzaChvYmplY3RQYXJ0Lm5hbWUpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gob2JqZWN0UGFydCk7XG5cdFx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBvYmplY3RQYXJ0LnRhcmdldFR5cGU7XG5cdFx0XHRcdFx0aWYgKHByZXZpb3VzRW50aXR5U2V0ICYmIHByZXZpb3VzRW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkobmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIikpKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gcHJldmlvdXNFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKV07XG5cdFx0XHRcdFx0XHRwcmV2aW91c0VudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocyA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRcdGlmIChyb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gb2JqZWN0UGFydDtcblx0XHRcdFx0XHRwcmV2aW91c0VudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50RW50aXR5U2V0Py5lbnRpdHlUeXBlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQgYXMgRW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGN1cnJlbnRFbnRpdHlUeXBlIGFzIEVudGl0eVR5cGUsXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBjdXJyZW50RW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRjb250ZXh0TG9jYXRpb246IHVuZGVmaW5lZCxcblx0XHR0YXJnZXRPYmplY3Q6IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0XG5cdH07XG5cdGRhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uID0gZGF0YU1vZGVsUGF0aDtcblx0cmV0dXJuIGRhdGFNb2RlbFBhdGg7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIENvbnZlcnRlckNvbnRleHQgb2JqZWN0IHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgY29udmVydGVycy5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlck91dHB1dH0gb0NvbnZlcnRlZFR5cGVzIFRoZSBjb252ZXJ0ZWQgYW5ub3RhdGlvbiBhbmQgc2VydmljZSB0eXBlc1xuICogQHBhcmFtIHtCYXNlTWFuaWZlc3RTZXR0aW5nc30gb01hbmlmZXN0U2V0dGluZ3MgVGhlIG1hbmlmZXN0U2V0dGluZ3MgdGhhdCBhcHBsaWVzIHRvIHRoaXMgcGFnZVxuICogQHBhcmFtIHtUZW1wbGF0ZVR5cGV9IHRlbXBsYXRlVHlwZSBUaGUgdHlwZSBvZiB0ZW1wbGF0ZSB3ZSdyZSBsb29raW5nIGF0IHJpZ2h0IG5vd1xuICogQHBhcmFtIHtJU2hlbGxTZXJ2aWNlc1Byb3h5fSBzaGVsbFNlcnZpY2VzIFRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBzaGVsbHNlcnZpY2VcbiAqIEBwYXJhbSB7SURpYWdub3N0aWNzfSBkaWFnbm9zdGljcyBUaGUgZGlhZ25vc3RpY3Mgc2hpbVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGbiBUaGUgZnVuY3Rpb24gdG8gYmUgdXNlZCB0byBwZXJmb20gc29tZSBkZWVwIG1lcmdlcyBiZXR3ZWVuIG9iamVjdFxuICogQHBhcmFtIHtEYXRhTW9kZWxPYmplY3RQYXRofSB0YXJnZXREYXRhTW9kZWxQYXRoIFRoZSBnbG9iYWwgcGF0aCB0byByZWFjaCB0aGUgZW50aXR5U2V0XG4gKlxuICogQHJldHVybnMge0NvbnZlcnRlckNvbnRleHR9IEEgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBjb252ZXJ0ZXJzXG4gKi9cbmNsYXNzIENvbnZlcnRlckNvbnRleHQge1xuXHRwcml2YXRlIG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyO1xuXHRwcml2YXRlIGJhc2VDb250ZXh0UGF0aDogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgY29udmVydGVkVHlwZXM6IENvbnZlcnRlck91dHB1dCxcblx0XHRwcml2YXRlIG1hbmlmZXN0U2V0dGluZ3M6IEJhc2VNYW5pZmVzdFNldHRpbmdzLFxuXHRcdHByaXZhdGUgZGlhZ25vc3RpY3M6IElEaWFnbm9zdGljcyxcblx0XHRwcml2YXRlIG1lcmdlRm46IEZ1bmN0aW9uLFxuXHRcdHByaXZhdGUgdGFyZ2V0RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuXHQpIHtcblx0XHR0aGlzLm1hbmlmZXN0V3JhcHBlciA9IG5ldyBNYW5pZmVzdFdyYXBwZXIodGhpcy5tYW5pZmVzdFNldHRpbmdzLCBtZXJnZUZuKTtcblx0XHR0aGlzLmJhc2VDb250ZXh0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgodGhpcy50YXJnZXREYXRhTW9kZWxQYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgcHJvcGVydHkgYmFzZWQgb24gdGhlIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBmdWxseVF1YWxpZmllZE5hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lXG5cdCAqIEByZXR1cm5zIHtQcm9wZXJ0eX0gVGhlIHByb3BlcnR5IEVudGl0eVR5cGUgYmFzZWRcblx0ICovXG5cdHByaXZhdGUgX2dldEVudGl0eVR5cGVGcm9tRnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IHRoaXMuY29udmVydGVkVHlwZXMuZW50aXR5VHlwZXMuZmluZChlbnRpdHlUeXBlID0+IHtcblx0XHRcdGlmIChmdWxseVF1YWxpZmllZE5hbWUuc3RhcnRzV2l0aChlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgcmVwbGFjZUFubm90YXRpb24gPSBmdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZShlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgXCJcIik7XG5cdFx0XHRcdHJldHVybiByZXBsYWNlQW5ub3RhdGlvbi5zdGFydHNXaXRoKFwiL1wiKSB8fCByZXBsYWNlQW5ub3RhdGlvbi5zdGFydHNXaXRoKFwiQFwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0XHRyZXR1cm4gdGFyZ2V0RW50aXR5VHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgZW50aXR5VHlwZSBhc3NvY2lhdGVkIHdpdGggYW4gYW5ub3RhdGlvbiBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uIFRoZSBhbm5vdGF0aW9uIG9iamVjdCBmb3Igd2hpY2ggd2Ugd2FudCB0byBmaW5kIHRoZSBlbnRpdHlUeXBlXG5cdCAqIEByZXR1cm5zIHtFbnRpdHlUeXBlfSBUaGUgRW50aXR5VHlwZSB0aGUgYW5ub3RhdGlvbiByZWZlcnMgdG9cblx0ICovXG5cdGdldEFubm90YXRpb25FbnRpdHlUeXBlKGFubm90YXRpb24/OiBBbm5vdGF0aW9uVGVybTxhbnk+KTogRW50aXR5VHlwZSB7XG5cdFx0aWYgKGFubm90YXRpb24pIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gdGhpcy5fZ2V0RW50aXR5VHlwZUZyb21GdWxseVF1YWxpZmllZE5hbWUoYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0aWYgKCF0YXJnZXRFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIEVudGl0eSBUeXBlIGZvciBcIiArIGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0YXJnZXRFbnRpdHlUeXBlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBtYW5pZmVzdCBzZXR0aW5ncyBkZWZpbmVkIGZvciBhIHNwZWNpZmljIGNvbnRyb2wgd2l0aGluIGNvbnRyb2xDb25maWd1cmF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gdkFubm90YXRpb25QYXRoIFRoZSBhbm5vdGF0aW9uIHBhdGggb3Igb2JqZWN0IHRvIGV2YWx1YXRlXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZm9yIHRoYXQgc3BlY2lmaWMgYW5udG9hdGlvbiBwYXRoIGlmIGl0IGV4aXN0c1xuXHQgKi9cblx0Z2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2QW5ub3RhdGlvblBhdGg6IHN0cmluZyB8IEFubm90YXRpb25UZXJtPGFueT4pOiBhbnkge1xuXHRcdGlmIChpc0Fubm90YXRpb25UZXJtKHZBbm5vdGF0aW9uUGF0aCkpIHtcblx0XHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250cm9sQ29uZmlndXJhdGlvbihcblx0XHRcdFx0dkFubm90YXRpb25QYXRoLmZ1bGx5UXVhbGlmaWVkTmFtZS5yZXBsYWNlKHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgXCJcIilcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250cm9sQ29uZmlndXJhdGlvbih2QW5ub3RhdGlvblBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBhbiBhYnNvbHV0ZSBhbm5vdGF0aW9uIHBhdGggYmFzZWQgb24gdGhlIGN1cnJlbnQgbWV0YSBtb2RlbCBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc0Fubm90YXRpb25QYXRoIFRoZSByZWxhdGl2ZSBhbm5vdGF0aW9uIHBhdGhcblx0ICogQHJldHVybnMgVGhlIGNvcnJlY3QgYW5ub3RhdGlvbiBwYXRoIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRcblx0ICovXG5cdGdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc0Fubm90YXRpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmICghc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0XHRyZXR1cm4gc0Fubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRpZiAoc0Fubm90YXRpb25QYXRoWzBdID09PSBcIi9cIikge1xuXHRcdFx0cmV0dXJuIHNBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuYmFzZUNvbnRleHRQYXRoICsgXCIvXCIgKyBzQW5ub3RhdGlvblBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGN1cnJlbnQgZW50aXR5U2V0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBFbnRpdHlTZXQgaWYgaXQgZXhpc3RzLlxuXHQgKi9cblx0Z2V0RW50aXR5U2V0KCk6IEVudGl0eVNldCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGNvbnRleHQgcGF0aC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgcGF0aCBvZiB0aGUgY29udmVydGVyLlxuXHQgKi9cblx0Z2V0Q29udGV4dFBhdGgoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5iYXNlQ29udGV4dFBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGN1cnJlbnQgZGF0YSBtb2RlbCBvYmplY3QgcGF0aC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuXHQgKi9cblx0Z2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgRW50aXR5Q29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBzZXJ2aWNlIEVudGl0eUNvbnRhaW5lclxuXHQgKi9cblx0Z2V0RW50aXR5Q29udGFpbmVyKCk6IEVudGl0eUNvbnRhaW5lciB7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydGVkVHlwZXMuZW50aXR5Q29udGFpbmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgRW50aXR5VHlwZSBiYXNlZCBvbiB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IEVudGl0eVR5cGUuXG5cdCAqL1xuXHRnZXRFbnRpdHlUeXBlKCk6IEVudGl0eVR5cGUge1xuXHRcdHJldHVybiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhbiBhbm5vdGF0aW9uIGZyb20gYW4gRW50aXR5VHlwZSBiYXNlZCBvbiBhbiBhbm5vdGF0aW9uIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoIHRvIGV2YWx1YXRlXG5cdCAqIEByZXR1cm5zIFRoZSB0YXJnZXQgYW5ub3RhdGlvbiBwYXRoIGFzIHdlbGwgYXMgYSBjb252ZXJ0ZXIgY29udGV4dCB0byBnbyB3aXRoIGl0XG5cdCAqL1xuXHRnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihhbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogUmVzb2x2ZWRBbm5vdGF0aW9uQ29udGV4dCB7XG5cdFx0aWYgKGFubm90YXRpb25QYXRoLmluZGV4T2YoXCJAXCIpID09PSAtMSkge1xuXHRcdFx0YW5ub3RhdGlvblBhdGggPSBcIkBcIiArIGFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRjb25zdCB0YXJnZXRPYmplY3Q6IFJlc29sdmVkVGFyZ2V0ID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgoYW5ub3RhdGlvblBhdGgsIHRydWUpO1xuXG5cdFx0bGV0IHJvb3RFbnRpdHlTZXQgPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0O1xuXHRcdGxldCBjdXJyZW50RW50aXR5VHlwZSA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdGNvbnN0IHN0YXJ0aW5nRW50aXR5VHlwZSA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmNvbmNhdCgpO1xuXHRcdGxldCBpID0gMTtcblx0XHRsZXQgY3VycmVudE9iamVjdDtcblx0XHRsZXQgbmF2aWdhdGVkUGF0aHMgPSBbXTtcblx0XHRjb25zdCB2aXNpdGVkT2JqZWN0cyA9IHRhcmdldE9iamVjdC52aXNpdGVkT2JqZWN0cztcblx0XHQvLyBJbiBjYXNlIG9mIHBhcmFtZXRlcml6ZWQgc2VydmljZVxuXHRcdGlmICghcm9vdEVudGl0eVNldCAmJiBzdGFydGluZ0VudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5SZXN1bHRDb250ZXh0KSB7XG5cdFx0XHRyb290RW50aXR5U2V0ID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0O1xuXHRcdFx0dGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24obmF2T2JqZWN0KSB7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGhzLnB1c2gobmF2T2JqZWN0Lm5hbWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHdoaWxlIChpIDwgdmlzaXRlZE9iamVjdHMubGVuZ3RoKSB7XG5cdFx0XHRjdXJyZW50T2JqZWN0ID0gdmlzaXRlZE9iamVjdHNbaSsrXTtcblx0XHRcdGlmIChjdXJyZW50T2JqZWN0Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGhzLnB1c2goY3VycmVudE9iamVjdC5uYW1lKTtcblx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChjdXJyZW50T2JqZWN0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSk7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gKGN1cnJlbnRPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlO1xuXHRcdFx0XHRpZiAocm9vdEVudGl0eVNldCAmJiByb290RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkobmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIikpKSB7XG5cdFx0XHRcdFx0Y29uc3QgbmF2UGF0aCA9IG5hdmlnYXRlZFBhdGhzLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPVxuXHRcdFx0XHRcdFx0cm9vdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW2N1cnJlbnRPYmplY3QubmFtZV0gfHwgcm9vdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdlBhdGhdO1xuXHRcdFx0XHRcdG5hdmlnYXRlZFBhdGhzID0gW107XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cm9vdEVudGl0eVNldCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRPYmplY3QuX3R5cGUgPT09IFwiRW50aXR5U2V0XCIpIHtcblx0XHRcdFx0cm9vdEVudGl0eVNldCA9IGN1cnJlbnRPYmplY3QgYXMgRW50aXR5U2V0O1xuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IHJvb3RFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgb3V0RGF0YU1vZGVsUGF0aCA9IHtcblx0XHRcdHN0YXJ0aW5nRW50aXR5U2V0OiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQsXG5cdFx0XHR0YXJnZXRFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQsXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlOiBjdXJyZW50RW50aXR5VHlwZSxcblx0XHRcdHRhcmdldE9iamVjdDogbmF2aWdhdGlvblByb3BlcnRpZXNbbmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoIC0gMV0sXG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRcdGNvbnRleHRMb2NhdGlvbjogdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvblxuXHRcdH07XG5cdFx0cmV0dXJuIHtcblx0XHRcdGFubm90YXRpb246IHRhcmdldE9iamVjdC50YXJnZXQgYXMgQW55QW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG5ldyBDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHR0aGlzLmNvbnZlcnRlZFR5cGVzLFxuXHRcdFx0XHR0aGlzLm1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0XHRcdHRoaXMuZGlhZ25vc3RpY3MsXG5cdFx0XHRcdHRoaXMubWVyZ2VGbixcblx0XHRcdFx0b3V0RGF0YU1vZGVsUGF0aFxuXHRcdFx0KVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHR5cGUgb2YgdGVtcGxhdGUgd2UncmUgd29ya2luZyBvbiAoZS5nLiBMaXN0UmVwb3J0IC8gT2JqZWN0UGFnZSAvIC4uLikuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHRlbnBsYXRlIHR5cGVcblx0ICovXG5cdGdldFRlbXBsYXRlVHlwZSgpOiBUZW1wbGF0ZVR5cGUge1xuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhIHJlbGF0aXZlIGFubm90YXRpb24gcGF0aCBiZXR3ZWVuIGFuIGFubm90YXRpb24gcGF0aCBhbmQgYW4gZW50aXR5IHR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgYW5udG90YXRpb24gcGF0aC5cblx0ICovXG5cdGdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvblBhdGg6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGFubm90YXRpb25QYXRoLnJlcGxhY2UoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybSBhbiBlbnRpdHlUeXBlIGJhc2VkIHBhdGggdG8gYW4gZW50aXR5U2V0IGJhc2VkIG9uZSAodWk1IHRlbXBsYXRpbmcgZ2VuZXJhbGx5IGV4cGVjdCBhbiBlbnRpdHlTZXRCYXNlZFBhdGgpLlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcblx0ICogQHJldHVybnMgVGhlIEVudGl0eVNldCBiYXNlZCBhbm5vdGF0aW9uIHBhdGhcblx0ICovXG5cdGdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKCFhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRjb25zdCBlbnRpdHlUeXBlRlFOID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdGlmIChcblx0XHRcdHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgfHxcblx0XHRcdCgodGhpcy5iYXNlQ29udGV4dFBhdGguc3RhcnRzV2l0aChcIi9cIikgJiYgdGhpcy5iYXNlQ29udGV4dFBhdGgubWF0Y2goL1xcLy9nKSkgfHwgW10pLmxlbmd0aCA+IDFcblx0XHQpIHtcblx0XHRcdGxldCByZXBsYWNlZEFubm90YXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGgucmVwbGFjZShlbnRpdHlUeXBlRlFOLCBcIi9cIik7XG5cdFx0XHRpZiAocmVwbGFjZWRBbm5vdGF0aW9uUGF0aC5sZW5ndGggPiAyICYmIHJlcGxhY2VkQW5ub3RhdGlvblBhdGhbMF0gPT09IFwiL1wiICYmIHJlcGxhY2VkQW5ub3RhdGlvblBhdGhbMV0gPT09IFwiL1wiKSB7XG5cdFx0XHRcdHJlcGxhY2VkQW5ub3RhdGlvblBhdGggPSByZXBsYWNlZEFubm90YXRpb25QYXRoLnN1YnN0cigxKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmJhc2VDb250ZXh0UGF0aCArIHJlcGxhY2VkQW5ub3RhdGlvblBhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIi9cIiArIGFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgbWFuaWZlc3Qgd3JhcHBlciBmb3IgdGhlIGN1cnJlbnQgY29udGV4dC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgbWFuaWZlc3Qgd3JhcHBlclxuXHQgKi9cblx0Z2V0TWFuaWZlc3RXcmFwcGVyKCk6IE1hbmlmZXN0V3JhcHBlciB7XG5cdFx0cmV0dXJuIHRoaXMubWFuaWZlc3RXcmFwcGVyO1xuXHR9XG5cblx0Z2V0RGlhZ25vc3RpY3MoKTogSURpYWdub3N0aWNzIHtcblx0XHRyZXR1cm4gdGhpcy5kaWFnbm9zdGljcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhIG5ldyBjb252ZXJ0ZXIgY29udGV4dCwgc2NvcGVkIGZvciBhIGRpZmZlcmVudCBjb250ZXh0IHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0UGF0aCBUaGUgcGF0aCB3ZSB3YW50IHRvIG9yY2hlc3RyYXRlIHRoZSBjb252ZXJ0ZXIgY29udGV4dCBhcm91bmRcblx0ICogQHJldHVybnMge0NvbnZlcnRlckNvbnRleHR9XG5cdCAqL1xuXHRnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFQ+KGNvbnRleHRQYXRoOiBzdHJpbmcpOiBDb252ZXJ0ZXJDb250ZXh0IHtcblx0XHRjb25zdCByZXNvbHZlZE1ldGFQYXRoOiBSZXNvbHV0aW9uVGFyZ2V0PFQ+ID0gdGhpcy5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aChjb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgdGFyZ2V0UGF0aCA9IGdldERhdGFNb2RlbFBhdGhGb3JFbnRpdHlTZXQocmVzb2x2ZWRNZXRhUGF0aCk7XG5cdFx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0KHRoaXMuY29udmVydGVkVHlwZXMsIHRoaXMubWFuaWZlc3RTZXR0aW5ncywgdGhpcy5kaWFnbm9zdGljcywgdGhpcy5tZXJnZUZuLCB0YXJnZXRQYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIGFubm90YXRpb25zIG9mIGEgZ2l2ZW4gdGVybSBhbmQgdm9jYWJ1bGFyeSBvbiBhbiBlbnRpdHkgdHlwZVxuXHQgKiAob3Igb24gdGhlIGN1cnJlbnQgZW50aXR5IHR5cGUgaWYgZW50aXR5VHlwZSBpc24ndCBzcGVjaWZpZWQpLlxuXHQgKlxuXHQgKiBAcGFyYW0gdm9jYWJ1bGFyeU5hbWVcblx0ICogQHBhcmFtIGFubm90YXRpb25UZXJtXG5cdCAqIEBwYXJhbSBbYW5ub3RhdGlvblNvdXJjZXNdXG5cdCAqIEByZXR1cm5zIEFsbCB0aGUgYW5ub3RhdGlvbiBmb3IgYSBzcGVjaWZpYyB0ZXJtIGFuZCB2b2NhYnVsYXJ5IGZyb20gYW4gZW50aXR5IHR5cGVcblx0ICovXG5cdGdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdHZvY2FidWxhcnlOYW1lOiBrZXlvZiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMsXG5cdFx0YW5ub3RhdGlvblRlcm06IHN0cmluZyxcblx0XHRhbm5vdGF0aW9uU291cmNlczogKFNlcnZpY2VPYmplY3QgfCB1bmRlZmluZWQpW10gPSBbdGhpcy5nZXRFbnRpdHlUeXBlKCldXG5cdCk6IEFubm90YXRpb25UZXJtPGFueT5bXSB7XG5cdFx0bGV0IG91dEFubm90YXRpb25zOiBBbm5vdGF0aW9uVGVybTxhbnk+W10gPSBbXTtcblx0XHRhbm5vdGF0aW9uU291cmNlcy5mb3JFYWNoKGFubm90YXRpb25Tb3VyY2UgPT4ge1xuXHRcdFx0aWYgKGFubm90YXRpb25Tb3VyY2UpIHtcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25UZXJtPGFueT4+ID0gYW5ub3RhdGlvblNvdXJjZT8uYW5ub3RhdGlvbnNbdm9jYWJ1bGFyeU5hbWVdIHx8IHt9O1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRBbm5vdGF0aW9ucyA9IE9iamVjdC5rZXlzKGFubm90YXRpb25zKVxuXHRcdFx0XHRcdFx0LmZpbHRlcihhbm5vdGF0aW9uID0+IGFubm90YXRpb25zW2Fubm90YXRpb25dLnRlcm0gPT09IGFubm90YXRpb25UZXJtKVxuXHRcdFx0XHRcdFx0LnJlZHVjZSgocHJldmlvdXNWYWx1ZTogQW5ub3RhdGlvblRlcm08YW55PltdLCBrZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRwcmV2aW91c1ZhbHVlLnB1c2goYW5ub3RhdGlvbnNba2V5XSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdFx0XHRcdFx0fSwgb3V0QW5ub3RhdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG91dEFubm90YXRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgcmVsYXRpdmUgbW9kZWwgcGF0aCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0IHBhdGguXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBUaGUgcmVsYXRpdmUgbW9kZWwgcGF0aCBvciB1bmRlZmluZWQgaWYgdGhlIHBhdGggaXMgbm90IHJlc29sdmVhYmxlXG5cdCAqL1xuXHRnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKCk6IEZ1bmN0aW9uIHtcblx0XHRjb25zdCB0YXJnZXREYXRhTW9kZWxQYXRoID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoO1xuXHRcdHJldHVybiBmdW5jdGlvbihzUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBlbmhhbmNlZFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aCh0YXJnZXREYXRhTW9kZWxQYXRoLCBzUGF0aCk7XG5cdFx0XHRyZXR1cm4gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChlbmhhbmNlZFBhdGgsIHRydWUpO1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBjb252ZXJ0ZXIgY29udGV4dCBuZWNlc3NhcnkgZm9yIGEgbWFjcm8gYmFzZWQgb24gYSBtZXRhbW9kZWwgY29udGV4dC5cblx0ICogQHBhcmFtIHNFbnRpdHlTZXROYW1lXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsQ29udGV4dFxuXHQgKiBAcGFyYW0gZGlhZ25vc3RpY3Ncblx0ICogQHBhcmFtIG1lcmdlRm5cblx0ICogQHBhcmFtIHRhcmdldERhdGFNb2RlbFBhdGhcblx0ICogQHBhcmFtIG1hbmlmZXN0U2V0dGluZ3Ncblx0ICogQHJldHVybnMge0NvbnZlcnRlckNvbnRleHR9IFRoZSBjdXJyZW50IGNvbnZlcnRlciBjb250ZXh0XG5cdCAqL1xuXHRzdGF0aWMgY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdHNFbnRpdHlTZXROYW1lOiBzdHJpbmcsXG5cdFx0b01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQgfCBPRGF0YU1ldGFNb2RlbCxcblx0XHRkaWFnbm9zdGljczogSURpYWdub3N0aWNzLFxuXHRcdG1lcmdlRm46IEZ1bmN0aW9uLFxuXHRcdHRhcmdldERhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggfCB1bmRlZmluZWQsXG5cdFx0bWFuaWZlc3RTZXR0aW5nczogQmFzZU1hbmlmZXN0U2V0dGluZ3MgPSB7fSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5nc1xuXHQpOiBDb252ZXJ0ZXJDb250ZXh0IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCA9IG9NZXRhTW9kZWxDb250ZXh0LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiKVxuXHRcdFx0PyAob01ldGFNb2RlbENvbnRleHQgYXMgT0RhdGFNZXRhTW9kZWwpXG5cdFx0XHQ6ICgoKG9NZXRhTW9kZWxDb250ZXh0IGFzIENvbnRleHQpLmdldE1vZGVsKCkgYXMgdW5rbm93bikgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9Db252ZXJ0ZXJPdXRwdXQgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbCk7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gb0NvbnZlcnRlck91dHB1dC5lbnRpdHlTZXRzLmZpbmQoZW50aXR5U2V0ID0+IGVudGl0eVNldC5uYW1lID09PSBzRW50aXR5U2V0TmFtZSkgYXMgRW50aXR5U2V0O1xuXHRcdGlmICghdGFyZ2V0RGF0YU1vZGVsUGF0aCkge1xuXHRcdFx0dGFyZ2V0RGF0YU1vZGVsUGF0aCA9IHtcblx0XHRcdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdFx0XHR0YXJnZXRFbnRpdHlTZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0dGFyZ2V0RW50aXR5VHlwZTogdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0XHRcdHRhcmdldE9iamVjdDogdGFyZ2V0RW50aXR5U2V0XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQob0NvbnZlcnRlck91dHB1dCwgbWFuaWZlc3RTZXR0aW5ncywgZGlhZ25vc3RpY3MsIG1lcmdlRm4sIHRhcmdldERhdGFNb2RlbFBhdGgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbnZlcnRlckNvbnRleHQ7XG4iXX0=
500
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnZlcnRlckNvbnRleHQudHMiXSwibmFtZXMiOlsiaXNBbm5vdGF0aW9uVGVybSIsInZBbm5vdGF0aW9uUGF0aCIsImlzU2VydmljZU9iamVjdCIsIm9iamVjdFBhcnQiLCJoYXNPd25Qcm9wZXJ0eSIsImdldERhdGFNb2RlbFBhdGhGb3JFbnRpdHlTZXQiLCJyZXNvbHZlZE1ldGFQYXRoIiwicm9vdEVudGl0eVNldCIsImN1cnJlbnRFbnRpdHlTZXQiLCJwcmV2aW91c0VudGl0eVNldCIsImN1cnJlbnRFbnRpdHlUeXBlIiwibmF2aWdhdGVkUGF0aHMiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm9iamVjdFBhdGgiLCJmb3JFYWNoIiwiX3R5cGUiLCJwdXNoIiwibmFtZSIsInRhcmdldFR5cGUiLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiam9pbiIsInVuZGVmaW5lZCIsImVudGl0eVR5cGUiLCJkYXRhTW9kZWxQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwidGFyZ2V0RW50aXR5U2V0IiwiY29udGV4dExvY2F0aW9uIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0IiwiQ29udmVydGVyQ29udGV4dCIsImNvbnZlcnRlZFR5cGVzIiwibWFuaWZlc3RTZXR0aW5ncyIsImRpYWdub3N0aWNzIiwibWVyZ2VGbiIsInRhcmdldERhdGFNb2RlbFBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJNYW5pZmVzdFdyYXBwZXIiLCJiYXNlQ29udGV4dFBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZW50aXR5VHlwZXMiLCJmaW5kIiwic3RhcnRzV2l0aCIsInJlcGxhY2VBbm5vdGF0aW9uIiwicmVwbGFjZSIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsIl9nZXRFbnRpdHlUeXBlRnJvbUZ1bGx5UXVhbGlmaWVkTmFtZSIsIkVycm9yIiwiZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJzQW5ub3RhdGlvblBhdGgiLCJlbnRpdHlDb250YWluZXIiLCJzaW5nbGV0b25zIiwic2luZ2xldG9uIiwiaW5kZXhPZiIsInJlc29sdmVQYXRoIiwic3RhcnRpbmdFbnRpdHlUeXBlIiwiY29uY2F0IiwiaSIsImN1cnJlbnRPYmplY3QiLCJ2aXNpdGVkT2JqZWN0cyIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiUmVzdWx0Q29udGV4dCIsIm5hdk9iamVjdCIsImxlbmd0aCIsIm5hdlBhdGgiLCJvdXREYXRhTW9kZWxQYXRoIiwiY29udmVydGVyQ29udGV4dCIsImdldFRlbXBsYXRlVHlwZSIsImVudGl0eVR5cGVGUU4iLCJtYXRjaCIsInJlcGxhY2VkQW5ub3RhdGlvblBhdGgiLCJzdWJzdHIiLCJjb250ZXh0UGF0aCIsInRhcmdldFBhdGgiLCJ2b2NhYnVsYXJ5TmFtZSIsImFubm90YXRpb25UZXJtIiwiYW5ub3RhdGlvblNvdXJjZXMiLCJnZXRFbnRpdHlUeXBlIiwib3V0QW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uU291cmNlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsInRlcm0iLCJyZWR1Y2UiLCJwcmV2aW91c1ZhbHVlIiwia2V5Iiwic1BhdGgiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzRW50aXR5U2V0TmFtZSIsIm9NZXRhTW9kZWxDb250ZXh0Iiwib01ldGFNb2RlbCIsImlzQSIsImdldE1vZGVsIiwib0NvbnZlcnRlck91dHB1dCIsImNvbnZlcnRUeXBlcyIsImVudGl0eVNldHMiLCJlbnRpdHlTZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStCQTs7Ozs7O0FBTUEsTUFBTUEsZ0JBQWdCLEdBQUcsVUFBU0MsZUFBVCxFQUFnRztBQUN4SCxXQUFPLE9BQU9BLGVBQVAsS0FBMkIsUUFBbEM7QUFDQSxHQUZEOztBQUlBLFdBQVNDLGVBQVQsQ0FBeUJDLFVBQXpC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QUksQ0FBQzNELG1CQUFMLEVBQTBCO0FBQ3pCQSxVQUFBQSxtQkFBbUIsR0FBRztBQUNyQlgsWUFBQUEsaUJBQWlCLEVBQUVFLGVBREU7QUFFckJkLFlBQUFBLG9CQUFvQixFQUFFLEVBRkQ7QUFHckJjLFlBQUFBLGVBQWUsRUFBRUEsZUFISTtBQUlyQkQsWUFBQUEsZ0JBQWdCLEVBQUVDLGVBQWUsQ0FBQ0osVUFKYjtBQUtyQk0sWUFBQUEsWUFBWSxFQUFFRjtBQUxPLFdBQXRCO0FBT0E7O0FBQ0QsZUFBTyxJQUFJSSxnQkFBSixDQUFxQnFFLGdCQUFyQixFQUF1Q25FLGdCQUF2QyxFQUF5REMsV0FBekQsRUFBc0VDLE9BQXRFLEVBQStFQyxtQkFBL0UsQ0FBUDtBQUNBOzs7Ozs7U0FHYUwsZ0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25UZXJtIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRBbnlBbm5vdGF0aW9uLFxuXHRDb252ZXJ0ZXJPdXRwdXQsXG5cdEVudGl0eVNldCxcblx0RW50aXR5VHlwZSxcblx0RW50aXR5Q29udGFpbmVyLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFNlcnZpY2VPYmplY3QsXG5cdFNpbmdsZXRvbixcblx0UmVzb2x1dGlvblRhcmdldCxcblx0U2VydmljZU9iamVjdEFuZEFubm90YXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBDb250ZXh0LCBPRGF0YU1ldGFNb2RlbCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjRcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgUmVzb2x2ZWRUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQge1xuXHREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdHlwZXMvZ2VuZXJhdGVkL0VkbV9UeXBlc1wiO1xuaW1wb3J0IE1hbmlmZXN0V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFdyYXBwZXJcIjtcblxuZXhwb3J0IHR5cGUgUmVzb2x2ZWRBbm5vdGF0aW9uQ29udGV4dCA9IHtcblx0YW5ub3RhdGlvbjogQW55QW5ub3RhdGlvbjtcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGFuIGFubm90YXRpb24gdGVybS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBbm5vdGF0aW9uVGVybTxvYmplY3Q+fSB2QW5ub3RhdGlvblBhdGhcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBpc0Fubm90YXRpb25UZXJtID0gZnVuY3Rpb24odkFubm90YXRpb25QYXRoOiBzdHJpbmcgfCBBbm5vdGF0aW9uVGVybTxhbnk+KTogdkFubm90YXRpb25QYXRoIGlzIEFubm90YXRpb25UZXJtPGFueT4ge1xuXHRyZXR1cm4gdHlwZW9mIHZBbm5vdGF0aW9uUGF0aCA9PT0gXCJvYmplY3RcIjtcbn07XG5cbmZ1bmN0aW9uIGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbik6IG9iamVjdFBhcnQgaXMgU2VydmljZU9iamVjdCB7XG5cdHJldHVybiBvYmplY3RQYXJ0ICYmIG9iamVjdFBhcnQuaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKTtcbn1cblxuY29uc3QgZ2V0RGF0YU1vZGVsUGF0aEZvckVudGl0eVNldCA9IGZ1bmN0aW9uKHJlc29sdmVkTWV0YVBhdGg6IFJlc29sdXRpb25UYXJnZXQ8YW55Pik6IERhdGFNb2RlbE9iamVjdFBhdGgge1xuXHRsZXQgcm9vdEVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuXHRsZXQgY3VycmVudEVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuXHRsZXQgcHJldmlvdXNFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblx0bGV0IGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkO1xuXHRsZXQgbmF2aWdhdGVkUGF0aHM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSA9IFtdO1xuXHRyZXNvbHZlZE1ldGFQYXRoLm9iamVjdFBhdGguZm9yRWFjaCgob2JqZWN0UGFydDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24pID0+IHtcblx0XHRpZiAoaXNTZXJ2aWNlT2JqZWN0KG9iamVjdFBhcnQpKSB7XG5cdFx0XHRzd2l0Y2ggKG9iamVjdFBhcnQuX3R5cGUpIHtcblx0XHRcdFx0Y2FzZSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiOlxuXHRcdFx0XHRcdG5hdmlnYXRlZFBhdGhzLnB1c2gob2JqZWN0UGFydC5uYW1lKTtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKG9iamVjdFBhcnQpO1xuXHRcdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gb2JqZWN0UGFydC50YXJnZXRUeXBlO1xuXHRcdFx0XHRcdGlmIChwcmV2aW91c0VudGl0eVNldCAmJiBwcmV2aW91c0VudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLmhhc093blByb3BlcnR5KG5hdmlnYXRlZFBhdGhzLmpvaW4oXCIvXCIpKSkge1xuXHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IHByZXZpb3VzRW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIildO1xuXHRcdFx0XHRcdFx0cHJldmlvdXNFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0O1xuXHRcdFx0XHRcdFx0bmF2aWdhdGVkUGF0aHMgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJFbnRpdHlTZXRcIjpcblx0XHRcdFx0XHRpZiAocm9vdEVudGl0eVNldCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRyb290RW50aXR5U2V0ID0gb2JqZWN0UGFydDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0cHJldmlvdXNFbnRpdHlTZXQgPSBjdXJyZW50RW50aXR5U2V0O1xuXHRcdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudEVudGl0eVNldD8uZW50aXR5VHlwZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoID0ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiByb290RW50aXR5U2V0IGFzIEVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBjdXJyZW50RW50aXR5VHlwZSBhcyBFbnRpdHlUeXBlLFxuXHRcdHRhcmdldEVudGl0eVNldDogY3VycmVudEVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogbmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0Y29udGV4dExvY2F0aW9uOiB1bmRlZmluZWQsXG5cdFx0dGFyZ2V0T2JqZWN0OiByZXNvbHZlZE1ldGFQYXRoLnRhcmdldFxuXHR9O1xuXHRkYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbiA9IGRhdGFNb2RlbFBhdGg7XG5cdHJldHVybiBkYXRhTW9kZWxQYXRoO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBDb252ZXJ0ZXJDb250ZXh0IG9iamVjdCB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIGNvbnZlcnRlcnMuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJPdXRwdXR9IG9Db252ZXJ0ZWRUeXBlcyBUaGUgY29udmVydGVkIGFubm90YXRpb24gYW5kIHNlcnZpY2UgdHlwZXNcbiAqIEBwYXJhbSB7QmFzZU1hbmlmZXN0U2V0dGluZ3N9IG9NYW5pZmVzdFNldHRpbmdzIFRoZSBtYW5pZmVzdFNldHRpbmdzIHRoYXQgYXBwbGllcyB0byB0aGlzIHBhZ2VcbiAqIEBwYXJhbSB7VGVtcGxhdGVUeXBlfSB0ZW1wbGF0ZVR5cGUgVGhlIHR5cGUgb2YgdGVtcGxhdGUgd2UncmUgbG9va2luZyBhdCByaWdodCBub3dcbiAqIEBwYXJhbSB7SVNoZWxsU2VydmljZXNQcm94eX0gc2hlbGxTZXJ2aWNlcyBUaGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgc2hlbGxzZXJ2aWNlXG4gKiBAcGFyYW0ge0lEaWFnbm9zdGljc30gZGlhZ25vc3RpY3MgVGhlIGRpYWdub3N0aWNzIHNoaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRm4gVGhlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gcGVyZm9tIHNvbWUgZGVlcCBtZXJnZXMgYmV0d2VlbiBvYmplY3RcbiAqIEBwYXJhbSB7RGF0YU1vZGVsT2JqZWN0UGF0aH0gdGFyZ2V0RGF0YU1vZGVsUGF0aCBUaGUgZ2xvYmFsIHBhdGggdG8gcmVhY2ggdGhlIGVudGl0eVNldFxuICpcbiAqIEByZXR1cm5zIHtDb252ZXJ0ZXJDb250ZXh0fSBBIGNvbnZlcnRlciBjb250ZXh0IGZvciB0aGUgY29udmVydGVyc1xuICovXG5jbGFzcyBDb252ZXJ0ZXJDb250ZXh0IHtcblx0cHJpdmF0ZSBtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlcjtcblx0cHJpdmF0ZSBiYXNlQ29udGV4dFBhdGg6IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZXJPdXRwdXQsXG5cdFx0cHJpdmF0ZSBtYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0XHRwcml2YXRlIGRpYWdub3N0aWNzOiBJRGlhZ25vc3RpY3MsXG5cdFx0cHJpdmF0ZSBtZXJnZUZuOiBGdW5jdGlvbixcblx0XHRwcml2YXRlIHRhcmdldERhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcblx0KSB7XG5cdFx0dGhpcy5tYW5pZmVzdFdyYXBwZXIgPSBuZXcgTWFuaWZlc3RXcmFwcGVyKHRoaXMubWFuaWZlc3RTZXR0aW5ncywgbWVyZ2VGbik7XG5cdFx0dGhpcy5iYXNlQ29udGV4dFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gZnVsbHlRdWFsaWZpZWROYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZVxuXHQgKiBAcmV0dXJucyB7UHJvcGVydHl9IFRoZSBwcm9wZXJ0eSBFbnRpdHlUeXBlIGJhc2VkXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRFbnRpdHlUeXBlRnJvbUZ1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSB0aGlzLmNvbnZlcnRlZFR5cGVzLmVudGl0eVR5cGVzLmZpbmQoZW50aXR5VHlwZSA9PiB7XG5cdFx0XHRpZiAoZnVsbHlRdWFsaWZpZWROYW1lLnN0YXJ0c1dpdGgoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IHJlcGxhY2VBbm5vdGF0aW9uID0gZnVsbHlRdWFsaWZpZWROYW1lLnJlcGxhY2UoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpO1xuXHRcdFx0XHRyZXR1cm4gcmVwbGFjZUFubm90YXRpb24uc3RhcnRzV2l0aChcIi9cIikgfHwgcmVwbGFjZUFubm90YXRpb24uc3RhcnRzV2l0aChcIkBcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRhcmdldEVudGl0eVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGVudGl0eVR5cGUgYXNzb2NpYXRlZCB3aXRoIGFuIGFubm90YXRpb24gb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbiBUaGUgYW5ub3RhdGlvbiBvYmplY3QgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgZW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyB7RW50aXR5VHlwZX0gVGhlIEVudGl0eVR5cGUgdGhlIGFubm90YXRpb24gcmVmZXJzIHRvXG5cdCAqL1xuXHRnZXRBbm5vdGF0aW9uRW50aXR5VHlwZShhbm5vdGF0aW9uPzogQW5ub3RhdGlvblRlcm08YW55Pik6IEVudGl0eVR5cGUge1xuXHRcdGlmIChhbm5vdGF0aW9uKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IHRoaXMuX2dldEVudGl0eVR5cGVGcm9tRnVsbHlRdWFsaWZpZWROYW1lKGFubm90YXRpb25QYXRoKTtcblx0XHRcdGlmICghdGFyZ2V0RW50aXR5VHlwZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBFbnRpdHkgVHlwZSBmb3IgXCIgKyBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFyZ2V0RW50aXR5VHlwZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgbWFuaWZlc3Qgc2V0dGluZ3MgZGVmaW5lZCBmb3IgYSBzcGVjaWZpYyBjb250cm9sIHdpdGhpbiBjb250cm9sQ29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHZBbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoIG9yIG9iamVjdCB0byBldmFsdWF0ZVxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciB0aGF0IHNwZWNpZmljIGFubnRvYXRpb24gcGF0aCBpZiBpdCBleGlzdHNcblx0ICovXG5cdGdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odkFubm90YXRpb25QYXRoOiBzdHJpbmcgfCBBbm5vdGF0aW9uVGVybTxhbnk+KTogYW55IHtcblx0XHRpZiAoaXNBbm5vdGF0aW9uVGVybSh2QW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdFdyYXBwZXIuZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdHZBbm5vdGF0aW9uUGF0aC5mdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZSh0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdFdyYXBwZXIuZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24odkFubm90YXRpb25QYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYW4gYWJzb2x1dGUgYW5ub3RhdGlvbiBwYXRoIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1ldGEgbW9kZWwgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIHNBbm5vdGF0aW9uUGF0aCBUaGUgcmVsYXRpdmUgYW5ub3RhdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IGFubm90YXRpb24gcGF0aCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0XG5cdCAqL1xuXHRnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIHNBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0aWYgKHNBbm5vdGF0aW9uUGF0aFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdHJldHVybiBzQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmJhc2VDb250ZXh0UGF0aCArIFwiL1wiICsgc0Fubm90YXRpb25QYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjdXJyZW50IGVudGl0eVNldC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgRW50aXR5U2V0IGlmIGl0IGV4aXN0cy5cblx0ICovXG5cdGdldEVudGl0eVNldCgpOiBFbnRpdHlTZXQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjb250ZXh0IHBhdGguXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHBhdGggb2YgdGhlIGNvbnZlcnRlci5cblx0ICovXG5cdGdldENvbnRleHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuYmFzZUNvbnRleHRQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjdXJyZW50IGRhdGEgbW9kZWwgb2JqZWN0IHBhdGguXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGRhdGEgbW9kZWwgb2JqZWN0IHBhdGhcblx0ICovXG5cdGdldERhdGFNb2RlbE9iamVjdFBhdGgoKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdFx0cmV0dXJuIHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEVudGl0eUNvbnRhaW5lci5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgc2VydmljZSBFbnRpdHlDb250YWluZXJcblx0ICovXG5cdGdldEVudGl0eUNvbnRhaW5lcigpOiBFbnRpdHlDb250YWluZXIge1xuXHRcdHJldHVybiB0aGlzLmNvbnZlcnRlZFR5cGVzLmVudGl0eUNvbnRhaW5lcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEVudGl0eVR5cGUgYmFzZWQgb24gdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBFbnRpdHlUeXBlLlxuXHQgKi9cblx0Z2V0RW50aXR5VHlwZSgpOiBFbnRpdHlUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgc2luZ2xldG9uIGJhc2VkIG9uIGZ1bGx5IHF1YWxpZmllZCBuYW1lLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZnVsbHlRdWFsaWZpZWROYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2luZ2xldG9uXG5cdCAqIEByZXR1cm5zIHtTaW5nbGV0b24gfCB1bmRlZmluZWR9IFRoZSBzaW5nbGV0b24gaW5zdGFuY2UuXG5cdCAqL1xuXHRnZXRTaW5nbGV0b24oZnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcpOiBTaW5nbGV0b24gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmNvbnZlcnRlZFR5cGVzLnNpbmdsZXRvbnMuZmluZChzaW5nbGV0b24gPT4gc2luZ2xldG9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhbiBhbm5vdGF0aW9uIGZyb20gYW4gRW50aXR5VHlwZSBiYXNlZCBvbiBhbiBhbm5vdGF0aW9uIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoIHRvIGV2YWx1YXRlXG5cdCAqIEByZXR1cm5zIFRoZSB0YXJnZXQgYW5ub3RhdGlvbiBwYXRoIGFzIHdlbGwgYXMgYSBjb252ZXJ0ZXIgY29udGV4dCB0byBnbyB3aXRoIGl0XG5cdCAqL1xuXHRnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihhbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogUmVzb2x2ZWRBbm5vdGF0aW9uQ29udGV4dCB7XG5cdFx0aWYgKGFubm90YXRpb25QYXRoLmluZGV4T2YoXCJAXCIpID09PSAtMSkge1xuXHRcdFx0YW5ub3RhdGlvblBhdGggPSBcIkBcIiArIGFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRjb25zdCB0YXJnZXRPYmplY3Q6IFJlc29sdmVkVGFyZ2V0ID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgoYW5ub3RhdGlvblBhdGgsIHRydWUpO1xuXG5cdFx0bGV0IHJvb3RFbnRpdHlTZXQgPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0O1xuXHRcdGxldCBjdXJyZW50RW50aXR5VHlwZSA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdGNvbnN0IHN0YXJ0aW5nRW50aXR5VHlwZSA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmNvbmNhdCgpO1xuXHRcdGxldCBpID0gMTtcblx0XHRsZXQgY3VycmVudE9iamVjdDtcblx0XHRsZXQgbmF2aWdhdGVkUGF0aHMgPSBbXTtcblx0XHRjb25zdCB2aXNpdGVkT2JqZWN0cyA9IHRhcmdldE9iamVjdC52aXNpdGVkT2JqZWN0cztcblx0XHQvLyBJbiBjYXNlIG9mIHBhcmFtZXRlcml6ZWQgc2VydmljZVxuXHRcdGlmICghcm9vdEVudGl0eVNldCAmJiBzdGFydGluZ0VudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5SZXN1bHRDb250ZXh0KSB7XG5cdFx0XHRyb290RW50aXR5U2V0ID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0O1xuXHRcdFx0dGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24obmF2T2JqZWN0KSB7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGhzLnB1c2gobmF2T2JqZWN0Lm5hbWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHdoaWxlIChpIDwgdmlzaXRlZE9iamVjdHMubGVuZ3RoKSB7XG5cdFx0XHRjdXJyZW50T2JqZWN0ID0gdmlzaXRlZE9iamVjdHNbaSsrXTtcblx0XHRcdGlmIChjdXJyZW50T2JqZWN0Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGhzLnB1c2goY3VycmVudE9iamVjdC5uYW1lKTtcblx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChjdXJyZW50T2JqZWN0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSk7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gKGN1cnJlbnRPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlO1xuXHRcdFx0XHRpZiAocm9vdEVudGl0eVNldCAmJiByb290RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkobmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIikpKSB7XG5cdFx0XHRcdFx0Y29uc3QgbmF2UGF0aCA9IG5hdmlnYXRlZFBhdGhzLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPVxuXHRcdFx0XHRcdFx0cm9vdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW2N1cnJlbnRPYmplY3QubmFtZV0gfHwgcm9vdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdlBhdGhdO1xuXHRcdFx0XHRcdG5hdmlnYXRlZFBhdGhzID0gW107XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cm9vdEVudGl0eVNldCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRPYmplY3QuX3R5cGUgPT09IFwiRW50aXR5U2V0XCIpIHtcblx0XHRcdFx0cm9vdEVudGl0eVNldCA9IGN1cnJlbnRPYmplY3QgYXMgRW50aXR5U2V0O1xuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IHJvb3RFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgb3V0RGF0YU1vZGVsUGF0aCA9IHtcblx0XHRcdHN0YXJ0aW5nRW50aXR5U2V0OiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQsXG5cdFx0XHR0YXJnZXRFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQsXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlOiBjdXJyZW50RW50aXR5VHlwZSxcblx0XHRcdHRhcmdldE9iamVjdDogbmF2aWdhdGlvblByb3BlcnRpZXNbbmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoIC0gMV0sXG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRcdGNvbnRleHRMb2NhdGlvbjogdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvblxuXHRcdH07XG5cdFx0cmV0dXJuIHtcblx0XHRcdGFubm90YXRpb246IHRhcmdldE9iamVjdC50YXJnZXQgYXMgQW55QW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG5ldyBDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHR0aGlzLmNvbnZlcnRlZFR5cGVzLFxuXHRcdFx0XHR0aGlzLm1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0XHRcdHRoaXMuZGlhZ25vc3RpY3MsXG5cdFx0XHRcdHRoaXMubWVyZ2VGbixcblx0XHRcdFx0b3V0RGF0YU1vZGVsUGF0aFxuXHRcdFx0KVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHR5cGUgb2YgdGVtcGxhdGUgd2UncmUgd29ya2luZyBvbiAoZS5nLiBMaXN0UmVwb3J0IC8gT2JqZWN0UGFnZSAvIC4uLikuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHRlbnBsYXRlIHR5cGVcblx0ICovXG5cdGdldFRlbXBsYXRlVHlwZSgpOiBUZW1wbGF0ZVR5cGUge1xuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhIHJlbGF0aXZlIGFubm90YXRpb24gcGF0aCBiZXR3ZWVuIGFuIGFubm90YXRpb24gcGF0aCBhbmQgYW4gZW50aXR5IHR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgYW5udG90YXRpb24gcGF0aC5cblx0ICovXG5cdGdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvblBhdGg6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGFubm90YXRpb25QYXRoLnJlcGxhY2UoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybSBhbiBlbnRpdHlUeXBlIGJhc2VkIHBhdGggdG8gYW4gZW50aXR5U2V0IGJhc2VkIG9uZSAodWk1IHRlbXBsYXRpbmcgZ2VuZXJhbGx5IGV4cGVjdCBhbiBlbnRpdHlTZXRCYXNlZFBhdGgpLlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcblx0ICogQHJldHVybnMgVGhlIEVudGl0eVNldCBiYXNlZCBhbm5vdGF0aW9uIHBhdGhcblx0ICovXG5cdGdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKCFhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRjb25zdCBlbnRpdHlUeXBlRlFOID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdGlmIChcblx0XHRcdHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgfHxcblx0XHRcdCgodGhpcy5iYXNlQ29udGV4dFBhdGguc3RhcnRzV2l0aChcIi9cIikgJiYgdGhpcy5iYXNlQ29udGV4dFBhdGgubWF0Y2goL1xcLy9nKSkgfHwgW10pLmxlbmd0aCA+IDFcblx0XHQpIHtcblx0XHRcdGxldCByZXBsYWNlZEFubm90YXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGgucmVwbGFjZShlbnRpdHlUeXBlRlFOLCBcIi9cIik7XG5cdFx0XHRpZiAocmVwbGFjZWRBbm5vdGF0aW9uUGF0aC5sZW5ndGggPiAyICYmIHJlcGxhY2VkQW5ub3RhdGlvblBhdGhbMF0gPT09IFwiL1wiICYmIHJlcGxhY2VkQW5ub3RhdGlvblBhdGhbMV0gPT09IFwiL1wiKSB7XG5cdFx0XHRcdHJlcGxhY2VkQW5ub3RhdGlvblBhdGggPSByZXBsYWNlZEFubm90YXRpb25QYXRoLnN1YnN0cigxKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmJhc2VDb250ZXh0UGF0aCArIHJlcGxhY2VkQW5ub3RhdGlvblBhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIi9cIiArIGFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgbWFuaWZlc3Qgd3JhcHBlciBmb3IgdGhlIGN1cnJlbnQgY29udGV4dC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgbWFuaWZlc3Qgd3JhcHBlclxuXHQgKi9cblx0Z2V0TWFuaWZlc3RXcmFwcGVyKCk6IE1hbmlmZXN0V3JhcHBlciB7XG5cdFx0cmV0dXJuIHRoaXMubWFuaWZlc3RXcmFwcGVyO1xuXHR9XG5cblx0Z2V0RGlhZ25vc3RpY3MoKTogSURpYWdub3N0aWNzIHtcblx0XHRyZXR1cm4gdGhpcy5kaWFnbm9zdGljcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhIG5ldyBjb252ZXJ0ZXIgY29udGV4dCwgc2NvcGVkIGZvciBhIGRpZmZlcmVudCBjb250ZXh0IHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0UGF0aCBUaGUgcGF0aCB3ZSB3YW50IHRvIG9yY2hlc3RyYXRlIHRoZSBjb252ZXJ0ZXIgY29udGV4dCBhcm91bmRcblx0ICogQHJldHVybnMge0NvbnZlcnRlckNvbnRleHR9XG5cdCAqL1xuXHRnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFQ+KGNvbnRleHRQYXRoOiBzdHJpbmcpOiBDb252ZXJ0ZXJDb250ZXh0IHtcblx0XHRjb25zdCByZXNvbHZlZE1ldGFQYXRoOiBSZXNvbHV0aW9uVGFyZ2V0PFQ+ID0gdGhpcy5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aChjb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgdGFyZ2V0UGF0aCA9IGdldERhdGFNb2RlbFBhdGhGb3JFbnRpdHlTZXQocmVzb2x2ZWRNZXRhUGF0aCk7XG5cdFx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0KHRoaXMuY29udmVydGVkVHlwZXMsIHRoaXMubWFuaWZlc3RTZXR0aW5ncywgdGhpcy5kaWFnbm9zdGljcywgdGhpcy5tZXJnZUZuLCB0YXJnZXRQYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIGFubm90YXRpb25zIG9mIGEgZ2l2ZW4gdGVybSBhbmQgdm9jYWJ1bGFyeSBvbiBhbiBlbnRpdHkgdHlwZVxuXHQgKiAob3Igb24gdGhlIGN1cnJlbnQgZW50aXR5IHR5cGUgaWYgZW50aXR5VHlwZSBpc24ndCBzcGVjaWZpZWQpLlxuXHQgKlxuXHQgKiBAcGFyYW0gdm9jYWJ1bGFyeU5hbWVcblx0ICogQHBhcmFtIGFubm90YXRpb25UZXJtXG5cdCAqIEBwYXJhbSBbYW5ub3RhdGlvblNvdXJjZXNdXG5cdCAqIEByZXR1cm5zIEFsbCB0aGUgYW5ub3RhdGlvbiBmb3IgYSBzcGVjaWZpYyB0ZXJtIGFuZCB2b2NhYnVsYXJ5IGZyb20gYW4gZW50aXR5IHR5cGVcblx0ICovXG5cdGdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdHZvY2FidWxhcnlOYW1lOiBrZXlvZiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMsXG5cdFx0YW5ub3RhdGlvblRlcm06IHN0cmluZyxcblx0XHRhbm5vdGF0aW9uU291cmNlczogKFNlcnZpY2VPYmplY3QgfCB1bmRlZmluZWQpW10gPSBbdGhpcy5nZXRFbnRpdHlUeXBlKCldXG5cdCk6IEFubm90YXRpb25UZXJtPGFueT5bXSB7XG5cdFx0bGV0IG91dEFubm90YXRpb25zOiBBbm5vdGF0aW9uVGVybTxhbnk+W10gPSBbXTtcblx0XHRhbm5vdGF0aW9uU291cmNlcy5mb3JFYWNoKGFubm90YXRpb25Tb3VyY2UgPT4ge1xuXHRcdFx0aWYgKGFubm90YXRpb25Tb3VyY2UpIHtcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25UZXJtPGFueT4+ID0gYW5ub3RhdGlvblNvdXJjZT8uYW5ub3RhdGlvbnNbdm9jYWJ1bGFyeU5hbWVdIHx8IHt9O1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRBbm5vdGF0aW9ucyA9IE9iamVjdC5rZXlzKGFubm90YXRpb25zKVxuXHRcdFx0XHRcdFx0LmZpbHRlcihhbm5vdGF0aW9uID0+IGFubm90YXRpb25zW2Fubm90YXRpb25dLnRlcm0gPT09IGFubm90YXRpb25UZXJtKVxuXHRcdFx0XHRcdFx0LnJlZHVjZSgocHJldmlvdXNWYWx1ZTogQW5ub3RhdGlvblRlcm08YW55PltdLCBrZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRwcmV2aW91c1ZhbHVlLnB1c2goYW5ub3RhdGlvbnNba2V5XSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdFx0XHRcdFx0fSwgb3V0QW5ub3RhdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG91dEFubm90YXRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgcmVsYXRpdmUgbW9kZWwgcGF0aCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0IHBhdGguXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBUaGUgcmVsYXRpdmUgbW9kZWwgcGF0aCBvciB1bmRlZmluZWQgaWYgdGhlIHBhdGggaXMgbm90IHJlc29sdmVhYmxlXG5cdCAqL1xuXHRnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKCk6IEZ1bmN0aW9uIHtcblx0XHRjb25zdCB0YXJnZXREYXRhTW9kZWxQYXRoID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoO1xuXHRcdHJldHVybiBmdW5jdGlvbihzUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBlbmhhbmNlZFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aCh0YXJnZXREYXRhTW9kZWxQYXRoLCBzUGF0aCk7XG5cdFx0XHRyZXR1cm4gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChlbmhhbmNlZFBhdGgsIHRydWUpO1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBjb252ZXJ0ZXIgY29udGV4dCBuZWNlc3NhcnkgZm9yIGEgbWFjcm8gYmFzZWQgb24gYSBtZXRhbW9kZWwgY29udGV4dC5cblx0ICogQHBhcmFtIHNFbnRpdHlTZXROYW1lXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsQ29udGV4dFxuXHQgKiBAcGFyYW0gZGlhZ25vc3RpY3Ncblx0ICogQHBhcmFtIG1lcmdlRm5cblx0ICogQHBhcmFtIHRhcmdldERhdGFNb2RlbFBhdGhcblx0ICogQHBhcmFtIG1hbmlmZXN0U2V0dGluZ3Ncblx0ICogQHJldHVybnMge0NvbnZlcnRlckNvbnRleHR9IFRoZSBjdXJyZW50IGNvbnZlcnRlciBjb250ZXh0XG5cdCAqL1xuXHRzdGF0aWMgY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdHNFbnRpdHlTZXROYW1lOiBzdHJpbmcsXG5cdFx0b01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQgfCBPRGF0YU1ldGFNb2RlbCxcblx0XHRkaWFnbm9zdGljczogSURpYWdub3N0aWNzLFxuXHRcdG1lcmdlRm46IEZ1bmN0aW9uLFxuXHRcdHRhcmdldERhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggfCB1bmRlZmluZWQsXG5cdFx0bWFuaWZlc3RTZXR0aW5nczogQmFzZU1hbmlmZXN0U2V0dGluZ3MgPSB7fSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5nc1xuXHQpOiBDb252ZXJ0ZXJDb250ZXh0IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCA9IG9NZXRhTW9kZWxDb250ZXh0LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiKVxuXHRcdFx0PyAob01ldGFNb2RlbENvbnRleHQgYXMgT0RhdGFNZXRhTW9kZWwpXG5cdFx0XHQ6ICgoKG9NZXRhTW9kZWxDb250ZXh0IGFzIENvbnRleHQpLmdldE1vZGVsKCkgYXMgdW5rbm93bikgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9Db252ZXJ0ZXJPdXRwdXQgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbCk7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gb0NvbnZlcnRlck91dHB1dC5lbnRpdHlTZXRzLmZpbmQoZW50aXR5U2V0ID0+IGVudGl0eVNldC5uYW1lID09PSBzRW50aXR5U2V0TmFtZSkgYXMgRW50aXR5U2V0O1xuXHRcdGlmICghdGFyZ2V0RGF0YU1vZGVsUGF0aCkge1xuXHRcdFx0dGFyZ2V0RGF0YU1vZGVsUGF0aCA9IHtcblx0XHRcdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdFx0XHR0YXJnZXRFbnRpdHlTZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0dGFyZ2V0RW50aXR5VHlwZTogdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0XHRcdHRhcmdldE9iamVjdDogdGFyZ2V0RW50aXR5U2V0XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQob0NvbnZlcnRlck91dHB1dCwgbWFuaWZlc3RTZXR0aW5ncywgZGlhZ25vc3RpY3MsIG1lcmdlRm4sIHRhcmdldERhdGFNb2RlbFBhdGgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbnZlcnRlckNvbnRleHQ7XG4iXX0=
@@ -7,6 +7,7 @@ import {
7
7
  EntityContainer,
8
8
  NavigationProperty,
9
9
  ServiceObject,
10
+ Singleton,
10
11
  ResolutionTarget,
11
12
  ServiceObjectAndAnnotation
12
13
  } from "@sap-ux/annotation-converter";
@@ -229,6 +230,16 @@ class ConverterContext {
229
230
  return this.targetDataModelPath.targetEntityType;
230
231
  }
231
232
 
233
+ /**
234
+ * Get a singleton based on fully qualified name.
235
+ *
236
+ * @param {string} fullyQualifiedName The fully qualified name of the singleton
237
+ * @returns {Singleton | undefined} The singleton instance.
238
+ */
239
+ getSingleton(fullyQualifiedName: string): Singleton | undefined {
240
+ return this.convertedTypes.singletons.find(singleton => singleton.fullyQualifiedName === fullyQualifiedName);
241
+ }
242
+
232
243
  /**
233
244
  * Retrieve an annotation from an EntityType based on an annotation path.
234
245
  *
@@ -87,4 +87,4 @@ sap.ui.define([], function () {
87
87
  _exports.SelectionMode = SelectionMode;
88
88
  return _exports;
89
89
  }, false);
90
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbmlmZXN0U2V0dGluZ3MudHMiXSwibmFtZXMiOlsiVGVtcGxhdGVUeXBlIiwiQWN0aW9uVHlwZSIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ3JlYXRpb25Nb2RlIiwiQXZhaWxhYmlsaXR5VHlwZSIsIkhvcml6b250YWxBbGlnbiIsIlNlbGVjdGlvbk1vZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztNQUtZQSxZOzthQUFBQSxZO0FBQUFBLElBQUFBLFk7QUFBQUEsSUFBQUEsWTtBQUFBQSxJQUFBQSxZO0tBQUFBLFksS0FBQUEsWTs7O01BTUFDLFU7O2FBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0FBQUFBLElBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0FBQUFBLElBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0FBQUFBLElBQUFBLFU7S0FBQUEsVSxLQUFBQSxVOzs7TUFnQkFDLGlCOzthQUFBQSxpQjtBQUFBQSxJQUFBQSxpQjtBQUFBQSxJQUFBQSxpQjtLQUFBQSxpQixLQUFBQSxpQjs7O01BS0FDLHFCOzthQUFBQSxxQjtBQUFBQSxJQUFBQSxxQjtBQUFBQSxJQUFBQSxxQjtBQUFBQSxJQUFBQSxxQjtLQUFBQSxxQixLQUFBQSxxQjs7O01BV0FDLFk7O2FBQUFBLFk7QUFBQUEsSUFBQUEsWTtBQUFBQSxJQUFBQSxZO0FBQUFBLElBQUFBLFk7S0FBQUEsWSxLQUFBQSxZOzs7TUFNQUMsZ0I7O2FBQUFBLGdCO0FBQUFBLElBQUFBLGdCO0FBQUFBLElBQUFBLGdCO0FBQUFBLElBQUFBLGdCO0tBQUFBLGdCLEtBQUFBLGdCOzs7TUFNQUMsZTs7YUFBQUEsZTtBQUFBQSxJQUFBQSxlO0FBQUFBLElBQUFBLGU7QUFBQUEsSUFBQUEsZTtLQUFBQSxlLEtBQUFBLGU7OztNQXFUQUMsYTs7YUFBQUEsYTtBQUFBQSxJQUFBQSxhO0FBQUFBLElBQUFBLGE7QUFBQUEsSUFBQUEsYTtBQUFBQSxJQUFBQSxhO0tBQUFBLGEsS0FBQUEsYSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJhYmxlUmVjb3JkLCBQb3NpdGlvbiwgUG9zaXRpb25hYmxlIH0gZnJvbSBcIi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IEZsZXhTZXR0aW5ncywgSGVhZGVyRmFjZXRUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgQmluZGluZ0V4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgVGFibGVUeXBlIH0gZnJvbSBcIi4vY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5cbmV4cG9ydCBlbnVtIFRlbXBsYXRlVHlwZSB7XG5cdExpc3RSZXBvcnQgPSBcIkxpc3RSZXBvcnRcIixcblx0T2JqZWN0UGFnZSA9IFwiT2JqZWN0UGFnZVwiLFxuXHRBbmFseXRpY2FsTGlzdFBhZ2UgPSBcIkFuYWx5dGljYWxMaXN0UGFnZVwiXG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvblR5cGUge1xuXHREYXRhRmllbGRGb3JBY3Rpb24gPSBcIkZvckFjdGlvblwiLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gPSBcIkZvck5hdmlnYXRpb25cIixcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRQcmltYXJ5ID0gXCJQcmltYXJ5XCIsXG5cdFNlY29uZGFyeSA9IFwiU2Vjb25kYXJ5XCIsXG5cdFN3aXRjaFRvQWN0aXZlT2JqZWN0ID0gXCJTd2l0Y2hUb0FjdGl2ZU9iamVjdFwiLFxuXHRTd2l0Y2hUb0RyYWZ0T2JqZWN0ID0gXCJTd2l0Y2hUb0RyYWZ0T2JqZWN0XCIsXG5cdERlZmF1bHRBcHBseSA9IFwiRGVmYXVsdEFwcGx5XCIsXG5cdE1lbnUgPSBcIk1lbnVcIlxufVxuXG5leHBvcnQgdHlwZSBNYW5pZmVzdFNpZGVDb250ZW50ID0ge1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGVudW0gVmlzdWFsaXphdGlvblR5cGUge1xuXHRUYWJsZSA9IFwiVGFibGVcIixcblx0Q2hhcnQgPSBcIkNoYXJ0XCJcbn1cblxuZXhwb3J0IGVudW0gVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0UGFnZSA9IFwiUGFnZVwiLFxuXHRDb250cm9sID0gXCJDb250cm9sXCIsXG5cdE5vbmUgPSBcIk5vbmVcIlxufVxuXG5leHBvcnQgdHlwZSBDb250ZW50RGVuc2l0aWVzVHlwZSA9IHtcblx0Y29tcGFjdD86IGJvb2xlYW47XG5cdGNvenk/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGVudW0gQ3JlYXRpb25Nb2RlIHtcblx0TmV3UGFnZSA9IFwiTmV3UGFnZVwiLFxuXHRJbmxpbmUgPSBcIklubGluZVwiLFxuXHRDcmVhdGlvblJvdyA9IFwiQ3JlYXRpb25Sb3dcIlxufVxuXG5leHBvcnQgZW51bSBBdmFpbGFiaWxpdHlUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRBZGFwdGF0aW9uID0gXCJBZGFwdGF0aW9uXCIsXG5cdEhpZGRlbiA9IFwiSGlkZGVuXCJcbn1cblxuZXhwb3J0IGVudW0gSG9yaXpvbnRhbEFsaWduIHtcblx0RW5kID0gXCJFbmRcIixcblx0QmVnaW4gPSBcIkJlZ2luXCIsXG5cdENlbnRlciA9IFwiQ2VudGVyXCJcbn1cblxuZXhwb3J0IHR5cGUgVGFibGVDb2x1bW5TZXR0aW5ncyA9IHtcblx0bWljcm9DaGFydFNpemU/OiBzdHJpbmc7XG5cdHNob3dNaWNyb0NoYXJ0TGFiZWw/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIGZvciBtdWx0aWxpbmUgdGV4dCBmaWVsZHMgb24gYSBmb3JtIG9yIGluIGEgdGFibGVcbiAqL1xuZXhwb3J0IHR5cGUgRm9ybWF0T3B0aW9uc1R5cGUgPSB7XG5cdHRleHRMaW5lc0Rpc3BsYXk6IG51bWJlcjtcblx0dGV4dExpbmVzRWRpdDogbnVtYmVyO1xuXHR0ZXh0TWF4TGluZXM6IG51bWJlcjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgQmFzZU1hbmlmZXN0U2V0dGluZ3NcbiAqL1xuZXhwb3J0IHR5cGUgQmFzZU1hbmlmZXN0U2V0dGluZ3MgPSB7XG5cdGNvbnRlbnQ/OiB7XG5cdFx0aGVhZGVyPzoge1xuXHRcdFx0ZmFjZXRzPzogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+O1xuXHRcdFx0YWN0aW9ucz86IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj47XG5cdFx0fTtcblx0XHRmb290ZXI/OiB7XG5cdFx0XHRhY3Rpb25zPzogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPjtcblx0XHR9O1xuXHR9O1xuXHRjb250cm9sQ29uZmlndXJhdGlvbj86IHtcblx0XHRbYW5ub3RhdGlvblBhdGg6IHN0cmluZ106IENvbnRyb2xNYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdH0gJiB7XG5cdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIj86IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uO1xuXHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0c1wiPzogRmFjZXRzQ29udHJvbENvbmZpZ3VyYXRpb247XG5cdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVyRmFjZXRzXCI/OiBIZWFkZXJGYWNldHNDb250cm9sQ29uZmlndXJhdGlvbjtcblx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIj86IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0fTtcblx0Y29udmVydGVyVHlwZTogVGVtcGxhdGVUeXBlO1xuXHRlbnRpdHlTZXQ6IHN0cmluZztcblx0bmF2aWdhdGlvbj86IHtcblx0XHRbbmF2aWdhdGlvblBhdGg6IHN0cmluZ106IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb247XG5cdH07XG5cdHZpZXdMZXZlbD86IG51bWJlcjtcblx0ZmNsRW5hYmxlZD86IGJvb2xlYW47XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudD86IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0ZGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGNvbnRlbnREZW5zaXRpZXM/OiBDb250ZW50RGVuc2l0aWVzVHlwZTtcblx0c2hlbGxDb250ZW50RGVuc2l0eT86IHN0cmluZztcblx0aXNEZXNrdG9wPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uID0ge1xuXHRvdXRib3VuZD86IHN0cmluZztcblx0b3V0Ym91bmREZXRhaWw/OiB7XG5cdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRwYXJhbWV0ZXJzPzogYW55O1xuXHR9O1xuXHRyb3V0ZT86IHN0cmluZztcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGU/OiBOYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbjtcblx0ZGV0YWlsPzogTmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb247XG5cdGRpc3BsYXk/OiB7XG5cdFx0b3V0Ym91bmQ/OiBzdHJpbmc7XG5cdFx0dGFyZ2V0Pzogc3RyaW5nOyAvLyBmb3IgY29tcGF0aWJpbGl0eVxuXHRcdHJvdXRlPzogc3RyaW5nO1xuXHR9O1xufTtcblxudHlwZSBIZWFkZXJGYWNldHNDb250cm9sQ29uZmlndXJhdGlvbiA9IHtcblx0ZmFjZXRzOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RIZWFkZXJGYWNldD47XG59O1xuXG50eXBlIEZhY2V0c0NvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRzZWN0aW9uczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0U2VjdGlvbj47XG59O1xuXG50eXBlIE1hbmlmZXN0Rm9ybUVsZW1lbnQgPSBQb3NpdGlvbmFibGUgJiB7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRmb3JtYXRPcHRpb25zPzogRm9ybWF0T3B0aW9uc1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uID0ge1xuXHRmaWVsZHM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEZvcm1FbGVtZW50Pjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbnRyb2xNYW5pZmVzdENvbmZpZ3VyYXRpb24gPVxuXHR8IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uXG5cdHwgQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb25cblx0fCBGYWNldHNDb250cm9sQ29uZmlndXJhdGlvblxuXHR8IEhlYWRlckZhY2V0c0NvbnRyb2xDb25maWd1cmF0aW9uXG5cdHwgRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvblxuXHR8IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblxuLyoqIE9iamVjdCBQYWdlICoqL1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyA9IEJhc2VNYW5pZmVzdFNldHRpbmdzICYge1xuXHRjb250ZW50Pzoge1xuXHRcdGhlYWRlcj86IHtcblx0XHRcdHZpc2libGU/OiBib29sZWFuO1xuXHRcdFx0YW5jaG9yQmFyVmlzaWJsZT86IGJvb2xlYW47XG5cdFx0XHRmYWNldHM/OiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RIZWFkZXJGYWNldD47XG5cdFx0fTtcblx0XHRib2R5Pzoge1xuXHRcdFx0c2VjdGlvbnM/OiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RTZWN0aW9uPjtcblx0XHR9O1xuXHR9O1xuXHRlZGl0YWJsZUhlYWRlckNvbnRlbnQ6IGJvb2xlYW47XG5cdHNob3dEcmFmdFRvZ2dsZTogYm9vbGVhbjtcblx0c2VjdGlvbkxheW91dDogXCJUYWJzXCIgfCBcIlBhZ2VcIjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgTWFuaWZlc3RIZWFkZXJGYWNldFxuICovXG5leHBvcnQgdHlwZSBNYW5pZmVzdEhlYWRlckZhY2V0ID0ge1xuXHR0eXBlPzogSGVhZGVyRmFjZXRUeXBlO1xuXHRuYW1lPzogc3RyaW5nO1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR2aXNpYmxlPzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdWJUaXRsZT86IHN0cmluZztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGZsZXhTZXR0aW5ncz86IEZsZXhTZXR0aW5ncztcblx0cmVxdWVzdEdyb3VwSWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hbmlmZXN0U2VjdGlvblxuICovXG5leHBvcnQgdHlwZSBNYW5pZmVzdFNlY3Rpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcblx0dmlzaWJsZT86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0c3ViU2VjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFN1YlNlY3Rpb24+O1xuXHRhY3Rpb25zPzogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RBY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RTdWJTZWN0aW9uID0ge1xuXHRpZD86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR2aXNpYmxlPzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdGFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj47XG5cdHNpZGVDb250ZW50PzogTWFuaWZlc3RTaWRlQ29udGVudDtcbn07XG5cbi8qKiBMaXN0IFJlcG9ydCAqKi9cblxuZXhwb3J0IHR5cGUgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgPSBCYXNlTWFuaWZlc3RTZXR0aW5ncyAmIHtcblx0aW5pdGlhbExvYWQ/OiBib29sZWFuO1xuXHR2aWV3cz86IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgVmlld1BhdGhDb25maWd1cmF0aW9uID0gU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uIHwgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cbmV4cG9ydCB0eXBlIFZpZXdDb25maWd1cmF0aW9uID0gVmlld1BhdGhDb25maWd1cmF0aW9uIHwgQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbiA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uID0ge1xuXHRrZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24/OiBib29sZWFuO1xuXHRrZXk/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbiA9IHtcblx0cHJpbWFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW107XG5cdHNlY29uZGFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW107XG5cdGRlZmF1bHRQYXRoPzogXCJib3RoXCIgfCBcInByaW1hcnlcIiB8IFwic2Vjb25kYXJ5XCI7XG5cdGtleT86IHN0cmluZztcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gPSB7XG5cdHBhdGhzOiBWaWV3Q29uZmlndXJhdGlvbltdO1xuXHRzaG93Q291bnRzPzogYm9vbGVhbjtcbn07XG5cbi8qKiBGaWx0ZXIgQ29uZmlndXJhdGlvbiAqKi9cblxuLyoqIEB0eXBlZGVmIEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiAqKi9cbmV4cG9ydCB0eXBlIEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IHtcblx0ZmlsdGVyRmllbGRzPzogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+O1xuXHRuYXZpZ2F0aW9uUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR1c2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW47XG5cdGluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG5cdGxheW91dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uID0gUG9zaXRpb25hYmxlICYge1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdHZpc3VhbEZpbHRlcj86IHZpc3VhbEZpbHRlckNvbmZpZ3VyYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSB2aXN1YWxGaWx0ZXJDb25maWd1cmF0aW9uID0ge1xuXHR2YWx1ZUxpc3Q/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBPcGVyYXRvckNvbmZpZ3VyYXRpb24gPSB7XG5cdHBhdGg6IHN0cmluZztcblx0ZXF1YWxzPzogc3RyaW5nO1xuXHRjb250YWlucz86IHN0cmluZztcblx0ZXhjbHVkZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRPcGVyYXRvciA9IHtcblx0b3BlcmF0b3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlclNldHRpbmdzID0ge1xuXHRvcGVyYXRvckNvbmZpZ3VyYXRpb24/OiBPcGVyYXRvckNvbmZpZ3VyYXRpb25bXTtcblx0ZGVmYXVsdFZhbHVlcz86IERlZmF1bHRPcGVyYXRvcltdO1xufTtcblxuLyoqIENoYXJ0IENvbmZpZ3VyYXRpb24gKiovXG5cbmV4cG9ydCB0eXBlIENoYXJ0UGVyc29uYWxpemF0aW9uTWFuaWZlc3RTZXR0aW5ncyA9XG5cdHwgYm9vbGVhblxuXHR8IHtcblx0XHRcdHNvcnQ6IGJvb2xlYW47XG5cdFx0XHR0eXBlOiBib29sZWFuO1xuXHRcdFx0aXRlbTogYm9vbGVhbjtcblx0ICB9O1xuXG5leHBvcnQgdHlwZSBDaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IHtcblx0Y2hhcnRTZXR0aW5nczoge1xuXHRcdHBlcnNvbmFsaXphdGlvbjogQ2hhcnRQZXJzb25hbGl6YXRpb25NYW5pZmVzdFNldHRpbmdzO1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aW9uQWZ0ZXJFeGVjdXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRuYXZpZ2F0ZVRvSW5zdGFuY2U/OiBib29sZWFuO1xuXHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbjtcbn07XG5cbi8qKiBUYWJsZSBDb25maWd1cmF0aW9uICoqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hbmlmZXN0QWN0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIE1hbmlmZXN0QWN0aW9uID0ge1xuXHRtZW51Pzogc3RyaW5nW107XG5cdHZpc2libGU/OiBzdHJpbmc7XG5cdGVuYWJsZWQ/OiBzdHJpbmc7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG5cdHByZXNzPzogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHRfX25vV3JhcD86IGJvb2xlYW47XG5cdGVuYWJsZU9uU2VsZWN0Pzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWVzRnVuY3Rpb24/OiBzdHJpbmc7XG5cdHJlcXVpcmVzU2VsZWN0aW9uPzogYm9vbGVhbjtcblx0YWZ0ZXJFeGVjdXRpb24/OiBBY3Rpb25BZnRlckV4ZWN1dGlvbkNvbmZpZ3VyYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBNYW5pZmVzdFRhYmxlQ29sdW1uT3ZlcnJpZGUgPSBQb3NpdGlvbmFibGUgJiB7XG5cdHdpZHRoPzogc3RyaW5nO1xuXHRob3Jpem9udGFsQWxpZ24/OiBIb3Jpem9udGFsQWxpZ247XG5cdGFmdGVyRXhlY3V0aW9uPzogQWN0aW9uQWZ0ZXJFeGVjdXRpb25Db25maWd1cmF0aW9uO1xuXHRzZXR0aW5ncz86IFRhYmxlQ29sdW1uU2V0dGluZ3M7XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0VGFibGVDb2x1bW4gPSBQb3NpdGlvbmFibGUgJiB7XG5cdGhlYWRlcjogc3RyaW5nO1xuXHR3aWR0aD86IHN0cmluZztcblx0dHlwZT86IHN0cmluZztcblx0aG9yaXpvbnRhbEFsaWduPzogSG9yaXpvbnRhbEFsaWduO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRhZnRlckV4ZWN1dGlvbj86IEFjdGlvbkFmdGVyRXhlY3V0aW9uQ29uZmlndXJhdGlvbjtcblx0YXZhaWxhYmlsaXR5PzogQXZhaWxhYmlsaXR5VHlwZTtcblx0c2V0dGluZ3M/OiBUYWJsZUNvbHVtblNldHRpbmdzO1xuXHRmb3JtYXRPcHRpb25zPzogRm9ybWF0T3B0aW9uc1R5cGU7XG5cdHByb3BlcnRpZXM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0ge1xuXHR0YWJsZVNldHRpbmdzPzogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbjtcblx0YWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0QWN0aW9uPjtcblx0Y29sdW1ucz86IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0VGFibGVDb2x1bW4gfCBNYW5pZmVzdFRhYmxlQ29sdW1uT3ZlcnJpZGU+O1xufTtcblxuZXhwb3J0IGVudW0gU2VsZWN0aW9uTW9kZSB7XG5cdEF1dG8gPSBcIkF1dG9cIixcblx0Tm9uZSA9IFwiTm9uZVwiLFxuXHRNdWx0aSA9IFwiTXVsdGlcIixcblx0U2luZ2xlID0gXCJTaW5nbGVcIlxufVxuXG5leHBvcnQgdHlwZSBUYWJsZVBlcnNvbmFsaXphdGlvbkNvbmZpZ3VyYXRpb24gPVxuXHR8IGJvb2xlYW5cblx0fCB7XG5cdFx0XHRzb3J0OiBib29sZWFuO1xuXHRcdFx0Y29sdW1uOiBib29sZWFuO1xuXHRcdFx0ZmlsdGVyOiBib29sZWFuO1xuXHRcdFx0Z3JvdXA6IGJvb2xlYW47XG5cdFx0XHRhZ2dyZWdhdGU6IGJvb2xlYW47XG5cdCAgfTtcblxuZXhwb3J0IHR5cGUgVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbiA9IHtcblx0Y3JlYXRpb25Nb2RlPzoge1xuXHRcdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE/OiBib29sZWFuO1xuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRjcmVhdGVBdEVuZD86IGJvb2xlYW47XG5cdFx0bmFtZT86IENyZWF0aW9uTW9kZTtcblx0fTtcblx0ZW5hYmxlRXhwb3J0PzogYm9vbGVhbjtcblx0cXVpY2tWYXJpYW50U2VsZWN0aW9uPzoge1xuXHRcdHBhdGhzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0XTtcblx0XHRoaWRlVGFibGVUaXRsZT86IGJvb2xlYW47XG5cdFx0c2hvd0NvdW50cz86IGJvb2xlYW47XG5cdH07XG5cdHBlcnNvbmFsaXphdGlvbj86IFRhYmxlUGVyc29uYWxpemF0aW9uQ29uZmlndXJhdGlvbjtcblx0LyoqXG5cdCAqIERlZmluZXMgaG93IG1hbnkgaXRlbXMgaW4gYSB0YWJsZSBjYW4gYmUgc2VsZWN0ZWQuIFlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgb3B0aW9uczpcblx0ICogPT4gYnkgZGVmaW5pbmcgJ05vbmUnIHlvdSBjYW4gZnVsbHkgZGlzYWJsZSB0aGUgbGlzdCBzZWxlY3Rpb25cblx0ICogPT4gYnkgZGVmaW5pbmcgJ1NpbmdsZScgeW91IGFsbG93IG9ubHkgb25lIGl0ZW0gdG8gYmUgc2VsZWN0ZWRcblx0ICogPT4gYnkgZGVmaW5pbmcgJ011bHRpJyB5b3UgYWxsb3cgc2V2ZXJhbCBpdGVtcyB0byBiZSBzZWxlY3RlZFxuXHQgKiA9PiBieSB1c2luZyAnQXV0bycgeW91IGxlYXZlIHRoZSBkZWZhdWx0IGRlZmluaXRpb24gJ05vbmUnLCBleGNlcHQgaWYgdGhlcmUgaXMgYW4gYWN0aW9uIHRoYXQgcmVxdWlyZXMgYSBzZWxlY3Rpb24gKHN1Y2ggYXMgZGVsZXRpbmcsIG9yIElCTilcblx0ICovXG5cdHNlbGVjdGlvbk1vZGU/OiBTZWxlY3Rpb25Nb2RlO1xuXHR0eXBlPzogVGFibGVUeXBlO1xuXHRjb25kZW5zZWRUYWJsZUxheW91dD86IGJvb2xlYW47XG5cdHNlbGVjdEFsbD86IGJvb2xlYW47XG5cdHNlbGVjdGlvbkxpbWl0PzogbnVtYmVyO1xuXHRlbmFibGVQYXN0ZT86IGJvb2xlYW47XG5cdGVuYWJsZUZ1bGxTY3JlZW4/OiBib29sZWFuO1xuXHRlbmFibGVNYXNzRWRpdD86IGJvb2xlYW47XG59O1xuIl19
90
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbmlmZXN0U2V0dGluZ3MudHMiXSwibmFtZXMiOlsiVGVtcGxhdGVUeXBlIiwiQWN0aW9uVHlwZSIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ3JlYXRpb25Nb2RlIiwiQXZhaWxhYmlsaXR5VHlwZSIsIkhvcml6b250YWxBbGlnbiIsIlNlbGVjdGlvbk1vZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztNQUtZQSxZOzthQUFBQSxZO0FBQUFBLElBQUFBLFk7QUFBQUEsSUFBQUEsWTtBQUFBQSxJQUFBQSxZO0tBQUFBLFksS0FBQUEsWTs7O01BTUFDLFU7O2FBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0FBQUFBLElBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0FBQUFBLElBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0FBQUFBLElBQUFBLFU7S0FBQUEsVSxLQUFBQSxVOzs7TUFnQkFDLGlCOzthQUFBQSxpQjtBQUFBQSxJQUFBQSxpQjtBQUFBQSxJQUFBQSxpQjtLQUFBQSxpQixLQUFBQSxpQjs7O01BS0FDLHFCOzthQUFBQSxxQjtBQUFBQSxJQUFBQSxxQjtBQUFBQSxJQUFBQSxxQjtBQUFBQSxJQUFBQSxxQjtLQUFBQSxxQixLQUFBQSxxQjs7O01BV0FDLFk7O2FBQUFBLFk7QUFBQUEsSUFBQUEsWTtBQUFBQSxJQUFBQSxZO0FBQUFBLElBQUFBLFk7S0FBQUEsWSxLQUFBQSxZOzs7TUFNQUMsZ0I7O2FBQUFBLGdCO0FBQUFBLElBQUFBLGdCO0FBQUFBLElBQUFBLGdCO0FBQUFBLElBQUFBLGdCO0tBQUFBLGdCLEtBQUFBLGdCOzs7TUFNQUMsZTs7YUFBQUEsZTtBQUFBQSxJQUFBQSxlO0FBQUFBLElBQUFBLGU7QUFBQUEsSUFBQUEsZTtLQUFBQSxlLEtBQUFBLGU7OztNQWlVQUMsYTs7YUFBQUEsYTtBQUFBQSxJQUFBQSxhO0FBQUFBLElBQUFBLGE7QUFBQUEsSUFBQUEsYTtBQUFBQSxJQUFBQSxhO0tBQUFBLGEsS0FBQUEsYSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJhYmxlUmVjb3JkLCBQb3NpdGlvbiwgUG9zaXRpb25hYmxlIH0gZnJvbSBcIi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IEZsZXhTZXR0aW5ncywgSGVhZGVyRmFjZXRUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgQmluZGluZ0V4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgVGFibGVUeXBlIH0gZnJvbSBcIi4vY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5cbmV4cG9ydCBlbnVtIFRlbXBsYXRlVHlwZSB7XG5cdExpc3RSZXBvcnQgPSBcIkxpc3RSZXBvcnRcIixcblx0T2JqZWN0UGFnZSA9IFwiT2JqZWN0UGFnZVwiLFxuXHRBbmFseXRpY2FsTGlzdFBhZ2UgPSBcIkFuYWx5dGljYWxMaXN0UGFnZVwiXG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvblR5cGUge1xuXHREYXRhRmllbGRGb3JBY3Rpb24gPSBcIkZvckFjdGlvblwiLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gPSBcIkZvck5hdmlnYXRpb25cIixcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRQcmltYXJ5ID0gXCJQcmltYXJ5XCIsXG5cdFNlY29uZGFyeSA9IFwiU2Vjb25kYXJ5XCIsXG5cdFN3aXRjaFRvQWN0aXZlT2JqZWN0ID0gXCJTd2l0Y2hUb0FjdGl2ZU9iamVjdFwiLFxuXHRTd2l0Y2hUb0RyYWZ0T2JqZWN0ID0gXCJTd2l0Y2hUb0RyYWZ0T2JqZWN0XCIsXG5cdERlZmF1bHRBcHBseSA9IFwiRGVmYXVsdEFwcGx5XCIsXG5cdE1lbnUgPSBcIk1lbnVcIlxufVxuXG5leHBvcnQgdHlwZSBNYW5pZmVzdFNpZGVDb250ZW50ID0ge1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGVudW0gVmlzdWFsaXphdGlvblR5cGUge1xuXHRUYWJsZSA9IFwiVGFibGVcIixcblx0Q2hhcnQgPSBcIkNoYXJ0XCJcbn1cblxuZXhwb3J0IGVudW0gVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0UGFnZSA9IFwiUGFnZVwiLFxuXHRDb250cm9sID0gXCJDb250cm9sXCIsXG5cdE5vbmUgPSBcIk5vbmVcIlxufVxuXG5leHBvcnQgdHlwZSBDb250ZW50RGVuc2l0aWVzVHlwZSA9IHtcblx0Y29tcGFjdD86IGJvb2xlYW47XG5cdGNvenk/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGVudW0gQ3JlYXRpb25Nb2RlIHtcblx0TmV3UGFnZSA9IFwiTmV3UGFnZVwiLFxuXHRJbmxpbmUgPSBcIklubGluZVwiLFxuXHRDcmVhdGlvblJvdyA9IFwiQ3JlYXRpb25Sb3dcIlxufVxuXG5leHBvcnQgZW51bSBBdmFpbGFiaWxpdHlUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRBZGFwdGF0aW9uID0gXCJBZGFwdGF0aW9uXCIsXG5cdEhpZGRlbiA9IFwiSGlkZGVuXCJcbn1cblxuZXhwb3J0IGVudW0gSG9yaXpvbnRhbEFsaWduIHtcblx0RW5kID0gXCJFbmRcIixcblx0QmVnaW4gPSBcIkJlZ2luXCIsXG5cdENlbnRlciA9IFwiQ2VudGVyXCJcbn1cblxuZXhwb3J0IHR5cGUgVGFibGVDb2x1bW5TZXR0aW5ncyA9IHtcblx0bWljcm9DaGFydFNpemU/OiBzdHJpbmc7XG5cdHNob3dNaWNyb0NoYXJ0TGFiZWw/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIGZvciBtdWx0aWxpbmUgdGV4dCBmaWVsZHMgb24gYSBmb3JtIG9yIGluIGEgdGFibGVcbiAqL1xuZXhwb3J0IHR5cGUgRm9ybWF0T3B0aW9uc1R5cGUgPSB7XG5cdHRleHRMaW5lc0Rpc3BsYXk6IG51bWJlcjtcblx0dGV4dExpbmVzRWRpdDogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9mIGEgS1BJIGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgdHlwZSBLUElDb25maWd1cmF0aW9uID0ge1xuXHRtb2RlbD86IHN0cmluZztcblx0ZW50aXR5U2V0OiBzdHJpbmc7XG5cdHF1YWxpZmllcjogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBCYXNlTWFuaWZlc3RTZXR0aW5nc1xuICovXG5leHBvcnQgdHlwZSBCYXNlTWFuaWZlc3RTZXR0aW5ncyA9IHtcblx0Y29udGVudD86IHtcblx0XHRoZWFkZXI/OiB7XG5cdFx0XHRmYWNldHM/OiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RIZWFkZXJGYWNldD47XG5cdFx0XHRhY3Rpb25zPzogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPjtcblx0XHR9O1xuXHRcdGZvb3Rlcj86IHtcblx0XHRcdGFjdGlvbnM/OiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+O1xuXHRcdH07XG5cdH07XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzoge1xuXHRcdFthbm5vdGF0aW9uUGF0aDogc3RyaW5nXTogQ29udHJvbE1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0fSAmIHtcblx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiPzogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRzXCI/OiBGYWNldHNDb250cm9sQ29uZmlndXJhdGlvbjtcblx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJGYWNldHNcIj86IEhlYWRlckZhY2V0c0NvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiPzogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uO1xuXHR9O1xuXHRjb252ZXJ0ZXJUeXBlOiBUZW1wbGF0ZVR5cGU7XG5cdGVudGl0eVNldDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uPzoge1xuXHRcdFtuYXZpZ2F0aW9uUGF0aDogc3RyaW5nXTogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbjtcblx0fTtcblx0dmlld0xldmVsPzogbnVtYmVyO1xuXHRmY2xFbmFibGVkPzogYm9vbGVhbjtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50PzogVmFyaWFudE1hbmFnZW1lbnRUeXBlO1xuXHRkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aD86IHN0cmluZztcblx0Y29udGVudERlbnNpdGllcz86IENvbnRlbnREZW5zaXRpZXNUeXBlO1xuXHRzaGVsbENvbnRlbnREZW5zaXR5Pzogc3RyaW5nO1xuXHRpc0Rlc2t0b3A/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb24gPSB7XG5cdG91dGJvdW5kPzogc3RyaW5nO1xuXHRvdXRib3VuZERldGFpbD86IHtcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdHBhcmFtZXRlcnM/OiBhbnk7XG5cdH07XG5cdHJvdXRlPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24gPSB7XG5cdGNyZWF0ZT86IE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uO1xuXHRkZXRhaWw/OiBOYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbjtcblx0ZGlzcGxheT86IHtcblx0XHRvdXRib3VuZD86IHN0cmluZztcblx0XHR0YXJnZXQ/OiBzdHJpbmc7IC8vIGZvciBjb21wYXRpYmlsaXR5XG5cdFx0cm91dGU/OiBzdHJpbmc7XG5cdH07XG59O1xuXG50eXBlIEhlYWRlckZhY2V0c0NvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRmYWNldHM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0Pjtcbn07XG5cbnR5cGUgRmFjZXRzQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdHNlY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RTZWN0aW9uPjtcbn07XG5cbnR5cGUgTWFuaWZlc3RGb3JtRWxlbWVudCA9IFBvc2l0aW9uYWJsZSAmIHtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24gPSB7XG5cdGZpZWxkczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0Rm9ybUVsZW1lbnQ+O1xufTtcblxuZXhwb3J0IHR5cGUgQ29udHJvbE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9XG5cdHwgVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cblx0fCBDaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvblxuXHR8IEZhY2V0c0NvbnRyb2xDb25maWd1cmF0aW9uXG5cdHwgSGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZ3VyYXRpb25cblx0fCBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uXG5cdHwgRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uO1xuXG4vKiogT2JqZWN0IFBhZ2UgKiovXG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzID0gQmFzZU1hbmlmZXN0U2V0dGluZ3MgJiB7XG5cdGNvbnRlbnQ/OiB7XG5cdFx0aGVhZGVyPzoge1xuXHRcdFx0dmlzaWJsZT86IGJvb2xlYW47XG5cdFx0XHRhbmNob3JCYXJWaXNpYmxlPzogYm9vbGVhbjtcblx0XHRcdGZhY2V0cz86IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0Pjtcblx0XHR9O1xuXHRcdGJvZHk/OiB7XG5cdFx0XHRzZWN0aW9ucz86IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+O1xuXHRcdH07XG5cdH07XG5cdGVkaXRhYmxlSGVhZGVyQ29udGVudDogYm9vbGVhbjtcblx0c2VjdGlvbkxheW91dDogXCJUYWJzXCIgfCBcIlBhZ2VcIjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgTWFuaWZlc3RIZWFkZXJGYWNldFxuICovXG5leHBvcnQgdHlwZSBNYW5pZmVzdEhlYWRlckZhY2V0ID0ge1xuXHR0eXBlPzogSGVhZGVyRmFjZXRUeXBlO1xuXHRuYW1lPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0cG9zaXRpb24/OiBQb3NpdGlvbjtcblx0dmlzaWJsZT86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR0aXRsZT86IHN0cmluZztcblx0c3ViVGl0bGU/OiBzdHJpbmc7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRmbGV4U2V0dGluZ3M/OiBGbGV4U2V0dGluZ3M7XG5cdHJlcXVlc3RHcm91cElkPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZUVkaXQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hbmlmZXN0U2VjdGlvblxuICovXG5leHBvcnQgdHlwZSBNYW5pZmVzdFNlY3Rpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcblx0dmlzaWJsZT86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0c3ViU2VjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFN1YlNlY3Rpb24+O1xuXHRhY3Rpb25zPzogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RBY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RTdWJTZWN0aW9uID0ge1xuXHRpZD86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR2aXNpYmxlPzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdGFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj47XG5cdHNpZGVDb250ZW50PzogTWFuaWZlc3RTaWRlQ29udGVudDtcbn07XG5cbi8qKiBMaXN0IFJlcG9ydCAqKi9cblxuZXhwb3J0IHR5cGUgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgPSBCYXNlTWFuaWZlc3RTZXR0aW5ncyAmIHtcblx0aW5pdGlhbExvYWQ/OiBib29sZWFuO1xuXHR2aWV3cz86IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uO1xuXHRrZXlQZXJmb3JtYW5jZUluZGljYXRvcnM/OiB7XG5cdFx0W2twaU5hbWU6IHN0cmluZ106IEtQSUNvbmZpZ3VyYXRpb247XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBWaWV3UGF0aENvbmZpZ3VyYXRpb24gPSBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24gfCBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblxuZXhwb3J0IHR5cGUgVmlld0NvbmZpZ3VyYXRpb24gPSBWaWV3UGF0aENvbmZpZ3VyYXRpb24gfCBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uO1xuXG5leHBvcnQgdHlwZSBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uID0ge1xuXHRrZXk/OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24gPSB7XG5cdGtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbj86IGJvb2xlYW47XG5cdGtleT86IHN0cmluZztcblx0ZW50aXR5U2V0Pzogc3RyaW5nO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uID0ge1xuXHRwcmltYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXTtcblx0c2Vjb25kYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXTtcblx0ZGVmYXVsdFBhdGg/OiBcImJvdGhcIiB8IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIjtcblx0a2V5Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgdHlwZSBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiA9IHtcblx0cGF0aHM6IFZpZXdDb25maWd1cmF0aW9uW107XG5cdHNob3dDb3VudHM/OiBib29sZWFuO1xufTtcblxuLyoqIEZpbHRlciBDb25maWd1cmF0aW9uICoqL1xuXG4vKiogQHR5cGVkZWYgRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uICoqL1xuZXhwb3J0IHR5cGUgRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uID0ge1xuXHRmaWx0ZXJGaWVsZHM/OiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj47XG5cdG5hdmlnYXRpb25Qcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdHVzZVNlbWFudGljRGF0ZVJhbmdlPzogYm9vbGVhbjtcblx0aW5pdGlhbExheW91dD86IHN0cmluZztcblx0bGF5b3V0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBQb3NpdGlvbmFibGUgJiB7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0YXZhaWxhYmlsaXR5PzogQXZhaWxhYmlsaXR5VHlwZTtcblx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncztcblx0dmlzdWFsRmlsdGVyPzogdmlzdWFsRmlsdGVyQ29uZmlndXJhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIHZpc3VhbEZpbHRlckNvbmZpZ3VyYXRpb24gPSB7XG5cdHZhbHVlTGlzdD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE9wZXJhdG9yQ29uZmlndXJhdGlvbiA9IHtcblx0cGF0aDogc3RyaW5nO1xuXHRlcXVhbHM/OiBzdHJpbmc7XG5cdGNvbnRhaW5zPzogc3RyaW5nO1xuXHRleGNsdWRlOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdE9wZXJhdG9yID0ge1xuXHRvcGVyYXRvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyU2V0dGluZ3MgPSB7XG5cdG9wZXJhdG9yQ29uZmlndXJhdGlvbj86IE9wZXJhdG9yQ29uZmlndXJhdGlvbltdO1xuXHRkZWZhdWx0VmFsdWVzPzogRGVmYXVsdE9wZXJhdG9yW107XG59O1xuXG4vKiogQ2hhcnQgQ29uZmlndXJhdGlvbiAqKi9cblxuZXhwb3J0IHR5cGUgQ2hhcnRQZXJzb25hbGl6YXRpb25NYW5pZmVzdFNldHRpbmdzID1cblx0fCBib29sZWFuXG5cdHwge1xuXHRcdFx0c29ydDogYm9vbGVhbjtcblx0XHRcdHR5cGU6IGJvb2xlYW47XG5cdFx0XHRpdGVtOiBib29sZWFuO1xuXHQgIH07XG5cbmV4cG9ydCB0eXBlIENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uID0ge1xuXHRjaGFydFNldHRpbmdzOiB7XG5cdFx0cGVyc29uYWxpemF0aW9uOiBDaGFydFBlcnNvbmFsaXphdGlvbk1hbmlmZXN0U2V0dGluZ3M7XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBBY3Rpb25BZnRlckV4ZWN1dGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdG5hdmlnYXRlVG9JbnN0YW5jZT86IGJvb2xlYW47XG5cdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xufTtcblxuLyoqIFRhYmxlIENvbmZpZ3VyYXRpb24gKiovXG5cbi8qKlxuICogQHR5cGVkZWYgTWFuaWZlc3RBY3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgTWFuaWZlc3RBY3Rpb24gPSB7XG5cdG1lbnU/OiBzdHJpbmdbXTtcblx0dmlzaWJsZT86IHN0cmluZztcblx0ZW5hYmxlZD86IHN0cmluZztcblx0cG9zaXRpb24/OiBQb3NpdGlvbjtcblx0cHJlc3M/OiBzdHJpbmc7XG5cdHRleHQ/OiBzdHJpbmc7XG5cdF9fbm9XcmFwPzogYm9vbGVhbjtcblx0ZW5hYmxlT25TZWxlY3Q/OiBzdHJpbmc7XG5cdGRlZmF1bHRWYWx1ZXNGdW5jdGlvbj86IHN0cmluZztcblx0cmVxdWlyZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuXHRhZnRlckV4ZWN1dGlvbj86IEFjdGlvbkFmdGVyRXhlY3V0aW9uQ29uZmlndXJhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0VGFibGVDb2x1bW5PdmVycmlkZSA9IFBvc2l0aW9uYWJsZSAmIHtcblx0d2lkdGg/OiBzdHJpbmc7XG5cdGhvcml6b250YWxBbGlnbj86IEhvcml6b250YWxBbGlnbjtcblx0YWZ0ZXJFeGVjdXRpb24/OiBBY3Rpb25BZnRlckV4ZWN1dGlvbkNvbmZpZ3VyYXRpb247XG5cdHNldHRpbmdzPzogVGFibGVDb2x1bW5TZXR0aW5ncztcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnNUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RUYWJsZUNvbHVtbiA9IFBvc2l0aW9uYWJsZSAmIHtcblx0aGVhZGVyOiBzdHJpbmc7XG5cdHdpZHRoPzogc3RyaW5nO1xuXHR0eXBlPzogc3RyaW5nO1xuXHRob3Jpem9udGFsQWxpZ24/OiBIb3Jpem9udGFsQWxpZ247XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdGFmdGVyRXhlY3V0aW9uPzogQWN0aW9uQWZ0ZXJFeGVjdXRpb25Db25maWd1cmF0aW9uO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRzZXR0aW5ncz86IFRhYmxlQ29sdW1uU2V0dGluZ3M7XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zVHlwZTtcblx0cHJvcGVydGllcz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSB7XG5cdHRhYmxlU2V0dGluZ3M/OiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uO1xuXHRhY3Rpb25zPzogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RBY3Rpb24+O1xuXHRjb2x1bW5zPzogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RUYWJsZUNvbHVtbiB8IE1hbmlmZXN0VGFibGVDb2x1bW5PdmVycmlkZT47XG59O1xuXG5leHBvcnQgZW51bSBTZWxlY3Rpb25Nb2RlIHtcblx0QXV0byA9IFwiQXV0b1wiLFxuXHROb25lID0gXCJOb25lXCIsXG5cdE11bHRpID0gXCJNdWx0aVwiLFxuXHRTaW5nbGUgPSBcIlNpbmdsZVwiXG59XG5cbmV4cG9ydCB0eXBlIFRhYmxlUGVyc29uYWxpemF0aW9uQ29uZmlndXJhdGlvbiA9XG5cdHwgYm9vbGVhblxuXHR8IHtcblx0XHRcdHNvcnQ6IGJvb2xlYW47XG5cdFx0XHRjb2x1bW46IGJvb2xlYW47XG5cdFx0XHRmaWx0ZXI6IGJvb2xlYW47XG5cdFx0XHRncm91cDogYm9vbGVhbjtcblx0XHRcdGFnZ3JlZ2F0ZTogYm9vbGVhbjtcblx0ICB9O1xuXG5leHBvcnQgdHlwZSBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGlvbk1vZGU/OiB7XG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YT86IGJvb2xlYW47XG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRcdGNyZWF0ZUF0RW5kPzogYm9vbGVhbjtcblx0XHRuYW1lPzogQ3JlYXRpb25Nb2RlO1xuXHR9O1xuXHRlbmFibGVFeHBvcnQ/OiBib29sZWFuO1xuXHRxdWlja1ZhcmlhbnRTZWxlY3Rpb24/OiB7XG5cdFx0cGF0aHM6IFtcblx0XHRcdHtcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0XHRcdH1cblx0XHRdO1xuXHRcdGhpZGVUYWJsZVRpdGxlPzogYm9vbGVhbjtcblx0XHRzaG93Q291bnRzPzogYm9vbGVhbjtcblx0fTtcblx0cGVyc29uYWxpemF0aW9uPzogVGFibGVQZXJzb25hbGl6YXRpb25Db25maWd1cmF0aW9uO1xuXHQvKipcblx0ICogRGVmaW5lcyBob3cgbWFueSBpdGVtcyBpbiBhIHRhYmxlIGNhbiBiZSBzZWxlY3RlZC4gWW91IGhhdmUgdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuXHQgKiA9PiBieSBkZWZpbmluZyAnTm9uZScgeW91IGNhbiBmdWxseSBkaXNhYmxlIHRoZSBsaXN0IHNlbGVjdGlvblxuXHQgKiA9PiBieSBkZWZpbmluZyAnU2luZ2xlJyB5b3UgYWxsb3cgb25seSBvbmUgaXRlbSB0byBiZSBzZWxlY3RlZFxuXHQgKiA9PiBieSBkZWZpbmluZyAnTXVsdGknIHlvdSBhbGxvdyBzZXZlcmFsIGl0ZW1zIHRvIGJlIHNlbGVjdGVkXG5cdCAqID0+IGJ5IHVzaW5nICdBdXRvJyB5b3UgbGVhdmUgdGhlIGRlZmF1bHQgZGVmaW5pdGlvbiAnTm9uZScsIGV4Y2VwdCBpZiB0aGVyZSBpcyBhbiBhY3Rpb24gdGhhdCByZXF1aXJlcyBhIHNlbGVjdGlvbiAoc3VjaCBhcyBkZWxldGluZywgb3IgSUJOKVxuXHQgKi9cblx0c2VsZWN0aW9uTW9kZT86IFNlbGVjdGlvbk1vZGU7XG5cdHR5cGU/OiBUYWJsZVR5cGU7XG5cdGNvbmRlbnNlZFRhYmxlTGF5b3V0PzogYm9vbGVhbjtcblx0c2VsZWN0QWxsPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTGltaXQ/OiBudW1iZXI7XG5cdGVuYWJsZVBhc3RlPzogYm9vbGVhbjtcblx0ZW5hYmxlRnVsbFNjcmVlbj86IGJvb2xlYW47XG5cdGVuYWJsZU1hc3NFZGl0PzogYm9vbGVhbjtcbn07XG4iXX0=
@@ -70,7 +70,15 @@ export type TableColumnSettings = {
70
70
  export type FormatOptionsType = {
71
71
  textLinesDisplay: number;
72
72
  textLinesEdit: number;
73
- textMaxLines: number;
73
+ };
74
+
75
+ /**
76
+ * Configuration of a KPI in the manifest
77
+ */
78
+ export type KPIConfiguration = {
79
+ model?: string;
80
+ entitySet: string;
81
+ qualifier: string;
74
82
  };
75
83
 
76
84
  /**
@@ -172,7 +180,6 @@ export type ObjectPageManifestSettings = BaseManifestSettings & {
172
180
  };
173
181
  };
174
182
  editableHeaderContent: boolean;
175
- showDraftToggle: boolean;
176
183
  sectionLayout: "Tabs" | "Page";
177
184
  };
178
185
 
@@ -182,6 +189,7 @@ export type ObjectPageManifestSettings = BaseManifestSettings & {
182
189
  export type ManifestHeaderFacet = {
183
190
  type?: HeaderFacetType;
184
191
  name?: string;
192
+ template?: string;
185
193
  position?: Position;
186
194
  visible?: BindingExpression<boolean>;
187
195
  title?: string;
@@ -189,6 +197,7 @@ export type ManifestHeaderFacet = {
189
197
  stashed?: boolean;
190
198
  flexSettings?: FlexSettings;
191
199
  requestGroupId?: string;
200
+ templateEdit?: string;
192
201
  };
193
202
 
194
203
  /**
@@ -221,6 +230,9 @@ export type ManifestSubSection = {
221
230
  export type ListReportManifestSettings = BaseManifestSettings & {
222
231
  initialLoad?: boolean;
223
232
  views?: MultipleViewsConfiguration;
233
+ keyPerformanceIndicators?: {
234
+ [kpiName: string]: KPIConfiguration;
235
+ };
224
236
  };
225
237
 
226
238
  export type ViewPathConfiguration = SingleViewPathConfiguration | CombinedViewPathConfiguration;