@sapui5/sap.fe.macros 1.142.0 → 1.143.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 (102) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/CollaborativeDraftHandler.js +1 -7
  4. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +0 -6
  5. package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
  6. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  7. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  8. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  9. package/src/sap/fe/macros/Field.js +5 -5
  10. package/src/sap/fe/macros/Field.ts +5 -3
  11. package/src/sap/fe/macros/FooterContent.js +3 -2
  12. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  13. package/src/sap/fe/macros/KPITag.js +6 -6
  14. package/src/sap/fe/macros/KPITag.tsx +5 -5
  15. package/src/sap/fe/macros/MacroAPI.js +2 -2
  16. package/src/sap/fe/macros/MacroAPI.ts +1 -1
  17. package/src/sap/fe/macros/MessageButton.js +3 -3
  18. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  19. package/src/sap/fe/macros/MicroChart.js +3 -2
  20. package/src/sap/fe/macros/MicroChart.tsx +1 -1
  21. package/src/sap/fe/macros/Share.js +7 -7
  22. package/src/sap/fe/macros/Share.tsx +9 -6
  23. package/src/sap/fe/macros/Status.js +6 -5
  24. package/src/sap/fe/macros/Status.tsx +3 -4
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  27. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  28. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  29. package/src/sap/fe/macros/chart/ChartDelegate.js +22 -1
  30. package/src/sap/fe/macros/chart/ChartDelegate.ts +29 -2
  31. package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -2
  32. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -2
  33. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  34. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  35. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  36. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  37. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  38. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  39. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  40. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  41. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +4 -4
  42. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +3 -3
  43. package/src/sap/fe/macros/field/FieldFormatOptions.js +2 -2
  44. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  45. package/src/sap/fe/macros/field/FieldRuntime.js +7 -2
  46. package/src/sap/fe/macros/field/FieldRuntime.ts +7 -1
  47. package/src/sap/fe/macros/filter/FilterUtils.js +31 -5
  48. package/src/sap/fe/macros/filter/FilterUtils.ts +40 -6
  49. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +6 -3
  50. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +5 -1
  51. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +19 -9
  52. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +76 -61
  53. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  54. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  55. package/src/sap/fe/macros/form/FormContainer.block.js +22 -6
  56. package/src/sap/fe/macros/form/FormContainer.block.ts +24 -6
  57. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  58. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  59. package/src/sap/fe/macros/library.js +5 -6
  60. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  61. package/src/sap/fe/macros/messagebundle.properties +6 -0
  62. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  63. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  64. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  65. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  66. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  67. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  68. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  69. package/src/sap/fe/macros/table/Action.js +7 -4
  70. package/src/sap/fe/macros/table/Action.ts +3 -3
  71. package/src/sap/fe/macros/table/Column.js +3 -2
  72. package/src/sap/fe/macros/table/Column.ts +1 -1
  73. package/src/sap/fe/macros/table/MdcTableTemplate.js +6 -9
  74. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +5 -7
  75. package/src/sap/fe/macros/table/Table.block.js +6 -3
  76. package/src/sap/fe/macros/table/Table.block.tsx +13 -3
  77. package/src/sap/fe/macros/table/TableAPI.js +13 -8
  78. package/src/sap/fe/macros/table/TableAPI.ts +10 -3
  79. package/src/sap/fe/macros/table/TableDefinition.js +2 -2
  80. package/src/sap/fe/macros/table/TableDefinition.ts +1 -1
  81. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +3 -1
  82. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +4 -0
  83. package/src/sap/fe/macros/table/TableRuntime.js +24 -12
  84. package/src/sap/fe/macros/table/TableRuntime.ts +27 -11
  85. package/src/sap/fe/macros/table/Utils.js +9 -3
  86. package/src/sap/fe/macros/table/Utils.ts +14 -8
  87. package/src/sap/fe/macros/table/delegates/TableDelegate.js +6 -4
  88. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +6 -5
  89. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  90. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  91. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -5
  92. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +13 -4
  93. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  94. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  95. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +37 -10
  96. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +39 -15
  97. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  98. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  99. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  100. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  101. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  102. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
@@ -257,7 +257,9 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
257
257
  constructor(mSettings?: PropertiesOf<TableAPI> & { id?: string }, ...others: $ControlSettings[]) {
258
258
  super(mSettings, ...others);
259
259
  this.originalTableDefinition = this.tableDefinition;
260
- this.setLayoutData(new FlexItemData({ maxWidth: "100%" }));
260
+ if (!this.getLayoutData()) {
261
+ this.setLayoutData(new FlexItemData({ maxWidth: "100%" }));
262
+ }
261
263
  this.attachStateChangeHandler();
262
264
  this.attachManifestEvents();
263
265
  this.overrideRowPress = this.hasListeners("rowPress");
@@ -794,7 +796,7 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
794
796
  // the corresponding action shall be applied.
795
797
  return this.isContextMenuActive()
796
798
  ? this.getBindingContext("internal")?.getProperty("contextmenu/selectedContexts") ?? []
797
- : this.content.getSelectedContexts();
799
+ : (this.content.getSelectedContexts() as unknown as Context[]);
798
800
  }
799
801
 
800
802
  /**
@@ -1196,6 +1198,11 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
1196
1198
  this.fireEvent("rowPress", oEvent.getParameters());
1197
1199
  }
1198
1200
 
1201
+ @xmlEventHandler()
1202
+ onNoop(): void {
1203
+ // Do nothing, this is used to ensure the table action are fired in responsive table
1204
+ }
1205
+
1199
1206
  isTableRowNavigationPossible(context: Context): boolean {
1200
1207
  // prevent navigation to an empty row
1201
1208
  const emptyRow = context.isInactive() == true && context.isTransient() === true;
@@ -1389,7 +1396,7 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
1389
1396
  ]);
1390
1397
  } catch (error: unknown) {
1391
1398
  MessageToast.show(this.getTranslatedText("M_TABLEDROP_FAILED", [""]));
1392
- Log.error(`The ${action} operation is unsuccessful. ` + (error as Error).message ?? "");
1399
+ Log.error(`The ${action} operation is unsuccessful. ` + ((error as Error).message ?? ""));
1393
1400
  }
1394
1401
  table.setBusy(false);
1395
1402
  internalContext.setProperty(`nodeUpdatesInfo/pastableContexts`, []);
@@ -193,7 +193,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/ManifestSettings", "sap/f
193
193
  ...actions[key],
194
194
  text: action.text,
195
195
  __noWrap: true,
196
- press: "some handler",
196
+ press: "someHandler",
197
197
  // The real handler will be triggered by firing the event on the Action object
198
198
  requiresSelection: action.requiresSelection
199
199
  };
@@ -253,4 +253,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/ManifestSettings", "sap/f
253
253
  }
254
254
  return _exports;
255
255
  }, false);
256
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVUYWJsZURlZmluaXRpb24iLCJ0YWJsZUFQSSIsIm93bmVyIiwiX2dldE93bmVyIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsIm1ldGFQYXRoQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0RnVsbE1ldGFQYXRoIiwiY29udGV4dFBhdGhDb250ZXh0IiwiY29udGV4dFBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaW5pdGlhbENvbnZlcnRlckNvbnRleHQiLCJNYWNyb0FQSSIsImdldENvbnZlcnRlckNvbnRleHQiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJtb2RlbHMiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwidmlzdWFsaXphdGlvblBhdGgiLCJnZXRWaXN1YWxpemF0aW9uUGF0aCIsInRhYmxlU2V0dGluZ3MiLCJnZXRTZXR0aW5nc0Zvck1hbmlmZXN0IiwiZXh0cmFNYW5pZmVzdFNldHRpbmdzIiwib3ZlcmZsb3dHcm91cHMiLCJhY3Rpb25zIiwiY29sdW1ucyIsImFkZFNsb3RDb2x1bW5zVG9FeHRyYU1hbmlmZXN0IiwiYWRkU2xvdEFjdGlvbnNUb0V4dHJhTWFuaWZlc3QiLCJhZGRTbG90T3ZlcmZsb3dHcm91cHNUb0V4dHJhTWFuaWZlc3QiLCJleHRyYVBhcmFtcyIsImNvbnZlcnRlckNvbnRleHQiLCJhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudCIsImFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50UGF0aCIsInN2T2JqZWN0UGF0aCIsInRhcmdldE9iamVjdCIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaW5NdWx0aVZpZXciLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50IiwidXNlQ29uZGVuc2VkTGF5b3V0IiwiaXNNYWNyb09yTXVsdGlwbGVWaWV3IiwidmlzdWFsaXphdGlvbnMiLCJmaW5kIiwidml6IiwidHlwZSIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJfZXhwb3J0cyIsImlzQW5ub3RhdGlvbk9mVGVybSIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uIiwidGVybSIsImxpbmVJdGVtVml6IiwidmlzdWFsaXphdGlvbiIsImFubm90YXRpb25QYXRoIiwicmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwidW5kZWZpbmVkIiwiY3VzdG9tQ29sdW1uRGVmaW5pdGlvbiIsImNvbHVtbiIsImlzQ29sdW1uIiwiaXNBIiwiaGVhZGVyIiwid2lkdGgiLCJpbXBvcnRhbmNlIiwiaG9yaXpvbnRhbEFsaWduIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJleHBvcnRTZXR0aW5ncyIsInByb3BlcnRpZXMiLCJ0b29sdGlwIiwidGVtcGxhdGUiLCJhdmFpbGFiaWxpdHkiLCJyZXF1aXJlZCIsImFuY2hvciIsInBsYWNlbWVudCIsInBvc2l0aW9uIiwiYWRkQWN0aW9uVG9FeHRyYU1hbmlmZXN0IiwiYWN0aW9uIiwiY29tbWFuZCIsImVuYWJsZU9uU2VsZWN0IiwidmlzaWJsZSIsImVuYWJsZWQiLCJpc0FJT3BlcmF0aW9uIiwicHJpb3JpdHkiLCJncm91cCIsIm92ZXJmbG93R3JvdXAiLCJ0ZXh0IiwiX19ub1dyYXAiLCJwcmVzcyIsInJlcXVpcmVzU2VsZWN0aW9uIiwiYWZ0ZXJFeGVjdXRpb24iLCJlbmFibGVBdXRvU2Nyb2xsIiwibmF2aWdhdGVUb0luc3RhbmNlIiwiZW50cmllcyIsImxlbmd0aCIsImRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImFjdGlvbnNTZXR0aW5ncyIsIm1lbnUiLCJtYXAiLCJzdWJBY3Rpb24iLCJkZWZhdWx0QWN0aW9uIiwiYWN0aW9uT3ZlcmZsb3dHcm91cHMiLCJzaG93U2VwYXJhdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZURlZmluaXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0VUlBbm5vdGF0aW9uVGVybXMsXG5cdHR5cGUgTGluZUl0ZW0sXG5cdHR5cGUgUHJlc2VudGF0aW9uVmFyaWFudCxcblx0dHlwZSBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHR0eXBlIFNlbGVjdGlvblZhcmlhbnQsXG5cdHR5cGUgU2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHtcblx0VmlzdWFsaXphdGlvblR5cGUsXG5cdHR5cGUgQXZhaWxhYmlsaXR5VHlwZSxcblx0dHlwZSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4sXG5cdHR5cGUgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdHR5cGUgSW1wb3J0YW5jZSxcblx0dHlwZSBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IHR5cGUgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IHR5cGUgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQge1xuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldFZpc3VhbGl6YXRpb25zRnJvbUFubm90YXRpb24sXG5cdHR5cGUgVmlzdWFsaXphdGlvbkFuZFBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgeyB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUZXJtIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IE1hY3JvQVBJIGZyb20gXCIuLi9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uIGZyb20gXCIuL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uR3JvdXAgZnJvbSBcIi4vQWN0aW9uR3JvdXBcIjtcbmltcG9ydCB0eXBlIEFjdGlvbk92ZXJyaWRlIGZyb20gXCIuL0FjdGlvbk92ZXJyaWRlXCI7XG5pbXBvcnQgdHlwZSBDb2x1bW4gZnJvbSBcIi4vQ29sdW1uXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwiLi9UYWJsZUFQSVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVEZWZpbml0aW9uKHRhYmxlQVBJOiBUYWJsZUFQSSk6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IG93bmVyID0gdGFibGVBUEkuX2dldE93bmVyKCk7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG93bmVyPy5nZXRNZXRhTW9kZWwoKTtcblx0aWYgKCFvd25lciB8fCAhbWV0YU1vZGVsKSB7XG5cdFx0TG9nLmVycm9yKFwiQ2Fubm90IGNyZWF0ZSBhIHRhYmxlIGRlZmluaXRpb24gZm9yIGEgVGFibGVBUEkgd2l0aG91dCBhbiBvd25lciBvciBhIG1ldGFtb2RlbFwiKTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGEgdGFibGUgZGVmaW5pdGlvbiBmb3IgYSBUYWJsZUFQSSB3aXRob3V0IGFuIG93bmVyIG9yIGEgbWV0YW1vZGVsXCIpO1xuXHR9XG5cdGNvbnN0IG1ldGFQYXRoQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YWJsZUFQSS5nZXRGdWxsTWV0YVBhdGgoKSk7XG5cdGNvbnN0IGNvbnRleHRQYXRoQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YWJsZUFQSS5jb250ZXh0UGF0aCk7XG5cdGlmICghbWV0YVBhdGhDb250ZXh0IHx8ICFjb250ZXh0UGF0aENvbnRleHQpIHtcblx0XHRMb2cuZXJyb3IoYEluY29ycmVjdCBtZXRhUGF0aCAoJHt0YWJsZUFQSS5tZXRhUGF0aH0pIG9yIGNvbnRleHRQYXRoICgke3RhYmxlQVBJLmNvbnRleHRQYXRofSkgZm9yIHRhYmxlQVBJYCk7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IG1ldGFQYXRoIG9yIGNvbnRleHRQYXRoIGZvciB0YWJsZUFQSVwiKTtcblx0fVxuXG5cdHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KFxuXHRcdG1ldGFQYXRoQ29udGV4dCxcblx0XHRjb250ZXh0UGF0aENvbnRleHRcblx0KTtcblxuXHRjb25zdCBpbml0aWFsQ29udmVydGVyQ29udGV4dCA9IE1hY3JvQVBJLmdldENvbnZlcnRlckNvbnRleHQodGFibGVBUEkuY29udGV4dE9iamVjdFBhdGgsIHRhYmxlQVBJLmNvbnRleHRQYXRoLCB7XG5cdFx0YXBwQ29tcG9uZW50OiBvd25lci5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRtb2RlbHM6IG93bmVyLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVsc1xuXHR9IGFzIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRjb25zdCB2aXN1YWxpemF0aW9uUGF0aCA9IGdldFZpc3VhbGl6YXRpb25QYXRoKHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoLCBpbml0aWFsQ29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgdGFibGVTZXR0aW5ncyA9IHRhYmxlQVBJLmdldFNldHRpbmdzRm9yTWFuaWZlc3QoKTtcblxuXHRjb25zdCBleHRyYU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0ge1xuXHRcdG92ZXJmbG93R3JvdXBzOiB7fSxcblx0XHRhY3Rpb25zOiB7fSxcblx0XHRjb2x1bW5zOiB7fSxcblx0XHR0YWJsZVNldHRpbmdzXG5cdH07XG5cblx0Ly8gUHJvY2VzcyBjdXN0b20gYWN0aW9ucyBhbmQgY29sdW1uc1xuXHRhZGRTbG90Q29sdW1uc1RvRXh0cmFNYW5pZmVzdCh0YWJsZUFQSSwgZXh0cmFNYW5pZmVzdFNldHRpbmdzKTtcblx0YWRkU2xvdEFjdGlvbnNUb0V4dHJhTWFuaWZlc3QodGFibGVBUEksIGV4dHJhTWFuaWZlc3RTZXR0aW5ncyk7XG5cdGFkZFNsb3RPdmVyZmxvd0dyb3Vwc1RvRXh0cmFNYW5pZmVzdCh0YWJsZUFQSSwgZXh0cmFNYW5pZmVzdFNldHRpbmdzKTtcblxuXHRjb25zdCBleHRyYVBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0ZXh0cmFQYXJhbXNbdmlzdWFsaXphdGlvblBhdGhdID0gZXh0cmFNYW5pZmVzdFNldHRpbmdzO1xuXHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gTWFjcm9BUEkuZ2V0Q29udmVydGVyQ29udGV4dChcblx0XHR0YWJsZUFQSS5jb250ZXh0T2JqZWN0UGF0aCxcblx0XHR0YWJsZUFQSS5jb250ZXh0UGF0aCxcblx0XHR7XG5cdFx0XHRhcHBDb21wb25lbnQ6IG93bmVyPy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdG1vZGVsczogb3duZXI/LnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVsc1xuXHRcdH0gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRleHRyYVBhcmFtc1xuXHQpO1xuXG5cdGxldCBhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdGlmICh0YWJsZUFQSS5hc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudFBhdGgpIHtcblx0XHRjb25zdCBzdk9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8U2VsZWN0aW9uVmFyaWFudD4oXG5cdFx0XHRtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVBUEkuYXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnRQYXRoKSEsXG5cdFx0XHRjb250ZXh0UGF0aENvbnRleHRcblx0XHQpO1xuXHRcdGFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50ID0gc3ZPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdCh0YWJsZUFQSS5pbk11bHRpVmlldyAmJiB0YWJsZUFQSS5jb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Rcblx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdCAgKVxuXHRcdFx0OiBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoKSkgYXMgc3RyaW5nLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0e1xuXHRcdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudDogdGFibGVBUEkudXNlQ29uZGVuc2VkTGF5b3V0LFxuXHRcdFx0YXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRpc01hY3JvT3JNdWx0aXBsZVZpZXc6IHRhYmxlQVBJLmluTXVsdGlWaWV3ID8/IHRydWVcblx0XHR9XG5cdCk7XG5cblx0Ly8gdGFrZSB0aGUgKGZpcnN0KSBUYWJsZSB2aXN1YWxpemF0aW9uXG5cdHJldHVybiB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi52aXN1YWxpemF0aW9ucy5maW5kKFxuXHRcdCh2aXo6IFRhYmxlVmlzdWFsaXphdGlvbiB8IENoYXJ0VmlzdWFsaXphdGlvbikgPT4gdml6LnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlXG5cdCkgYXMgVGFibGVWaXN1YWxpemF0aW9uO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFubm90YXRpb24gcGF0aCBwb2ludGluZyB0byB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uIChMaW5lSXRlbSkuXG4gKiBAcGFyYW0gY29udGV4dE9iamVjdFBhdGggVGhlIGRhdGFtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uIHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0VmlzdWFsaXphdGlvblBhdGgoXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHN0cmluZyB7XG5cdGNvbnN0IG1ldGFQYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aCkgYXMgc3RyaW5nO1xuXG5cdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgTGluZUl0ZW0gaWYgbWV0YXBhdGggaXMgbm90IHNldFxuXHRpZiAoIW1ldGFQYXRoKSB7XG5cdFx0TG9nLmVycm9yKGBNaXNzaW5nIG1ldGEgcGF0aCBwYXJhbWV0ZXIgZm9yIExpbmVJdGVtYCk7XG5cdFx0cmV0dXJuIGBAJHtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbX1gO1xuXHR9XG5cblx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybTxMaW5lSXRlbT4oY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSkpIHtcblx0XHRyZXR1cm4gbWV0YVBhdGg7IC8vIE1ldGFQYXRoIGlzIGFscmVhZHkgcG9pbnRpbmcgdG8gYSBMaW5lSXRlbVxuXHR9XG5cdC8vTmVlZCB0byBzd2l0Y2ggdG8gdGhlIGNvbnRleHQgcmVsYXRlZCB0aGUgUFYgb3IgU1BWXG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihtZXRhUGF0aCk7XG5cblx0bGV0IHZpc3VhbGl6YXRpb25zOiBWaXN1YWxpemF0aW9uQW5kUGF0aFtdID0gW107XG5cdGlmIChcblx0XHRpc0Fubm90YXRpb25PZlRlcm08U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4oY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB8fFxuXHRcdGlzQW5ub3RhdGlvbk9mVGVybTxQcmVzZW50YXRpb25WYXJpYW50Pihjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQpXG5cdCkge1xuXHRcdHZpc3VhbGl6YXRpb25zID0gZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbihjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIG1ldGFQYXRoLCByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTtcblx0fSBlbHNlIHtcblx0XHRMb2cuZXJyb3IoYEJhZCBtZXRhcGF0aCBwYXJhbWV0ZXIgZm9yIHRhYmxlIDogJHtjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QhLnRlcm19YCk7XG5cdH1cblxuXHRjb25zdCBsaW5lSXRlbVZpeiA9IHZpc3VhbGl6YXRpb25zLmZpbmQoKHZpeikgPT4ge1xuXHRcdHJldHVybiB2aXoudmlzdWFsaXphdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTtcblx0fSk7XG5cblx0aWYgKGxpbmVJdGVtVml6KSB7XG5cdFx0cmV0dXJuIGxpbmVJdGVtVml6LmFubm90YXRpb25QYXRoO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgTGluZUl0ZW0gaWYgYW5ub3RhdGlvbiBtaXNzaW5nIGluIFBWXG5cdFx0TG9nLmVycm9yKGBCYWQgbWV0YSBwYXRoIHBhcmFtZXRlciBmb3IgTGluZUl0ZW06ICR7Y29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IS50ZXJtfWApO1xuXHRcdHJldHVybiBgQCR7VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW19YDsgLy8gRmFsbGJhY2tcblx0fVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHByb3BlcnRpZXMgd2l0aCB0aGUgdmFsdWUgb2YgdW5kZWZpbmVkIGZyb20gdGhlIG9iamVjdC5cbiAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byByZW1vdmUgdGhlIHVuZGVmaW5lZCBwcm9wZXJ0aWVzIGZyb21cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0aWYgKG9ialtrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSBvYmpba2V5XTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNsb3QgY29sdW1ucyB0byB0aGUgZXh0cmEgbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gdGFibGVBUElcbiAqIEBwYXJhbSBleHRyYU1hbmlmZXN0U2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gYWRkU2xvdENvbHVtbnNUb0V4dHJhTWFuaWZlc3QodGFibGVBUEk6IFRhYmxlQVBJLCBleHRyYU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cdGxldCBjdXN0b21Db2x1bW5EZWZpbml0aW9uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCAoQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgJiB7IGtleTogc3RyaW5nIH0pO1xuXG5cdHRhYmxlQVBJLmNvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IGlzQ29sdW1uID0gY29sdW1uLmlzQTxDb2x1bW4+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5Db2x1bW5cIik7XG5cdFx0aWYgKGlzQ29sdW1uKSB7XG5cdFx0XHRjdXN0b21Db2x1bW5EZWZpbml0aW9uID0ge1xuXHRcdFx0XHRoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG5cdFx0XHRcdHdpZHRoOiBjb2x1bW4ud2lkdGgsXG5cdFx0XHRcdGltcG9ydGFuY2U6IGNvbHVtbi5pbXBvcnRhbmNlIGFzIEltcG9ydGFuY2UsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogY29sdW1uLmhvcml6b250YWxBbGlnbixcblx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IGNvbHVtbi53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcixcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbi5leHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0cHJvcGVydGllczogY29sdW1uLnByb3BlcnRpZXMsXG5cdFx0XHRcdHRvb2x0aXA6IGNvbHVtbi50b29sdGlwLFxuXHRcdFx0XHR0ZW1wbGF0ZTogY29sdW1uLnRlbXBsYXRlISxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBjb2x1bW4uYXZhaWxhYmlsaXR5IGFzIEF2YWlsYWJpbGl0eVR5cGUsXG5cdFx0XHRcdHJlcXVpcmVkOiBjb2x1bW4ucmVxdWlyZWQsXG5cdFx0XHRcdHR5cGU6IFwiU2xvdFwiXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXN0b21Db2x1bW5EZWZpbml0aW9uID0ge1xuXHRcdFx0XHRrZXk6IGNvbHVtbi5rZXksXG5cdFx0XHRcdHdpZHRoOiBjb2x1bW4ud2lkdGgsXG5cdFx0XHRcdGltcG9ydGFuY2U6IGNvbHVtbi5pbXBvcnRhbmNlIGFzIEltcG9ydGFuY2UsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogY29sdW1uLmhvcml6b250YWxBbGlnbixcblx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IGNvbHVtbi53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcixcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbi5leHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBjb2x1bW4uYXZhaWxhYmlsaXR5IGFzIEF2YWlsYWJpbGl0eVR5cGVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGFsbCB1bmRlZmluZWQgcHJvcGVydGllcywgc28gdGhhdCB0aGV5IGRvbid0IGVyYXNlIHdoYXQgaXMgc2V0IGluIHRoZSBtYW5pZmVzdFxuXHRcdC8vIChuZWNlc3NhcnkgYmVjYXVzZSBtYW5pZmVzdC1iYXNlZCBjb2x1bW5zIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIHNsb3QgY29sdW1ucyBhbmQgd2UgZG9uJ3QgY29weVxuXHRcdC8vIGFsbCB0aGVpciBwcm9wZXJ0aWVzIGluIHRoZSBYTUwpXG5cdFx0cmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhjdXN0b21Db2x1bW5EZWZpbml0aW9uKTtcblxuXHRcdGlmIChpc0NvbHVtbiAmJiAoY29sdW1uLmFuY2hvciB8fCBjb2x1bW4ucGxhY2VtZW50KSkge1xuXHRcdFx0Y3VzdG9tQ29sdW1uRGVmaW5pdGlvbi5wb3NpdGlvbiA9IHtcblx0XHRcdFx0YW5jaG9yOiBjb2x1bW4uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IChjb2x1bW4ucGxhY2VtZW50ID8/IFwiQWZ0ZXJcIikgYXMgUGxhY2VtZW50XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGV4dHJhTWFuaWZlc3RTZXR0aW5ncy5jb2x1bW5zIVtjb2x1bW4ua2V5XSA9IGN1c3RvbUNvbHVtbkRlZmluaXRpb247XG5cdH0pO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNsb3QgYWN0aW9ucyB0byB0aGUgZXh0cmEgbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gdGFibGVBUElcbiAqIEBwYXJhbSBleHRyYU1hbmlmZXN0U2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gYWRkU2xvdEFjdGlvbnNUb0V4dHJhTWFuaWZlc3QodGFibGVBUEk6IFRhYmxlQVBJLCBleHRyYU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cdGZ1bmN0aW9uIGFkZEFjdGlvblRvRXh0cmFNYW5pZmVzdChhY3Rpb246IEFjdGlvbiB8IEFjdGlvbk92ZXJyaWRlKTogdm9pZCB7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IGV4dHJhTWFuaWZlc3RTZXR0aW5ncy5hY3Rpb25zITtcblx0XHRjb25zdCBrZXkgPSBhY3Rpb24ua2V5O1xuXHRcdGFjdGlvbnNba2V5XSA9IHtcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGFjdGlvbi5wbGFjZW1lbnQgPz8gXCJBZnRlclwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdGFuY2hvcjogYWN0aW9uLmFuY2hvclxuXHRcdFx0fSxcblx0XHRcdGNvbW1hbmQ6IGFjdGlvbi5jb21tYW5kLFxuXHRcdFx0ZW5hYmxlT25TZWxlY3Q6IGFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdHZpc2libGU6IGFjdGlvbi52aXNpYmxlLFxuXHRcdFx0ZW5hYmxlZDogYWN0aW9uLmVuYWJsZWQsXG5cdFx0XHRpc0FJT3BlcmF0aW9uOiBhY3Rpb24uaXNBSU9wZXJhdGlvbixcblx0XHRcdHByaW9yaXR5OiBhY3Rpb24ucHJpb3JpdHksXG5cdFx0XHRncm91cDogYWN0aW9uLmdyb3VwID8/IDAsIC8vIERlZmF1bHQgZ3JvdXAgdG8gMCBpZiBub3QgZGVmaW5lZFxuXHRcdFx0b3ZlcmZsb3dHcm91cDogYWN0aW9uLm92ZXJmbG93R3JvdXBcblx0XHR9O1xuXHRcdGlmIChhY3Rpb24uaXNBPEFjdGlvbj4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLkFjdGlvblwiKSkge1xuXHRcdFx0YWN0aW9uc1trZXldID0ge1xuXHRcdFx0XHQuLi5hY3Rpb25zW2tleV0sXG5cdFx0XHRcdHRleHQ6IGFjdGlvbi50ZXh0LFxuXHRcdFx0XHRfX25vV3JhcDogdHJ1ZSxcblx0XHRcdFx0cHJlc3M6IFwic29tZSBoYW5kbGVyXCIsIC8vIFRoZSByZWFsIGhhbmRsZXIgd2lsbCBiZSB0cmlnZ2VyZWQgYnkgZmlyaW5nIHRoZSBldmVudCBvbiB0aGUgQWN0aW9uIG9iamVjdFxuXHRcdFx0XHRyZXF1aXJlc1NlbGVjdGlvbjogYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBhZnRlckV4ZWN1dGlvbiA9IHtcblx0XHRcdGVuYWJsZUF1dG9TY3JvbGw6IGFjdGlvbltcImVuYWJsZUF1dG9TY3JvbGxcIl0sXG5cdFx0XHRuYXZpZ2F0ZVRvSW5zdGFuY2U6IGFjdGlvbltcIm5hdmlnYXRlVG9JbnN0YW5jZVwiXVxuXHRcdH07XG5cdFx0cmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhhZnRlckV4ZWN1dGlvbik7XG5cdFx0YWN0aW9uc1trZXldID0ge1xuXHRcdFx0Li4uYWN0aW9uc1trZXldLFxuXHRcdFx0YWZ0ZXJFeGVjdXRpb246IE9iamVjdC5lbnRyaWVzKGFmdGVyRXhlY3V0aW9uKS5sZW5ndGggPyBhZnRlckV4ZWN1dGlvbiA6IHVuZGVmaW5lZCxcblx0XHRcdGRlZmF1bHRWYWx1ZXNGdW5jdGlvbjogYWN0aW9uLmRlZmF1bHRWYWx1ZXNGdW5jdGlvblxuXHRcdH07XG5cdH1cblxuXHR0YWJsZUFQSS5hY3Rpb25zPy5mb3JFYWNoKChhY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uLmlzQTxBY3Rpb24+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5BY3Rpb25cIikgfHwgYWN0aW9uLmlzQTxBY3Rpb25PdmVycmlkZT4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLkFjdGlvbk92ZXJyaWRlXCIpKSB7XG5cdFx0XHQvLyBBY3Rpb24gb3IgQWN0aW9uT3ZlcnJpZGVcblx0XHRcdGFkZEFjdGlvblRvRXh0cmFNYW5pZmVzdChhY3Rpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBhY3Rpb25zU2V0dGluZ3MgPSBleHRyYU1hbmlmZXN0U2V0dGluZ3MuYWN0aW9ucyE7XG5cdFx0XHRjb25zdCBrZXkgPSBhY3Rpb24ua2V5O1xuXHRcdFx0YWN0aW9uc1NldHRpbmdzW2tleV0gPSB7XG5cdFx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdFx0cGxhY2VtZW50OiAoYWN0aW9uLnBsYWNlbWVudCA/PyBcIkFmdGVyXCIpIGFzIFBsYWNlbWVudCxcblx0XHRcdFx0XHRhbmNob3I6IGFjdGlvbi5hbmNob3Jcblx0XHRcdFx0fSxcblx0XHRcdFx0bWVudTogYWN0aW9uLmFjdGlvbnMubWFwKChzdWJBY3Rpb24pID0+IHN1YkFjdGlvbi5rZXkpXG5cdFx0XHR9O1xuXHRcdFx0aWYgKGFjdGlvbi5pc0E8QWN0aW9uR3JvdXA+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5BY3Rpb25Hcm91cFwiKSkge1xuXHRcdFx0XHRhY3Rpb25zU2V0dGluZ3Nba2V5XSA9IHtcblx0XHRcdFx0XHQuLi5hY3Rpb25zU2V0dGluZ3Nba2V5XSxcblx0XHRcdFx0XHR0ZXh0OiBhY3Rpb24udGV4dCxcblx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uOiBhY3Rpb24uZGVmYXVsdEFjdGlvbixcblx0XHRcdFx0XHRfX25vV3JhcDogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0YWN0aW9uLmFjdGlvbnMuZm9yRWFjaCgoc3ViQWN0aW9uKSA9PiB7XG5cdFx0XHRcdGFkZEFjdGlvblRvRXh0cmFNYW5pZmVzdChzdWJBY3Rpb24pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzbG90IGFjdGlvbk92ZXJmbG93R3JvdXBzIHRvIHRoZSBleHRyYSBtYW5pZmVzdCBzZXR0aW5ncy5cbiAqIEBwYXJhbSB0YWJsZUFQSVxuICogQHBhcmFtIGV4dHJhTWFuaWZlc3RTZXR0aW5nc1xuICovXG5mdW5jdGlvbiBhZGRTbG90T3ZlcmZsb3dHcm91cHNUb0V4dHJhTWFuaWZlc3QodGFibGVBUEk6IFRhYmxlQVBJLCBleHRyYU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cdHRhYmxlQVBJLmFjdGlvbk92ZXJmbG93R3JvdXBzPy5mb3JFYWNoKChvdmVyZmxvd0dyb3VwKSA9PiB7XG5cdFx0ZXh0cmFNYW5pZmVzdFNldHRpbmdzLm92ZXJmbG93R3JvdXBzIVtvdmVyZmxvd0dyb3VwLm92ZXJmbG93R3JvdXBdID0ge1xuXHRcdFx0c2hvd1NlcGFyYXRvcjogb3ZlcmZsb3dHcm91cC5zaG93U2VwYXJhdG9yID8/IHRydWVcblx0XHR9O1xuXHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7RUFzQ08sU0FBU0EscUJBQXFCQSxDQUFDQyxRQUFrQixFQUFzQjtJQUM3RSxNQUFNQyxLQUFLLEdBQUdELFFBQVEsQ0FBQ0UsU0FBUyxDQUFDLENBQUM7SUFDbEMsTUFBTUMsU0FBUyxHQUFHRixLQUFLLEVBQUVHLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQ0gsS0FBSyxJQUFJLENBQUNFLFNBQVMsRUFBRTtNQUN6QkUsR0FBRyxDQUFDQyxLQUFLLENBQUMsaUZBQWlGLENBQUM7TUFDNUYsTUFBTSxJQUFJQyxLQUFLLENBQUMsaUZBQWlGLENBQUM7SUFDbkc7SUFDQSxNQUFNQyxlQUFlLEdBQUdMLFNBQVMsQ0FBQ00sb0JBQW9CLENBQUNULFFBQVEsQ0FBQ1UsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNsRixNQUFNQyxrQkFBa0IsR0FBR1IsU0FBUyxDQUFDTSxvQkFBb0IsQ0FBQ1QsUUFBUSxDQUFDWSxXQUFXLENBQUM7SUFDL0UsSUFBSSxDQUFDSixl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
256
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVUYWJsZURlZmluaXRpb24iLCJ0YWJsZUFQSSIsIm93bmVyIiwiX2dldE93bmVyIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsIm1ldGFQYXRoQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0RnVsbE1ldGFQYXRoIiwiY29udGV4dFBhdGhDb250ZXh0IiwiY29udGV4dFBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaW5pdGlhbENvbnZlcnRlckNvbnRleHQiLCJNYWNyb0FQSSIsImdldENvbnZlcnRlckNvbnRleHQiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJtb2RlbHMiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwidmlzdWFsaXphdGlvblBhdGgiLCJnZXRWaXN1YWxpemF0aW9uUGF0aCIsInRhYmxlU2V0dGluZ3MiLCJnZXRTZXR0aW5nc0Zvck1hbmlmZXN0IiwiZXh0cmFNYW5pZmVzdFNldHRpbmdzIiwib3ZlcmZsb3dHcm91cHMiLCJhY3Rpb25zIiwiY29sdW1ucyIsImFkZFNsb3RDb2x1bW5zVG9FeHRyYU1hbmlmZXN0IiwiYWRkU2xvdEFjdGlvbnNUb0V4dHJhTWFuaWZlc3QiLCJhZGRTbG90T3ZlcmZsb3dHcm91cHNUb0V4dHJhTWFuaWZlc3QiLCJleHRyYVBhcmFtcyIsImNvbnZlcnRlckNvbnRleHQiLCJhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudCIsImFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50UGF0aCIsInN2T2JqZWN0UGF0aCIsInRhcmdldE9iamVjdCIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaW5NdWx0aVZpZXciLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50IiwidXNlQ29uZGVuc2VkTGF5b3V0IiwiaXNNYWNyb09yTXVsdGlwbGVWaWV3IiwidmlzdWFsaXphdGlvbnMiLCJmaW5kIiwidml6IiwidHlwZSIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJfZXhwb3J0cyIsImlzQW5ub3RhdGlvbk9mVGVybSIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uIiwidGVybSIsImxpbmVJdGVtVml6IiwidmlzdWFsaXphdGlvbiIsImFubm90YXRpb25QYXRoIiwicmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwidW5kZWZpbmVkIiwiY3VzdG9tQ29sdW1uRGVmaW5pdGlvbiIsImNvbHVtbiIsImlzQ29sdW1uIiwiaXNBIiwiaGVhZGVyIiwid2lkdGgiLCJpbXBvcnRhbmNlIiwiaG9yaXpvbnRhbEFsaWduIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJleHBvcnRTZXR0aW5ncyIsInByb3BlcnRpZXMiLCJ0b29sdGlwIiwidGVtcGxhdGUiLCJhdmFpbGFiaWxpdHkiLCJyZXF1aXJlZCIsImFuY2hvciIsInBsYWNlbWVudCIsInBvc2l0aW9uIiwiYWRkQWN0aW9uVG9FeHRyYU1hbmlmZXN0IiwiYWN0aW9uIiwiY29tbWFuZCIsImVuYWJsZU9uU2VsZWN0IiwidmlzaWJsZSIsImVuYWJsZWQiLCJpc0FJT3BlcmF0aW9uIiwicHJpb3JpdHkiLCJncm91cCIsIm92ZXJmbG93R3JvdXAiLCJ0ZXh0IiwiX19ub1dyYXAiLCJwcmVzcyIsInJlcXVpcmVzU2VsZWN0aW9uIiwiYWZ0ZXJFeGVjdXRpb24iLCJlbmFibGVBdXRvU2Nyb2xsIiwibmF2aWdhdGVUb0luc3RhbmNlIiwiZW50cmllcyIsImxlbmd0aCIsImRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImFjdGlvbnNTZXR0aW5ncyIsIm1lbnUiLCJtYXAiLCJzdWJBY3Rpb24iLCJkZWZhdWx0QWN0aW9uIiwiYWN0aW9uT3ZlcmZsb3dHcm91cHMiLCJzaG93U2VwYXJhdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZURlZmluaXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0VUlBbm5vdGF0aW9uVGVybXMsXG5cdHR5cGUgTGluZUl0ZW0sXG5cdHR5cGUgUHJlc2VudGF0aW9uVmFyaWFudCxcblx0dHlwZSBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHR0eXBlIFNlbGVjdGlvblZhcmlhbnQsXG5cdHR5cGUgU2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHtcblx0VmlzdWFsaXphdGlvblR5cGUsXG5cdHR5cGUgQXZhaWxhYmlsaXR5VHlwZSxcblx0dHlwZSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4sXG5cdHR5cGUgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdHR5cGUgSW1wb3J0YW5jZSxcblx0dHlwZSBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IHR5cGUgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IHR5cGUgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQge1xuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldFZpc3VhbGl6YXRpb25zRnJvbUFubm90YXRpb24sXG5cdHR5cGUgVmlzdWFsaXphdGlvbkFuZFBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgeyB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUZXJtIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IE1hY3JvQVBJIGZyb20gXCIuLi9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uIGZyb20gXCIuL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uR3JvdXAgZnJvbSBcIi4vQWN0aW9uR3JvdXBcIjtcbmltcG9ydCB0eXBlIEFjdGlvbk92ZXJyaWRlIGZyb20gXCIuL0FjdGlvbk92ZXJyaWRlXCI7XG5pbXBvcnQgdHlwZSBDb2x1bW4gZnJvbSBcIi4vQ29sdW1uXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwiLi9UYWJsZUFQSVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVEZWZpbml0aW9uKHRhYmxlQVBJOiBUYWJsZUFQSSk6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IG93bmVyID0gdGFibGVBUEkuX2dldE93bmVyKCk7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG93bmVyPy5nZXRNZXRhTW9kZWwoKTtcblx0aWYgKCFvd25lciB8fCAhbWV0YU1vZGVsKSB7XG5cdFx0TG9nLmVycm9yKFwiQ2Fubm90IGNyZWF0ZSBhIHRhYmxlIGRlZmluaXRpb24gZm9yIGEgVGFibGVBUEkgd2l0aG91dCBhbiBvd25lciBvciBhIG1ldGFtb2RlbFwiKTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGEgdGFibGUgZGVmaW5pdGlvbiBmb3IgYSBUYWJsZUFQSSB3aXRob3V0IGFuIG93bmVyIG9yIGEgbWV0YW1vZGVsXCIpO1xuXHR9XG5cdGNvbnN0IG1ldGFQYXRoQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YWJsZUFQSS5nZXRGdWxsTWV0YVBhdGgoKSk7XG5cdGNvbnN0IGNvbnRleHRQYXRoQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YWJsZUFQSS5jb250ZXh0UGF0aCk7XG5cdGlmICghbWV0YVBhdGhDb250ZXh0IHx8ICFjb250ZXh0UGF0aENvbnRleHQpIHtcblx0XHRMb2cuZXJyb3IoYEluY29ycmVjdCBtZXRhUGF0aCAoJHt0YWJsZUFQSS5tZXRhUGF0aH0pIG9yIGNvbnRleHRQYXRoICgke3RhYmxlQVBJLmNvbnRleHRQYXRofSkgZm9yIHRhYmxlQVBJYCk7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IG1ldGFQYXRoIG9yIGNvbnRleHRQYXRoIGZvciB0YWJsZUFQSVwiKTtcblx0fVxuXG5cdHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KFxuXHRcdG1ldGFQYXRoQ29udGV4dCxcblx0XHRjb250ZXh0UGF0aENvbnRleHRcblx0KTtcblxuXHRjb25zdCBpbml0aWFsQ29udmVydGVyQ29udGV4dCA9IE1hY3JvQVBJLmdldENvbnZlcnRlckNvbnRleHQodGFibGVBUEkuY29udGV4dE9iamVjdFBhdGgsIHRhYmxlQVBJLmNvbnRleHRQYXRoLCB7XG5cdFx0YXBwQ29tcG9uZW50OiBvd25lci5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRtb2RlbHM6IG93bmVyLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVsc1xuXHR9IGFzIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRjb25zdCB2aXN1YWxpemF0aW9uUGF0aCA9IGdldFZpc3VhbGl6YXRpb25QYXRoKHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoLCBpbml0aWFsQ29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgdGFibGVTZXR0aW5ncyA9IHRhYmxlQVBJLmdldFNldHRpbmdzRm9yTWFuaWZlc3QoKTtcblxuXHRjb25zdCBleHRyYU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0ge1xuXHRcdG92ZXJmbG93R3JvdXBzOiB7fSxcblx0XHRhY3Rpb25zOiB7fSxcblx0XHRjb2x1bW5zOiB7fSxcblx0XHR0YWJsZVNldHRpbmdzXG5cdH07XG5cblx0Ly8gUHJvY2VzcyBjdXN0b20gYWN0aW9ucyBhbmQgY29sdW1uc1xuXHRhZGRTbG90Q29sdW1uc1RvRXh0cmFNYW5pZmVzdCh0YWJsZUFQSSwgZXh0cmFNYW5pZmVzdFNldHRpbmdzKTtcblx0YWRkU2xvdEFjdGlvbnNUb0V4dHJhTWFuaWZlc3QodGFibGVBUEksIGV4dHJhTWFuaWZlc3RTZXR0aW5ncyk7XG5cdGFkZFNsb3RPdmVyZmxvd0dyb3Vwc1RvRXh0cmFNYW5pZmVzdCh0YWJsZUFQSSwgZXh0cmFNYW5pZmVzdFNldHRpbmdzKTtcblxuXHRjb25zdCBleHRyYVBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0ZXh0cmFQYXJhbXNbdmlzdWFsaXphdGlvblBhdGhdID0gZXh0cmFNYW5pZmVzdFNldHRpbmdzO1xuXHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gTWFjcm9BUEkuZ2V0Q29udmVydGVyQ29udGV4dChcblx0XHR0YWJsZUFQSS5jb250ZXh0T2JqZWN0UGF0aCxcblx0XHR0YWJsZUFQSS5jb250ZXh0UGF0aCxcblx0XHR7XG5cdFx0XHRhcHBDb21wb25lbnQ6IG93bmVyPy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdG1vZGVsczogb3duZXI/LnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVsc1xuXHRcdH0gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRleHRyYVBhcmFtc1xuXHQpO1xuXG5cdGxldCBhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdGlmICh0YWJsZUFQSS5hc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudFBhdGgpIHtcblx0XHRjb25zdCBzdk9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8U2VsZWN0aW9uVmFyaWFudD4oXG5cdFx0XHRtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVBUEkuYXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnRQYXRoKSEsXG5cdFx0XHRjb250ZXh0UGF0aENvbnRleHRcblx0XHQpO1xuXHRcdGFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50ID0gc3ZPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdCh0YWJsZUFQSS5pbk11bHRpVmlldyAmJiB0YWJsZUFQSS5jb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Rcblx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdCAgKVxuXHRcdFx0OiBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoKSkgYXMgc3RyaW5nLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0e1xuXHRcdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudDogdGFibGVBUEkudXNlQ29uZGVuc2VkTGF5b3V0LFxuXHRcdFx0YXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRpc01hY3JvT3JNdWx0aXBsZVZpZXc6IHRhYmxlQVBJLmluTXVsdGlWaWV3ID8/IHRydWVcblx0XHR9XG5cdCk7XG5cblx0Ly8gdGFrZSB0aGUgKGZpcnN0KSBUYWJsZSB2aXN1YWxpemF0aW9uXG5cdHJldHVybiB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi52aXN1YWxpemF0aW9ucy5maW5kKFxuXHRcdCh2aXo6IFRhYmxlVmlzdWFsaXphdGlvbiB8IENoYXJ0VmlzdWFsaXphdGlvbikgPT4gdml6LnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlXG5cdCkgYXMgVGFibGVWaXN1YWxpemF0aW9uO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFubm90YXRpb24gcGF0aCBwb2ludGluZyB0byB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uIChMaW5lSXRlbSkuXG4gKiBAcGFyYW0gY29udGV4dE9iamVjdFBhdGggVGhlIGRhdGFtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uIHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0VmlzdWFsaXphdGlvblBhdGgoXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHN0cmluZyB7XG5cdGNvbnN0IG1ldGFQYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aCkgYXMgc3RyaW5nO1xuXG5cdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgTGluZUl0ZW0gaWYgbWV0YXBhdGggaXMgbm90IHNldFxuXHRpZiAoIW1ldGFQYXRoKSB7XG5cdFx0TG9nLmVycm9yKGBNaXNzaW5nIG1ldGEgcGF0aCBwYXJhbWV0ZXIgZm9yIExpbmVJdGVtYCk7XG5cdFx0cmV0dXJuIGBAJHtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbX1gO1xuXHR9XG5cblx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybTxMaW5lSXRlbT4oY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSkpIHtcblx0XHRyZXR1cm4gbWV0YVBhdGg7IC8vIE1ldGFQYXRoIGlzIGFscmVhZHkgcG9pbnRpbmcgdG8gYSBMaW5lSXRlbVxuXHR9XG5cdC8vTmVlZCB0byBzd2l0Y2ggdG8gdGhlIGNvbnRleHQgcmVsYXRlZCB0aGUgUFYgb3IgU1BWXG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihtZXRhUGF0aCk7XG5cblx0bGV0IHZpc3VhbGl6YXRpb25zOiBWaXN1YWxpemF0aW9uQW5kUGF0aFtdID0gW107XG5cdGlmIChcblx0XHRpc0Fubm90YXRpb25PZlRlcm08U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4oY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB8fFxuXHRcdGlzQW5ub3RhdGlvbk9mVGVybTxQcmVzZW50YXRpb25WYXJpYW50Pihjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQpXG5cdCkge1xuXHRcdHZpc3VhbGl6YXRpb25zID0gZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbihjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIG1ldGFQYXRoLCByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTtcblx0fSBlbHNlIHtcblx0XHRMb2cuZXJyb3IoYEJhZCBtZXRhcGF0aCBwYXJhbWV0ZXIgZm9yIHRhYmxlIDogJHtjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QhLnRlcm19YCk7XG5cdH1cblxuXHRjb25zdCBsaW5lSXRlbVZpeiA9IHZpc3VhbGl6YXRpb25zLmZpbmQoKHZpeikgPT4ge1xuXHRcdHJldHVybiB2aXoudmlzdWFsaXphdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTtcblx0fSk7XG5cblx0aWYgKGxpbmVJdGVtVml6KSB7XG5cdFx0cmV0dXJuIGxpbmVJdGVtVml6LmFubm90YXRpb25QYXRoO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgTGluZUl0ZW0gaWYgYW5ub3RhdGlvbiBtaXNzaW5nIGluIFBWXG5cdFx0TG9nLmVycm9yKGBCYWQgbWV0YSBwYXRoIHBhcmFtZXRlciBmb3IgTGluZUl0ZW06ICR7Y29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IS50ZXJtfWApO1xuXHRcdHJldHVybiBgQCR7VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW19YDsgLy8gRmFsbGJhY2tcblx0fVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHByb3BlcnRpZXMgd2l0aCB0aGUgdmFsdWUgb2YgdW5kZWZpbmVkIGZyb20gdGhlIG9iamVjdC5cbiAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byByZW1vdmUgdGhlIHVuZGVmaW5lZCBwcm9wZXJ0aWVzIGZyb21cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0aWYgKG9ialtrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSBvYmpba2V5XTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNsb3QgY29sdW1ucyB0byB0aGUgZXh0cmEgbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gdGFibGVBUElcbiAqIEBwYXJhbSBleHRyYU1hbmlmZXN0U2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gYWRkU2xvdENvbHVtbnNUb0V4dHJhTWFuaWZlc3QodGFibGVBUEk6IFRhYmxlQVBJLCBleHRyYU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cdGxldCBjdXN0b21Db2x1bW5EZWZpbml0aW9uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCAoQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgJiB7IGtleTogc3RyaW5nIH0pO1xuXG5cdHRhYmxlQVBJLmNvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IGlzQ29sdW1uID0gY29sdW1uLmlzQTxDb2x1bW4+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5Db2x1bW5cIik7XG5cdFx0aWYgKGlzQ29sdW1uKSB7XG5cdFx0XHRjdXN0b21Db2x1bW5EZWZpbml0aW9uID0ge1xuXHRcdFx0XHRoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG5cdFx0XHRcdHdpZHRoOiBjb2x1bW4ud2lkdGgsXG5cdFx0XHRcdGltcG9ydGFuY2U6IGNvbHVtbi5pbXBvcnRhbmNlIGFzIEltcG9ydGFuY2UsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogY29sdW1uLmhvcml6b250YWxBbGlnbixcblx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IGNvbHVtbi53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcixcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbi5leHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0cHJvcGVydGllczogY29sdW1uLnByb3BlcnRpZXMsXG5cdFx0XHRcdHRvb2x0aXA6IGNvbHVtbi50b29sdGlwLFxuXHRcdFx0XHR0ZW1wbGF0ZTogY29sdW1uLnRlbXBsYXRlISxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBjb2x1bW4uYXZhaWxhYmlsaXR5IGFzIEF2YWlsYWJpbGl0eVR5cGUsXG5cdFx0XHRcdHJlcXVpcmVkOiBjb2x1bW4ucmVxdWlyZWQsXG5cdFx0XHRcdHR5cGU6IFwiU2xvdFwiXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXN0b21Db2x1bW5EZWZpbml0aW9uID0ge1xuXHRcdFx0XHRrZXk6IGNvbHVtbi5rZXksXG5cdFx0XHRcdHdpZHRoOiBjb2x1bW4ud2lkdGgsXG5cdFx0XHRcdGltcG9ydGFuY2U6IGNvbHVtbi5pbXBvcnRhbmNlIGFzIEltcG9ydGFuY2UsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogY29sdW1uLmhvcml6b250YWxBbGlnbixcblx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IGNvbHVtbi53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcixcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbi5leHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBjb2x1bW4uYXZhaWxhYmlsaXR5IGFzIEF2YWlsYWJpbGl0eVR5cGVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGFsbCB1bmRlZmluZWQgcHJvcGVydGllcywgc28gdGhhdCB0aGV5IGRvbid0IGVyYXNlIHdoYXQgaXMgc2V0IGluIHRoZSBtYW5pZmVzdFxuXHRcdC8vIChuZWNlc3NhcnkgYmVjYXVzZSBtYW5pZmVzdC1iYXNlZCBjb2x1bW5zIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIHNsb3QgY29sdW1ucyBhbmQgd2UgZG9uJ3QgY29weVxuXHRcdC8vIGFsbCB0aGVpciBwcm9wZXJ0aWVzIGluIHRoZSBYTUwpXG5cdFx0cmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhjdXN0b21Db2x1bW5EZWZpbml0aW9uKTtcblxuXHRcdGlmIChpc0NvbHVtbiAmJiAoY29sdW1uLmFuY2hvciB8fCBjb2x1bW4ucGxhY2VtZW50KSkge1xuXHRcdFx0Y3VzdG9tQ29sdW1uRGVmaW5pdGlvbi5wb3NpdGlvbiA9IHtcblx0XHRcdFx0YW5jaG9yOiBjb2x1bW4uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IChjb2x1bW4ucGxhY2VtZW50ID8/IFwiQWZ0ZXJcIikgYXMgUGxhY2VtZW50XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGV4dHJhTWFuaWZlc3RTZXR0aW5ncy5jb2x1bW5zIVtjb2x1bW4ua2V5XSA9IGN1c3RvbUNvbHVtbkRlZmluaXRpb247XG5cdH0pO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNsb3QgYWN0aW9ucyB0byB0aGUgZXh0cmEgbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gdGFibGVBUElcbiAqIEBwYXJhbSBleHRyYU1hbmlmZXN0U2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gYWRkU2xvdEFjdGlvbnNUb0V4dHJhTWFuaWZlc3QodGFibGVBUEk6IFRhYmxlQVBJLCBleHRyYU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cdGZ1bmN0aW9uIGFkZEFjdGlvblRvRXh0cmFNYW5pZmVzdChhY3Rpb246IEFjdGlvbiB8IEFjdGlvbk92ZXJyaWRlKTogdm9pZCB7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IGV4dHJhTWFuaWZlc3RTZXR0aW5ncy5hY3Rpb25zITtcblx0XHRjb25zdCBrZXkgPSBhY3Rpb24ua2V5O1xuXHRcdGFjdGlvbnNba2V5XSA9IHtcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGFjdGlvbi5wbGFjZW1lbnQgPz8gXCJBZnRlclwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdGFuY2hvcjogYWN0aW9uLmFuY2hvclxuXHRcdFx0fSxcblx0XHRcdGNvbW1hbmQ6IGFjdGlvbi5jb21tYW5kLFxuXHRcdFx0ZW5hYmxlT25TZWxlY3Q6IGFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdHZpc2libGU6IGFjdGlvbi52aXNpYmxlLFxuXHRcdFx0ZW5hYmxlZDogYWN0aW9uLmVuYWJsZWQsXG5cdFx0XHRpc0FJT3BlcmF0aW9uOiBhY3Rpb24uaXNBSU9wZXJhdGlvbixcblx0XHRcdHByaW9yaXR5OiBhY3Rpb24ucHJpb3JpdHksXG5cdFx0XHRncm91cDogYWN0aW9uLmdyb3VwID8/IDAsIC8vIERlZmF1bHQgZ3JvdXAgdG8gMCBpZiBub3QgZGVmaW5lZFxuXHRcdFx0b3ZlcmZsb3dHcm91cDogYWN0aW9uLm92ZXJmbG93R3JvdXBcblx0XHR9O1xuXHRcdGlmIChhY3Rpb24uaXNBPEFjdGlvbj4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLkFjdGlvblwiKSkge1xuXHRcdFx0YWN0aW9uc1trZXldID0ge1xuXHRcdFx0XHQuLi5hY3Rpb25zW2tleV0sXG5cdFx0XHRcdHRleHQ6IGFjdGlvbi50ZXh0LFxuXHRcdFx0XHRfX25vV3JhcDogdHJ1ZSxcblx0XHRcdFx0cHJlc3M6IFwic29tZUhhbmRsZXJcIiwgLy8gVGhlIHJlYWwgaGFuZGxlciB3aWxsIGJlIHRyaWdnZXJlZCBieSBmaXJpbmcgdGhlIGV2ZW50IG9uIHRoZSBBY3Rpb24gb2JqZWN0XG5cdFx0XHRcdHJlcXVpcmVzU2VsZWN0aW9uOiBhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb25cblx0XHRcdH07XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGFmdGVyRXhlY3V0aW9uID0ge1xuXHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogYWN0aW9uW1wiZW5hYmxlQXV0b1Njcm9sbFwiXSxcblx0XHRcdG5hdmlnYXRlVG9JbnN0YW5jZTogYWN0aW9uW1wibmF2aWdhdGVUb0luc3RhbmNlXCJdXG5cdFx0fTtcblx0XHRyZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKGFmdGVyRXhlY3V0aW9uKTtcblx0XHRhY3Rpb25zW2tleV0gPSB7XG5cdFx0XHQuLi5hY3Rpb25zW2tleV0sXG5cdFx0XHRhZnRlckV4ZWN1dGlvbjogT2JqZWN0LmVudHJpZXMoYWZ0ZXJFeGVjdXRpb24pLmxlbmd0aCA/IGFmdGVyRXhlY3V0aW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0ZGVmYXVsdFZhbHVlc0Z1bmN0aW9uOiBhY3Rpb24uZGVmYXVsdFZhbHVlc0Z1bmN0aW9uXG5cdFx0fTtcblx0fVxuXG5cdHRhYmxlQVBJLmFjdGlvbnM/LmZvckVhY2goKGFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24uaXNBPEFjdGlvbj4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLkFjdGlvblwiKSB8fCBhY3Rpb24uaXNBPEFjdGlvbk92ZXJyaWRlPihcInNhcC5mZS5tYWNyb3MudGFibGUuQWN0aW9uT3ZlcnJpZGVcIikpIHtcblx0XHRcdC8vIEFjdGlvbiBvciBBY3Rpb25PdmVycmlkZVxuXHRcdFx0YWRkQWN0aW9uVG9FeHRyYU1hbmlmZXN0KGFjdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFjdGlvbnNTZXR0aW5ncyA9IGV4dHJhTWFuaWZlc3RTZXR0aW5ncy5hY3Rpb25zITtcblx0XHRcdGNvbnN0IGtleSA9IGFjdGlvbi5rZXk7XG5cdFx0XHRhY3Rpb25zU2V0dGluZ3Nba2V5XSA9IHtcblx0XHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0XHRwbGFjZW1lbnQ6IChhY3Rpb24ucGxhY2VtZW50ID8/IFwiQWZ0ZXJcIikgYXMgUGxhY2VtZW50LFxuXHRcdFx0XHRcdGFuY2hvcjogYWN0aW9uLmFuY2hvclxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtZW51OiBhY3Rpb24uYWN0aW9ucy5tYXAoKHN1YkFjdGlvbikgPT4gc3ViQWN0aW9uLmtleSlcblx0XHRcdH07XG5cdFx0XHRpZiAoYWN0aW9uLmlzQTxBY3Rpb25Hcm91cD4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLkFjdGlvbkdyb3VwXCIpKSB7XG5cdFx0XHRcdGFjdGlvbnNTZXR0aW5nc1trZXldID0ge1xuXHRcdFx0XHRcdC4uLmFjdGlvbnNTZXR0aW5nc1trZXldLFxuXHRcdFx0XHRcdHRleHQ6IGFjdGlvbi50ZXh0LFxuXHRcdFx0XHRcdGRlZmF1bHRBY3Rpb246IGFjdGlvbi5kZWZhdWx0QWN0aW9uLFxuXHRcdFx0XHRcdF9fbm9XcmFwOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRhY3Rpb24uYWN0aW9ucy5mb3JFYWNoKChzdWJBY3Rpb24pID0+IHtcblx0XHRcdFx0YWRkQWN0aW9uVG9FeHRyYU1hbmlmZXN0KHN1YkFjdGlvbik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNsb3QgYWN0aW9uT3ZlcmZsb3dHcm91cHMgdG8gdGhlIGV4dHJhIG1hbmlmZXN0IHNldHRpbmdzLlxuICogQHBhcmFtIHRhYmxlQVBJXG4gKiBAcGFyYW0gZXh0cmFNYW5pZmVzdFNldHRpbmdzXG4gKi9cbmZ1bmN0aW9uIGFkZFNsb3RPdmVyZmxvd0dyb3Vwc1RvRXh0cmFNYW5pZmVzdCh0YWJsZUFQSTogVGFibGVBUEksIGV4dHJhTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiB2b2lkIHtcblx0dGFibGVBUEkuYWN0aW9uT3ZlcmZsb3dHcm91cHM/LmZvckVhY2goKG92ZXJmbG93R3JvdXApID0+IHtcblx0XHRleHRyYU1hbmlmZXN0U2V0dGluZ3Mub3ZlcmZsb3dHcm91cHMhW292ZXJmbG93R3JvdXAub3ZlcmZsb3dHcm91cF0gPSB7XG5cdFx0XHRzaG93U2VwYXJhdG9yOiBvdmVyZmxvd0dyb3VwLnNob3dTZXBhcmF0b3IgPz8gdHJ1ZVxuXHRcdH07XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztFQXNDTyxTQUFTQSxxQkFBcUJBLENBQUNDLFFBQWtCLEVBQXNCO0lBQzdFLE1BQU1DLEtBQUssR0FBR0QsUUFBUSxDQUFDRSxTQUFTLENBQUMsQ0FBQztJQUNsQyxNQUFNQyxTQUFTLEdBQUdGLEtBQUssRUFBRUcsWUFBWSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDSCxLQUFLLElBQUksQ0FBQ0UsU0FBUyxFQUFFO01BQ3pCRSxHQUFHLENBQUNDLEtBQUssQ0FBQyxpRkFBaUYsQ0FBQztNQUM1RixNQUFNLElBQUlDLEtBQUssQ0FBQyxpRkFBaUYsQ0FBQztJQUNuRztJQUNBLE1BQU1DLGVBQWUsR0FBR0wsU0FBUyxDQUFDTSxvQkFBb0IsQ0FBQ1QsUUFBUSxDQUFDVSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLE1BQU1DLGtCQUFrQixHQUFHUixTQUFTLENBQUNNLG9CQUFvQixDQUFDVCxRQUFRLENBQUNZLFdBQVcsQ0FBQztJQUMvRSxJQUFJLENBQUNKLGVB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
@@ -257,7 +257,7 @@ function addSlotActionsToExtraManifest(tableAPI: TableAPI, extraManifestSettings
257
257
  ...actions[key],
258
258
  text: action.text,
259
259
  __noWrap: true,
260
- press: "some handler", // The real handler will be triggered by firing the event on the Action object
260
+ press: "someHandler", // The real handler will be triggered by firing the event on the Action object
261
261
  requiresSelection: action.requiresSelection
262
262
  };
263
263
  return;
@@ -62,6 +62,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/helper
62
62
  this.fieldChangeInCreationRow = `TableRuntime.onFieldChangeInCreationRow($event, ${!!this.tableBlockProperties.tableDefinition.control.customValidationFunction})`;
63
63
  this.fieldLiveChange = this.tableBlockProperties.creationMode?.name === "InlineCreationRows" ? "API.onFieldLiveChange($event)" : undefined;
64
64
  this.rowPress = "API.onTableRowPress";
65
+ this.noop = "API.onNoop";
65
66
  this.segmentedButtonPress = "API.onSegmentedButtonPressed";
66
67
  this.selectionChange = "API.onSelectionChanged";
67
68
  this.tableContextChange = tableType === "TreeTable" ? `TableRuntime.onTreeTableContextChanged($event, ${this.tableBlockProperties.tableDefinition?.annotation?.initialExpansionLevel})` : undefined;
@@ -127,6 +128,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/helper
127
128
  };
128
129
  this.fieldLiveChange = this.tableBlockProperties.creationMode?.name === "InlineCreationRows" ? tableAPI.onFieldLiveChange.bind(tableAPI) : undefined;
129
130
  this.rowPress = tableAPI.onTableRowPress.bind(tableAPI);
131
+ this.noop = tableAPI.onNoop.bind(tableAPI);
130
132
  this.segmentedButtonPress = tableAPI.onSegmentedButtonPressed.bind(tableAPI);
131
133
  this.selectionChange = tableAPI.onSelectionChanged.bind(tableAPI);
132
134
  this.tableContextChange = tableType === "TreeTable" ? e => {
@@ -458,4 +460,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/helper
458
460
  _exports = TableEventHandlerProvider;
459
461
  return _exports;
460
462
  }, false);
461
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZWxlY3Rpb25MaW1pdEZvclNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsInRhYmxlQmxvY2tQcm9wZXJ0aWVzIiwic2V0dGluZ3MiLCJ0YWJsZUFQSSIsImNvbGxlY3Rpb25FbnRpdHkiLCJtZXRhTW9kZWwiLCJjb25zdHJ1Y3RvcldpdGhGdW5jdGlvbnMiLCJjb25zdHJ1Y3RvcldpdGhTdHJpbmdzIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJ0YWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsImFkZENhcmRUb0luc2lnaHRzUHJlc3MiLCJiZWZvcmVFeHBvcnQiLCJiZWZvcmVPcGVuQ29udGV4dE1lbnUiLCJjb2xsYXBzZU5vZGUiLCJ1bmRlZmluZWQiLCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIsInJvd05hdmlnYXRpb25JbmZvIiwiYW5ub3RhdGlvbiIsInJvdyIsIm5hdmlnYXRpb25JbmZvIiwib3ZlcnJpZGVSb3dQcmVzcyIsImNvbnRleHRNZW51T3BlbkluTmV3VGFiIiwibmF2aWdhdGlvblRhcmdldCIsImNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwidGFyZ2V0UGF0aCIsImRhdGFTdGF0ZUNoYW5nZSIsImhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRyYWdTdGFydERvY3VtZW50IiwiZHJhZ0VudGVyRG9jdW1lbnQiLCJkcm9wRG9jdW1lbnQiLCJleHBhbmROb2RlIiwiZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93IiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiZmllbGRMaXZlQ2hhbmdlIiwiY3JlYXRpb25Nb2RlIiwibmFtZSIsInJvd1ByZXNzIiwic2VnbWVudGVkQnV0dG9uUHJlc3MiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ0YWJsZUNvbnRleHRDaGFuZ2UiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJ1cGxvYWRDb21wbGV0ZWQiLCJ1cGxvYWRGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkIiwidXBsb2FkRmlsZVNpemVFeGNlZWRlZCIsInVwbG9hZEl0ZW1WYWxpZGF0aW9uSGFuZGxlciIsInVwbG9hZE1lZGlhVHlwZU1pc21hdGNoIiwidmFyaWFudFNhdmVkIiwidmFyaWFudFNlbGVjdGVkIiwib25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQiLCJiaW5kIiwib25CZWZvcmVFeHBvcnQiLCJvbkNvbnRleHRNZW51UHJlc3MiLCJlIiwib25Db2xsYXBzZUV4cGFuZE5vZGUiLCJUYWJsZVJ1bnRpbWUiLCJvbkNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwiX2UiLCJjb250cm9sbGVyIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9uT3BlbkluTmV3VGFiTmF2aWdhdGVPdXRCb3VuZCIsImdldFByb3BlcnR5Iiwib25TaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJQcmVzcyIsIm9uT3BlbkluTmV3VGFiUHJlc3MiLCJjYWxsRXh0ZW5zaW9uIiwibmF2TW9kZSIsIm9uRGF0YVN0YXRlQ2hhbmdlIiwib25EcmFnU3RhcnREb2N1bWVudCIsIm9uRHJhZ0VudGVyRG9jdW1lbnQiLCJvbkRyb3BEb2N1bWVudCIsIm9uRmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93Iiwib25GaWVsZExpdmVDaGFuZ2UiLCJvblRhYmxlUm93UHJlc3MiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJvblNlbGVjdGlvbkNoYW5nZWQiLCJvblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkIiwiVXBsb2FkVGFibGVSdW50aW1lIiwib25VcGxvYWRDb21wbGV0ZWQiLCJvbkZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQiLCJvbkZpbGVTaXplRXhjZWVkZWQiLCJ1cGxvYWRGaWxlIiwib25NZWRpYVR5cGVNaXNtYXRjaCIsIm9uVmFyaWFudFNhdmVkIiwib25WYXJpYW50U2VsZWN0ZWQiLCJnZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIiLCJmb3JDb250ZXh0TWVudSIsImZvckNyZWF0aW9uUm93Iiwib25DcmVhdGVCdXR0b25QcmVzcyIsInBhdGgiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImluZGV4Iiwib25DcmVhdGVNZW51SXRlbVByZXNzIiwiZ2V0Q3V0SGFuZGxlciIsIm9uQ3V0IiwiZ2V0Q29weUhhbmRsZXIiLCJvbkNvcHkiLCJnZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIiLCJkYXRhRmllbGQiLCJhY3Rpb24iLCJwYXJlbnRBY3Rpb24iLCJhY3Rpb25Db250ZXh0UGF0aCIsImFubm90YXRpb25QYXRoIiwiQ29tbW9uSGVscGVyIiwiZ2V0QWN0aW9uQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiYWN0aW9uQ29udGV4dCIsImFjdGlvbk5hbWUiLCJBY3Rpb24iLCJ0YXJnZXRFbnRpdHlUeXBlTmFtZSIsImNvbnRleHRPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzU3RhdGljQWN0aW9uIiwiZ2V0T2JqZWN0IiwiVGFibGVIZWxwZXIiLCJfaXNTdGF0aWNBY3Rpb24iLCJfaXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZSIsInRvU3RyaW5nIiwiYXBwbGljYWJsZVByb3BlcnR5UGF0aCIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eVBhdGgiLCJjb250ZXh0TWVudVBhdGgiLCJwYXJhbXMiLCJjb250ZXh0cyIsImJTdGF0aWNBY3Rpb24iLCJlbnRpdHlTZXROYW1lIiwiYXBwbGljYWJsZUNvbnRleHRzIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwiaXNOYXZpZ2FibGUiLCJlbmFibGVBdXRvU2Nyb2xsIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiY29udHJvbElkIiwiY29udGVudElkIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwibGFiZWwiLCJMYWJlbCIsInZhbHVlT2YiLCJtb2RlbCIsImdldE1vZGVsIiwiZGlzYWJsZVN0cmljdEhhbmRsaW5nIiwib25BY3Rpb25QcmVzcyIsInByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24iLCJnZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIiLCJkYXRhRmllbGRDb250ZXh0IiwibmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nIiwiZW5hYmxlQW5hbHl0aWNzIiwibmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJSZXF1aXJlc0NvbnRleHQiLCJJbmxpbmUiLCJhcHBsaWNhYmxlUHJvcGVydHkiLCJub3RBcHBsaWNhYmxlUHJvcGVydHkiLCJTZW1hbnRpY09iamVjdCIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIk1hcHBpbmciLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0U291cmNlIiwibmF2aWdhdGUiLCJnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4iLCJnZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUiLCJmdWxsQ29udGV4dFBhdGgiLCJ2YWx1ZSIsIlZhbHVlIiwiYWRkU2luZ2xlUXVvdGVzIiwiZXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImlzQ29uc3RhbnQiLCJpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbiIsInZhbHVlRXhwcmVzc2lvbiIsImZvcm1hdFZhbHVlUmVjdXJzaXZlbHkiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlciIsImhlYWRlckluZm8iLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFubm90YXRpb25zIiwiVUkiLCJIZWFkZXJJbmZvIiwiZGVsZXRhYmxlQ29udGV4dHNQYXRoIiwic2VsZWN0ZWRDb250ZXh0c1BhdGgiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRoIiwidW5TYXZlZENvbnRleHRzUGF0aCIsImxvY2tlZENvbnRleHRzUGF0aCIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVQYXRoIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVBhdGgiLCJ0aXRsZUV4cHJlc3Npb24iLCJUaXRsZSIsImRlc2NyaXB0aW9uRXhwcmVzc2lvbiIsIkRlc2NyaXB0aW9uIiwiaWQiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInNlbGVjdGVkQ29udGV4dHMiLCJlZGl0RmxvdyIsImRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzIiwiZ2VuZXJhdGVGdW5jdGlvbiIsIm9iamVjdFRvU3RyaW5nIiwiZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIiLCJub1dyYXAiLCJyZWxhdGVkQWN0aW9uRWxlbWVudCIsImZpbmRTbG90QWN0aW9uRnJvbUtleSIsImtleSIsImludGVybmFsTW9kZWxQYXRoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsImZpcmVFdmVudCIsIkxvZyIsImVycm9yIiwiRlBNSGVscGVyIiwiYWN0aW9uV3JhcHBlciIsImhhbmRsZXJNb2R1bGUiLCJoYW5kbGVyTWV0aG9kIiwiY2F0Y2giLCJlcnIiLCJwcmVzcyIsImJ1aWxkQWN0aW9uV3JhcHBlciIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwib25NYXNzRWRpdEJ1dHRvblByZXNzZWQiLCJnZXRNb3ZlVXBEb3duSGFuZGxlciIsImZvck1vdmVVcCIsIm9uTW92ZVVwRG93biIsImdldFBhc3RlSGFuZGxlciIsIm9uUGFzdGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHtcblx0dHlwZSBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdHR5cGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHR0eXBlIERhdGFGaWVsZFR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaXNDb25zdGFudCwgaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IHR5cGUgQmFzZUFjdGlvbiwgdHlwZSBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHsgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIFY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcIi4uL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcIi4uL0ZpZWxkXCI7XG5pbXBvcnQgeyB0eXBlIFRhYmxlQmxvY2tQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcIi4vVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwiLi9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBVcGxvYWRUYWJsZVJ1bnRpbWUgZnJvbSBcIi4vdXBsb2FkVGFibGUvVXBsb2FkVGFibGVSdW50aW1lXCI7XG5cbnR5cGUgRXZlbnRIYW5kbGVyVHlwZSA9IChlOiBVSTVFdmVudCkgPT4gdm9pZDtcblxuLy8gbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gc2hhcmUgdG8gQ29sbGFib3JhdGlvbiBNYW5hZ2VyIHNpbXVsdGFub3VzbHlcbmNvbnN0IHNlbGVjdGlvbkxpbWl0Rm9yU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyID0gMTtcbi8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIG9wZW4gaW4gbmV3IHRhYnMgc2ltdWx0YW5vdXNseVxuY29uc3Qgc2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWIgPSAxMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciB7XG5cdGFkZENhcmRUb0luc2lnaHRzUHJlc3MhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGJlZm9yZUV4cG9ydCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0YmVmb3JlT3BlbkNvbnRleHRNZW51ITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRjb2xsYXBzZU5vZGU/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGNvbnRleHRNZW51SXRlbVNlbGVjdGVkITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRjb250ZXh0TWVudU9wZW5Jbk5ld1RhYj86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0Y29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXI6IEV2ZW50SGFuZGxlclR5cGUgfCB1bmRlZmluZWQ7XG5cblx0ZGF0YVN0YXRlQ2hhbmdlITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI/OiAobWVzc2FnZTogTWVzc2FnZSwgY29udHJvbDogQ29udHJvbCkgPT4gYm9vbGVhbjtcblxuXHRkcmFnU3RhcnREb2N1bWVudD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZHJhZ0VudGVyRG9jdW1lbnQ/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGRyb3BEb2N1bWVudD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZXhwYW5kTm9kZT86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93PzogdHlwZW9mIEZpZWxkLnByb3RvdHlwZS5jaGFuZ2U7XG5cblx0ZmllbGRMaXZlQ2hhbmdlPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRyb3dQcmVzcz86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0c2VnbWVudGVkQnV0dG9uUHJlc3M/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHNlbGVjdGlvbkNoYW5nZSE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dGFibGVDb250ZXh0Q2hhbmdlPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR1cGxvYWRDb21wbGV0ZWQhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHVwbG9hZEZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHVwbG9hZEZpbGVTaXplRXhjZWVkZWQhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHVwbG9hZEl0ZW1WYWxpZGF0aW9uSGFuZGxlciE6IEZ1bmN0aW9uO1xuXG5cdHVwbG9hZE1lZGlhVHlwZU1pc21hdGNoITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR2YXJpYW50U2F2ZWQ/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHZhcmlhbnRTZWxlY3RlZD86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0cHJpdmF0ZSBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdHByaXZhdGUgY29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5O1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgdGFibGVCbG9ja1Byb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRcdHNldHRpbmdzOiB7IGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eTsgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCB9LFxuXHRcdHByaXZhdGUgdGFibGVBUEk/OiBUYWJsZUFQSVxuXHQpIHtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRpdHkgPSBzZXR0aW5ncy5jb2xsZWN0aW9uRW50aXR5O1xuXHRcdHRoaXMubWV0YU1vZGVsID0gc2V0dGluZ3MubWV0YU1vZGVsO1xuXG5cdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHR0aGlzLmNvbnN0cnVjdG9yV2l0aEZ1bmN0aW9ucyh0YWJsZUFQSSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY29uc3RydWN0b3JXaXRoU3RyaW5ncygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgZXZlbnQgaGFuZGxlciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHZhbHVlcy5cblx0ICovXG5cdHByaXZhdGUgY29uc3RydWN0b3JXaXRoU3RyaW5ncygpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZVR5cGUgPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uY29udHJvbD8udHlwZTtcblxuXHRcdHRoaXMuYWRkQ2FyZFRvSW5zaWdodHNQcmVzcyA9IFwiQVBJLm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkKCRldmVudCwgJGNvbnRyb2xsZXIpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMuYmVmb3JlRXhwb3J0ID0gXCJBUEkub25CZWZvcmVFeHBvcnQoJGV2ZW50KVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLmJlZm9yZU9wZW5Db250ZXh0TWVudSA9IFwiQVBJLm9uQ29udGV4dE1lbnVQcmVzcygkZXZlbnQpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMuY29sbGFwc2VOb2RlID1cblx0XHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IChcIkFQSS5vbkNvbGxhcHNlRXhwYW5kTm9kZSgkZXZlbnQsIGZhbHNlKVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZCA9IFwiVGFibGVSdW50aW1lLm9uQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cblx0XHRjb25zdCByb3dOYXZpZ2F0aW9uSW5mbyA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uLnJvdz8ubmF2aWdhdGlvbkluZm87XG5cdFx0aWYgKHJvd05hdmlnYXRpb25JbmZvICE9PSB1bmRlZmluZWQgfHwgdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5vdmVycmlkZVJvd1ByZXNzKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBhIHJvdyBwcmVzcyBkZWZpbmVkLCB0aGVyZSBpcyBhIG9wZW4gaW4gbmV3IHRhYiBpbiB0aGUgY29udGV4dHVhbCBtZW51IGFuZCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGlzIHN0aWxsIGRlZmluZWRcblx0XHRcdC8vIGN1c3RvbWVyIGZvdW5kIGNsZXZlciB3YXlzIHRvIHVzZSBpdCBsaWtlIGluIENTMjAyNTAwMTAwMzUxMjVcblx0XHRcdGlmIChyb3dOYXZpZ2F0aW9uSW5mbz8udHlwZSA9PT0gXCJPdXRib3VuZFwiKSB7XG5cdFx0XHRcdHRoaXMuY29udGV4dE1lbnVPcGVuSW5OZXdUYWIgPVxuXHRcdFx0XHRcdGAub25PcGVuSW5OZXdUYWJOYXZpZ2F0ZU91dEJvdW5kKCcke3Jvd05hdmlnYXRpb25JbmZvLm5hdmlnYXRpb25UYXJnZXR9JywgJXtpbnRlcm5hbD5jb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzfSwgXCJcIiwgJHtzZWxlY3Rpb25MaW1pdEZvck9wZW5Jbk5ld1RhYn0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyID1cblx0XHRcdFx0XHRgQVBJLm9uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MoJGV2ZW50LCAkY29udHJvbGxlciwgJXtpbnRlcm5hbD5jb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzfSwgJHtzZWxlY3Rpb25MaW1pdEZvclNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlcn0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0XHRcdHRoaXMuY29udGV4dE1lbnVPcGVuSW5OZXdUYWIgPVxuXHRcdFx0XHRcdGBBUEkub25PcGVuSW5OZXdUYWJQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAgJXtpbnRlcm5hbD5jb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzfSwgJXtpbnRlcm5hbD5jb250ZXh0bWVudS9uYXZpZ2FibGVDb250ZXh0c30seyBjYWxsRXh0ZW5zaW9uOiB0cnVlLCB0YXJnZXRQYXRoOiAnJHtcblx0XHRcdFx0XHRcdHJvd05hdmlnYXRpb25JbmZvPy50YXJnZXRQYXRoID8/IFwiXCJcblx0XHRcdFx0XHR9JywgbmF2TW9kZTogJ29wZW5Jbk5ld1RhYicgfSwgJHtzZWxlY3Rpb25MaW1pdEZvck9wZW5Jbk5ld1RhYn0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5kYXRhU3RhdGVDaGFuZ2UgPSBcIkFQSS5vbkRhdGFTdGF0ZUNoYW5nZVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRcdGlmICh0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uY29udHJvbD8uaGFzRGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyKSB7XG5cdFx0XHR0aGlzLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlciA9IFwiVGFibGVSdW50aW1lLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlclwiIGFzIHVua25vd24gYXMgKFxuXHRcdFx0XHRtZXNzYWdlOiBNZXNzYWdlLFxuXHRcdFx0XHRjb250cm9sOiBDb250cm9sXG5cdFx0XHQpID0+IGJvb2xlYW47XG5cdFx0fVxuXG5cdFx0dGhpcy5kcmFnU3RhcnREb2N1bWVudCA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IChcIkFQSS5vbkRyYWdTdGFydERvY3VtZW50XCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRyYWdFbnRlckRvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKFwiQVBJLm9uRHJhZ0VudGVyRG9jdW1lbnRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZHJvcERvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKFwiQVBJLm9uRHJvcERvY3VtZW50XCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmV4cGFuZE5vZGUgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAoXCJBUEkub25Db2xsYXBzZUV4cGFuZE5vZGUoJGV2ZW50LCB0cnVlKVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5maWVsZENoYW5nZUluQ3JlYXRpb25Sb3cgPSBgVGFibGVSdW50aW1lLm9uRmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93KCRldmVudCwgJHshIXRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uXG5cdFx0XHQuY29udHJvbC5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb259KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMuZmllbGRMaXZlQ2hhbmdlID1cblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiXG5cdFx0XHRcdD8gKFwiQVBJLm9uRmllbGRMaXZlQ2hhbmdlKCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdHRoaXMucm93UHJlc3MgPSBcIkFQSS5vblRhYmxlUm93UHJlc3NcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5zZWdtZW50ZWRCdXR0b25QcmVzcyA9IFwiQVBJLm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZSA9IFwiQVBJLm9uU2VsZWN0aW9uQ2hhbmdlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnRhYmxlQ29udGV4dENoYW5nZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoYFRhYmxlUnVudGltZS5vblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkKCRldmVudCwgJHt0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbj8uaW5pdGlhbEV4cGFuc2lvbkxldmVsfSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSlcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLnVwbG9hZENvbXBsZXRlZCA9IFwiVXBsb2FkVGFibGVSdW50aW1lLm9uVXBsb2FkQ29tcGxldGVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkRmlsZU5hbWVMZW5ndGhFeGNlZWRlZCA9IFwiVXBsb2FkVGFibGVSdW50aW1lLm9uRmlsZU5hbWVMZW5ndGhFeGNlZWRlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEZpbGVTaXplRXhjZWVkZWQgPSBcIlVwbG9hZFRhYmxlUnVudGltZS5vbkZpbGVTaXplRXhjZWVkZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIgPSBcIlVwbG9hZFRhYmxlUnVudGltZS51cGxvYWRGaWxlXCIgYXMgdW5rbm93biBhcyBGdW5jdGlvbjtcblx0XHR0aGlzLnVwbG9hZE1lZGlhVHlwZU1pc21hdGNoID0gXCJVcGxvYWRUYWJsZVJ1bnRpbWUub25NZWRpYVR5cGVNaXNtYXRjaFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnZhcmlhbnRTYXZlZCA9IFwiQVBJLm9uVmFyaWFudFNhdmVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudmFyaWFudFNlbGVjdGVkID0gXCJBUEkub25WYXJpYW50U2VsZWN0ZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIGV2ZW50IGhhbmRsZXIgcHJvcGVydGllcyB3aXRoIGZ1bmN0aW9ucy5cblx0ICogQHBhcmFtIHRhYmxlQVBJXG5cdCAqL1xuXHRwcml2YXRlIGNvbnN0cnVjdG9yV2l0aEZ1bmN0aW9ucyh0YWJsZUFQSTogVGFibGVBUEkpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZVR5cGUgPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uY29udHJvbD8udHlwZTtcblxuXHRcdHRoaXMuYWRkQ2FyZFRvSW5zaWdodHNQcmVzcyA9IHRhYmxlQVBJLm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkLmJpbmQodGFibGVBUEkpO1xuXHRcdHRoaXMuYmVmb3JlRXhwb3J0ID0gdGFibGVBUEkub25CZWZvcmVFeHBvcnQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5iZWZvcmVPcGVuQ29udGV4dE1lbnUgPSB0YWJsZUFQSS5vbkNvbnRleHRNZW51UHJlc3MuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5jb2xsYXBzZU5vZGUgPVxuXHRcdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdFx0XHRcdD8gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHR0YWJsZUFQSS5vbkNvbGxhcHNlRXhwYW5kTm9kZShlLCBmYWxzZSk7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmNvbnRleHRNZW51SXRlbVNlbGVjdGVkID0gVGFibGVSdW50aW1lLm9uQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQuYmluZChUYWJsZVJ1bnRpbWUpO1xuXG5cdFx0Y29uc3Qgcm93TmF2aWdhdGlvbkluZm8gPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbi5yb3c/Lm5hdmlnYXRpb25JbmZvO1xuXHRcdGlmIChyb3dOYXZpZ2F0aW9uSW5mbyAhPT0gdW5kZWZpbmVkIHx8IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMub3ZlcnJpZGVSb3dQcmVzcykge1xuXHRcdFx0aWYgKHJvd05hdmlnYXRpb25JbmZvPy50eXBlID09PSBcIk91dGJvdW5kXCIpIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYiA9IChfZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZUFQSS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdGNvbnRyb2xsZXI/Lm9uT3BlbkluTmV3VGFiTmF2aWdhdGVPdXRCb3VuZD8uKFxuXHRcdFx0XHRcdFx0cm93TmF2aWdhdGlvbkluZm8ubmF2aWdhdGlvblRhcmdldCxcblx0XHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXIgPSAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKSE7XG5cdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGVBUEkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdFx0XHR0YWJsZUFQSS5vblNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlclByZXNzKFxuXHRcdFx0XHRcdFx0ZSxcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c1wiKSxcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkxpbWl0Rm9yU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYiA9IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpITtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZUFQSS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdHRhYmxlQVBJLm9uT3BlbkluTmV3VGFiUHJlc3MoXG5cdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcixcblx0XHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25hdmlnYWJsZUNvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0eyBjYWxsRXh0ZW5zaW9uOiB0cnVlLCB0YXJnZXRQYXRoOiByb3dOYXZpZ2F0aW9uSW5mbz8udGFyZ2V0UGF0aCA/PyBcIlwiLCBuYXZNb2RlOiBcIm9wZW5Jbk5ld1RhYlwiIH0sXG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25MaW1pdEZvck9wZW5Jbk5ld1RhYlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5kYXRhU3RhdGVDaGFuZ2UgPSB0YWJsZUFQSS5vbkRhdGFTdGF0ZUNoYW5nZS5iaW5kKHRhYmxlQVBJKTtcblxuXHRcdGlmICh0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uY29udHJvbD8uaGFzRGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyKSB7XG5cdFx0XHR0aGlzLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlciA9IHRhYmxlQVBJLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlci5iaW5kKHRhYmxlQVBJKTtcblx0XHR9XG5cblx0XHR0aGlzLmRyYWdTdGFydERvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKHRhYmxlQVBJLm9uRHJhZ1N0YXJ0RG9jdW1lbnQuYmluZCh0YWJsZUFQSSkgYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcmFnRW50ZXJEb2N1bWVudCA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/ICh0YWJsZUFQSS5vbkRyYWdFbnRlckRvY3VtZW50LmJpbmQodGFibGVBUEkpIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZHJvcERvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKHRhYmxlQVBJLm9uRHJvcERvY3VtZW50LmJpbmQodGFibGVBUEkpIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZXhwYW5kTm9kZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRhYmxlQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKGUsIHRydWUpO1xuXHRcdFx0XHQgIH1cblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLmZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdyA9IChlKTogdm9pZCA9PiB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUub25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3coZSwgISF0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbik7XG5cdFx0fTtcblx0XHR0aGlzLmZpZWxkTGl2ZUNoYW5nZSA9XG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8ubmFtZSA9PT0gXCJJbmxpbmVDcmVhdGlvblJvd3NcIiA/IHRhYmxlQVBJLm9uRmllbGRMaXZlQ2hhbmdlLmJpbmQodGFibGVBUEkpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMucm93UHJlc3MgPSB0YWJsZUFQSS5vblRhYmxlUm93UHJlc3MuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5zZWdtZW50ZWRCdXR0b25QcmVzcyA9IHRhYmxlQVBJLm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZSA9IHRhYmxlQVBJLm9uU2VsZWN0aW9uQ2hhbmdlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLnRhYmxlQ29udGV4dENoYW5nZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFRhYmxlUnVudGltZS5vblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkKFxuXHRcdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbj8uaW5pdGlhbEV4cGFuc2lvbkxldmVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHQgIH1cblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLnVwbG9hZENvbXBsZXRlZCA9IFVwbG9hZFRhYmxlUnVudGltZS5vblVwbG9hZENvbXBsZXRlZC5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSkgYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQgPSBVcGxvYWRUYWJsZVJ1bnRpbWUub25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkRmlsZVNpemVFeGNlZWRlZCA9IFVwbG9hZFRhYmxlUnVudGltZS5vbkZpbGVTaXplRXhjZWVkZWQuYmluZChVcGxvYWRUYWJsZVJ1bnRpbWUpIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIgPSBVcGxvYWRUYWJsZVJ1bnRpbWUudXBsb2FkRmlsZS5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSk7XG5cdFx0dGhpcy51cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCA9IFVwbG9hZFRhYmxlUnVudGltZS5vbk1lZGlhVHlwZU1pc21hdGNoLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudmFyaWFudFNhdmVkID0gdGFibGVBUEkub25WYXJpYW50U2F2ZWQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy52YXJpYW50U2VsZWN0ZWQgPSB0YWJsZUFQSS5vblZhcmlhbnRTZWxlY3RlZC5iaW5kKHRhYmxlQVBJKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciB0aGUgQ3JlYXRlIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEBwYXJhbSBmb3JDcmVhdGlvblJvd1xuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbiwgZm9yQ3JlYXRpb25Sb3c6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIGZvckNyZWF0aW9uUm93XG5cdFx0XHRcdD8gVGFibGVSdW50aW1lLm9uQ3JlYXRlQnV0dG9uUHJlc3MuYmluZChUYWJsZVJ1bnRpbWUpXG5cdFx0XHRcdDogKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIgOiBcInNlbGVjdGVkQ29udGV4dHNcIjtcblx0XHRcdFx0XHRcdFRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKGUsIGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkocGF0aCkpO1xuXHRcdFx0XHQgIH07XG5cdFx0fSBlbHNlIGlmICghZm9yQ3JlYXRpb25Sb3cpIHtcblx0XHRcdHJldHVybiBmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQ/IChcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudCwgJHtpbnRlcm5hbD5jb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzfSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpXG5cdFx0XHRcdDogKFwiVGFibGVSdW50aW1lLm9uQ3JlYXRlQnV0dG9uUHJlc3MoJGV2ZW50LCAke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9KVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDcmVhdGUgbWVudSBpdGVtLlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0Q3JlYXRlTWVudUl0ZW1QcmVzc0hhbmRsZXIoaW5kZXg6IG51bWJlciwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRjb25zdCBwYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFRhYmxlUnVudGltZS5vbkNyZWF0ZU1lbnVJdGVtUHJlc3MoZSwgaW5kZXgsIHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KHBhdGgpKTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgVGFibGVSdW50aW1lLm9uQ3JlYXRlTWVudUl0ZW1QcmVzcygkZXZlbnQsICR7aW5kZXh9LCBcXCR7aW50ZXJuYWw+JHtwYXRofX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDdXQgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDdXRIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSEub25DdXQoZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25DdXQoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIENvcHkgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDb3B5SGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uQ29weShlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYEFQSS5vbkNvcHkoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgYW4gYWN0aW9uIGJ1dHRvbi5cblx0ICogQHBhcmFtIGRhdGFGaWVsZFxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBwYXJlbnRBY3Rpb25cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdGFjdGlvbjogQmFzZUFjdGlvbixcblx0XHRwYXJlbnRBY3Rpb246IEJhc2VBY3Rpb24gfCB1bmRlZmluZWQsXG5cdFx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cblx0KTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQodGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpISlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBhY3Rpb25Db250ZXh0UGF0aCA/IHRoaXMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSA6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25OYW1lID0gZGF0YUZpZWxkLkFjdGlvbjtcblx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGVOYW1lID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IGlzU3RhdGljQWN0aW9uID1cblx0XHRcdFx0dHlwZW9mIGFjdGlvbkNvbnRleHQ/LmdldE9iamVjdCgpICE9PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdChUYWJsZUhlbHBlci5faXNTdGF0aWNBY3Rpb24oYWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCksIGFjdGlvbk5hbWUpIHx8XG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUoYWN0aW9uTmFtZS50b1N0cmluZygpLCB0YXJnZXRFbnRpdHlUeXBlTmFtZSkpO1xuXHRcdFx0Y29uc3QgYXBwbGljYWJsZVByb3BlcnR5UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZVByb3BlcnR5UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3QgY29udGV4dE1lbnVQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCI7XG5cblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGhpcy50YWJsZUFQSSEuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSE7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRjb250ZXh0czogIWlzU3RhdGljQWN0aW9uID8gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGAke2NvbnRleHRNZW51UGF0aH1zZWxlY3RlZENvbnRleHRzYCkgOiBudWxsLFxuXHRcdFx0XHRcdGJTdGF0aWNBY3Rpb246IGlzU3RhdGljQWN0aW9uID8gaXNTdGF0aWNBY3Rpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogdGhpcy5jb2xsZWN0aW9uRW50aXR5Lm5hbWUsXG5cdFx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzOiAhaXNTdGF0aWNBY3Rpb25cblx0XHRcdFx0XHRcdD8gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke2RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5UGF0aH0vYClcblx0XHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM6ICFpc1N0YXRpY0FjdGlvblxuXHRcdFx0XHRcdFx0PyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7ZGF0YUZpZWxkLkFjdGlvbn0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHlQYXRofS9gKVxuXHRcdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRcdGlzTmF2aWdhYmxlOiAocGFyZW50QWN0aW9uID8/IGFjdGlvbikuaXNOYXZpZ2FibGUsXG5cdFx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogYWN0aW9uLmVuYWJsZUF1dG9TY3JvbGwsXG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBhY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogZGF0YUZpZWxkPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIixcblx0XHRcdFx0XHRjb250cm9sSWQ6IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWw/LnZhbHVlT2YoKSA/PyBcIlwiLFxuXHRcdFx0XHRcdG1vZGVsOiB0aGlzLnRhYmxlQVBJIS5nZXRQYWdlQ29udHJvbGxlcigpIS5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZzogYWN0aW9uLmRpc2FibGVTdHJpY3RIYW5kbGluZ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJPy5vbkFjdGlvblByZXNzKGUsIHRoaXMudGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKSEsIGRhdGFGaWVsZC5BY3Rpb24udmFsdWVPZigpLCBwYXJhbXMpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFRhYmxlSGVscGVyLnByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24oXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb250ZXh0T2JqZWN0UGF0aDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdFx0XHRjb250ZW50SWQ6IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50aXR5Lm5hbWUsXG5cdFx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0YWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCksXG5cdFx0XHRcdChwYXJlbnRBY3Rpb24gPz8gYWN0aW9uKS5pc05hdmlnYWJsZSxcblx0XHRcdFx0YWN0aW9uLmVuYWJsZUF1dG9TY3JvbGwsXG5cdFx0XHRcdGFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24sXG5cdFx0XHRcdGZvckNvbnRleHRNZW51LFxuXHRcdFx0XHRhY3Rpb24uZGlzYWJsZVN0cmljdEhhbmRsaW5nXG5cdFx0XHQpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgYW4gSUJOIGFjdGlvbi5cblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIoYWN0aW9uOiBCYXNlQWN0aW9uLCBmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGlmIChhY3Rpb24uYW5ub3RhdGlvblBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgZGF0YUZpZWxkQ29udGV4dCA9IHRoaXMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghZGF0YUZpZWxkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cgPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3MgIT09IHRydWU7XG5cblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpITtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBWNENvbnRleHRbXTtcblx0XHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM/OiBWNENvbnRleHRbXTtcblx0XHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBWNENvbnRleHRbXTtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBvYmplY3Q7XG5cdFx0XHRcdH0gPSB7fTtcblxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBmb3JDb250ZXh0TWVudVxuXHRcdFx0XHRcdD8gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c1wiKVxuXHRcdFx0XHRcdDogaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKTtcblxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJiAhZGF0YUZpZWxkLklubGluZSAmJiBuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdFx0XHRjb25zdCBhcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFBcHBsaWNhYmxlXCIgOiBcImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHMgPSBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRgaWJuLyR7ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke2RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5fS9gXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMgPSBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRgaWJuLyR7ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke2RhdGFGaWVsZC5BY3Rpb259LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fS9gXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5sYWJlbCA9IGRhdGFGaWVsZC5MYWJlbCBhcyBzdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gZGF0YUZpZWxkLk1hcHBpbmc7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLnRhYmxlQVBJIS5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0XHRpZiAobmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nKSB7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8uX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2coXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRlLmdldFNvdXJjZTxDb250cm9sPigpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250cm9sbGVyPy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0ZS5nZXRTb3VyY2U8Q29udHJvbD4oKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOKFxuXHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdGZvckNvbnRleHRNZW51ID8gXCIke2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9XCIgOiBcIiR7aW50ZXJuYWw+c2VsZWN0ZWRDb250ZXh0c31cIixcblx0XHRcdFx0bmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nLFxuXHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0KSBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUoXG5cdFx0ZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyB8IHVuZGVmaW5lZCxcblx0XHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogc3RyaW5nIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHZhbHVlID0gZGF0YUZpZWxkPy5WYWx1ZTtcblx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLnRhYmxlQVBJID8gdmFsdWUgOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHZhbHVlLCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih2YWx1ZSk7XG5cdFx0XHRpZiAoaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xuXHRcdFx0XHRjb25zdCB2YWx1ZUV4cHJlc3Npb24gPSBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih2YWx1ZUV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciB0aGUgRGVsZXRlIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0RGVsZXRlQnV0dG9uUHJlc3NIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0Y29uc3QgaGVhZGVySW5mbyA9ICgodGhpcy5jb2xsZWN0aW9uRW50aXR5IGFzIEVudGl0eVNldCk/LmVudGl0eVR5cGUgfHwgKHRoaXMuY29sbGVjdGlvbkVudGl0eSBhcyBOYXZpZ2F0aW9uUHJvcGVydHkpPy50YXJnZXRUeXBlKVxuXHRcdFx0Py5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm87XG5cblx0XHRjb25zdCBjb250ZXh0TWVudVBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0XHRjb25zdCBkZWxldGFibGVDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9ZGVsZXRhYmxlQ29udGV4dHNgO1xuXHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHNQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofXNlbGVjdGVkQ29udGV4dHNJbmNsdWRpbmdJbmFjdGl2ZWA7XG5cdFx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudVxuXHRcdFx0PyBgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzYFxuXHRcdFx0OiBgJHtjb250ZXh0TWVudVBhdGh9bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzRm9yRGVsZXRlYDtcblx0XHRjb25zdCB1blNhdmVkQ29udGV4dHNQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofXVuU2F2ZWRDb250ZXh0c2A7XG5cdFx0Y29uc3QgbG9ja2VkQ29udGV4dHNQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofWxvY2tlZENvbnRleHRzYDtcblx0XHRjb25zdCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlUGF0aCA9IGAke2NvbnRleHRNZW51UGF0aH1kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlYDtcblx0XHRjb25zdCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlUGF0aCA9IGAke2NvbnRleHRNZW51UGF0aH1kcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlYDtcblxuXHRcdGNvbnN0IHRpdGxlRXhwcmVzc2lvbiA9IHRoaXMuZ2V0RXhwcmVzc2lvbkZvckRhdGFGaWVsZFZhbHVlKFxuXHRcdFx0aGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMsXG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRlc2NyaXB0aW9uRXhwcmVzc2lvbiA9IHRoaXMuZ2V0RXhwcmVzc2lvbkZvckRhdGFGaWVsZFZhbHVlKFxuXHRcdFx0aGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMsXG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoXG5cdFx0KTtcblxuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKF9lOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdFx0aWQ6IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogaW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRoKSBhcyBudW1iZXIsXG5cdFx0XHRcdFx0dW5TYXZlZENvbnRleHRzOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KHVuU2F2ZWRDb250ZXh0c1BhdGgpIGFzIFY0Q29udGV4dFtdLFxuXHRcdFx0XHRcdGxvY2tlZENvbnRleHRzOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGxvY2tlZENvbnRleHRzUGF0aCkgYXMgVjRDb250ZXh0W10sXG5cdFx0XHRcdFx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZTogaW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlUGF0aCkgYXMgVjRDb250ZXh0W10sXG5cdFx0XHRcdFx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZTogaW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlUGF0aCkgYXMgVjRDb250ZXh0W10sXG5cdFx0XHRcdFx0Y29udHJvbElkOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KFwiY29udHJvbElkXCIpLFxuXHRcdFx0XHRcdHRpdGxlOiB0aXRsZUV4cHJlc3Npb24sXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uRXhwcmVzc2lvbixcblx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KHNlbGVjdGVkQ29udGV4dHNQYXRoKSBhcyBWNENvbnRleHRbXVxuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJIS5nZXRQYWdlQ29udHJvbGxlcigpPy5lZGl0Rmxvdy5kZWxldGVNdWx0aXBsZURvY3VtZW50cyhcblx0XHRcdFx0XHRpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGRlbGV0YWJsZUNvbnRleHRzUGF0aCksXG5cdFx0XHRcdFx0cGFyYW1zXG5cdFx0XHRcdCk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdGlkOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkKSxcblx0XHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBgXFwke2ludGVybmFsPiR7bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzUGF0aH19YCxcblx0XHRcdFx0dW5TYXZlZENvbnRleHRzOiBgXFwke2ludGVybmFsPiR7dW5TYXZlZENvbnRleHRzUGF0aH19YCxcblx0XHRcdFx0bG9ja2VkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHtsb2NrZWRDb250ZXh0c1BhdGh9fWAsXG5cdFx0XHRcdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU6IGBcXCR7aW50ZXJuYWw+JHtkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlUGF0aH19YCxcblx0XHRcdFx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZTogYFxcJHtpbnRlcm5hbD4ke2RyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRofX1gLFxuXHRcdFx0XHRjb250cm9sSWQ6IFwiJHtpbnRlcm5hbD5jb250cm9sSWR9XCIsXG5cdFx0XHRcdHRpdGxlOiB0aXRsZUV4cHJlc3Npb24sXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbkV4cHJlc3Npb24sXG5cdFx0XHRcdHNlbGVjdGVkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHtzZWxlY3RlZENvbnRleHRzUGF0aH19YFxuXHRcdFx0fTtcblxuXHRcdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZW5lcmF0ZUZ1bmN0aW9uKFxuXHRcdFx0XHRcIi5lZGl0Rmxvdy5kZWxldGVNdWx0aXBsZURvY3VtZW50c1wiLFxuXHRcdFx0XHRgXFwke2ludGVybmFsPiR7ZGVsZXRhYmxlQ29udGV4dHNQYXRofX1gLFxuXHRcdFx0XHRDb21tb25IZWxwZXIub2JqZWN0VG9TdHJpbmcocGFyYW1zKVxuXHRcdFx0KSBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgYSBtYW5pZmVzdCBhY3Rpb24gYnV0dG9uLlxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyKGFjdGlvbjogQ3VzdG9tQWN0aW9uLCBmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRpZiAoYWN0aW9uLm5vV3JhcCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBJZiBub1dyYXAgPSB0cnVlLCB0aGVuIHRoZSBhY3Rpb24gaXMgYSBzbG90IGFjdGlvbiAoZGVmaW5lZCBpbiB0aGUgWE1MIHZpZXcgYXMgYW4gYWdncmVnYXRpb24gb2YgdGhlIHRhYmxlIGJsb2NrKVxuXHRcdFx0XHRjb25zdCByZWxhdGVkQWN0aW9uRWxlbWVudCA9IHRoaXMudGFibGVBUEkuZmluZFNsb3RBY3Rpb25Gcm9tS2V5KGFjdGlvbi5rZXkpO1xuXHRcdFx0XHRpZiAocmVsYXRlZEFjdGlvbkVsZW1lbnQpIHtcblx0XHRcdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsUGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIgOiBcInNlbGVjdGVkQ29udGV4dHNcIjtcblx0XHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhO1xuXHRcdFx0XHRcdFx0Y29uc3QgZXZlbnRQYXJhbWV0ZXJzID0geyAuLi5lLmdldFBhcmFtZXRlcnMoKSwgY29udGV4dHM6IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShpbnRlcm5hbE1vZGVsUGF0aCkgfTtcblx0XHRcdFx0XHRcdHJlbGF0ZWRBY3Rpb25FbGVtZW50LmZpcmVFdmVudChcInByZXNzXCIsIGV2ZW50UGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDb3VsZG4ndCBmaW5kIGFjdGlvbiB3aXRoIGtleSBcIiArIGFjdGlvbi5rZXkpO1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsUGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIgOiBcInNlbGVjdGVkQ29udGV4dHNcIjtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpITtcblx0XHRcdFx0XHRGUE1IZWxwZXIuYWN0aW9uV3JhcHBlcihlLCBhY3Rpb24uaGFuZGxlck1vZHVsZSwgYWN0aW9uLmhhbmRsZXJNZXRob2QsIHtcblx0XHRcdFx0XHRcdGNvbnRleHRzOiBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoaW50ZXJuYWxNb2RlbFBhdGgpXG5cdFx0XHRcdFx0fSkuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGN1c3RvbSBhY3Rpb25cIiwgZXJyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIChhY3Rpb24ubm9XcmFwID09PSB0cnVlXG5cdFx0XHRcdD8gYWN0aW9uLnByZXNzXG5cdFx0XHRcdDogQ29tbW9uSGVscGVyLmJ1aWxkQWN0aW9uV3JhcHBlcihcblx0XHRcdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0XHRcdHsgaWQ6IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkIH0sXG5cdFx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQgICkpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciB0aGUgbWFzcyBlZGl0IGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0TWFzc0VkaXRCdXR0b25QcmVzc0hhbmRsZXIoZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJIS5vbk1hc3NFZGl0QnV0dG9uUHJlc3NlZChlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYEFQSS5vbk1hc3NFZGl0QnV0dG9uUHJlc3NlZCgkZXZlbnQsICR7Zm9yQ29udGV4dE1lbnV9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBtb3ZlIHVwIC8gbW92ZSBkb3duIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSBmb3JNb3ZlVXBcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0TW92ZVVwRG93bkhhbmRsZXIoZm9yTW92ZVVwOiBib29sZWFuLCBmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uTW92ZVVwRG93bihlLCBmb3JNb3ZlVXAsIGZvckNvbnRleHRNZW51KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgQVBJLm9uTW92ZVVwRG93bigkZXZlbnQsICR7Zm9yTW92ZVVwfSwgJHtmb3JDb250ZXh0TWVudX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBQYXN0ZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldFBhc3RlSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy50YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJIS5vblBhc3RlKGUsIGNvbnRyb2xsZXIsIGZvckNvbnRleHRNZW51KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgQVBJLm9uUGFzdGUoJGV2ZW50LCAkY29udHJvbGxlciwgJHtmb3JDb250ZXh0TWVudX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUE0QkE7RUFDQSxNQUFNQSw0Q0FBNEMsR0FBRyxDQUFDO0VBQ3REO0VBQ0EsTUFBTUMsNkJBQTZCLEdBQUcsRUFBRTtFQUFDLElBRXBCQyx5QkFBeUI7SUF5RDdDLFNBQUFBLDBCQUNTQyxvQkFBMEMsRUFDbERDLFFBQXlGLEVBQ2pGQyxRQUFtQixFQUMxQjtNQUFBLEtBSE9GLG9CQUEwQyxHQUExQ0Esb0JBQTBDO01BQUEsS0FFMUNFLFFBQW1CLEdBQW5CQSxRQUFtQjtNQUUzQixJQUFJLENBQUNDLGdCQUFnQixHQUFHRixRQUFRLENBQUNFLGdCQUFnQjtNQUNqRCxJQUFJLENBQUNDLFNBQVMsR0FBR0gsUUFBUSxDQUFDRyxTQUFTO01BRW5DLElBQUlGLFFBQVEsRUFBRTtRQUNiLElBQUksQ0FBQ0csd0JBQXdCLENBQUNILFFBQVEsQ0FBQztNQUN4QyxDQUFDLE1BQU07UUFDTixJQUFJLENBQUNJLHNCQUFzQixDQUFDLENBQUM7TUFDOUI7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7SUFGQ0MsUUFBQSxHQUFBUix5QkFBQTtJQUFBLElBQUFTLE1BQUEsR0FBQVQseUJBQUEsQ0FBQVUsU0FBQTtJQUFBRCxNQUFBLENBR1FGLHNCQUFzQixHQUE5QixTQUFRQSxzQkFBc0JBLENB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
463
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZWxlY3Rpb25MaW1pdEZvclNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsInRhYmxlQmxvY2tQcm9wZXJ0aWVzIiwic2V0dGluZ3MiLCJ0YWJsZUFQSSIsImNvbGxlY3Rpb25FbnRpdHkiLCJtZXRhTW9kZWwiLCJjb25zdHJ1Y3RvcldpdGhGdW5jdGlvbnMiLCJjb25zdHJ1Y3RvcldpdGhTdHJpbmdzIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJ0YWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJjb250cm9sIiwidHlwZSIsImFkZENhcmRUb0luc2lnaHRzUHJlc3MiLCJiZWZvcmVFeHBvcnQiLCJiZWZvcmVPcGVuQ29udGV4dE1lbnUiLCJjb2xsYXBzZU5vZGUiLCJ1bmRlZmluZWQiLCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIsInJvd05hdmlnYXRpb25JbmZvIiwiYW5ub3RhdGlvbiIsInJvdyIsIm5hdmlnYXRpb25JbmZvIiwib3ZlcnJpZGVSb3dQcmVzcyIsImNvbnRleHRNZW51T3BlbkluTmV3VGFiIiwibmF2aWdhdGlvblRhcmdldCIsImNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwidGFyZ2V0UGF0aCIsImRhdGFTdGF0ZUNoYW5nZSIsImhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImRyYWdTdGFydERvY3VtZW50IiwiZHJhZ0VudGVyRG9jdW1lbnQiLCJkcm9wRG9jdW1lbnQiLCJleHBhbmROb2RlIiwiZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93IiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiZmllbGRMaXZlQ2hhbmdlIiwiY3JlYXRpb25Nb2RlIiwibmFtZSIsInJvd1ByZXNzIiwibm9vcCIsInNlZ21lbnRlZEJ1dHRvblByZXNzIiwic2VsZWN0aW9uQ2hhbmdlIiwidGFibGVDb250ZXh0Q2hhbmdlIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwidXBsb2FkQ29tcGxldGVkIiwidXBsb2FkRmlsZU5hbWVMZW5ndGhFeGNlZWRlZCIsInVwbG9hZEZpbGVTaXplRXhjZWVkZWQiLCJ1cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIiLCJ1cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCIsInZhcmlhbnRTYXZlZCIsInZhcmlhbnRTZWxlY3RlZCIsIm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkIiwiYmluZCIsIm9uQmVmb3JlRXhwb3J0Iiwib25Db250ZXh0TWVudVByZXNzIiwiZSIsIm9uQ29sbGFwc2VFeHBhbmROb2RlIiwiVGFibGVSdW50aW1lIiwib25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZCIsIl9lIiwiY29udHJvbGxlciIsImdldFBhZ2VDb250cm9sbGVyIiwiaW50ZXJuYWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvbk9wZW5Jbk5ld1RhYk5hdmlnYXRlT3V0Qm91bmQiLCJnZXRQcm9wZXJ0eSIsIm9uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MiLCJvbk9wZW5Jbk5ld1RhYlByZXNzIiwiY2FsbEV4dGVuc2lvbiIsIm5hdk1vZGUiLCJvbkRhdGFTdGF0ZUNoYW5nZSIsIm9uRHJhZ1N0YXJ0RG9jdW1lbnQiLCJvbkRyYWdFbnRlckRvY3VtZW50Iiwib25Ecm9wRG9jdW1lbnQiLCJvbkZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdyIsIm9uRmllbGRMaXZlQ2hhbmdlIiwib25UYWJsZVJvd1ByZXNzIiwib25Ob29wIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwib25TZWxlY3Rpb25DaGFuZ2VkIiwib25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZCIsIlVwbG9hZFRhYmxlUnVudGltZSIsIm9uVXBsb2FkQ29tcGxldGVkIiwib25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkIiwib25GaWxlU2l6ZUV4Y2VlZGVkIiwidXBsb2FkRmlsZSIsIm9uTWVkaWFUeXBlTWlzbWF0Y2giLCJvblZhcmlhbnRTYXZlZCIsIm9uVmFyaWFudFNlbGVjdGVkIiwiZ2V0Q3JlYXRlQnV0dG9uUHJlc3NIYW5kbGVyIiwiZm9yQ29udGV4dE1lbnUiLCJmb3JDcmVhdGlvblJvdyIsIm9uQ3JlYXRlQnV0dG9uUHJlc3MiLCJwYXRoIiwiZ2V0Q3JlYXRlTWVudUl0ZW1QcmVzc0hhbmRsZXIiLCJpbmRleCIsIm9uQ3JlYXRlTWVudUl0ZW1QcmVzcyIsImdldEN1dEhhbmRsZXIiLCJvbkN1dCIsImdldENvcHlIYW5kbGVyIiwib25Db3B5IiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwiZGF0YUZpZWxkIiwiYWN0aW9uIiwicGFyZW50QWN0aW9uIiwiYWN0aW9uQ29udGV4dFBhdGgiLCJhbm5vdGF0aW9uUGF0aCIsIkNvbW1vbkhlbHBlciIsImdldEFjdGlvbkNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImFjdGlvbkNvbnRleHQiLCJhY3Rpb25OYW1lIiwiQWN0aW9uIiwidGFyZ2V0RW50aXR5VHlwZU5hbWUiLCJjb250ZXh0T2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVR5cGUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJpc1N0YXRpY0FjdGlvbiIsImdldE9iamVjdCIsIlRhYmxlSGVscGVyIiwiX2lzU3RhdGljQWN0aW9uIiwiX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUiLCJ0b1N0cmluZyIsImFwcGxpY2FibGVQcm9wZXJ0eVBhdGgiLCJub3RBcHBsaWNhYmxlUHJvcGVydHlQYXRoIiwiY29udGV4dE1lbnVQYXRoIiwicGFyYW1zIiwiY29udGV4dHMiLCJiU3RhdGljQWN0aW9uIiwiZW50aXR5U2V0TmFtZSIsImFwcGxpY2FibGVDb250ZXh0cyIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImlzTmF2aWdhYmxlIiwiZW5hYmxlQXV0b1Njcm9sbCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsImNvbnRlbnRJZCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImxhYmVsIiwiTGFiZWwiLCJ2YWx1ZU9mIiwibW9kZWwiLCJnZXRNb2RlbCIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsIm9uQWN0aW9uUHJlc3MiLCJwcmVzc0V2ZW50RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uIiwiZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyIiwiZGF0YUZpZWxkQ29udGV4dCIsIm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyIsImVuYWJsZUFuYWx5dGljcyIsIm5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2aWdhdGlvbkNvbnRleHRzIiwiUmVxdWlyZXNDb250ZXh0IiwiSW5saW5lIiwiYXBwbGljYWJsZVByb3BlcnR5Iiwibm90QXBwbGljYWJsZVByb3BlcnR5IiwiU2VtYW50aWNPYmplY3QiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJNYXBwaW5nIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldFNvdXJjZSIsIm5hdmlnYXRlIiwiZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOIiwiZ2V0RXhwcmVzc2lvbkZvckRhdGFGaWVsZFZhbHVlIiwiZnVsbENvbnRleHRQYXRoIiwidmFsdWUiLCJWYWx1ZSIsImFkZFNpbmdsZVF1b3RlcyIsImV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJpc0NvbnN0YW50IiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJ2YWx1ZUV4cHJlc3Npb24iLCJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXREZWxldGVCdXR0b25QcmVzc0hhbmRsZXIiLCJoZWFkZXJJbmZvIiwiZW50aXR5VHlwZSIsInRhcmdldFR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVySW5mbyIsImRlbGV0YWJsZUNvbnRleHRzUGF0aCIsInNlbGVjdGVkQ29udGV4dHNQYXRoIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzUGF0aCIsInVuU2F2ZWRDb250ZXh0c1BhdGgiLCJsb2NrZWRDb250ZXh0c1BhdGgiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlUGF0aCIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRoIiwidGl0bGVFeHByZXNzaW9uIiwiVGl0bGUiLCJkZXNjcmlwdGlvbkV4cHJlc3Npb24iLCJEZXNjcmlwdGlvbiIsImlkIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwidW5TYXZlZENvbnRleHRzIiwibG9ja2VkQ29udGV4dHMiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJzZWxlY3RlZENvbnRleHRzIiwiZWRpdEZsb3ciLCJkZWxldGVNdWx0aXBsZURvY3VtZW50cyIsImdlbmVyYXRlRnVuY3Rpb24iLCJvYmplY3RUb1N0cmluZyIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwibm9XcmFwIiwicmVsYXRlZEFjdGlvbkVsZW1lbnQiLCJmaW5kU2xvdEFjdGlvbkZyb21LZXkiLCJrZXkiLCJpbnRlcm5hbE1vZGVsUGF0aCIsImV2ZW50UGFyYW1ldGVycyIsImdldFBhcmFtZXRlcnMiLCJmaXJlRXZlbnQiLCJMb2ciLCJlcnJvciIsIkZQTUhlbHBlciIsImFjdGlvbldyYXBwZXIiLCJoYW5kbGVyTW9kdWxlIiwiaGFuZGxlck1ldGhvZCIsImNhdGNoIiwiZXJyIiwicHJlc3MiLCJidWlsZEFjdGlvbldyYXBwZXIiLCJnZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlciIsIm9uTWFzc0VkaXRCdXR0b25QcmVzc2VkIiwiZ2V0TW92ZVVwRG93bkhhbmRsZXIiLCJmb3JNb3ZlVXAiLCJvbk1vdmVVcERvd24iLCJnZXRQYXN0ZUhhbmRsZXIiLCJvblBhc3RlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7XG5cdHR5cGUgRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHR0eXBlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0dHlwZSBEYXRhRmllbGRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlzQ29uc3RhbnQsIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyB0eXBlIEJhc2VBY3Rpb24sIHR5cGUgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCIuLi9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCIuLi9GaWVsZFwiO1xuaW1wb3J0IHsgdHlwZSBUYWJsZUJsb2NrUHJvcGVydGllcyB9IGZyb20gXCIuL01kY1RhYmxlVGVtcGxhdGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCIuL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcIi4vVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVJ1bnRpbWUgZnJvbSBcIi4vVGFibGVSdW50aW1lXCI7XG5pbXBvcnQgVXBsb2FkVGFibGVSdW50aW1lIGZyb20gXCIuL3VwbG9hZFRhYmxlL1VwbG9hZFRhYmxlUnVudGltZVwiO1xuXG50eXBlIEV2ZW50SGFuZGxlclR5cGUgPSAoZTogVUk1RXZlbnQpID0+IHZvaWQ7XG5cbi8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHNoYXJlIHRvIENvbGxhYm9yYXRpb24gTWFuYWdlciBzaW11bHRhbm91c2x5XG5jb25zdCBzZWxlY3Rpb25MaW1pdEZvclNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciA9IDE7XG4vLyBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byBvcGVuIGluIG5ldyB0YWJzIHNpbXVsdGFub3VzbHlcbmNvbnN0IHNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiID0gMTA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIge1xuXHRhZGRDYXJkVG9JbnNpZ2h0c1ByZXNzITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRiZWZvcmVFeHBvcnQhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGJlZm9yZU9wZW5Db250ZXh0TWVudSE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0Y29sbGFwc2VOb2RlPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0Y29udGV4dE1lbnVPcGVuSW5OZXdUYWI/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyOiBFdmVudEhhbmRsZXJUeXBlIHwgdW5kZWZpbmVkO1xuXG5cdGRhdGFTdGF0ZUNoYW5nZSE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyPzogKG1lc3NhZ2U6IE1lc3NhZ2UsIGNvbnRyb2w6IENvbnRyb2wpID0+IGJvb2xlYW47XG5cblx0ZHJhZ1N0YXJ0RG9jdW1lbnQ/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGRyYWdFbnRlckRvY3VtZW50PzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRkcm9wRG9jdW1lbnQ/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGV4cGFuZE5vZGU/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdGZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdz86IHR5cGVvZiBGaWVsZC5wcm90b3R5cGUuY2hhbmdlO1xuXG5cdGZpZWxkTGl2ZUNoYW5nZT86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0cm93UHJlc3M/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdG5vb3A/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHNlZ21lbnRlZEJ1dHRvblByZXNzPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHRzZWxlY3Rpb25DaGFuZ2UhOiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHRhYmxlQ29udGV4dENoYW5nZT86IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dXBsb2FkQ29tcGxldGVkITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR1cGxvYWRGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR1cGxvYWRGaWxlU2l6ZUV4Y2VlZGVkITogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR1cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIhOiBGdW5jdGlvbjtcblxuXHR1cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCE6IEV2ZW50SGFuZGxlclR5cGU7XG5cblx0dmFyaWFudFNhdmVkPzogRXZlbnRIYW5kbGVyVHlwZTtcblxuXHR2YXJpYW50U2VsZWN0ZWQ/OiBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdHByaXZhdGUgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHRhYmxlQmxvY2tQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0XHRzZXR0aW5nczogeyBjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk7IG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgfSxcblx0XHRwcml2YXRlIHRhYmxlQVBJPzogVGFibGVBUElcblx0KSB7XG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50aXR5ID0gc2V0dGluZ3MuY29sbGVjdGlvbkVudGl0eTtcblx0XHR0aGlzLm1ldGFNb2RlbCA9IHNldHRpbmdzLm1ldGFNb2RlbDtcblxuXHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0dGhpcy5jb25zdHJ1Y3RvcldpdGhGdW5jdGlvbnModGFibGVBUEkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvbnN0cnVjdG9yV2l0aFN0cmluZ3MoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIGV2ZW50IGhhbmRsZXIgcHJvcGVydGllcyB3aXRoIHN0cmluZyB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGNvbnN0cnVjdG9yV2l0aFN0cmluZ3MoKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVUeXBlID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmNvbnRyb2w/LnR5cGU7XG5cblx0XHR0aGlzLmFkZENhcmRUb0luc2lnaHRzUHJlc3MgPSBcIkFQSS5vbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCgkZXZlbnQsICRjb250cm9sbGVyKVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLmJlZm9yZUV4cG9ydCA9IFwiQVBJLm9uQmVmb3JlRXhwb3J0KCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy5iZWZvcmVPcGVuQ29udGV4dE1lbnUgPSBcIkFQSS5vbkNvbnRleHRNZW51UHJlc3MoJGV2ZW50KVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLmNvbGxhcHNlTm9kZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAoXCJBUEkub25Db2xsYXBzZUV4cGFuZE5vZGUoJGV2ZW50LCBmYWxzZSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQgPSBcIlRhYmxlUnVudGltZS5vbkNvbnRleHRNZW51SXRlbVNlbGVjdGVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXG5cdFx0Y29uc3Qgcm93TmF2aWdhdGlvbkluZm8gPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbi5yb3c/Lm5hdmlnYXRpb25JbmZvO1xuXHRcdGlmIChyb3dOYXZpZ2F0aW9uSW5mbyAhPT0gdW5kZWZpbmVkIHx8IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMub3ZlcnJpZGVSb3dQcmVzcykge1xuXHRcdFx0Ly8gaWYgdGhlcmUgaXMgYSByb3cgcHJlc3MgZGVmaW5lZCwgdGhlcmUgaXMgYSBvcGVuIGluIG5ldyB0YWIgaW4gdGhlIGNvbnRleHR1YWwgbWVudSBhbmQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgaGFuZGxlciBpcyBzdGlsbCBkZWZpbmVkXG5cdFx0XHQvLyBjdXN0b21lciBmb3VuZCBjbGV2ZXIgd2F5cyB0byB1c2UgaXQgbGlrZSBpbiBDUzIwMjUwMDEwMDM1MTI1XG5cdFx0XHRpZiAocm93TmF2aWdhdGlvbkluZm8/LnR5cGUgPT09IFwiT3V0Ym91bmRcIikge1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID1cblx0XHRcdFx0XHRgLm9uT3BlbkluTmV3VGFiTmF2aWdhdGVPdXRCb3VuZCgnJHtyb3dOYXZpZ2F0aW9uSW5mby5uYXZpZ2F0aW9uVGFyZ2V0fScsICV7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c30sIFwiXCIsICR7c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJ9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciA9XG5cdFx0XHRcdFx0YEFQSS5vblNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlclByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsICV7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c30sICR7c2VsZWN0aW9uTGltaXRGb3JTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJ9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID1cblx0XHRcdFx0XHRgQVBJLm9uT3BlbkluTmV3VGFiUHJlc3MoJGV2ZW50LCAkY29udHJvbGxlciwgICV7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c30sICV7aW50ZXJuYWw+Y29udGV4dG1lbnUvbmF2aWdhYmxlQ29udGV4dHN9LHsgY2FsbEV4dGVuc2lvbjogdHJ1ZSwgdGFyZ2V0UGF0aDogJyR7XG5cdFx0XHRcdFx0XHRyb3dOYXZpZ2F0aW9uSW5mbz8udGFyZ2V0UGF0aCA/PyBcIlwiXG5cdFx0XHRcdFx0fScsIG5hdk1vZGU6ICdvcGVuSW5OZXdUYWInIH0sICR7c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJ9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuZGF0YVN0YXRlQ2hhbmdlID0gXCJBUEkub25EYXRhU3RhdGVDaGFuZ2VcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cblx0XHRpZiAodGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24/LmNvbnRyb2w/Lmhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlcikge1xuXHRcdFx0dGhpcy5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIgPSBcIlRhYmxlUnVudGltZS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJcIiBhcyB1bmtub3duIGFzIChcblx0XHRcdFx0bWVzc2FnZTogTWVzc2FnZSxcblx0XHRcdFx0Y29udHJvbDogQ29udHJvbFxuXHRcdFx0KSA9PiBib29sZWFuO1xuXHRcdH1cblxuXHRcdHRoaXMuZHJhZ1N0YXJ0RG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAoXCJBUEkub25EcmFnU3RhcnREb2N1bWVudFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcmFnRW50ZXJEb2N1bWVudCA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IChcIkFQSS5vbkRyYWdFbnRlckRvY3VtZW50XCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRyb3BEb2N1bWVudCA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IChcIkFQSS5vbkRyb3BEb2N1bWVudFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5leHBhbmROb2RlID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKFwiQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKCRldmVudCwgdHJ1ZSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93ID0gYFRhYmxlUnVudGltZS5vbkZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdygkZXZlbnQsICR7ISF0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvblxuXHRcdFx0LmNvbnRyb2wuY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9ufSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLmZpZWxkTGl2ZUNoYW5nZSA9XG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8ubmFtZSA9PT0gXCJJbmxpbmVDcmVhdGlvblJvd3NcIlxuXHRcdFx0XHQ/IChcIkFQSS5vbkZpZWxkTGl2ZUNoYW5nZSgkZXZlbnQpXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR0aGlzLnJvd1ByZXNzID0gXCJBUEkub25UYWJsZVJvd1ByZXNzXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMubm9vcCA9IFwiQVBJLm9uTm9vcFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnNlZ21lbnRlZEJ1dHRvblByZXNzID0gXCJBUEkub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMuc2VsZWN0aW9uQ2hhbmdlID0gXCJBUEkub25TZWxlY3Rpb25DaGFuZ2VkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudGFibGVDb250ZXh0Q2hhbmdlID1cblx0XHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQ/IChgVGFibGVSdW50aW1lLm9uVHJlZVRhYmxlQ29udGV4dENoYW5nZWQoJGV2ZW50LCAke3RoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uPy5pbml0aWFsRXhwYW5zaW9uTGV2ZWx9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMudXBsb2FkQ29tcGxldGVkID0gXCJVcGxvYWRUYWJsZVJ1bnRpbWUub25VcGxvYWRDb21wbGV0ZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkID0gXCJVcGxvYWRUYWJsZVJ1bnRpbWUub25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkRmlsZVNpemVFeGNlZWRlZCA9IFwiVXBsb2FkVGFibGVSdW50aW1lLm9uRmlsZVNpemVFeGNlZWRlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEl0ZW1WYWxpZGF0aW9uSGFuZGxlciA9IFwiVXBsb2FkVGFibGVSdW50aW1lLnVwbG9hZEZpbGVcIiBhcyB1bmtub3duIGFzIEZ1bmN0aW9uO1xuXHRcdHRoaXMudXBsb2FkTWVkaWFUeXBlTWlzbWF0Y2ggPSBcIlVwbG9hZFRhYmxlUnVudGltZS5vbk1lZGlhVHlwZU1pc21hdGNoXCIgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudmFyaWFudFNhdmVkID0gXCJBUEkub25WYXJpYW50U2F2ZWRcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy52YXJpYW50U2VsZWN0ZWQgPSBcIkFQSS5vblZhcmlhbnRTZWxlY3RlZFwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgZXZlbnQgaGFuZGxlciBwcm9wZXJ0aWVzIHdpdGggZnVuY3Rpb25zLlxuXHQgKiBAcGFyYW0gdGFibGVBUElcblx0ICovXG5cdHByaXZhdGUgY29uc3RydWN0b3JXaXRoRnVuY3Rpb25zKHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlVHlwZSA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy50eXBlO1xuXG5cdFx0dGhpcy5hZGRDYXJkVG9JbnNpZ2h0c1ByZXNzID0gdGFibGVBUEkub25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5iZWZvcmVFeHBvcnQgPSB0YWJsZUFQSS5vbkJlZm9yZUV4cG9ydC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLmJlZm9yZU9wZW5Db250ZXh0TWVudSA9IHRhYmxlQVBJLm9uQ29udGV4dE1lbnVQcmVzcy5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLmNvbGxhcHNlTm9kZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRhYmxlQVBJLm9uQ29sbGFwc2VFeHBhbmROb2RlKGUsIGZhbHNlKTtcblx0XHRcdFx0ICB9XG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdHRoaXMuY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQgPSBUYWJsZVJ1bnRpbWUub25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZC5iaW5kKFRhYmxlUnVudGltZSk7XG5cblx0XHRjb25zdCByb3dOYXZpZ2F0aW9uSW5mbyA9IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uLnJvdz8ubmF2aWdhdGlvbkluZm87XG5cdFx0aWYgKHJvd05hdmlnYXRpb25JbmZvICE9PSB1bmRlZmluZWQgfHwgdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5vdmVycmlkZVJvd1ByZXNzKSB7XG5cdFx0XHRpZiAocm93TmF2aWdhdGlvbkluZm8/LnR5cGUgPT09IFwiT3V0Ym91bmRcIikge1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID0gKF9lOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRhYmxlQVBJLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8ub25PcGVuSW5OZXdUYWJOYXZpZ2F0ZU91dEJvdW5kPy4oXG5cdFx0XHRcdFx0XHRyb3dOYXZpZ2F0aW9uSW5mby5uYXZpZ2F0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdFx0c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciA9IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpITtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZUFQSS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdHRhYmxlQVBJLm9uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MoXG5cdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcixcblx0XHRcdFx0XHRcdGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0c2VsZWN0aW9uTGltaXRGb3JTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLmNvbnRleHRNZW51T3BlbkluTmV3VGFiID0gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkhO1xuXHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRhYmxlQVBJLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdFx0dGFibGVBUEkub25PcGVuSW5OZXdUYWJQcmVzcyhcblx0XHRcdFx0XHRcdGUsXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHRpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbmF2aWdhYmxlQ29udGV4dHNcIiksXG5cdFx0XHRcdFx0XHR7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6IHJvd05hdmlnYXRpb25JbmZvPy50YXJnZXRQYXRoID8/IFwiXCIsIG5hdk1vZGU6IFwib3BlbkluTmV3VGFiXCIgfSxcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmRhdGFTdGF0ZUNoYW5nZSA9IHRhYmxlQVBJLm9uRGF0YVN0YXRlQ2hhbmdlLmJpbmQodGFibGVBUEkpO1xuXG5cdFx0aWYgKHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uPy5jb250cm9sPy5oYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIpIHtcblx0XHRcdHRoaXMuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyID0gdGFibGVBUEkuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyLmJpbmQodGFibGVBUEkpO1xuXHRcdH1cblxuXHRcdHRoaXMuZHJhZ1N0YXJ0RG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAodGFibGVBUEkub25EcmFnU3RhcnREb2N1bWVudC5iaW5kKHRhYmxlQVBJKSBhcyBFdmVudEhhbmRsZXJUeXBlKSA6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRyYWdFbnRlckRvY3VtZW50ID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gKHRhYmxlQVBJLm9uRHJhZ0VudGVyRG9jdW1lbnQuYmluZCh0YWJsZUFQSSkgYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kcm9wRG9jdW1lbnQgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyAodGFibGVBUEkub25Ecm9wRG9jdW1lbnQuYmluZCh0YWJsZUFQSSkgYXMgRXZlbnRIYW5kbGVyVHlwZSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5leHBhbmROb2RlID1cblx0XHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQ/IChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGFibGVBUEkub25Db2xsYXBzZUV4cGFuZE5vZGUoZSwgdHJ1ZSk7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMuZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93ID0gKGUpOiB2b2lkID0+IHtcblx0XHRcdFRhYmxlUnVudGltZS5vbkZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdyhlLCAhIXRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uKTtcblx0XHR9O1xuXHRcdHRoaXMuZmllbGRMaXZlQ2hhbmdlID1cblx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiID8gdGFibGVBUEkub25GaWVsZExpdmVDaGFuZ2UuYmluZCh0YWJsZUFQSSkgOiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5yb3dQcmVzcyA9IHRhYmxlQVBJLm9uVGFibGVSb3dQcmVzcy5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLm5vb3AgPSB0YWJsZUFQSS5vbk5vb3AuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy5zZWdtZW50ZWRCdXR0b25QcmVzcyA9IHRhYmxlQVBJLm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZSA9IHRhYmxlQVBJLm9uU2VsZWN0aW9uQ2hhbmdlZC5iaW5kKHRhYmxlQVBJKTtcblx0XHR0aGlzLnRhYmxlQ29udGV4dENoYW5nZSA9XG5cdFx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0PyAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFRhYmxlUnVudGltZS5vblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkKFxuXHRcdFx0XHRcdFx0XHRlLFxuXHRcdFx0XHRcdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbj8uYW5ub3RhdGlvbj8uaW5pdGlhbEV4cGFuc2lvbkxldmVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHQgIH1cblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLnVwbG9hZENvbXBsZXRlZCA9IFVwbG9hZFRhYmxlUnVudGltZS5vblVwbG9hZENvbXBsZXRlZC5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSkgYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR0aGlzLnVwbG9hZEZpbGVOYW1lTGVuZ3RoRXhjZWVkZWQgPSBVcGxvYWRUYWJsZVJ1bnRpbWUub25GaWxlTmFtZUxlbmd0aEV4Y2VlZGVkLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudXBsb2FkRmlsZVNpemVFeGNlZWRlZCA9IFVwbG9hZFRhYmxlUnVudGltZS5vbkZpbGVTaXplRXhjZWVkZWQuYmluZChVcGxvYWRUYWJsZVJ1bnRpbWUpIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0dGhpcy51cGxvYWRJdGVtVmFsaWRhdGlvbkhhbmRsZXIgPSBVcGxvYWRUYWJsZVJ1bnRpbWUudXBsb2FkRmlsZS5iaW5kKFVwbG9hZFRhYmxlUnVudGltZSk7XG5cdFx0dGhpcy51cGxvYWRNZWRpYVR5cGVNaXNtYXRjaCA9IFVwbG9hZFRhYmxlUnVudGltZS5vbk1lZGlhVHlwZU1pc21hdGNoLmJpbmQoVXBsb2FkVGFibGVSdW50aW1lKSBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdHRoaXMudmFyaWFudFNhdmVkID0gdGFibGVBUEkub25WYXJpYW50U2F2ZWQuYmluZCh0YWJsZUFQSSk7XG5cdFx0dGhpcy52YXJpYW50U2VsZWN0ZWQgPSB0YWJsZUFQSS5vblZhcmlhbnRTZWxlY3RlZC5iaW5kKHRhYmxlQVBJKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciB0aGUgQ3JlYXRlIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEBwYXJhbSBmb3JDcmVhdGlvblJvd1xuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbiwgZm9yQ3JlYXRpb25Sb3c6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIGZvckNyZWF0aW9uUm93XG5cdFx0XHRcdD8gVGFibGVSdW50aW1lLm9uQ3JlYXRlQnV0dG9uUHJlc3MuYmluZChUYWJsZVJ1bnRpbWUpXG5cdFx0XHRcdDogKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIgOiBcInNlbGVjdGVkQ29udGV4dHNcIjtcblx0XHRcdFx0XHRcdFRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKGUsIGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkocGF0aCkpO1xuXHRcdFx0XHQgIH07XG5cdFx0fSBlbHNlIGlmICghZm9yQ3JlYXRpb25Sb3cpIHtcblx0XHRcdHJldHVybiBmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQ/IChcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudCwgJHtpbnRlcm5hbD5jb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzfSlcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGUpXG5cdFx0XHRcdDogKFwiVGFibGVSdW50aW1lLm9uQ3JlYXRlQnV0dG9uUHJlc3MoJGV2ZW50LCAke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9KVwiIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlRhYmxlUnVudGltZS5vbkNyZWF0ZUJ1dHRvblByZXNzKCRldmVudClcIiBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDcmVhdGUgbWVudSBpdGVtLlxuXHQgKiBAcGFyYW0gaW5kZXhcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0Q3JlYXRlTWVudUl0ZW1QcmVzc0hhbmRsZXIoaW5kZXg6IG51bWJlciwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRjb25zdCBwYXRoID0gZm9yQ29udGV4dE1lbnUgPyBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiA6IFwic2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFRhYmxlUnVudGltZS5vbkNyZWF0ZU1lbnVJdGVtUHJlc3MoZSwgaW5kZXgsIHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KHBhdGgpKTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgVGFibGVSdW50aW1lLm9uQ3JlYXRlTWVudUl0ZW1QcmVzcygkZXZlbnQsICR7aW5kZXh9LCBcXCR7aW50ZXJuYWw+JHtwYXRofX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDdXQgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDdXRIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0aWYgKHRoaXMudGFibGVBUEkpIHtcblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0dGhpcy50YWJsZUFQSSEub25DdXQoZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGBBUEkub25DdXQoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIENvcHkgYWN0aW9uLlxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXRDb3B5SGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uQ29weShlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYEFQSS5vbkNvcHkoJGV2ZW50LCAke2ZvckNvbnRleHRNZW51fSlgIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgYW4gYWN0aW9uIGJ1dHRvbi5cblx0ICogQHBhcmFtIGRhdGFGaWVsZFxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBwYXJlbnRBY3Rpb25cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdGFjdGlvbjogQmFzZUFjdGlvbixcblx0XHRwYXJlbnRBY3Rpb246IEJhc2VBY3Rpb24gfCB1bmRlZmluZWQsXG5cdFx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cblx0KTogRXZlbnRIYW5kbGVyVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQodGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpISlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBhY3Rpb25Db250ZXh0UGF0aCA/IHRoaXMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSA6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25OYW1lID0gZGF0YUZpZWxkLkFjdGlvbjtcblx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGVOYW1lID0gdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IGlzU3RhdGljQWN0aW9uID1cblx0XHRcdFx0dHlwZW9mIGFjdGlvbkNvbnRleHQ/LmdldE9iamVjdCgpICE9PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdChUYWJsZUhlbHBlci5faXNTdGF0aWNBY3Rpb24oYWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCksIGFjdGlvbk5hbWUpIHx8XG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUoYWN0aW9uTmFtZS50b1N0cmluZygpLCB0YXJnZXRFbnRpdHlUeXBlTmFtZSkpO1xuXHRcdFx0Y29uc3QgYXBwbGljYWJsZVByb3BlcnR5UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZVByb3BlcnR5UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3QgY29udGV4dE1lbnVQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCI7XG5cblx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGhpcy50YWJsZUFQSSEuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSE7XG5cdFx0XHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdFx0XHRjb250ZXh0czogIWlzU3RhdGljQWN0aW9uID8gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGAke2NvbnRleHRNZW51UGF0aH1zZWxlY3RlZENvbnRleHRzYCkgOiBudWxsLFxuXHRcdFx0XHRcdGJTdGF0aWNBY3Rpb246IGlzU3RhdGljQWN0aW9uID8gaXNTdGF0aWNBY3Rpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogdGhpcy5jb2xsZWN0aW9uRW50aXR5Lm5hbWUsXG5cdFx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzOiAhaXNTdGF0aWNBY3Rpb25cblx0XHRcdFx0XHRcdD8gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke2RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5UGF0aH0vYClcblx0XHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM6ICFpc1N0YXRpY0FjdGlvblxuXHRcdFx0XHRcdFx0PyBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7ZGF0YUZpZWxkLkFjdGlvbn0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHlQYXRofS9gKVxuXHRcdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRcdGlzTmF2aWdhYmxlOiAocGFyZW50QWN0aW9uID8/IGFjdGlvbikuaXNOYXZpZ2FibGUsXG5cdFx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogYWN0aW9uLmVuYWJsZUF1dG9TY3JvbGwsXG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBhY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogZGF0YUZpZWxkPy5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIixcblx0XHRcdFx0XHRjb250cm9sSWQ6IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwLFxuXHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWw/LnZhbHVlT2YoKSA/PyBcIlwiLFxuXHRcdFx0XHRcdG1vZGVsOiB0aGlzLnRhYmxlQVBJIS5nZXRQYWdlQ29udHJvbGxlcigpIS5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZzogYWN0aW9uLmRpc2FibGVTdHJpY3RIYW5kbGluZ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJPy5vbkFjdGlvblByZXNzKGUsIHRoaXMudGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKSEsIGRhdGFGaWVsZC5BY3Rpb24udmFsdWVPZigpLCBwYXJhbXMpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFRhYmxlSGVscGVyLnByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24oXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb250ZXh0T2JqZWN0UGF0aDogdGhpcy50YWJsZUJsb2NrUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdFx0XHRjb250ZW50SWQ6IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50aXR5Lm5hbWUsXG5cdFx0XHRcdHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0YWN0aW9uQ29udGV4dD8uZ2V0T2JqZWN0KCksXG5cdFx0XHRcdChwYXJlbnRBY3Rpb24gPz8gYWN0aW9uKS5pc05hdmlnYWJsZSxcblx0XHRcdFx0YWN0aW9uLmVuYWJsZUF1dG9TY3JvbGwsXG5cdFx0XHRcdGFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24sXG5cdFx0XHRcdGZvckNvbnRleHRNZW51LFxuXHRcdFx0XHRhY3Rpb24uZGlzYWJsZVN0cmljdEhhbmRsaW5nXG5cdFx0XHQpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgYW4gSUJOIGFjdGlvbi5cblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICogQHJldHVybnMgVGhlIGV2ZW50IGhhbmRsZXIuXG5cdCAqL1xuXHRnZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIoYWN0aW9uOiBCYXNlQWN0aW9uLCBmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGlmIChhY3Rpb24uYW5ub3RhdGlvblBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgZGF0YUZpZWxkQ29udGV4dCA9IHRoaXMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghZGF0YUZpZWxkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cgPSB0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3MgIT09IHRydWU7XG5cblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpITtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBWNENvbnRleHRbXTtcblx0XHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM/OiBWNENvbnRleHRbXTtcblx0XHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBWNENvbnRleHRbXTtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBvYmplY3Q7XG5cdFx0XHRcdH0gPSB7fTtcblxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBmb3JDb250ZXh0TWVudVxuXHRcdFx0XHRcdD8gaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c1wiKVxuXHRcdFx0XHRcdDogaW50ZXJuYWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKTtcblxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJiAhZGF0YUZpZWxkLklubGluZSAmJiBuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2cpIHtcblx0XHRcdFx0XHRjb25zdCBhcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFBcHBsaWNhYmxlXCIgOiBcImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHMgPSBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRgaWJuLyR7ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke2RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5fS9gXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMgPSBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRgaWJuLyR7ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke2RhdGFGaWVsZC5BY3Rpb259LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fS9gXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5sYWJlbCA9IGRhdGFGaWVsZC5MYWJlbCBhcyBzdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gZGF0YUZpZWxkLk1hcHBpbmc7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLnRhYmxlQVBJIS5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0XHRpZiAobmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nKSB7XG5cdFx0XHRcdFx0Y29udHJvbGxlcj8uX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2coXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRlLmdldFNvdXJjZTxDb250cm9sPigpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250cm9sbGVyPy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0ZS5nZXRTb3VyY2U8Q29udHJvbD4oKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOKFxuXHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdGZvckNvbnRleHRNZW51ID8gXCIke2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9XCIgOiBcIiR7aW50ZXJuYWw+c2VsZWN0ZWRDb250ZXh0c31cIixcblx0XHRcdFx0bmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nLFxuXHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0KSBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRFeHByZXNzaW9uRm9yRGF0YUZpZWxkVmFsdWUoXG5cdFx0ZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyB8IHVuZGVmaW5lZCxcblx0XHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogc3RyaW5nIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHZhbHVlID0gZGF0YUZpZWxkPy5WYWx1ZTtcblx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLnRhYmxlQVBJID8gdmFsdWUgOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHZhbHVlLCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih2YWx1ZSk7XG5cdFx0XHRpZiAoaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xuXHRcdFx0XHRjb25zdCB2YWx1ZUV4cHJlc3Npb24gPSBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih2YWx1ZUV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciB0aGUgRGVsZXRlIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0RGVsZXRlQnV0dG9uUHJlc3NIYW5kbGVyKGZvckNvbnRleHRNZW51OiBib29sZWFuKTogRXZlbnRIYW5kbGVyVHlwZSB7XG5cdFx0Y29uc3QgaGVhZGVySW5mbyA9ICgodGhpcy5jb2xsZWN0aW9uRW50aXR5IGFzIEVudGl0eVNldCk/LmVudGl0eVR5cGUgfHwgKHRoaXMuY29sbGVjdGlvbkVudGl0eSBhcyBOYXZpZ2F0aW9uUHJvcGVydHkpPy50YXJnZXRUeXBlKVxuXHRcdFx0Py5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm87XG5cblx0XHRjb25zdCBjb250ZXh0TWVudVBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0XHRjb25zdCBkZWxldGFibGVDb250ZXh0c1BhdGggPSBgJHtjb250ZXh0TWVudVBhdGh9ZGVsZXRhYmxlQ29udGV4dHNgO1xuXHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHNQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofXNlbGVjdGVkQ29udGV4dHNJbmNsdWRpbmdJbmFjdGl2ZWA7XG5cdFx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudVxuXHRcdFx0PyBgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzYFxuXHRcdFx0OiBgJHtjb250ZXh0TWVudVBhdGh9bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzRm9yRGVsZXRlYDtcblx0XHRjb25zdCB1blNhdmVkQ29udGV4dHNQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofXVuU2F2ZWRDb250ZXh0c2A7XG5cdFx0Y29uc3QgbG9ja2VkQ29udGV4dHNQYXRoID0gYCR7Y29udGV4dE1lbnVQYXRofWxvY2tlZENvbnRleHRzYDtcblx0XHRjb25zdCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlUGF0aCA9IGAke2NvbnRleHRNZW51UGF0aH1kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlYDtcblx0XHRjb25zdCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlUGF0aCA9IGAke2NvbnRleHRNZW51UGF0aH1kcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlYDtcblxuXHRcdGNvbnN0IHRpdGxlRXhwcmVzc2lvbiA9IHRoaXMuZ2V0RXhwcmVzc2lvbkZvckRhdGFGaWVsZFZhbHVlKFxuXHRcdFx0aGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMsXG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRlc2NyaXB0aW9uRXhwcmVzc2lvbiA9IHRoaXMuZ2V0RXhwcmVzc2lvbkZvckRhdGFGaWVsZFZhbHVlKFxuXHRcdFx0aGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMsXG5cdFx0XHR0aGlzLnRhYmxlQmxvY2tQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoXG5cdFx0KTtcblxuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKF9lOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdFx0aWQ6IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogaW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNQYXRoKSBhcyBudW1iZXIsXG5cdFx0XHRcdFx0dW5TYXZlZENvbnRleHRzOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KHVuU2F2ZWRDb250ZXh0c1BhdGgpIGFzIFY0Q29udGV4dFtdLFxuXHRcdFx0XHRcdGxvY2tlZENvbnRleHRzOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGxvY2tlZENvbnRleHRzUGF0aCkgYXMgVjRDb250ZXh0W10sXG5cdFx0XHRcdFx0ZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZTogaW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlUGF0aCkgYXMgVjRDb250ZXh0W10sXG5cdFx0XHRcdFx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZTogaW50ZXJuYWxDb250ZXh0Py5nZXRQcm9wZXJ0eShkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlUGF0aCkgYXMgVjRDb250ZXh0W10sXG5cdFx0XHRcdFx0Y29udHJvbElkOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KFwiY29udHJvbElkXCIpLFxuXHRcdFx0XHRcdHRpdGxlOiB0aXRsZUV4cHJlc3Npb24sXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uRXhwcmVzc2lvbixcblx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzOiBpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KHNlbGVjdGVkQ29udGV4dHNQYXRoKSBhcyBWNENvbnRleHRbXVxuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJIS5nZXRQYWdlQ29udHJvbGxlcigpPy5lZGl0Rmxvdy5kZWxldGVNdWx0aXBsZURvY3VtZW50cyhcblx0XHRcdFx0XHRpbnRlcm5hbENvbnRleHQ/LmdldFByb3BlcnR5KGRlbGV0YWJsZUNvbnRleHRzUGF0aCksXG5cdFx0XHRcdFx0cGFyYW1zXG5cdFx0XHRcdCk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdGlkOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkKSxcblx0XHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBgXFwke2ludGVybmFsPiR7bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzUGF0aH19YCxcblx0XHRcdFx0dW5TYXZlZENvbnRleHRzOiBgXFwke2ludGVybmFsPiR7dW5TYXZlZENvbnRleHRzUGF0aH19YCxcblx0XHRcdFx0bG9ja2VkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHtsb2NrZWRDb250ZXh0c1BhdGh9fWAsXG5cdFx0XHRcdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU6IGBcXCR7aW50ZXJuYWw+JHtkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlUGF0aH19YCxcblx0XHRcdFx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZTogYFxcJHtpbnRlcm5hbD4ke2RyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVQYXRofX1gLFxuXHRcdFx0XHRjb250cm9sSWQ6IFwiJHtpbnRlcm5hbD5jb250cm9sSWR9XCIsXG5cdFx0XHRcdHRpdGxlOiB0aXRsZUV4cHJlc3Npb24sXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbkV4cHJlc3Npb24sXG5cdFx0XHRcdHNlbGVjdGVkQ29udGV4dHM6IGBcXCR7aW50ZXJuYWw+JHtzZWxlY3RlZENvbnRleHRzUGF0aH19YFxuXHRcdFx0fTtcblxuXHRcdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZW5lcmF0ZUZ1bmN0aW9uKFxuXHRcdFx0XHRcIi5lZGl0Rmxvdy5kZWxldGVNdWx0aXBsZURvY3VtZW50c1wiLFxuXHRcdFx0XHRgXFwke2ludGVybmFsPiR7ZGVsZXRhYmxlQ29udGV4dHNQYXRofX1gLFxuXHRcdFx0XHRDb21tb25IZWxwZXIub2JqZWN0VG9TdHJpbmcocGFyYW1zKVxuXHRcdFx0KSBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcHJlc3MgZXZlbnQgaGFuZGxlciBmb3IgYSBtYW5pZmVzdCBhY3Rpb24gYnV0dG9uLlxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyKGFjdGlvbjogQ3VzdG9tQWN0aW9uLCBmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRpZiAoYWN0aW9uLm5vV3JhcCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBJZiBub1dyYXAgPSB0cnVlLCB0aGVuIHRoZSBhY3Rpb24gaXMgYSBzbG90IGFjdGlvbiAoZGVmaW5lZCBpbiB0aGUgWE1MIHZpZXcgYXMgYW4gYWdncmVnYXRpb24gb2YgdGhlIHRhYmxlIGJsb2NrKVxuXHRcdFx0XHRjb25zdCByZWxhdGVkQWN0aW9uRWxlbWVudCA9IHRoaXMudGFibGVBUEkuZmluZFNsb3RBY3Rpb25Gcm9tS2V5KGFjdGlvbi5rZXkpO1xuXHRcdFx0XHRpZiAocmVsYXRlZEFjdGlvbkVsZW1lbnQpIHtcblx0XHRcdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsUGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIgOiBcInNlbGVjdGVkQ29udGV4dHNcIjtcblx0XHRcdFx0XHRcdGNvbnN0IGludGVybmFsQ29udGV4dCA9IHRoaXMudGFibGVBUEkhLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikhO1xuXHRcdFx0XHRcdFx0Y29uc3QgZXZlbnRQYXJhbWV0ZXJzID0geyAuLi5lLmdldFBhcmFtZXRlcnMoKSwgY29udGV4dHM6IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShpbnRlcm5hbE1vZGVsUGF0aCkgfTtcblx0XHRcdFx0XHRcdHJlbGF0ZWRBY3Rpb25FbGVtZW50LmZpcmVFdmVudChcInByZXNzXCIsIGV2ZW50UGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDb3VsZG4ndCBmaW5kIGFjdGlvbiB3aXRoIGtleSBcIiArIGFjdGlvbi5rZXkpO1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiAoZTogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsUGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIgOiBcInNlbGVjdGVkQ29udGV4dHNcIjtcblx0XHRcdFx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0aGlzLnRhYmxlQVBJIS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpITtcblx0XHRcdFx0XHRGUE1IZWxwZXIuYWN0aW9uV3JhcHBlcihlLCBhY3Rpb24uaGFuZGxlck1vZHVsZSwgYWN0aW9uLmhhbmRsZXJNZXRob2QsIHtcblx0XHRcdFx0XHRcdGNvbnRleHRzOiBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoaW50ZXJuYWxNb2RlbFBhdGgpXG5cdFx0XHRcdFx0fSkuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGN1c3RvbSBhY3Rpb25cIiwgZXJyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIChhY3Rpb24ubm9XcmFwID09PSB0cnVlXG5cdFx0XHRcdD8gYWN0aW9uLnByZXNzXG5cdFx0XHRcdDogQ29tbW9uSGVscGVyLmJ1aWxkQWN0aW9uV3JhcHBlcihcblx0XHRcdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0XHRcdHsgaWQ6IHRoaXMudGFibGVCbG9ja1Byb3BlcnRpZXMuY29udGVudElkIH0sXG5cdFx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQgICkpIGFzIHVua25vd24gYXMgRXZlbnRIYW5kbGVyVHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwcmVzcyBldmVudCBoYW5kbGVyIGZvciB0aGUgbWFzcyBlZGl0IGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0TWFzc0VkaXRCdXR0b25QcmVzc0hhbmRsZXIoZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBFdmVudEhhbmRsZXJUeXBlIHtcblx0XHRpZiAodGhpcy50YWJsZUFQSSkge1xuXHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJIS5vbk1hc3NFZGl0QnV0dG9uUHJlc3NlZChlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYEFQSS5vbk1hc3NFZGl0QnV0dG9uUHJlc3NlZCgkZXZlbnQsICR7Zm9yQ29udGV4dE1lbnV9KWAgYXMgdW5rbm93biBhcyBFdmVudEhhbmRsZXJUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHByZXNzIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBtb3ZlIHVwIC8gbW92ZSBkb3duIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSBmb3JNb3ZlVXBcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqIEByZXR1cm5zIFRoZSBldmVudCBoYW5kbGVyLlxuXHQgKi9cblx0Z2V0TW92ZVVwRG93bkhhbmRsZXIoZm9yTW92ZVVwOiBib29sZWFuLCBmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRyZXR1cm4gKGU6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMudGFibGVBUEkhLm9uTW92ZVVwRG93bihlLCBmb3JNb3ZlVXAsIGZvckNvbnRleHRNZW51KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgQVBJLm9uTW92ZVVwRG93bigkZXZlbnQsICR7Zm9yTW92ZVVwfSwgJHtmb3JDb250ZXh0TWVudX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBQYXN0ZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBUaGUgZXZlbnQgaGFuZGxlci5cblx0ICovXG5cdGdldFBhc3RlSGFuZGxlcihmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEV2ZW50SGFuZGxlclR5cGUge1xuXHRcdGlmICh0aGlzLnRhYmxlQVBJKSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy50YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdFx0cmV0dXJuIChlOiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLnRhYmxlQVBJIS5vblBhc3RlKGUsIGNvbnRyb2xsZXIsIGZvckNvbnRleHRNZW51KTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgQVBJLm9uUGFzdGUoJGV2ZW50LCAkY29udHJvbGxlciwgJHtmb3JDb250ZXh0TWVudX0pYCBhcyB1bmtub3duIGFzIEV2ZW50SGFuZGxlclR5cGU7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUE0QkE7RUFDQSxNQUFNQSw0Q0FBNEMsR0FBRyxDQUFDO0VBQ3REO0VBQ0EsTUFBTUMsNkJBQTZCLEdBQUcsRUFBRTtFQUFDLElBRXBCQyx5QkFBeUI7SUEyRDdDLFNBQUFBLDBCQUNTQyxvQkFBMEMsRUFDbERDLFFBQXlGLEVBQ2pGQyxRQUFtQixFQUMxQjtNQUFBLEtBSE9GLG9CQUEwQyxHQUExQ0Esb0JBQTBDO01BQUEsS0FFMUNFLFFBQW1CLEdBQW5CQSxRQUFtQjtNQUUzQixJQUFJLENBQUNDLGdCQUFnQixHQUFHRixRQUFRLENBQUNFLGdCQUFnQjtNQUNqRCxJQUFJLENBQUNDLFNBQVMsR0FBR0gsUUFBUSxDQUFDRyxTQUFTO01BRW5DLElBQUlGLFFBQVEsRUFBRTtRQUNiLElBQUksQ0FBQ0csd0JBQXdCLENBQUNILFFBQVEsQ0FBQztNQUN4QyxDQUFDLE1BQU07UUFDTixJQUFJ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
@@ -64,6 +64,8 @@ export default class TableEventHandlerProvider {
64
64
 
65
65
  rowPress?: EventHandlerType;
66
66
 
67
+ noop?: EventHandlerType;
68
+
67
69
  segmentedButtonPress?: EventHandlerType;
68
70
 
69
71
  selectionChange!: EventHandlerType;
@@ -153,6 +155,7 @@ export default class TableEventHandlerProvider {
153
155
  ? ("API.onFieldLiveChange($event)" as unknown as EventHandlerType)
154
156
  : undefined;
155
157
  this.rowPress = "API.onTableRowPress" as unknown as EventHandlerType;
158
+ this.noop = "API.onNoop" as unknown as EventHandlerType;
156
159
  this.segmentedButtonPress = "API.onSegmentedButtonPressed" as unknown as EventHandlerType;
157
160
  this.selectionChange = "API.onSelectionChanged" as unknown as EventHandlerType;
158
161
  this.tableContextChange =
@@ -248,6 +251,7 @@ export default class TableEventHandlerProvider {
248
251
  this.fieldLiveChange =
249
252
  this.tableBlockProperties.creationMode?.name === "InlineCreationRows" ? tableAPI.onFieldLiveChange.bind(tableAPI) : undefined;
250
253
  this.rowPress = tableAPI.onTableRowPress.bind(tableAPI);
254
+ this.noop = tableAPI.onNoop.bind(tableAPI);
251
255
  this.segmentedButtonPress = tableAPI.onSegmentedButtonPressed.bind(tableAPI);
252
256
  this.selectionChange = tableAPI.onSelectionChanged.bind(tableAPI);
253
257
  this.tableContextChange =