@sapui5/sap.fe.core 1.130.0 → 1.131.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +3 -3
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -1
  5. package/src/sap/fe/core/CommonUtils.js +38 -14
  6. package/src/sap/fe/core/CommonUtils.ts +39 -15
  7. package/src/sap/fe/core/TemplateComponent.js +4 -1
  8. package/src/sap/fe/core/TemplateComponent.ts +2 -0
  9. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
  10. package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
  11. package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
  12. package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
  13. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +4 -2
  14. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -1
  15. package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
  16. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
  17. package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
  18. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
  19. package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
  20. package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
  21. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
  22. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
  23. package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
  24. package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
  25. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  26. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  27. package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
  28. package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
  29. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +9 -5
  30. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +17 -6
  31. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
  32. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +3 -2
  33. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
  34. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
  35. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
  36. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
  37. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +17 -20
  38. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +30 -29
  39. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
  40. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
  41. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
  42. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
  43. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
  44. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
  45. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
  46. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
  47. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  48. package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
  49. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
  50. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
  51. package/src/sap/fe/core/converters/ConverterContext.js +10 -3
  52. package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
  53. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  54. package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
  55. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  56. package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
  57. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  58. package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
  59. package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
  60. package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
  61. package/src/sap/fe/core/converters/controls/Common/Table.js +63 -67
  62. package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -81
  63. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
  64. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
  65. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
  66. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
  67. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
  68. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
  69. package/src/sap/fe/core/formatters/StandardFormatter.js +4 -1
  70. package/src/sap/fe/core/formatters/StandardFormatter.ts +4 -1
  71. package/src/sap/fe/core/fpm/manifest.json +1 -1
  72. package/src/sap/fe/core/helpers/AppStartupHelper.js +37 -10
  73. package/src/sap/fe/core/helpers/AppStartupHelper.ts +38 -14
  74. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  75. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  76. package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
  77. package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
  78. package/src/sap/fe/core/helpers/MetaPath.js +17 -2
  79. package/src/sap/fe/core/helpers/MetaPath.ts +27 -6
  80. package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
  81. package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
  82. package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
  83. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
  84. package/src/sap/fe/core/library.js +5 -2
  85. package/src/sap/fe/core/library.support.js +3 -3
  86. package/src/sap/fe/core/library.support.ts +2 -1
  87. package/src/sap/fe/core/library.ts +4 -0
  88. package/src/sap/fe/core/messagebundle.properties +6 -0
  89. package/src/sap/fe/core/messagebundle_ar.properties +11 -3
  90. package/src/sap/fe/core/messagebundle_bg.properties +14 -6
  91. package/src/sap/fe/core/messagebundle_ca.properties +10 -2
  92. package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
  93. package/src/sap/fe/core/messagebundle_cs.properties +10 -2
  94. package/src/sap/fe/core/messagebundle_cy.properties +10 -2
  95. package/src/sap/fe/core/messagebundle_da.properties +10 -2
  96. package/src/sap/fe/core/messagebundle_de.properties +12 -4
  97. package/src/sap/fe/core/messagebundle_el.properties +10 -2
  98. package/src/sap/fe/core/messagebundle_en.properties +9 -1
  99. package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
  100. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
  101. package/src/sap/fe/core/messagebundle_es.properties +12 -4
  102. package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
  103. package/src/sap/fe/core/messagebundle_et.properties +10 -2
  104. package/src/sap/fe/core/messagebundle_fi.properties +10 -2
  105. package/src/sap/fe/core/messagebundle_fr.properties +10 -2
  106. package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
  107. package/src/sap/fe/core/messagebundle_hi.properties +10 -2
  108. package/src/sap/fe/core/messagebundle_hr.properties +11 -3
  109. package/src/sap/fe/core/messagebundle_hu.properties +11 -3
  110. package/src/sap/fe/core/messagebundle_id.properties +10 -2
  111. package/src/sap/fe/core/messagebundle_it.properties +10 -2
  112. package/src/sap/fe/core/messagebundle_iw.properties +11 -3
  113. package/src/sap/fe/core/messagebundle_ja.properties +10 -2
  114. package/src/sap/fe/core/messagebundle_kk.properties +10 -2
  115. package/src/sap/fe/core/messagebundle_ko.properties +10 -2
  116. package/src/sap/fe/core/messagebundle_lt.properties +10 -2
  117. package/src/sap/fe/core/messagebundle_lv.properties +10 -2
  118. package/src/sap/fe/core/messagebundle_mk.properties +10 -2
  119. package/src/sap/fe/core/messagebundle_ms.properties +10 -2
  120. package/src/sap/fe/core/messagebundle_nl.properties +12 -4
  121. package/src/sap/fe/core/messagebundle_no.properties +11 -3
  122. package/src/sap/fe/core/messagebundle_pl.properties +10 -2
  123. package/src/sap/fe/core/messagebundle_pt.properties +10 -2
  124. package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
  125. package/src/sap/fe/core/messagebundle_ro.properties +10 -2
  126. package/src/sap/fe/core/messagebundle_ru.properties +10 -2
  127. package/src/sap/fe/core/messagebundle_sh.properties +10 -2
  128. package/src/sap/fe/core/messagebundle_sk.properties +10 -2
  129. package/src/sap/fe/core/messagebundle_sl.properties +10 -2
  130. package/src/sap/fe/core/messagebundle_sr.properties +10 -2
  131. package/src/sap/fe/core/messagebundle_sv.properties +10 -2
  132. package/src/sap/fe/core/messagebundle_th.properties +12 -4
  133. package/src/sap/fe/core/messagebundle_tr.properties +12 -4
  134. package/src/sap/fe/core/messagebundle_uk.properties +10 -2
  135. package/src/sap/fe/core/messagebundle_vi.properties +11 -3
  136. package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
  137. package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
  138. package/src/sap/fe/core/operationsHelper.js +4 -4
  139. package/src/sap/fe/core/operationsHelper.ts +4 -4
  140. package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
  141. package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
  142. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
  143. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
  144. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
  145. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
  146. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
  147. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
  148. package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
  149. package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
  150. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
  151. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
  152. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -4
  153. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
  154. package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
  155. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
  156. package/src/sap/fe/core/templating/UIFormatters.js +3 -3
  157. package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
  158. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
@@ -62,24 +62,52 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "../convert
62
62
  }
63
63
  return new Filter(aFilters, true);
64
64
  },
65
+ /**
66
+ * Makes sure key values have the correct format.
67
+ * This is to handle special cases, for example, where Boolean values are 'X' or '', or guid values have the following format: guid'00000000-0000-0000-0000-000000000000'.".
68
+ * @param keys
69
+ * @param entityType
70
+ */
71
+ _sanitizeKeys: function (keys, entityType) {
72
+ keys.forEach(key => {
73
+ const propertyType = entityType[key.name].$Type;
74
+ switch (propertyType) {
75
+ case "Edm.Boolean":
76
+ if (key.value !== "true" && key.value !== "false") {
77
+ // If the value is neither "true" nor "false", it's considered as false if it contains only whitespaces (e.g. to handle 'X'/'' for true/false values)
78
+ key.value = key.value.trim().length ? "true" : "false";
79
+ }
80
+ break;
81
+ case "Edm.Guid":
82
+ {
83
+ const match = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/.exec(key.value);
84
+ key.value = match ? match[0] : key.value;
85
+ break;
86
+ }
87
+ default:
88
+ // Do nothing
89
+ }
90
+ });
91
+ },
65
92
  /**
66
93
  * Loads all contexts for a list of page infos.
67
94
  * @param aStartupPages The list of page infos
68
95
  * @param oModel The model used to load the contexts
69
- * @param alwaysCheckExistence If true, always check if the object exists, even if semantic keys are present
70
96
  * @returns A Promise for all contexts
71
97
  */
72
- _requestObjectsFromParameters: async function (aStartupPages, oModel, alwaysCheckExistence) {
98
+ _requestObjectsFromParameters: async function (aStartupPages, oModel) {
73
99
  // Load the respective objects for all object pages found in aExternallyNavigablePages
74
100
  const aContextPromises = aStartupPages.map(async pageInfo => {
75
- if (pageInfo.technicalKeys && !alwaysCheckExistence) {
101
+ const entityType = oModel.getMetaModel().getObject(`${pageInfo.contextPath}/`);
102
+ if (pageInfo.technicalKeys) {
103
+ this._sanitizeKeys(pageInfo.technicalKeys, entityType);
76
104
  // Create a context with the proper path
77
- const entityType = oModel.getMetaModel().getObject(`${pageInfo.contextPath}/`);
78
105
  const path = `${pageInfo.contextPath}(${SemanticKeyHelper.getPathContent(pageInfo.technicalKeys, entityType)})`;
79
106
  const context = oModel.bindContext(path).getBoundContext();
80
107
  return Promise.resolve([context]);
81
108
  } else {
82
- const aKeys = pageInfo.semanticKeys || pageInfo.technicalKeys || [];
109
+ const aKeys = pageInfo.semanticKeys ?? [];
110
+ this._sanitizeKeys(aKeys, entityType);
83
111
  const oFilter = this._createFilterFromKeys(aKeys, pageInfo.draftMode, oModel.getMetaModel());
84
112
 
85
113
  // only request a minimum of fields to boost backend performance since this is only used to check if an object exists
@@ -259,21 +287,20 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "../convert
259
287
  }
260
288
  },
261
289
  /**
262
- * Calculates startup parameters for a deeplink case, from startup parameters and routing infoirmation.
290
+ * Calculates startup parameters for a deeplink case, from startup parameters and routing information.
263
291
  * @param oManifestRouting The routing information from the app manifest
264
292
  * @param oStartupParameters The startup parameters
265
293
  * @param oModel The OData model
266
- * @param alwaysCheckExistence
267
294
  * @returns An object containing either a hash or a context to navigate to, or an empty object if no deep link was found
268
295
  */
269
- getDeepLinkStartupHash: async function (oManifestRouting, oStartupParameters, oModel, alwaysCheckExistence) {
296
+ getDeepLinkStartupHash: async function (oManifestRouting, oStartupParameters, oModel) {
270
297
  await oModel.getMetaModel().requestObject("/$EntityContainer/");
271
298
 
272
299
  // Check if semantic keys are present in url parameters for every object page at each level
273
300
  const startupPages = this._getStartupPagesFromStartupParams(oManifestRouting, oStartupParameters, oModel.getMetaModel());
274
301
 
275
302
  // Load the contexts
276
- const allContexts = await this._requestObjectsFromParameters(startupPages, oModel, alwaysCheckExistence);
303
+ const allContexts = await this._requestObjectsFromParameters(startupPages, oModel);
277
304
  if (allContexts.length) {
278
305
  // Make sure we only get 1 context per promise, and flatten the array
279
306
  const contextsForStartup = [];
@@ -364,4 +391,4 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "../convert
364
391
  };
365
392
  return AppStartupHelper;
366
393
  }, false);
367
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBTdGFydHVwSGVscGVyIiwiX2dldEtleXNGcm9tU3RhcnR1cFBhcmFtcyIsImFLZXlOYW1lcyIsIm9TdGFydHVwUGFyYW1ldGVycyIsImJBbGxGb3VuZCIsImFLZXlzIiwibWFwIiwibmFtZSIsImxlbmd0aCIsInZhbHVlIiwidW5kZWZpbmVkIiwiX2NyZWF0ZUZpbHRlckZyb21LZXlzIiwiYkRyYWZ0TW9kZSIsIm9NZXRhTW9kZWwiLCJiRmlsdGVyQ2FzZVNlbnNpdGl2ZSIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiYkZpbHRlck9uQWN0aXZlRW50aXR5IiwiYUZpbHRlcnMiLCJrZXkiLCJGaWx0ZXIiLCJwYXRoIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiY2FzZVNlbnNpdGl2ZSIsIm9EcmFmdEZpbHRlciIsImZpbHRlcnMiLCJhbmQiLCJwdXNoIiwiX3JlcXVlc3RPYmplY3RzRnJvbVBhcmFtZXRlcnMiLCJhU3RhcnR1cFBhZ2VzIiwib01vZGVsIiwiYWx3YXlzQ2hlY2tFeGlzdGVuY2UiLCJhQ29udGV4dFByb21pc2VzIiwicGFnZUluZm8iLCJ0ZWNobmljYWxLZXlzIiwiZW50aXR5VHlwZSIsImdldE1ldGFNb2RlbCIsImdldE9iamVjdCIsImNvbnRleHRQYXRoIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRQYXRoQ29udGVudCIsImNvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VtYW50aWNLZXlzIiwib0ZpbHRlciIsImRyYWZ0TW9kZSIsIm9MaXN0QmluZCIsImJpbmRMaXN0IiwiJHNlbGVjdCIsImpvaW4iLCJyZXF1ZXN0Q29udGV4dHMiLCJhbGwiLCJfZ2V0UmVhY2hhYmxlUGFnZUluZm9Gcm9tUm91dGUiLCJvUm91dGUiLCJvTWFuaWZlc3RSb3V0aW5nIiwiX29NYW5pZmVzdFJvdXRpbmckdGFyIiwiX29UYXJnZXQkb3B0aW9ucyIsIl9vVGFyZ2V0JG9wdGlvbnMkc2V0dCIsIl9vVGFyZ2V0JG9wdGlvbnMyIiwiX29UYXJnZXQkb3B0aW9uczIkc2V0IiwiX29UYXJnZXQkb3B0aW9uczMiLCJfb1RhcmdldCRvcHRpb25zMyRzZXQiLCJzUGF0dGVybiIsInBhdHRlcm4iLCJyZXBsYWNlIiwiZW5kc1dpdGgiLCJzVGFyZ2V0TmFtZSIsIkFycmF5IiwiaXNBcnJheSIsInRhcmdldCIsIm9UYXJnZXQiLCJ0YXJnZXRzIiwiYVBhdHRlcm5TZWdtZW50cyIsInNwbGl0IiwicGFnZUxldmVsIiwib3B0aW9ucyIsInNldHRpbmdzIiwiYWxsb3dEZWVwTGlua2luZyIsInNDb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0RW50aXR5U2V0Iiwib0VudGl0eVR5cGUiLCJhU2VtYW50aWNLZXlOYW1lcyIsImFTZW1hbnRpY2tLZXlzIiwic2VtS2V5IiwiJFByb3BlcnR5UGF0aCIsImFUZWNobmljYWxLZXlzIiwiX2dldFJlYWNoYWJsZVBhZ2VzIiwiYVJvdXRlcyIsInJvdXRlcyIsIm1QYWdlc0J5TGV2ZWwiLCJmb3JFYWNoIiwib1BhZ2VJbmZvIiwiYVJlYWNoYWJsZVBhZ2VzIiwibGV2ZWwiLCJfZ2V0U3RhcnR1cFBhZ2VzRnJvbVN0YXJ0dXBQYXJhbXMiLCJyZXN1bHQiLCJjdXJyZW50IiwiZmluZFJlY3Vyc2l2ZSIsImFDdXJyZW50TGV2ZWxQYWdlcyIsImxhc3RQYWdlIiwibmV4dFBhZ2UiLCJpbmRleE9mIiwicG9wIiwic2xpY2UiLCJfZ2V0RGVlcExpbmtPYmplY3QiLCJhQ29udGV4dHMiLCJoYXNoIiwib0NvbnRleHQiLCJnZXRQYXRoIiwiZ2V0RGVlcExpbmtTdGFydHVwSGFzaCIsInJlcXVlc3RPYmplY3QiLCJzdGFydHVwUGFnZXMiLCJhbGxDb250ZXh0cyIsImNvbnRleHRzRm9yU3RhcnR1cCIsImZvdW5kQ29udGV4dHMiLCJnZXRDcmVhdGVTdGFydHVwSGFzaCIsIm9Sb3V0ZXIiLCJ0aGVuIiwib0VudGl0eVNldEFubm90YXRpb25zIiwic01ldGFQYXRoIiwiYkNyZWF0YWJsZSIsImJOZXdBY3Rpb25PcGVyYXRpb25BdmFpbGFibGUiLCJvSW5zZXJ0UmVzdHJpY3Rpb25zIiwiSW5zZXJ0YWJsZSIsImdldERlZmF1bHRDcmVhdGVIYXNoIiwic0RlZmF1bHRDcmVhdGVIYXNoIiwicHJlZmVycmVkTW9kZSIsInNIYXNoIiwiaW5jbHVkZXMiLCJzdWJzdHJpbmciLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJFcnJvciIsInZlcmlmeUVkaXRBbm5vdGF0aW9ucyIsIm1ldGFNb2RlbCIsIl9lbnRpdHlTZXRBbm5vdGF0aW9ucyIsImVudGl0eVNldEFubm90YXRpb25zIiwidXBkYXRlSGlkZGVuIiwib3BlcmF0aW9uQXZhaWxhYmxlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBTdGFydHVwSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0dXBQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nQ29uZmlndXJhdGlvbiwgUm91dGluZ1JvdXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV4cGFuZFBhdGhUeXBlLCBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwiLi9TZW1hbnRpY0tleUhlbHBlclwiO1xuXG50eXBlIFZhbHVlZEtleSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxudHlwZSBQYWdlSW5mbyA9IHtcblx0cGF0dGVybjogc3RyaW5nO1xuXHRjb250ZXh0UGF0aDogc3RyaW5nO1xuXHRkcmFmdE1vZGU6IGJvb2xlYW47XG5cdHRlY2huaWNhbEtleXM6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkO1xuXHRzZW1hbnRpY0tleXM6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkO1xuXHR0YXJnZXQ6IHN0cmluZztcblx0cGFnZUxldmVsOiBudW1iZXI7XG59O1xuXG5jb25zdCBBcHBTdGFydHVwSGVscGVyID0ge1xuXHQvKipcblx0ICogUmV0cmlldmVzIGEgc2V0IG9mIGtleSB2YWx1ZXMgZnJvbSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBhS2V5TmFtZXMgVGhlIGFycmF5IG9mIGtleSBuYW1lc1xuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFpcnMgXFx7bmFtZSwgdmFsdWVcXH0gaWYgYWxsIGtleSB2YWx1ZXMgY291bGQgYmUgZm91bmQgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVycywgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0X2dldEtleXNGcm9tU3RhcnR1cFBhcmFtczogZnVuY3Rpb24gKGFLZXlOYW1lczogc3RyaW5nW10sIG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsKTogVmFsdWVkS2V5W10gfCB1bmRlZmluZWQge1xuXHRcdGxldCBiQWxsRm91bmQgPSB0cnVlO1xuXHRcdGNvbnN0IGFLZXlzID0gYUtleU5hbWVzLm1hcCgobmFtZSkgPT4ge1xuXHRcdFx0aWYgKG9TdGFydHVwUGFyYW1ldGVycz8uW25hbWVdICYmIG9TdGFydHVwUGFyYW1ldGVyc1tuYW1lXS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0cmV0dXJuIHsgbmFtZSwgdmFsdWU6IG9TdGFydHVwUGFyYW1ldGVyc1tuYW1lXVswXSBhcyBzdHJpbmcgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEEgdW5pcXVlIGtleSB2YWx1ZSBjb3VsZG4ndCBiZSBmb3VuZCBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRcdGJBbGxGb3VuZCA9IGZhbHNlO1xuXHRcdFx0XHRyZXR1cm4geyBuYW1lLCB2YWx1ZTogXCJcIiB9O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGJBbGxGb3VuZCA/IGFLZXlzIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZmlsdGVyIGZyb20gYSBsaXN0IG9mIGtleSB2YWx1ZXMuXG5cdCAqIEBwYXJhbSBhS2V5cyBBcnJheSBvZiBzZW1hbnRpYyBrZXlzIG9yIHRlY2huaWNhbCBrZXlzICh3aXRoIHZhbHVlcylcblx0ICogQHBhcmFtIGJEcmFmdE1vZGUgVHJ1ZSBpZiB0aGUgZW50aXR5IHN1cHBvcnRzIGRyYWZ0IG1vZGVcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlsdGVyXG5cdCAqL1xuXHRfY3JlYXRlRmlsdGVyRnJvbUtleXM6IGZ1bmN0aW9uIChhS2V5czogVmFsdWVkS2V5W10sIGJEcmFmdE1vZGU6IEJvb2xlYW4sIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogRmlsdGVyIHtcblx0XHRjb25zdCBiRmlsdGVyQ2FzZVNlbnNpdGl2ZSA9IE1vZGVsSGVscGVyLmlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShvTWV0YU1vZGVsKTtcblxuXHRcdGxldCBiRmlsdGVyT25BY3RpdmVFbnRpdHkgPSBmYWxzZTtcblx0XHRjb25zdCBhRmlsdGVycyA9IGFLZXlzLm1hcCgoa2V5KSA9PiB7XG5cdFx0XHRpZiAoa2V5Lm5hbWUgPT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRiRmlsdGVyT25BY3RpdmVFbnRpdHkgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiBrZXkubmFtZSxcblx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHR2YWx1ZTE6IGtleS52YWx1ZSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogYkZpbHRlckNhc2VTZW5zaXRpdmVcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGlmIChiRHJhZnRNb2RlICYmICFiRmlsdGVyT25BY3RpdmVFbnRpdHkpIHtcblx0XHRcdGNvbnN0IG9EcmFmdEZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBbbmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIFwiRVFcIiwgZmFsc2UpLCBuZXcgRmlsdGVyKFwiU2libGluZ0VudGl0eS9Jc0FjdGl2ZUVudGl0eVwiLCBcIkVRXCIsIG51bGwpXSxcblx0XHRcdFx0YW5kOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0XHRhRmlsdGVycy5wdXNoKG9EcmFmdEZpbHRlcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoYUZpbHRlcnMsIHRydWUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBMb2FkcyBhbGwgY29udGV4dHMgZm9yIGEgbGlzdCBvZiBwYWdlIGluZm9zLlxuXHQgKiBAcGFyYW0gYVN0YXJ0dXBQYWdlcyBUaGUgbGlzdCBvZiBwYWdlIGluZm9zXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgY29udGV4dHNcblx0ICogQHBhcmFtIGFsd2F5c0NoZWNrRXhpc3RlbmNlIElmIHRydWUsIGFsd2F5cyBjaGVjayBpZiB0aGUgb2JqZWN0IGV4aXN0cywgZXZlbiBpZiBzZW1hbnRpYyBrZXlzIGFyZSBwcmVzZW50XG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSBmb3IgYWxsIGNvbnRleHRzXG5cdCAqL1xuXHRfcmVxdWVzdE9iamVjdHNGcm9tUGFyYW1ldGVyczogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdGFTdGFydHVwUGFnZXM6IFBhZ2VJbmZvW10sXG5cdFx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdGFsd2F5c0NoZWNrRXhpc3RlbmNlOiBib29sZWFuXG5cdCk6IFByb21pc2U8Q29udGV4dFtdW10+IHtcblx0XHQvLyBMb2FkIHRoZSByZXNwZWN0aXZlIG9iamVjdHMgZm9yIGFsbCBvYmplY3QgcGFnZXMgZm91bmQgaW4gYUV4dGVybmFsbHlOYXZpZ2FibGVQYWdlc1xuXHRcdGNvbnN0IGFDb250ZXh0UHJvbWlzZXMgPSBhU3RhcnR1cFBhZ2VzLm1hcChhc3luYyAocGFnZUluZm8pID0+IHtcblx0XHRcdGlmIChwYWdlSW5mby50ZWNobmljYWxLZXlzICYmICFhbHdheXNDaGVja0V4aXN0ZW5jZSkge1xuXHRcdFx0XHQvLyBDcmVhdGUgYSBjb250ZXh0IHdpdGggdGhlIHByb3BlciBwYXRoXG5cdFx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KGAke3BhZ2VJbmZvLmNvbnRleHRQYXRofS9gKTtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGAke3BhZ2VJbmZvLmNvbnRleHRQYXRofSgke1NlbWFudGljS2V5SGVscGVyLmdldFBhdGhDb250ZW50KHBhZ2VJbmZvLnRlY2huaWNhbEtleXMsIGVudGl0eVR5cGUpfSlgO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gb01vZGVsLmJpbmRDb250ZXh0KHBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtjb250ZXh0XSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBhS2V5cyA9IHBhZ2VJbmZvLnNlbWFudGljS2V5cyB8fCBwYWdlSW5mby50ZWNobmljYWxLZXlzIHx8IFtdO1xuXHRcdFx0XHRjb25zdCBvRmlsdGVyID0gdGhpcy5fY3JlYXRlRmlsdGVyRnJvbUtleXMoYUtleXMsIHBhZ2VJbmZvLmRyYWZ0TW9kZSwgb01vZGVsLmdldE1ldGFNb2RlbCgpKTtcblxuXHRcdFx0XHQvLyBvbmx5IHJlcXVlc3QgYSBtaW5pbXVtIG9mIGZpZWxkcyB0byBib29zdCBiYWNrZW5kIHBlcmZvcm1hbmNlIHNpbmNlIHRoaXMgaXMgb25seSB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBleGlzdHNcblx0XHRcdFx0Y29uc3Qgb0xpc3RCaW5kID0gb01vZGVsLmJpbmRMaXN0KHBhZ2VJbmZvLmNvbnRleHRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb0ZpbHRlciwge1xuXHRcdFx0XHRcdCRzZWxlY3Q6IGFLZXlzXG5cdFx0XHRcdFx0XHQubWFwKChrZXkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleS5uYW1lO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5qb2luKFwiLFwiKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG9MaXN0QmluZC5yZXF1ZXN0Q29udGV4dHMoMCwgMik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYUNvbnRleHRQcm9taXNlcyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBQYWdlSW5mbyBmcm9tIGEgcm91dGUgaWYgaXQncyByZWFjaGFibGUgZnJvbSB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gb1JvdXRlIFRoZSByb3V0ZVxuXHQgKiBAcGFyYW0gb01hbmlmZXN0Um91dGluZyBUaGUgYXBwIG1hbmlmZXN0IHJvdXRpbmcgc2VjdGlvblxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIGFwcCBtZXRhbW9kZWxcblx0ICogQHJldHVybnMgQSBwYWdlIGluZm8gaWYgdGhlIHBhZ2UgaXMgcmVhY2hhYmxlLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRfZ2V0UmVhY2hhYmxlUGFnZUluZm9Gcm9tUm91dGU6IGZ1bmN0aW9uIChcblx0XHRvUm91dGU6IFJvdXRpbmdSb3V0ZSxcblx0XHRvTWFuaWZlc3RSb3V0aW5nOiBSb3V0aW5nQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCxcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQYWdlSW5mbyB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gUmVtb3ZlIHRyYWlsaW5nICc6P3F1ZXJ5OicgYW5kICcvJ1xuXHRcdGxldCBzUGF0dGVybjogc3RyaW5nID0gb1JvdXRlLnBhdHRlcm4hLnJlcGxhY2UoXCI6P3F1ZXJ5OlwiLCBcIlwiKTtcblx0XHRzUGF0dGVybiA9IHNQYXR0ZXJuLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcblxuXHRcdGlmICghc1BhdHRlcm4gfHwgIXNQYXR0ZXJuLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0Ly8gSWdub3JlIGxldmVsLTAgcm91dGVzIChMaXN0UmVwb3J0KSBvciByb3V0ZXMgY29ycmVzcG9uZGluZyB0byBhIDEtMSByZWxhdGlvbiAobm8ga2V5cyBpbiB0aGUgVVJMIGluIHRoaXMgY2FzZSlcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0c1BhdHRlcm4gPSBzUGF0dGVybi5yZXBsYWNlKC9cXChcXHtbXn1dKlxcfVxcKS9nLCBcIigjKVwiKTsgLy8gUmVwbGFjZSBrZXlzIHdpdGggI1xuXG5cdFx0Ly8gR2V0IHRoZSByaWdodG1vc3QgdGFyZ2V0IGZvciB0aGlzIHJvdXRlXG5cdFx0Y29uc3Qgc1RhcmdldE5hbWU6IHN0cmluZyA9IEFycmF5LmlzQXJyYXkob1JvdXRlLnRhcmdldCkgPyBvUm91dGUudGFyZ2V0W29Sb3V0ZS50YXJnZXQubGVuZ3RoIC0gMV0gOiBvUm91dGUudGFyZ2V0O1xuXHRcdGNvbnN0IG9UYXJnZXQgPSBvTWFuaWZlc3RSb3V0aW5nPy50YXJnZXRzPy5bc1RhcmdldE5hbWVdO1xuXG5cdFx0Y29uc3QgYVBhdHRlcm5TZWdtZW50cyA9IHNQYXR0ZXJuLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBwYWdlTGV2ZWwgPSBhUGF0dGVyblNlZ21lbnRzLmxlbmd0aCAtIDE7XG5cblx0XHRpZiAocGFnZUxldmVsICE9PSAwICYmIG9UYXJnZXQ/Lm9wdGlvbnM/LnNldHRpbmdzPy5hbGxvd0RlZXBMaW5raW5nICE9PSB0cnVlKSB7XG5cdFx0XHQvLyBUaGUgZmlyc3QgbGV2ZWwgb2Ygb2JqZWN0IHBhZ2UgYWxsb3dzIGRlZXAgbGlua2luZyBieSBkZWZhdWx0LlxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGUgdGFyZ2V0IG11c3QgYWxsb3cgZGVlcCBsaW5raW5nIGV4cGxpY2l0ZWx5IGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRsZXQgc0NvbnRleHRQYXRoID0gXCJcIjtcblx0XHRpZiAob1RhcmdldD8ub3B0aW9ucz8uc2V0dGluZ3M/LmVudGl0eVNldCkge1xuXHRcdFx0c0NvbnRleHRQYXRoID0gYC8ke29UYXJnZXQub3B0aW9ucy5zZXR0aW5ncy5lbnRpdHlTZXR9YDtcblx0XHR9IGVsc2UgaWYgKG9UYXJnZXQ/Lm9wdGlvbnM/LnNldHRpbmdzPy5jb250ZXh0UGF0aCkge1xuXHRcdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG9UYXJnZXQub3B0aW9ucy5zZXR0aW5ncy5jb250ZXh0UGF0aCkhO1xuXHRcdFx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCk7XG5cdFx0XHRpZiAob2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdFx0c0NvbnRleHRQYXRoID0gYC8ke29iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWV9YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIXNDb250ZXh0UGF0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3Qgb0VudGl0eVR5cGUgPSBzQ29udGV4dFBhdGggJiYgb01ldGFNb2RlbC5nZXRPYmplY3QoYC8kRW50aXR5Q29udGFpbmVyJHtzQ29udGV4dFBhdGh9L2ApO1xuXG5cdFx0aWYgKCFvRW50aXR5VHlwZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIHNlbWFudGljIGtleSB2YWx1ZXMgZm9yIHRoZSBlbnRpdHlcblx0XHRjb25zdCBhU2VtYW50aWNLZXlOYW1lczogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPltdID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRgLyRFbnRpdHlDb250YWluZXIke3NDb250ZXh0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleWBcblx0XHQpO1xuXG5cdFx0Y29uc3QgYVNlbWFudGlja0tleXMgPSBhU2VtYW50aWNLZXlOYW1lc1xuXHRcdFx0PyB0aGlzLl9nZXRLZXlzRnJvbVN0YXJ0dXBQYXJhbXMoXG5cdFx0XHRcdFx0YVNlbWFudGljS2V5TmFtZXMubWFwKChzZW1LZXkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBzZW1LZXkuJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnNcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHQvLyBHZXQgdGhlIHRlY2huaWNhbCBrZXlzIG9ubHkgaWYgd2UgY291bGRuJ3QgZmluZCB0aGUgc2VtYW50aWMga2V5IHZhbHVlcywgYW5kIG9uIGZpcnN0IGxldmVsIE9QXG5cdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPVxuXHRcdFx0IWFTZW1hbnRpY2tLZXlzICYmIHBhZ2VMZXZlbCA9PT0gMCA/IHRoaXMuX2dldEtleXNGcm9tU3RhcnR1cFBhcmFtcyhvRW50aXR5VHlwZVtcIiRLZXlcIl0sIG9TdGFydHVwUGFyYW1ldGVycykgOiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoYVNlbWFudGlja0tleXMgPT09IHVuZGVmaW5lZCAmJiBhVGVjaG5pY2FsS2V5cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBXZSBjb3VsZG4ndCBmaW5kIHRoZSBzZW1hbnRpYy90ZWNobmljYWwga2V5cyBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBzdGFydHVwIHBhcmFtZXRlcnMgY29udGFpbiB2YWx1ZXMgZm9yIGFsbCBzZW1hbnRpYyBrZXlzIChvciB0ZWNobmljYWwga2V5cykgLS0+IHdlIGNhbiBzdG9yZSB0aGUgcGFnZSBpbmZvIGluIHRoZSBjb3JyZXNwb25kaW5nIGxldmVsXG5cdFx0Y29uc3QgZHJhZnRNb2RlID1cblx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJEVudGl0eUNvbnRhaW5lciR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YCkgfHxcblx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJEVudGl0eUNvbnRhaW5lciR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlYClcblx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdDogZmFsc2U7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0dGVybjogc1BhdHRlcm4sXG5cdFx0XHRjb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0ZHJhZnRNb2RlLFxuXHRcdFx0dGVjaG5pY2FsS2V5czogYVRlY2huaWNhbEtleXMsXG5cdFx0XHRzZW1hbnRpY0tleXM6IGFTZW1hbnRpY2tLZXlzLFxuXHRcdFx0dGFyZ2V0OiBzVGFyZ2V0TmFtZSxcblx0XHRcdHBhZ2VMZXZlbFxuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYWxsIHBhZ2VzIHRoYXQgYWxsb3cgZGVlcGxpbmsgYW5kIHRoYXQgY2FuIGJlIHJlYWNoZWQgdXNpbmcgdGhlIHN0YXJ0dXAgcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIHJvdXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgbWV0YW1vZGVsXG5cdCAqIEByZXR1cm5zIFRoZSByZWFjaGFibGUgcGFnZXNcblx0ICovXG5cdF9nZXRSZWFjaGFibGVQYWdlczogZnVuY3Rpb24gKFxuXHRcdG9NYW5pZmVzdFJvdXRpbmc6IFJvdXRpbmdDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsLFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsXG5cdCk6IFBhZ2VJbmZvW11bXSB7XG5cdFx0Y29uc3QgYVJvdXRlczogUm91dGluZ1JvdXRlW10gPSBvTWFuaWZlc3RSb3V0aW5nPy5yb3V0ZXMgPz8gW107XG5cdFx0Y29uc3QgbVBhZ2VzQnlMZXZlbDogUmVjb3JkPG51bWJlciwgUGFnZUluZm9bXT4gPSB7fTtcblxuXHRcdGFSb3V0ZXMuZm9yRWFjaCgob1JvdXRlKSA9PiB7XG5cdFx0XHRjb25zdCBvUGFnZUluZm8gPSB0aGlzLl9nZXRSZWFjaGFibGVQYWdlSW5mb0Zyb21Sb3V0ZShvUm91dGUsIG9NYW5pZmVzdFJvdXRpbmcsIG9TdGFydHVwUGFyYW1ldGVycywgb01ldGFNb2RlbCk7XG5cblx0XHRcdGlmIChvUGFnZUluZm8pIHtcblx0XHRcdFx0aWYgKCFtUGFnZXNCeUxldmVsW29QYWdlSW5mby5wYWdlTGV2ZWxdKSB7XG5cdFx0XHRcdFx0bVBhZ2VzQnlMZXZlbFtvUGFnZUluZm8ucGFnZUxldmVsXSA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1QYWdlc0J5TGV2ZWxbb1BhZ2VJbmZvLnBhZ2VMZXZlbF0ucHVzaChvUGFnZUluZm8pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gQSBwYWdlIGlzIHJlYWNoYWJsZSBvbmx5IGlmIGFsbCBpdHMgcGFyZW50cyBhcmUgYWxzbyByZWFjaGFibGVcblx0XHQvLyBTbyBpZiB3ZSBjb3VsZG4ndCBmaW5kIGFueSBwYWdlcyBmb3IgYSBnaXZlbiBsZXZlbCwgYWxsIHBhZ2VzIHdpdGggYSBoaWdoZXIgbGV2ZWwgd29uJ3QgYmUgcmVhY2hhYmxlIGFueXdheVxuXHRcdGNvbnN0IGFSZWFjaGFibGVQYWdlczogUGFnZUluZm9bXVtdID0gW107XG5cdFx0bGV0IGxldmVsID0gMDtcblx0XHR3aGlsZSAobVBhZ2VzQnlMZXZlbFtsZXZlbF0pIHtcblx0XHRcdGFSZWFjaGFibGVQYWdlcy5wdXNoKG1QYWdlc0J5TGV2ZWxbbGV2ZWxdKTtcblx0XHRcdGxldmVsKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFSZWFjaGFibGVQYWdlcztcblx0fSxcblxuXHQvKipcblx0ICogR2V0IHRoZSBsaXN0IG9mIHN0YXJ0dXAgcGFnZXMuXG5cdCAqIEBwYXJhbSBvTWFuaWZlc3RSb3V0aW5nIFRoZSByb3V0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGFwcCBtYW5pZmVzdFxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdGFydHVwIHBhZ2UgaW5mb3Ncblx0ICovXG5cdF9nZXRTdGFydHVwUGFnZXNGcm9tU3RhcnR1cFBhcmFtczogZnVuY3Rpb24gKFxuXHRcdG9NYW5pZmVzdFJvdXRpbmc6IFJvdXRpbmdDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsLFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsXG5cdCk6IFBhZ2VJbmZvW10ge1xuXHRcdC8vIEZpbmQgYWxsIHBhZ2VzIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2l0aCB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0Y29uc3QgYVJlYWNoYWJsZVBhZ2VzID0gdGhpcy5fZ2V0UmVhY2hhYmxlUGFnZXMob01hbmlmZXN0Um91dGluZywgb1N0YXJ0dXBQYXJhbWV0ZXJzLCBvTWV0YU1vZGVsKTtcblxuXHRcdGlmIChhUmVhY2hhYmxlUGFnZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Ly8gRmluZCB0aGUgbG9uZ2VzdCBzZXF1ZW5jZSBvZiBwYWdlcyB0aGF0IGNhbiBiZSByZWFjaGVkIChyZWN1cnNpdmVseSlcblx0XHRsZXQgcmVzdWx0OiBQYWdlSW5mb1tdID0gW107XG5cdFx0Y29uc3QgY3VycmVudDogUGFnZUluZm9bXSA9IFtdO1xuXG5cdFx0ZnVuY3Rpb24gZmluZFJlY3Vyc2l2ZShsZXZlbDogbnVtYmVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCBhQ3VycmVudExldmVsUGFnZXMgPSBhUmVhY2hhYmxlUGFnZXNbbGV2ZWxdO1xuXHRcdFx0Y29uc3QgbGFzdFBhZ2UgPSBjdXJyZW50Lmxlbmd0aCA/IGN1cnJlbnRbY3VycmVudC5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKGFDdXJyZW50TGV2ZWxQYWdlcykge1xuXHRcdFx0XHRhQ3VycmVudExldmVsUGFnZXMuZm9yRWFjaChmdW5jdGlvbiAobmV4dFBhZ2UpIHtcblx0XHRcdFx0XHRpZiAoIWxhc3RQYWdlIHx8IG5leHRQYWdlLnBhdHRlcm4uaW5kZXhPZihsYXN0UGFnZS5wYXR0ZXJuKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Ly8gV2Ugb25seSBjb25zaWRlciBwYWdlcyB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdGhlIHBhZ2UgYXQgdGhlIHByZXZpb3VzIGxldmVsLFxuXHRcdFx0XHRcdFx0Ly8gLS0+IHRoZWlyIHBhdHRlcm4gbXVzdCBiZSB0aGUgcGF0dGVybiBvZiB0aGUgcHJldmlvdXMgcGFnZSB3aXRoIGFub3RoZXIgc2VnbWVudCBhcHBlbmRlZFxuXHRcdFx0XHRcdFx0Y3VycmVudC5wdXNoKG5leHRQYWdlKTtcblx0XHRcdFx0XHRcdGZpbmRSZWN1cnNpdmUobGV2ZWwgKyAxKTtcblx0XHRcdFx0XHRcdGN1cnJlbnQucG9wKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmIChjdXJyZW50Lmxlbmd0aCA+IHJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0cmVzdWx0ID0gY3VycmVudC5zbGljZSgpOyAvLyBXZSBoYXZlIGZvdW5kIGEgc2VxdWVuY2UgbG9uZ2VyIHRoYW4gb3VyIHByZXZpb3VzIGJlc3QgLS0+IHN0b3JlIGl0IGFzIHRoZSBuZXcgbG9uZ2VzdFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZpbmRSZWN1cnNpdmUoMCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBzdGFydHVwIG9iamVjdCBmcm9tIHRoZSBsaXN0IG9mIHBhZ2VzIGFuZCBjb250ZXh0cy5cblx0ICogQHBhcmFtIGFTdGFydHVwUGFnZXMgVGhlIHBhZ2VzXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgVGhlIGNvbnRleHRzXG5cdCAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIGVpdGhlciBhIGhhc2ggb3IgYSBjb250ZXh0IHRvIG5hdmlnYXRlIHRvLCBvciBhbiBlbXB0eSBvYmplY3QgaWYgbm8gZGVlcCBsaW5rIHdhcyBmb3VuZFxuXHQgKi9cblx0X2dldERlZXBMaW5rT2JqZWN0OiBmdW5jdGlvbiAoYVN0YXJ0dXBQYWdlczogUGFnZUluZm9bXSwgYUNvbnRleHRzOiBDb250ZXh0W10pOiB7IGhhc2g/OiBzdHJpbmc7IGNvbnRleHQ/OiBDb250ZXh0IH0ge1xuXHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4geyBjb250ZXh0OiBhQ29udGV4dHNbMF0gfTtcblx0XHR9IGVsc2UgaWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBOYXZpZ2F0aW9uIHRvIGEgZGVlcGVyIGxldmVsIC0tPiB1c2UgdGhlIHBhdHRlcm4gb2YgdGhlIGRlZXBlc3Qgb2JqZWN0IHBhZ2Vcblx0XHRcdC8vIGFuZCByZXBsYWNlIHRoZSBwYXJhbWV0ZXJzIGJ5IHRoZSBJRCBmcm9tIHRoZSBjb250ZXh0c1xuXHRcdFx0bGV0IGhhc2ggPSBhU3RhcnR1cFBhZ2VzW2FTdGFydHVwUGFnZXMubGVuZ3RoIC0gMV0ucGF0dGVybjtcblx0XHRcdGFDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdFx0XHRoYXNoID0gaGFzaC5yZXBsYWNlKFwiKCMpXCIsIGAoJHtvQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIoXCIpWzFdfWApO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB7IGhhc2ggfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyBzdGFydHVwIHBhcmFtZXRlcnMgZm9yIGEgZGVlcGxpbmsgY2FzZSwgZnJvbSBzdGFydHVwIHBhcmFtZXRlcnMgYW5kIHJvdXRpbmcgaW5mb2lybWF0aW9uLlxuXHQgKiBAcGFyYW0gb01hbmlmZXN0Um91dGluZyBUaGUgcm91dGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhcHAgbWFuaWZlc3Rcblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBhbHdheXNDaGVja0V4aXN0ZW5jZVxuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBlaXRoZXIgYSBoYXNoIG9yIGEgY29udGV4dCB0byBuYXZpZ2F0ZSB0bywgb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGRlZXAgbGluayB3YXMgZm91bmRcblx0ICovXG5cdGdldERlZXBMaW5rU3RhcnR1cEhhc2g6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvTWFuaWZlc3RSb3V0aW5nOiBSb3V0aW5nQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCxcblx0XHRvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0YWx3YXlzQ2hlY2tFeGlzdGVuY2U6IGJvb2xlYW5cblx0KTogUHJvbWlzZTx7IGhhc2g/OiBzdHJpbmc7IGNvbnRleHQ/OiBDb250ZXh0IH0+IHtcblx0XHRhd2FpdCBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblxuXHRcdC8vIENoZWNrIGlmIHNlbWFudGljIGtleXMgYXJlIHByZXNlbnQgaW4gdXJsIHBhcmFtZXRlcnMgZm9yIGV2ZXJ5IG9iamVjdCBwYWdlIGF0IGVhY2ggbGV2ZWxcblx0XHRjb25zdCBzdGFydHVwUGFnZXMgPSB0aGlzLl9nZXRTdGFydHVwUGFnZXNGcm9tU3RhcnR1cFBhcmFtcyhvTWFuaWZlc3RSb3V0aW5nLCBvU3RhcnR1cFBhcmFtZXRlcnMsIG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSk7XG5cblx0XHQvLyBMb2FkIHRoZSBjb250ZXh0c1xuXHRcdGNvbnN0IGFsbENvbnRleHRzID0gYXdhaXQgdGhpcy5fcmVxdWVzdE9iamVjdHNGcm9tUGFyYW1ldGVycyhzdGFydHVwUGFnZXMsIG9Nb2RlbCwgYWx3YXlzQ2hlY2tFeGlzdGVuY2UpO1xuXHRcdGlmIChhbGxDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IGdldCAxIGNvbnRleHQgcGVyIHByb21pc2UsIGFuZCBmbGF0dGVuIHRoZSBhcnJheVxuXHRcdFx0Y29uc3QgY29udGV4dHNGb3JTdGFydHVwOiBDb250ZXh0W10gPSBbXTtcblx0XHRcdGFsbENvbnRleHRzLmZvckVhY2goZnVuY3Rpb24gKGZvdW5kQ29udGV4dHMpIHtcblx0XHRcdFx0aWYgKGZvdW5kQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0Y29udGV4dHNGb3JTdGFydHVwLnB1c2goZm91bmRDb250ZXh0c1swXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gY29udGV4dHNGb3JTdGFydHVwLmxlbmd0aCA9PT0gYWxsQ29udGV4dHMubGVuZ3RoID8gdGhpcy5fZ2V0RGVlcExpbmtPYmplY3Qoc3RhcnR1cFBhZ2VzLCBjb250ZXh0c0ZvclN0YXJ0dXApIDoge307XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgdGhlIG5ldyBoYXNoIGJhc2VkIG9uIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyIHZhbHVlcyAobWFwIHBhcmFtZXRlciBuYW1lIC0+IGFycmF5IG9mIHZhbHVlcylcblx0ICogQHBhcmFtIHNDb250ZXh0UGF0aCBUaGUgY29udGV4dCBwYXRoIGZvciB0aGUgc3RhcnR1cCBvZiB0aGUgYXBwIChnZW5lcmFsbHkgdGhlIHBhdGggdG8gdGhlIG1haW4gZW50aXR5IHNldClcblx0ICogQHBhcmFtIG9Sb3V0ZXIgVGhlIHJvdXRlciBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgbWV0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgY29udGFpbmluZyB0aGUgaGFzaCB0byBuYXZpZ2F0ZSB0bywgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZXJlJ3Mgbm8gbmVlZCB0byBuYXZpZ2F0ZVxuXHQgKi9cblx0Z2V0Q3JlYXRlU3RhcnR1cEhhc2g6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzLFxuXHRcdHNDb250ZXh0UGF0aDogc3RyaW5nLFxuXHRcdG9Sb3V0ZXI6IFJvdXRlcixcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c0NvbnRleHRQYXRofUBgKS50aGVuKChvRW50aXR5U2V0QW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24pID0+IHtcblx0XHRcdGxldCBzTWV0YVBhdGggPSBcIlwiO1xuXHRcdFx0bGV0IGJDcmVhdGFibGUgPSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdICYmXG5cdFx0XHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdW1wiTmV3QWN0aW9uXCJdXG5cdFx0XHQpIHtcblx0XHRcdFx0c01ldGFQYXRoID0gYCR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L05ld0FjdGlvbkBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0b0VudGl0eVNldEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiXSAmJlxuXHRcdFx0XHRvRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCJdW1wiTmV3QWN0aW9uXCJdXG5cdFx0XHQpIHtcblx0XHRcdFx0c01ldGFQYXRoID0gYCR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWQvTmV3QWN0aW9uQE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzTWV0YVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgYk5ld0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNZXRhUGF0aCk7XG5cdFx0XHRcdGlmIChiTmV3QWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdGJDcmVhdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb0luc2VydFJlc3RyaWN0aW9ucyA9IG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluc2VydFJlc3RyaWN0aW9uc1wiXTtcblx0XHRcdFx0aWYgKG9JbnNlcnRSZXN0cmljdGlvbnMgJiYgb0luc2VydFJlc3RyaWN0aW9ucy5JbnNlcnRhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdGJDcmVhdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGJDcmVhdGFibGUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCBzQ29udGV4dFBhdGgsIG9Sb3V0ZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgdGhlIGhhc2ggdG8gY3JlYXRlIGEgbmV3IG9iamVjdC5cblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXIgdmFsdWVzIChtYXAgcGFyYW1ldGVyIG5hbWUgLT4gYXJyYXkgb2YgdmFsdWVzKVxuXHQgKiBAcGFyYW0gc0NvbnRleHRQYXRoIFRoZSBjb250ZXh0IHBhdGggb2YgdGhlIGVudGl0eSBzZXQgdG8gYmUgdXNlZCBmb3IgdGhlIGNyZWF0aW9uXG5cdCAqIEBwYXJhbSBvUm91dGVyIFRoZSByb3V0ZXIgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGhhc2hcblx0ICovXG5cdGdldERlZmF1bHRDcmVhdGVIYXNoOiBmdW5jdGlvbiAoXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwgfCB1bmRlZmluZWQsXG5cdFx0c0NvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0b1JvdXRlcjogUm91dGVyXG5cdCk6IHN0cmluZyB7XG5cdFx0bGV0IHNEZWZhdWx0Q3JlYXRlSGFzaCA9IG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSA/IG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdIDogXCJjcmVhdGVcIjtcblx0XHRsZXQgc0hhc2ggPSBcIlwiO1xuXG5cdFx0c0RlZmF1bHRDcmVhdGVIYXNoID1cblx0XHRcdHNEZWZhdWx0Q3JlYXRlSGFzaC5pbmNsdWRlcyhcIjpcIikgJiYgc0RlZmF1bHRDcmVhdGVIYXNoLmxlbmd0aCA+IHNEZWZhdWx0Q3JlYXRlSGFzaC5pbmRleE9mKFwiOlwiKSArIDFcblx0XHRcdFx0PyBzRGVmYXVsdENyZWF0ZUhhc2guc3Vic3RyaW5nKDAsIHNEZWZhdWx0Q3JlYXRlSGFzaC5pbmRleE9mKFwiOlwiKSlcblx0XHRcdFx0OiBcImNyZWF0ZVwiO1xuXHRcdHNIYXNoID0gYCR7c0NvbnRleHRQYXRoLnN1YnN0cmluZygxKX0oLi4uKT9pLWFjdGlvbj0ke3NEZWZhdWx0Q3JlYXRlSGFzaH1gO1xuXHRcdGlmIChvUm91dGVyLmdldFJvdXRlSW5mb0J5SGFzaChzSGFzaCkpIHtcblx0XHRcdHJldHVybiBzSGFzaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBObyByb3V0ZSBtYXRjaCBmb3IgY3JlYXRpbmcgYSBuZXcgJHtzQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpfWApO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVmVyaWZpZXMgd2hldGhlciB0aGUgZW50aXR5IGluIHRoZSBnaXZlbiBjb250ZXh0IHBhdGggaXMgZWRpdGFibGUgYnkgbG9va2luZyBhdCB0aGUgZm9sbG93aW5nIGFubm90YXRpb25zOlxuXHQgKlxuXHQgKiAtIEBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBvZiB0aGUgZWRpdCBhY3Rpb25cblx0ICogLSBAVUkuVXBkYXRlSGlkZGVuXG5cdCAqXG5cdCAqIE9ubHkgc3RhdGljIHZhbHVlcyAodHJ1ZS9mYWxzZSkgYXJlIGNvbnNpZGVyZWQgaGVyZSBhcyB3ZSBkb24ndCBoYXZlIHRoZSBhY3R1YWwgYmluZGluZyBjb250ZXh0IHRvIGV2YWx1YXRlIGR5bmFtaWMgYmluZGluZ3MuXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aFxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGVudGl0eSBpcyBlZGl0YWJsZSBvciBub3Rcblx0ICovXG5cdHZlcmlmeUVkaXRBbm5vdGF0aW9uczogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHRQYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBlbnRpdHlTZXRBbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiA9IGF3YWl0IG1ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke2NvbnRleHRQYXRofUBgKTtcblx0XHRjb25zdCB1cGRhdGVIaWRkZW4gPSBlbnRpdHlTZXRBbm5vdGF0aW9ucz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlVwZGF0ZUhpZGRlblwiXTtcblx0XHRsZXQgb3BlcmF0aW9uQXZhaWxhYmxlID0gdHJ1ZTtcblxuXHRcdGlmIChlbnRpdHlTZXRBbm5vdGF0aW9ucz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIl0/LltcIkVkaXRBY3Rpb25cIl0pIHtcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGAke2NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L0VkaXRBY3Rpb25AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3BlcmF0aW9uQXZhaWxhYmxlICE9PSBmYWxzZSAmJiB1cGRhdGVIaWRkZW4gIT09IHRydWU7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFwcFN0YXJ0dXBIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBNkJBLE1BQU1BLGdCQUFnQixHQUFHO0lBQ3hCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx5QkFBeUIsRUFBRSxTQUFBQSxDQUFVQyxTQUFtQixFQUFFQyxrQkFBNEMsRUFBMkI7TUFDaEksSUFBSUMsU0FBUyxHQUFHLElBQUk7TUFDcEIsTUFBTUMsS0FBSyxHQUFHSCxTQUFTLENBQUNJLEdBQUcsQ0FBRUMsSUFBSSxJQUFLO1FBQ3JDLElBQUlKLGtCQUFrQixhQUFsQkEsa0JBQWtCLGVBQWxCQSxrQkFBa0IsQ0FBR0ksSUFBSSxDQUFDLElBQUlKLGtCQUFrQixDQUFDSSxJQUFJLENBQUMsQ0FBQ0MsTUFBTSxLQUFLLENBQUMsRUFBRTtVQUN4RSxPQUFPO1lBQUVELElBQUk7WUFBRUUsS0FBSyxFQUFFTixrQkFBa0IsQ0FBQ0ksSUFBSSxDQUFDLENBQUMsQ0FBQztVQUFZLENBQUM7UUFDOUQsQ0FBQyxNQUFNO1VBQ047VUFDQUgsU0FBUyxHQUFHLEtBQUs7VUFDakIsT0FBTztZQUFFRyxJQUFJO1lBQUVFLEtBQUssRUFBRTtVQUFHLENBQUM7UUFDM0I7TUFDRCxDQUFDLENBQUM7TUFFRixPQUFPTCxTQUFTLEdBQUdDLEtBQUssR0FBR0ssU0FBUztJQUNyQyxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MscUJBQXFCLEVBQUUsU0FBQUEsQ0FBVU4sS0FBa0IsRUFBRU8sVUFBbUIsRUFBRUMsVUFBMEIsRUFBVTtNQUM3RyxNQUFNQyxvQkFBb0IsR0FBR0MsV0FBVyxDQUFDQyx3QkFBd0IsQ0FBQ0gsVUFBVSxDQUFDO01BRTdFLElBQUlJLHFCQUFxQixHQUFHLEtBQUs7TUFDakMsTUFBTUMsUUFBUSxHQUFHYixLQUFLLENBQUNDLEdBQUcs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RWRGLGtCQUFrQixHQUNqQkEsa0JBQWtCLENBQUNHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSUgsa0JBQWtCLENBQUNoSSxNQUFNLEdBQUdnSSxrQkFBa0IsQ0FBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQ2hHd0Isa0JBQWtCLENBQUNJLFNBQVMsQ0FBQyxDQUFDLEVBQUVKLGtCQUFrQixDQUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2hFLFFBQVE7TUFDWjBCLEtBQUssR0FBRyxHQUFHdEQsWUFBWSxDQUFDd0QsU0FBUyxDQUFDLENBQUMsQ0FBQyxrQkFBa0JKLGtCQUFrQixFQUFFO01BQzFFLElBQUlULE9BQU8sQ0FBQ2Msa0JBQWtCLENBQUNILEtBQUssQ0FBQyxFQUFFO1FBQ3RDLE9BQU9BLEtBQUs7TUFDYixDQUFDLE1BQU07UUFDTixNQUFNLElBQUlJLEtBQUssQ0FBQyxxQ0FBcUMxRCxZQUFZLENBQUN3RCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUNsRjtJQUNELENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NHLHFCQUFxQixFQUFFLGVBQUFBLENBQWdCdEcsV0FBbUIsRUFBRXVHLFNBQXlCLEVBQW9CO01BQUEsSUFBQUMscUJBQUE7TUFDeEcsTUFBTUMsb0JBQWtELEdBQUcsTUFBTUYsU0FBUyxDQUFDdkIsYUFBYSxDQUFDLEdBQUdoRixXQUFXLEdBQUcsQ0FBQztNQUMzRyxNQUFNMEcsWUFBWSxHQUFHRCxvQkFBb0IsYUFBcEJBLG9CQUFvQix1QkFBcEJBLG9CQUFvQixDQUFHLDBDQUEwQyxDQUFDO01BQ3ZGLElBQUlFLGtCQUFrQixHQUFHLElBQUk7TUFFN0IsSUFBSUYsb0JBQW9CLGFBQXBCQSxvQkFBb0IsZ0JBQUFELHFCQUFBLEdBQXBCQyxvQkFBb0IsQ0FBRywyQ0FBMkMsQ0FBQyxjQUFBRCxxQkFBQSxlQUFuRUEscUJBQUEsQ0FBc0UsWUFBWSxDQUFDLEVBQUU7UUFDeEZHLGtCQUFrQixHQUFHSixTQUFTLENBQUN4RyxTQUFTLENBQ3ZDLEdBQUdDLFdBQVcsMkZBQ2YsQ0FBQztNQUNGO01BRUEsT0FBTzJHLGtCQUFrQixLQUFLLEtBQUssSUFBSUQsWUFBWSxLQUFLLElBQUk7SUFDN0Q7RUFDRCxDQUFDO0VBQUMsT0FFYW5KLGdCQUFnQjtBQUFBIiwiaWdub3JlTGlzdCI6W119
394
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBTdGFydHVwSGVscGVyIiwiX2dldEtleXNGcm9tU3RhcnR1cFBhcmFtcyIsImFLZXlOYW1lcyIsIm9TdGFydHVwUGFyYW1ldGVycyIsImJBbGxGb3VuZCIsImFLZXlzIiwibWFwIiwibmFtZSIsImxlbmd0aCIsInZhbHVlIiwidW5kZWZpbmVkIiwiX2NyZWF0ZUZpbHRlckZyb21LZXlzIiwiYkRyYWZ0TW9kZSIsIm9NZXRhTW9kZWwiLCJiRmlsdGVyQ2FzZVNlbnNpdGl2ZSIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiYkZpbHRlck9uQWN0aXZlRW50aXR5IiwiYUZpbHRlcnMiLCJrZXkiLCJGaWx0ZXIiLCJwYXRoIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiY2FzZVNlbnNpdGl2ZSIsIm9EcmFmdEZpbHRlciIsImZpbHRlcnMiLCJhbmQiLCJwdXNoIiwiX3Nhbml0aXplS2V5cyIsImtleXMiLCJlbnRpdHlUeXBlIiwiZm9yRWFjaCIsInByb3BlcnR5VHlwZSIsIiRUeXBlIiwidHJpbSIsIm1hdGNoIiwiZXhlYyIsIl9yZXF1ZXN0T2JqZWN0c0Zyb21QYXJhbWV0ZXJzIiwiYVN0YXJ0dXBQYWdlcyIsIm9Nb2RlbCIsImFDb250ZXh0UHJvbWlzZXMiLCJwYWdlSW5mbyIsImdldE1ldGFNb2RlbCIsImdldE9iamVjdCIsImNvbnRleHRQYXRoIiwidGVjaG5pY2FsS2V5cyIsIlNlbWFudGljS2V5SGVscGVyIiwiZ2V0UGF0aENvbnRlbnQiLCJjb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNlbWFudGljS2V5cyIsIm9GaWx0ZXIiLCJkcmFmdE1vZGUiLCJvTGlzdEJpbmQiLCJiaW5kTGlzdCIsIiRzZWxlY3QiLCJqb2luIiwicmVxdWVzdENvbnRleHRzIiwiYWxsIiwiX2dldFJlYWNoYWJsZVBhZ2VJbmZvRnJvbVJvdXRlIiwib1JvdXRlIiwib01hbmlmZXN0Um91dGluZyIsIl9vTWFuaWZlc3RSb3V0aW5nJHRhciIsIl9vVGFyZ2V0JG9wdGlvbnMiLCJfb1RhcmdldCRvcHRpb25zJHNldHQiLCJfb1RhcmdldCRvcHRpb25zMiIsIl9vVGFyZ2V0JG9wdGlvbnMyJHNldCIsIl9vVGFyZ2V0JG9wdGlvbnMzIiwiX29UYXJnZXQkb3B0aW9uczMkc2V0Iiwic1BhdHRlcm4iLCJwYXR0ZXJuIiwicmVwbGFjZSIsImVuZHNXaXRoIiwic1RhcmdldE5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJ0YXJnZXQiLCJvVGFyZ2V0IiwidGFyZ2V0cyIsImFQYXR0ZXJuU2VnbWVudHMiLCJzcGxpdCIsInBhZ2VMZXZlbCIsIm9wdGlvbnMiLCJzZXR0aW5ncyIsImFsbG93RGVlcExpbmtpbmciLCJzQ29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtZXRhQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldEVudGl0eVNldCIsIm9FbnRpdHlUeXBlIiwiYVNlbWFudGljS2V5TmFtZXMiLCJhU2VtYW50aWNrS2V5cyIsInNlbUtleSIsIiRQcm9wZXJ0eVBhdGgiLCJhVGVjaG5pY2FsS2V5cyIsIl9nZXRSZWFjaGFibGVQYWdlcyIsImFSb3V0ZXMiLCJyb3V0ZXMiLCJtUGFnZXNCeUxldmVsIiwib1BhZ2VJbmZvIiwiYVJlYWNoYWJsZVBhZ2VzIiwibGV2ZWwiLCJfZ2V0U3RhcnR1cFBhZ2VzRnJvbVN0YXJ0dXBQYXJhbXMiLCJyZXN1bHQiLCJjdXJyZW50IiwiZmluZFJlY3Vyc2l2ZSIsImFDdXJyZW50TGV2ZWxQYWdlcyIsImxhc3RQYWdlIiwibmV4dFBhZ2UiLCJpbmRleE9mIiwicG9wIiwic2xpY2UiLCJfZ2V0RGVlcExpbmtPYmplY3QiLCJhQ29udGV4dHMiLCJoYXNoIiwib0NvbnRleHQiLCJnZXRQYXRoIiwiZ2V0RGVlcExpbmtTdGFydHVwSGFzaCIsInJlcXVlc3RPYmplY3QiLCJzdGFydHVwUGFnZXMiLCJhbGxDb250ZXh0cyIsImNvbnRleHRzRm9yU3RhcnR1cCIsImZvdW5kQ29udGV4dHMiLCJnZXRDcmVhdGVTdGFydHVwSGFzaCIsIm9Sb3V0ZXIiLCJ0aGVuIiwib0VudGl0eVNldEFubm90YXRpb25zIiwic01ldGFQYXRoIiwiYkNyZWF0YWJsZSIsImJOZXdBY3Rpb25PcGVyYXRpb25BdmFpbGFibGUiLCJvSW5zZXJ0UmVzdHJpY3Rpb25zIiwiSW5zZXJ0YWJsZSIsImdldERlZmF1bHRDcmVhdGVIYXNoIiwic0RlZmF1bHRDcmVhdGVIYXNoIiwicHJlZmVycmVkTW9kZSIsInNIYXNoIiwiaW5jbHVkZXMiLCJzdWJzdHJpbmciLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJFcnJvciIsInZlcmlmeUVkaXRBbm5vdGF0aW9ucyIsIm1ldGFNb2RlbCIsIl9lbnRpdHlTZXRBbm5vdGF0aW9ucyIsImVudGl0eVNldEFubm90YXRpb25zIiwidXBkYXRlSGlkZGVuIiwib3BlcmF0aW9uQXZhaWxhYmxlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBTdGFydHVwSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0dXBQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nQ29uZmlndXJhdGlvbiwgUm91dGluZ1JvdXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV4cGFuZFBhdGhUeXBlLCBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwiLi9TZW1hbnRpY0tleUhlbHBlclwiO1xuXG50eXBlIFZhbHVlZEtleSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxudHlwZSBQYWdlSW5mbyA9IHtcblx0cGF0dGVybjogc3RyaW5nO1xuXHRjb250ZXh0UGF0aDogc3RyaW5nO1xuXHRkcmFmdE1vZGU6IGJvb2xlYW47XG5cdHRlY2huaWNhbEtleXM6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkO1xuXHRzZW1hbnRpY0tleXM6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkO1xuXHR0YXJnZXQ6IHN0cmluZztcblx0cGFnZUxldmVsOiBudW1iZXI7XG59O1xuXG5jb25zdCBBcHBTdGFydHVwSGVscGVyID0ge1xuXHQvKipcblx0ICogUmV0cmlldmVzIGEgc2V0IG9mIGtleSB2YWx1ZXMgZnJvbSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBhS2V5TmFtZXMgVGhlIGFycmF5IG9mIGtleSBuYW1lc1xuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFpcnMgXFx7bmFtZSwgdmFsdWVcXH0gaWYgYWxsIGtleSB2YWx1ZXMgY291bGQgYmUgZm91bmQgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVycywgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0X2dldEtleXNGcm9tU3RhcnR1cFBhcmFtczogZnVuY3Rpb24gKGFLZXlOYW1lczogc3RyaW5nW10sIG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsKTogVmFsdWVkS2V5W10gfCB1bmRlZmluZWQge1xuXHRcdGxldCBiQWxsRm91bmQgPSB0cnVlO1xuXHRcdGNvbnN0IGFLZXlzID0gYUtleU5hbWVzLm1hcCgobmFtZSkgPT4ge1xuXHRcdFx0aWYgKG9TdGFydHVwUGFyYW1ldGVycz8uW25hbWVdICYmIG9TdGFydHVwUGFyYW1ldGVyc1tuYW1lXS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0cmV0dXJuIHsgbmFtZSwgdmFsdWU6IG9TdGFydHVwUGFyYW1ldGVyc1tuYW1lXVswXSBhcyBzdHJpbmcgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEEgdW5pcXVlIGtleSB2YWx1ZSBjb3VsZG4ndCBiZSBmb3VuZCBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRcdGJBbGxGb3VuZCA9IGZhbHNlO1xuXHRcdFx0XHRyZXR1cm4geyBuYW1lLCB2YWx1ZTogXCJcIiB9O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGJBbGxGb3VuZCA/IGFLZXlzIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZmlsdGVyIGZyb20gYSBsaXN0IG9mIGtleSB2YWx1ZXMuXG5cdCAqIEBwYXJhbSBhS2V5cyBBcnJheSBvZiBzZW1hbnRpYyBrZXlzIG9yIHRlY2huaWNhbCBrZXlzICh3aXRoIHZhbHVlcylcblx0ICogQHBhcmFtIGJEcmFmdE1vZGUgVHJ1ZSBpZiB0aGUgZW50aXR5IHN1cHBvcnRzIGRyYWZ0IG1vZGVcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlsdGVyXG5cdCAqL1xuXHRfY3JlYXRlRmlsdGVyRnJvbUtleXM6IGZ1bmN0aW9uIChhS2V5czogVmFsdWVkS2V5W10sIGJEcmFmdE1vZGU6IEJvb2xlYW4sIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogRmlsdGVyIHtcblx0XHRjb25zdCBiRmlsdGVyQ2FzZVNlbnNpdGl2ZSA9IE1vZGVsSGVscGVyLmlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShvTWV0YU1vZGVsKTtcblxuXHRcdGxldCBiRmlsdGVyT25BY3RpdmVFbnRpdHkgPSBmYWxzZTtcblx0XHRjb25zdCBhRmlsdGVycyA9IGFLZXlzLm1hcCgoa2V5KSA9PiB7XG5cdFx0XHRpZiAoa2V5Lm5hbWUgPT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRiRmlsdGVyT25BY3RpdmVFbnRpdHkgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiBrZXkubmFtZSxcblx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHR2YWx1ZTE6IGtleS52YWx1ZSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogYkZpbHRlckNhc2VTZW5zaXRpdmVcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGlmIChiRHJhZnRNb2RlICYmICFiRmlsdGVyT25BY3RpdmVFbnRpdHkpIHtcblx0XHRcdGNvbnN0IG9EcmFmdEZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBbbmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIFwiRVFcIiwgZmFsc2UpLCBuZXcgRmlsdGVyKFwiU2libGluZ0VudGl0eS9Jc0FjdGl2ZUVudGl0eVwiLCBcIkVRXCIsIG51bGwpXSxcblx0XHRcdFx0YW5kOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0XHRhRmlsdGVycy5wdXNoKG9EcmFmdEZpbHRlcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoYUZpbHRlcnMsIHRydWUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNYWtlcyBzdXJlIGtleSB2YWx1ZXMgaGF2ZSB0aGUgY29ycmVjdCBmb3JtYXQuXG5cdCAqIFRoaXMgaXMgdG8gaGFuZGxlIHNwZWNpYWwgY2FzZXMsIGZvciBleGFtcGxlLCB3aGVyZSBCb29sZWFuIHZhbHVlcyBhcmUgJ1gnIG9yICcnLCBvciBndWlkIHZhbHVlcyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiBndWlkJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcuXCIuXG5cdCAqIEBwYXJhbSBrZXlzXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlXG5cdCAqL1xuXHRfc2FuaXRpemVLZXlzOiBmdW5jdGlvbiAoa2V5czogVmFsdWVkS2V5W10sIGVudGl0eVR5cGU6IFJlY29yZDxzdHJpbmcsIHsgJFR5cGU6IHN0cmluZyB9Pik6IHZvaWQge1xuXHRcdGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBlbnRpdHlUeXBlW2tleS5uYW1lXS4kVHlwZTtcblx0XHRcdHN3aXRjaCAocHJvcGVydHlUeXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0XHRcdGlmIChrZXkudmFsdWUgIT09IFwidHJ1ZVwiICYmIGtleS52YWx1ZSAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgdmFsdWUgaXMgbmVpdGhlciBcInRydWVcIiBub3IgXCJmYWxzZVwiLCBpdCdzIGNvbnNpZGVyZWQgYXMgZmFsc2UgaWYgaXQgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlcyAoZS5nLiB0byBoYW5kbGUgJ1gnLycnIGZvciB0cnVlL2ZhbHNlIHZhbHVlcylcblx0XHRcdFx0XHRcdGtleS52YWx1ZSA9IGtleS52YWx1ZS50cmltKCkubGVuZ3RoID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJFZG0uR3VpZFwiOiB7XG5cdFx0XHRcdFx0Y29uc3QgbWF0Y2ggPSAvWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9Ly5leGVjKGtleS52YWx1ZSk7XG5cdFx0XHRcdFx0a2V5LnZhbHVlID0gbWF0Y2ggPyBtYXRjaFswXSA6IGtleS52YWx1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogTG9hZHMgYWxsIGNvbnRleHRzIGZvciBhIGxpc3Qgb2YgcGFnZSBpbmZvcy5cblx0ICogQHBhcmFtIGFTdGFydHVwUGFnZXMgVGhlIGxpc3Qgb2YgcGFnZSBpbmZvc1xuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGNvbnRleHRzXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSBmb3IgYWxsIGNvbnRleHRzXG5cdCAqL1xuXHRfcmVxdWVzdE9iamVjdHNGcm9tUGFyYW1ldGVyczogYXN5bmMgZnVuY3Rpb24gKGFTdGFydHVwUGFnZXM6IFBhZ2VJbmZvW10sIG9Nb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8Q29udGV4dFtdW10+IHtcblx0XHQvLyBMb2FkIHRoZSByZXNwZWN0aXZlIG9iamVjdHMgZm9yIGFsbCBvYmplY3QgcGFnZXMgZm91bmQgaW4gYUV4dGVybmFsbHlOYXZpZ2FibGVQYWdlc1xuXHRcdGNvbnN0IGFDb250ZXh0UHJvbWlzZXMgPSBhU3RhcnR1cFBhZ2VzLm1hcChhc3luYyAocGFnZUluZm8pID0+IHtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KGAke3BhZ2VJbmZvLmNvbnRleHRQYXRofS9gKTtcblx0XHRcdGlmIChwYWdlSW5mby50ZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdHRoaXMuX3Nhbml0aXplS2V5cyhwYWdlSW5mby50ZWNobmljYWxLZXlzLCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0Ly8gQ3JlYXRlIGEgY29udGV4dCB3aXRoIHRoZSBwcm9wZXIgcGF0aFxuXHRcdFx0XHRjb25zdCBwYXRoID0gYCR7cGFnZUluZm8uY29udGV4dFBhdGh9KCR7U2VtYW50aWNLZXlIZWxwZXIuZ2V0UGF0aENvbnRlbnQocGFnZUluZm8udGVjaG5pY2FsS2V5cywgZW50aXR5VHlwZSl9KWA7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHQgPSBvTW9kZWwuYmluZENvbnRleHQocGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW2NvbnRleHRdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFLZXlzID0gcGFnZUluZm8uc2VtYW50aWNLZXlzID8/IFtdO1xuXHRcdFx0XHR0aGlzLl9zYW5pdGl6ZUtleXMoYUtleXMsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRjb25zdCBvRmlsdGVyID0gdGhpcy5fY3JlYXRlRmlsdGVyRnJvbUtleXMoYUtleXMsIHBhZ2VJbmZvLmRyYWZ0TW9kZSwgb01vZGVsLmdldE1ldGFNb2RlbCgpKTtcblxuXHRcdFx0XHQvLyBvbmx5IHJlcXVlc3QgYSBtaW5pbXVtIG9mIGZpZWxkcyB0byBib29zdCBiYWNrZW5kIHBlcmZvcm1hbmNlIHNpbmNlIHRoaXMgaXMgb25seSB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBleGlzdHNcblx0XHRcdFx0Y29uc3Qgb0xpc3RCaW5kID0gb01vZGVsLmJpbmRMaXN0KHBhZ2VJbmZvLmNvbnRleHRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb0ZpbHRlciwge1xuXHRcdFx0XHRcdCRzZWxlY3Q6IGFLZXlzXG5cdFx0XHRcdFx0XHQubWFwKChrZXkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleS5uYW1lO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5qb2luKFwiLFwiKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG9MaXN0QmluZC5yZXF1ZXN0Q29udGV4dHMoMCwgMik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYUNvbnRleHRQcm9taXNlcyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBQYWdlSW5mbyBmcm9tIGEgcm91dGUgaWYgaXQncyByZWFjaGFibGUgZnJvbSB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gb1JvdXRlIFRoZSByb3V0ZVxuXHQgKiBAcGFyYW0gb01hbmlmZXN0Um91dGluZyBUaGUgYXBwIG1hbmlmZXN0IHJvdXRpbmcgc2VjdGlvblxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIGFwcCBtZXRhbW9kZWxcblx0ICogQHJldHVybnMgQSBwYWdlIGluZm8gaWYgdGhlIHBhZ2UgaXMgcmVhY2hhYmxlLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRfZ2V0UmVhY2hhYmxlUGFnZUluZm9Gcm9tUm91dGU6IGZ1bmN0aW9uIChcblx0XHRvUm91dGU6IFJvdXRpbmdSb3V0ZSxcblx0XHRvTWFuaWZlc3RSb3V0aW5nOiBSb3V0aW5nQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCxcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQYWdlSW5mbyB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gUmVtb3ZlIHRyYWlsaW5nICc6P3F1ZXJ5OicgYW5kICcvJ1xuXHRcdGxldCBzUGF0dGVybjogc3RyaW5nID0gb1JvdXRlLnBhdHRlcm4hLnJlcGxhY2UoXCI6P3F1ZXJ5OlwiLCBcIlwiKTtcblx0XHRzUGF0dGVybiA9IHNQYXR0ZXJuLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcblxuXHRcdGlmICghc1BhdHRlcm4gfHwgIXNQYXR0ZXJuLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0Ly8gSWdub3JlIGxldmVsLTAgcm91dGVzIChMaXN0UmVwb3J0KSBvciByb3V0ZXMgY29ycmVzcG9uZGluZyB0byBhIDEtMSByZWxhdGlvbiAobm8ga2V5cyBpbiB0aGUgVVJMIGluIHRoaXMgY2FzZSlcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0c1BhdHRlcm4gPSBzUGF0dGVybi5yZXBsYWNlKC9cXChcXHtbXn1dKlxcfVxcKS9nLCBcIigjKVwiKTsgLy8gUmVwbGFjZSBrZXlzIHdpdGggI1xuXG5cdFx0Ly8gR2V0IHRoZSByaWdodG1vc3QgdGFyZ2V0IGZvciB0aGlzIHJvdXRlXG5cdFx0Y29uc3Qgc1RhcmdldE5hbWU6IHN0cmluZyA9IEFycmF5LmlzQXJyYXkob1JvdXRlLnRhcmdldCkgPyBvUm91dGUudGFyZ2V0W29Sb3V0ZS50YXJnZXQubGVuZ3RoIC0gMV0gOiBvUm91dGUudGFyZ2V0O1xuXHRcdGNvbnN0IG9UYXJnZXQgPSBvTWFuaWZlc3RSb3V0aW5nPy50YXJnZXRzPy5bc1RhcmdldE5hbWVdO1xuXG5cdFx0Y29uc3QgYVBhdHRlcm5TZWdtZW50cyA9IHNQYXR0ZXJuLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBwYWdlTGV2ZWwgPSBhUGF0dGVyblNlZ21lbnRzLmxlbmd0aCAtIDE7XG5cblx0XHRpZiAocGFnZUxldmVsICE9PSAwICYmIG9UYXJnZXQ/Lm9wdGlvbnM/LnNldHRpbmdzPy5hbGxvd0RlZXBMaW5raW5nICE9PSB0cnVlKSB7XG5cdFx0XHQvLyBUaGUgZmlyc3QgbGV2ZWwgb2Ygb2JqZWN0IHBhZ2UgYWxsb3dzIGRlZXAgbGlua2luZyBieSBkZWZhdWx0LlxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGUgdGFyZ2V0IG11c3QgYWxsb3cgZGVlcCBsaW5raW5nIGV4cGxpY2l0ZWx5IGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRsZXQgc0NvbnRleHRQYXRoID0gXCJcIjtcblx0XHRpZiAob1RhcmdldD8ub3B0aW9ucz8uc2V0dGluZ3M/LmVudGl0eVNldCkge1xuXHRcdFx0c0NvbnRleHRQYXRoID0gYC8ke29UYXJnZXQub3B0aW9ucy5zZXR0aW5ncy5lbnRpdHlTZXR9YDtcblx0XHR9IGVsc2UgaWYgKG9UYXJnZXQ/Lm9wdGlvbnM/LnNldHRpbmdzPy5jb250ZXh0UGF0aCkge1xuXHRcdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG9UYXJnZXQub3B0aW9ucy5zZXR0aW5ncy5jb250ZXh0UGF0aCkhO1xuXHRcdFx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCk7XG5cdFx0XHRpZiAob2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdFx0c0NvbnRleHRQYXRoID0gYC8ke29iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWV9YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIXNDb250ZXh0UGF0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3Qgb0VudGl0eVR5cGUgPSBzQ29udGV4dFBhdGggJiYgb01ldGFNb2RlbC5nZXRPYmplY3QoYC8kRW50aXR5Q29udGFpbmVyJHtzQ29udGV4dFBhdGh9L2ApO1xuXG5cdFx0aWYgKCFvRW50aXR5VHlwZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIHNlbWFudGljIGtleSB2YWx1ZXMgZm9yIHRoZSBlbnRpdHlcblx0XHRjb25zdCBhU2VtYW50aWNLZXlOYW1lczogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPltdID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRgLyRFbnRpdHlDb250YWluZXIke3NDb250ZXh0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleWBcblx0XHQpO1xuXG5cdFx0Y29uc3QgYVNlbWFudGlja0tleXMgPSBhU2VtYW50aWNLZXlOYW1lc1xuXHRcdFx0PyB0aGlzLl9nZXRLZXlzRnJvbVN0YXJ0dXBQYXJhbXMoXG5cdFx0XHRcdFx0YVNlbWFudGljS2V5TmFtZXMubWFwKChzZW1LZXkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBzZW1LZXkuJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnNcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHQvLyBHZXQgdGhlIHRlY2huaWNhbCBrZXlzIG9ubHkgaWYgd2UgY291bGRuJ3QgZmluZCB0aGUgc2VtYW50aWMga2V5IHZhbHVlcywgYW5kIG9uIGZpcnN0IGxldmVsIE9QXG5cdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPVxuXHRcdFx0IWFTZW1hbnRpY2tLZXlzICYmIHBhZ2VMZXZlbCA9PT0gMCA/IHRoaXMuX2dldEtleXNGcm9tU3RhcnR1cFBhcmFtcyhvRW50aXR5VHlwZVtcIiRLZXlcIl0sIG9TdGFydHVwUGFyYW1ldGVycykgOiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoYVNlbWFudGlja0tleXMgPT09IHVuZGVmaW5lZCAmJiBhVGVjaG5pY2FsS2V5cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBXZSBjb3VsZG4ndCBmaW5kIHRoZSBzZW1hbnRpYy90ZWNobmljYWwga2V5cyBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBzdGFydHVwIHBhcmFtZXRlcnMgY29udGFpbiB2YWx1ZXMgZm9yIGFsbCBzZW1hbnRpYyBrZXlzIChvciB0ZWNobmljYWwga2V5cykgLS0+IHdlIGNhbiBzdG9yZSB0aGUgcGFnZSBpbmZvIGluIHRoZSBjb3JyZXNwb25kaW5nIGxldmVsXG5cdFx0Y29uc3QgZHJhZnRNb2RlID1cblx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJEVudGl0eUNvbnRhaW5lciR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YCkgfHxcblx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJEVudGl0eUNvbnRhaW5lciR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlYClcblx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdDogZmFsc2U7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0dGVybjogc1BhdHRlcm4sXG5cdFx0XHRjb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0ZHJhZnRNb2RlLFxuXHRcdFx0dGVjaG5pY2FsS2V5czogYVRlY2huaWNhbEtleXMsXG5cdFx0XHRzZW1hbnRpY0tleXM6IGFTZW1hbnRpY2tLZXlzLFxuXHRcdFx0dGFyZ2V0OiBzVGFyZ2V0TmFtZSxcblx0XHRcdHBhZ2VMZXZlbFxuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYWxsIHBhZ2VzIHRoYXQgYWxsb3cgZGVlcGxpbmsgYW5kIHRoYXQgY2FuIGJlIHJlYWNoZWQgdXNpbmcgdGhlIHN0YXJ0dXAgcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIHJvdXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgbWV0YW1vZGVsXG5cdCAqIEByZXR1cm5zIFRoZSByZWFjaGFibGUgcGFnZXNcblx0ICovXG5cdF9nZXRSZWFjaGFibGVQYWdlczogZnVuY3Rpb24gKFxuXHRcdG9NYW5pZmVzdFJvdXRpbmc6IFJvdXRpbmdDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsLFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsXG5cdCk6IFBhZ2VJbmZvW11bXSB7XG5cdFx0Y29uc3QgYVJvdXRlczogUm91dGluZ1JvdXRlW10gPSBvTWFuaWZlc3RSb3V0aW5nPy5yb3V0ZXMgPz8gW107XG5cdFx0Y29uc3QgbVBhZ2VzQnlMZXZlbDogUmVjb3JkPG51bWJlciwgUGFnZUluZm9bXT4gPSB7fTtcblxuXHRcdGFSb3V0ZXMuZm9yRWFjaCgob1JvdXRlKSA9PiB7XG5cdFx0XHRjb25zdCBvUGFnZUluZm8gPSB0aGlzLl9nZXRSZWFjaGFibGVQYWdlSW5mb0Zyb21Sb3V0ZShvUm91dGUsIG9NYW5pZmVzdFJvdXRpbmcsIG9TdGFydHVwUGFyYW1ldGVycywgb01ldGFNb2RlbCk7XG5cblx0XHRcdGlmIChvUGFnZUluZm8pIHtcblx0XHRcdFx0aWYgKCFtUGFnZXNCeUxldmVsW29QYWdlSW5mby5wYWdlTGV2ZWxdKSB7XG5cdFx0XHRcdFx0bVBhZ2VzQnlMZXZlbFtvUGFnZUluZm8ucGFnZUxldmVsXSA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1QYWdlc0J5TGV2ZWxbb1BhZ2VJbmZvLnBhZ2VMZXZlbF0ucHVzaChvUGFnZUluZm8pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gQSBwYWdlIGlzIHJlYWNoYWJsZSBvbmx5IGlmIGFsbCBpdHMgcGFyZW50cyBhcmUgYWxzbyByZWFjaGFibGVcblx0XHQvLyBTbyBpZiB3ZSBjb3VsZG4ndCBmaW5kIGFueSBwYWdlcyBmb3IgYSBnaXZlbiBsZXZlbCwgYWxsIHBhZ2VzIHdpdGggYSBoaWdoZXIgbGV2ZWwgd29uJ3QgYmUgcmVhY2hhYmxlIGFueXdheVxuXHRcdGNvbnN0IGFSZWFjaGFibGVQYWdlczogUGFnZUluZm9bXVtdID0gW107XG5cdFx0bGV0IGxldmVsID0gMDtcblx0XHR3aGlsZSAobVBhZ2VzQnlMZXZlbFtsZXZlbF0pIHtcblx0XHRcdGFSZWFjaGFibGVQYWdlcy5wdXNoKG1QYWdlc0J5TGV2ZWxbbGV2ZWxdKTtcblx0XHRcdGxldmVsKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFSZWFjaGFibGVQYWdlcztcblx0fSxcblxuXHQvKipcblx0ICogR2V0IHRoZSBsaXN0IG9mIHN0YXJ0dXAgcGFnZXMuXG5cdCAqIEBwYXJhbSBvTWFuaWZlc3RSb3V0aW5nIFRoZSByb3V0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGFwcCBtYW5pZmVzdFxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdGFydHVwIHBhZ2UgaW5mb3Ncblx0ICovXG5cdF9nZXRTdGFydHVwUGFnZXNGcm9tU3RhcnR1cFBhcmFtczogZnVuY3Rpb24gKFxuXHRcdG9NYW5pZmVzdFJvdXRpbmc6IFJvdXRpbmdDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsLFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsXG5cdCk6IFBhZ2VJbmZvW10ge1xuXHRcdC8vIEZpbmQgYWxsIHBhZ2VzIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2l0aCB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0Y29uc3QgYVJlYWNoYWJsZVBhZ2VzID0gdGhpcy5fZ2V0UmVhY2hhYmxlUGFnZXMob01hbmlmZXN0Um91dGluZywgb1N0YXJ0dXBQYXJhbWV0ZXJzLCBvTWV0YU1vZGVsKTtcblxuXHRcdGlmIChhUmVhY2hhYmxlUGFnZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Ly8gRmluZCB0aGUgbG9uZ2VzdCBzZXF1ZW5jZSBvZiBwYWdlcyB0aGF0IGNhbiBiZSByZWFjaGVkIChyZWN1cnNpdmVseSlcblx0XHRsZXQgcmVzdWx0OiBQYWdlSW5mb1tdID0gW107XG5cdFx0Y29uc3QgY3VycmVudDogUGFnZUluZm9bXSA9IFtdO1xuXG5cdFx0ZnVuY3Rpb24gZmluZFJlY3Vyc2l2ZShsZXZlbDogbnVtYmVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCBhQ3VycmVudExldmVsUGFnZXMgPSBhUmVhY2hhYmxlUGFnZXNbbGV2ZWxdO1xuXHRcdFx0Y29uc3QgbGFzdFBhZ2UgPSBjdXJyZW50Lmxlbmd0aCA/IGN1cnJlbnRbY3VycmVudC5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKGFDdXJyZW50TGV2ZWxQYWdlcykge1xuXHRcdFx0XHRhQ3VycmVudExldmVsUGFnZXMuZm9yRWFjaChmdW5jdGlvbiAobmV4dFBhZ2UpIHtcblx0XHRcdFx0XHRpZiAoIWxhc3RQYWdlIHx8IG5leHRQYWdlLnBhdHRlcm4uaW5kZXhPZihsYXN0UGFnZS5wYXR0ZXJuKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Ly8gV2Ugb25seSBjb25zaWRlciBwYWdlcyB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdGhlIHBhZ2UgYXQgdGhlIHByZXZpb3VzIGxldmVsLFxuXHRcdFx0XHRcdFx0Ly8gLS0+IHRoZWlyIHBhdHRlcm4gbXVzdCBiZSB0aGUgcGF0dGVybiBvZiB0aGUgcHJldmlvdXMgcGFnZSB3aXRoIGFub3RoZXIgc2VnbWVudCBhcHBlbmRlZFxuXHRcdFx0XHRcdFx0Y3VycmVudC5wdXNoKG5leHRQYWdlKTtcblx0XHRcdFx0XHRcdGZpbmRSZWN1cnNpdmUobGV2ZWwgKyAxKTtcblx0XHRcdFx0XHRcdGN1cnJlbnQucG9wKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmIChjdXJyZW50Lmxlbmd0aCA+IHJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0cmVzdWx0ID0gY3VycmVudC5zbGljZSgpOyAvLyBXZSBoYXZlIGZvdW5kIGEgc2VxdWVuY2UgbG9uZ2VyIHRoYW4gb3VyIHByZXZpb3VzIGJlc3QgLS0+IHN0b3JlIGl0IGFzIHRoZSBuZXcgbG9uZ2VzdFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZpbmRSZWN1cnNpdmUoMCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBzdGFydHVwIG9iamVjdCBmcm9tIHRoZSBsaXN0IG9mIHBhZ2VzIGFuZCBjb250ZXh0cy5cblx0ICogQHBhcmFtIGFTdGFydHVwUGFnZXMgVGhlIHBhZ2VzXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgVGhlIGNvbnRleHRzXG5cdCAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIGVpdGhlciBhIGhhc2ggb3IgYSBjb250ZXh0IHRvIG5hdmlnYXRlIHRvLCBvciBhbiBlbXB0eSBvYmplY3QgaWYgbm8gZGVlcCBsaW5rIHdhcyBmb3VuZFxuXHQgKi9cblx0X2dldERlZXBMaW5rT2JqZWN0OiBmdW5jdGlvbiAoYVN0YXJ0dXBQYWdlczogUGFnZUluZm9bXSwgYUNvbnRleHRzOiBDb250ZXh0W10pOiB7IGhhc2g/OiBzdHJpbmc7IGNvbnRleHQ/OiBDb250ZXh0IH0ge1xuXHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4geyBjb250ZXh0OiBhQ29udGV4dHNbMF0gfTtcblx0XHR9IGVsc2UgaWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBOYXZpZ2F0aW9uIHRvIGEgZGVlcGVyIGxldmVsIC0tPiB1c2UgdGhlIHBhdHRlcm4gb2YgdGhlIGRlZXBlc3Qgb2JqZWN0IHBhZ2Vcblx0XHRcdC8vIGFuZCByZXBsYWNlIHRoZSBwYXJhbWV0ZXJzIGJ5IHRoZSBJRCBmcm9tIHRoZSBjb250ZXh0c1xuXHRcdFx0bGV0IGhhc2ggPSBhU3RhcnR1cFBhZ2VzW2FTdGFydHVwUGFnZXMubGVuZ3RoIC0gMV0ucGF0dGVybjtcblx0XHRcdGFDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdFx0XHRoYXNoID0gaGFzaC5yZXBsYWNlKFwiKCMpXCIsIGAoJHtvQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIoXCIpWzFdfWApO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB7IGhhc2ggfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyBzdGFydHVwIHBhcmFtZXRlcnMgZm9yIGEgZGVlcGxpbmsgY2FzZSwgZnJvbSBzdGFydHVwIHBhcmFtZXRlcnMgYW5kIHJvdXRpbmcgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBvTWFuaWZlc3RSb3V0aW5nIFRoZSByb3V0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGFwcCBtYW5pZmVzdFxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG9Nb2RlbCBUaGUgT0RhdGEgbW9kZWxcblx0ICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIGEgaGFzaCBvciBhIGNvbnRleHQgdG8gbmF2aWdhdGUgdG8sIG9yIGFuIGVtcHR5IG9iamVjdCBpZiBubyBkZWVwIGxpbmsgd2FzIGZvdW5kXG5cdCAqL1xuXHRnZXREZWVwTGlua1N0YXJ0dXBIYXNoOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b01hbmlmZXN0Um91dGluZzogUm91dGluZ0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwsXG5cdFx0b01vZGVsOiBPRGF0YU1vZGVsXG5cdCk6IFByb21pc2U8eyBoYXNoPzogc3RyaW5nOyBjb250ZXh0PzogQ29udGV4dCB9PiB7XG5cdFx0YXdhaXQgb01vZGVsLmdldE1ldGFNb2RlbCgpLnJlcXVlc3RPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lci9cIik7XG5cblx0XHQvLyBDaGVjayBpZiBzZW1hbnRpYyBrZXlzIGFyZSBwcmVzZW50IGluIHVybCBwYXJhbWV0ZXJzIGZvciBldmVyeSBvYmplY3QgcGFnZSBhdCBlYWNoIGxldmVsXG5cdFx0Y29uc3Qgc3RhcnR1cFBhZ2VzID0gdGhpcy5fZ2V0U3RhcnR1cFBhZ2VzRnJvbVN0YXJ0dXBQYXJhbXMob01hbmlmZXN0Um91dGluZywgb1N0YXJ0dXBQYXJhbWV0ZXJzLCBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpO1xuXG5cdFx0Ly8gTG9hZCB0aGUgY29udGV4dHNcblx0XHRjb25zdCBhbGxDb250ZXh0cyA9IGF3YWl0IHRoaXMuX3JlcXVlc3RPYmplY3RzRnJvbVBhcmFtZXRlcnMoc3RhcnR1cFBhZ2VzLCBvTW9kZWwpO1xuXHRcdGlmIChhbGxDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IGdldCAxIGNvbnRleHQgcGVyIHByb21pc2UsIGFuZCBmbGF0dGVuIHRoZSBhcnJheVxuXHRcdFx0Y29uc3QgY29udGV4dHNGb3JTdGFydHVwOiBDb250ZXh0W10gPSBbXTtcblx0XHRcdGFsbENvbnRleHRzLmZvckVhY2goZnVuY3Rpb24gKGZvdW5kQ29udGV4dHMpIHtcblx0XHRcdFx0aWYgKGZvdW5kQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0Y29udGV4dHNGb3JTdGFydHVwLnB1c2goZm91bmRDb250ZXh0c1swXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gY29udGV4dHNGb3JTdGFydHVwLmxlbmd0aCA9PT0gYWxsQ29udGV4dHMubGVuZ3RoID8gdGhpcy5fZ2V0RGVlcExpbmtPYmplY3Qoc3RhcnR1cFBhZ2VzLCBjb250ZXh0c0ZvclN0YXJ0dXApIDoge307XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgdGhlIG5ldyBoYXNoIGJhc2VkIG9uIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyIHZhbHVlcyAobWFwIHBhcmFtZXRlciBuYW1lIC0+IGFycmF5IG9mIHZhbHVlcylcblx0ICogQHBhcmFtIHNDb250ZXh0UGF0aCBUaGUgY29udGV4dCBwYXRoIGZvciB0aGUgc3RhcnR1cCBvZiB0aGUgYXBwIChnZW5lcmFsbHkgdGhlIHBhdGggdG8gdGhlIG1haW4gZW50aXR5IHNldClcblx0ICogQHBhcmFtIG9Sb3V0ZXIgVGhlIHJvdXRlciBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgbWV0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgY29udGFpbmluZyB0aGUgaGFzaCB0byBuYXZpZ2F0ZSB0bywgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZXJlJ3Mgbm8gbmVlZCB0byBuYXZpZ2F0ZVxuXHQgKi9cblx0Z2V0Q3JlYXRlU3RhcnR1cEhhc2g6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzLFxuXHRcdHNDb250ZXh0UGF0aDogc3RyaW5nLFxuXHRcdG9Sb3V0ZXI6IFJvdXRlcixcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c0NvbnRleHRQYXRofUBgKS50aGVuKChvRW50aXR5U2V0QW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24pID0+IHtcblx0XHRcdGxldCBzTWV0YVBhdGggPSBcIlwiO1xuXHRcdFx0bGV0IGJDcmVhdGFibGUgPSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdICYmXG5cdFx0XHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdW1wiTmV3QWN0aW9uXCJdXG5cdFx0XHQpIHtcblx0XHRcdFx0c01ldGFQYXRoID0gYCR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L05ld0FjdGlvbkBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0b0VudGl0eVNldEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiXSAmJlxuXHRcdFx0XHRvRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCJdW1wiTmV3QWN0aW9uXCJdXG5cdFx0XHQpIHtcblx0XHRcdFx0c01ldGFQYXRoID0gYCR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWQvTmV3QWN0aW9uQE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzTWV0YVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgYk5ld0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNZXRhUGF0aCk7XG5cdFx0XHRcdGlmIChiTmV3QWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdGJDcmVhdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb0luc2VydFJlc3RyaWN0aW9ucyA9IG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluc2VydFJlc3RyaWN0aW9uc1wiXTtcblx0XHRcdFx0aWYgKG9JbnNlcnRSZXN0cmljdGlvbnMgJiYgb0luc2VydFJlc3RyaWN0aW9ucy5JbnNlcnRhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdGJDcmVhdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGJDcmVhdGFibGUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCBzQ29udGV4dFBhdGgsIG9Sb3V0ZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgdGhlIGhhc2ggdG8gY3JlYXRlIGEgbmV3IG9iamVjdC5cblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXIgdmFsdWVzIChtYXAgcGFyYW1ldGVyIG5hbWUgLT4gYXJyYXkgb2YgdmFsdWVzKVxuXHQgKiBAcGFyYW0gc0NvbnRleHRQYXRoIFRoZSBjb250ZXh0IHBhdGggb2YgdGhlIGVudGl0eSBzZXQgdG8gYmUgdXNlZCBmb3IgdGhlIGNyZWF0aW9uXG5cdCAqIEBwYXJhbSBvUm91dGVyIFRoZSByb3V0ZXIgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGhhc2hcblx0ICovXG5cdGdldERlZmF1bHRDcmVhdGVIYXNoOiBmdW5jdGlvbiAoXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwgfCB1bmRlZmluZWQsXG5cdFx0c0NvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0b1JvdXRlcjogUm91dGVyXG5cdCk6IHN0cmluZyB7XG5cdFx0bGV0IHNEZWZhdWx0Q3JlYXRlSGFzaCA9IG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSA/IG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdIDogXCJjcmVhdGVcIjtcblx0XHRsZXQgc0hhc2ggPSBcIlwiO1xuXG5cdFx0c0RlZmF1bHRDcmVhdGVIYXNoID1cblx0XHRcdHNEZWZhdWx0Q3JlYXRlSGFzaC5pbmNsdWRlcyhcIjpcIikgJiYgc0RlZmF1bHRDcmVhdGVIYXNoLmxlbmd0aCA+IHNEZWZhdWx0Q3JlYXRlSGFzaC5pbmRleE9mKFwiOlwiKSArIDFcblx0XHRcdFx0PyBzRGVmYXVsdENyZWF0ZUhhc2guc3Vic3RyaW5nKDAsIHNEZWZhdWx0Q3JlYXRlSGFzaC5pbmRleE9mKFwiOlwiKSlcblx0XHRcdFx0OiBcImNyZWF0ZVwiO1xuXHRcdHNIYXNoID0gYCR7c0NvbnRleHRQYXRoLnN1YnN0cmluZygxKX0oLi4uKT9pLWFjdGlvbj0ke3NEZWZhdWx0Q3JlYXRlSGFzaH1gO1xuXHRcdGlmIChvUm91dGVyLmdldFJvdXRlSW5mb0J5SGFzaChzSGFzaCkpIHtcblx0XHRcdHJldHVybiBzSGFzaDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBObyByb3V0ZSBtYXRjaCBmb3IgY3JlYXRpbmcgYSBuZXcgJHtzQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpfWApO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVmVyaWZpZXMgd2hldGhlciB0aGUgZW50aXR5IGluIHRoZSBnaXZlbiBjb250ZXh0IHBhdGggaXMgZWRpdGFibGUgYnkgbG9va2luZyBhdCB0aGUgZm9sbG93aW5nIGFubm90YXRpb25zOlxuXHQgKlxuXHQgKiAtIEBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBvZiB0aGUgZWRpdCBhY3Rpb25cblx0ICogLSBAVUkuVXBkYXRlSGlkZGVuXG5cdCAqXG5cdCAqIE9ubHkgc3RhdGljIHZhbHVlcyAodHJ1ZS9mYWxzZSkgYXJlIGNvbnNpZGVyZWQgaGVyZSBhcyB3ZSBkb24ndCBoYXZlIHRoZSBhY3R1YWwgYmluZGluZyBjb250ZXh0IHRvIGV2YWx1YXRlIGR5bmFtaWMgYmluZGluZ3MuXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aFxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGVudGl0eSBpcyBlZGl0YWJsZSBvciBub3Rcblx0ICovXG5cdHZlcmlmeUVkaXRBbm5vdGF0aW9uczogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHRQYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBlbnRpdHlTZXRBbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiA9IGF3YWl0IG1ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke2NvbnRleHRQYXRofUBgKTtcblx0XHRjb25zdCB1cGRhdGVIaWRkZW4gPSBlbnRpdHlTZXRBbm5vdGF0aW9ucz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlVwZGF0ZUhpZGRlblwiXTtcblx0XHRsZXQgb3BlcmF0aW9uQXZhaWxhYmxlID0gdHJ1ZTtcblxuXHRcdGlmIChlbnRpdHlTZXRBbm5vdGF0aW9ucz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIl0/LltcIkVkaXRBY3Rpb25cIl0pIHtcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGAke2NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L0VkaXRBY3Rpb25AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3BlcmF0aW9uQXZhaWxhYmxlICE9PSBmYWxzZSAmJiB1cGRhdGVIaWRkZW4gIT09IHRydWU7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFwcFN0YXJ0dXBIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBNkJBLE1BQU1BLGdCQUFnQixHQUFHO0lBQ3hCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx5QkFBeUIsRUFBRSxTQUFBQSxDQUFVQyxTQUFtQixFQUFFQyxrQkFBNEMsRUFBMkI7TUFDaEksSUFBSUMsU0FBUyxHQUFHLElBQUk7TUFDcEIsTUFBTUMsS0FBSyxHQUFHSCxTQUFTLENBQUNJLEdBQUcsQ0FBRUMsSUFBSSxJQUFLO1FBQ3JDLElBQUlKLGtCQUFrQixhQUFsQkEsa0JBQWtCLGVBQWxCQSxrQkFBa0IsQ0FBR0ksSUFBSSxDQUFDLElBQUlKLGtCQUFrQixDQUFDSSxJQUFJLENBQUMsQ0FBQ0MsTUFBTSxLQUFLLENBQUMsRUFBRTtVQUN4RSxPQUFPO1lBQUVELElBQUk7WUFBRUUsS0FBSyxFQUFFTixrQkFBa0IsQ0FBQ0ksSUFBSSxDQUFDLENBQUMsQ0FBQztVQUFZLENBQUM7UUFDOUQsQ0FBQyxNQUFNO1VBQ047VUFDQUgsU0FBUyxHQUFHLEtBQUs7VUFDakIsT0FBTztZQUFFRyxJQUFJO1lBQUVFLEtBQUssRUFBRTtVQUFHLENBQUM7UUFDM0I7TUFDRCxDQUFDLENBQUM7TUFFRixPQUFPTCxTQUFTLEdBQUdDLEtBQUssR0FBR0ssU0FBUztJQUNyQyxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MscUJBQXFCLEVBQUUsU0FBQUEsQ0FBVU4sS0FBa0IsRUFBRU8sVUFBbUIsRUFBRUMsVUFBMEIsRUFBVTtN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
@@ -82,28 +82,54 @@ const AppStartupHelper = {
82
82
  return new Filter(aFilters, true);
83
83
  },
84
84
 
85
+ /**
86
+ * Makes sure key values have the correct format.
87
+ * This is to handle special cases, for example, where Boolean values are 'X' or '', or guid values have the following format: guid'00000000-0000-0000-0000-000000000000'.".
88
+ * @param keys
89
+ * @param entityType
90
+ */
91
+ _sanitizeKeys: function (keys: ValuedKey[], entityType: Record<string, { $Type: string }>): void {
92
+ keys.forEach((key) => {
93
+ const propertyType = entityType[key.name].$Type;
94
+ switch (propertyType) {
95
+ case "Edm.Boolean":
96
+ if (key.value !== "true" && key.value !== "false") {
97
+ // If the value is neither "true" nor "false", it's considered as false if it contains only whitespaces (e.g. to handle 'X'/'' for true/false values)
98
+ key.value = key.value.trim().length ? "true" : "false";
99
+ }
100
+ break;
101
+
102
+ case "Edm.Guid": {
103
+ const match = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/.exec(key.value);
104
+ key.value = match ? match[0] : key.value;
105
+ break;
106
+ }
107
+
108
+ default:
109
+ // Do nothing
110
+ }
111
+ });
112
+ },
113
+
85
114
  /**
86
115
  * Loads all contexts for a list of page infos.
87
116
  * @param aStartupPages The list of page infos
88
117
  * @param oModel The model used to load the contexts
89
- * @param alwaysCheckExistence If true, always check if the object exists, even if semantic keys are present
90
118
  * @returns A Promise for all contexts
91
119
  */
92
- _requestObjectsFromParameters: async function (
93
- aStartupPages: PageInfo[],
94
- oModel: ODataModel,
95
- alwaysCheckExistence: boolean
96
- ): Promise<Context[][]> {
120
+ _requestObjectsFromParameters: async function (aStartupPages: PageInfo[], oModel: ODataModel): Promise<Context[][]> {
97
121
  // Load the respective objects for all object pages found in aExternallyNavigablePages
98
122
  const aContextPromises = aStartupPages.map(async (pageInfo) => {
99
- if (pageInfo.technicalKeys && !alwaysCheckExistence) {
123
+ const entityType = oModel.getMetaModel().getObject(`${pageInfo.contextPath}/`);
124
+ if (pageInfo.technicalKeys) {
125
+ this._sanitizeKeys(pageInfo.technicalKeys, entityType);
100
126
  // Create a context with the proper path
101
- const entityType = oModel.getMetaModel().getObject(`${pageInfo.contextPath}/`);
102
127
  const path = `${pageInfo.contextPath}(${SemanticKeyHelper.getPathContent(pageInfo.technicalKeys, entityType)})`;
103
128
  const context = oModel.bindContext(path).getBoundContext();
104
129
  return Promise.resolve([context]);
105
130
  } else {
106
- const aKeys = pageInfo.semanticKeys || pageInfo.technicalKeys || [];
131
+ const aKeys = pageInfo.semanticKeys ?? [];
132
+ this._sanitizeKeys(aKeys, entityType);
107
133
  const oFilter = this._createFilterFromKeys(aKeys, pageInfo.draftMode, oModel.getMetaModel());
108
134
 
109
135
  // only request a minimum of fields to boost backend performance since this is only used to check if an object exists
@@ -330,18 +356,16 @@ const AppStartupHelper = {
330
356
  },
331
357
 
332
358
  /**
333
- * Calculates startup parameters for a deeplink case, from startup parameters and routing infoirmation.
359
+ * Calculates startup parameters for a deeplink case, from startup parameters and routing information.
334
360
  * @param oManifestRouting The routing information from the app manifest
335
361
  * @param oStartupParameters The startup parameters
336
362
  * @param oModel The OData model
337
- * @param alwaysCheckExistence
338
363
  * @returns An object containing either a hash or a context to navigate to, or an empty object if no deep link was found
339
364
  */
340
365
  getDeepLinkStartupHash: async function (
341
366
  oManifestRouting: RoutingConfiguration | undefined,
342
367
  oStartupParameters: StartupParameters | null,
343
- oModel: ODataModel,
344
- alwaysCheckExistence: boolean
368
+ oModel: ODataModel
345
369
  ): Promise<{ hash?: string; context?: Context }> {
346
370
  await oModel.getMetaModel().requestObject("/$EntityContainer/");
347
371
 
@@ -349,7 +373,7 @@ const AppStartupHelper = {
349
373
  const startupPages = this._getStartupPagesFromStartupParams(oManifestRouting, oStartupParameters, oModel.getMetaModel());
350
374
 
351
375
  // Load the contexts
352
- const allContexts = await this._requestObjectsFromParameters(startupPages, oModel, alwaysCheckExistence);
376
+ const allContexts = await this._requestObjectsFromParameters(startupPages, oModel);
353
377
  if (allContexts.length) {
354
378
  // Make sure we only get 1 context per promise, and flatten the array
355
379
  const contextsForStartup: Context[] = [];
@@ -12,7 +12,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
12
12
  var equal = BindingToolkit.equal;
13
13
  var and = BindingToolkit.and;
14
14
  const UI = {
15
- IsCreateMode: pathInModel("createMode", "ui"),
15
+ IsCreateMode: pathInModel("createMode", "pageInternal"),
16
16
  IsEditable: pathInModel("/isEditable", "ui"),
17
17
  IsTransientBinding: equal(pathInModel("@$ui5.context.isTransient"), true),
18
18
  IsTotal: equal(pathInModel("@$ui5.node.isTotal"), true),
@@ -96,4 +96,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit"], function (BindingToolkit) {
96
96
  _exports.bindingContextPathVisitor = bindingContextPathVisitor;
97
97
  return _exports;
98
98
  }, false);
99
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVSSIsIklzQ3JlYXRlTW9kZSIsInBhdGhJbk1vZGVsIiwiSXNFZGl0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsImVxdWFsIiwiSXNUb3RhbCIsIklzRXhwYW5kZWQiLCJOb2RlTGV2ZWwiLCJJc0luYWN0aXZlIiwiX2V4cG9ydHMiLCJFbnRpdHkiLCJIYXNEcmFmdCIsIkhhc0FjdGl2ZSIsIklzQWN0aXZlIiwiRHJhZnQiLCJJc05ld09iamVjdCIsImFuZCIsIm5vdCIsIkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciIsIm9yIiwiZ2V0U2luZ2xldG9uIiwiY29udmVydGVkVHlwZXMiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJzaW5nbGV0b25zIiwiZmluZCIsInNpbmdsZXRvbiIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwicGF0aCIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJpbmRleE9mIiwicGFydHMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJwcm9wZXJ0eU5hbWUiLCJwb3AiLCJlbnRpdHlTZXROYW1lIiwiam9pbiIsIm5hbWUiLCJsb2NhbFBhdGgiLCJjb25jYXQiLCJwdXNoIiwiYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciIsImJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSIsImJpbmRpbmdQYXJhbWV0ZXJQcmVmaXgiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJpbmRpbmdIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb252ZXJ0ZWRNZXRhZGF0YSwgU2luZ2xldG9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBlcXVhbCwgbm90LCBvciwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcblxuZXhwb3J0IGNvbnN0IFVJID0ge1xuXHRJc0NyZWF0ZU1vZGU6IHBhdGhJbk1vZGVsKFwiY3JlYXRlTW9kZVwiLCBcInVpXCIpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0SXNFZGl0YWJsZTogcGF0aEluTW9kZWwoXCIvaXNFZGl0YWJsZVwiLCBcInVpXCIpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0SXNUcmFuc2llbnRCaW5kaW5nOiBlcXVhbChwYXRoSW5Nb2RlbChcIkAkdWk1LmNvbnRleHQuaXNUcmFuc2llbnRcIiksIHRydWUpLFxuXHRJc1RvdGFsOiBlcXVhbChwYXRoSW5Nb2RlbChcIkAkdWk1Lm5vZGUuaXNUb3RhbFwiKSwgdHJ1ZSksXG5cdElzRXhwYW5kZWQ6IGVxdWFsKHBhdGhJbk1vZGVsKFwiQCR1aTUubm9kZS5pc0V4cGFuZGVkXCIpLCB0cnVlKSxcblx0Tm9kZUxldmVsOiBwYXRoSW5Nb2RlbChcIkAkdWk1Lm5vZGUubGV2ZWxcIiksXG5cdElzSW5hY3RpdmU6IHBhdGhJbk1vZGVsKFwiQCR1aTUuY29udGV4dC5pc0luYWN0aXZlXCIpXG59O1xuXG5leHBvcnQgY29uc3QgRW50aXR5ID0ge1xuXHRIYXNEcmFmdDogcGF0aEluTW9kZWwoXCJIYXNEcmFmdEVudGl0eVwiKSxcblx0SGFzQWN0aXZlOiBwYXRoSW5Nb2RlbChcIkhhc0FjdGl2ZUVudGl0eVwiKSxcblx0SXNBY3RpdmU6IHBhdGhJbk1vZGVsKFwiSXNBY3RpdmVFbnRpdHlcIilcbn07XG5cbmV4cG9ydCBjb25zdCBEcmFmdCA9IHtcblx0SXNOZXdPYmplY3Q6IGFuZChub3QoRW50aXR5Lkhhc0FjdGl2ZSksIG5vdChFbnRpdHkuSXNBY3RpdmUpKSxcblx0SGFzTm9EcmFmdEZvckN1cnJlbnRVc2VyOiBvcihcblx0XHRub3QoRW50aXR5Lkhhc0RyYWZ0KSxcblx0XHRhbmQoRW50aXR5Lkhhc0RyYWZ0LCBub3QocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWVcIikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSlcblx0KVxufTtcblxuLyoqXG4gKiBHZXRzIGEgc2luZ2xldG9uIGJhc2VkIG9uIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZWRUeXBlcyBUaGUgY29udmVydGVkIHR5cGVzXG4gKiBAcGFyYW0gZnVsbHlRdWFsaWZpZWROYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2luZ2xldG9uXG4gKiBAcmV0dXJucyBUaGUgc2luZ2xldG9uIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBnZXRTaW5nbGV0b24oY29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLCBmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBjb252ZXJ0ZWRUeXBlcy5zaW5nbGV0b25zLmZpbmQoKHNpbmdsZXRvbikgPT4gc2luZ2xldG9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZnVsbHlRdWFsaWZpZWROYW1lKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBhZGp1c3Qgc2luZ2xldG9uIHBhdGhzIGluIHRoZSBhbm5vdGF0aW9uLlxuICogVGhlIGFic29sdXRlIHBhdGggdmlhIEVudGl0eUNvbnRhaW5lciBuZWVkcyB0byBiZSBzaG9ydGVuZWQgdG8gL1NpbmdsZXRvbk5hbWUvUHJvcGVydHlOYW1lLlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggY29uZmlndXJlZCBpbiB0aGUgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBhcnJheSBvZiB2aXNpdGVkIG5hdmlnYXRpb24gcGF0aHNcbiAqIEByZXR1cm5zIFRoZSBhZGp1c3RlZCBwYXRoIGZvciB0aGUgcmVmZXJlbmNlIG9mIHRoZSBzaW5nbGV0b24gcHJvcGVydHksIG90aGVyd2lzZSB0aGUgaW5wdXQgcGF0aCBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjb25zdCBzaW5nbGV0b25QYXRoVmlzaXRvciA9IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSwgdmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHQvLyBEZXRlcm1pbmUgd2hldGhlciB0aGUgcGF0aCBpcyBhYnNvbHV0ZSBhbmQgd2hldGhlciBpdCBwb2ludHMgdG8gYSBzaW5nbGV0b24uXG5cdGlmIChwYXRoLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksXG5cdFx0XHRwcm9wZXJ0eU5hbWUgPSBwYXJ0cy5wb3AoKSxcblx0XHRcdGVudGl0eVNldE5hbWUgPSBwYXJ0cy5qb2luKFwiL1wiKSxcblx0XHRcdHNpbmdsZXRvbiA9IGdldFNpbmdsZXRvbihjb252ZXJ0ZWRUeXBlcywgZW50aXR5U2V0TmFtZSk7XG5cdFx0aWYgKHNpbmdsZXRvbikge1xuXHRcdFx0Ly8gU2V0IHRoZSBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggdG8gYWNjZXNzIHRoZSBzaW5nbGV0b24gcHJvcGVydHlcblx0XHRcdHBhdGggPSBgLyR7c2luZ2xldG9uLm5hbWV9LyR7cHJvcGVydHlOYW1lfWA7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE5vdCBhIHNpbmdsZXRvbiByZWZlcmVuY2UuXG5cdFx0Ly8gUHJlZml4IHRoZSBuYXZpZ2F0aW9uIHBhdGggdG8gdGhlIHByb3BlcnR5IHBhdGhcblx0XHRjb25zdCBsb2NhbFBhdGggPSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLmNvbmNhdCgpO1xuXHRcdGxvY2FsUGF0aC5wdXNoKHBhdGgpO1xuXHRcdHBhdGggPSBsb2NhbFBhdGguam9pbihcIi9cIik7XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGFkanVzdCBwcm9wZXJ0eSBwYXRocyBkZWZpbmVkIGluIHRoZSBiaW5kaW5nIG9mIGFuIGFjdGlvbi5cbiAqXG4gKiBUaGUgYmluZGluZyBwYXJhbWV0ZXIgbmFtZSBuZWVkcyB0byBiZSByZW1vdmVkLiBTaW5nbGV0b24gcGF0aHMgbmVlZCB0byBiZSByZXNvbHZlZC5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGNvbmZpZ3VyZWQgaW4gdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZWRUeXBlcyBDb252ZXJ0ZXJlZCBtZXRhZGF0YVxuICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGJpbmRpbmcgcGFyYW1ldGVyXG4gKiBAcmV0dXJucyBUaGUgYWRqdXN0ZWQgcHJvcGVydHkgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvcihwYXRoOiBzdHJpbmcsIGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSwgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcblx0aWYgKGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSkge1xuXHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJQcmVmaXggPSBgJHtiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWU/LnN1YnN0cmluZyhiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSl9L2A7XG5cdFx0Ly8gU3RyaXAgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG5hbWUgZnJvbSBPcGVyYXRpb25BdmFpbGFibGUgcGF0aFxuXHRcdC8vIEZvciBlLmcuIF9pdC9wcm9wZXJ0eTEgLS0+IHByb3BlcnR5MVxuXHRcdGlmIChwYXRoLnN0YXJ0c1dpdGgoYmluZGluZ1BhcmFtZXRlclByZWZpeCkpIHtcblx0XHRcdHJldHVybiBwYXRoLnN1YnN0cmluZyhiaW5kaW5nUGFyYW1ldGVyUHJlZml4Lmxlbmd0aCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZWRUeXBlcywgW10pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBSU8sTUFBTUEsRUFBRSxHQUFHO0lBQ2pCQyxZQUFZLEVBQUVDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFzQztJQUNsRkMsVUFBVSxFQUFFRCxXQUFXLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBc0M7SUFDakZFLGtCQUFrQixFQUFFQyxLQUFLLENBQUNILFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUN6RUksT0FBTyxFQUFFRCxLQUFLLENBQUNILFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUN2REssVUFBVSxFQUFFRixLQUFLLENBQUNILFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUM3RE0sU0FBUyxFQUFFTixXQUFXLENBQUMsa0JBQWtCLENBQUM7SUFDMUNPLFVBQVUsRUFBRVAsV0FBVyxDQUFDLDBCQUEwQjtFQUNuRCxDQUFDO0VBQUNRLFFBQUEsQ0FBQVYsRUFBQSxHQUFBQSxFQUFBO0VBRUssTUFBTVcsTUFBTSxHQUFHO0lBQ3JCQyxRQUFRLEVBQUVWLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN2Q1csU0FBUyxFQUFFWCxXQUFXLENBQUMsaUJBQWlCLENBQUM7SUFDekNZLFFBQVEsRUFBRVosV0FBVyxDQUFDLGdCQUFnQjtFQUN2QyxDQUFDO0VBQUNRLFFBQUEsQ0FBQUMsTUFBQSxHQUFBQSxNQUFBO0VBRUssTUFBTUksS0FBSyxHQUFHO0lBQ3BC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
99
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVSSIsIklzQ3JlYXRlTW9kZSIsInBhdGhJbk1vZGVsIiwiSXNFZGl0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsImVxdWFsIiwiSXNUb3RhbCIsIklzRXhwYW5kZWQiLCJOb2RlTGV2ZWwiLCJJc0luYWN0aXZlIiwiX2V4cG9ydHMiLCJFbnRpdHkiLCJIYXNEcmFmdCIsIkhhc0FjdGl2ZSIsIklzQWN0aXZlIiwiRHJhZnQiLCJJc05ld09iamVjdCIsImFuZCIsIm5vdCIsIkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciIsIm9yIiwiZ2V0U2luZ2xldG9uIiwiY29udmVydGVkVHlwZXMiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJzaW5nbGV0b25zIiwiZmluZCIsInNpbmdsZXRvbiIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwicGF0aCIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJpbmRleE9mIiwicGFydHMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJwcm9wZXJ0eU5hbWUiLCJwb3AiLCJlbnRpdHlTZXROYW1lIiwiam9pbiIsIm5hbWUiLCJsb2NhbFBhdGgiLCJjb25jYXQiLCJwdXNoIiwiYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciIsImJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSIsImJpbmRpbmdQYXJhbWV0ZXJQcmVmaXgiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJpbmRpbmdIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb252ZXJ0ZWRNZXRhZGF0YSwgU2luZ2xldG9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBlcXVhbCwgbm90LCBvciwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcblxuZXhwb3J0IGNvbnN0IFVJID0ge1xuXHRJc0NyZWF0ZU1vZGU6IHBhdGhJbk1vZGVsKFwiY3JlYXRlTW9kZVwiLCBcInBhZ2VJbnRlcm5hbFwiKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdElzRWRpdGFibGU6IHBhdGhJbk1vZGVsKFwiL2lzRWRpdGFibGVcIiwgXCJ1aVwiKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdElzVHJhbnNpZW50QmluZGluZzogZXF1YWwocGF0aEluTW9kZWwoXCJAJHVpNS5jb250ZXh0LmlzVHJhbnNpZW50XCIpLCB0cnVlKSxcblx0SXNUb3RhbDogZXF1YWwocGF0aEluTW9kZWwoXCJAJHVpNS5ub2RlLmlzVG90YWxcIiksIHRydWUpLFxuXHRJc0V4cGFuZGVkOiBlcXVhbChwYXRoSW5Nb2RlbChcIkAkdWk1Lm5vZGUuaXNFeHBhbmRlZFwiKSwgdHJ1ZSksXG5cdE5vZGVMZXZlbDogcGF0aEluTW9kZWwoXCJAJHVpNS5ub2RlLmxldmVsXCIpLFxuXHRJc0luYWN0aXZlOiBwYXRoSW5Nb2RlbChcIkAkdWk1LmNvbnRleHQuaXNJbmFjdGl2ZVwiKVxufTtcblxuZXhwb3J0IGNvbnN0IEVudGl0eSA9IHtcblx0SGFzRHJhZnQ6IHBhdGhJbk1vZGVsKFwiSGFzRHJhZnRFbnRpdHlcIiksXG5cdEhhc0FjdGl2ZTogcGF0aEluTW9kZWwoXCJIYXNBY3RpdmVFbnRpdHlcIiksXG5cdElzQWN0aXZlOiBwYXRoSW5Nb2RlbChcIklzQWN0aXZlRW50aXR5XCIpXG59O1xuXG5leHBvcnQgY29uc3QgRHJhZnQgPSB7XG5cdElzTmV3T2JqZWN0OiBhbmQobm90KEVudGl0eS5IYXNBY3RpdmUpLCBub3QoRW50aXR5LklzQWN0aXZlKSksXG5cdEhhc05vRHJhZnRGb3JDdXJyZW50VXNlcjogb3IoXG5cdFx0bm90KEVudGl0eS5IYXNEcmFmdCksXG5cdFx0YW5kKEVudGl0eS5IYXNEcmFmdCwgbm90KHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRJc0NyZWF0ZWRCeU1lXCIpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikpXG5cdClcbn07XG5cbi8qKlxuICogR2V0cyBhIHNpbmdsZXRvbiBiYXNlZCBvbiB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUuXG4gKiBAcGFyYW0gY29udmVydGVkVHlwZXMgVGhlIGNvbnZlcnRlZCB0eXBlc1xuICogQHBhcmFtIGZ1bGx5UXVhbGlmaWVkTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNpbmdsZXRvblxuICogQHJldHVybnMgVGhlIHNpbmdsZXRvbiBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2luZ2xldG9uKGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSwgZnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcpOiBTaW5nbGV0b24gfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gY29udmVydGVkVHlwZXMuc2luZ2xldG9ucy5maW5kKChzaW5nbGV0b24pID0+IHNpbmdsZXRvbi5mdWxseVF1YWxpZmllZE5hbWUgPT09IGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gYWRqdXN0IHNpbmdsZXRvbiBwYXRocyBpbiB0aGUgYW5ub3RhdGlvbi5cbiAqIFRoZSBhYnNvbHV0ZSBwYXRoIHZpYSBFbnRpdHlDb250YWluZXIgbmVlZHMgdG8gYmUgc2hvcnRlbmVkIHRvIC9TaW5nbGV0b25OYW1lL1Byb3BlcnR5TmFtZS5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGNvbmZpZ3VyZWQgaW4gdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZWRUeXBlcyBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgYXJyYXkgb2YgdmlzaXRlZCBuYXZpZ2F0aW9uIHBhdGhzXG4gKiBAcmV0dXJucyBUaGUgYWRqdXN0ZWQgcGF0aCBmb3IgdGhlIHJlZmVyZW5jZSBvZiB0aGUgc2luZ2xldG9uIHByb3BlcnR5LCBvdGhlcndpc2UgdGhlIGlucHV0IHBhdGggaXRzZWxmLlxuICovXG5leHBvcnQgY29uc3Qgc2luZ2xldG9uUGF0aFZpc2l0b3IgPSBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Ly8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHBhdGggaXMgYWJzb2x1dGUgYW5kIHdoZXRoZXIgaXQgcG9pbnRzIHRvIGEgc2luZ2xldG9uLlxuXHRpZiAocGF0aC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLFxuXHRcdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCksXG5cdFx0XHRlbnRpdHlTZXROYW1lID0gcGFydHMuam9pbihcIi9cIiksXG5cdFx0XHRzaW5nbGV0b24gPSBnZXRTaW5nbGV0b24oY29udmVydGVkVHlwZXMsIGVudGl0eVNldE5hbWUpO1xuXHRcdGlmIChzaW5nbGV0b24pIHtcblx0XHRcdC8vIFNldCB0aGUgYWJzb2x1dGUgYmluZGluZyBwYXRoIHRvIGFjY2VzcyB0aGUgc2luZ2xldG9uIHByb3BlcnR5XG5cdFx0XHRwYXRoID0gYC8ke3NpbmdsZXRvbi5uYW1lfS8ke3Byb3BlcnR5TmFtZX1gO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBOb3QgYSBzaW5nbGV0b24gcmVmZXJlbmNlLlxuXHRcdC8vIFByZWZpeCB0aGUgbmF2aWdhdGlvbiBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBwYXRoXG5cdFx0Y29uc3QgbG9jYWxQYXRoID0gdmlzaXRlZE5hdmlnYXRpb25QYXRocy5jb25jYXQoKTtcblx0XHRsb2NhbFBhdGgucHVzaChwYXRoKTtcblx0XHRwYXRoID0gbG9jYWxQYXRoLmpvaW4oXCIvXCIpO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBhZGp1c3QgcHJvcGVydHkgcGF0aHMgZGVmaW5lZCBpbiB0aGUgYmluZGluZyBvZiBhbiBhY3Rpb24uXG4gKlxuICogVGhlIGJpbmRpbmcgcGFyYW1ldGVyIG5hbWUgbmVlZHMgdG8gYmUgcmVtb3ZlZC4gU2luZ2xldG9uIHBhdGhzIG5lZWQgdG8gYmUgcmVzb2x2ZWQuXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBjb25maWd1cmVkIGluIHRoZSBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29udmVydGVkVHlwZXMgQ29udmVydGVyZWQgbWV0YWRhdGFcbiAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBiaW5kaW5nIHBhcmFtZXRlclxuICogQHJldHVybnMgVGhlIGFkanVzdGVkIHByb3BlcnR5IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IocGF0aDogc3RyaW5nLCBjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsIGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmIChiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUpIHtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyUHJlZml4ID0gYCR7YmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lPy5zdWJzdHJpbmcoYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpfS9gO1xuXHRcdC8vIFN0cmlwIHRoZSBiaW5kaW5nIHBhcmFtZXRlciBuYW1lIGZyb20gT3BlcmF0aW9uQXZhaWxhYmxlIHBhdGhcblx0XHQvLyBGb3IgZS5nLiBfaXQvcHJvcGVydHkxIC0tPiBwcm9wZXJ0eTFcblx0XHRpZiAocGF0aC5zdGFydHNXaXRoKGJpbmRpbmdQYXJhbWV0ZXJQcmVmaXgpKSB7XG5cdFx0XHRyZXR1cm4gcGF0aC5zdWJzdHJpbmcoYmluZGluZ1BhcmFtZXRlclByZWZpeC5sZW5ndGgpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVkVHlwZXMsIFtdKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQUlPLE1BQU1BLEVBQUUsR0FBRztJQUNqQkMsWUFBWSxFQUFFQyxXQUFXLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBc0M7SUFDNUZDLFVBQVUsRUFBRUQsV0FBVyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQXNDO0lBQ2pGRSxrQkFBa0IsRUFBRUMsS0FBSyxDQUFDSCxXQUFXLENBQUMsMkJBQTJCLENBQUMsRUFBRSxJQUFJLENBQUM7SUFDekVJLE9BQU8sRUFBRUQsS0FBSyxDQUFDSCxXQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBRSxJQUFJLENBQUM7SUFDdkRLLFVBQVUsRUFBRUYsS0FBSyxDQUFDSCxXQUFXLENBQUMsdUJBQXVCLENBQUMsRUFBRSxJQUFJLENBQUM7SUFDN0RNLFNBQVMsRUFBRU4sV0FBVyxDQUFDLGtCQUFrQixDQUFDO0lBQzFDTyxVQUFVLEVBQUVQLFdBQVcsQ0FBQywwQkFBMEI7RUFDbkQsQ0FBQztFQUFDUSxRQUFBLENBQUFWLEVBQUEsR0FBQUEsRUFBQTtFQUVLLE1BQU1XLE1BQU0sR0FBRztJQUNyQkMsUUFBUSxFQUFFVixXQUFXLENBQUMsZ0JBQWdCLENBQUM7SUFDdkNXLFNBQVMsRUFBRVgsV0FBVyxDQUFDLGlCQUFpQixDQUFDO0lBQ3pDWSxRQUFRLEVBQUVaLFdBQVcsQ0FBQyxnQkFBZ0I7RUFDdkMsQ0FBQztFQUFDUSxRQUFBLENBQUFDLE1BQUEsR0FBQUEsTUFBQTtFQUVLLE1BQU1JLEtBQUss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
@@ -3,7 +3,7 @@ import type { BindingToolkitExpression } from "sap/fe/base/BindingToolkit";
3
3
  import { and, equal, not, or, pathInModel } from "sap/fe/base/BindingToolkit";
4
4
 
5
5
  export const UI = {
6
- IsCreateMode: pathInModel("createMode", "ui") as BindingToolkitExpression<boolean>,
6
+ IsCreateMode: pathInModel("createMode", "pageInternal") as BindingToolkitExpression<boolean>,
7
7
  IsEditable: pathInModel("/isEditable", "ui") as BindingToolkitExpression<boolean>,
8
8
  IsTransientBinding: equal(pathInModel("@$ui5.context.isTransient"), true),
9
9
  IsTotal: equal(pathInModel("@$ui5.node.isTotal"), true),