@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.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +1 -7
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +0 -6
- package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
- package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
- package/src/sap/fe/macros/Field.js +5 -5
- package/src/sap/fe/macros/Field.ts +5 -3
- package/src/sap/fe/macros/FooterContent.js +3 -2
- package/src/sap/fe/macros/FooterContent.tsx +2 -10
- package/src/sap/fe/macros/KPITag.js +6 -6
- package/src/sap/fe/macros/KPITag.tsx +5 -5
- package/src/sap/fe/macros/MacroAPI.js +2 -2
- package/src/sap/fe/macros/MacroAPI.ts +1 -1
- package/src/sap/fe/macros/MessageButton.js +3 -3
- package/src/sap/fe/macros/MessageButton.tsx +3 -2
- package/src/sap/fe/macros/MicroChart.js +3 -2
- package/src/sap/fe/macros/MicroChart.tsx +1 -1
- package/src/sap/fe/macros/Share.js +7 -7
- package/src/sap/fe/macros/Share.tsx +9 -6
- package/src/sap/fe/macros/Status.js +6 -5
- package/src/sap/fe/macros/Status.tsx +3 -4
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/ChartDelegate.js +22 -1
- package/src/sap/fe/macros/chart/ChartDelegate.ts +29 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -2
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
- package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
- package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +4 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +3 -3
- package/src/sap/fe/macros/field/FieldFormatOptions.js +2 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
- package/src/sap/fe/macros/field/FieldRuntime.js +7 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +7 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +31 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +40 -6
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +6 -3
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +5 -1
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +19 -9
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +76 -61
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
- package/src/sap/fe/macros/form/FormContainer.block.js +22 -6
- package/src/sap/fe/macros/form/FormContainer.block.ts +24 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
- package/src/sap/fe/macros/messagebundle.properties +6 -0
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/table/Action.js +7 -4
- package/src/sap/fe/macros/table/Action.ts +3 -3
- package/src/sap/fe/macros/table/Column.js +3 -2
- package/src/sap/fe/macros/table/Column.ts +1 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.js +6 -9
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +5 -7
- package/src/sap/fe/macros/table/Table.block.js +6 -3
- package/src/sap/fe/macros/table/Table.block.tsx +13 -3
- package/src/sap/fe/macros/table/TableAPI.js +13 -8
- package/src/sap/fe/macros/table/TableAPI.ts +10 -3
- package/src/sap/fe/macros/table/TableDefinition.js +2 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +1 -1
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +3 -1
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +4 -0
- package/src/sap/fe/macros/table/TableRuntime.js +24 -12
- package/src/sap/fe/macros/table/TableRuntime.ts +27 -11
- package/src/sap/fe/macros/table/Utils.js +9 -3
- package/src/sap/fe/macros/table/Utils.ts +14 -8
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +6 -4
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +6 -5
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -5
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +13 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +37 -10
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +39 -15
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
|
@@ -369,12 +369,11 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
|
|
|
369
369
|
}
|
|
370
370
|
|
|
371
371
|
// Action enablement for Mass Edit
|
|
372
|
-
const updatablePropertyPath = table?.data("updatablePropertyPath");
|
|
373
372
|
const draft = table?.data("draft");
|
|
374
373
|
const readOnlyDraftEnabled = table.data("displayModePropertyBinding") === "true" && draft !== "undefined";
|
|
375
374
|
const updatableContexts = [];
|
|
376
375
|
for (const selectedContext of activeSelectedContexts) {
|
|
377
|
-
if (TableRuntime.isUpdatableContext(
|
|
376
|
+
if (TableRuntime.isUpdatableContext(tableDefinition.annotation.updatablePropertyPathInfo, selectedContext, readOnlyDraftEnabled)) {
|
|
378
377
|
updatableContexts.push(selectedContext);
|
|
379
378
|
}
|
|
380
379
|
}
|
|
@@ -402,4 +401,4 @@ sap.ui.define(["sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/c
|
|
|
402
401
|
_exports = ContextMenuHandler;
|
|
403
402
|
return _exports;
|
|
404
403
|
}, false);
|
|
405
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250ZXh0TWVudUhhbmRsZXIiLCJjb250ZXh0TWVudUFjdGl2ZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXMiLCJ0YWJsZSIsImNvbnRleHRNZW51IiwiZ2V0Q29udGV4dE1lbnUiLCJzb3J0SGVscGVyRm9yTWVudUl0ZW1zIiwidGFibGVBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsImZvckVhY2giLCJ0YWJsZUFjdGlvbiIsInRhYmxlQWN0aW9uSXRlbSIsImdldEFnZ3JlZ2F0aW9uIiwiX2lzQWN0aW9uU3BsaXQiLCJfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSIsIl9pc0FjdGlvbkNvbWJpbmVkIiwiX2NvbWJpbmVBY3Rpb25JbkNvbnRleHRNZW51IiwiY29udGV4dE1lbnVJdGVtIiwiX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbiIsIl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51IiwicHVzaCIsImxlbmd0aCIsIm1lbnVJdGVtIiwic29ydEluZGV4IiwiaW5kZXhPZkNvbnRleHRNZW51IiwiaW5kZXhPZkl0ZW0iLCJyZW1vdmVJdGVtIiwiaW5zZXJ0SXRlbSIsImhpZGVBbGxDb250ZXh0TWVudUFjdGlvbnNFeGNlcHREZWxldGUiLCJtZW51SXRlbXMiLCJnZXRJdGVtcyIsImRlbGV0ZUFjdGlvbiIsImZpbmQiLCJhY3Rpb24iLCJnZXRJZCIsImVuZHNXaXRoIiwiZGVsZXRlVmlzaWJsZSIsImdldEFjdGlvbiIsImdldFZpc2libGUiLCJpbmNsdWRlcyIsInNldFZpc2libGUiLCJhY3Rpb25JdGVtIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJmbGV4TWFuYWdlZE9iamVjdE1vZGVscyIsImZpbHRlciIsImRlcGVuZGVudCIsIk1hbmFnZWRPYmplY3RNb2RlbCIsInNvbWUiLCJtb2RlbCIsImNvbnRleHRNZW51SXRlbXMiLCJtZW51QnV0dG9uIiwiX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51IiwiYWN0aW9uSXRlbXMiLCJnZXRNZW51IiwidG9vbEJhckFjdGlvbiIsImFjdGlvbklkSW5Db250ZXh0TWVudSIsImRhdGEiLCJhY3Rpb25JZEluVG9vbGJhciIsInJlcGxhY2UiLCJzZXRUZXh0IiwiZ2V0VGV4dCIsImFkZEl0ZW0iLCJhY3Rpb25JblN1Yk1lbnUiLCJfZmluZEFjdGlvbkluU3ViTWVudSIsImRlc3Ryb3kiLCJzdWJNZW51Iiwic3BsaWNlIiwiaW5kZXhPZiIsInVuZGVmaW5lZCIsIm5ld01lbnVCdXR0b24iLCJNZW51SXRlbSIsImlkIiwiZ2VuZXJhdGUiLCJ0ZXh0IiwiaSIsIml0ZW0iLCJzdWJJdGVtcyIsInN1Ykl0ZW0iLCJpbmRleCIsInRhYmxlQWN0aW9uVmlzaWJpbGl0eSIsInNldENvbnRleHRNZW51QWN0aXZlIiwiYWN0aXZlIiwiaXNDb250ZXh0TWVudUFjdGl2ZSIsInNldENvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW1WaXNpYmlsaXR5IiwiY29udGV4dHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImNvbGxhYm9yYXRpb25PcHRpb24iLCJjb2xsYWJvcmF0aW9uU2VydmljZSIsImNtSGVscGVyU2VydmljZSIsImdldE9wdGlvbnMiLCJ0YWJsZURlZmluaXRpb24iLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJuYXZpZ2F0aW9uVHlwZSIsImFubm90YXRpb24iLCJyb3ciLCJuYXZpZ2F0aW9uSW5mbyIsInR5cGUiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImdldENvbnRyb2xsZXIiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImlzRHJhZnQiLCJNb2RlbEhlbHBlciIsImlzRHJhZnRTdXBwb3J0ZWQiLCJnZXRQYXRoIiwidmlzaWJsZSIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb250ZXh0IiwiZ2V0T2JqZWN0IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsIl9vbkNvbnRleHRNZW51UHJlc3MiLCJvRXZlbnQiLCJnZXRTb3VyY2UiLCJ0YWJsZUNvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsImNvbnRleHRNZW51Q29udGV4dCIsImdldFBhcmFtZXRlciIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJjb250ZXh0TWVudVNlbGVjdGlvbiIsImdldFJlbGV2YW50U2VsZWN0aW9uIiwib25lQ29udGV4dElzQWN0aXZlIiwiaXNJbmFjdGl2ZSIsInNldFByb3BlcnR5IiwiYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyIsIm9Db250ZXh0Iiwib25seUluQWN0aXZlQ29udGV4dHNTZWxlY3RlZCIsImlzSW5saW5lQ3JlYXRpb25Nb2RlIiwiZ2V0Q3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwibmF2aWdhYmxlQ29udGV4dHMiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImdldFByb3BlcnR5Iiwicm91dGVQYXRoIiwidmlzaWJsZU1lbnVJdGVtcyIsInByZXZlbnREZWZhdWx0IiwiaXNFeHBhbmRhYmxlIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJpc0NvbGxhcHNhYmxlIiwiZGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiVGFibGVSdW50aW1lIiwic2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImRyYWZ0IiwicmVhZE9ubHlEcmFmdEVuYWJsZWQiLCJ1cGRhdGFibGVDb250ZXh0cyIsInNlbGVjdGVkQ29udGV4dCIsImlzVXBkYXRhYmxlQ29udGV4dCIsImNvbnRyb2wiLCJjcmVhdGVFbmFibGVtZW50IiwiX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQiLCJub2RlVHlwZSIsInVwZGF0ZUN1dENvcHlQYXN0ZUVuYWJsZW1lbnQiLCJ1cGRhdGVNb3ZlVXBEb3duRW5hYmxlbWVudCIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiSlNPTiIsInBhcnNlIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb250ZXh0TWVudUhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBJSW50ZXJmYWNlV2l0aE1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBkZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvVGFibGVcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgdHlwZSBNZW51QnV0dG9uIGZyb20gXCJzYXAvbS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdE1vZGVsIGZyb20gXCJzYXAvdWkvZmwvdXRpbC9NYW5hZ2VkT2JqZWN0TW9kZWxcIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlJEJlZm9yZU9wZW5Db250ZXh0TWVudUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IEZFU1JIZWxwZXIgZnJvbSBcInNhcC91aS9wZXJmb3JtYW5jZS90cmFjZS9GRVNSSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCIuLi9UYWJsZVJ1bnRpbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGV4dE1lbnVIYW5kbGVyIGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHByb3RlY3RlZCBjb250ZXh0TWVudUFjdGl2ZSA9IGZhbHNlO1xuXG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8gaW1wbGVtZW50IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluXG5cdH1cblxuXHQvKipcblx0ICogQWxpZ24gY29udGV4dCBtZW51IHdpdGggdGhlIHRhYmxlIGFjdGlvbnMgYnkgUlRBIGNoYW5nZXMgaW4gdGFibGUgdG9vbGJhci5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSB3aXRoIGJvdW5kIHRhYmxlIGFjdGlvbnNcblx0ICovXG5cdGFsaWduQ29udGV4dE1lbnVXaXRoVGFibGVUb29sYmFyQ2hhbmdlcyh0YWJsZTogTURDVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBzb3J0SGVscGVyRm9yTWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG5cdFx0Y29uc3QgdGFibGVBY3Rpb25zID0gdGFibGUuZ2V0QWN0aW9ucygpO1xuXHRcdHRhYmxlQWN0aW9ucz8uZm9yRWFjaCgodGFibGVBY3Rpb24pID0+IHtcblx0XHRcdGNvbnN0IHRhYmxlQWN0aW9uSXRlbSA9IHRhYmxlQWN0aW9uLmdldEFnZ3JlZ2F0aW9uKFwiYWN0aW9uXCIpIGFzIEJ1dHRvbjtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBzcGxpdCBieSBSVEFcblx0XHRcdGlmICh0aGlzLl9pc0FjdGlvblNwbGl0KHRhYmxlQWN0aW9uSXRlbSkpIHtcblx0XHRcdFx0Ly8gUmVtb3ZlIG9yaWdpbmFsIG1lbnUgaXRlbSBhbmQgYWRkIHN1YiBpdGVtcyBhcyBuZXcgbWVudSBpdGVtc1xuXHRcdFx0XHR0aGlzLl9zcGxpdEFjdGlvbnNJbkNvbnRleHRNZW51KHRhYmxlQWN0aW9uSXRlbSwgY29udGV4dE1lbnUpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGFjdGlvbiBpdGVtIGhhcyBiZWVuIGNyZWF0ZWQgYnkgY29tYmluaW5nIHRoZSB0d28gYWN0aW9uc1xuXHRcdFx0aWYgKHRoaXMuX2lzQWN0aW9uQ29tYmluZWQodGFibGVBY3Rpb25JdGVtKSkge1xuXHRcdFx0XHR0aGlzLl9jb21iaW5lQWN0aW9uSW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0gYXMgdW5rbm93biBhcyBNZW51QnV0dG9uLCBjb250ZXh0TWVudSwgdGFibGUpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtID0gdGhpcy5fZ2V0Q29ycmVzcG9uZGluZ0NvbnRleHRNZW51QWN0aW9uKHRhYmxlQWN0aW9uSXRlbSwgY29udGV4dE1lbnUpO1xuXHRcdFx0aWYgKGNvbnRleHRNZW51SXRlbSkge1xuXHRcdFx0XHR0aGlzLl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51KHRhYmxlQWN0aW9uSXRlbSwgY29udGV4dE1lbnVJdGVtLCB0YWJsZUFjdGlvbiBhcyBBY3Rpb25Ub29sYmFyQWN0aW9uKTtcblx0XHRcdFx0c29ydEhlbHBlckZvck1lbnVJdGVtcy5wdXNoKGNvbnRleHRNZW51SXRlbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gQWxpZ24gdGhlIG9yZGVyIG9mIGNvbnRleHQtbWVudUl0ZW1zIHdpdGggYm91bmQgdGFibGUgYWN0aW9uc1xuXHRcdGlmIChzb3J0SGVscGVyRm9yTWVudUl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0c29ydEhlbHBlckZvck1lbnVJdGVtcy5mb3JFYWNoKChtZW51SXRlbSwgc29ydEluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGluZGV4T2ZDb250ZXh0TWVudSA9IGNvbnRleHRNZW51LmluZGV4T2ZJdGVtKG1lbnVJdGVtKTtcblx0XHRcdFx0aWYgKGluZGV4T2ZDb250ZXh0TWVudSAhPT0gc29ydEluZGV4KSB7XG5cdFx0XHRcdFx0Y29udGV4dE1lbnUucmVtb3ZlSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdFx0Y29udGV4dE1lbnUuaW5zZXJ0SXRlbShtZW51SXRlbSwgc29ydEluZGV4KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhpZGUgYWxsIGNvbnRleHQgbWVudSBhY3Rpb25zIGV4Y2VwdCBkZWxldGUuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICovXG5cdGhpZGVBbGxDb250ZXh0TWVudUFjdGlvbnNFeGNlcHREZWxldGUodGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHRjb25zdCBkZWxldGVBY3Rpb24gPSB0YWJsZS5nZXRBY3Rpb25zKCkuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24uZ2V0SWQoKS5lbmRzV2l0aChcIlN0YW5kYXJkQWN0aW9uOjpEZWxldGU6OkFjdGlvblRvb2xiYXJBY3Rpb25cIikpO1xuXHRcdGNvbnN0IGRlbGV0ZVZpc2libGUgPSAoZGVsZXRlQWN0aW9uIGFzIEFjdGlvblRvb2xiYXJBY3Rpb24pPy5nZXRBY3Rpb24oKS5nZXRWaXNpYmxlKCkgPz8gdHJ1ZTtcblx0XHRtZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW0pID0+IHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBtZW51IGl0ZW0gaXMgdGhlIGRlbGV0ZSBhY3Rpb25cblx0XHRcdGlmIChtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKFwiU3RhbmRhcmRBY3Rpb246OkRlbGV0ZTo6Q29udGV4dE1lbnVcIikpIHtcblx0XHRcdFx0bWVudUl0ZW0uc2V0VmlzaWJsZShkZWxldGVWaXNpYmxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lbnVJdGVtLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGEgQ29tYmluZSBSVEEgY2hhbmdlcyBpbiB0aGUgdGFibGUgdG9vbGJhci5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGEgQ29tYmluZSBSVEEgY2hhbmdlcyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKi9cblx0X2lzQWN0aW9uQ29tYmluZWQoYWN0aW9uSXRlbTogQnV0dG9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGFjdGlvbkl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uTWVudUJ1dHRvblwiKSB7XG5cdFx0XHQvLyBXZSBkb24ndCBoYXZlIGN1c3RvbSBkYXRhIGF0dHJpYnV0ZSBvbiB0aGUgTWVudUJ1dHRvbiBjcmVhdGVkIGJ5IFJUQSBjb21iaW5lIGNoYW5nZVxuXHRcdFx0Y29uc3QgZGVwZW5kZW50cyA9IGFjdGlvbkl0ZW0uZ2V0RGVwZW5kZW50cygpO1xuXHRcdFx0Ly8gZmluZCBhbGwgdGhlIGRlcGVuZGVudHMgd2hpY2ggYXJlIGEgRmxleCBNYW5hZ2VkT2JqZWN0TW9kZWxcblx0XHRcdGNvbnN0IGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzID0gZGVwZW5kZW50cy5maWx0ZXIoKGRlcGVuZGVudCkgPT4gZGVwZW5kZW50IGluc3RhbmNlb2YgTWFuYWdlZE9iamVjdE1vZGVsKTtcblx0XHRcdC8vIGNoZWNrIGlmIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGVtIGluY2x1ZGVzIFwiJHNhcC5tLmZsZXhpYmlsaXR5Lk1lbnVCdXR0b25Nb2RlbFwiXG5cdFx0XHRyZXR1cm4gZmxleE1hbmFnZWRPYmplY3RNb2RlbHMuc29tZSgobW9kZWwpID0+XG5cdFx0XHRcdChtb2RlbCBhcyB1bmtub3duIGFzIE1hbmFnZWRPYmplY3RNb2RlbCkuZ2V0TmFtZSgpLmluY2x1ZGVzKFwiJHNhcC5tLmZsZXhpYmlsaXR5Lk1lbnVCdXR0b25Nb2RlbFwiKVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbWJpbmUgdGhlIGFjdGlvbnMgaW4gdGhlIGNvbnRleHQgbWVudSB0byBhbGlnbiB3aXRoIHRoZSB0YWJsZSBhY3Rpb24gdG9vbGJhci5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICovXG5cdF9jb21iaW5lQWN0aW9uSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBNZW51QnV0dG9uLCBjb250ZXh0TWVudTogTWVudSwgdGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Ly8gQ3JlYXRlIGEgbmV3IG1lbnUgYnV0dG9uIGluIHRoZSBjb250ZXh0IG1lbnUgaWYgaXQgZG9lcyBub3QgZXhpc3Rcblx0XHRjb25zdCBtZW51QnV0dG9uID0gdGhpcy5fZmluZE9yQ3JlYXRlTWVudUJ1dHRvbkluQ29udGV4dE1lbnUoYWN0aW9uSXRlbSwgdGFibGUpO1xuXHRcdGNvbnN0IGFjdGlvbkl0ZW1zID0gYWN0aW9uSXRlbS5nZXRNZW51KCkuZ2V0SXRlbXMoKTtcblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25JdGVtcykge1xuXHRcdFx0Y29uc3QgdG9vbEJhckFjdGlvbiA9IGFjdGlvbjtcblx0XHRcdC8vIG5vdyBmaW5kIHRoZSBhY3Rpb24gaW4gdGhlIGNvbnRleHQgbWVudSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGNvbnRleHQgbWVudVxuXHRcdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBjb250ZXh0TWVudUl0ZW1zKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbklkSW5Db250ZXh0TWVudSA9IG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKTtcblx0XHRcdFx0Y29uc3QgYWN0aW9uSWRJblRvb2xiYXIgPSB0b29sQmFyQWN0aW9uLmRhdGEoXCJhY3Rpb25JZFwiKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFjdGlvbklkSW5Db250ZXh0TWVudSA9PT0gYWN0aW9uSWRJblRvb2xiYXIgKyBcIjo6Q29udGV4dE1lbnVcIiB8fFxuXHRcdFx0XHRcdGFjdGlvbklkSW5Db250ZXh0TWVudSA9PT0gYWN0aW9uSWRJblRvb2xiYXIucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bWVudUl0ZW0uc2V0VGV4dCh0b29sQmFyQWN0aW9uLmdldFRleHQoKSk7XG5cdFx0XHRcdFx0Ly8gQWRkIHRoZSBhY3Rpb24gdG8gdGhlIG1lbnUgYnV0dG9uXG5cdFx0XHRcdFx0Y29udGV4dE1lbnUucmVtb3ZlSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdFx0bWVudUJ1dHRvbi5hZGRJdGVtKG1lbnVJdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiB3ZSBmaW5kIGFub3RoZXIgbWVudSBpbiB0aGUgY29udGV4dCBtZW51IHdlIGNoZWNrIGlmIHRoZSBhY3Rpb24gaXMgaW4gdGhlIHN1YiBtZW51XG5cdFx0XHRcdGlmIChtZW51SXRlbS5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiYgIW1lbnVJdGVtLmdldElkKCkuaW5jbHVkZXMoYWN0aW9uSXRlbS5nZXRJZCgpKSkge1xuXHRcdFx0XHRcdGNvbnN0IGFjdGlvbkluU3ViTWVudSA9IHRoaXMuX2ZpbmRBY3Rpb25JblN1Yk1lbnUobWVudUl0ZW0uZ2V0SXRlbXMoKSwgdG9vbEJhckFjdGlvbik7XG5cdFx0XHRcdFx0aWYgKGFjdGlvbkluU3ViTWVudSkge1xuXHRcdFx0XHRcdFx0YWN0aW9uSW5TdWJNZW51LnNldFRleHQodG9vbEJhckFjdGlvbi5nZXRUZXh0KCkpO1xuXHRcdFx0XHRcdFx0bWVudUJ1dHRvbi5hZGRJdGVtKGFjdGlvbkluU3ViTWVudSk7XG5cdFx0XHRcdFx0XHRpZiAobWVudUl0ZW0uZ2V0SXRlbXMoKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdFx0bWVudUl0ZW0uZGVzdHJveSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyB0aGUgYWN0aW9uIGluIGFuIGFjdGlvbiBtZW51IGluIHRoZSBjb250ZXh0IG1lbnUsIGl0IHJldHVybiB0aGUgYWN0aW9uIGlmIGZvdW5kIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIG1lbnUuXG5cdCAqIEBwYXJhbSBzdWJNZW51IFRoZSBhcnJheSBvZiBhY3Rpb25zIGluIHRoZSBtZW51XG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gd2UgYXJlIHNlYXJjaGluZyBmb3Jcblx0ICogQHJldHVybnMgVGhlIGFjdGlvbiBpZiBmb3VuZCwgb3RoZXJ3aXNlIHVuZGVmaW5lZFxuXHQgKi9cblx0X2ZpbmRBY3Rpb25JblN1Yk1lbnUoc3ViTWVudTogTWVudUl0ZW1bXSwgYWN0aW9uSXRlbTogTWVudUl0ZW0pOiBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBzdWJNZW51KSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIikgfHxcblx0XHRcdFx0bWVudUl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSBhY3Rpb25JdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSArIFwiOjpDb250ZXh0TWVudVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uID0gbWVudUl0ZW07XG5cdFx0XHRcdHN1Yk1lbnUuc3BsaWNlKHN1Yk1lbnUuaW5kZXhPZihtZW51SXRlbSksIDEpO1xuXHRcdFx0XHRyZXR1cm4gYWN0aW9uO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrJ3MgaWYgYSBwYXJ0aWN1bGFyIG1lbnUgYnV0dG9uIGV4aXN0cyBpbiB0aGUgY29udGV4dCBtZW51LCBpZiBub3QgY3JlYXRlcyBhIG5ldyBtZW51IGJ1dHRvbiBhbmQgYWRkcyBpdCB0byB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgbWVudSBidXR0b24gdG8gZmluZCBvciBjcmVhdGVcblx0ICogQHBhcmFtIHRhYmxlIFRoZSBNRENUYWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgTWVudUl0ZW0gaWYgZm91bmQsIG90aGVyd2lzZSBhIG5ldyBNZW51SXRlbVxuXHQgKi9cblx0X2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51KGFjdGlvbkl0ZW06IE1lbnVCdXR0b24sIHRhYmxlOiBNRENUYWJsZSk6IE1lbnVJdGVtIHtcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBjb250ZXh0TWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHQvL2xvb3Agb3ZlciBjb250ZXh0TWVudUl0ZW1zIGFuZCBjaGVjayBpZiB0aGUgcmVxdWlyZWQgbWVudSBidXR0b24gYWxyZWFkeSBleGlzdHNcblx0XHRmb3IgKGNvbnN0IG1lbnVJdGVtIG9mIGNvbnRleHRNZW51SXRlbXMpIHtcblx0XHRcdGlmIChtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKGFjdGlvbkl0ZW0uZ2V0SWQoKSkpIHtcblx0XHRcdFx0cmV0dXJuIG1lbnVJdGVtO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBpZiB0aGUgcmVxdWlyZWQgbWVudSBidXR0b24gZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSBhIG5ldyBtZW51IGJ1dHRvbiBhbmQgYWRkIGl0IHRvIHRoZSBjb250ZXh0TWVudVxuXHRcdGNvbnN0IG5ld01lbnVCdXR0b24gPSBuZXcgTWVudUl0ZW0oe1xuXHRcdFx0aWQ6IGdlbmVyYXRlKFt0YWJsZS5nZXRJZCgpLCBhY3Rpb25JdGVtLmdldElkKCksIFwiOjpDb250ZXh0TWVudVwiXSksXG5cdFx0XHR0ZXh0OiBhY3Rpb25JdGVtLmdldFRleHQoKVxuXHRcdH0pO1xuXHRcdGNvbnRleHRNZW51LmFkZEl0ZW0obmV3TWVudUJ1dHRvbik7XG5cdFx0cmV0dXJuIG5ld01lbnVCdXR0b247XG5cdH1cblxuXHQvKipcblx0ICogU3BsaXQgdGhlIGFjdGlvbiBpdGVtcyBpbiB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgYWN0aW9uIGl0ZW0gdG8gc3BsaXRcblx0ICogQHBhcmFtIGNvbnRleHRNZW51IFRoZSBjb250ZXh0IG1lbnVcblx0ICovXG5cdF9zcGxpdEFjdGlvbnNJbkNvbnRleHRNZW51KGFjdGlvbkl0ZW06IEJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUpOiB2b2lkIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbWVudUl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBtZW51IGl0ZW0gaXMgYSBNZW51XG5cdFx0XHRpZiAobWVudUl0ZW1zW2ldLmdldEl0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bWVudUl0ZW1zW2ldXG5cdFx0XHRcdFx0XHQuZ2V0SXRlbXMoKVxuXHRcdFx0XHRcdFx0LnNvbWUoKGl0ZW0pID0+IGl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSBhY3Rpb25JdGVtLmRhdGEoXCJhY3Rpb25JZFwiKS5yZXBsYWNlKFwiOjpBY3Rpb25NZW51XCIsIFwiOjpDb250ZXh0TWVudVwiKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29uc3QgbWVudUl0ZW0gPSBtZW51SXRlbXNbaV07XG5cdFx0XHRcdFx0Y29uc3Qgc3ViSXRlbXMgPSBtZW51SXRlbS5nZXRJdGVtcygpO1xuXHRcdFx0XHRcdC8vIFJlbW92ZSB0aGUgbWVudUl0ZW0gZnJvbSB0aGUgY29udGV4dCBtZW51XG5cdFx0XHRcdFx0Y29udGV4dE1lbnUucmVtb3ZlSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdFx0Ly8gSW5zZXJ0IHRoZXNlIHN1Yi1pdGVtcyBpbnRvIHRoZSBjb250ZXh0TWVudSBzdGFydGluZyBmcm9tIHRoZSBvcmlnaW5hbCBpbmRleFxuXHRcdFx0XHRcdHN1Ykl0ZW1zLmZvckVhY2goKHN1Ykl0ZW0sIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb250ZXh0TWVudS5pbnNlcnRJdGVtKHN1Ykl0ZW0sIGkgKyBpbmRleCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IG1lbnUgYWN0aW9uIGZvciB0aGUgdGFibGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gdGFibGVBY3Rpb24gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqIEByZXR1cm5zICBNZW51SXRlbXxudWxsIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgbWVudSBhY3Rpb24gb3IgbnVsbCBpZiBub3QgZm91bmRcblx0ICovXG5cdF9nZXRDb3JyZXNwb25kaW5nQ29udGV4dE1lbnVBY3Rpb24odGFibGVBY3Rpb246IEJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUpOiBNZW51SXRlbSB8IG51bGwge1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIG1lbnVJdGVtcykge1xuXHRcdFx0Ly8gdGhlIGNvcnJlc3BvbmRpbmcgY29udGV4dCBtZW51IGFjdGlvbiBpcyBlaXRoZXIgYW4gaXRlbSB3aXRoIGFuIGFkZGl0aW9uYWwgXCI6OkNvbnRleHRNZW51XCIgdGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBpZFxuXHRcdFx0Ly8gb3IgaXQgaXMgYSBzcGxpdHRlZCBtZW51IGl0ZW0gd2hlcmUgdGhlIFwiOjpDb250ZXh0TWVudVwiIHBhcnQgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgaWRcblx0XHRcdGlmIChcblx0XHRcdFx0dGFibGVBY3Rpb24uZ2V0SWQoKSArIFwiOjpDb250ZXh0TWVudVwiID09PSBpdGVtLmdldElkKCkgfHxcblx0XHRcdFx0aXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgPT09IHRhYmxlQWN0aW9uLmRhdGEoXCJhY3Rpb25JZFwiKT8ucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIilcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH1cblx0XHRcdC8vIGZvciBjb21iaW5lZCBhY3Rpb25zLCB0aGUgY29udGV4dCBtZW51IGFjdGlvbiBpcyB0aGUgb25lIHdpdGggdGhlIHNhbWUgdGV4dFxuXHRcdFx0aWYgKGl0ZW0uZ2V0SWQoKS5pbmNsdWRlcyh0YWJsZUFjdGlvbi5nZXRJZCgpKSkge1xuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQWRqdXN0IHRoZSB0ZXh0IGFuZCB2aXNpYmlsaXR5IG9mIHRoZSBhY3Rpb24gaXRlbXMgaW4gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudUl0ZW0gVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcGFyYW0gdGFibGVBY3Rpb24gVGhlIGFycmF5IG9mIHRhYmxlIGFjdGlvbnNcblx0ICovXG5cdF9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51KGFjdGlvbkl0ZW06IEJ1dHRvbiwgY29udGV4dE1lbnVJdGVtOiBNZW51SXRlbSwgdGFibGVBY3Rpb246IEFjdGlvblRvb2xiYXJBY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBjaGFuZ2UgdGhlIHRleHQgb2YgdGhlIG1lbnUgaXRlbSBhcyB0aGUgdGV4dCBvZiBhY3Rpb24gaXRlbVxuXHRcdGNvbnRleHRNZW51SXRlbS5zZXRUZXh0KGFjdGlvbkl0ZW0uZ2V0VGV4dCgpKTtcblx0XHQvLyBjaGFuZ2UgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNvbnRleHRNZW51IGFjdGlvbiBhcyB0aGUgdmlzaWJpbGl0eSBvZiB0YWJsZSBhY3Rpb25cblx0XHRjb25zdCB0YWJsZUFjdGlvblZpc2liaWxpdHkgPSBhY3Rpb25JdGVtLmdldFZpc2libGUoKSAmJiB0YWJsZUFjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdFx0aWYgKHRhYmxlQWN0aW9uVmlzaWJpbGl0eSAhPT0gY29udGV4dE1lbnVJdGVtLmdldFZpc2libGUoKSkge1xuXHRcdFx0Y29udGV4dE1lbnVJdGVtLnNldFZpc2libGUodGFibGVBY3Rpb25WaXNpYmlsaXR5KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYW4gYWN0aW9uIGhhcyBiZWVuIHNwbGl0IGJ5IFJUQS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIG9yaWdpbmFsIGFjdGlvbiBpdGVtXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgYWN0aW9uIGhhcyBiZWVuIHNwbGl0XG5cdCAqL1xuXHRfaXNBY3Rpb25TcGxpdChhY3Rpb25JdGVtOiBCdXR0b24pOiBib29sZWFuIHtcblx0XHRpZiAoYWN0aW9uSXRlbS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAubS5NZW51QnV0dG9uXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgZGVwZW5kZW50cyA9IGFjdGlvbkl0ZW0uZ2V0RGVwZW5kZW50cygpO1xuXHRcdC8vIGZpbmQgYWxsIHRoZSBkZXBlbmRlbnRzIHdoaWNoIGFyZSBhIEZsZXggTWFuYWdlZE9iamVjdE1vZGVsXG5cdFx0Y29uc3QgZmxleE1hbmFnZWRPYmplY3RNb2RlbHMgPSBkZXBlbmRlbnRzLmZpbHRlcigoZGVwZW5kZW50KSA9PiBkZXBlbmRlbnQgaW5zdGFuY2VvZiBNYW5hZ2VkT2JqZWN0TW9kZWwpO1xuXHRcdC8vIGNoZWNrIGlmIG9uZSBvZiB0aGVtIGhhcyB0aGUgbmFtZSBcIiRzYXAubS5mbGV4aWJpbGl0eS5TcGxpdEJ1dHRvbnNNb2RlbFwiXG5cdFx0cmV0dXJuIGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzLnNvbWUoXG5cdFx0XHQobW9kZWwpID0+IChtb2RlbCBhcyB1bmtub3duIGFzIE1hbmFnZWRPYmplY3RNb2RlbCkuZ2V0TmFtZSgpID09PSBcIiRzYXAubS5mbGV4aWJpbGl0eS5TcGxpdEJ1dHRvbnNNb2RlbFwiXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGEgY29udGV4dCBtZW51IGl0ZW0gaGFzIGJlZW4gcHJlc3NlZC5cblx0ICogQHBhcmFtIGFjdGl2ZVxuXHQgKi9cblx0c2V0Q29udGV4dE1lbnVBY3RpdmUoYWN0aXZlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZXh0TWVudUFjdGl2ZSA9IGFjdGl2ZTtcblx0fVxuXG5cdGlzQ29udGV4dE1lbnVBY3RpdmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGV4dE1lbnVBY3RpdmU7XG5cdH1cblxuXHQvKipcblx0ICogTWFrZSB0aGUgbWVudSBpdGVtIG9mIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXIgdmlzaWJsZSBpZiBpdCBpcyBzdXBwb3J0ZWQuXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gY29udGV4dHNcblx0ICovXG5cdHNldENvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW1WaXNpYmlsaXR5KHRhYmxlOiBNRENUYWJsZSwgY29udGV4dHM6IENvbnRleHRbXSk6IHZvaWQge1xuXHRcdC8vIGdldCBjb2xsYWJvcmF0aW9uIG1lbnUgaXRlbSBmcm9tIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IGNvbnRleHRNZW51ID0gdGFibGUuZ2V0Q29udGV4dE1lbnUoKSBhcyBNZW51O1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSA9IG1lbnVJdGVtcz8uZmluZCgobWVudUl0ZW0pID0+IG1lbnVJdGVtLmdldElkKCkuaW5jbHVkZXMoXCJDb250ZXh0TWVudTo6Q29sbGFib3JhdGlvbk1hbmFnZXJcIikpO1xuXHRcdGlmIChjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtKSB7XG5cdFx0XHQvLyBnZXQgY29sbGFib3JhdGlvbiBvcHRpb24gZnJvbSBjb2xsYWJvcmF0aXZlIHRvb2xzIHNlcnZpY2Vcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uT3B0aW9uID0gY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZT8uY29sbGFib3JhdGlvblNlcnZpY2UuY21IZWxwZXJTZXJ2aWNlPy5nZXRPcHRpb25zKCk7XG5cdFx0XHQvLyBnZXQgbmF2aWdhdGlvbiBpbmZvIGZyb20gdGFibGUgZGVmaW5pdGlvblxuXHRcdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gKHRhYmxlPy5nZXRQYXJlbnQoKSBhcyBJVGFibGVCbG9jayk/LmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblR5cGUgPSB0YWJsZURlZmluaXRpb24/LmFubm90YXRpb24/LnJvdz8ubmF2aWdhdGlvbkluZm8/LnR5cGU7XG5cdFx0XHRpZiAoY29sbGFib3JhdGlvbk9wdGlvbiAmJiBuYXZpZ2F0aW9uVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIgJiYgY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBJdGVtcyB0byBzaGFyZSBuZWVkcyB0byBoYXZlIGFuIGFjdGl2ZSBlbnRpdHksIGlmIGl0J3Mgbm90IENvbGxhYm9yYXRpdmUgRHJhZnQgb3IgYSBub24gZHJhZnQgcHJvZ3JhbW1pbmcgbW9kZWxcblx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aXZlRHJhZnQ7XG5cdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHRzWzBdLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBpc0RyYWZ0ID0gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIGNvbnRleHRzWzBdLmdldFBhdGgoKSk7XG5cdFx0XHRcdC8vIElmIHdlIGFyZSBpbiBDb2xsYWJvcmF0aXZlIERyYWZ0IG9yIGluIGFuIG5vbi1kcmFmdCBhcHAsIHdlIHNldCB2aXNpYmxlIHRvIHRydWUuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB3ZSBvbmx5IHNldCB2aXNpYmxlIHRvIHRydWUsIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgc2VsZWN0ZWQgY29udGV4dHMgaXMgb3IgaGFzIGFuIGFjdGl2ZSB2ZXJzaW9uLlxuXHRcdFx0XHRjb25zdCB2aXNpYmxlID1cblx0XHRcdFx0XHRjb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpIHx8ICFpc0RyYWZ0XG5cdFx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHRcdDogY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gY29udGV4dC5nZXRPYmplY3QoKS5Jc0FjdGl2ZUVudGl0eSB8fCBjb250ZXh0LmdldE9iamVjdCgpLkhhc0FjdGl2ZUVudGl0eSk7XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0uc2V0VmlzaWJsZSh2aXNpYmxlKTtcblx0XHRcdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0sIFwicHJlc3NcIiwgXCJDTTpTaGFyZUxpbmtcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgYmVmb3JlT3BlbkNvbnRleHRNZW51IGV2ZW50IG9mIHRoZSBNREMgVGFibGUuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdF9vbkNvbnRleHRNZW51UHJlc3ModGhpczogSVRhYmxlQmxvY2sgJiBDb250ZXh0TWVudUhhbmRsZXIsIG9FdmVudDogVGFibGUkQmVmb3JlT3BlbkNvbnRleHRNZW51RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZSA9IG9FdmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdHRhYmxlQ29udGV4dHMgPSB0YWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgQ29udGV4dFtdLCAvLyBzZWxlY3RlZCBpdGVtcyBpbiB0aGUgdGFibGVcblx0XHRcdGNvbnRleHRNZW51Q29udGV4dCA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKSBhcyBDb250ZXh0LCAvLyByb3cgY2xpY2tlZCBmb3IgY29udGV4dCBtZW51XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblxuXHRcdGNvbnN0IGNvbnRleHRNZW51U2VsZWN0aW9uID0gdGhpcy5nZXRSZWxldmFudFNlbGVjdGlvbih0YWJsZUNvbnRleHRzLCBjb250ZXh0TWVudUNvbnRleHQpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgYWxsIGNvbnRleHRzIGluIGNvbnRleHRNZW51U2VsZWN0aW9uIGFyZSBpbmFjdGl2ZVxuXHRcdC8vIGlmIHNvLCBzZXQgdGhlIGluYWN0aXZlQ29udGV4dCBwcm9wZXJ0eSBpbiB0aGUgaW50ZXJuYWwgbW9kZWwgdG8gdHJ1ZVxuXHRcdC8vIGlmIGp1c3Qgb25lIGNvbnRleHQgaXMgbm90IGluYWN0aXZlLCBzZXQgdGhlIGluYWN0aXZlQ29udGV4dCBwcm9wZXJ0eSB0byBmYWxzZVxuXHRcdGxldCBvbmVDb250ZXh0SXNBY3RpdmUgPSB0cnVlO1xuXHRcdG9uZUNvbnRleHRJc0FjdGl2ZSA9IGNvbnRleHRNZW51U2VsZWN0aW9uLnNvbWUoKGNvbnRleHQpID0+ICFjb250ZXh0LmlzSW5hY3RpdmUoKSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsICFvbmVDb250ZXh0SXNBY3RpdmUpO1xuXG5cdFx0Ly8gRG8gbm90IGNvbnNpZGVyIGVtcHR5IHJvd3MgYXMgc2VsZWN0ZWQgY29udGV4dCwgZm9yIG90aGVyIGFjdGlvbnMgdGhhbiBkZWxldGVcblx0XHRjb25zdCBhY3RpdmVTZWxlY3RlZENvbnRleHRzID0gY29udGV4dE1lbnVTZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuICFvQ29udGV4dC5pc0luYWN0aXZlKCk7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb25seUluQWN0aXZlQ29udGV4dHNTZWxlY3RlZCA9IGNvbnRleHRNZW51U2VsZWN0aW9uLmxlbmd0aCA+IDAgJiYgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPT09IDA7XG5cdFx0Y29uc3QgaXNJbmxpbmVDcmVhdGlvbk1vZGUgPVxuXHRcdFx0KHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJICYgeyBnZXRDcmVhdGlvbk1vZGU6IEZ1bmN0aW9uIH0pPy5nZXRDcmVhdGlvbk1vZGUoKS5nZXROYW1lKCkgPT09XG5cdFx0XHRDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzO1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0Y29uc3QgbmF2aWdhYmxlQ29udGV4dHMgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQhb0NvbnRleHQuaXNJbmFjdGl2ZSgpICYmXG5cdFx0XHRcdG9Db250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQ/LmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKClcblx0XHRcdFx0XHQuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcIkAkdWk1LmZlLnZpcnR1YWwucm91dGVOYXZpZ2FibGUtXCIgK1xuXHRcdFx0XHRcdFx0XHQodGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py5uYXZpZ2F0aW9uSW5mbyBhcyB7IHJvdXRlUGF0aD86IHN0cmluZyB9KT8ucm91dGVQYXRoLFxuXHRcdFx0XHRcdFx0b0NvbnRleHRcblx0XHRcdFx0XHQpICE9PSBmYWxzZVxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzSW5jbHVkaW5nSW5hY3RpdmVcIiwgY29udGV4dE1lbnVTZWxlY3Rpb24pO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIiwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbmF2aWdhYmxlQ29udGV4dHNcIiwgbmF2aWdhYmxlQ29udGV4dHMpO1xuXHRcdC8vcmVzZXQgbnVtYmVyIG9mIHNlbGVjdGVkIGNvbnRleHRzIHRvIGVuc3VyZSBjYWxsYmFjayBmb3IgY3VzdG9tIGVuYWJsZSBoYW5kbGVyXG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIC0xKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9udW1iZXJPZk5hdmlnYWJsZUNvbnRleHRzXCIsIG5hdmlnYWJsZUNvbnRleHRzLmxlbmd0aCk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNGb3JEZWxldGVcIiwgY29udGV4dE1lbnVTZWxlY3Rpb24ubGVuZ3RoKTtcblxuXHRcdGlmIChhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8qIEFsaWduIGNvbnRleHQgbWVudSB3aXRoIFJUQSBjaGFuZ2VzIGluIHRhYmxlIHRvb2xiYXIgKi9cblx0XHRcdHRoaXMuYWxpZ25Db250ZXh0TWVudVdpdGhUYWJsZVRvb2xiYXJDaGFuZ2VzKHRhYmxlKTtcblx0XHR9IGVsc2UgaWYgKG9ubHlJbkFjdGl2ZUNvbnRleHRzU2VsZWN0ZWQgJiYgaXNJbmxpbmVDcmVhdGlvbk1vZGUpIHtcblx0XHRcdC8vIE9ubHkgRGVsZXRlIGlzIHZpc2libGVcblx0XHRcdHRoaXMuaGlkZUFsbENvbnRleHRNZW51QWN0aW9uc0V4Y2VwdERlbGV0ZSh0YWJsZSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBNZW51SXRlbSBmb3IgQ29sbGFib3JhdGlvbiBNYW5hZ2VyXG5cdFx0dGhpcy5zZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSh0YWJsZSwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgY29udGV4dCBtZW51IGNvbnRhaW5zIG9ubHkgbm90IHZpc2libGUgaXRlbXNcblx0XHQvLyBpbiB0aGF0IGNhc2UgcHJldmVudCB0aGUgY29udGV4dCBtZW51IGZyb20gb3BlbmluZ1xuXHRcdGNvbnN0IGNvbnRleHRNZW51ID0gdGFibGUuZ2V0Q29udGV4dE1lbnUoKSBhcyBNZW51O1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cblx0XHRjb25zdCB2aXNpYmxlTWVudUl0ZW1zID0gbWVudUl0ZW1zLmZpbHRlcigobWVudUl0ZW0pID0+IG1lbnVJdGVtLmdldFZpc2libGUoKSk7XG5cdFx0aWYgKHZpc2libGVNZW51SXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRvRXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cblx0XHQvLyBFbmFibGVtZW50IG9mIHRoZSBFeHBhbmQvQ29sbGFwc2UgYnV0dG9uc1xuXHRcdGNvbnN0IGlzRXhwYW5kYWJsZSA9IGNvbnRleHRNZW51U2VsZWN0aW9uLnNvbWUoKHNpbmdsZUNvbnRleHQpID0+IHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IGlzQ29sbGFwc2FibGUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChzaW5nbGVDb250ZXh0KSA9PiBzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaXNFeHBhbmRhYmxlXCIsIGlzRXhwYW5kYWJsZSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvaXNDb2xsYXBzYWJsZVwiLCBpc0NvbGxhcHNhYmxlKTtcblxuXHRcdC8vIEFjdGlvbiBlbmFibGVtZW50IGZvciBEZWxldGVcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250cm9sSWRcIiwgdGFibGUuZ2V0SWQoKSk7XG5cdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKGludGVybmFsTW9kZWxDb250ZXh0LCBjb250ZXh0TWVudVNlbGVjdGlvbiwgdHJ1ZSk7XG5cblx0XHQvLyBBY3Rpb24gZW5hYmxlbWVudCBmb3IgSUJOXG5cdFx0aWYgKCF0YWJsZS5kYXRhKFwiZW5hYmxlQW5hbHl0aWNzXCIpKSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwID0gdGFibGU/LmRhdGEoXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIpO1xuXHRcdFx0VGFibGVSdW50aW1lLnNldEludGVudEJhc2VkTmF2aWdhdGlvbkVuYWJsZW1lbnQoaW50ZXJuYWxNb2RlbENvbnRleHQsIG5hdmlnYXRpb25BdmFpbGFibGVNYXAsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsIHRydWUpO1xuXHRcdH1cblxuXHRcdC8vIEFjdGlvbiBlbmFibGVtZW50IGZvciBNYXNzIEVkaXRcblx0XHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSB0YWJsZT8uZGF0YShcInVwZGF0YWJsZVByb3BlcnR5UGF0aFwiKTtcblx0XHRjb25zdCBkcmFmdCA9IHRhYmxlPy5kYXRhKFwiZHJhZnRcIik7XG5cdFx0Y29uc3QgcmVhZE9ubHlEcmFmdEVuYWJsZWQgPSB0YWJsZS5kYXRhKFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIikgPT09IFwidHJ1ZVwiICYmIGRyYWZ0ICE9PSBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHVwZGF0YWJsZUNvbnRleHRzOiBDb250ZXh0W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHNlbGVjdGVkQ29udGV4dCBvZiBhY3RpdmVTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRpZiAoVGFibGVSdW50aW1lLmlzVXBkYXRhYmxlQ29udGV4dCh1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHNlbGVjdGVkQ29udGV4dCwgcmVhZE9ubHlEcmFmdEVuYWJsZWQpKSB7XG5cdFx0XHRcdHVwZGF0YWJsZUNvbnRleHRzLnB1c2goc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvdXBkYXRhYmxlQ29udGV4dHNcIiwgdXBkYXRhYmxlQ29udGV4dHMpO1xuXG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQgJiYgY29udGV4dE1lbnVTZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQoXG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50LFxuXHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0Y29udGV4dE1lbnVTZWxlY3Rpb25bMF0sXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdFRhYmxlUnVudGltZS51cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50KGludGVybmFsTW9kZWxDb250ZXh0LmdldE9iamVjdCgpLCB0YWJsZSwgdHJ1ZSk7XG5cdFx0VGFibGVSdW50aW1lLnVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50KGludGVybmFsTW9kZWxDb250ZXh0LmdldE9iamVjdCgpLCB0YWJsZSwgdHJ1ZSk7XG5cblx0XHQvLyBPdGhlciBhY3Rpb24gZW5hYmxlbWVudFxuXHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0SlNPTi5wYXJzZSh0YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcInRhYmxlXCIsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxuXG5cdGdldFJlbGV2YW50U2VsZWN0aW9uKHRhYmxlQ29udGV4dHM6IENvbnRleHRbXSwgY29udGV4dE1lbnVDb250ZXh0OiBDb250ZXh0KTogQ29udGV4dFtdIHtcblx0XHRsZXQgY29udGV4dE1lbnVTZWxlY3Rpb246IENvbnRleHRbXTtcblx0XHRpZiAodGFibGVDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TWVudUNvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0TWVudVNlbGVjdGlvbiA9IHRhYmxlQ29udGV4dHM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHRNZW51U2VsZWN0aW9uID0gW2NvbnRleHRNZW51Q29udGV4dF0gYXMgQ29udGV4dFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gY29udGV4dE1lbnVTZWxlY3Rpb247XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztNQXNCcUJBLGtCQUFrQjtJQUFBLFNBQUFBLG1CQUFBO01BQUEsS0FDNUJDLGlCQUFpQixHQUFHLEtBQUs7SUFBQTtJQUFBQyxRQUFBLEdBQUFGLGtCQUFB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
|
|
404
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250ZXh0TWVudUhhbmRsZXIiLCJjb250ZXh0TWVudUFjdGl2ZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXMiLCJ0YWJsZSIsImNvbnRleHRNZW51IiwiZ2V0Q29udGV4dE1lbnUiLCJzb3J0SGVscGVyRm9yTWVudUl0ZW1zIiwidGFibGVBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsImZvckVhY2giLCJ0YWJsZUFjdGlvbiIsInRhYmxlQWN0aW9uSXRlbSIsImdldEFnZ3JlZ2F0aW9uIiwiX2lzQWN0aW9uU3BsaXQiLCJfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSIsIl9pc0FjdGlvbkNvbWJpbmVkIiwiX2NvbWJpbmVBY3Rpb25JbkNvbnRleHRNZW51IiwiY29udGV4dE1lbnVJdGVtIiwiX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbiIsIl9hbGlnblRleHRBbmRWaXNpYmxpdHlJbkNvbnRleHRNZW51IiwicHVzaCIsImxlbmd0aCIsIm1lbnVJdGVtIiwic29ydEluZGV4IiwiaW5kZXhPZkNvbnRleHRNZW51IiwiaW5kZXhPZkl0ZW0iLCJyZW1vdmVJdGVtIiwiaW5zZXJ0SXRlbSIsImhpZGVBbGxDb250ZXh0TWVudUFjdGlvbnNFeGNlcHREZWxldGUiLCJtZW51SXRlbXMiLCJnZXRJdGVtcyIsImRlbGV0ZUFjdGlvbiIsImZpbmQiLCJhY3Rpb24iLCJnZXRJZCIsImVuZHNXaXRoIiwiZGVsZXRlVmlzaWJsZSIsImdldEFjdGlvbiIsImdldFZpc2libGUiLCJpbmNsdWRlcyIsInNldFZpc2libGUiLCJhY3Rpb25JdGVtIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJmbGV4TWFuYWdlZE9iamVjdE1vZGVscyIsImZpbHRlciIsImRlcGVuZGVudCIsIk1hbmFnZWRPYmplY3RNb2RlbCIsInNvbWUiLCJtb2RlbCIsImNvbnRleHRNZW51SXRlbXMiLCJtZW51QnV0dG9uIiwiX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51IiwiYWN0aW9uSXRlbXMiLCJnZXRNZW51IiwidG9vbEJhckFjdGlvbiIsImFjdGlvbklkSW5Db250ZXh0TWVudSIsImRhdGEiLCJhY3Rpb25JZEluVG9vbGJhciIsInJlcGxhY2UiLCJzZXRUZXh0IiwiZ2V0VGV4dCIsImFkZEl0ZW0iLCJhY3Rpb25JblN1Yk1lbnUiLCJfZmluZEFjdGlvbkluU3ViTWVudSIsImRlc3Ryb3kiLCJzdWJNZW51Iiwic3BsaWNlIiwiaW5kZXhPZiIsInVuZGVmaW5lZCIsIm5ld01lbnVCdXR0b24iLCJNZW51SXRlbSIsImlkIiwiZ2VuZXJhdGUiLCJ0ZXh0IiwiaSIsIml0ZW0iLCJzdWJJdGVtcyIsInN1Ykl0ZW0iLCJpbmRleCIsInRhYmxlQWN0aW9uVmlzaWJpbGl0eSIsInNldENvbnRleHRNZW51QWN0aXZlIiwiYWN0aXZlIiwiaXNDb250ZXh0TWVudUFjdGl2ZSIsInNldENvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW1WaXNpYmlsaXR5IiwiY29udGV4dHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImNvbGxhYm9yYXRpb25PcHRpb24iLCJjb2xsYWJvcmF0aW9uU2VydmljZSIsImNtSGVscGVyU2VydmljZSIsImdldE9wdGlvbnMiLCJ0YWJsZURlZmluaXRpb24iLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJuYXZpZ2F0aW9uVHlwZSIsImFubm90YXRpb24iLCJyb3ciLCJuYXZpZ2F0aW9uSW5mbyIsInR5cGUiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImdldENvbnRyb2xsZXIiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImlzRHJhZnQiLCJNb2RlbEhlbHBlciIsImlzRHJhZnRTdXBwb3J0ZWQiLCJnZXRQYXRoIiwidmlzaWJsZSIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJjb250ZXh0IiwiZ2V0T2JqZWN0IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsIl9vbkNvbnRleHRNZW51UHJlc3MiLCJvRXZlbnQiLCJnZXRTb3VyY2UiLCJ0YWJsZUNvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsImNvbnRleHRNZW51Q29udGV4dCIsImdldFBhcmFtZXRlciIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJjb250ZXh0TWVudVNlbGVjdGlvbiIsImdldFJlbGV2YW50U2VsZWN0aW9uIiwib25lQ29udGV4dElzQWN0aXZlIiwiaXNJbmFjdGl2ZSIsInNldFByb3BlcnR5IiwiYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyIsIm9Db250ZXh0Iiwib25seUluQWN0aXZlQ29udGV4dHNTZWxlY3RlZCIsImlzSW5saW5lQ3JlYXRpb25Nb2RlIiwiZ2V0Q3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwibmF2aWdhYmxlQ29udGV4dHMiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImdldFByb3BlcnR5Iiwicm91dGVQYXRoIiwidmlzaWJsZU1lbnVJdGVtcyIsInByZXZlbnREZWZhdWx0IiwiaXNFeHBhbmRhYmxlIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJpc0NvbGxhcHNhYmxlIiwiZGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiVGFibGVSdW50aW1lIiwic2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudCIsImRyYWZ0IiwicmVhZE9ubHlEcmFmdEVuYWJsZWQiLCJ1cGRhdGFibGVDb250ZXh0cyIsInNlbGVjdGVkQ29udGV4dCIsImlzVXBkYXRhYmxlQ29udGV4dCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aEluZm8iLCJjb250cm9sIiwiY3JlYXRlRW5hYmxlbWVudCIsIl91cGRhdGVDcmVhdGVFbmFibGVtZW50Iiwibm9kZVR5cGUiLCJ1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50IiwidXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIkpTT04iLCJwYXJzZSIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29udGV4dE1lbnVIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBDcmVhdGlvbk1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgZGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNb2RlbCBmcm9tIFwic2FwL3VpL2ZsL3V0aWwvTWFuYWdlZE9iamVjdE1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZSRCZWZvcmVPcGVuQ29udGV4dE1lbnVFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRleHRNZW51SGFuZGxlciBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRwcm90ZWN0ZWQgY29udGV4dE1lbnVBY3RpdmUgPSBmYWxzZTtcblxuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEFsaWduIGNvbnRleHQgbWVudSB3aXRoIHRoZSB0YWJsZSBhY3Rpb25zIGJ5IFJUQSBjaGFuZ2VzIGluIHRhYmxlIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgd2l0aCBib3VuZCB0YWJsZSBhY3Rpb25zXG5cdCAqL1xuXHRhbGlnbkNvbnRleHRNZW51V2l0aFRhYmxlVG9vbGJhckNoYW5nZXModGFibGU6IE1EQ1RhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3Qgc29ydEhlbHBlckZvck1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuXHRcdGNvbnN0IHRhYmxlQWN0aW9ucyA9IHRhYmxlLmdldEFjdGlvbnMoKTtcblx0XHR0YWJsZUFjdGlvbnM/LmZvckVhY2goKHRhYmxlQWN0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCB0YWJsZUFjdGlvbkl0ZW0gPSB0YWJsZUFjdGlvbi5nZXRBZ2dyZWdhdGlvbihcImFjdGlvblwiKSBhcyBCdXR0b247XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gc3BsaXQgYnkgUlRBXG5cdFx0XHRpZiAodGhpcy5faXNBY3Rpb25TcGxpdCh0YWJsZUFjdGlvbkl0ZW0pKSB7XG5cdFx0XHRcdC8vIFJlbW92ZSBvcmlnaW5hbCBtZW51IGl0ZW0gYW5kIGFkZCBzdWIgaXRlbXMgYXMgbmV3IG1lbnUgaXRlbXNcblx0XHRcdFx0dGhpcy5fc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51KTtcblx0XHRcdH1cblx0XHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaXRlbSBoYXMgYmVlbiBjcmVhdGVkIGJ5IGNvbWJpbmluZyB0aGUgdHdvIGFjdGlvbnNcblx0XHRcdGlmICh0aGlzLl9pc0FjdGlvbkNvbWJpbmVkKHRhYmxlQWN0aW9uSXRlbSkpIHtcblx0XHRcdFx0dGhpcy5fY29tYmluZUFjdGlvbkluQ29udGV4dE1lbnUodGFibGVBY3Rpb25JdGVtIGFzIHVua25vd24gYXMgTWVudUJ1dHRvbiwgY29udGV4dE1lbnUsIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRleHRNZW51SXRlbSA9IHRoaXMuX2dldENvcnJlc3BvbmRpbmdDb250ZXh0TWVudUFjdGlvbih0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51KTtcblx0XHRcdGlmIChjb250ZXh0TWVudUl0ZW0pIHtcblx0XHRcdFx0dGhpcy5fYWxpZ25UZXh0QW5kVmlzaWJsaXR5SW5Db250ZXh0TWVudSh0YWJsZUFjdGlvbkl0ZW0sIGNvbnRleHRNZW51SXRlbSwgdGFibGVBY3Rpb24gYXMgQWN0aW9uVG9vbGJhckFjdGlvbik7XG5cdFx0XHRcdHNvcnRIZWxwZXJGb3JNZW51SXRlbXMucHVzaChjb250ZXh0TWVudUl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIEFsaWduIHRoZSBvcmRlciBvZiBjb250ZXh0LW1lbnVJdGVtcyB3aXRoIGJvdW5kIHRhYmxlIGFjdGlvbnNcblx0XHRpZiAoc29ydEhlbHBlckZvck1lbnVJdGVtcy5sZW5ndGgpIHtcblx0XHRcdHNvcnRIZWxwZXJGb3JNZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW0sIHNvcnRJbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpbmRleE9mQ29udGV4dE1lbnUgPSBjb250ZXh0TWVudS5pbmRleE9mSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdGlmIChpbmRleE9mQ29udGV4dE1lbnUgIT09IHNvcnRJbmRleCkge1xuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdGNvbnRleHRNZW51Lmluc2VydEl0ZW0obWVudUl0ZW0sIHNvcnRJbmRleCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIaWRlIGFsbCBjb250ZXh0IG1lbnUgYWN0aW9ucyBleGNlcHQgZGVsZXRlLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIE1EQ1RhYmxlXG5cdCAqL1xuXHRoaWRlQWxsQ29udGV4dE1lbnVBY3Rpb25zRXhjZXB0RGVsZXRlKHRhYmxlOiBNRENUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRNZW51ID0gdGFibGUuZ2V0Q29udGV4dE1lbnUoKSBhcyBNZW51O1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Y29uc3QgZGVsZXRlQWN0aW9uID0gdGFibGUuZ2V0QWN0aW9ucygpLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLmdldElkKCkuZW5kc1dpdGgoXCJTdGFuZGFyZEFjdGlvbjo6RGVsZXRlOjpBY3Rpb25Ub29sYmFyQWN0aW9uXCIpKTtcblx0XHRjb25zdCBkZWxldGVWaXNpYmxlID0gKGRlbGV0ZUFjdGlvbiBhcyBBY3Rpb25Ub29sYmFyQWN0aW9uKT8uZ2V0QWN0aW9uKCkuZ2V0VmlzaWJsZSgpID8/IHRydWU7XG5cdFx0bWVudUl0ZW1zLmZvckVhY2goKG1lbnVJdGVtKSA9PiB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgbWVudSBpdGVtIGlzIHRoZSBkZWxldGUgYWN0aW9uXG5cdFx0XHRpZiAobWVudUl0ZW0uZ2V0SWQoKS5pbmNsdWRlcyhcIlN0YW5kYXJkQWN0aW9uOjpEZWxldGU6OkNvbnRleHRNZW51XCIpKSB7XG5cdFx0XHRcdG1lbnVJdGVtLnNldFZpc2libGUoZGVsZXRlVmlzaWJsZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZW51SXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZCBieSBhIENvbWJpbmUgUlRBIGNoYW5nZXMgaW4gdGhlIHRhYmxlIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gdG8gY2hlY2tcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgYWN0aW9uIGl0ZW0gaGFzIGJlZW4gY3JlYXRlZCBieSBhIENvbWJpbmUgUlRBIGNoYW5nZXMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICovXG5cdF9pc0FjdGlvbkNvbWJpbmVkKGFjdGlvbkl0ZW06IEJ1dHRvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChhY3Rpb25JdGVtLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLk1lbnVCdXR0b25cIikge1xuXHRcdFx0Ly8gV2UgZG9uJ3QgaGF2ZSBjdXN0b20gZGF0YSBhdHRyaWJ1dGUgb24gdGhlIE1lbnVCdXR0b24gY3JlYXRlZCBieSBSVEEgY29tYmluZSBjaGFuZ2Vcblx0XHRcdGNvbnN0IGRlcGVuZGVudHMgPSBhY3Rpb25JdGVtLmdldERlcGVuZGVudHMoKTtcblx0XHRcdC8vIGZpbmQgYWxsIHRoZSBkZXBlbmRlbnRzIHdoaWNoIGFyZSBhIEZsZXggTWFuYWdlZE9iamVjdE1vZGVsXG5cdFx0XHRjb25zdCBmbGV4TWFuYWdlZE9iamVjdE1vZGVscyA9IGRlcGVuZGVudHMuZmlsdGVyKChkZXBlbmRlbnQpID0+IGRlcGVuZGVudCBpbnN0YW5jZW9mIE1hbmFnZWRPYmplY3RNb2RlbCk7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlbSBpbmNsdWRlcyBcIiRzYXAubS5mbGV4aWJpbGl0eS5NZW51QnV0dG9uTW9kZWxcIlxuXHRcdFx0cmV0dXJuIGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzLnNvbWUoKG1vZGVsKSA9PlxuXHRcdFx0XHQobW9kZWwgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0TW9kZWwpLmdldE5hbWUoKS5pbmNsdWRlcyhcIiRzYXAubS5mbGV4aWJpbGl0eS5NZW51QnV0dG9uTW9kZWxcIilcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb21iaW5lIHRoZSBhY3Rpb25zIGluIHRoZSBjb250ZXh0IG1lbnUgdG8gYWxpZ24gd2l0aCB0aGUgdGFibGUgYWN0aW9uIHRvb2xiYXIuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnUgVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIE1EQ1RhYmxlXG5cdCAqL1xuXHRfY29tYmluZUFjdGlvbkluQ29udGV4dE1lbnUoYWN0aW9uSXRlbTogTWVudUJ1dHRvbiwgY29udGV4dE1lbnU6IE1lbnUsIHRhYmxlOiBNRENUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRNZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBtZW51IGJ1dHRvbiBpbiB0aGUgY29udGV4dCBtZW51IGlmIGl0IGRvZXMgbm90IGV4aXN0XG5cdFx0Y29uc3QgbWVudUJ1dHRvbiA9IHRoaXMuX2ZpbmRPckNyZWF0ZU1lbnVCdXR0b25JbkNvbnRleHRNZW51KGFjdGlvbkl0ZW0sIHRhYmxlKTtcblx0XHRjb25zdCBhY3Rpb25JdGVtcyA9IGFjdGlvbkl0ZW0uZ2V0TWVudSgpLmdldEl0ZW1zKCk7XG5cdFx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9uSXRlbXMpIHtcblx0XHRcdGNvbnN0IHRvb2xCYXJBY3Rpb24gPSBhY3Rpb247XG5cdFx0XHQvLyBub3cgZmluZCB0aGUgYWN0aW9uIGluIHRoZSBjb250ZXh0IG1lbnUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0IG1lbnVcblx0XHRcdGZvciAoY29uc3QgbWVudUl0ZW0gb2YgY29udGV4dE1lbnVJdGVtcykge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25JZEluQ29udGV4dE1lbnUgPSBtZW51SXRlbS5kYXRhKFwiYWN0aW9uSWRcIik7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbklkSW5Ub29sYmFyID0gdG9vbEJhckFjdGlvbi5kYXRhKFwiYWN0aW9uSWRcIik7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhY3Rpb25JZEluQ29udGV4dE1lbnUgPT09IGFjdGlvbklkSW5Ub29sYmFyICsgXCI6OkNvbnRleHRNZW51XCIgfHxcblx0XHRcdFx0XHRhY3Rpb25JZEluQ29udGV4dE1lbnUgPT09IGFjdGlvbklkSW5Ub29sYmFyLnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG1lbnVJdGVtLnNldFRleHQodG9vbEJhckFjdGlvbi5nZXRUZXh0KCkpO1xuXHRcdFx0XHRcdC8vIEFkZCB0aGUgYWN0aW9uIHRvIHRoZSBtZW51IGJ1dHRvblxuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdG1lbnVCdXR0b24uYWRkSXRlbShtZW51SXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gSWYgd2UgZmluZCBhbm90aGVyIG1lbnUgaW4gdGhlIGNvbnRleHQgbWVudSB3ZSBjaGVjayBpZiB0aGUgYWN0aW9uIGlzIGluIHRoZSBzdWIgbWVudVxuXHRcdFx0XHRpZiAobWVudUl0ZW0uZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmICFtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKGFjdGlvbkl0ZW0uZ2V0SWQoKSkpIHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25JblN1Yk1lbnUgPSB0aGlzLl9maW5kQWN0aW9uSW5TdWJNZW51KG1lbnVJdGVtLmdldEl0ZW1zKCksIHRvb2xCYXJBY3Rpb24pO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25JblN1Yk1lbnUpIHtcblx0XHRcdFx0XHRcdGFjdGlvbkluU3ViTWVudS5zZXRUZXh0KHRvb2xCYXJBY3Rpb24uZ2V0VGV4dCgpKTtcblx0XHRcdFx0XHRcdG1lbnVCdXR0b24uYWRkSXRlbShhY3Rpb25JblN1Yk1lbnUpO1xuXHRcdFx0XHRcdFx0aWYgKG1lbnVJdGVtLmdldEl0ZW1zKCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZHMgdGhlIGFjdGlvbiBpbiBhbiBhY3Rpb24gbWVudSBpbiB0aGUgY29udGV4dCBtZW51LCBpdCByZXR1cm4gdGhlIGFjdGlvbiBpZiBmb3VuZCBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBtZW51LlxuXHQgKiBAcGFyYW0gc3ViTWVudSBUaGUgYXJyYXkgb2YgYWN0aW9ucyBpbiB0aGUgbWVudVxuXHQgKiBAcGFyYW0gYWN0aW9uSXRlbSBUaGUgYWN0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gaWYgZm91bmQsIG90aGVyd2lzZSB1bmRlZmluZWRcblx0ICovXG5cdF9maW5kQWN0aW9uSW5TdWJNZW51KHN1Yk1lbnU6IE1lbnVJdGVtW10sIGFjdGlvbkl0ZW06IE1lbnVJdGVtKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRcdGZvciAoY29uc3QgbWVudUl0ZW0gb2Ygc3ViTWVudSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtZW51SXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgPT09IGFjdGlvbkl0ZW0uZGF0YShcImFjdGlvbklkXCIpLnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpIHx8XG5cdFx0XHRcdG1lbnVJdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikgKyBcIjo6Q29udGV4dE1lbnVcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IG1lbnVJdGVtO1xuXHRcdFx0XHRzdWJNZW51LnNwbGljZShzdWJNZW51LmluZGV4T2YobWVudUl0ZW0pLCAxKTtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjaydzIGlmIGEgcGFydGljdWxhciBtZW51IGJ1dHRvbiBleGlzdHMgaW4gdGhlIGNvbnRleHQgbWVudSwgaWYgbm90IGNyZWF0ZXMgYSBuZXcgbWVudSBidXR0b24gYW5kIGFkZHMgaXQgdG8gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIG1lbnUgYnV0dG9uIHRvIGZpbmQgb3IgY3JlYXRlXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgTURDVGFibGVcblx0ICogQHJldHVybnMgVGhlIE1lbnVJdGVtIGlmIGZvdW5kLCBvdGhlcndpc2UgYSBuZXcgTWVudUl0ZW1cblx0ICovXG5cdF9maW5kT3JDcmVhdGVNZW51QnV0dG9uSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBNZW51QnV0dG9uLCB0YWJsZTogTURDVGFibGUpOiBNZW51SXRlbSB7XG5cdFx0Y29uc3QgY29udGV4dE1lbnUgPSB0YWJsZS5nZXRDb250ZXh0TWVudSgpIGFzIE1lbnU7XG5cdFx0Y29uc3QgY29udGV4dE1lbnVJdGVtcyA9IGNvbnRleHRNZW51LmdldEl0ZW1zKCk7XG5cdFx0Ly9sb29wIG92ZXIgY29udGV4dE1lbnVJdGVtcyBhbmQgY2hlY2sgaWYgdGhlIHJlcXVpcmVkIG1lbnUgYnV0dG9uIGFscmVhZHkgZXhpc3RzXG5cdFx0Zm9yIChjb25zdCBtZW51SXRlbSBvZiBjb250ZXh0TWVudUl0ZW1zKSB7XG5cdFx0XHRpZiAobWVudUl0ZW0uZ2V0SWQoKS5pbmNsdWRlcyhhY3Rpb25JdGVtLmdldElkKCkpKSB7XG5cdFx0XHRcdHJldHVybiBtZW51SXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gaWYgdGhlIHJlcXVpcmVkIG1lbnUgYnV0dG9uIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgYSBuZXcgbWVudSBidXR0b24gYW5kIGFkZCBpdCB0byB0aGUgY29udGV4dE1lbnVcblx0XHRjb25zdCBuZXdNZW51QnV0dG9uID0gbmV3IE1lbnVJdGVtKHtcblx0XHRcdGlkOiBnZW5lcmF0ZShbdGFibGUuZ2V0SWQoKSwgYWN0aW9uSXRlbS5nZXRJZCgpLCBcIjo6Q29udGV4dE1lbnVcIl0pLFxuXHRcdFx0dGV4dDogYWN0aW9uSXRlbS5nZXRUZXh0KClcblx0XHR9KTtcblx0XHRjb250ZXh0TWVudS5hZGRJdGVtKG5ld01lbnVCdXR0b24pO1xuXHRcdHJldHVybiBuZXdNZW51QnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNwbGl0IHRoZSBhY3Rpb24gaXRlbXMgaW4gdGhlIGNvbnRleHQgbWVudS5cblx0ICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIGFjdGlvbiBpdGVtIHRvIHNwbGl0XG5cdCAqIEBwYXJhbSBjb250ZXh0TWVudSBUaGUgY29udGV4dCBtZW51XG5cdCAqL1xuXHRfc3BsaXRBY3Rpb25zSW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBCdXR0b24sIGNvbnRleHRNZW51OiBNZW51KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gY29udGV4dE1lbnUuZ2V0SXRlbXMoKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbWVudSBpdGVtIGlzIGEgTWVudVxuXHRcdFx0aWYgKG1lbnVJdGVtc1tpXS5nZXRJdGVtcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG1lbnVJdGVtc1tpXVxuXHRcdFx0XHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdFx0XHRcdC5zb21lKChpdGVtKSA9PiBpdGVtLmRhdGEoXCJhY3Rpb25JZFwiKSA9PT0gYWN0aW9uSXRlbS5kYXRhKFwiYWN0aW9uSWRcIikucmVwbGFjZShcIjo6QWN0aW9uTWVudVwiLCBcIjo6Q29udGV4dE1lbnVcIikpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1zW2ldO1xuXHRcdFx0XHRcdGNvbnN0IHN1Ykl0ZW1zID0gbWVudUl0ZW0uZ2V0SXRlbXMoKTtcblx0XHRcdFx0XHQvLyBSZW1vdmUgdGhlIG1lbnVJdGVtIGZyb20gdGhlIGNvbnRleHQgbWVudVxuXHRcdFx0XHRcdGNvbnRleHRNZW51LnJlbW92ZUl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0XHRcdC8vIEluc2VydCB0aGVzZSBzdWItaXRlbXMgaW50byB0aGUgY29udGV4dE1lbnUgc3RhcnRpbmcgZnJvbSB0aGUgb3JpZ2luYWwgaW5kZXhcblx0XHRcdFx0XHRzdWJJdGVtcy5mb3JFYWNoKChzdWJJdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29udGV4dE1lbnUuaW5zZXJ0SXRlbShzdWJJdGVtLCBpICsgaW5kZXgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvcnJlc3BvbmRpbmcgY29udGV4dCBtZW51IGFjdGlvbiBmb3IgdGhlIHRhYmxlIGFjdGlvbi5cblx0ICogQHBhcmFtIHRhYmxlQWN0aW9uIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnUgVGhlIGNvbnRleHQgbWVudVxuXHQgKiBAcmV0dXJucyAgTWVudUl0ZW18bnVsbCB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IG1lbnUgYWN0aW9uIG9yIG51bGwgaWYgbm90IGZvdW5kXG5cdCAqL1xuXHRfZ2V0Q29ycmVzcG9uZGluZ0NvbnRleHRNZW51QWN0aW9uKHRhYmxlQWN0aW9uOiBCdXR0b24sIGNvbnRleHRNZW51OiBNZW51KTogTWVudUl0ZW0gfCBudWxsIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBtZW51SXRlbXMpIHtcblx0XHRcdC8vIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgZWl0aGVyIGFuIGl0ZW0gd2l0aCBhbiBhZGRpdGlvbmFsIFwiOjpDb250ZXh0TWVudVwiIHRleHQgYXQgdGhlIGVuZCBvZiB0aGUgaWRcblx0XHRcdC8vIG9yIGl0IGlzIGEgc3BsaXR0ZWQgbWVudSBpdGVtIHdoZXJlIHRoZSBcIjo6Q29udGV4dE1lbnVcIiBwYXJ0IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGlkXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRhYmxlQWN0aW9uLmdldElkKCkgKyBcIjo6Q29udGV4dE1lbnVcIiA9PT0gaXRlbS5nZXRJZCgpIHx8XG5cdFx0XHRcdGl0ZW0uZGF0YShcImFjdGlvbklkXCIpID09PSB0YWJsZUFjdGlvbi5kYXRhKFwiYWN0aW9uSWRcIik/LnJlcGxhY2UoXCI6OkFjdGlvbk1lbnVcIiwgXCI6OkNvbnRleHRNZW51XCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0XHQvLyBmb3IgY29tYmluZWQgYWN0aW9ucywgdGhlIGNvbnRleHQgbWVudSBhY3Rpb24gaXMgdGhlIG9uZSB3aXRoIHRoZSBzYW1lIHRleHRcblx0XHRcdGlmIChpdGVtLmdldElkKCkuaW5jbHVkZXModGFibGVBY3Rpb24uZ2V0SWQoKSkpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkanVzdCB0aGUgdGV4dCBhbmQgdmlzaWJpbGl0eSBvZiB0aGUgYWN0aW9uIGl0ZW1zIGluIHRoZSBjb250ZXh0IG1lbnUuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBhY3Rpb24gaXRlbSB0byBzcGxpdFxuXHQgKiBAcGFyYW0gY29udGV4dE1lbnVJdGVtIFRoZSBjb250ZXh0IG1lbnVcblx0ICogQHBhcmFtIHRhYmxlQWN0aW9uIFRoZSBhcnJheSBvZiB0YWJsZSBhY3Rpb25zXG5cdCAqL1xuXHRfYWxpZ25UZXh0QW5kVmlzaWJsaXR5SW5Db250ZXh0TWVudShhY3Rpb25JdGVtOiBCdXR0b24sIGNvbnRleHRNZW51SXRlbTogTWVudUl0ZW0sIHRhYmxlQWN0aW9uOiBBY3Rpb25Ub29sYmFyQWN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gY2hhbmdlIHRoZSB0ZXh0IG9mIHRoZSBtZW51IGl0ZW0gYXMgdGhlIHRleHQgb2YgYWN0aW9uIGl0ZW1cblx0XHRjb250ZXh0TWVudUl0ZW0uc2V0VGV4dChhY3Rpb25JdGVtLmdldFRleHQoKSk7XG5cdFx0Ly8gY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb250ZXh0TWVudSBhY3Rpb24gYXMgdGhlIHZpc2liaWxpdHkgb2YgdGFibGUgYWN0aW9uXG5cdFx0Y29uc3QgdGFibGVBY3Rpb25WaXNpYmlsaXR5ID0gYWN0aW9uSXRlbS5nZXRWaXNpYmxlKCkgJiYgdGFibGVBY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdGlmICh0YWJsZUFjdGlvblZpc2liaWxpdHkgIT09IGNvbnRleHRNZW51SXRlbS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdGNvbnRleHRNZW51SXRlbS5zZXRWaXNpYmxlKHRhYmxlQWN0aW9uVmlzaWJpbGl0eSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFuIGFjdGlvbiBoYXMgYmVlbiBzcGxpdCBieSBSVEEuXG5cdCAqIEBwYXJhbSBhY3Rpb25JdGVtIFRoZSBvcmlnaW5hbCBhY3Rpb24gaXRlbVxuXHQgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGFjdGlvbiBoYXMgYmVlbiBzcGxpdFxuXHQgKi9cblx0X2lzQWN0aW9uU3BsaXQoYWN0aW9uSXRlbTogQnV0dG9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGFjdGlvbkl0ZW0uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uTWVudUJ1dHRvblwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGRlcGVuZGVudHMgPSBhY3Rpb25JdGVtLmdldERlcGVuZGVudHMoKTtcblx0XHQvLyBmaW5kIGFsbCB0aGUgZGVwZW5kZW50cyB3aGljaCBhcmUgYSBGbGV4IE1hbmFnZWRPYmplY3RNb2RlbFxuXHRcdGNvbnN0IGZsZXhNYW5hZ2VkT2JqZWN0TW9kZWxzID0gZGVwZW5kZW50cy5maWx0ZXIoKGRlcGVuZGVudCkgPT4gZGVwZW5kZW50IGluc3RhbmNlb2YgTWFuYWdlZE9iamVjdE1vZGVsKTtcblx0XHQvLyBjaGVjayBpZiBvbmUgb2YgdGhlbSBoYXMgdGhlIG5hbWUgXCIkc2FwLm0uZmxleGliaWxpdHkuU3BsaXRCdXR0b25zTW9kZWxcIlxuXHRcdHJldHVybiBmbGV4TWFuYWdlZE9iamVjdE1vZGVscy5zb21lKFxuXHRcdFx0KG1vZGVsKSA9PiAobW9kZWwgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0TW9kZWwpLmdldE5hbWUoKSA9PT0gXCIkc2FwLm0uZmxleGliaWxpdHkuU3BsaXRCdXR0b25zTW9kZWxcIlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBhIGNvbnRleHQgbWVudSBpdGVtIGhhcyBiZWVuIHByZXNzZWQuXG5cdCAqIEBwYXJhbSBhY3RpdmVcblx0ICovXG5cdHNldENvbnRleHRNZW51QWN0aXZlKGFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuY29udGV4dE1lbnVBY3RpdmUgPSBhY3RpdmU7XG5cdH1cblxuXHRpc0NvbnRleHRNZW51QWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRleHRNZW51QWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ha2UgdGhlIG1lbnUgaXRlbSBvZiBTQVAgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIHZpc2libGUgaWYgaXQgaXMgc3VwcG9ydGVkLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGNvbnRleHRzXG5cdCAqL1xuXHRzZXRDb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtVmlzaWJpbGl0eSh0YWJsZTogTURDVGFibGUsIGNvbnRleHRzOiBDb250ZXh0W10pOiB2b2lkIHtcblx0XHQvLyBnZXQgY29sbGFib3JhdGlvbiBtZW51IGl0ZW0gZnJvbSBjb250ZXh0IG1lbnVcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyTWVudUl0ZW0gPSBtZW51SXRlbXM/LmZpbmQoKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5nZXRJZCgpLmluY2x1ZGVzKFwiQ29udGV4dE1lbnU6OkNvbGxhYm9yYXRpb25NYW5hZ2VyXCIpKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbSkge1xuXHRcdFx0Ly8gZ2V0IGNvbGxhYm9yYXRpb24gb3B0aW9uIGZyb20gY29sbGFib3JhdGl2ZSB0b29scyBzZXJ2aWNlXG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGFibGUpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSA9IGFwcENvbXBvbmVudD8uZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk9wdGlvbiA9IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2U/LmNvbGxhYm9yYXRpb25TZXJ2aWNlLmNtSGVscGVyU2VydmljZT8uZ2V0T3B0aW9ucygpO1xuXHRcdFx0Ly8gZ2V0IG5hdmlnYXRpb24gaW5mbyBmcm9tIHRhYmxlIGRlZmluaXRpb25cblx0XHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZT8uZ2V0UGFyZW50KCkgYXMgSVRhYmxlQmxvY2spPy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25UeXBlID0gdGFibGVEZWZpbml0aW9uPy5hbm5vdGF0aW9uPy5yb3c/Lm5hdmlnYXRpb25JbmZvPy50eXBlO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25PcHRpb24gJiYgbmF2aWdhdGlvblR5cGUgPT09IFwiTmF2aWdhdGlvblwiICYmIGNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gSXRlbXMgdG8gc2hhcmUgbmVlZHMgdG8gaGF2ZSBhbiBhY3RpdmUgZW50aXR5LCBpZiBpdCdzIG5vdCBDb2xsYWJvcmF0aXZlIERyYWZ0IG9yIGEgbm9uIGRyYWZ0IHByb2dyYW1taW5nIG1vZGVsXG5cdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKTtcblx0XHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZURyYWZ0ID0gdmlldy5nZXRDb250cm9sbGVyKCkuY29sbGFib3JhdGl2ZURyYWZ0O1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0c1swXS5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgaXNEcmFmdCA9IE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCBjb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0XHQvLyBJZiB3ZSBhcmUgaW4gQ29sbGFib3JhdGl2ZSBEcmFmdCBvciBpbiBhbiBub24tZHJhZnQgYXBwLCB3ZSBzZXQgdmlzaWJsZSB0byB0cnVlLlxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugd2Ugb25seSBzZXQgdmlzaWJsZSB0byB0cnVlLCBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHNlbGVjdGVkIGNvbnRleHRzIGlzIG9yIGhhcyBhbiBhY3RpdmUgdmVyc2lvbi5cblx0XHRcdFx0Y29uc3QgdmlzaWJsZSA9XG5cdFx0XHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSB8fCAhaXNEcmFmdFxuXHRcdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0XHQ6IGNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHkgfHwgY29udGV4dC5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkpO1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLnNldFZpc2libGUodmlzaWJsZSk7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShjb2xsYWJvcmF0aW9uTWFuYWdlck1lbnVJdGVtLCBcInByZXNzXCIsIFwiQ006U2hhcmVMaW5rXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIGJlZm9yZU9wZW5Db250ZXh0TWVudSBldmVudCBvZiB0aGUgTURDIFRhYmxlLlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRfb25Db250ZXh0TWVudVByZXNzKHRoaXM6IElUYWJsZUJsb2NrICYgQ29udGV4dE1lbnVIYW5kbGVyLCBvRXZlbnQ6IFRhYmxlJEJlZm9yZU9wZW5Db250ZXh0TWVudUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGUgPSBvRXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHR0YWJsZUNvbnRleHRzID0gdGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIENvbnRleHRbXSwgLy8gc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIHRhYmxlXG5cdFx0XHRjb250ZXh0TWVudUNvbnRleHQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIikgYXMgQ29udGV4dCwgLy8gcm93IGNsaWNrZWQgZm9yIGNvbnRleHQgbWVudVxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRjb25zdCBjb250ZXh0TWVudVNlbGVjdGlvbiA9IHRoaXMuZ2V0UmVsZXZhbnRTZWxlY3Rpb24odGFibGVDb250ZXh0cywgY29udGV4dE1lbnVDb250ZXh0KTtcblxuXHRcdC8vIENoZWNrIGlmIGFsbCBjb250ZXh0cyBpbiBjb250ZXh0TWVudVNlbGVjdGlvbiBhcmUgaW5hY3RpdmVcblx0XHQvLyBpZiBzbywgc2V0IHRoZSBpbmFjdGl2ZUNvbnRleHQgcHJvcGVydHkgaW4gdGhlIGludGVybmFsIG1vZGVsIHRvIHRydWVcblx0XHQvLyBpZiBqdXN0IG9uZSBjb250ZXh0IGlzIG5vdCBpbmFjdGl2ZSwgc2V0IHRoZSBpbmFjdGl2ZUNvbnRleHQgcHJvcGVydHkgdG8gZmFsc2Vcblx0XHRsZXQgb25lQ29udGV4dElzQWN0aXZlID0gdHJ1ZTtcblx0XHRvbmVDb250ZXh0SXNBY3RpdmUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChjb250ZXh0KSA9PiAhY29udGV4dC5pc0luYWN0aXZlKCkpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiLCAhb25lQ29udGV4dElzQWN0aXZlKTtcblxuXHRcdC8vIERvIG5vdCBjb25zaWRlciBlbXB0eSByb3dzIGFzIHNlbGVjdGVkIGNvbnRleHQsIGZvciBvdGhlciBhY3Rpb25zIHRoYW4gZGVsZXRlXG5cdFx0Y29uc3QgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyA9IGNvbnRleHRNZW51U2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdHJldHVybiAhb0NvbnRleHQuaXNJbmFjdGl2ZSgpO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9ubHlJbkFjdGl2ZUNvbnRleHRzU2VsZWN0ZWQgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5sZW5ndGggPiAwICYmIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID09PSAwO1xuXHRcdGNvbnN0IGlzSW5saW5lQ3JlYXRpb25Nb2RlID1cblx0XHRcdCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSAmIHsgZ2V0Q3JlYXRpb25Nb2RlOiBGdW5jdGlvbiB9KT8uZ2V0Q3JlYXRpb25Nb2RlKCkuZ2V0TmFtZSgpID09PVxuXHRcdFx0Q3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cztcblx0XHRjb25zdCB0YWJsZURlZmluaXRpb24gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdGNvbnN0IG5hdmlnYWJsZUNvbnRleHRzID0gY29udGV4dE1lbnVTZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0IW9Db250ZXh0LmlzSW5hY3RpdmUoKSAmJlxuXHRcdFx0XHRvQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0Py5nZXRMb2NhbEFubm90YXRpb25Nb2RlbCgpXG5cdFx0XHRcdFx0LmdldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XCJAJHVpNS5mZS52aXJ0dWFsLnJvdXRlTmF2aWdhYmxlLVwiICtcblx0XHRcdFx0XHRcdFx0KHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ubmF2aWdhdGlvbkluZm8gYXMgeyByb3V0ZVBhdGg/OiBzdHJpbmcgfSk/LnJvdXRlUGF0aCxcblx0XHRcdFx0XHRcdG9Db250ZXh0XG5cdFx0XHRcdFx0KSAhPT0gZmFsc2Vcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlXCIsIGNvbnRleHRNZW51U2VsZWN0aW9uKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCIsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25hdmlnYWJsZUNvbnRleHRzXCIsIG5hdmlnYWJsZUNvbnRleHRzKTtcblx0XHQvL3Jlc2V0IG51bWJlciBvZiBzZWxlY3RlZCBjb250ZXh0cyB0byBlbnN1cmUgY2FsbGJhY2sgZm9yIGN1c3RvbSBlbmFibGUgaGFuZGxlclxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCAtMSk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZOYXZpZ2FibGVDb250ZXh0c1wiLCBuYXZpZ2FibGVDb250ZXh0cy5sZW5ndGgpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCk7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzRm9yRGVsZXRlXCIsIGNvbnRleHRNZW51U2VsZWN0aW9uLmxlbmd0aCk7XG5cblx0XHRpZiAoYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvKiBBbGlnbiBjb250ZXh0IG1lbnUgd2l0aCBSVEEgY2hhbmdlcyBpbiB0YWJsZSB0b29sYmFyICovXG5cdFx0XHR0aGlzLmFsaWduQ29udGV4dE1lbnVXaXRoVGFibGVUb29sYmFyQ2hhbmdlcyh0YWJsZSk7XG5cdFx0fSBlbHNlIGlmIChvbmx5SW5BY3RpdmVDb250ZXh0c1NlbGVjdGVkICYmIGlzSW5saW5lQ3JlYXRpb25Nb2RlKSB7XG5cdFx0XHQvLyBPbmx5IERlbGV0ZSBpcyB2aXNpYmxlXG5cdFx0XHR0aGlzLmhpZGVBbGxDb250ZXh0TWVudUFjdGlvbnNFeGNlcHREZWxldGUodGFibGUpO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgTWVudUl0ZW0gZm9yIENvbGxhYm9yYXRpb24gTWFuYWdlclxuXHRcdHRoaXMuc2V0Q29sbGFib3JhdGlvbk1hbmFnZXJNZW51SXRlbVZpc2liaWxpdHkodGFibGUsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgbWVudSBjb250YWlucyBvbmx5IG5vdCB2aXNpYmxlIGl0ZW1zXG5cdFx0Ly8gaW4gdGhhdCBjYXNlIHByZXZlbnQgdGhlIGNvbnRleHQgbWVudSBmcm9tIG9wZW5pbmdcblx0XHRjb25zdCBjb250ZXh0TWVudSA9IHRhYmxlLmdldENvbnRleHRNZW51KCkgYXMgTWVudTtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBjb250ZXh0TWVudS5nZXRJdGVtcygpO1xuXG5cdFx0Y29uc3QgdmlzaWJsZU1lbnVJdGVtcyA9IG1lbnVJdGVtcy5maWx0ZXIoKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5nZXRWaXNpYmxlKCkpO1xuXHRcdGlmICh2aXNpYmxlTWVudUl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0b0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gRW5hYmxlbWVudCBvZiB0aGUgRXhwYW5kL0NvbGxhcHNlIGJ1dHRvbnNcblx0XHRjb25zdCBpc0V4cGFuZGFibGUgPSBjb250ZXh0TWVudVNlbGVjdGlvbi5zb21lKChzaW5nbGVDb250ZXh0KSA9PiBzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSAhPT0gdW5kZWZpbmVkKTtcblx0XHRjb25zdCBpc0NvbGxhcHNhYmxlID0gY29udGV4dE1lbnVTZWxlY3Rpb24uc29tZSgoc2luZ2xlQ29udGV4dCkgPT4gc2luZ2xlQ29udGV4dC5pc0V4cGFuZGVkKCkpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L2lzRXhwYW5kYWJsZVwiLCBpc0V4cGFuZGFibGUpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L2lzQ29sbGFwc2FibGVcIiwgaXNDb2xsYXBzYWJsZSk7XG5cblx0XHQvLyBBY3Rpb24gZW5hYmxlbWVudCBmb3IgRGVsZXRlXG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiY29udHJvbElkXCIsIHRhYmxlLmdldElkKCkpO1xuXHRcdGRlbGV0ZUhlbHBlci51cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhpbnRlcm5hbE1vZGVsQ29udGV4dCwgY29udGV4dE1lbnVTZWxlY3Rpb24sIHRydWUpO1xuXG5cdFx0Ly8gQWN0aW9uIGVuYWJsZW1lbnQgZm9yIElCTlxuXHRcdGlmICghdGFibGUuZGF0YShcImVuYWJsZUFuYWx5dGljc1wiKSkge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlPy5kYXRhKFwibmF2aWdhdGlvbkF2YWlsYWJsZU1hcFwiKTtcblx0XHRcdFRhYmxlUnVudGltZS5zZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50KGludGVybmFsTW9kZWxDb250ZXh0LCBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzLCB0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBBY3Rpb24gZW5hYmxlbWVudCBmb3IgTWFzcyBFZGl0XG5cdFx0Y29uc3QgZHJhZnQgPSB0YWJsZT8uZGF0YShcImRyYWZ0XCIpO1xuXHRcdGNvbnN0IHJlYWRPbmx5RHJhZnRFbmFibGVkID0gdGFibGUuZGF0YShcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIpID09PSBcInRydWVcIiAmJiBkcmFmdCAhPT0gXCJ1bmRlZmluZWRcIjtcblx0XHRjb25zdCB1cGRhdGFibGVDb250ZXh0czogQ29udGV4dFtdID0gW107XG5cdFx0Zm9yIChjb25zdCBzZWxlY3RlZENvbnRleHQgb2YgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRUYWJsZVJ1bnRpbWUuaXNVcGRhdGFibGVDb250ZXh0KHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aEluZm8sIHNlbGVjdGVkQ29udGV4dCwgcmVhZE9ubHlEcmFmdEVuYWJsZWQpXG5cdFx0XHQpIHtcblx0XHRcdFx0dXBkYXRhYmxlQ29udGV4dHMucHVzaChzZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS91cGRhdGFibGVDb250ZXh0c1wiLCB1cGRhdGFibGVDb250ZXh0cyk7XG5cblx0XHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCAmJiBjb250ZXh0TWVudVNlbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcblx0XHRcdFRhYmxlUnVudGltZS5fdXBkYXRlQ3JlYXRlRW5hYmxlbWVudChcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQsXG5cdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRjb250ZXh0TWVudVNlbGVjdGlvblswXSxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUsXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0VGFibGVSdW50aW1lLnVwZGF0ZUN1dENvcHlQYXN0ZUVuYWJsZW1lbnQoaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCksIHRhYmxlLCB0cnVlKTtcblx0XHRUYWJsZVJ1bnRpbWUudXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQoaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCksIHRhYmxlLCB0cnVlKTtcblxuXHRcdC8vIE90aGVyIGFjdGlvbiBlbmFibGVtZW50XG5cdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRKU09OLnBhcnNlKHRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0YWN0aXZlU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFwidGFibGVcIixcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0Z2V0UmVsZXZhbnRTZWxlY3Rpb24odGFibGVDb250ZXh0czogQ29udGV4dFtdLCBjb250ZXh0TWVudUNvbnRleHQ6IENvbnRleHQpOiBDb250ZXh0W10ge1xuXHRcdGxldCBjb250ZXh0TWVudVNlbGVjdGlvbjogQ29udGV4dFtdO1xuXHRcdGlmICh0YWJsZUNvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRNZW51Q29udGV4dCkpIHtcblx0XHRcdGNvbnRleHRNZW51U2VsZWN0aW9uID0gdGFibGVDb250ZXh0cztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dE1lbnVTZWxlY3Rpb24gPSBbY29udGV4dE1lbnVDb250ZXh0XSBhcyBDb250ZXh0W107XG5cdFx0fVxuXHRcdHJldHVybiBjb250ZXh0TWVudVNlbGVjdGlvbjtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O01Bc0JxQkEsa0JBQWtCO0lBQUEsU0FBQUEsbUJBQUE7TUFBQSxLQUM1QkMsaUJBQWlCLEdBQUcsS0FBSztJQUFBO0lBQUFDLFFBQUEsR0FBQUYsa0JBQUE7SUFBQSxJQUFBRyxNQUFBLEdBQUFI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
|
|
@@ -412,12 +412,13 @@ export default class ContextMenuHandler implements IInterfaceWithMixin {
|
|
|
412
412
|
}
|
|
413
413
|
|
|
414
414
|
// Action enablement for Mass Edit
|
|
415
|
-
const updatablePropertyPath = table?.data("updatablePropertyPath");
|
|
416
415
|
const draft = table?.data("draft");
|
|
417
416
|
const readOnlyDraftEnabled = table.data("displayModePropertyBinding") === "true" && draft !== "undefined";
|
|
418
417
|
const updatableContexts: Context[] = [];
|
|
419
418
|
for (const selectedContext of activeSelectedContexts) {
|
|
420
|
-
if (
|
|
419
|
+
if (
|
|
420
|
+
TableRuntime.isUpdatableContext(tableDefinition.annotation.updatablePropertyPathInfo, selectedContext, readOnlyDraftEnabled)
|
|
421
|
+
) {
|
|
421
422
|
updatableContexts.push(selectedContext);
|
|
422
423
|
}
|
|
423
424
|
}
|
|
@@ -100,6 +100,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
100
100
|
* @param enablement
|
|
101
101
|
*/;
|
|
102
102
|
_proto.setEmptyRowsEnabled = function setEmptyRowsEnabled(enablement) {
|
|
103
|
+
// INIT: ensure tableDefaultsPromise exists when enabling empty rows
|
|
104
|
+
if (enablement && !this.tableDefaultsPromise) {
|
|
105
|
+
this.tableDefaultsPromise = this.getTableDefaults(this.getContent());
|
|
106
|
+
}
|
|
103
107
|
this.setProperty("emptyRowsEnabled", enablement);
|
|
104
108
|
const navigationPath = this.getContent().data().navigationPath,
|
|
105
109
|
appComponent = CommonUtils.getAppComponent(this.getContent());
|
|
@@ -108,13 +112,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
108
112
|
const defaultValuesFunction = listBinding?.getResolvedPath() ? this.getDefaultValuesFunction(listBinding) : undefined;
|
|
109
113
|
if (defaultValuesFunction) {
|
|
110
114
|
appComponent.getSideEffectsService().registerTargetCallback(navigationPath, this.updateEmptyRows.bind(this));
|
|
115
|
+
// Immediate initial setup without defaults
|
|
116
|
+
if (!this.tableDefaultsPromise) {
|
|
117
|
+
this.setUpEmptyRows(this.getContent());
|
|
118
|
+
}
|
|
111
119
|
}
|
|
112
120
|
} else {
|
|
113
121
|
appComponent.getSideEffectsService().deregisterTargetCallback(navigationPath);
|
|
114
122
|
}
|
|
123
|
+
// Immediate initial setup only if no defaults promise exists (to avoid duplicate empty rows)
|
|
115
124
|
if (this.tableDefaultsPromise) {
|
|
116
125
|
this.tableDefaultsPromise.then(tableDefaultData => {
|
|
117
|
-
this.
|
|
126
|
+
this.updateEmptyRows();
|
|
118
127
|
return tableDefaultData;
|
|
119
128
|
}).catch(error => {
|
|
120
129
|
Log.error("Error while setting up empty rows:", error);
|
|
@@ -132,12 +141,22 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
132
141
|
const table = this.getContent();
|
|
133
142
|
const binding = table.getRowBinding();
|
|
134
143
|
const bindingHeaderContext = binding.getHeaderContext();
|
|
135
|
-
if (binding && binding.isResolved() && binding.isLengthFinal() && bindingHeaderContext) {
|
|
136
|
-
|
|
144
|
+
if (!(binding && binding.isResolved() && binding.isLengthFinal() && bindingHeaderContext)) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const contextPath = bindingHeaderContext.getPath();
|
|
148
|
+
|
|
149
|
+
// DO NOT show empty rows in display mode.
|
|
150
|
+
// If any inactive rows are present (from a previous state), remove them and exit.
|
|
151
|
+
if (!CommonUtils.getIsEditable(table)) {
|
|
152
|
+
this.removeEmptyRowsMessages();
|
|
137
153
|
this._deleteEmptyRows(binding, contextPath);
|
|
138
|
-
|
|
154
|
+
return;
|
|
139
155
|
}
|
|
140
|
-
|
|
156
|
+
this._deleteEmptyRows(binding, contextPath);
|
|
157
|
+
const defaults = await this.getTableDefaults(table);
|
|
158
|
+
// Update the empty rows with the latest default values
|
|
159
|
+
await this.createEmptyRows(binding, table, false, undefined, false, defaults);
|
|
141
160
|
}
|
|
142
161
|
|
|
143
162
|
/**
|
|
@@ -311,7 +330,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
311
330
|
let forceCreateatEnd = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
312
331
|
let defaultValueFunctionData = arguments.length > 5 ? arguments[5] : undefined;
|
|
313
332
|
const inlineCreationRowCount = newInlineCreationRowFromPaste ?? (this.getTableDefinition().control?.inlineCreationRowCount || 1);
|
|
314
|
-
|
|
333
|
+
/* ensures that at most one additional empty row can exist during LiveChange (when `recreateOneRow` is true).
|
|
334
|
+
In all other cases, the number of inactive contexts cannot exceed `inlineCreationRowCount`.*/
|
|
335
|
+
if (this.creatingEmptyRows || this.getInactiveContextNumber(binding) >= inlineCreationRowCount + (recreateOneRow ? 1 : 0)) {
|
|
315
336
|
return;
|
|
316
337
|
}
|
|
317
338
|
const data = Array.from({
|
|
@@ -327,9 +348,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
327
348
|
const dataForCreate = recreateOneRow ? [{}] : data;
|
|
328
349
|
const contexts = await editFlow.createMultipleDocuments(binding,
|
|
329
350
|
// during a live change, only 1 new document is created
|
|
330
|
-
dataForCreate,
|
|
331
|
-
|
|
332
|
-
|
|
351
|
+
dataForCreate, {
|
|
352
|
+
createAtEnd: recreateOneRow || forceCreateatEnd ? true : atEnd,
|
|
353
|
+
// When editing an empty row, the new empty row is to be created just below and not above
|
|
354
|
+
|
|
355
|
+
beforeCreateCallBack: controller.editFlow.onBeforeCreate,
|
|
356
|
+
createAsInactive: inactive,
|
|
357
|
+
hideBusyIndicator: inactive,
|
|
358
|
+
defaultValueFunctionData
|
|
359
|
+
});
|
|
333
360
|
contexts?.forEach(async function (context) {
|
|
334
361
|
try {
|
|
335
362
|
await context.created();
|
|
@@ -351,4 +378,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
351
378
|
_exports = EmptyRowsHandler;
|
|
352
379
|
return _exports;
|
|
353
380
|
}, false);
|
|
354
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFbXB0eVJvd3NIYW5kbGVyIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJzZXR1cE1peGluIiwiX2Jhc2VDbGFzcyIsIl9vbkZpZWxkTGl2ZUNoYW5nZSIsInVpNUV2ZW50IiwiZmllbGQiLCJnZXRTb3VyY2UiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0luYWN0aXZlIiwidGFibGUiLCJnZXRDb250ZW50IiwiY3JlYXRlRW1wdHlSb3dzIiwiX2hhbmRsZUNyZWF0ZUFjdGl2YXRlIiwiYWN0aXZhdGVFdmVudCIsImFjdGl2YXRlZENvbnRleHQiLCJnZXRQYXJhbWV0ZXIiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldFJvd0JpbmRpbmciLCJ2YWxpZGF0ZUVtcHR5Um93IiwicHJldmVudERlZmF1bHQiLCJ0cmFuc2llbnRQYXRoIiwiZ2V0UGF0aCIsInZpZXciLCJnZXRUYXJnZXRWaWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJlZGl0RmxvdyIsIlByb21pc2UiLCJhbGwiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJjcmVhdGVkIiwicmVzb2x2ZSIsIm9uQWZ0ZXJDcmVhdGUiLCJjb250ZXh0IiwiZSIsIkxvZyIsIndhcm5pbmciLCJjb250ZW50IiwiY29sbGFib3JhdGl2ZURyYWZ0Iiwic2VuZCIsImFjdGlvbiIsIkFjdGl2aXR5IiwiQ3JlYXRlIiwidXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aCIsImVycm9yIiwiZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwibGlzdEJpbmRpbmciLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImdldFJlc29sdmVkUGF0aCIsImxpc3RCaW5kaW5nT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzZXRFbXB0eVJvd3NFbmFibGVkIiwiZW5hYmxlbWVudCIsInNldFByb3BlcnR5IiwibmF2aWdhdGlvblBhdGgiLCJkYXRhIiwiZGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwidW5kZWZpbmVkIiwicmVnaXN0ZXJUYXJnZXRDYWxsYmFjayIsInVwZGF0ZUVtcHR5Um93cyIsImJpbmQiLCJkZXJlZ2lzdGVyVGFyZ2V0Q2FsbGJhY2siLCJ0YWJsZURlZmF1bHRzUHJvbWlzZSIsInRoZW4iLCJ0YWJsZURlZmF1bHREYXRhIiwic2V0VXBFbXB0eVJvd3MiLCJjYXRjaCIsImJpbmRpbmdIZWFkZXJDb250ZXh0IiwiZ2V0SGVhZGVyQ29udGV4dCIsImlzUmVzb2x2ZWQiLCJpc0xlbmd0aEZpbmFsIiwiY29udGV4dFBhdGgiLCJfZGVsZXRlRW1wdHlSb3dzIiwiX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIklubGluZUNyZWF0aW9uUm93cyIsInVpTW9kZWwiLCJnZXRQcm9wZXJ0eSIsIndhdGNoQmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImZuSGFuZGxlciIsImRldGFjaENoYW5nZSIsImRlc3Ryb3kiLCJhdHRhY2hDaGFuZ2UiLCJnZXRUYWJsZURlZmF1bHRzIiwiVHJhbnNhY3Rpb25IZWxwZXIiLCJnZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uIiwiY3JlYXRlQnV0dG9uV2FzUHJlc3NlZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImVtcHR5Um93c0VuYWJsZWQiLCJyZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyIsImdldElzRWRpdGFibGUiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwiaW5hY3RpdmVDb250ZXh0IiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJkZWxldGUiLCJnZXRJbmFjdGl2ZUNvbnRleHROdW1iZXIiLCJmaWx0ZXIiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJhbm5vdGF0aW9uIiwibWlzc2luZ1Byb3BlcnRpZXMiLCJyZXF1aXJlZFByb3BlcnR5IiwiZ2V0T2JqZWN0IiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJtZXNzYWdlcyIsImRpc3BsYXllZENvbHVtbiIsIm1pc3NpbmdQcm9wZXJ0eSIsImVycm9yTWVzc2FnZSIsIm1pc3NpbmdDb2x1bW4iLCJjb2x1bW5zIiwidGFibGVDb2x1bW4iLCJyZWxhdGl2ZVBhdGgiLCJwcm9wZXJ0eUluZm9zIiwiaW5jbHVkZXMiLCJnZXRUZXh0IiwiZ2V0Q29sdW1ucyIsIm1kY0NvbHVtbiIsImdldFByb3BlcnR5S2V5IiwibmFtZSIsImdldEhlYWRlciIsImxhYmVsIiwicHVzaCIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwicHJvY2Vzc29yIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJ0ZWNobmljYWwiLCJwZXJzaXN0ZW50IiwidGVjaG5pY2FsRGV0YWlscyIsInRhYmxlSWQiLCJnZXRJZCIsImVtcHR5Um93TWVzc2FnZSIsInRhcmdldCIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwiaW5hY3RpdmVDb250ZXh0cyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm1zZyIsImdldFRlY2huaWNhbERldGFpbHMiLCJjb250ZXh0TWF0Y2hlcyIsIkFycmF5IiwiaXNBcnJheSIsInNvbWUiLCJnZXRUYXJnZXRzIiwidmFsdWUiLCJyZWNyZWF0ZU9uZVJvdyIsIm5ld0lubGluZUNyZWF0aW9uUm93RnJvbVBhc3RlIiwiZm9yY2VDcmVhdGVhdEVuZCIsImRlZmF1bHRWYWx1ZUZ1bmN0aW9uRGF0YSIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJjcmVhdGluZ0VtcHR5Um93cyIsImZyb20iLCJhdEVuZCIsImluYWN0aXZlIiwiZGF0YUZvckNyZWF0ZSIsImNvbnRleHRzIiwiY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMiLCJvbkJlZm9yZUNyZWF0ZSIsImZvckVhY2giLCJjYW5jZWxlZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRW1wdHlSb3dzSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRWYWx1ZXNGdW5jdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IFRyYW5zYWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9UcmFuc2FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTURDQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRFcnJvclR5cGUgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtcHR5Um93c0hhbmRsZXIgaW1wbGVtZW50cyBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0Y3JlYXRpbmdFbXB0eVJvd3M/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRhYmxlJ3MgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgdGFibGVEZWZhdWx0c1Byb21pc2U/OiBQcm9taXNlPG9iamVjdD47XG5cblx0c2V0dXBNaXhpbihfYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBpbXBsZW1lbnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnRcblx0ICovXG5cdF9vbkZpZWxkTGl2ZUNoYW5nZSh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIHVpNUV2ZW50OiBVSTVFdmVudDx7fSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZCA9IHVpNUV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsXG5cdFx0XHRiaW5kaW5nID0gYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdC8vIGNyZWF0aW9uIG9mIGEgbmV3IGluYWN0aXZlIHJvdyBpZiByZWxldmFudFxuXHRcdGlmIChiaW5kaW5nQ29udGV4dC5pc0luYWN0aXZlKCkpIHtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcz8uZ2V0Q29udGVudCgpO1xuXHRcdFx0dGhpcz8uY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZywgdGFibGUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBDcmVhdGVBY3RpdmF0ZSBldmVudCBmcm9tIHRoZSBPRGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYWN0aXZhdGVFdmVudCBUaGUgZXZlbnQgc2VudCBieSB0aGUgYmluZGluZ1xuXHQgKi9cblx0YXN5bmMgX2hhbmRsZUNyZWF0ZUFjdGl2YXRlKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcixcblx0XHRhY3RpdmF0ZUV2ZW50OiBVSTVFdmVudDx7IGNvbnRleHQ6IENvbnRleHQgfSwgT0RhdGFMaXN0QmluZGluZz5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aXZhdGVkQ29udGV4dCA9IGFjdGl2YXRlRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGV4dFwiKTtcblx0XHQvLyB3ZSBzdGFydCBieSBhc2tpbmcgdG8gcmVjcmVhdGUgYW4gZW1wdHkgcm93IChpZiBsaXZlIGNoYW5nZSBoYXMgYWxyZWFkeSBkb25lIGl0IHRoaXMgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0KVxuXHRcdC8vIGJ1dCB3ZSBkbyBub3Qgd2FpdFxuXHRcdHRoaXMuY3JlYXRlRW1wdHlSb3dzKGFjdGl2YXRlRXZlbnQuZ2V0U291cmNlKCksIHRoaXMuZ2V0Q29udGVudCgpLCB0cnVlKTtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRpZiAoIXRoaXMudmFsaWRhdGVFbXB0eVJvdyhhY3RpdmF0ZWRDb250ZXh0KSkge1xuXHRcdFx0YWN0aXZhdGVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdHJhbnNpZW50UGF0aCA9IGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKSxcblx0XHRcdFx0Y29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHRlZGl0RmxvdyA9IGNvbnRyb2xsZXIuZWRpdEZsb3c7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkoYmluZGluZy5nZXRQYXRoKCksIHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSksXG5cdFx0XHRcdFx0YWN0aXZhdGVkQ29udGV4dC5jcmVhdGVkPy4oKSA/PyBQcm9taXNlLnJlc29sdmUoKVxuXHRcdFx0XHRdKTtcblx0XHRcdFx0YXdhaXQgZWRpdEZsb3cub25BZnRlckNyZWF0ZSh7IGNvbnRleHQ6IGFjdGl2YXRlZENvbnRleHQgfSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKGBGYWlsZWQgdG8gYWN0aXZhdGUgY29udGV4dCAke2FjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb250ZW50ID0gYWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aXZlRHJhZnQ7XG5cdFx0XHQvLyBTZW5kIG5vdGlmaWNhdGlvbiB0byBvdGhlciB1c2VycyBvbmx5IGFmdGVyIHRoZSBjcmVhdGlvbiBoYXMgYmVlbiBmaW5hbGl6ZWRcblx0XHRcdGNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5DcmVhdGUsIGNvbnRlbnQgfSk7XG5cdFx0XHQvLyBTaW5jZSB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCBoYXMgY2hhbmdlZCBkdXJpbmcgYWN0aXZhdGlvbiwgd2UgbmVlZCB0byB1cGRhdGUgYWxsIGNvbGxhYm9yYXRpb24gbG9ja3Ncblx0XHRcdC8vIHRoYXQgd2VyZSB1c2luZyB0aGUgdHJhbnNpZW50IHBhdGhcblx0XHRcdGNvbGxhYm9yYXRpdmVEcmFmdC51cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoKHRyYW5zaWVudFBhdGgsIGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRmFpbGVkIHRvIGFjdGl2YXRlIG5ldyByb3cgLVwiLCBlcnJvciBhcyBFcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZnJvbSB0aGUgRGVmYXVsdFZhbHVlcyBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFRoZSBjdXJyZW50IGxpc3QgYmluZGluZ1xuXHQgKiBAcmV0dXJucyBUaGUgRGVmYXVsdFZhbHVlcyBmdW5jdGlvbiAob3IgdW5kZWZpbmVkIGlmIG5vIGZ1bmN0aW9uIGlzIGZvdW5kKVxuXHQgKi9cblx0Z2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogRGVmYXVsdFZhbHVlc0Z1bmN0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobGlzdEJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHRjb25zdCBsaXN0QmluZGluZ09iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmNPblRhcmdldE9iamVjdCA9IChsaXN0QmluZGluZ09iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSB8IEVudGl0eVNldCkuYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHQ/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblx0XHRjb25zdCBkZWZhdWx0RnVuY09uVGFyZ2V0RW50aXR5U2V0ID0gKGxpc3RCaW5kaW5nT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHQ/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblxuXHRcdHJldHVybiBkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0ID8/IGRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQ7XG5cdH1cblxuXHQvKipcblx0ICogRW1wdHlSb3dzRW5hYmxlZCBzZXR0ZXIuXG5cdCAqIEBwYXJhbSBlbmFibGVtZW50XG5cdCAqL1xuXHRzZXRFbXB0eVJvd3NFbmFibGVkKHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlciwgZW5hYmxlbWVudDogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJlbXB0eVJvd3NFbmFibGVkXCIsIGVuYWJsZW1lbnQpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gdGhpcy5nZXRDb250ZW50KCkuZGF0YSgpLm5hdmlnYXRpb25QYXRoLFxuXHRcdFx0YXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRpZiAoZW5hYmxlbWVudCkge1xuXHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB0aGlzLmdldENvbnRlbnQoKS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzRnVuY3Rpb24gPSBsaXN0QmluZGluZz8uZ2V0UmVzb2x2ZWRQYXRoKCkgPyB0aGlzLmdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbihsaXN0QmluZGluZykgOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoZGVmYXVsdFZhbHVlc0Z1bmN0aW9uKSB7XG5cdFx0XHRcdGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5yZWdpc3RlclRhcmdldENhbGxiYWNrKG5hdmlnYXRpb25QYXRoLCB0aGlzLnVwZGF0ZUVtcHR5Um93cy5iaW5kKHRoaXMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLmRlcmVnaXN0ZXJUYXJnZXRDYWxsYmFjayhuYXZpZ2F0aW9uUGF0aCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudGFibGVEZWZhdWx0c1Byb21pc2UpIHtcblx0XHRcdHRoaXMudGFibGVEZWZhdWx0c1Byb21pc2Vcblx0XHRcdFx0LnRoZW4oKHRhYmxlRGVmYXVsdERhdGEpID0+IHtcblx0XHRcdFx0XHR0aGlzLnNldFVwRW1wdHlSb3dzKHRoaXMuZ2V0Q29udGVudCgpLCBmYWxzZSwgdGFibGVEZWZhdWx0RGF0YSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRhYmxlRGVmYXVsdERhdGE7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHVwIGVtcHR5IHJvd3M6XCIsIGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0VXBFbXB0eVJvd3ModGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYW5kIHJlY3JlYXRlIHRoZSBlbXB0eSByb3dzIGluIG9yZGVyIHRvIGdldCBhbnkgdXBkYXRlZCBkZWZhdWx0IHZhbHVlcy5cblx0ICpcblx0ICovXG5cdGFzeW5jIHVwZGF0ZUVtcHR5Um93cyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGJpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0Y29uc3QgYmluZGluZ0hlYWRlckNvbnRleHQgPSBiaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRpZiAoYmluZGluZyAmJiBiaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBiaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiBiaW5kaW5nSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBiaW5kaW5nSGVhZGVyQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHR0aGlzLl9kZWxldGVFbXB0eVJvd3MoYmluZGluZywgY29udGV4dFBhdGgpO1xuXHRcdFx0YXdhaXQgdGhpcy5jcmVhdGVFbXB0eVJvd3MoYmluZGluZywgdGFibGUpO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gY29tbW9uIGNoZWNrcyBmb3IgdGFibGUgZGVmYXVsdHMgYW5kIGVtcHR5IHJvd3Mgc2V0dXAuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgYmVpbmcgcHJvY2Vzc2VkXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIG9iamVjdCBpZiBjaGVja3MgcGFzcywgb3IgdW5kZWZpbmVkIGlmIGNoZWNrcyBmYWlsXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIF92YWxpZGF0ZUFuZFJldHJpZXZlQmluZGluZyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsXG5cdFx0dGFibGU6IE1EQ1RhYmxlXG5cdCk6IFByb21pc2U8T0RhdGFMaXN0QmluZGluZyB8IHVuZGVmaW5lZD4ge1xuXHRcdGlmICh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2w/LmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cykge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCB1aU1vZGVsID0gdGFibGUuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKCF1aU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICh1aU1vZGVsLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVQZW5kaW5nXCIpKSB7XG5cdFx0XHQvLyBXYWl0IHVudGlsIHRoZSBlZGl0IG1vZGUgY29tcHV0YXRpb24gaXMgY29tcGxldGVcblx0XHRcdGNvbnN0IHdhdGNoQmluZGluZyA9IHVpTW9kZWwuYmluZFByb3BlcnR5KFwiL2lzRWRpdGFibGVQZW5kaW5nXCIpO1xuXHRcdFx0YXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHdhdGNoQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVyKTtcblx0XHRcdFx0XHR3YXRjaEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0d2F0Y2hCaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFiaW5kaW5nKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gYmluZGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0YWJsZSBkZWZhdWx0cyBieSB2YWxpZGF0aW5nIGFuZCByZXRyaWV2aW5nIHRoZSBiaW5kaW5nLCB0aGVuIGZldGNoaW5nIGRhdGEgZnJvbSB0aGUgRGVmYXVsdFZhbHVlRnVuY3Rpb24uXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgYmVpbmcgcHJvY2Vzc2VkXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkZWZhdWx0IHZhbHVlcywgb3IgdW5kZWZpbmVkIGlmIG5vIGJpbmRpbmcgaXMgYXZhaWxhYmxlIG9yIHRoZSBEZWZhdWx0VmFsdWVGdW5jdGlvbiByZXR1cm5zIG5vIGRhdGFcblx0ICovXG5cdGFzeW5jIGdldFRhYmxlRGVmYXVsdHModGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLCB0YWJsZTogTURDVGFibGUpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmcgPSBhd2FpdCB0aGlzLl92YWxpZGF0ZUFuZFJldHJpZXZlQmluZGluZyh0YWJsZSk7XG5cdFx0aWYgKCFiaW5kaW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKTtcblx0XHRyZXR1cm4gYXBwQ29tcG9uZW50ID8gVHJhbnNhY3Rpb25IZWxwZXIuZ2V0RGF0YUZyb21EZWZhdWx0VmFsdWVGdW5jdGlvbihiaW5kaW5nLCBhcHBDb21wb25lbnQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgc2V0VXBFbXB0eVJvd3MoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLFxuXHRcdHRhYmxlOiBNRENUYWJsZSxcblx0XHRjcmVhdGVCdXR0b25XYXNQcmVzc2VkID0gZmFsc2UsXG5cdFx0dGFibGVEZWZhdWx0RGF0YSA9IHt9XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmcgPSBhd2FpdCB0aGlzLl92YWxpZGF0ZUFuZFJldHJpZXZlQmluZGluZyh0YWJsZSk7XG5cdFx0aWYgKCFiaW5kaW5nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGJpbmRpbmdIZWFkZXJDb250ZXh0ID0gYmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0aWYgKGJpbmRpbmcgJiYgYmluZGluZy5pc1Jlc29sdmVkKCkgJiYgYmluZGluZy5pc0xlbmd0aEZpbmFsKCkgJiYgYmluZGluZ0hlYWRlckNvbnRleHQpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYmluZGluZ0hlYWRlckNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0aWYgKCF0aGlzLmVtcHR5Um93c0VuYWJsZWQpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVFbXB0eVJvd3NNZXNzYWdlcygpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZGVsZXRlRW1wdHlSb3dzKGJpbmRpbmcsIGNvbnRleHRQYXRoKTtcblx0XHRcdH1cblx0XHRcdGlmICghQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0YWJsZSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2w/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgJiZcblx0XHRcdFx0IXRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwicGFnZUludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcImNyZWF0ZU1vZGVcIikgJiZcblx0XHRcdFx0IWNyZWF0ZUJ1dHRvbldhc1ByZXNzZWRcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmFjdGl2ZUNvbnRleHQgPSBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpLmZpbmQoZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0XHRcdFx0Ly8gd2hlbiB0aGlzIGlzIGNhbGxlZCBmcm9tIGNvbnRyb2xsZXIgY29kZSB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgaW5hY3RpdmUgY29udGV4dHMgYXJlIHN0aWxsIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRhYmxlIGNvbnRleHRcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuaXNJbmFjdGl2ZSgpICYmIGNvbnRleHQuZ2V0UGF0aCgpLnN0YXJ0c1dpdGgoY29udGV4dFBhdGgpO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIWluYWN0aXZlQ29udGV4dCkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKCk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcsIHRhYmxlLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgdGFibGVEZWZhdWx0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgaW5hY3RpdmUgcm93cyBmcm9tIHRoZSB0YWJsZSBsaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGJpbmRpbmdcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoXG5cdCAqL1xuXHRfZGVsZXRlRW1wdHlSb3dzKGJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbnRleHQgb2YgYmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaXNJbmFjdGl2ZSgpICYmIGNvbnRleHQuZ2V0UGF0aCgpLnN0YXJ0c1dpdGgoY29udGV4dFBhdGgpKSB7XG5cdFx0XHRcdGNvbnRleHQuZGVsZXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGluYWN0aXZlIGNvbnRleHRzIHdpdGhpbiB0aGUgbGlzdCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gYmluZGluZyBEYXRhIGxpc3QgYmluZGluZ1xuXHQgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGluYWN0aXZlIGNvbnRleHRzXG5cdCAqL1xuXHRnZXRJbmFjdGl2ZUNvbnRleHROdW1iZXIoYmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IG51bWJlciB7XG5cdFx0cmV0dXJuIGJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmlsdGVyKChjb250ZXh0KSA9PiBjb250ZXh0LmlzSW5hY3RpdmUoKSkubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGVtcHR5IHJvdy5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGVtcHR5IHJvd1xuXHQgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiBzdGF0dXNcblx0ICovXG5cdHZhbGlkYXRlRW1wdHlSb3codGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLCBjb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnJlcXVpcmVkUHJvcGVydGllcztcblx0XHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdHRoaXMucmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXMoY29udGV4dCk7XG5cdFx0XHRjb25zdCBtaXNzaW5nUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydGllcy5maWx0ZXIoKHJlcXVpcmVkUHJvcGVydHkpID0+ICFjb250ZXh0LmdldE9iamVjdChyZXF1aXJlZFByb3BlcnR5KSk7XG5cdFx0XHRpZiAobWlzc2luZ1Byb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikhO1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdFx0XHRcdGxldCBkaXNwbGF5ZWRDb2x1bW46IE1EQ0NvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Zm9yIChjb25zdCBtaXNzaW5nUHJvcGVydHkgb2YgbWlzc2luZ1Byb3BlcnRpZXMpIHtcblx0XHRcdFx0XHRsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cdFx0XHRcdFx0Y29uc3QgbWlzc2luZ0NvbHVtbiA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucy5maW5kKFxuXHRcdFx0XHRcdFx0KHRhYmxlQ29sdW1uKSA9PlxuXHRcdFx0XHRcdFx0XHQodGFibGVDb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5yZWxhdGl2ZVBhdGggPT09IG1pc3NpbmdQcm9wZXJ0eSB8fFxuXHRcdFx0XHRcdFx0XHQodGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyAmJiB0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zLmluY2x1ZGVzKG1pc3NpbmdQcm9wZXJ0eSkpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGlmICghbWlzc2luZ0NvbHVtbikge1xuXHRcdFx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVEFCTEVfRU1QVFlST1dfTUFOREFUT1JZXCIsIFttaXNzaW5nUHJvcGVydHldKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGlzcGxheWVkQ29sdW1uID0gdGhpcy5nZXRDb250ZW50KClcblx0XHRcdFx0XHRcdFx0LmdldENvbHVtbnMoKVxuXHRcdFx0XHRcdFx0XHQuZmluZCgobWRjQ29sdW1uKSA9PiBtZGNDb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSA9PT0gbWlzc2luZ0NvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHRcdGVycm9yTWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXllZENvbHVtbiA/IFwiTV9UQUJMRV9FTVBUWVJPV19NQU5EQVRPUllcIiA6IFwiTV9UQUJMRV9FTVBUWVJPV19NQU5EQVRPUllfSElEREVOXCIsXG5cdFx0XHRcdFx0XHRcdFtkaXNwbGF5ZWRDb2x1bW4/LmdldEhlYWRlcigpIHx8IG1pc3NpbmdDb2x1bW4ubGFiZWxdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1lc3NhZ2VzLnB1c2goXG5cdFx0XHRcdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0cHJvY2Vzc29yOiB0aGlzLmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0XHRcdFx0XHR0ZWNobmljYWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR0ZWNobmljYWxEZXRhaWxzOiB7XG5cdFx0XHRcdFx0XHRcdFx0dGFibGVJZDogdGhpcy5nZXRDb250ZW50KCkuZ2V0SWQoKSwgLy8gTmVlZCB0byBkbyBpdCBzaW5jZSBoYW5kbGVDcmVhdGVBY3RpdmF0ZSBjYW4gYmUgdHJpZ2dlcmVkIG11bHRpcGxlIHRpbWVzIChleHRyYSBwcm9wZXJ0aWVzIHNldCBieSB2YWx1ZSBoZWxwKSBiZWZvcmUgY29udHJvbElkcyBhcmUgc2V0IG9uIHRoZSBtZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0ZW1wdHlSb3dNZXNzYWdlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdG1pc3NpbmdDb2x1bW46IGRpc3BsYXllZENvbHVtbiA/IHVuZGVmaW5lZCA6IG1pc3NpbmdQcm9wZXJ0eSAvLyBuZWVkZWQgdG8gY2hhbmdlIHRoZSBtZXNzYWdlU3RyaXAgbWVzc2FnZVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IGAke2NvbnRleHQ/LmdldFBhdGgoKX0vJHttaXNzaW5nUHJvcGVydHl9YFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhtZXNzYWdlcyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgZW1wdHkgcm93cy5cblx0ICogQHBhcmFtIGluYWN0aXZlQ29udGV4dHMgVGhlIGNvbnRleHRzIG9mIHRoZSBlbXB0eSByb3dzLCBpZiBub3QgcHJvdmlkZWQsIHRoZSBtZXNzYWdlcyBvZiBhbGwgZW1wdHkgcm93cyBhcmUgcmVtb3ZlZFxuXHQgKi9cblx0cmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXModGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLCBpbmFjdGl2ZUNvbnRleHRzPzogQ29udGV4dCB8IENvbnRleHRbXSk6IHZvaWQge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhcblx0XHRcdChNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpIGFzIE1lc3NhZ2VbXSkuZmlsdGVyKChtc2cpID0+IHtcblx0XHRcdFx0Y29uc3QgdGVjaG5pY2FsRGV0YWlscyA9IChtc2cuZ2V0VGVjaG5pY2FsRGV0YWlscygpIHx8IHt9KSBhcyB7IHRhYmxlSWQ/OiBzdHJpbmc7IGVtcHR5Um93TWVzc2FnZT86IGJvb2xlYW4gfTtcblxuXHRcdFx0XHQvLyBDaGVjayBpZiBtc2cgdGFyZ2V0IHN0YXJ0cyB3aXRoIGFueSBwYXRoIGluIHRoZSBpbmFjdGl2ZUNvbnRleHQgYXJyYXlcblx0XHRcdFx0Y29uc3QgY29udGV4dE1hdGNoZXMgPSBBcnJheS5pc0FycmF5KGluYWN0aXZlQ29udGV4dHMpXG5cdFx0XHRcdFx0PyBpbmFjdGl2ZUNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IG1zZy5nZXRUYXJnZXRzKCkuc29tZSgodmFsdWUpID0+IHZhbHVlLnN0YXJ0c1dpdGgoY29udGV4dC5nZXRQYXRoKCkpKSlcblx0XHRcdFx0XHQ6ICFpbmFjdGl2ZUNvbnRleHRzIHx8IG1zZy5nZXRUYXJnZXRzKCkuc29tZSgodmFsdWUpID0+IHZhbHVlLnN0YXJ0c1dpdGgoaW5hY3RpdmVDb250ZXh0cy5nZXRQYXRoKCkpKTtcblxuXHRcdFx0XHRyZXR1cm4gY29udGV4dE1hdGNoZXMgJiYgdGVjaG5pY2FsRGV0YWlscy5lbXB0eVJvd01lc3NhZ2UgJiYgdGVjaG5pY2FsRGV0YWlscy50YWJsZUlkID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRJZCgpO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0aW9uIG9mIGluYWN0aXZlIHJvd3MgZm9yIHRoZSB0YWJsZSBpbiBjcmVhdGlvbiBtb2RlIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIERhdGEgbGlzdCBiaW5kaW5nXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgYmVpbmcgZWRpdGVkXG5cdCAqIEBwYXJhbSByZWNyZWF0ZU9uZVJvdyBgdHJ1ZWAgaWYgdGhlIGNhbGwgaXMgdG8gcmVjcmVhdGUgYW4gZW1wdHlMaW5lXG5cdCAqIEBwYXJhbSBuZXdJbmxpbmVDcmVhdGlvblJvd0Zyb21QYXN0ZSBOdW1iZXIgb2YgbmV3IGluYWN0aXZlIHJvd3MgdG8gYmUgY3JlYXRlZFxuXHQgKiBAcGFyYW0gZm9yY2VDcmVhdGVhdEVuZCBgdHJ1ZWAgaWYgdGhlIG5ldyByb3cgaXMgdG8gYmUgY3JlYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSB0YWJsZVxuXHQgKiBAcGFyYW0gZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhIERlZmF1bHQgdmFsdWVzIHJldHJpZXZlZCBmcm9tIHRoZSBEZWZhdWx0VmFsdWVzRnVuY3Rpb24gdG8gYmUgYXBwbGllZCB0byB0aGUgbmV3IHJvd3Ncblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNyZWF0ZWQgY29udGV4dHMgb3Igdm9pZCBpZiB0aGUgY3JlYXRpb24gZmFpbGVkXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVFbXB0eVJvd3MoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLFxuXHRcdGJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdHJlY3JlYXRlT25lUm93ID0gZmFsc2UsXG5cdFx0bmV3SW5saW5lQ3JlYXRpb25Sb3dGcm9tUGFzdGU/OiBudW1iZXIsXG5cdFx0Zm9yY2VDcmVhdGVhdEVuZCA9IGZhbHNlLFxuXHRcdGRlZmF1bHRWYWx1ZUZ1bmN0aW9uRGF0YT86IG9iamVjdCB8IHVuZGVmaW5lZFxuXHQpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0W10+IHtcblx0XHRjb25zdCBpbmxpbmVDcmVhdGlvblJvd0NvdW50ID0gbmV3SW5saW5lQ3JlYXRpb25Sb3dGcm9tUGFzdGUgPz8gKHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbD8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCB8fCAxKTtcblx0XHRpZiAodGhpcy5jcmVhdGluZ0VtcHR5Um93cyB8fCB0aGlzLmdldEluYWN0aXZlQ29udGV4dE51bWJlcihiaW5kaW5nKSA+IGlubGluZUNyZWF0aW9uUm93Q291bnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZGF0YSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGlubGluZUNyZWF0aW9uUm93Q291bnQgfSwgKCkgPT4gKHt9KSksXG5cdFx0XHRhdEVuZCA9IHRhYmxlLmRhdGEoXCJ0YWJsZVR5cGVcIikgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIsXG5cdFx0XHRpbmFjdGl2ZSA9IHRydWUsXG5cdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCksXG5cdFx0XHRlZGl0RmxvdyA9IGNvbnRyb2xsZXIuZWRpdEZsb3c7XG5cblx0XHR0aGlzLmNyZWF0aW5nRW1wdHlSb3dzID0gdHJ1ZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGF0YUZvckNyZWF0ZSA9IHJlY3JlYXRlT25lUm93ID8gW3t9XSA6IGRhdGE7XG5cdFx0XHRjb25zdCBjb250ZXh0cyA9IGF3YWl0IGVkaXRGbG93LmNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdFx0XHRiaW5kaW5nLFxuXHRcdFx0XHQvLyBkdXJpbmcgYSBsaXZlIGNoYW5nZSwgb25seSAxIG5ldyBkb2N1bWVudCBpcyBjcmVhdGVkXG5cdFx0XHRcdGRhdGFGb3JDcmVhdGUsXG5cdFx0XHRcdC8vIFdoZW4gZWRpdGluZyBhbiBlbXB0eSByb3csIHRoZSBuZXcgZW1wdHkgcm93IGlzIHRvIGJlIGNyZWF0ZWQganVzdCBiZWxvdyBhbmQgbm90IGFib3ZlXG5cdFx0XHRcdHJlY3JlYXRlT25lUm93IHx8IGZvcmNlQ3JlYXRlYXRFbmQgPyB0cnVlIDogYXRFbmQsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lm9uQmVmb3JlQ3JlYXRlLFxuXHRcdFx0XHRpbmFjdGl2ZSxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGFcblx0XHRcdCk7XG5cdFx0XHRjb250ZXh0cz8uZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY29udGV4dDogQ29udGV4dCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGF3YWl0IGNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdGlmICghKGVycm9yIGFzIENvbnRleHRFcnJvclR5cGUpLmNhbmNlbGVkKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGNvbnRleHRzO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuY3JlYXRpbmdFbXB0eVJvd3MgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7TUF3QnFCQSxnQkFBZ0I7SUFBQSxTQUFBQSxpQkFBQTtJQUFBQyxRQUFBLEdBQUFELGdCQUFBO0lBQUEsSUFBQUUsTUFBQSxHQUFBRixnQkFBQSxDQUFBRyxTQUFBO0lBR3BDO0FBQ0Q7QUFDQTtJQUZDRCxNQUFBLENBS0FFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBSCxNQUFBLENBSUFJLGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQXVDQyxRQUErQixFQUFRO01BQy9GLE1BQU1DLEtBQUssR0FBR0QsUUFBUSxDQUFDRSxTQUFTLENBQUMsQ0FBQztRQUNqQ0MsY0FBYyxHQUFHRixLQUFLLENBQUNHLGlCQUFpQixDQUFDLENBQVk7UUFDckRDLE9BQU8sR0FBR0YsY0FBYyxDQUFDRyxVQUFVLENBQUMsQ0FBQztNQUN0QztNQUNBLElBQUlILGNBQWMsQ0FBQ0ksVUFBVSxDQUFDLENBQUMsRUFBRTtRQUNoQyxNQUFNQyxLQUFLLEdBQUcsSUFBSSxFQUFFQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxJQUFJLEVBQUVDLGVBQWUsQ0FBQ0wsT0FBTyxFQUFzQkcsS0FBSyxFQUFFLElBQUksQ0FBQztNQUNoRTtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFB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
|
|
381
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFbXB0eVJvd3NIYW5kbGVyIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJzZXR1cE1peGluIiwiX2Jhc2VDbGFzcyIsIl9vbkZpZWxkTGl2ZUNoYW5nZSIsInVpNUV2ZW50IiwiZmllbGQiLCJnZXRTb3VyY2UiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0luYWN0aXZlIiwidGFibGUiLCJnZXRDb250ZW50IiwiY3JlYXRlRW1wdHlSb3dzIiwiX2hhbmRsZUNyZWF0ZUFjdGl2YXRlIiwiYWN0aXZhdGVFdmVudCIsImFjdGl2YXRlZENvbnRleHQiLCJnZXRQYXJhbWV0ZXIiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldFJvd0JpbmRpbmciLCJ2YWxpZGF0ZUVtcHR5Um93IiwicHJldmVudERlZmF1bHQiLCJ0cmFuc2llbnRQYXRoIiwiZ2V0UGF0aCIsInZpZXciLCJnZXRUYXJnZXRWaWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJlZGl0RmxvdyIsIlByb21pc2UiLCJhbGwiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJjcmVhdGVkIiwicmVzb2x2ZSIsIm9uQWZ0ZXJDcmVhdGUiLCJjb250ZXh0IiwiZSIsIkxvZyIsIndhcm5pbmciLCJjb250ZW50IiwiY29sbGFib3JhdGl2ZURyYWZ0Iiwic2VuZCIsImFjdGlvbiIsIkFjdGl2aXR5IiwiQ3JlYXRlIiwidXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aCIsImVycm9yIiwiZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwibGlzdEJpbmRpbmciLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImdldFJlc29sdmVkUGF0aCIsImxpc3RCaW5kaW5nT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzZXRFbXB0eVJvd3NFbmFibGVkIiwiZW5hYmxlbWVudCIsInRhYmxlRGVmYXVsdHNQcm9taXNlIiwiZ2V0VGFibGVEZWZhdWx0cyIsInNldFByb3BlcnR5IiwibmF2aWdhdGlvblBhdGgiLCJkYXRhIiwiZGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwidW5kZWZpbmVkIiwicmVnaXN0ZXJUYXJnZXRDYWxsYmFjayIsInVwZGF0ZUVtcHR5Um93cyIsImJpbmQiLCJzZXRVcEVtcHR5Um93cyIsImRlcmVnaXN0ZXJUYXJnZXRDYWxsYmFjayIsInRoZW4iLCJ0YWJsZURlZmF1bHREYXRhIiwiY2F0Y2giLCJiaW5kaW5nSGVhZGVyQ29udGV4dCIsImdldEhlYWRlckNvbnRleHQiLCJpc1Jlc29sdmVkIiwiaXNMZW5ndGhGaW5hbCIsImNvbnRleHRQYXRoIiwiZ2V0SXNFZGl0YWJsZSIsInJlbW92ZUVtcHR5Um93c01lc3NhZ2VzIiwiX2RlbGV0ZUVtcHR5Um93cyIsImRlZmF1bHRzIiwiX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIklubGluZUNyZWF0aW9uUm93cyIsInVpTW9kZWwiLCJnZXRQcm9wZXJ0eSIsIndhdGNoQmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImZuSGFuZGxlciIsImRldGFjaENoYW5nZSIsImRlc3Ryb3kiLCJhdHRhY2hDaGFuZ2UiLCJUcmFuc2FjdGlvbkhlbHBlciIsImdldERhdGFGcm9tRGVmYXVsdFZhbHVlRnVuY3Rpb24iLCJjcmVhdGVCdXR0b25XYXNQcmVzc2VkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZW1wdHlSb3dzRW5hYmxlZCIsImlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUiLCJpbmFjdGl2ZUNvbnRleHQiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJmaW5kIiwic3RhcnRzV2l0aCIsImRlbGV0ZSIsImdldEluYWN0aXZlQ29udGV4dE51bWJlciIsImZpbHRlciIsInJlcXVpcmVkUHJvcGVydGllcyIsImFubm90YXRpb24iLCJtaXNzaW5nUHJvcGVydGllcyIsInJlcXVpcmVkUHJvcGVydHkiLCJnZXRPYmplY3QiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIm1lc3NhZ2VzIiwiZGlzcGxheWVkQ29sdW1uIiwibWlzc2luZ1Byb3BlcnR5IiwiZXJyb3JNZXNzYWdlIiwibWlzc2luZ0NvbHVtbiIsImNvbHVtbnMiLCJ0YWJsZUNvbHVtbiIsInJlbGF0aXZlUGF0aCIsInByb3BlcnR5SW5mb3MiLCJpbmNsdWRlcyIsImdldFRleHQiLCJnZXRDb2x1bW5zIiwibWRjQ29sdW1uIiwiZ2V0UHJvcGVydHlLZXkiLCJuYW1lIiwiZ2V0SGVhZGVyIiwibGFiZWwiLCJwdXNoIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJwcm9jZXNzb3IiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInRlY2huaWNhbCIsInBlcnNpc3RlbnQiLCJ0ZWNobmljYWxEZXRhaWxzIiwidGFibGVJZCIsImdldElkIiwiZW1wdHlSb3dNZXNzYWdlIiwidGFyZ2V0IiwiTWVzc2FnaW5nIiwiYWRkTWVzc2FnZXMiLCJpbmFjdGl2ZUNvbnRleHRzIiwicmVtb3ZlTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwibXNnIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImNvbnRleHRNYXRjaGVzIiwiQXJyYXkiLCJpc0FycmF5Iiwic29tZSIsImdldFRhcmdldHMiLCJ2YWx1ZSIsInJlY3JlYXRlT25lUm93IiwibmV3SW5saW5lQ3JlYXRpb25Sb3dGcm9tUGFzdGUiLCJmb3JjZUNyZWF0ZWF0RW5kIiwiZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhIiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImNyZWF0aW5nRW1wdHlSb3dzIiwiZnJvbSIsImF0RW5kIiwiaW5hY3RpdmUiLCJkYXRhRm9yQ3JlYXRlIiwiY29udGV4dHMiLCJjcmVhdGVNdWx0aXBsZURvY3VtZW50cyIsImNyZWF0ZUF0RW5kIiwiYmVmb3JlQ3JlYXRlQ2FsbEJhY2siLCJvbkJlZm9yZUNyZWF0ZSIsImNyZWF0ZUFzSW5hY3RpdmUiLCJoaWRlQnVzeUluZGljYXRvciIsImZvckVhY2giLCJjYW5jZWxlZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRW1wdHlSb3dzSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRWYWx1ZXNGdW5jdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IFRyYW5zYWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9UcmFuc2FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTURDQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRFcnJvclR5cGUgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtcHR5Um93c0hhbmRsZXIgaW1wbGVtZW50cyBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0Y3JlYXRpbmdFbXB0eVJvd3M/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRhYmxlJ3MgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgdGFibGVEZWZhdWx0c1Byb21pc2U/OiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD47XG5cblx0c2V0dXBNaXhpbihfYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBpbXBsZW1lbnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnRcblx0ICovXG5cdF9vbkZpZWxkTGl2ZUNoYW5nZSh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIHVpNUV2ZW50OiBVSTVFdmVudDx7fSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZCA9IHVpNUV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsXG5cdFx0XHRiaW5kaW5nID0gYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdC8vIGNyZWF0aW9uIG9mIGEgbmV3IGluYWN0aXZlIHJvdyBpZiByZWxldmFudFxuXHRcdGlmIChiaW5kaW5nQ29udGV4dC5pc0luYWN0aXZlKCkpIHtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcz8uZ2V0Q29udGVudCgpO1xuXHRcdFx0dGhpcz8uY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZywgdGFibGUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBDcmVhdGVBY3RpdmF0ZSBldmVudCBmcm9tIHRoZSBPRGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYWN0aXZhdGVFdmVudCBUaGUgZXZlbnQgc2VudCBieSB0aGUgYmluZGluZ1xuXHQgKi9cblx0YXN5bmMgX2hhbmRsZUNyZWF0ZUFjdGl2YXRlKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcixcblx0XHRhY3RpdmF0ZUV2ZW50OiBVSTVFdmVudDx7IGNvbnRleHQ6IENvbnRleHQgfSwgT0RhdGFMaXN0QmluZGluZz5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aXZhdGVkQ29udGV4dCA9IGFjdGl2YXRlRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGV4dFwiKTtcblx0XHQvLyB3ZSBzdGFydCBieSBhc2tpbmcgdG8gcmVjcmVhdGUgYW4gZW1wdHkgcm93IChpZiBsaXZlIGNoYW5nZSBoYXMgYWxyZWFkeSBkb25lIGl0IHRoaXMgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0KVxuXHRcdC8vIGJ1dCB3ZSBkbyBub3Qgd2FpdFxuXHRcdHRoaXMuY3JlYXRlRW1wdHlSb3dzKGFjdGl2YXRlRXZlbnQuZ2V0U291cmNlKCksIHRoaXMuZ2V0Q29udGVudCgpLCB0cnVlKTtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRpZiAoIXRoaXMudmFsaWRhdGVFbXB0eVJvdyhhY3RpdmF0ZWRDb250ZXh0KSkge1xuXHRcdFx0YWN0aXZhdGVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdHJhbnNpZW50UGF0aCA9IGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKSxcblx0XHRcdFx0Y29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHRlZGl0RmxvdyA9IGNvbnRyb2xsZXIuZWRpdEZsb3c7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkoYmluZGluZy5nZXRQYXRoKCksIHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSksXG5cdFx0XHRcdFx0YWN0aXZhdGVkQ29udGV4dC5jcmVhdGVkPy4oKSA/PyBQcm9taXNlLnJlc29sdmUoKVxuXHRcdFx0XHRdKTtcblx0XHRcdFx0YXdhaXQgZWRpdEZsb3cub25BZnRlckNyZWF0ZSh7IGNvbnRleHQ6IGFjdGl2YXRlZENvbnRleHQgfSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKGBGYWlsZWQgdG8gYWN0aXZhdGUgY29udGV4dCAke2FjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb250ZW50ID0gYWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aXZlRHJhZnQ7XG5cdFx0XHQvLyBTZW5kIG5vdGlmaWNhdGlvbiB0byBvdGhlciB1c2VycyBvbmx5IGFmdGVyIHRoZSBjcmVhdGlvbiBoYXMgYmVlbiBmaW5hbGl6ZWRcblx0XHRcdGNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5DcmVhdGUsIGNvbnRlbnQgfSk7XG5cdFx0XHQvLyBTaW5jZSB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCBoYXMgY2hhbmdlZCBkdXJpbmcgYWN0aXZhdGlvbiwgd2UgbmVlZCB0byB1cGRhdGUgYWxsIGNvbGxhYm9yYXRpb24gbG9ja3Ncblx0XHRcdC8vIHRoYXQgd2VyZSB1c2luZyB0aGUgdHJhbnNpZW50IHBhdGhcblx0XHRcdGNvbGxhYm9yYXRpdmVEcmFmdC51cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoKHRyYW5zaWVudFBhdGgsIGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRmFpbGVkIHRvIGFjdGl2YXRlIG5ldyByb3cgLVwiLCBlcnJvciBhcyBFcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZnJvbSB0aGUgRGVmYXVsdFZhbHVlcyBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFRoZSBjdXJyZW50IGxpc3QgYmluZGluZ1xuXHQgKiBAcmV0dXJucyBUaGUgRGVmYXVsdFZhbHVlcyBmdW5jdGlvbiAob3IgdW5kZWZpbmVkIGlmIG5vIGZ1bmN0aW9uIGlzIGZvdW5kKVxuXHQgKi9cblx0Z2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogRGVmYXVsdFZhbHVlc0Z1bmN0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobGlzdEJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHRjb25zdCBsaXN0QmluZGluZ09iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmNPblRhcmdldE9iamVjdCA9IChsaXN0QmluZGluZ09iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSB8IEVudGl0eVNldCkuYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHQ/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblx0XHRjb25zdCBkZWZhdWx0RnVuY09uVGFyZ2V0RW50aXR5U2V0ID0gKGxpc3RCaW5kaW5nT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHQ/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblxuXHRcdHJldHVybiBkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0ID8/IGRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQ7XG5cdH1cblxuXHQvKipcblx0ICogRW1wdHlSb3dzRW5hYmxlZCBzZXR0ZXIuXG5cdCAqIEBwYXJhbSBlbmFibGVtZW50XG5cdCAqL1xuXHRzZXRFbXB0eVJvd3NFbmFibGVkKHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlciwgZW5hYmxlbWVudDogYm9vbGVhbik6IHZvaWQge1xuXHRcdC8vIElOSVQ6IGVuc3VyZSB0YWJsZURlZmF1bHRzUHJvbWlzZSBleGlzdHMgd2hlbiBlbmFibGluZyBlbXB0eSByb3dzXG5cdFx0aWYgKGVuYWJsZW1lbnQgJiYgIXRoaXMudGFibGVEZWZhdWx0c1Byb21pc2UpIHtcblx0XHRcdHRoaXMudGFibGVEZWZhdWx0c1Byb21pc2UgPSB0aGlzLmdldFRhYmxlRGVmYXVsdHModGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZW1wdHlSb3dzRW5hYmxlZFwiLCBlbmFibGVtZW50KTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoKS5uYXZpZ2F0aW9uUGF0aCxcblx0XHRcdGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0aWYgKGVuYWJsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0Y29uc3QgZGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gbGlzdEJpbmRpbmc/LmdldFJlc29sdmVkUGF0aCgpID8gdGhpcy5nZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24obGlzdEJpbmRpbmcpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGRlZmF1bHRWYWx1ZXNGdW5jdGlvbikge1xuXHRcdFx0XHRhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCkucmVnaXN0ZXJUYXJnZXRDYWxsYmFjayhuYXZpZ2F0aW9uUGF0aCwgdGhpcy51cGRhdGVFbXB0eVJvd3MuYmluZCh0aGlzKSk7XG5cdFx0XHRcdC8vIEltbWVkaWF0ZSBpbml0aWFsIHNldHVwIHdpdGhvdXQgZGVmYXVsdHNcblx0XHRcdFx0aWYgKCF0aGlzLnRhYmxlRGVmYXVsdHNQcm9taXNlKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRVcEVtcHR5Um93cyh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLmRlcmVnaXN0ZXJUYXJnZXRDYWxsYmFjayhuYXZpZ2F0aW9uUGF0aCk7XG5cdFx0fVxuXHRcdC8vIEltbWVkaWF0ZSBpbml0aWFsIHNldHVwIG9ubHkgaWYgbm8gZGVmYXVsdHMgcHJvbWlzZSBleGlzdHMgKHRvIGF2b2lkIGR1cGxpY2F0ZSBlbXB0eSByb3dzKVxuXHRcdGlmICh0aGlzLnRhYmxlRGVmYXVsdHNQcm9taXNlKSB7XG5cdFx0XHR0aGlzLnRhYmxlRGVmYXVsdHNQcm9taXNlXG5cdFx0XHRcdC50aGVuKCh0YWJsZURlZmF1bHREYXRhKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVFbXB0eVJvd3MoKTtcblx0XHRcdFx0XHRyZXR1cm4gdGFibGVEZWZhdWx0RGF0YTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdXAgZW1wdHkgcm93czpcIiwgZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRVcEVtcHR5Um93cyh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSBhbmQgcmVjcmVhdGUgdGhlIGVtcHR5IHJvd3MgaW4gb3JkZXIgdG8gZ2V0IGFueSB1cGRhdGVkIGRlZmF1bHQgdmFsdWVzLlxuXHQgKlxuXHQgKi9cblx0YXN5bmMgdXBkYXRlRW1wdHlSb3dzKHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRjb25zdCBiaW5kaW5nSGVhZGVyQ29udGV4dCA9IGJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXG5cdFx0aWYgKCEoYmluZGluZyAmJiBiaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBiaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiBiaW5kaW5nSGVhZGVyQ29udGV4dCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGJpbmRpbmdIZWFkZXJDb250ZXh0LmdldFBhdGgoKTtcblxuXHRcdC8vIERPIE5PVCBzaG93IGVtcHR5IHJvd3MgaW4gZGlzcGxheSBtb2RlLlxuXHRcdC8vIElmIGFueSBpbmFjdGl2ZSByb3dzIGFyZSBwcmVzZW50IChmcm9tIGEgcHJldmlvdXMgc3RhdGUpLCByZW1vdmUgdGhlbSBhbmQgZXhpdC5cblx0XHRpZiAoIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGFibGUpKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKCk7XG5cdFx0XHR0aGlzLl9kZWxldGVFbXB0eVJvd3MoYmluZGluZywgY29udGV4dFBhdGgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2RlbGV0ZUVtcHR5Um93cyhiaW5kaW5nLCBjb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgZGVmYXVsdHMgPSBhd2FpdCB0aGlzLmdldFRhYmxlRGVmYXVsdHModGFibGUpO1xuXHRcdC8vIFVwZGF0ZSB0aGUgZW1wdHkgcm93cyB3aXRoIHRoZSBsYXRlc3QgZGVmYXVsdCB2YWx1ZXNcblx0XHRhd2FpdCB0aGlzLmNyZWF0ZUVtcHR5Um93cyhiaW5kaW5nLCB0YWJsZSwgZmFsc2UsIHVuZGVmaW5lZCwgZmFsc2UsIGRlZmF1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSBjb21tb24gY2hlY2tzIGZvciB0YWJsZSBkZWZhdWx0cyBhbmQgZW1wdHkgcm93cyBzZXR1cC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBwcm9jZXNzZWRcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgb2JqZWN0IGlmIGNoZWNrcyBwYXNzLCBvciB1bmRlZmluZWQgaWYgY2hlY2tzIGZhaWxcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcixcblx0XHR0YWJsZTogTURDVGFibGVcblx0KTogUHJvbWlzZTxPRGF0YUxpc3RCaW5kaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbD8uY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IHVpTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIXVpTW9kZWwpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHVpTW9kZWwuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVBlbmRpbmdcIikpIHtcblx0XHRcdC8vIFdhaXQgdW50aWwgdGhlIGVkaXQgbW9kZSBjb21wdXRhdGlvbiBpcyBjb21wbGV0ZVxuXHRcdFx0Y29uc3Qgd2F0Y2hCaW5kaW5nID0gdWlNb2RlbC5iaW5kUHJvcGVydHkoXCIvaXNFZGl0YWJsZVBlbmRpbmdcIik7XG5cdFx0XHRhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZXIgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0d2F0Y2hCaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZXIpO1xuXHRcdFx0XHRcdHdhdGNoQmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR3YXRjaEJpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlcik7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBiaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWJpbmRpbmcpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBiaW5kaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRhYmxlIGRlZmF1bHRzIGJ5IHZhbGlkYXRpbmcgYW5kIHJldHJpZXZpbmcgdGhlIGJpbmRpbmcsIHRoZW4gZmV0Y2hpbmcgZGF0YSBmcm9tIHRoZSBEZWZhdWx0VmFsdWVGdW5jdGlvbi5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBwcm9jZXNzZWRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgdmFsdWVzLCBvciB1bmRlZmluZWQgaWYgbm8gYmluZGluZyBpcyBhdmFpbGFibGUgb3IgdGhlIERlZmF1bHRWYWx1ZUZ1bmN0aW9uIHJldHVybnMgbm8gZGF0YVxuXHQgKi9cblx0YXN5bmMgZ2V0VGFibGVEZWZhdWx0cyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIHRhYmxlOiBNRENUYWJsZSk6IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgYmluZGluZyA9IGF3YWl0IHRoaXMuX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKHRhYmxlKTtcblx0XHRpZiAoIWJpbmRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpO1xuXHRcdHJldHVybiBhcHBDb21wb25lbnQgPyBUcmFuc2FjdGlvbkhlbHBlci5nZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uKGJpbmRpbmcsIGFwcENvbXBvbmVudCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBzZXRVcEVtcHR5Um93cyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdGNyZWF0ZUJ1dHRvbldhc1ByZXNzZWQgPSBmYWxzZSxcblx0XHR0YWJsZURlZmF1bHREYXRhID0ge31cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYmluZGluZyA9IGF3YWl0IHRoaXMuX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKHRhYmxlKTtcblx0XHRpZiAoIWJpbmRpbmcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYmluZGluZ0hlYWRlckNvbnRleHQgPSBiaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRpZiAoYmluZGluZyAmJiBiaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBiaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiBiaW5kaW5nSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBiaW5kaW5nSGVhZGVyQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRpZiAoIXRoaXMuZW1wdHlSb3dzRW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKCk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9kZWxldGVFbXB0eVJvd3MoYmluZGluZywgY29udGV4dFBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRhYmxlKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbD8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSAmJlxuXHRcdFx0XHQhdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiY3JlYXRlTW9kZVwiKSAmJlxuXHRcdFx0XHQhY3JlYXRlQnV0dG9uV2FzUHJlc3NlZFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluYWN0aXZlQ29udGV4dCA9IGJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZChmdW5jdGlvbiAoY29udGV4dCkge1xuXHRcdFx0XHQvLyB3aGVuIHRoaXMgaXMgY2FsbGVkIGZyb20gY29udHJvbGxlciBjb2RlIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCBpbmFjdGl2ZSBjb250ZXh0cyBhcmUgc3RpbGwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGFibGUgY29udGV4dFxuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5pc0luYWN0aXZlKCkgJiYgY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChjb250ZXh0UGF0aCk7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghaW5hY3RpdmVDb250ZXh0KSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXMoKTtcblx0XHRcdFx0YXdhaXQgdGhpcy5jcmVhdGVFbXB0eVJvd3MoYmluZGluZywgdGFibGUsIGZhbHNlLCB1bmRlZmluZWQsIGZhbHNlLCB0YWJsZURlZmF1bHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBpbmFjdGl2ZSByb3dzIGZyb20gdGhlIHRhYmxlIGxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYmluZGluZ1xuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhcblx0ICovXG5cdF9kZWxldGVFbXB0eVJvd3MoYmluZGluZzogT0RhdGFMaXN0QmluZGluZywgY29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpKSB7XG5cdFx0XHRpZiAoY29udGV4dC5pc0luYWN0aXZlKCkgJiYgY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChjb250ZXh0UGF0aCkpIHtcblx0XHRcdFx0Y29udGV4dC5kZWxldGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHMgd2l0aGluIHRoZSBsaXN0IGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIERhdGEgbGlzdCBiaW5kaW5nXG5cdCAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHNcblx0ICovXG5cdGdldEluYWN0aXZlQ29udGV4dE51bWJlcihiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gYmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaXNJbmFjdGl2ZSgpKS5sZW5ndGg7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZW1wdHkgcm93LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZW1wdHkgcm93XG5cdCAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIHN0YXR1c1xuXHQgKi9cblx0dmFsaWRhdGVFbXB0eVJvdyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24ucmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyhjb250ZXh0KTtcblx0XHRcdGNvbnN0IG1pc3NpbmdQcm9wZXJ0aWVzID0gcmVxdWlyZWRQcm9wZXJ0aWVzLmZpbHRlcigocmVxdWlyZWRQcm9wZXJ0eSkgPT4gIWNvbnRleHQuZ2V0T2JqZWN0KHJlcXVpcmVkUHJvcGVydHkpKTtcblx0XHRcdGlmIChtaXNzaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSE7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRcdFx0bGV0IGRpc3BsYXllZENvbHVtbjogTURDQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRmb3IgKGNvbnN0IG1pc3NpbmdQcm9wZXJ0eSBvZiBtaXNzaW5nUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZztcblx0XHRcdFx0XHRjb25zdCBtaXNzaW5nQ29sdW1uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoXG5cdFx0XHRcdFx0XHQodGFibGVDb2x1bW4pID0+XG5cdFx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLnJlbGF0aXZlUGF0aCA9PT0gbWlzc2luZ1Byb3BlcnR5IHx8XG5cdFx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zICYmIHRhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MuaW5jbHVkZXMobWlzc2luZ1Byb3BlcnR5KSlcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKCFtaXNzaW5nQ29sdW1uKSB7XG5cdFx0XHRcdFx0XHRlcnJvck1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9UQUJMRV9FTVBUWVJPV19NQU5EQVRPUllcIiwgW21pc3NpbmdQcm9wZXJ0eV0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ZWRDb2x1bW4gPSB0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0XHRcdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHRcdFx0XHRcdC5maW5kKChtZGNDb2x1bW4pID0+IG1kY0NvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09PSBtaXNzaW5nQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0ZGlzcGxheWVkQ29sdW1uID8gXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWVwiIDogXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWV9ISURERU5cIixcblx0XHRcdFx0XHRcdFx0W2Rpc3BsYXllZENvbHVtbj8uZ2V0SGVhZGVyKCkgfHwgbWlzc2luZ0NvbHVtbi5sYWJlbF1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bWVzc2FnZXMucHVzaChcblx0XHRcdFx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRwcm9jZXNzb3I6IHRoaXMuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0XHRcdHRlY2huaWNhbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHRlY2huaWNhbERldGFpbHM6IHtcblx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkOiB0aGlzLmdldENvbnRlbnQoKS5nZXRJZCgpLCAvLyBOZWVkIHRvIGRvIGl0IHNpbmNlIGhhbmRsZUNyZWF0ZUFjdGl2YXRlIGNhbiBiZSB0cmlnZ2VyZWQgbXVsdGlwbGUgdGltZXMgKGV4dHJhIHByb3BlcnRpZXMgc2V0IGJ5IHZhbHVlIGhlbHApIGJlZm9yZSBjb250cm9sSWRzIGFyZSBzZXQgb24gdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRlbXB0eVJvd01lc3NhZ2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0bWlzc2luZ0NvbHVtbjogZGlzcGxheWVkQ29sdW1uID8gdW5kZWZpbmVkIDogbWlzc2luZ1Byb3BlcnR5IC8vIG5lZWRlZCB0byBjaGFuZ2UgdGhlIG1lc3NhZ2VTdHJpcCBtZXNzYWdlXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHRhcmdldDogYCR7Y29udGV4dD8uZ2V0UGF0aCgpfS8ke21pc3NpbmdQcm9wZXJ0eX1gXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKG1lc3NhZ2VzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBlbXB0eSByb3dzLlxuXHQgKiBAcGFyYW0gaW5hY3RpdmVDb250ZXh0cyBUaGUgY29udGV4dHMgb2YgdGhlIGVtcHR5IHJvd3MsIGlmIG5vdCBwcm92aWRlZCwgdGhlIG1lc3NhZ2VzIG9mIGFsbCBlbXB0eSByb3dzIGFyZSByZW1vdmVkXG5cdCAqL1xuXHRyZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIGluYWN0aXZlQ29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdKTogdm9pZCB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFxuXHRcdFx0KE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCkgYXMgTWVzc2FnZVtdKS5maWx0ZXIoKG1zZykgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzID0gKG1zZy5nZXRUZWNobmljYWxEZXRhaWxzKCkgfHwge30pIGFzIHsgdGFibGVJZD86IHN0cmluZzsgZW1wdHlSb3dNZXNzYWdlPzogYm9vbGVhbiB9O1xuXG5cdFx0XHRcdC8vIENoZWNrIGlmIG1zZyB0YXJnZXQgc3RhcnRzIHdpdGggYW55IHBhdGggaW4gdGhlIGluYWN0aXZlQ29udGV4dCBhcnJheVxuXHRcdFx0XHRjb25zdCBjb250ZXh0TWF0Y2hlcyA9IEFycmF5LmlzQXJyYXkoaW5hY3RpdmVDb250ZXh0cylcblx0XHRcdFx0XHQ/IGluYWN0aXZlQ29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gbXNnLmdldFRhcmdldHMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUuc3RhcnRzV2l0aChjb250ZXh0LmdldFBhdGgoKSkpKVxuXHRcdFx0XHRcdDogIWluYWN0aXZlQ29udGV4dHMgfHwgbXNnLmdldFRhcmdldHMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUuc3RhcnRzV2l0aChpbmFjdGl2ZUNvbnRleHRzLmdldFBhdGgoKSkpO1xuXG5cdFx0XHRcdHJldHVybiBjb250ZXh0TWF0Y2hlcyAmJiB0ZWNobmljYWxEZXRhaWxzLmVtcHR5Um93TWVzc2FnZSAmJiB0ZWNobmljYWxEZXRhaWxzLnRhYmxlSWQgPT09IHRoaXMuZ2V0Q29udGVudCgpLmdldElkKCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRpb24gb2YgaW5hY3RpdmUgcm93cyBmb3IgdGhlIHRhYmxlIGluIGNyZWF0aW9uIG1vZGUgXCJJbmxpbmVDcmVhdGlvblJvd3NcIi5cblx0ICogQHBhcmFtIGJpbmRpbmcgRGF0YSBsaXN0IGJpbmRpbmdcblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBlZGl0ZWRcblx0ICogQHBhcmFtIHJlY3JlYXRlT25lUm93IGB0cnVlYCBpZiB0aGUgY2FsbCBpcyB0byByZWNyZWF0ZSBhbiBlbXB0eUxpbmVcblx0ICogQHBhcmFtIG5ld0lubGluZUNyZWF0aW9uUm93RnJvbVBhc3RlIE51bWJlciBvZiBuZXcgaW5hY3RpdmUgcm93cyB0byBiZSBjcmVhdGVkXG5cdCAqIEBwYXJhbSBmb3JjZUNyZWF0ZWF0RW5kIGB0cnVlYCBpZiB0aGUgbmV3IHJvdyBpcyB0byBiZSBjcmVhdGVkIGF0IHRoZSBlbmQgb2YgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGEgRGVmYXVsdCB2YWx1ZXMgcmV0cmlldmVkIGZyb20gdGhlIERlZmF1bHRWYWx1ZXNGdW5jdGlvbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBuZXcgcm93c1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBjb250ZXh0cyBvciB2b2lkIGlmIHRoZSBjcmVhdGlvbiBmYWlsZWRcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUVtcHR5Um93cyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsXG5cdFx0YmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0cmVjcmVhdGVPbmVSb3cgPSBmYWxzZSxcblx0XHRuZXdJbmxpbmVDcmVhdGlvblJvd0Zyb21QYXN0ZT86IG51bWJlcixcblx0XHRmb3JjZUNyZWF0ZWF0RW5kID0gZmFsc2UsXG5cdFx0ZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhPzogb2JqZWN0IHwgdW5kZWZpbmVkXG5cdCk6IFByb21pc2U8dm9pZCB8IENvbnRleHRbXT4ge1xuXHRcdGNvbnN0IGlubGluZUNyZWF0aW9uUm93Q291bnQgPSBuZXdJbmxpbmVDcmVhdGlvblJvd0Zyb21QYXN0ZSA/PyAodGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50IHx8IDEpO1xuXHRcdC8qIGVuc3VyZXMgdGhhdCBhdCBtb3N0IG9uZSBhZGRpdGlvbmFsIGVtcHR5IHJvdyBjYW4gZXhpc3QgZHVyaW5nIExpdmVDaGFuZ2UgKHdoZW4gYHJlY3JlYXRlT25lUm93YCBpcyB0cnVlKS5cblx0XHRJbiBhbGwgb3RoZXIgY2FzZXMsIHRoZSBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHMgY2Fubm90IGV4Y2VlZCBgaW5saW5lQ3JlYXRpb25Sb3dDb3VudGAuKi9cblx0XHRpZiAodGhpcy5jcmVhdGluZ0VtcHR5Um93cyB8fCB0aGlzLmdldEluYWN0aXZlQ29udGV4dE51bWJlcihiaW5kaW5nKSA+PSBpbmxpbmVDcmVhdGlvblJvd0NvdW50ICsgKHJlY3JlYXRlT25lUm93ID8gMSA6IDApKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGRhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpbmxpbmVDcmVhdGlvblJvd0NvdW50IH0sICgpID0+ICh7fSkpLFxuXHRcdFx0YXRFbmQgPSB0YWJsZS5kYXRhKFwidGFibGVUeXBlXCIpICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiLFxuXHRcdFx0aW5hY3RpdmUgPSB0cnVlLFxuXHRcdFx0dmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpLFxuXHRcdFx0Y29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0ZWRpdEZsb3cgPSBjb250cm9sbGVyLmVkaXRGbG93O1xuXG5cdFx0dGhpcy5jcmVhdGluZ0VtcHR5Um93cyA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRhdGFGb3JDcmVhdGUgPSByZWNyZWF0ZU9uZVJvdyA/IFt7fV0gOiBkYXRhO1xuXHRcdFx0Y29uc3QgY29udGV4dHMgPSBhd2FpdCBlZGl0Rmxvdy5jcmVhdGVNdWx0aXBsZURvY3VtZW50cyhcblx0XHRcdFx0YmluZGluZyxcblx0XHRcdFx0Ly8gZHVyaW5nIGEgbGl2ZSBjaGFuZ2UsIG9ubHkgMSBuZXcgZG9jdW1lbnQgaXMgY3JlYXRlZFxuXHRcdFx0XHRkYXRhRm9yQ3JlYXRlLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y3JlYXRlQXRFbmQ6IHJlY3JlYXRlT25lUm93IHx8IGZvcmNlQ3JlYXRlYXRFbmQgPyB0cnVlIDogYXRFbmQsIC8vIFdoZW4gZWRpdGluZyBhbiBlbXB0eSByb3csIHRoZSBuZXcgZW1wdHkgcm93IGlzIHRvIGJlIGNyZWF0ZWQganVzdCBiZWxvdyBhbmQgbm90IGFib3ZlXG5cblx0XHRcdFx0XHRiZWZvcmVDcmVhdGVDYWxsQmFjazogY29udHJvbGxlci5lZGl0Rmxvdy5vbkJlZm9yZUNyZWF0ZSxcblx0XHRcdFx0XHRjcmVhdGVBc0luYWN0aXZlOiBpbmFjdGl2ZSxcblx0XHRcdFx0XHRoaWRlQnVzeUluZGljYXRvcjogaW5hY3RpdmUsXG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0XHRjb250ZXh0cz8uZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY29udGV4dDogQ29udGV4dCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGF3YWl0IGNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdGlmICghKGVycm9yIGFzIENvbnRleHRFcnJvclR5cGUpLmNhbmNlbGVkKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGNvbnRleHRzO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuY3JlYXRpbmdFbXB0eVJvd3MgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7TUF3QnFCQSxnQkFBZ0I7SUFBQSxTQUFBQSxpQkFBQTtJQUFBQyxRQUFBLEdBQUFELGdCQUFBO0lBQUEsSUFBQUUsTUFBQSxHQUFBRixnQkFBQSxDQUFBRyxTQUFBO0lBR3BDO0FBQ0Q7QUFDQTtJQUZDRCxNQUFBLENBS0FFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0Es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QUMsQ0FBQyxDQUFDLENBQUM7UUFDdEVHLEtBQUssR0FBRzNLLEtBQUssQ0FBQytELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxpQkFBaUI7UUFDckQ2RyxRQUFRLEdBQUcsSUFBSTtRQUNmN0osSUFBSSxHQUFHUCxXQUFXLENBQUNRLGFBQWEsQ0FBQ2hCLEtBQUssQ0FBQztRQUN2Q2lCLFVBQVUsR0FBR0YsSUFBSSxDQUFDRyxhQUFhLENBQUMsQ0FBQztRQUNqQ0MsUUFBUSxHQUFHRixVQUFVLENBQUNFLFFBQVE7TUFFL0IsSUFBSSxDQUFDc0osaUJBQWlCLEdBQUcsSUFBSTtNQUM3QixJQUFJO1FBQ0gsTUFBTUksYUFBYSxHQUFHVCxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHckcsSUFBSTtRQUNsRCxNQUFNK0csUUFBUSxHQUFHLE1BQU0zSixRQUFRLENBQUM0Six1QkFBdUIsQ0FDdERsTCxPQUFPO1FBQ1A7UUFDQWdMLGFBQWEsRUFDYjtVQUNDRyxXQUFXLEVBQUVaLGNBQWMsSUFBSUUsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHSyxLQUFLO1VBQUU7O1VBRWhFTSxvQkFBb0IsRUFBRWhLLFVBQVUsQ0FBQ0UsUUFBUSxDQUFDK0osY0FBYztVQUN4REMsZ0JBQWdCLEVBQUVQLFFBQVE7VUFDMUJRLGlCQUFpQixFQUFFUixRQUFRO1VBQzNCTDtRQUNELENBQ0QsQ0FBQztRQUNETyxRQUFRLEVBQUVPLE9BQU8sQ0FBQyxnQkFBZ0IxSixPQUFnQixFQUFFO1VBQ25ELElBQUk7WUFDSCxNQUFNQSxPQUFPLENBQUNILE9BQU8sQ0FBQyxDQUFDO1VBQ3hCLENBQUMsQ0FBQyxPQUFPYyxLQUFLLEVBQUU7WUFDZixJQUFJLENBQUVBLEtBQUssQ0FBc0JnSixRQUFRLEVBQUU7Y0FDMUMsTUFBTWhKLEtBQUs7WUFDWjtVQUNEO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YsT0FBT3dJLFFBQVE7TUFDaEIsQ0FBQyxDQUFDLE9BQU9sSixDQUFDLEVBQUU7UUFDWEMsR0FBRyxDQUFDUyxLQUFLLENBQUNWLENBQVcsQ0FBQztNQUN2QixDQUFDLFNBQVM7UUFDVCxJQUFJLENBQUM2SSxpQkFBaUIsR0FBRyxLQUFLO01BQy9CO0lBQ0QsQ0FBQztJQUFBLE9BQUF4TCxnQkFBQTtFQUFBO0VBQUFDLFFBQUEsR0FBQUQsZ0JBQUE7RUFBQSxPQUFBQyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|