@sapui5/sap.fe.macros 1.138.0 → 1.140.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/Breadcrumbs.js +269 -0
- package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
- package/src/sap/fe/macros/CommonHelper.js +2 -2
- package/src/sap/fe/macros/CommonHelper.ts +1 -1
- package/src/sap/fe/macros/Field.js +85 -58
- package/src/sap/fe/macros/Field.ts +104 -60
- package/src/sap/fe/macros/FooterContent.js +44 -11
- package/src/sap/fe/macros/FooterContent.tsx +48 -9
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MessageButton.js +1 -2
- package/src/sap/fe/macros/MessageButton.tsx +0 -1
- package/src/sap/fe/macros/MultiValueField.js +17 -6
- package/src/sap/fe/macros/MultiValueField.tsx +7 -4
- package/src/sap/fe/macros/RichTextEditor.js +30 -5
- package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
- package/src/sap/fe/macros/Share.js +85 -40
- package/src/sap/fe/macros/Share.tsx +42 -1
- package/src/sap/fe/macros/Status.js +226 -0
- package/src/sap/fe/macros/Status.tsx +192 -0
- package/src/sap/fe/macros/ValueHelp.js +4 -29
- package/src/sap/fe/macros/ValueHelp.tsx +2 -43
- package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
- package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
- package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
- package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
- package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
- package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
- package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
- package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
- package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
- package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
- package/src/sap/fe/macros/controls/FilterBar.js +49 -2
- package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
- package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
- package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -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 +43 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
- package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
- package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
- package/src/sap/fe/macros/form/Form.js +1 -4
- package/src/sap/fe/macros/form/Form.tsx +0 -3
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
- package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
- package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
- package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
- package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/form/FormHelper.js +1 -2
- package/src/sap/fe/macros/form/FormHelper.ts +0 -1
- package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
- package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
- package/src/sap/fe/macros/internal/DataPoint.js +2 -1
- package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
- package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
- package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
- package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
- package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
- package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
- package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
- package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
- package/src/sap/fe/macros/messagebundle.properties +42 -32
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
- package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
- package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
- package/src/sap/fe/macros/messagebundle_da.properties +11 -3
- package/src/sap/fe/macros/messagebundle_de.properties +18 -10
- package/src/sap/fe/macros/messagebundle_el.properties +13 -5
- package/src/sap/fe/macros/messagebundle_en.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
- package/src/sap/fe/macros/messagebundle_es.properties +13 -5
- package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
- package/src/sap/fe/macros/messagebundle_et.properties +13 -5
- package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
- package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
- package/src/sap/fe/macros/messagebundle_id.properties +18 -10
- package/src/sap/fe/macros/messagebundle_it.properties +10 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
- package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
- package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
- package/src/sap/fe/macros/messagebundle_no.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -3
- package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
- package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
- package/src/sap/fe/macros/messages/MessageButton.js +55 -36
- package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
- package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
- package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
- package/src/sap/fe/macros/share/ShareAPI.js +4 -29
- package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
- package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
- package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
- package/src/sap/fe/macros/table/Action.js +24 -2
- package/src/sap/fe/macros/table/Action.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroup.js +24 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
- package/src/sap/fe/macros/table/Column.js +3 -3
- package/src/sap/fe/macros/table/Column.ts +2 -2
- package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
- package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
- package/src/sap/fe/macros/table/Table.block.js +137 -108
- package/src/sap/fe/macros/table/Table.block.tsx +29 -2
- package/src/sap/fe/macros/table/TableAPI.js +143 -133
- package/src/sap/fe/macros/table/TableAPI.ts +5 -1
- package/src/sap/fe/macros/table/TableDefinition.js +4 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
- package/src/sap/fe/macros/table/TableHelper.js +1 -2
- package/src/sap/fe/macros/table/TableHelper.ts +0 -1
- package/src/sap/fe/macros/table/TableRuntime.js +26 -7
- package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
- package/src/sap/fe/macros/table/Utils.js +6 -2
- package/src/sap/fe/macros/table/Utils.ts +5 -1
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
|
@@ -326,6 +326,7 @@ export default class ContextMenuHandler implements IInterfaceWithMixin {
|
|
|
326
326
|
const activeSelectedContexts = contextMenuSelection.filter(function (oContext: Context) {
|
|
327
327
|
return !oContext.isInactive();
|
|
328
328
|
});
|
|
329
|
+
internalModelContext?.setProperty("contextmenu/selectedContextsIncludingInactive", contextMenuSelection);
|
|
329
330
|
internalModelContext?.setProperty("contextmenu/selectedContexts", activeSelectedContexts);
|
|
330
331
|
//reset number of selected contexts to ensure callback for custom enable handler
|
|
331
332
|
internalModelContext?.setProperty("contextmenu/numberOfSelectedContexts", -1);
|
|
@@ -45,11 +45,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
45
45
|
if (!forContextMenu || internalContext.getProperty("numberOfSelectedContexts") > 0) {
|
|
46
46
|
TableRuntime.clearSelection(table);
|
|
47
47
|
table.fireSelectionChange();
|
|
48
|
+
} else if (forContextMenu) {
|
|
49
|
+
// Using the context menu implicitly defines a context for the action
|
|
50
|
+
table.fireSelectionChange();
|
|
48
51
|
}
|
|
49
52
|
internalContext.setProperty("nodeUpdatesInfo/cutEnablement", false);
|
|
50
53
|
internalContext.setProperty("contextmenu/nodeUpdatesInfo/cutEnablement", false);
|
|
51
54
|
internalContext.setProperty("nodeUpdatesInfo/copyEnablement", false);
|
|
52
55
|
internalContext.setProperty("contextmenu/nodeUpdatesInfo/copyEnablement", false);
|
|
56
|
+
const pasteButton = table.getActions().find(toolbarAction => /::Paste$/.test(toolbarAction.getAction().getId()));
|
|
57
|
+
setTimeout(() => {
|
|
58
|
+
pasteButton?.focus();
|
|
59
|
+
}, 0);
|
|
53
60
|
}
|
|
54
61
|
|
|
55
62
|
/**
|
|
@@ -491,4 +498,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
491
498
|
_exports = TableHierarchy;
|
|
492
499
|
return _exports;
|
|
493
500
|
}, false);
|
|
494
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsIl9vbkRyYWdFbnRlckRvY3VtZW50IiwidWk1RXZlbnQiLCJkcmFnZ2VkQ29udGV4dCIsImdldFBhcmFtZXRlciIsImdldENvbnRlbnQiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0Q29udGV4dCIsImlzQW5jZXN0b3JPZiIsImRpc2FibGVkQmV0d2VlbiIsImRpc2FibGVkT24iLCJ0YWJsZURlZmluaXRpb24iLCJnZXRUYWJsZURlZmluaXRpb24iLCJpc01vdmVBbGxvd2VkSW5mbyIsImNvbnRyb2wiLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsInVuZGVmaW5lZCIsInNhZmVJc01vdmVBbGxvd2VkIiwiYW5ub3RhdGlvbiIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsIk1hdGgiLCJhYnMiLCJnZXRJbmRleCIsImdldExlbmd0aCIsImNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCIsImlzRHJvcEJldHdlZW5BbGxvd2VkRm9yRHJhZyIsImFsbG93ZWREcm9wUG9zaXRpb24iLCJPbk9yQmV0d2VlbiIsIk9uIiwiQmV0d2VlbiIsInNldERyb3BQb3NpdGlvbiIsIl9vbkRyYWdTdGFydERvY3VtZW50IiwiY29udGV4dCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImRpc2FibGVEcmFnIiwiaXNSZWxhdGl2ZSIsImlzTW92YWJsZUluZm8iLCJpc05vZGVNb3ZhYmxlIiwiX2Vycm9yIiwiX29uRHJvcERvY3VtZW50IiwiQnVzeUxvY2tlciIsImxvY2siLCJkcm9wcGVkT25Db250ZXh0IiwiZHJvcEluZm8iLCJwb3NpdGlvbiIsInBhcmVudENvbnRleHQiLCJjb250ZXh0QmVmb3JlIiwiY29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEJlZm9yZSIsIm1vdmVkQ29udGV4dCIsIlByb21pc2UiLCJhbGwiLCJkcm9wQ29udGV4dCIsInJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJtZXNzYWdlIiwidW5sb2NrIiwiX29uQ29sbGFwc2VFeHBhbmROb2RlIiwiX3VpNUV2ZW50IiwiZXhwYW5kIiwicHJvbWlzZUFycmF5IiwibWFwIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJjb2xsYXBzZSIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJfb25Nb3ZlVXBEb3duIiwibW92ZVVwIiwiYXJndW1lbnRzIiwibWRjVGFibGUiLCJzZXRCdXN5IiwicmVxdWVzdFBhcmVudCIsImNvbnRleHRNb3ZlZCIsIm1vdmVQcm9taXNlIiwicHJldmlvdXNTaWJsaW5nIiwicmVxdWVzdFNpYmxpbmciLCJtb3ZlIiwibmV4dFNpYmxpbmciLCJwYXJlbnQiLCJuZXdJbmRleCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c1JvdyIsIl9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbiIsImVudGl0eVBhdGgiLCJkYXRhIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJnZXRDb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFjdGlvbk5hbWUiLCJhbm5vdGF0aW9ucyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwic2lkZUVmZmVjdHMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24iLCJhbGxvd2VkIiwiaXNBbGxvd2VkIiwicGFyZW50QmVmb3JlIiwicGFyYW1zQmVmb3JlIiwiZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzIiwicGFyZW50QWZ0ZXIiLCJwYXJhbXNBZnRlciIsImNvbnRleHRJbmRleCIsIkVycm9yIiwibGlzdEJpbmRpbmciLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJmaW5kIiwiY3R4IiwiaW5mbyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiaXNUYWJsZVNvcnRlZCIsIm1vdmVDb250ZXh0IiwiZmluYWxseSIsInBhcmFtcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVIaWVyYXJjaHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyB0eXBlIElJbnRlcmZhY2VXaXRoTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIERyYWdEcm9wSW5mbyBmcm9tIFwic2FwL3VpL2NvcmUvZG5kL0RyYWdEcm9wSW5mb1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmVudW0gRHJvcFBvc2l0aW9uIHtcblx0T24gPSBcIk9uXCIsXG5cdEJldHdlZW4gPSBcIkJldHdlZW5cIixcblx0T25PckJldHdlZW4gPSBcIk9uT3JCZXR3ZWVuXCJcbn1cblxudHlwZSBEcm9wSW5mb3JtYXRpb24gPVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbjsgcGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwgfVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuOyBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDsgY29udGV4dEFmdGVyOiBDb250ZXh0IHwgbnVsbCB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUhpZXJhcmNoeSBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEN1dC9Db3B5IG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGV2dCBUaGUgVUk1IGV2ZW50XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0X29uQ29weUN1dCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBldnQ6IFVJNUV2ZW50PHt9LCBVSTVFbGVtZW50PiwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sIGFjdGlvbjogXCJDb3B5XCIgfCBcIkN1dFwiKTogdm9pZCB7XG5cdFx0bGV0IHRhYmxlOiBNRENUYWJsZTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHR0YWJsZSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbWVudSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNZW51O1xuXHRcdFx0dGFibGUgPSBtZW51LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0TG9nLmVycm9yKGBNdWx0aSAke2FjdGlvbiA9PT0gXCJDdXRcIiA/IFwiY3V0dGluZ1wiIDogXCJjb3B5aW5nXCJ9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vcGFzdGFibGVDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vbGFzdEFjdGlvblwiLCBhY3Rpb24pO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fQ1VUQ09QWV9SRUFEWVwiKSk7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSB8fCBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIikgPiAwKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24odGFibGUpO1xuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY3V0RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdGFibGUgcm93LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdFbnRlckRvY3VtZW50KFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0dWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQ7IGRyb3BQb3NpdGlvbjogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiT25cIiB9LCBEcmFnRHJvcEluZm8+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRyYWdnZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRpZiAodGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpICE9PSBkcmFnZ2VkQ29udGV4dC5nZXRCaW5kaW5nKCkpIHtcblx0XHRcdC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IG51bGwgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRpZiAoZHJhZ2dlZENvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpKSB7XG5cdFx0XHQvLyBUaGUgYW5jZXN0b3IgaXMgZHJvcHBlZCBvbiBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkQmV0d2VlbiA9IGZhbHNlO1xuXHRcdGxldCBkaXNhYmxlZE9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCkgYXMgQ29udHJvbFxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYgLT4gZHJvcCBhcyByb290IG5vZGUpXG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBudWxsKTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGVkT24gPSAhdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHRhcmdldENvbnRleHQpO1xuXHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzICE9PSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSEgLSBkcmFnZ2VkQ29udGV4dC5nZXRJbmRleCgpISkgPT09IDEgJiZcblx0XHRcdFx0ISh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IDAgJiYgdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIkJlZm9yZVwiKSAmJlxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIC0gMSAmJlxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgZHJvcCBiZXR3ZWVuIG5vZGUgaXMgYWxsb3dlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgcm9vdCBub2RlIGFuZCBpZiB0aGUgdGFibGUgc3VwcG9ydHMgY2hhbmdlU2libGluZ0ZvclJvb3RzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkaXNhYmxlZEJldHdlZW4gJiZcblx0XHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCAmJlxuXHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGN1c3RvbSBsb2dpYyBmb3IgZHJvcCBiZXR3ZWVuIGlmIHRoZXJlJ3Mgc29tZSwgYW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRhYmxlIGxldmVsXG5cdFx0XHRpZiAoY3VzdG9tRnVuY3Rpb24gJiYgIWRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSAhdGhpcy5pc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLk9uT3JCZXR3ZWVuO1xuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4gJiYgZGlzYWJsZWRPbikge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT24pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQmV0d2Vlbjtcblx0XHR9XG5cdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuc2V0RHJvcFBvc2l0aW9uKGFsbG93ZWREcm9wUG9zaXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0cyB0aGUgZHJhZyBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0X29uRHJhZ1N0YXJ0RG9jdW1lbnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgdWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZyB0byB1cGRhdGUgcmVzdHJpY3Rpb25zXG5cdFx0bGV0IGRpc2FibGVEcmFnID0gISF1cGRhdGFibGVQcm9wZXJ0eVBhdGggJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaGFzIG5vIGFzc29jaWF0ZWQgZHJhZnRcblx0XHRpZiAoIWRpc2FibGVEcmFnICYmICEoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBjdXN0b20gbG9naWMgaWYgdGhlcmUncyBvbmVcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmFibGVJbmZvICYmICFkaXNhYmxlRHJhZykge1xuXHRcdFx0XHRkaXNhYmxlRHJhZyA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZURyYWcpIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcmFnZ2FibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERyb3BzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqIEByZXR1cm5zIFRoZSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfb25Ecm9wRG9jdW1lbnQoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSxcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcm9wcGVkT25Db250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0XHRsZXQgZHJvcEluZm86IERyb3BJbmZvcm1hdGlvbjtcblx0XHRcdGlmIChkcm9wcGVkT25Db250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdC8vIFRoZSBkcm9wIGlzIGRvbmUgb24gdGhlIHRhYmxlIGl0c2VsZiAtPiBkcm9wIGFzIHJvb3Qgbm9kZSlcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IG51bGwgfTtcblx0XHRcdH0gZWxzZSBpZiAodWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBEcm9wUG9zaXRpb24uT24pIHtcblx0XHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IGRyb3BwZWRPbkNvbnRleHQgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRcdGxldCBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0bGV0IGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGw7XG5cdFx0XHRcdGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHRcdGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKGRyb3BwZWRPbkNvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gZHJvcHBlZE9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuLCBjb250ZXh0QWZ0ZXIsIGNvbnRleHRCZWZvcmUgfTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmRyb3BDb250ZXh0KG1vdmVkQ29udGV4dCwgZHJvcEluZm8pLCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uKG1vdmVkQ29udGV4dCldKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVEFCTEVEUk9QX0ZBSUxFRFwiLCBbXCJcIl0pKTtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsLiBcIiArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBjb2xsYXBzZS9leHBhbmQgZnJvbSB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBleHBhbmRcblx0ICovXG5cdGFzeW5jIF9vbkNvbGxhcHNlRXhwYW5kTm9kZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBleHBhbmQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKGV4cGFuZCkge1xuXHRcdFx0Y29uc3QgcHJvbWlzZUFycmF5ID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIGZhbHNlIHNwZWNpZmljYWxseTsgdW5kZWZpbmVkIG1lYW5zIHRoZSBub2RlIGNhbm5vdCBleHBhbmQvY29sbGFwc2Vcblx0XHRcdFx0aWYgKHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBkdWUgdG8gbW9kZWwgbGltaXRhdGlvbi5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNvbGxhcHNlIGEgbm9kZSBiZWZvcmUgZXhwYW5kaW5nIGl0IHRvIGVuc3VyZSB3ZSBleHBhbmQgaXQgY29tcGxldGVseS5cblx0XHRcdFx0XHQvLyBXaWxsIGJlIGNoYW5nZWQgb25jZSB0aGUgbW9kZWwgZml4ZXMgdGhlIGlzc3VlLlxuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0YXdhaXQgc2luZ2xlQ29udGV4dC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2luZ2xlQ29udGV4dC5leHBhbmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLm1hcChhc3luYyAoc2luZ2xlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgbWV0aG9kIHRvIG1vdmUgYSByb3cgdXAgb3IgZG93biBpbiBhIFRyZWUgdGFibGUuXG5cdCAqIEBwYXJhbSBfdWk1RXZlbnRcblx0ICogQHBhcmFtIG1vdmVVcCBUcnVlIGZvciBtb3ZlIHVwLCBmYWxzZSBmb3IgbW92ZSBkb3duXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0YXN5bmMgX29uTW92ZVVwRG93bih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBtb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0bWRjVGFibGUuc2V0QnVzeSh0cnVlKTtcblxuXHRcdC8vIE1vdmUgdGhlIGNvbnRleHQgdXAgb3IgZG93blxuXHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0UGFyZW50KCk7XG5cdFx0bGV0IGNvbnRleHRNb3ZlZCA9IGZhbHNlO1xuXHRcdGxldCBtb3ZlUHJvbWlzZSA9IG51bGw7XG5cdFx0aWYgKG1vdmVVcCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKC0xKTtcblx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBtb3ZlZENvbnRleHQubW92ZSh7IG5leHRTaWJsaW5nOiBwcmV2aW91c1NpYmxpbmcsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmV4dFNpYmxpbmcgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFNpYmxpbmcoMSk7XG5cdFx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBuZXh0U2libGluZy5tb3ZlKHsgbmV4dFNpYmxpbmc6IG1vdmVkQ29udGV4dCwgcGFyZW50OiBwYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRjb250ZXh0TW92ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFttb3ZlUHJvbWlzZSwgdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbihtb3ZlZENvbnRleHQpXSk7XG5cblx0XHQvLyBTY3JvbGwgdG8gdGhlIG5ldyBwb3NpdGlvblxuXHRcdGNvbnN0IG5ld0luZGV4ID0gbW92ZWRDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRNb3ZlZCAmJiBuZXdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5ld0luZGV4ID49IDApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0bWRjVGFibGUuc2Nyb2xsVG9JbmRleChuZXdJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZGNUYWJsZS5mb2N1c1JvdyhuZXdJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1kY1RhYmxlLnNldEJ1c3koZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ29weUFjdGlvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDb3B5QWN0aW9uIG9yIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0bW92ZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFjdGlvbjogXCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvblwiIHwgXCJDb3B5QWN0aW9uXCJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb3ZlZENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHRhcmdldE9iamVjdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0O1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlID8/IChjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCBhcyBFbnRpdHlTZXQpLmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uW2FjdGlvbl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFjdGlvbk5hbWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG1vdmVkQ29udGV4dCk7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKHNpZGVFZmZlY3RzLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYWZlbHkgY2hlY2tzIGlmIG1vdmluZyBhIG5vZGUgaXMgYWxsb3dlZC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHRcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbGxvd2VkXG5cdCAqL1xuXHRwcml2YXRlIHNhZmVJc01vdmVBbGxvd2VkKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkLFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGFsbG93ZWQgPSBjdXN0b21GdW5jdGlvbihtb3ZlZENvbnRleHQsIHBhcmVudENvbnRleHQpID09PSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZXhlY3V0ZSBmdW5jdGlvbiByZWxhdGVkIHRvIGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRhbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaXMgZHJvcCBcImJldHdlZW5cIiBpcyBhbGxvd2VkIGJ5IGN1c3RvbSBsb2dpYyBmb3IgYSBnaXZlbiB0YXJnZXRDb250ZXh0LlxuXHQgKiBAcGFyYW0gY3VzdG9tRnVuY3Rpb25cblx0ICogQHBhcmFtIGRyYWdnZWRDb250ZXh0XG5cdCAqIEBwYXJhbSB0YXJnZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBpc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoXG5cdFx0Y3VzdG9tRnVuY3Rpb246IChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuLFxuXHRcdGRyYWdnZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdHRhcmdldENvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzQWxsb3dlZCA9IHRydWU7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGJlZm9yZSB0YXJnZXRDb250ZXh0XG5cdFx0Y29uc3QgY29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZSh0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRCZWZvcmUgPSBjb250ZXh0QmVmb3JlID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRCZWZvcmUuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQmVmb3JlID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoY29udGV4dEJlZm9yZSwgcGFyZW50QmVmb3JlLCB0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpKTtcblxuXHRcdC8vIERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlIGRyb3AgYWZ0ZXIgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHBhcmVudEFmdGVyID0gY29udGV4dEFmdGVyID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRBZnRlci5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBwYXJhbXNBZnRlciA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKHRhcmdldENvbnRleHQsIHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCksIGNvbnRleHRBZnRlciwgcGFyZW50QWZ0ZXIpO1xuXG5cdFx0Ly8gSWYgcGFyYW1zQmVmb3JlIG9yIHBhcmFtc0FmdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChiZWNhdXNlIHBhcmVudHMgYXJlIG5vdCBsb2FkZWQpLCB3ZSBhbGxvdyBkcm9wIGJldHdlZW4gYW5kIGRvIHRoZSByZWFsIGNoZWNrIGluIG9uRHJvcERvY3VtZW50XG5cdFx0aWYgKHBhcmFtc0JlZm9yZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc0FmdGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbXNCZWZvcmUucGFyZW50ID09PSBwYXJhbXNBZnRlci5wYXJlbnQpIHtcblx0XHRcdFx0Ly8gRHJvcHBpbmcgYmVmb3JlIG9yIGFmdGVyIHdpbGwgbW92ZSB1bmRlciB0aGUgc2FtZSBwYXJlbnQgLS0+IHdlIGNhbGwgdGhlIGN1c3RvbSBsb2dpYyBvbmx5IG9uY2Vcblx0XHRcdFx0aXNBbGxvd2VkID0gdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQXMgdGhlIE1EQyB0YWJsZSBjYW5ub3QgZGlzYWJsZSBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdGVseSwgd2UgZGlzYWJsZSBkcm9wIGJldHdlZW4gb25seSBpZiBib3RoIGRyb3AgYmVmb3JlIGFuZCBhZnRlciBhcmUgZm9yYmlkZGVuXG5cdFx0XHRcdGlzQWxsb3dlZCA9XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpIHx8XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0FmdGVyLnBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGJlZm9yZSBhIGdpdmVuIGNvbnRleHQgaW4gYSBMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgYmVmb3JlLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRCZWZvcmUoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gY29udGV4dEluZGV4ID09PSAwXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggLSAxO1xuXHRcdFx0ICB9KSA/PyBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgdGhhdCBpcyBwbGFjZWQgYWZ0ZXIgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGFmdGVyLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRBZnRlcihjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRleHRJbmRleCA9IGNvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRpZiAoY29udGV4dEluZGV4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3JcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHJldHVybiAoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjdHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggKyAxO1xuXHRcdFx0fSkgPz8gbnVsbFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgZHJvcCBiZXR3ZWVuIDIgbm9kZXM6IHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgbmV4dCBzaWJsaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dEJlZm9yZSBDb250ZXh0IGFmdGVyIHdoaWNoIHRoZSBkcm9wIGlzIGRvbmVcblx0ICogQHBhcmFtIHBhcmVudEJlZm9yZSBQYXJlbnQgb2YgY29udGV4dEJlZm9yZSAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHBhcmFtIGNvbnRleHRBZnRlciBDb250ZXh0IGJlZm9yZSB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRBZnRlciBQYXJlbnQgb2YgY29udGV4dEFmdGVyICh1bmRlZmluZWQgaWYgbm90IGtub3duKVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZywgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhcblx0XHRjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbCxcblx0XHRwYXJlbnRCZWZvcmU6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QWZ0ZXI6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IHsgcGFyZW50OiBDb250ZXh0IHwgbnVsbDsgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dEJlZm9yZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBiZWZvcmUgZmlyc3Qgbm9kZSAtLT4gbW92ZSBhcyBmaXJzdCByb290IG5vZGVcblx0XHRcdHJldHVybiB7IHBhcmVudDogbnVsbCwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dEFmdGVyID09PSBudWxsKSB7XG5cdFx0XHQvLyBEcm9wIGFmdGVyIGxhc3Qgbm9kZSAtLT4gbW92ZSBhcyBuZXh0IHNpYmxpbmcgb2YgdGhlIGxhc3Qgbm9kZVxuXHRcdFx0cmV0dXJuIHBhcmVudEJlZm9yZSAhPT0gdW5kZWZpbmVkID8geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IG51bGwgfSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEFmdGVyID09PSBjb250ZXh0QmVmb3JlKSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gYSBwYXJlbnQgYW5kIGl0cyBmaXJzdCBjaGlsZCAtLT4gbW92ZSBhcyBmaXJzdCBjaGlsZCBvZiB0aGUgcGFyZW50XG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IGNvbnRleHRCZWZvcmUsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudEFmdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIElmIG9uZSBvZiB0aGUgcGFyZW50IGlzIG5vdCBrbm93biwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGFyZW50QmVmb3JlID09PSBwYXJlbnRBZnRlcikge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgc2libGluZ3Ncblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vZGVYXG5cdFx0XHQvLyAgLi4uLlxuXHRcdFx0Ly8gICAgIHwtLSBjb250ZXh0QmVmb3JlXG5cdFx0XHQvLyBjb250ZXh0QWZ0ZXJcblx0XHRcdC8vIC0tPiBNb3ZlIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgY29udGV4dEJlZm9yZVxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBkcm9wIGEgY29udGV4dCBvbiBvciBiZXR3ZWVuIDIgbm9kZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBtb3ZlIFByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZHJvcENvbnRleHQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgY29udGV4dDogQ29udGV4dCwgaW5mbzogRHJvcEluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBpc01vdmVBbGxvd2VkSW5mb1xuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGU6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGlzVGFibGVTb3J0ZWQgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgbW92ZUNvbnRleHQgPSBhc3luYyAocGFyZW50OiBDb250ZXh0IHwgbnVsbCwgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Ly8gV2UgY2hlY2sgaWYgdGhlIG1vdmUgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgKGlmIGFueSksIGFzIHRoaXMgY2hlY2sgbWlnaHRcblx0XHRcdC8vIG5vdCBoYXZlIGJlZW4gZG9uZSBpbiBvbkRyYWdFbnRlckRvY3VtZW50IGlmIHRoZSBwYXJlbnQgd2FzIG5vdCBsb2FkZWQgeWV0LlxuXHRcdFx0aWYgKHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGNvbnRleHQsIHBhcmVudCkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRhYmxlIGlzIHNvcnRlZCwgd2UgaWdub3JlIHRoZSBzaWJsaW5nIGFzIHRoZSBwb3NpdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQubW92ZSh7IHBhcmVudCwgbmV4dFNpYmxpbmc6IGlzVGFibGVTb3J0ZWQgPyB1bmRlZmluZWQgOiBuZXh0U2libGluZyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1RBQkxFX0RST1BfTk9UX0FMTE9XRURcIikpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5wb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk9uKSB7XG5cdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KGluZm8ucGFyZW50Q29udGV4dCkuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRjb25zdCBbcGFyZW50QmVmb3JlLCBwYXJlbnRBZnRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGluZm8uY29udGV4dEJlZm9yZT8ucmVxdWVzdFBhcmVudCgpID8/IG51bGwsXG5cdFx0XHRcdGluZm8uY29udGV4dEFmdGVyPy5yZXF1ZXN0UGFyZW50KCkgPz8gbnVsbFxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhpbmZvLmNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgaW5mby5jb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKSE7XG5cdFx0XHRyZXR1cm4gbW92ZUNvbnRleHQocGFyYW1zLnBhcmVudCwgcGFyYW1zLm5leHRTaWJsaW5nKS5maW5hbGx5KCgpID0+IHRhYmxlLnNldEJ1c3koZmFsc2UpKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7TUFxQktBLFlBQVksMEJBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBQSxPQUFaQSxZQUFZO0VBQUEsRUFBWkEsWUFBWTtFQUFBLElBVUlDLGNBQWM7SUFBQSxTQUFBQSxlQUFBO0lBQUFDLFFBQUEsR0FBQUQsY0FBQTtJQUFBLElBQUFFLE1BQUEsR0FBQUYsY0FBQSxDQUFBRyxTQUFBO0lBQUFELE1BQUEsQ0FD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
|
|
501
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsInBhc3RlQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImZpbmQiLCJ0b29sYmFyQWN0aW9uIiwidGVzdCIsImdldEFjdGlvbiIsImdldElkIiwic2V0VGltZW91dCIsImZvY3VzIiwiX29uRHJhZ0VudGVyRG9jdW1lbnQiLCJ1aTVFdmVudCIsImRyYWdnZWRDb250ZXh0IiwiZ2V0UGFyYW1ldGVyIiwiZ2V0Q29udGVudCIsImdldFJvd0JpbmRpbmciLCJnZXRCaW5kaW5nIiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXRDb250ZXh0IiwiaXNBbmNlc3Rvck9mIiwiZGlzYWJsZWRCZXR3ZWVuIiwiZGlzYWJsZWRPbiIsInRhYmxlRGVmaW5pdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTW92ZUFsbG93ZWRJbmZvIiwiY29udHJvbCIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiY3VzdG9tRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJnZXRDdXN0b21GdW5jdGlvbiIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwidW5kZWZpbmVkIiwic2FmZUlzTW92ZUFsbG93ZWQiLCJhbm5vdGF0aW9uIiwiYWxsb3dEcm9wQmV0d2Vlbk5vZGVzIiwiTWF0aCIsImFicyIsImdldEluZGV4IiwiZ2V0TGVuZ3RoIiwiY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkIiwiaXNEcm9wQmV0d2VlbkFsbG93ZWRGb3JEcmFnIiwiYWxsb3dlZERyb3BQb3NpdGlvbiIsIk9uT3JCZXR3ZWVuIiwiT24iLCJCZXR3ZWVuIiwic2V0RHJvcFBvc2l0aW9uIiwiX29uRHJhZ1N0YXJ0RG9jdW1lbnQiLCJjb250ZXh0IiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiZGlzYWJsZURyYWciLCJpc1JlbGF0aXZlIiwiaXNNb3ZhYmxlSW5mbyIsImlzTm9kZU1vdmFibGUiLCJfZXJyb3IiLCJfb25Ecm9wRG9jdW1lbnQiLCJCdXN5TG9ja2VyIiwibG9jayIsImRyb3BwZWRPbkNvbnRleHQiLCJkcm9wSW5mbyIsInBvc2l0aW9uIiwicGFyZW50Q29udGV4dCIsImNvbnRleHRCZWZvcmUiLCJjb250ZXh0QWZ0ZXIiLCJnZXRDb250ZXh0QWZ0ZXIiLCJnZXRDb250ZXh0QmVmb3JlIiwibW92ZWRDb250ZXh0IiwiUHJvbWlzZSIsImFsbCIsImRyb3BDb250ZXh0IiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24iLCJnZXRUcmFuc2xhdGVkVGV4dCIsIm1lc3NhZ2UiLCJ1bmxvY2siLCJfb25Db2xsYXBzZUV4cGFuZE5vZGUiLCJfdWk1RXZlbnQiLCJleHBhbmQiLCJwcm9taXNlQXJyYXkiLCJtYXAiLCJzaW5nbGVDb250ZXh0IiwiaXNFeHBhbmRlZCIsImNvbGxhcHNlIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIl9vbk1vdmVVcERvd24iLCJtb3ZlVXAiLCJhcmd1bWVudHMiLCJtZGNUYWJsZSIsInNldEJ1c3kiLCJyZXF1ZXN0UGFyZW50IiwiY29udGV4dE1vdmVkIiwibW92ZVByb21pc2UiLCJwcmV2aW91c1NpYmxpbmciLCJyZXF1ZXN0U2libGluZyIsIm1vdmUiLCJuZXh0U2libGluZyIsInBhcmVudCIsIm5ld0luZGV4Iiwic2Nyb2xsVG9JbmRleCIsImZvY3VzUm93IiwiX3JlcXVlc3RTaWRlRWZmZWN0c0ZvckhpZXJhcmNoeUFjdGlvbnMiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JDb3B5QWN0aW9uIiwiZW50aXR5UGF0aCIsImRhdGEiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsInRhcmdldE9iamVjdCIsImdldENvbnRleHQiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImVudGl0eVR5cGUiLCJ0YXJnZXRUeXBlIiwiYWN0aW9uTmFtZSIsImFubm90YXRpb25zIiwiSGllcmFyY2h5IiwiaGllcmFyY2h5UXVhbGlmaWVyIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJzaWRlRWZmZWN0cyIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JPRGF0YUFjdGlvbiIsImFsbG93ZWQiLCJpc0FsbG93ZWQiLCJwYXJlbnRCZWZvcmUiLCJwYXJhbXNCZWZvcmUiLCJnZXREcm9wQmV0d2VlblBhcmFtZXRlcnMiLCJwYXJlbnRBZnRlciIsInBhcmFtc0FmdGVyIiwiY29udGV4dEluZGV4IiwiRXJyb3IiLCJsaXN0QmluZGluZyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImN0eCIsImluZm8iLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImlzVGFibGVTb3J0ZWQiLCJtb3ZlQ29udGV4dCIsImZpbmFsbHkiLCJwYXJhbXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlSGllcmFyY2h5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgdHlwZSBJSW50ZXJmYWNlV2l0aE1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgeyB0eXBlIEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1lbnUgZnJvbSBcInNhcC9tL01lbnVcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBEcmFnRHJvcEluZm8gZnJvbSBcInNhcC91aS9jb3JlL2RuZC9EcmFnRHJvcEluZm9cIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCIuLi9UYWJsZVJ1bnRpbWVcIjtcblxuZW51bSBEcm9wUG9zaXRpb24ge1xuXHRPbiA9IFwiT25cIixcblx0QmV0d2VlbiA9IFwiQmV0d2VlblwiLFxuXHRPbk9yQmV0d2VlbiA9IFwiT25PckJldHdlZW5cIlxufVxuXG50eXBlIERyb3BJbmZvcm1hdGlvbiA9XG5cdHwgeyBwb3NpdGlvbjogRHJvcFBvc2l0aW9uLk9uOyBwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB9XG5cdHwgeyBwb3NpdGlvbjogRHJvcFBvc2l0aW9uLkJldHdlZW47IGNvbnRleHRCZWZvcmU6IENvbnRleHQgfCBudWxsOyBjb250ZXh0QWZ0ZXI6IENvbnRleHQgfCBudWxsIH07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlSGllcmFyY2h5IGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8gaW1wbGVtZW50IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluXG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgQ3V0L0NvcHkgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gZXZ0IFRoZSBVSTUgZXZlbnRcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHRfb25Db3B5Q3V0KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksIGV2dDogVUk1RXZlbnQ8e30sIFVJNUVsZW1lbnQ+LCBmb3JDb250ZXh0TWVudTogYm9vbGVhbiwgYWN0aW9uOiBcIkNvcHlcIiB8IFwiQ3V0XCIpOiB2b2lkIHtcblx0XHRsZXQgdGFibGU6IE1EQ1RhYmxlO1xuXHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdHRhYmxlID0gZXZ0LmdldFNvdXJjZSgpLmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBtZW51ID0gZXZ0LmdldFNvdXJjZSgpLmdldFBhcmVudCgpIGFzIE1lbnU7XG5cdFx0XHR0YWJsZSA9IG1lbnUuZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSB0aGlzLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0XHRpZiAoc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRMb2cuZXJyb3IoYE11bHRpICR7YWN0aW9uID09PSBcIkN1dFwiID8gXCJjdXR0aW5nXCIgOiBcImNvcHlpbmdcIn0gaXMgbm90IHN1cHBvcnRlZGApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9wYXN0YWJsZUNvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9sYXN0QWN0aW9uXCIsIGFjdGlvbik7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3coUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9DVVRDT1BZX1JFQURZXCIpKTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51IHx8IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiKSA+IDApIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbih0YWJsZSk7XG5cdFx0XHR0YWJsZS5maXJlU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fSBlbHNlIGlmIChmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0Ly8gVXNpbmcgdGhlIGNvbnRleHQgbWVudSBpbXBsaWNpdGx5IGRlZmluZXMgYSBjb250ZXh0IGZvciB0aGUgYWN0aW9uXG5cdFx0XHR0YWJsZS5maXJlU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fVxuXG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9jb3B5RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0Y29uc3QgcGFzdGVCdXR0b24gPSAodGFibGUuZ2V0QWN0aW9ucygpIGFzIEFjdGlvblRvb2xiYXJBY3Rpb25bXSkuZmluZCgodG9vbGJhckFjdGlvbikgPT5cblx0XHRcdC86OlBhc3RlJC8udGVzdCh0b29sYmFyQWN0aW9uLmdldEFjdGlvbigpLmdldElkKCkpXG5cdFx0KTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHBhc3RlQnV0dG9uPy5mb2N1cygpO1xuXHRcdH0sIDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdGFibGUgcm93LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdFbnRlckRvY3VtZW50KFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0dWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQ7IGRyb3BQb3NpdGlvbjogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiT25cIiB9LCBEcmFnRHJvcEluZm8+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRyYWdnZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRpZiAodGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpICE9PSBkcmFnZ2VkQ29udGV4dC5nZXRCaW5kaW5nKCkpIHtcblx0XHRcdC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IG51bGwgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRpZiAoZHJhZ2dlZENvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpKSB7XG5cdFx0XHQvLyBUaGUgYW5jZXN0b3IgaXMgZHJvcHBlZCBvbiBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkQmV0d2VlbiA9IGZhbHNlO1xuXHRcdGxldCBkaXNhYmxlZE9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCkgYXMgQ29udHJvbFxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYgLT4gZHJvcCBhcyByb290IG5vZGUpXG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBudWxsKTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGVkT24gPSAhdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHRhcmdldENvbnRleHQpO1xuXHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzICE9PSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSEgLSBkcmFnZ2VkQ29udGV4dC5nZXRJbmRleCgpISkgPT09IDEgJiZcblx0XHRcdFx0ISh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IDAgJiYgdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIkJlZm9yZVwiKSAmJlxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIC0gMSAmJlxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgZHJvcCBiZXR3ZWVuIG5vZGUgaXMgYWxsb3dlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgcm9vdCBub2RlIGFuZCBpZiB0aGUgdGFibGUgc3VwcG9ydHMgY2hhbmdlU2libGluZ0ZvclJvb3RzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkaXNhYmxlZEJldHdlZW4gJiZcblx0XHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCAmJlxuXHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGN1c3RvbSBsb2dpYyBmb3IgZHJvcCBiZXR3ZWVuIGlmIHRoZXJlJ3Mgc29tZSwgYW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRhYmxlIGxldmVsXG5cdFx0XHRpZiAoY3VzdG9tRnVuY3Rpb24gJiYgIWRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSAhdGhpcy5pc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLk9uT3JCZXR3ZWVuO1xuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4gJiYgZGlzYWJsZWRPbikge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT24pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQmV0d2Vlbjtcblx0XHR9XG5cdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuc2V0RHJvcFBvc2l0aW9uKGFsbG93ZWREcm9wUG9zaXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0cyB0aGUgZHJhZyBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0X29uRHJhZ1N0YXJ0RG9jdW1lbnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgdWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZyB0byB1cGRhdGUgcmVzdHJpY3Rpb25zXG5cdFx0bGV0IGRpc2FibGVEcmFnID0gISF1cGRhdGFibGVQcm9wZXJ0eVBhdGggJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaGFzIG5vIGFzc29jaWF0ZWQgZHJhZnRcblx0XHRpZiAoIWRpc2FibGVEcmFnICYmICEoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBjdXN0b20gbG9naWMgaWYgdGhlcmUncyBvbmVcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmFibGVJbmZvICYmICFkaXNhYmxlRHJhZykge1xuXHRcdFx0XHRkaXNhYmxlRHJhZyA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZURyYWcpIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcmFnZ2FibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERyb3BzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqIEByZXR1cm5zIFRoZSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfb25Ecm9wRG9jdW1lbnQoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSxcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcm9wcGVkT25Db250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0XHRsZXQgZHJvcEluZm86IERyb3BJbmZvcm1hdGlvbjtcblx0XHRcdGlmIChkcm9wcGVkT25Db250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdC8vIFRoZSBkcm9wIGlzIGRvbmUgb24gdGhlIHRhYmxlIGl0c2VsZiAtPiBkcm9wIGFzIHJvb3Qgbm9kZSlcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IG51bGwgfTtcblx0XHRcdH0gZWxzZSBpZiAodWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBEcm9wUG9zaXRpb24uT24pIHtcblx0XHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IGRyb3BwZWRPbkNvbnRleHQgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRcdGxldCBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0bGV0IGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGw7XG5cdFx0XHRcdGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHRcdGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKGRyb3BwZWRPbkNvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gZHJvcHBlZE9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuLCBjb250ZXh0QWZ0ZXIsIGNvbnRleHRCZWZvcmUgfTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmRyb3BDb250ZXh0KG1vdmVkQ29udGV4dCwgZHJvcEluZm8pLCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uKG1vdmVkQ29udGV4dCldKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVEFCTEVEUk9QX0ZBSUxFRFwiLCBbXCJcIl0pKTtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsLiBcIiArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBjb2xsYXBzZS9leHBhbmQgZnJvbSB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBleHBhbmRcblx0ICovXG5cdGFzeW5jIF9vbkNvbGxhcHNlRXhwYW5kTm9kZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBleHBhbmQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKGV4cGFuZCkge1xuXHRcdFx0Y29uc3QgcHJvbWlzZUFycmF5ID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIGZhbHNlIHNwZWNpZmljYWxseTsgdW5kZWZpbmVkIG1lYW5zIHRoZSBub2RlIGNhbm5vdCBleHBhbmQvY29sbGFwc2Vcblx0XHRcdFx0aWYgKHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBkdWUgdG8gbW9kZWwgbGltaXRhdGlvbi5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNvbGxhcHNlIGEgbm9kZSBiZWZvcmUgZXhwYW5kaW5nIGl0IHRvIGVuc3VyZSB3ZSBleHBhbmQgaXQgY29tcGxldGVseS5cblx0XHRcdFx0XHQvLyBXaWxsIGJlIGNoYW5nZWQgb25jZSB0aGUgbW9kZWwgZml4ZXMgdGhlIGlzc3VlLlxuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0YXdhaXQgc2luZ2xlQ29udGV4dC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2luZ2xlQ29udGV4dC5leHBhbmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLm1hcChhc3luYyAoc2luZ2xlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgbWV0aG9kIHRvIG1vdmUgYSByb3cgdXAgb3IgZG93biBpbiBhIFRyZWUgdGFibGUuXG5cdCAqIEBwYXJhbSBfdWk1RXZlbnRcblx0ICogQHBhcmFtIG1vdmVVcCBUcnVlIGZvciBtb3ZlIHVwLCBmYWxzZSBmb3IgbW92ZSBkb3duXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0YXN5bmMgX29uTW92ZVVwRG93bih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBtb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0bWRjVGFibGUuc2V0QnVzeSh0cnVlKTtcblxuXHRcdC8vIE1vdmUgdGhlIGNvbnRleHQgdXAgb3IgZG93blxuXHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0UGFyZW50KCk7XG5cdFx0bGV0IGNvbnRleHRNb3ZlZCA9IGZhbHNlO1xuXHRcdGxldCBtb3ZlUHJvbWlzZSA9IG51bGw7XG5cdFx0aWYgKG1vdmVVcCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKC0xKTtcblx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBtb3ZlZENvbnRleHQubW92ZSh7IG5leHRTaWJsaW5nOiBwcmV2aW91c1NpYmxpbmcsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmV4dFNpYmxpbmcgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFNpYmxpbmcoMSk7XG5cdFx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBuZXh0U2libGluZy5tb3ZlKHsgbmV4dFNpYmxpbmc6IG1vdmVkQ29udGV4dCwgcGFyZW50OiBwYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRjb250ZXh0TW92ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFttb3ZlUHJvbWlzZSwgdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbihtb3ZlZENvbnRleHQpXSk7XG5cblx0XHQvLyBTY3JvbGwgdG8gdGhlIG5ldyBwb3NpdGlvblxuXHRcdGNvbnN0IG5ld0luZGV4ID0gbW92ZWRDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRNb3ZlZCAmJiBuZXdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5ld0luZGV4ID49IDApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0bWRjVGFibGUuc2Nyb2xsVG9JbmRleChuZXdJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZGNUYWJsZS5mb2N1c1JvdyhuZXdJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1kY1RhYmxlLnNldEJ1c3koZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ29weUFjdGlvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDb3B5QWN0aW9uIG9yIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0bW92ZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFjdGlvbjogXCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvblwiIHwgXCJDb3B5QWN0aW9uXCJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb3ZlZENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHRhcmdldE9iamVjdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0O1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlID8/IChjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCBhcyBFbnRpdHlTZXQpLmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uW2FjdGlvbl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFjdGlvbk5hbWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG1vdmVkQ29udGV4dCk7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKHNpZGVFZmZlY3RzLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYWZlbHkgY2hlY2tzIGlmIG1vdmluZyBhIG5vZGUgaXMgYWxsb3dlZC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHRcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbGxvd2VkXG5cdCAqL1xuXHRwcml2YXRlIHNhZmVJc01vdmVBbGxvd2VkKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkLFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGFsbG93ZWQgPSBjdXN0b21GdW5jdGlvbihtb3ZlZENvbnRleHQsIHBhcmVudENvbnRleHQpID09PSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZXhlY3V0ZSBmdW5jdGlvbiByZWxhdGVkIHRvIGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRhbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaXMgZHJvcCBcImJldHdlZW5cIiBpcyBhbGxvd2VkIGJ5IGN1c3RvbSBsb2dpYyBmb3IgYSBnaXZlbiB0YXJnZXRDb250ZXh0LlxuXHQgKiBAcGFyYW0gY3VzdG9tRnVuY3Rpb25cblx0ICogQHBhcmFtIGRyYWdnZWRDb250ZXh0XG5cdCAqIEBwYXJhbSB0YXJnZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBpc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoXG5cdFx0Y3VzdG9tRnVuY3Rpb246IChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuLFxuXHRcdGRyYWdnZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdHRhcmdldENvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzQWxsb3dlZCA9IHRydWU7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGJlZm9yZSB0YXJnZXRDb250ZXh0XG5cdFx0Y29uc3QgY29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZSh0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRCZWZvcmUgPSBjb250ZXh0QmVmb3JlID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRCZWZvcmUuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQmVmb3JlID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoY29udGV4dEJlZm9yZSwgcGFyZW50QmVmb3JlLCB0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpKTtcblxuXHRcdC8vIERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlIGRyb3AgYWZ0ZXIgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHBhcmVudEFmdGVyID0gY29udGV4dEFmdGVyID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRBZnRlci5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBwYXJhbXNBZnRlciA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKHRhcmdldENvbnRleHQsIHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCksIGNvbnRleHRBZnRlciwgcGFyZW50QWZ0ZXIpO1xuXG5cdFx0Ly8gSWYgcGFyYW1zQmVmb3JlIG9yIHBhcmFtc0FmdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChiZWNhdXNlIHBhcmVudHMgYXJlIG5vdCBsb2FkZWQpLCB3ZSBhbGxvdyBkcm9wIGJldHdlZW4gYW5kIGRvIHRoZSByZWFsIGNoZWNrIGluIG9uRHJvcERvY3VtZW50XG5cdFx0aWYgKHBhcmFtc0JlZm9yZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc0FmdGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbXNCZWZvcmUucGFyZW50ID09PSBwYXJhbXNBZnRlci5wYXJlbnQpIHtcblx0XHRcdFx0Ly8gRHJvcHBpbmcgYmVmb3JlIG9yIGFmdGVyIHdpbGwgbW92ZSB1bmRlciB0aGUgc2FtZSBwYXJlbnQgLS0+IHdlIGNhbGwgdGhlIGN1c3RvbSBsb2dpYyBvbmx5IG9uY2Vcblx0XHRcdFx0aXNBbGxvd2VkID0gdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQXMgdGhlIE1EQyB0YWJsZSBjYW5ub3QgZGlzYWJsZSBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdGVseSwgd2UgZGlzYWJsZSBkcm9wIGJldHdlZW4gb25seSBpZiBib3RoIGRyb3AgYmVmb3JlIGFuZCBhZnRlciBhcmUgZm9yYmlkZGVuXG5cdFx0XHRcdGlzQWxsb3dlZCA9XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpIHx8XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0FmdGVyLnBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGJlZm9yZSBhIGdpdmVuIGNvbnRleHQgaW4gYSBMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgYmVmb3JlLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRCZWZvcmUoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gY29udGV4dEluZGV4ID09PSAwXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggLSAxO1xuXHRcdFx0ICB9KSA/PyBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgdGhhdCBpcyBwbGFjZWQgYWZ0ZXIgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGFmdGVyLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRBZnRlcihjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRleHRJbmRleCA9IGNvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRpZiAoY29udGV4dEluZGV4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3JcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHJldHVybiAoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjdHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggKyAxO1xuXHRcdFx0fSkgPz8gbnVsbFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgZHJvcCBiZXR3ZWVuIDIgbm9kZXM6IHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgbmV4dCBzaWJsaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dEJlZm9yZSBDb250ZXh0IGFmdGVyIHdoaWNoIHRoZSBkcm9wIGlzIGRvbmVcblx0ICogQHBhcmFtIHBhcmVudEJlZm9yZSBQYXJlbnQgb2YgY29udGV4dEJlZm9yZSAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHBhcmFtIGNvbnRleHRBZnRlciBDb250ZXh0IGJlZm9yZSB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRBZnRlciBQYXJlbnQgb2YgY29udGV4dEFmdGVyICh1bmRlZmluZWQgaWYgbm90IGtub3duKVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZywgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhcblx0XHRjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbCxcblx0XHRwYXJlbnRCZWZvcmU6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QWZ0ZXI6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IHsgcGFyZW50OiBDb250ZXh0IHwgbnVsbDsgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dEJlZm9yZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBiZWZvcmUgZmlyc3Qgbm9kZSAtLT4gbW92ZSBhcyBmaXJzdCByb290IG5vZGVcblx0XHRcdHJldHVybiB7IHBhcmVudDogbnVsbCwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dEFmdGVyID09PSBudWxsKSB7XG5cdFx0XHQvLyBEcm9wIGFmdGVyIGxhc3Qgbm9kZSAtLT4gbW92ZSBhcyBuZXh0IHNpYmxpbmcgb2YgdGhlIGxhc3Qgbm9kZVxuXHRcdFx0cmV0dXJuIHBhcmVudEJlZm9yZSAhPT0gdW5kZWZpbmVkID8geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IG51bGwgfSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEFmdGVyID09PSBjb250ZXh0QmVmb3JlKSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gYSBwYXJlbnQgYW5kIGl0cyBmaXJzdCBjaGlsZCAtLT4gbW92ZSBhcyBmaXJzdCBjaGlsZCBvZiB0aGUgcGFyZW50XG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IGNvbnRleHRCZWZvcmUsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudEFmdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIElmIG9uZSBvZiB0aGUgcGFyZW50IGlzIG5vdCBrbm93biwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGFyZW50QmVmb3JlID09PSBwYXJlbnRBZnRlcikge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgc2libGluZ3Ncblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vZGVYXG5cdFx0XHQvLyAgLi4uLlxuXHRcdFx0Ly8gICAgIHwtLSBjb250ZXh0QmVmb3JlXG5cdFx0XHQvLyBjb250ZXh0QWZ0ZXJcblx0XHRcdC8vIC0tPiBNb3ZlIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgY29udGV4dEJlZm9yZVxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBkcm9wIGEgY29udGV4dCBvbiBvciBiZXR3ZWVuIDIgbm9kZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBtb3ZlIFByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZHJvcENvbnRleHQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgY29udGV4dDogQ29udGV4dCwgaW5mbzogRHJvcEluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBpc01vdmVBbGxvd2VkSW5mb1xuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGU6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGlzVGFibGVTb3J0ZWQgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgbW92ZUNvbnRleHQgPSBhc3luYyAocGFyZW50OiBDb250ZXh0IHwgbnVsbCwgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Ly8gV2UgY2hlY2sgaWYgdGhlIG1vdmUgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgKGlmIGFueSksIGFzIHRoaXMgY2hlY2sgbWlnaHRcblx0XHRcdC8vIG5vdCBoYXZlIGJlZW4gZG9uZSBpbiBvbkRyYWdFbnRlckRvY3VtZW50IGlmIHRoZSBwYXJlbnQgd2FzIG5vdCBsb2FkZWQgeWV0LlxuXHRcdFx0aWYgKHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGNvbnRleHQsIHBhcmVudCkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRhYmxlIGlzIHNvcnRlZCwgd2UgaWdub3JlIHRoZSBzaWJsaW5nIGFzIHRoZSBwb3NpdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQubW92ZSh7IHBhcmVudCwgbmV4dFNpYmxpbmc6IGlzVGFibGVTb3J0ZWQgPyB1bmRlZmluZWQgOiBuZXh0U2libGluZyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1RBQkxFX0RST1BfTk9UX0FMTE9XRURcIikpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5wb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk9uKSB7XG5cdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KGluZm8ucGFyZW50Q29udGV4dCkuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRjb25zdCBbcGFyZW50QmVmb3JlLCBwYXJlbnRBZnRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGluZm8uY29udGV4dEJlZm9yZT8ucmVxdWVzdFBhcmVudCgpID8/IG51bGwsXG5cdFx0XHRcdGluZm8uY29udGV4dEFmdGVyPy5yZXF1ZXN0UGFyZW50KCkgPz8gbnVsbFxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhpbmZvLmNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgaW5mby5jb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKSE7XG5cdFx0XHRyZXR1cm4gbW92ZUNvbnRleHQocGFyYW1zLnBhcmVudCwgcGFyYW1zLm5leHRTaWJsaW5nKS5maW5hbGx5KCgpID0+IHRhYmxlLnNldEJ1c3koZmFsc2UpKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7TUFzQktBLFlBQVksMEJBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBQSxPQUFaQSxZQUFZO0VBQUEsRUFBWkEsWUFBWTtFQUFBLElBVUlDLGNBQWM7SUFBQSxTQUFBQSxlQUFBO0lBQUFDLFFBQUEsR0FBQUQsY0FBQTtJQUFBLElBQUFFLE1BQUEsR0FBQUYsY0FBQSxDQUFBRyxTQUFBO0lBQUFELE1BQUEsQ0FDbENFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFILE1BQUEsQ0FLQUksVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQXFDQyxHQUE2QixFQUFFQyxjQUF1QixFQUFFQyxNQUFzQixFQUFRO01BQ3BJLElBQUlDLEtBQWU7TUFDbkIsSUFBSSxDQUFDRixjQUFjLEVBQUU7UUFDcEJFLEtBQUssR0FBR0gsR0FBRyxDQUFDSSxTQUFTLENBQUMsQ0FBQyxDQUFDQyxTQUFTLENBQUMsQ0FBYTtNQUNoRCxDQUFDLE1BQU07UUFDTixNQUFNQyxJQUFJLEdBQUdOLEdBQUcsQ0FBQ0ksU0FBUyxDQUFDLENBQUMsQ0FBQ0MsU0FB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
|
|
@@ -14,6 +14,7 @@ import type Control from "sap/ui/core/Control";
|
|
|
14
14
|
import type UI5Element from "sap/ui/core/Element";
|
|
15
15
|
import type DragDropInfo from "sap/ui/core/dnd/DragDropInfo";
|
|
16
16
|
import type MDCTable from "sap/ui/mdc/Table";
|
|
17
|
+
import type ActionToolbarAction from "sap/ui/mdc/actiontoolbar/ActionToolbarAction";
|
|
17
18
|
import type Context from "sap/ui/model/odata/v4/Context";
|
|
18
19
|
import type ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
19
20
|
import { type ITableBlock } from "../TableAPI";
|
|
@@ -60,12 +61,21 @@ export default class TableHierarchy implements IInterfaceWithMixin {
|
|
|
60
61
|
if (!forContextMenu || internalContext.getProperty("numberOfSelectedContexts") > 0) {
|
|
61
62
|
TableRuntime.clearSelection(table);
|
|
62
63
|
table.fireSelectionChange();
|
|
64
|
+
} else if (forContextMenu) {
|
|
65
|
+
// Using the context menu implicitly defines a context for the action
|
|
66
|
+
table.fireSelectionChange();
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
internalContext.setProperty("nodeUpdatesInfo/cutEnablement", false);
|
|
66
70
|
internalContext.setProperty("contextmenu/nodeUpdatesInfo/cutEnablement", false);
|
|
67
71
|
internalContext.setProperty("nodeUpdatesInfo/copyEnablement", false);
|
|
68
72
|
internalContext.setProperty("contextmenu/nodeUpdatesInfo/copyEnablement", false);
|
|
73
|
+
const pasteButton = (table.getActions() as ActionToolbarAction[]).find((toolbarAction) =>
|
|
74
|
+
/::Paste$/.test(toolbarAction.getAction().getId())
|
|
75
|
+
);
|
|
76
|
+
setTimeout(() => {
|
|
77
|
+
pasteButton?.focus();
|
|
78
|
+
}, 0);
|
|
69
79
|
}
|
|
70
80
|
|
|
71
81
|
/**
|
|
@@ -97,7 +97,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/HookSupport", "sap/fe/core/CommonUti
|
|
|
97
97
|
};
|
|
98
98
|
_proto.collectAvailableCards = async function collectAvailableCards(cards) {
|
|
99
99
|
const actionToolbarItems = this.getContent().getActions();
|
|
100
|
-
|
|
100
|
+
const isFclModeObjectPageOpen = this.getPageController()?.getAppComponent()?.getRootViewController()?.getRightmostView()?.getViewData()?.converterType === "ObjectPage";
|
|
101
|
+
if (hasInsightActionEnabled(actionToolbarItems, this.getContent().getFilter(), TableInsightsHelper.getInsightsRelevantColumns(this)) && !isFclModeObjectPageOpen) {
|
|
101
102
|
const card = await this.getCardManifestTable();
|
|
102
103
|
if (Object.keys(card).length > 0) {
|
|
103
104
|
cards.push({
|
|
@@ -219,4 +220,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/HookSupport", "sap/fe/core/CommonUti
|
|
|
219
220
|
_exports = TableSharing;
|
|
220
221
|
return _exports;
|
|
221
222
|
}, false);
|
|
222
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZVNoYXJpbmciLCJfZGVjIiwiY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIiLCJfY2xhc3MiLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsInNldHVwTWl4aW4iLCJfYmFzZUNsYXNzIiwiX29uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MiLCJjb250cm9sbGVyIiwiY29udGV4dHMiLCJtYXhOdW1iZXJvZlNlbGVjdGVkSXRlbXMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiY29udGV4dCIsInRhcmdldFBhdGgiLCJnZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlciIsImlzVGFibGVSb3dOYXZpZ2F0aW9uUG9zc2libGUiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJhcHBUaXRsZSIsImdldE1hbmlmZXN0RW50cnkiLCJ0aXRsZSIsImNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiY29sbGFib3JhdGlvblNlcnZpY2UiLCJjbUhlbHBlclNlcnZpY2UiLCJ0cmlnZ2VySDJIQ2hhdCIsIk1lc3NhZ2VCb3giLCJ3YXJuaW5nIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRDb250ZW50IiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiZ2V0Q29udHJvbGxlciIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNEcmFmdCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImdldFBhdGgiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiZ2V0T2JqZWN0IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJ1bmRlZmluZWQiLCJwYXRoIiwicm9vdFBhdGgiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwicm9vdENvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInNpYmxpbmdJbmZvIiwiZHJhZnQiLCJjb21wdXRlU2libGluZ0luZm9ybWF0aW9uIiwidGFyZ2V0Q29udGV4dCIsIl9pc0ZjbEVuYWJsZWQiLCJsYXlvdXQiLCJnZXRGQ0xMYXlvdXRGb3JDTSIsImhhc2hDaGFuZ2VySW5zdGFuY2UiLCJIYXNoQ2hhbmdlciIsImdldEluc3RhbmNlIiwic0Jhc2VQYXRoIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwib3JpZ2luIiwicGF0aG5hbWUiLCJzZWFyY2giLCJGQ0xMZXZlbCIsIl9yb3V0aW5nIiwiZ2V0RkNMTGV2ZWwiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRGY2xDb25maWciLCJtYXhDb2x1bW5zQ291bnQiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjYXJkcyIsImFjdGlvblRvb2xiYXJJdGVtcyIsImdldEFjdGlvbnMiLCJoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZCIsImdldEZpbHRlciIsIlRhYmxlSW5zaWdodHNIZWxwZXIiLCJnZXRJbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyIsImNhcmQiLCJnZXRDYXJkTWFuaWZlc3RUYWJsZSIsIk9iamVjdCIsImtleXMiLCJwdXNoIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiaGVhZGVySW5mb1R5cGVOYW1lIiwiY2FsbGJhY2siLCJvbkFkZENhcmRUb0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FsbGJhY2siLCJiaW5kIiwiaW5zaWdodHNSZWxldmFudENvbHVtbnMiLCJpbnNpZ2h0c1BhcmFtcyIsImNyZWF0ZVRhYmxlQ2FyZFBhcmFtcyIsImdldFNvcnRDb25kaXRpb25zUXVlcnkiLCJJbnNpZ2h0c1NlcnZpY2UiLCJnZXRDYXJkTWFuaWZlc3QiLCJzaG93Q29sbGFib3JhdGlvbk1hbmFnZXJDYXJkUHJldmlldyIsImdldFBhZ2VDb250cm9sbGVyIiwiY29sbGFib3JhdGlvbk1hbmFnZXIiLCJnZXRTZXJ2aWNlIiwiZSIsInNob3dHZW5lcmljRXJyb3JNZXNzYWdlIiwiTG9nIiwiZXJyb3IiLCJfb25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQiLCJtZXNzYWdlIiwicGFyYW1ldGVycyIsImlzTmF2aWdhdGlvbkVuYWJsZWQiLCJ0eXBlIiwidGV4dCIsImNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2UiLCJzaG93SW5zaWdodHNDYXJkUHJldmlldyIsInNjb3BlIiwicmVzb3VyY2VNb2RlbCIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0RG93bmxvYWRVcmxXaXRoRmlsdGVycyIsInRhYmxlIiwiZmlsdGVyQmFyIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiRXJyb3IiLCJiaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsIm1vZGVsIiwiZmlsdGVyUHJvcFNWIiwiZ2V0UGFyZW50IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mbyIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFNlbWFudGljT3BzRmlsdGVyUHJvcGVydGllcyIsIl9nZXRTZWxlY3RPcHRpb25zIiwiZmlsdGVyc1dpdGhvdXRTZW1hbnRpY0RhdGVPcHMiLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsIm1hcCIsImZpbHRlckluZm8iLCJmaWx0ZXJOYW1lIiwicHJvcGVydGllc0luZm8iLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJmbHBNYXBwZWRQbGFjZWhvbGRlcnMiLCJzZW1hbnRpY0RhdGVGaWx0ZXJzIiwiZ2V0U2VtYW50aWNEYXRlRmlsdGVyc1dpdGhGbHBQbGFjZWhvbGRlcnMiLCJhbGxSZWxldmFudEZpbHRlcnMiLCJmaWx0ZXJzIiwiY29uY2F0IiwiYWxsRmlsdGVycyIsIkZpbHRlciIsImFuZCIsIiRzZWFyY2giLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiZ2V0U2VhcmNoIiwidGVtcFRhYmxlQmluZGluZyIsImJpbmRMaXN0IiwidXJsIiwicmVxdWVzdERvd25sb2FkVXJsIiwicGxhY2Vob2xkZXIiLCJ2YWx1ZSIsImVudHJpZXMiLCJyZXBsYWNlIiwic29ydENvbmRpdGlvbnMiLCJnZXRTb3J0Q29uZGl0aW9ucyIsInNvcnRlcnMiLCJzb3J0Q29uZGl0aW9uIiwic29ydENvbmRpdGlvbnNQYXRoIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eSIsIm5hbWUiLCJkZXNjZW5kaW5nIiwiam9pbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlU2hhcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyB0eXBlIFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgeyBoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZCwgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnNpZ2h0cy9Db21tb25JbnNpZ2h0c0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnNpZ2h0c1BhcmFtcywgVGFibGVDb250ZW50IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBJbnNpZ2h0c1NlcnZpY2UgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBUYWJsZUluc2lnaHRzSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL1RhYmxlSW5zaWdodHNIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENhcmRNYW5pZmVzdCwgQ2FyZE1lc3NhZ2UgfSBmcm9tIFwic2FwL2luc2lnaHRzL0NhcmRIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IEhhc2hDaGFuZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL0hhc2hDaGFuZ2VyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCIuLi8uLi9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5cbnR5cGUgU29ydENvbmRpdGlvbnMgPSB7XG5cdHNvcnRlcnM6IHtcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0ZGVzY2VuZGluZzogYm9vbGVhbjtcblx0fVtdO1xufTtcblxuLyoqXG4gKiBBIG1peGluIHRvIG1hbmFnZSBhbGwgc2hhcmluZyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhYmxlIChpbmNsdWRpbmcgaW5zaWdodCBjYXJkcylcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVTaGFyaW5nIGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHt9XG5cblx0X29uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsXG5cdFx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdFx0Y29udGV4dHM6IENvbnRleHRbXSxcblx0XHRtYXhOdW1iZXJvZlNlbGVjdGVkSXRlbXM6IG51bWJlclxuXHQpOiB2b2lkIHtcblx0XHRpZiAoY29udGV4dHMubGVuZ3RoIDw9IG1heE51bWJlcm9mU2VsZWN0ZWRJdGVtcykge1xuXHRcdFx0Y29udGV4dHMuZm9yRWFjaChhc3luYyAoY29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gYXdhaXQgdGhpcy5nZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlcihjb250ZXh0KTtcblx0XHRcdFx0aWYgKHRoaXMuaXNUYWJsZVJvd05hdmlnYXRpb25Qb3NzaWJsZShjb250ZXh0KSAmJiB0YXJnZXRQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdFx0XHRjb25zdCBhcHBUaXRsZSA9IGFwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS50aXRsZTtcblx0XHRcdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlID0gY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZT8uY29sbGFib3JhdGlvblNlcnZpY2UuY21IZWxwZXJTZXJ2aWNlO1xuXHRcdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZT8udHJpZ2dlckgySENoYXQoYXBwVGl0bGUsIHRhcmdldFBhdGgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhcblx0XHRcdFx0XHRcdExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIlRfVEFCTEVfU0hBUkVfVE9fQ09MTEFCT1JBVElPTl9NQU5BR0VSX05PX05BVklHQVRJT05fUE9TU0lCTEVcIlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoXG5cdFx0XHRcdExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIS5nZXRUZXh0KFwiVF9UQUJMRV9TSEFSRV9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJfVE9PX01BTllfSVRFTVNfU0VMRUNURURcIiwgW1xuXHRcdFx0XHRcdG1heE51bWJlcm9mU2VsZWN0ZWRJdGVtc1xuXHRcdFx0XHRdKVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBVUkwgZm9yIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXIuIFdlIGFsd2F5cyBnbyB0byB0aGUgYWN0aXZlIHZlcnNpb24sIGFsc28gZnJvbSBkcmFmdCB2ZXJzaW9uLiBJZiB0aGVyZSBpcyBubyBhY3RpdmUgdmVyc2lvbiB5ZXQsIHdlIGRvIG5vdCBzaGFyZSBhIGxpbmsuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB3aGljaCB0aGUgVVJMIGlzIHRvIGJlIGdlbmVyYXRlZFxuXHQgKiBAcmV0dXJucyBUaGUgVVJMIGZvciBTQVAgQ29sbGFib3JhdGlvbiBNYW5hZ2VyXG5cdCAqL1xuXHRhc3luYyBnZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlcih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlU2hhcmluZywgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0bGV0IHRhcmdldFBhdGg7XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVEcmFmdCA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGlzRHJhZnQgPSBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdGlmIChpc0RyYWZ0ICYmICFjb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpICYmIGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHkgPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoY29udGV4dC5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgYSBkcmFmdCBlbnRpdHkgd2l0aCBubyBhY3RpdmUgdmVyc2lvblxuXHRcdFx0XHQvLyB3ZSBkbyBub3Qgc3VwcG9ydCB0aGlzIGZvciBDb2xsYWJvcmF0aW9uIE1hbmFnZXJcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgYSBkcmFmdCBlbnRpdHkgd2l0aCBhbiBhY3RpdmUgdmVyc2lvbiBhbmQgbmVlZCB0byBjb252ZXJ0IHRoZSBwYXRoIHRvIGFuIGFjdGl2ZSBwYXRoXG5cdFx0XHRcdGNvbnN0IHBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdFx0Y29uc3Qgcm9vdFBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmluZGV4T2YoXCIvXCIsIDEpKTtcblx0XHRcdFx0Y29uc3Qgcm9vdENvbnRleHQgPSByb290UGF0aCA/IGNvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChyb290UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCkgOiBjb250ZXh0O1xuXHRcdFx0XHRjb25zdCBzaWJsaW5nSW5mbyA9IGF3YWl0IGRyYWZ0LmNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24ocm9vdENvbnRleHQsIGNvbnRleHQpO1xuXHRcdFx0XHR0YXJnZXRQYXRoID0gc2libGluZ0luZm8/LnRhcmdldENvbnRleHQ/LmdldFBhdGgoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gd2UgaGF2ZSBhbiBhY3RpdmUgZW50aXR5IG9yIGEgY29sbGFib3JhdGl2ZSBkcmFmdCBvciBhIG5vbi1kcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuXHRcdFx0dGFyZ2V0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdH1cblxuXHRcdGlmICh0YXJnZXRQYXRoKSB7XG5cdFx0XHRpZiAodGFyZ2V0UGF0aFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdFx0dGFyZ2V0UGF0aCA9IHRhcmdldFBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRcdGlmIChhcHBDb21wb25lbnQuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdGNvbnN0IGxheW91dCA9IHRoaXMuZ2V0RkNMTGF5b3V0Rm9yQ00oYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0dGFyZ2V0UGF0aCArPSBgP2xheW91dD0ke2xheW91dH1gO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaGFzaENoYW5nZXJJbnN0YW5jZSA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0XHRjb25zdCBzQmFzZVBhdGggPSBoYXNoQ2hhbmdlckluc3RhbmNlLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2ggPyBoYXNoQ2hhbmdlckluc3RhbmNlLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2goXCJcIikgOiBcIlwiO1xuXHRcdFx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgc0Jhc2VQYXRoICsgdGFyZ2V0UGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgJ1NoYXJlIHRvIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXInLCB3ZSBhbHdheXMgd2FudCB0aGUgVVJMIHRvIGdvIHRvIGZ1bGwgc2NyZWVuLlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFRoZSBGQ0wgbGF5b3V0IGZvciB0aGUgU2hhcmUgdG8gU0FQIENvbGxhYm9yYXRpb24gTWFuYWdlclxuXHQgKi9cblx0Z2V0RkNMTGF5b3V0Rm9yQ00odGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogc3RyaW5nIHtcblx0XHRjb25zdCBGQ0xMZXZlbCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcy5nZXRDb250ZW50KCkpLmdldENvbnRyb2xsZXIoKS5fcm91dGluZy5nZXRGQ0xMZXZlbCgpO1xuXHRcdGlmICgoYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLmdldEZjbENvbmZpZygpLm1heENvbHVtbnNDb3VudCA9PT0gMikge1xuXHRcdFx0cmV0dXJuIFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiO1xuXHRcdH1cblxuXHRcdHJldHVybiBGQ0xMZXZlbCA9PT0gMCA/IFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiIDogXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCI7XG5cdH1cblxuXHRAY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIoXCJjb2xsYWJvcmF0aW9uTWFuYWdlclwiLCBcImNvbGxlY3RBdmFpbGFibGVDYXJkc1wiKVxuXHRhc3luYyBjb2xsZWN0QXZhaWxhYmxlQ2FyZHModGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsIGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aW9uVG9vbGJhckl0ZW1zID0gdGhpcy5nZXRDb250ZW50KCkuZ2V0QWN0aW9ucygpIGFzIEFjdGlvblRvb2xiYXJBY3Rpb25bXTtcblx0XHRpZiAoXG5cdFx0XHRoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZChhY3Rpb25Ub29sYmFySXRlbXMsIHRoaXMuZ2V0Q29udGVudCgpLmdldEZpbHRlcigpLCBUYWJsZUluc2lnaHRzSGVscGVyLmdldEluc2lnaHRzUmVsZXZhbnRDb2x1bW5zKHRoaXMpKVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgY2FyZCA9IGF3YWl0IHRoaXMuZ2V0Q2FyZE1hbmlmZXN0VGFibGUoKTtcblx0XHRcdGlmIChPYmplY3Qua2V5cyhjYXJkKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNhcmRzLnB1c2goe1xuXHRcdFx0XHRcdGNhcmQ6IGNhcmQsXG5cdFx0XHRcdFx0dGl0bGU6ICh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmhlYWRlckluZm9UeXBlTmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IFwiXCIsXG5cdFx0XHRcdFx0Y2FsbGJhY2s6IHRoaXMub25BZGRDYXJkVG9Db2xsYWJvcmF0aW9uTWFuYWdlckNhbGxiYWNrLmJpbmQodGhpcylcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNhcmQgbWFuaWZlc3Qgb3B0aW1pemVkIGZvciB0aGUgdGFibGUgY2FzZS5cblx0ICogQHJldHVybnMgUHJvbWlzZSBvZiBDYXJkTWFuaWZlc3Rcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0Q2FyZE1hbmlmZXN0VGFibGUodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcpOiBQcm9taXNlPENhcmRNYW5pZmVzdD4ge1xuXHRcdGNvbnN0IGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zID0gVGFibGVJbnNpZ2h0c0hlbHBlci5nZXRJbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyh0aGlzKTtcblx0XHRjb25zdCBpbnNpZ2h0c1BhcmFtcyA9IChhd2FpdCBUYWJsZUluc2lnaHRzSGVscGVyLmNyZWF0ZVRhYmxlQ2FyZFBhcmFtcyhcblx0XHRcdHRoaXMsXG5cdFx0XHRpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyxcblx0XHRcdHRoaXMuZ2V0U29ydENvbmRpdGlvbnNRdWVyeSgpXG5cdFx0KSkgYXMgSW5zaWdodHNQYXJhbXM8VGFibGVDb250ZW50Pjtcblx0XHRyZXR1cm4gSW5zaWdodHNTZXJ2aWNlLmdldENhcmRNYW5pZmVzdChpbnNpZ2h0c1BhcmFtcyk7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBjcmVhdGUgaW5zaWdodHNQYXJhbXMgYW5kIGNhbGwgdGhlIEFQSSB0byBzaG93IGluc2lnaHRzIGNhcmQgcHJldmlldyBmb3IgdGFibGUuXG5cdCAqIEBwYXJhbSBjYXJkIFRoZSBjYXJkIG1hbmlmZXN0IHRvIGJlIHVzZWQgZm9yIHRoZSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyBVbmRlZmluZWQgaWYgY2FyZCBwcmV2aWV3IGlzIHJlbmRlcmVkLlxuXHQgKi9cblx0YXN5bmMgb25BZGRDYXJkVG9Db2xsYWJvcmF0aW9uTWFuYWdlckNhbGxiYWNrKHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVTaGFyaW5nLCBjYXJkOiBDYXJkTWFuaWZlc3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGNhcmQpIHtcblx0XHRcdFx0YXdhaXQgSW5zaWdodHNTZXJ2aWNlLnNob3dDb2xsYWJvcmF0aW9uTWFuYWdlckNhcmRQcmV2aWV3KGNhcmQsIHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aW9uTWFuYWdlci5nZXRTZXJ2aWNlKCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBjcmVhdGUgaW5zaWdodHNQYXJhbXMgYW5kIGNhbGwgdGhlIEFQSSB0byBzaG93IGluc2lnaHRzIGNhcmQgcHJldmlldyBmb3IgdGFibGUuXG5cdCAqIEByZXR1cm5zIFVuZGVmaW5lZCBpZiB0aGUgY2FyZCBwcmV2aWV3IGlzIHJlbmRlcmVkLlxuXHQgKi9cblx0YXN5bmMgX29uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkKHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVTaGFyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zID0gVGFibGVJbnNpZ2h0c0hlbHBlci5nZXRJbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyh0aGlzKTtcblx0XHRcdGNvbnN0IGluc2lnaHRzUGFyYW1zID0gYXdhaXQgVGFibGVJbnNpZ2h0c0hlbHBlci5jcmVhdGVUYWJsZUNhcmRQYXJhbXMoXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zLFxuXHRcdFx0XHR0aGlzLmdldFNvcnRDb25kaXRpb25zUXVlcnkoKVxuXHRcdFx0KTtcblx0XHRcdGlmIChpbnNpZ2h0c1BhcmFtcykge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlOiBDYXJkTWVzc2FnZSA9IGluc2lnaHRzUGFyYW1zLnBhcmFtZXRlcnMuaXNOYXZpZ2F0aW9uRW5hYmxlZFxuXHRcdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0OiB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdFx0XHR0ZXh0OiB0aGlzLmNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2UodGhpcy5nZXRDb250ZW50KCkpXG5cdFx0XHRcdFx0ICB9O1xuXG5cdFx0XHRcdEluc2lnaHRzU2VydmljZS5zaG93SW5zaWdodHNDYXJkUHJldmlldyhpbnNpZ2h0c1BhcmFtcywgbWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZSh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2Uoc2NvcGU6IENvbnRyb2wpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwoc2NvcGUpO1xuXHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1JPV19MRVZFTF9OQVZJR0FUSU9OX0RJU0FCTEVEX01TR19SRUFTT05fRVhURVJOQUxfTkFWSUdBVElPTl9DT05GSUdVUkVEXCIpO1xuXHR9XG5cblx0YXN5bmMgZ2V0RG93bmxvYWRVcmxXaXRoRmlsdGVycyh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlU2hhcmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlLmdldEZpbHRlcigpKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWZpbHRlckJhcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlsdGVyIGJhciBpcyBub3QgYXZhaWxhYmxlXCIpO1xuXHRcdH1cblx0XHRjb25zdCBiaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGNvbnN0IG1vZGVsID0gdGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXHRcdGNvbnN0IGZpbHRlclByb3BTViA9IGF3YWl0IChmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJKS5nZXRTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0Ly8gaWdub3JlIGZpbHRlcnMgd2l0aCBzZW1hbnRpYyBvcGVyYXRvcnMgd2hpY2ggbmVlZHMgdG8gYmUgYWRkZWQgbGF0ZXIgYXMgZmlsdGVycyB3aXRoIGZscCBzZW1hbnRpYyBkYXRlIHBsYWNlaG9sZGVyc1xuXHRcdGNvbnN0IGZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mbyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY09wc0ZpbHRlclByb3BlcnRpZXMoZmlsdGVyUHJvcFNWLl9nZXRTZWxlY3RPcHRpb25zKCkpO1xuXHRcdGNvbnN0IGZpbHRlcnNXaXRob3V0U2VtYW50aWNEYXRlT3BzID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKFxuXHRcdFx0dGFibGUsXG5cdFx0XHRmaWx0ZXJzV2l0aFNlbWFudGljRGF0ZU9wc0luZm8ubWFwKChmaWx0ZXJJbmZvKSA9PiBmaWx0ZXJJbmZvLmZpbHRlck5hbWUpXG5cdFx0KTtcblx0XHRjb25zdCBwcm9wZXJ0aWVzSW5mbyA9IGZpbHRlckJhci5nZXRQcm9wZXJ0eUluZm9TZXQoKTtcblx0XHQvLyBnZXQgdGhlIGZpbHRlcnMgd2l0aCBzZW1hbnRpYyBkYXRlIG9wZXJhdG9ycyB3aXRoIGZscCBwbGFjZWhvbGRlciBmb3JtYXQgYW5kIGFwcGVuZCB0byB0aGUgZXhpc2l0aW5nIGZpbHRlcnNcblx0XHRjb25zdCBbZmxwTWFwcGVkUGxhY2Vob2xkZXJzLCBzZW1hbnRpY0RhdGVGaWx0ZXJzXSA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVGaWx0ZXJzV2l0aEZscFBsYWNlaG9sZGVycyhcblx0XHRcdGZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mbyxcblx0XHRcdHByb3BlcnRpZXNJbmZvXG5cdFx0KTtcblxuXHRcdGxldCBhbGxSZWxldmFudEZpbHRlcnM6IEZpbHRlcltdID0gW107XG5cdFx0aWYgKGZpbHRlcnNXaXRob3V0U2VtYW50aWNEYXRlT3BzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YWxsUmVsZXZhbnRGaWx0ZXJzID0gYWxsUmVsZXZhbnRGaWx0ZXJzLmNvbmNhdChmaWx0ZXJzV2l0aG91dFNlbWFudGljRGF0ZU9wcy5maWx0ZXJzKTtcblx0XHR9XG5cdFx0aWYgKHNlbWFudGljRGF0ZUZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YWxsUmVsZXZhbnRGaWx0ZXJzLnB1c2goLi4uc2VtYW50aWNEYXRlRmlsdGVycyk7XG5cdFx0fVxuXHRcdGNvbnN0IGFsbEZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IGFsbFJlbGV2YW50RmlsdGVycyxcblx0XHRcdGFuZDogdHJ1ZVxuXHRcdH0pO1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB7XG5cdFx0XHQkc2VhcmNoOiBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKGZpbHRlckJhci5nZXRTZWFyY2goKSkgfHwgdW5kZWZpbmVkXG5cdFx0fTtcblx0XHQvLyBjcmVhdGUgaGlkZGVuIGJpbmRpbmcgd2l0aCBhbGwgZmlsdGVycyBlLmcuIHN0YXRpYyBmaWx0ZXJzIGFuZCBmaWx0ZXJzIHdpdGggc2VtYW50aWMgb3BlcmF0b3JzXG5cdFx0Y29uc3QgdGVtcFRhYmxlQmluZGluZyA9IG1vZGVsLmJpbmRMaXN0KGJpbmRpbmcuZ2V0UGF0aCgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYWxsRmlsdGVycywgcGFyYW1ldGVycyk7XG5cdFx0bGV0IHVybCA9IChhd2FpdCB0ZW1wVGFibGVCaW5kaW5nLnJlcXVlc3REb3dubG9hZFVybCgpKSA/PyBcIlwiO1xuXHRcdGZvciAoY29uc3QgW3BsYWNlaG9sZGVyLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmxwTWFwcGVkUGxhY2Vob2xkZXJzKSkge1xuXHRcdFx0dXJsID0gdXJsLnJlcGxhY2UocGxhY2Vob2xkZXIsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVybDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNvcnQgY29uZGl0aW9ucyBxdWVyeSBzdHJpbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBzb3J0IGNvbmRpdGlvbnMgcXVlcnkgc3RyaW5nXG5cdCAqL1xuXHRnZXRTb3J0Q29uZGl0aW9uc1F1ZXJ5KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVTaGFyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IHNvcnRDb25kaXRpb25zID0gKHRhYmxlLmdldFNvcnRDb25kaXRpb25zKCkgYXMgU29ydENvbmRpdGlvbnMpPy5zb3J0ZXJzO1xuXHRcdHJldHVybiBzb3J0Q29uZGl0aW9uc1xuXHRcdFx0PyBzb3J0Q29uZGl0aW9uc1xuXHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKHNvcnRDb25kaXRpb24pIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNvcnRDb25kaXRpb25zUGF0aCA9IHRhYmxlLmdldFByb3BlcnR5SGVscGVyKCkuZ2V0UHJvcGVydHkoc29ydENvbmRpdGlvbi5uYW1lKT8ucGF0aDtcblx0XHRcdFx0XHRcdGlmIChzb3J0Q29uZGl0aW9uc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGAke3NvcnRDb25kaXRpb25zUGF0aH0ke3NvcnRDb25kaXRpb24uZGVzY2VuZGluZyA/IFwiIGRlc2NcIiA6IFwiXCJ9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oXCIsXCIpXG5cdFx0XHQ6IFwiXCI7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQXNDQTtBQUNB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
|
|
223
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZVNoYXJpbmciLCJfZGVjIiwiY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIiLCJfY2xhc3MiLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsInNldHVwTWl4aW4iLCJfYmFzZUNsYXNzIiwiX29uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MiLCJjb250cm9sbGVyIiwiY29udGV4dHMiLCJtYXhOdW1iZXJvZlNlbGVjdGVkSXRlbXMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiY29udGV4dCIsInRhcmdldFBhdGgiLCJnZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlciIsImlzVGFibGVSb3dOYXZpZ2F0aW9uUG9zc2libGUiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJhcHBUaXRsZSIsImdldE1hbmlmZXN0RW50cnkiLCJ0aXRsZSIsImNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiY29sbGFib3JhdGlvblNlcnZpY2UiLCJjbUhlbHBlclNlcnZpY2UiLCJ0cmlnZ2VySDJIQ2hhdCIsIk1lc3NhZ2VCb3giLCJ3YXJuaW5nIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRDb250ZW50IiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiZ2V0Q29udHJvbGxlciIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNEcmFmdCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImdldFBhdGgiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiZ2V0T2JqZWN0IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJ1bmRlZmluZWQiLCJwYXRoIiwicm9vdFBhdGgiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwicm9vdENvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInNpYmxpbmdJbmZvIiwiZHJhZnQiLCJjb21wdXRlU2libGluZ0luZm9ybWF0aW9uIiwidGFyZ2V0Q29udGV4dCIsIl9pc0ZjbEVuYWJsZWQiLCJsYXlvdXQiLCJnZXRGQ0xMYXlvdXRGb3JDTSIsImhhc2hDaGFuZ2VySW5zdGFuY2UiLCJIYXNoQ2hhbmdlciIsImdldEluc3RhbmNlIiwic0Jhc2VQYXRoIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwib3JpZ2luIiwicGF0aG5hbWUiLCJzZWFyY2giLCJGQ0xMZXZlbCIsIl9yb3V0aW5nIiwiZ2V0RkNMTGV2ZWwiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRGY2xDb25maWciLCJtYXhDb2x1bW5zQ291bnQiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjYXJkcyIsImFjdGlvblRvb2xiYXJJdGVtcyIsImdldEFjdGlvbnMiLCJpc0ZjbE1vZGVPYmplY3RQYWdlT3BlbiIsImdldFBhZ2VDb250cm9sbGVyIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFZpZXdEYXRhIiwiY29udmVydGVyVHlwZSIsImhhc0luc2lnaHRBY3Rpb25FbmFibGVkIiwiZ2V0RmlsdGVyIiwiVGFibGVJbnNpZ2h0c0hlbHBlciIsImdldEluc2lnaHRzUmVsZXZhbnRDb2x1bW5zIiwiY2FyZCIsImdldENhcmRNYW5pZmVzdFRhYmxlIiwiT2JqZWN0Iiwia2V5cyIsInB1c2giLCJnZXRUYWJsZURlZmluaXRpb24iLCJoZWFkZXJJbmZvVHlwZU5hbWUiLCJjYWxsYmFjayIsIm9uQWRkQ2FyZFRvQ29sbGFib3JhdGlvbk1hbmFnZXJDYWxsYmFjayIsImJpbmQiLCJpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyIsImluc2lnaHRzUGFyYW1zIiwiY3JlYXRlVGFibGVDYXJkUGFyYW1zIiwiZ2V0U29ydENvbmRpdGlvbnNRdWVyeSIsIkluc2lnaHRzU2VydmljZSIsImdldENhcmRNYW5pZmVzdCIsInNob3dDb2xsYWJvcmF0aW9uTWFuYWdlckNhcmRQcmV2aWV3IiwiY29sbGFib3JhdGlvbk1hbmFnZXIiLCJnZXRTZXJ2aWNlIiwiZSIsInNob3dHZW5lcmljRXJyb3JNZXNzYWdlIiwiTG9nIiwiZXJyb3IiLCJfb25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQiLCJtZXNzYWdlIiwicGFyYW1ldGVycyIsImlzTmF2aWdhdGlvbkVuYWJsZWQiLCJ0eXBlIiwidGV4dCIsImNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2UiLCJzaG93SW5zaWdodHNDYXJkUHJldmlldyIsInNjb3BlIiwicmVzb3VyY2VNb2RlbCIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0RG93bmxvYWRVcmxXaXRoRmlsdGVycyIsInRhYmxlIiwiZmlsdGVyQmFyIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiRXJyb3IiLCJiaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsIm1vZGVsIiwiZmlsdGVyUHJvcFNWIiwiZ2V0UGFyZW50IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mbyIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFNlbWFudGljT3BzRmlsdGVyUHJvcGVydGllcyIsIl9nZXRTZWxlY3RPcHRpb25zIiwiZmlsdGVyc1dpdGhvdXRTZW1hbnRpY0RhdGVPcHMiLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsIm1hcCIsImZpbHRlckluZm8iLCJmaWx0ZXJOYW1lIiwicHJvcGVydGllc0luZm8iLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJmbHBNYXBwZWRQbGFjZWhvbGRlcnMiLCJzZW1hbnRpY0RhdGVGaWx0ZXJzIiwiZ2V0U2VtYW50aWNEYXRlRmlsdGVyc1dpdGhGbHBQbGFjZWhvbGRlcnMiLCJhbGxSZWxldmFudEZpbHRlcnMiLCJmaWx0ZXJzIiwiY29uY2F0IiwiYWxsRmlsdGVycyIsIkZpbHRlciIsImFuZCIsIiRzZWFyY2giLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiZ2V0U2VhcmNoIiwidGVtcFRhYmxlQmluZGluZyIsImJpbmRMaXN0IiwidXJsIiwicmVxdWVzdERvd25sb2FkVXJsIiwicGxhY2Vob2xkZXIiLCJ2YWx1ZSIsImVudHJpZXMiLCJyZXBsYWNlIiwic29ydENvbmRpdGlvbnMiLCJnZXRTb3J0Q29uZGl0aW9ucyIsInNvcnRlcnMiLCJzb3J0Q29uZGl0aW9uIiwic29ydENvbmRpdGlvbnNQYXRoIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eSIsIm5hbWUiLCJkZXNjZW5kaW5nIiwiam9pbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlU2hhcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyB0eXBlIFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgeyBoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZCwgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnNpZ2h0cy9Db21tb25JbnNpZ2h0c0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnNpZ2h0c1BhcmFtcywgVGFibGVDb250ZW50IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBJbnNpZ2h0c1NlcnZpY2UgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBUYWJsZUluc2lnaHRzSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL1RhYmxlSW5zaWdodHNIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENhcmRNYW5pZmVzdCwgQ2FyZE1lc3NhZ2UgfSBmcm9tIFwic2FwL2luc2lnaHRzL0NhcmRIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IEhhc2hDaGFuZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL0hhc2hDaGFuZ2VyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCIuLi8uLi9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5cbnR5cGUgU29ydENvbmRpdGlvbnMgPSB7XG5cdHNvcnRlcnM6IHtcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0ZGVzY2VuZGluZzogYm9vbGVhbjtcblx0fVtdO1xufTtcblxuLyoqXG4gKiBBIG1peGluIHRvIG1hbmFnZSBhbGwgc2hhcmluZyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhYmxlIChpbmNsdWRpbmcgaW5zaWdodCBjYXJkcylcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVTaGFyaW5nIGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHt9XG5cblx0X29uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsXG5cdFx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdFx0Y29udGV4dHM6IENvbnRleHRbXSxcblx0XHRtYXhOdW1iZXJvZlNlbGVjdGVkSXRlbXM6IG51bWJlclxuXHQpOiB2b2lkIHtcblx0XHRpZiAoY29udGV4dHMubGVuZ3RoIDw9IG1heE51bWJlcm9mU2VsZWN0ZWRJdGVtcykge1xuXHRcdFx0Y29udGV4dHMuZm9yRWFjaChhc3luYyAoY29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gYXdhaXQgdGhpcy5nZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlcihjb250ZXh0KTtcblx0XHRcdFx0aWYgKHRoaXMuaXNUYWJsZVJvd05hdmlnYXRpb25Qb3NzaWJsZShjb250ZXh0KSAmJiB0YXJnZXRQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdFx0XHRjb25zdCBhcHBUaXRsZSA9IGFwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS50aXRsZTtcblx0XHRcdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlID0gY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZT8uY29sbGFib3JhdGlvblNlcnZpY2UuY21IZWxwZXJTZXJ2aWNlO1xuXHRcdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZT8udHJpZ2dlckgySENoYXQoYXBwVGl0bGUsIHRhcmdldFBhdGgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhcblx0XHRcdFx0XHRcdExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIlRfVEFCTEVfU0hBUkVfVE9fQ09MTEFCT1JBVElPTl9NQU5BR0VSX05PX05BVklHQVRJT05fUE9TU0lCTEVcIlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoXG5cdFx0XHRcdExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIS5nZXRUZXh0KFwiVF9UQUJMRV9TSEFSRV9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJfVE9PX01BTllfSVRFTVNfU0VMRUNURURcIiwgW1xuXHRcdFx0XHRcdG1heE51bWJlcm9mU2VsZWN0ZWRJdGVtc1xuXHRcdFx0XHRdKVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBVUkwgZm9yIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXIuIFdlIGFsd2F5cyBnbyB0byB0aGUgYWN0aXZlIHZlcnNpb24sIGFsc28gZnJvbSBkcmFmdCB2ZXJzaW9uLiBJZiB0aGVyZSBpcyBubyBhY3RpdmUgdmVyc2lvbiB5ZXQsIHdlIGRvIG5vdCBzaGFyZSBhIGxpbmsuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB3aGljaCB0aGUgVVJMIGlzIHRvIGJlIGdlbmVyYXRlZFxuXHQgKiBAcmV0dXJucyBUaGUgVVJMIGZvciBTQVAgQ29sbGFib3JhdGlvbiBNYW5hZ2VyXG5cdCAqL1xuXHRhc3luYyBnZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlcih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlU2hhcmluZywgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0bGV0IHRhcmdldFBhdGg7XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVEcmFmdCA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGlzRHJhZnQgPSBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdGlmIChpc0RyYWZ0ICYmICFjb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpICYmIGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHkgPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoY29udGV4dC5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgYSBkcmFmdCBlbnRpdHkgd2l0aCBubyBhY3RpdmUgdmVyc2lvblxuXHRcdFx0XHQvLyB3ZSBkbyBub3Qgc3VwcG9ydCB0aGlzIGZvciBDb2xsYWJvcmF0aW9uIE1hbmFnZXJcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgYSBkcmFmdCBlbnRpdHkgd2l0aCBhbiBhY3RpdmUgdmVyc2lvbiBhbmQgbmVlZCB0byBjb252ZXJ0IHRoZSBwYXRoIHRvIGFuIGFjdGl2ZSBwYXRoXG5cdFx0XHRcdGNvbnN0IHBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdFx0Y29uc3Qgcm9vdFBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmluZGV4T2YoXCIvXCIsIDEpKTtcblx0XHRcdFx0Y29uc3Qgcm9vdENvbnRleHQgPSByb290UGF0aCA/IGNvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChyb290UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCkgOiBjb250ZXh0O1xuXHRcdFx0XHRjb25zdCBzaWJsaW5nSW5mbyA9IGF3YWl0IGRyYWZ0LmNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24ocm9vdENvbnRleHQsIGNvbnRleHQpO1xuXHRcdFx0XHR0YXJnZXRQYXRoID0gc2libGluZ0luZm8/LnRhcmdldENvbnRleHQ/LmdldFBhdGgoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gd2UgaGF2ZSBhbiBhY3RpdmUgZW50aXR5IG9yIGEgY29sbGFib3JhdGl2ZSBkcmFmdCBvciBhIG5vbi1kcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuXHRcdFx0dGFyZ2V0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdH1cblxuXHRcdGlmICh0YXJnZXRQYXRoKSB7XG5cdFx0XHRpZiAodGFyZ2V0UGF0aFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdFx0dGFyZ2V0UGF0aCA9IHRhcmdldFBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRcdGlmIChhcHBDb21wb25lbnQuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdGNvbnN0IGxheW91dCA9IHRoaXMuZ2V0RkNMTGF5b3V0Rm9yQ00oYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0dGFyZ2V0UGF0aCArPSBgP2xheW91dD0ke2xheW91dH1gO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaGFzaENoYW5nZXJJbnN0YW5jZSA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0XHRjb25zdCBzQmFzZVBhdGggPSBoYXNoQ2hhbmdlckluc3RhbmNlLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2ggPyBoYXNoQ2hhbmdlckluc3RhbmNlLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2goXCJcIikgOiBcIlwiO1xuXHRcdFx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgc0Jhc2VQYXRoICsgdGFyZ2V0UGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgJ1NoYXJlIHRvIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXInLCB3ZSBhbHdheXMgd2FudCB0aGUgVVJMIHRvIGdvIHRvIGZ1bGwgc2NyZWVuLlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFRoZSBGQ0wgbGF5b3V0IGZvciB0aGUgU2hhcmUgdG8gU0FQIENvbGxhYm9yYXRpb24gTWFuYWdlclxuXHQgKi9cblx0Z2V0RkNMTGF5b3V0Rm9yQ00odGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogc3RyaW5nIHtcblx0XHRjb25zdCBGQ0xMZXZlbCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcy5nZXRDb250ZW50KCkpLmdldENvbnRyb2xsZXIoKS5fcm91dGluZy5nZXRGQ0xMZXZlbCgpO1xuXHRcdGlmICgoYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLmdldEZjbENvbmZpZygpLm1heENvbHVtbnNDb3VudCA9PT0gMikge1xuXHRcdFx0cmV0dXJuIFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiO1xuXHRcdH1cblxuXHRcdHJldHVybiBGQ0xMZXZlbCA9PT0gMCA/IFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiIDogXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCI7XG5cdH1cblxuXHRAY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIoXCJjb2xsYWJvcmF0aW9uTWFuYWdlclwiLCBcImNvbGxlY3RBdmFpbGFibGVDYXJkc1wiKVxuXHRhc3luYyBjb2xsZWN0QXZhaWxhYmxlQ2FyZHModGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsIGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aW9uVG9vbGJhckl0ZW1zID0gdGhpcy5nZXRDb250ZW50KCkuZ2V0QWN0aW9ucygpIGFzIEFjdGlvblRvb2xiYXJBY3Rpb25bXTtcblx0XHRjb25zdCBpc0ZjbE1vZGVPYmplY3RQYWdlT3BlbiA9XG5cdFx0XHQodGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcik/LmdldFJpZ2h0bW9zdFZpZXcoKT8uZ2V0Vmlld0RhdGEoKVxuXHRcdFx0XHQ/LmNvbnZlcnRlclR5cGUgPT09IFwiT2JqZWN0UGFnZVwiO1xuXHRcdGlmIChcblx0XHRcdGhhc0luc2lnaHRBY3Rpb25FbmFibGVkKFxuXHRcdFx0XHRhY3Rpb25Ub29sYmFySXRlbXMsXG5cdFx0XHRcdHRoaXMuZ2V0Q29udGVudCgpLmdldEZpbHRlcigpLFxuXHRcdFx0XHRUYWJsZUluc2lnaHRzSGVscGVyLmdldEluc2lnaHRzUmVsZXZhbnRDb2x1bW5zKHRoaXMpXG5cdFx0XHQpICYmXG5cdFx0XHQhaXNGY2xNb2RlT2JqZWN0UGFnZU9wZW5cblx0XHQpIHtcblx0XHRcdGNvbnN0IGNhcmQgPSBhd2FpdCB0aGlzLmdldENhcmRNYW5pZmVzdFRhYmxlKCk7XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMoY2FyZCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjYXJkcy5wdXNoKHtcblx0XHRcdFx0XHRjYXJkOiBjYXJkLFxuXHRcdFx0XHRcdHRpdGxlOiAodGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5oZWFkZXJJbmZvVHlwZU5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyBcIlwiLFxuXHRcdFx0XHRcdGNhbGxiYWNrOiB0aGlzLm9uQWRkQ2FyZFRvQ29sbGFib3JhdGlvbk1hbmFnZXJDYWxsYmFjay5iaW5kKHRoaXMpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjYXJkIG1hbmlmZXN0IG9wdGltaXplZCBmb3IgdGhlIHRhYmxlIGNhc2UuXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgQ2FyZE1hbmlmZXN0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldENhcmRNYW5pZmVzdFRhYmxlKHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVTaGFyaW5nKTogUHJvbWlzZTxDYXJkTWFuaWZlc3Q+IHtcblx0XHRjb25zdCBpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyA9IFRhYmxlSW5zaWdodHNIZWxwZXIuZ2V0SW5zaWdodHNSZWxldmFudENvbHVtbnModGhpcyk7XG5cdFx0Y29uc3QgaW5zaWdodHNQYXJhbXMgPSAoYXdhaXQgVGFibGVJbnNpZ2h0c0hlbHBlci5jcmVhdGVUYWJsZUNhcmRQYXJhbXMoXG5cdFx0XHR0aGlzLFxuXHRcdFx0aW5zaWdodHNSZWxldmFudENvbHVtbnMsXG5cdFx0XHR0aGlzLmdldFNvcnRDb25kaXRpb25zUXVlcnkoKVxuXHRcdCkpIGFzIEluc2lnaHRzUGFyYW1zPFRhYmxlQ29udGVudD47XG5cdFx0cmV0dXJuIEluc2lnaHRzU2VydmljZS5nZXRDYXJkTWFuaWZlc3QoaW5zaWdodHNQYXJhbXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgdG8gY3JlYXRlIGluc2lnaHRzUGFyYW1zIGFuZCBjYWxsIHRoZSBBUEkgdG8gc2hvdyBpbnNpZ2h0cyBjYXJkIHByZXZpZXcgZm9yIHRhYmxlLlxuXHQgKiBAcGFyYW0gY2FyZCBUaGUgY2FyZCBtYW5pZmVzdCB0byBiZSB1c2VkIGZvciB0aGUgY2FsbGJhY2tcblx0ICogQHJldHVybnMgVW5kZWZpbmVkIGlmIGNhcmQgcHJldmlldyBpcyByZW5kZXJlZC5cblx0ICovXG5cdGFzeW5jIG9uQWRkQ2FyZFRvQ29sbGFib3JhdGlvbk1hbmFnZXJDYWxsYmFjayh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlU2hhcmluZywgY2FyZDogQ2FyZE1hbmlmZXN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChjYXJkKSB7XG5cdFx0XHRcdGF3YWl0IEluc2lnaHRzU2VydmljZS5zaG93Q29sbGFib3JhdGlvbk1hbmFnZXJDYXJkUHJldmlldyhjYXJkLCB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuY29sbGFib3JhdGlvbk1hbmFnZXIuZ2V0U2VydmljZSgpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlKHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgdG8gY3JlYXRlIGluc2lnaHRzUGFyYW1zIGFuZCBjYWxsIHRoZSBBUEkgdG8gc2hvdyBpbnNpZ2h0cyBjYXJkIHByZXZpZXcgZm9yIHRhYmxlLlxuXHQgKiBAcmV0dXJucyBVbmRlZmluZWQgaWYgdGhlIGNhcmQgcHJldmlldyBpcyByZW5kZXJlZC5cblx0ICovXG5cdGFzeW5jIF9vbkFkZENhcmRUb0luc2lnaHRzUHJlc3NlZCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlU2hhcmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyA9IFRhYmxlSW5zaWdodHNIZWxwZXIuZ2V0SW5zaWdodHNSZWxldmFudENvbHVtbnModGhpcyk7XG5cdFx0XHRjb25zdCBpbnNpZ2h0c1BhcmFtcyA9IGF3YWl0IFRhYmxlSW5zaWdodHNIZWxwZXIuY3JlYXRlVGFibGVDYXJkUGFyYW1zKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyxcblx0XHRcdFx0dGhpcy5nZXRTb3J0Q29uZGl0aW9uc1F1ZXJ5KClcblx0XHRcdCk7XG5cdFx0XHRpZiAoaW5zaWdodHNQYXJhbXMpIHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZTogQ2FyZE1lc3NhZ2UgPSBpbnNpZ2h0c1BhcmFtcy5wYXJhbWV0ZXJzLmlzTmF2aWdhdGlvbkVuYWJsZWRcblx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIldhcm5pbmdcIixcblx0XHRcdFx0XHRcdFx0dGV4dDogdGhpcy5jcmVhdGVOYXZpZ2F0aW9uRXJyb3JNZXNzYWdlKHRoaXMuZ2V0Q29udGVudCgpKVxuXHRcdFx0XHRcdCAgfTtcblxuXHRcdFx0XHRJbnNpZ2h0c1NlcnZpY2Uuc2hvd0luc2lnaHRzQ2FyZFByZXZpZXcoaW5zaWdodHNQYXJhbXMsIG1lc3NhZ2UpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVOYXZpZ2F0aW9uRXJyb3JNZXNzYWdlKHNjb3BlOiBDb250cm9sKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHNjb3BlKTtcblx0XHRyZXR1cm4gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9ST1dfTEVWRUxfTkFWSUdBVElPTl9ESVNBQkxFRF9NU0dfUkVBU09OX0VYVEVSTkFMX05BVklHQVRJT05fQ09ORklHVVJFRFwiKTtcblx0fVxuXG5cdGFzeW5jIGdldERvd25sb2FkVXJsV2l0aEZpbHRlcnModGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZS5nZXRGaWx0ZXIoKSkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFmaWx0ZXJCYXIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImZpbHRlciBiYXIgaXMgbm90IGF2YWlsYWJsZVwiKTtcblx0XHR9XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRjb25zdCBtb2RlbCA9IHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblx0XHRjb25zdCBmaWx0ZXJQcm9wU1YgPSBhd2FpdCAoZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSSkuZ2V0U2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdC8vIGlnbm9yZSBmaWx0ZXJzIHdpdGggc2VtYW50aWMgb3BlcmF0b3JzIHdoaWNoIG5lZWRzIHRvIGJlIGFkZGVkIGxhdGVyIGFzIGZpbHRlcnMgd2l0aCBmbHAgc2VtYW50aWMgZGF0ZSBwbGFjZWhvbGRlcnNcblx0XHRjb25zdCBmaWx0ZXJzV2l0aFNlbWFudGljRGF0ZU9wc0luZm8gPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNPcHNGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlclByb3BTVi5fZ2V0U2VsZWN0T3B0aW9ucygpKTtcblx0XHRjb25zdCBmaWx0ZXJzV2l0aG91dFNlbWFudGljRGF0ZU9wcyA9IFRhYmxlVXRpbHMuZ2V0QWxsRmlsdGVySW5mbyhcblx0XHRcdHRhYmxlLFxuXHRcdFx0ZmlsdGVyc1dpdGhTZW1hbnRpY0RhdGVPcHNJbmZvLm1hcCgoZmlsdGVySW5mbykgPT4gZmlsdGVySW5mby5maWx0ZXJOYW1lKVxuXHRcdCk7XG5cdFx0Y29uc3QgcHJvcGVydGllc0luZm8gPSBmaWx0ZXJCYXIuZ2V0UHJvcGVydHlJbmZvU2V0KCk7XG5cdFx0Ly8gZ2V0IHRoZSBmaWx0ZXJzIHdpdGggc2VtYW50aWMgZGF0ZSBvcGVyYXRvcnMgd2l0aCBmbHAgcGxhY2Vob2xkZXIgZm9ybWF0IGFuZCBhcHBlbmQgdG8gdGhlIGV4aXNpdGluZyBmaWx0ZXJzXG5cdFx0Y29uc3QgW2ZscE1hcHBlZFBsYWNlaG9sZGVycywgc2VtYW50aWNEYXRlRmlsdGVyc10gPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlRmlsdGVyc1dpdGhGbHBQbGFjZWhvbGRlcnMoXG5cdFx0XHRmaWx0ZXJzV2l0aFNlbWFudGljRGF0ZU9wc0luZm8sXG5cdFx0XHRwcm9wZXJ0aWVzSW5mb1xuXHRcdCk7XG5cblx0XHRsZXQgYWxsUmVsZXZhbnRGaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuXHRcdGlmIChmaWx0ZXJzV2l0aG91dFNlbWFudGljRGF0ZU9wcy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFsbFJlbGV2YW50RmlsdGVycyA9IGFsbFJlbGV2YW50RmlsdGVycy5jb25jYXQoZmlsdGVyc1dpdGhvdXRTZW1hbnRpY0RhdGVPcHMuZmlsdGVycyk7XG5cdFx0fVxuXHRcdGlmIChzZW1hbnRpY0RhdGVGaWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFsbFJlbGV2YW50RmlsdGVycy5wdXNoKC4uLnNlbWFudGljRGF0ZUZpbHRlcnMpO1xuXHRcdH1cblx0XHRjb25zdCBhbGxGaWx0ZXJzID0gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBhbGxSZWxldmFudEZpbHRlcnMsXG5cdFx0XHRhbmQ6IHRydWVcblx0XHR9KTtcblx0XHRjb25zdCBwYXJhbWV0ZXJzID0ge1xuXHRcdFx0JHNlYXJjaDogQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpIHx8IHVuZGVmaW5lZFxuXHRcdH07XG5cdFx0Ly8gY3JlYXRlIGhpZGRlbiBiaW5kaW5nIHdpdGggYWxsIGZpbHRlcnMgZS5nLiBzdGF0aWMgZmlsdGVycyBhbmQgZmlsdGVycyB3aXRoIHNlbWFudGljIG9wZXJhdG9yc1xuXHRcdGNvbnN0IHRlbXBUYWJsZUJpbmRpbmcgPSBtb2RlbC5iaW5kTGlzdChiaW5kaW5nLmdldFBhdGgoKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFsbEZpbHRlcnMsIHBhcmFtZXRlcnMpO1xuXHRcdGxldCB1cmwgPSAoYXdhaXQgdGVtcFRhYmxlQmluZGluZy5yZXF1ZXN0RG93bmxvYWRVcmwoKSkgPz8gXCJcIjtcblx0XHRmb3IgKGNvbnN0IFtwbGFjZWhvbGRlciwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZscE1hcHBlZFBsYWNlaG9sZGVycykpIHtcblx0XHRcdHVybCA9IHVybC5yZXBsYWNlKHBsYWNlaG9sZGVyLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB1cmw7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzb3J0IGNvbmRpdGlvbnMgcXVlcnkgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyBUaGUgc29ydCBjb25kaXRpb25zIHF1ZXJ5IHN0cmluZ1xuXHQgKi9cblx0Z2V0U29ydENvbmRpdGlvbnNRdWVyeSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlU2hhcmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBzb3J0Q29uZGl0aW9ucyA9ICh0YWJsZS5nZXRTb3J0Q29uZGl0aW9ucygpIGFzIFNvcnRDb25kaXRpb25zKT8uc29ydGVycztcblx0XHRyZXR1cm4gc29ydENvbmRpdGlvbnNcblx0XHRcdD8gc29ydENvbmRpdGlvbnNcblx0XHRcdFx0XHQubWFwKGZ1bmN0aW9uIChzb3J0Q29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzb3J0Q29uZGl0aW9uc1BhdGggPSB0YWJsZS5nZXRQcm9wZXJ0eUhlbHBlcigpLmdldFByb3BlcnR5KHNvcnRDb25kaXRpb24ubmFtZSk/LnBhdGg7XG5cdFx0XHRcdFx0XHRpZiAoc29ydENvbmRpdGlvbnNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBgJHtzb3J0Q29uZGl0aW9uc1BhdGh9JHtzb3J0Q29uZGl0aW9uLmRlc2NlbmRpbmcgPyBcIiBkZXNjXCIgOiBcIlwifWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5qb2luKFwiLFwiKVxuXHRcdFx0OiBcIlwiO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUFzQ0E7QUFDQTtBQUNBO0VBRkEsSUFHcUJBLFlBQVksSUFBQUMsSUFBQSxHQStGL0JDLDBCQUEwQixDQUFDLHNCQUFzQixFQUFFLHVCQUF1QixDQUFDLEVBQUFDLE1BQUE7SUFBQSxTQUFBSCxhQUFBO0lBQUFJLFFBQUEsR0FBQUosWUFBQTtJQUFBLElBQUFLLE1BQUEsR0FBQUwsWUFBQSxDQUFBTSxTQUFBO0lBQUFELE1BQUEsQ0E5RjVFRSxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQ0MsVUFBb0IsRUFBUSxDQUFDLENBQUM7SUFBQUgsTUFBQSxDQUV6Q0ksbUNBQW1DLEdBQW5DLFNBQUFBLG1DQUFtQ0EsQ0FFbENDLFVBQTBCLEVBQzFCQyxRQUFtQixFQUNuQkMsd0JBQWdDLEVBQ3pCO01BQ1AsSUFBSUQsUUFBUSxDQUFDRSxNQUFNLElBQUlELHdCQUF3QixFQUFFO1FBQ2hERCxRQUFRLENBQUNHLE9BQU8sQ0FBQyxNQUFPQyxPQUFnQixJQUFLO1VBQzVDLE1BQU1DLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQ0MsNkJBQTZCLENBQUNGLE9BQU8sQ0FBQztVQUNwRSxJQUFJLElBQUksQ0FBQ0csNEJBQTRCLENBQUNILE9BQU8sQ0FBQyxJQUFJQyxVQUFVLEVBQUU7WUFDN0Qs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
|
|
@@ -137,8 +137,16 @@ export default class TableSharing implements IInterfaceWithMixin {
|
|
|
137
137
|
@controllerExtensionHandler("collaborationManager", "collectAvailableCards")
|
|
138
138
|
async collectAvailableCards(this: ITableBlock & TableSharing, cards: WrappedCard[]): Promise<void> {
|
|
139
139
|
const actionToolbarItems = this.getContent().getActions() as ActionToolbarAction[];
|
|
140
|
+
const isFclModeObjectPageOpen =
|
|
141
|
+
(this.getPageController()?.getAppComponent()?.getRootViewController() as FclController)?.getRightmostView()?.getViewData()
|
|
142
|
+
?.converterType === "ObjectPage";
|
|
140
143
|
if (
|
|
141
|
-
hasInsightActionEnabled(
|
|
144
|
+
hasInsightActionEnabled(
|
|
145
|
+
actionToolbarItems,
|
|
146
|
+
this.getContent().getFilter(),
|
|
147
|
+
TableInsightsHelper.getInsightsRelevantColumns(this)
|
|
148
|
+
) &&
|
|
149
|
+
!isFclModeObjectPageOpen
|
|
142
150
|
) {
|
|
143
151
|
const card = await this.getCardManifestTable();
|
|
144
152
|
if (Object.keys(card).length > 0) {
|