@sapui5/sap.fe.macros 1.138.0 → 1.139.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 +21 -4
- package/src/sap/fe/macros/Field.ts +21 -3
- package/src/sap/fe/macros/FooterContent.js +40 -10
- package/src/sap/fe/macros/FooterContent.tsx +44 -8
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MultiValueField.js +17 -4
- package/src/sap/fe/macros/MultiValueField.tsx +7 -2
- 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 +73 -40
- package/src/sap/fe/macros/Share.tsx +29 -1
- package/src/sap/fe/macros/ValueHelp.js +3 -4
- package/src/sap/fe/macros/ValueHelp.tsx +2 -3
- 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 +30 -30
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
- 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/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +19 -3
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +15 -4
- 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/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/designtime/Designtime.helper.js +12 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -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 +9 -3
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +22 -1
- 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/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/FormActionButtons.fragment.xml +13 -2
- 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/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- 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/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 +4 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +49 -11
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +51 -4
- 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 +10 -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/ValueListDialogTable.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +7 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +8 -7
- 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 +37 -29
- package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
- package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
- package/src/sap/fe/macros/messagebundle_da.properties +6 -4
- package/src/sap/fe/macros/messagebundle_de.properties +11 -9
- package/src/sap/fe/macros/messagebundle_el.properties +7 -5
- package/src/sap/fe/macros/messagebundle_en.properties +8 -6
- package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
- package/src/sap/fe/macros/messagebundle_es.properties +6 -4
- package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
- package/src/sap/fe/macros/messagebundle_et.properties +5 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
- package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
- package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
- package/src/sap/fe/macros/messagebundle_id.properties +8 -6
- package/src/sap/fe/macros/messagebundle_it.properties +4 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
- package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
- package/src/sap/fe/macros/messagebundle_no.properties +6 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
- package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
- package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
- package/src/sap/fe/macros/messagebundle_th.properties +4 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
- package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
- package/src/sap/fe/macros/messages/MessageButton.js +17 -19
- package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
- 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 +18 -8
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +30 -5
- 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/TableRuntime.js +3 -3
- package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -19
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -23
- 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 +4 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +11 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +19 -14
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
|
@@ -447,18 +447,27 @@ class Field extends MacroAPI<{ readOnly: boolean; semanticObject: string }> {
|
|
|
447
447
|
// a potential UNLOCK that would be sent in handleFocusOut, to make sure it's sent after the CHANGE message
|
|
448
448
|
controller?.collaborativeDraft.retainAsyncMessages(data);
|
|
449
449
|
|
|
450
|
-
const
|
|
451
|
-
if (isDataUpdated) {
|
|
450
|
+
const sendCollaborationMessagesAfterPatchCompleted = (): void => {
|
|
452
451
|
// The value has been changed by the user --> wait until it's sent to the server before sending a notification to other users
|
|
453
452
|
binding.attachEventOnce("patchCompleted", function () {
|
|
454
453
|
controller?.collaborativeDraft.send({ action: Activity.Change, content: data });
|
|
455
454
|
controller?.collaborativeDraft.releaseAsyncMessages(data);
|
|
456
455
|
});
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
const isDataUpdated = binding.hasPendingChanges();
|
|
459
|
+
if (isDataUpdated) {
|
|
460
|
+
sendCollaborationMessagesAfterPatchCompleted();
|
|
457
461
|
}
|
|
458
462
|
|
|
459
463
|
const updateCollaboration = (): void => {
|
|
460
464
|
if (!isDataUpdated) {
|
|
461
|
-
|
|
465
|
+
// We need to check again if the binding has some pending changes, since it may have been updated once the Field value is resolved
|
|
466
|
+
if (binding.hasPendingChanges()) {
|
|
467
|
+
sendCollaborationMessagesAfterPatchCompleted();
|
|
468
|
+
} else {
|
|
469
|
+
controller?.collaborativeDraft.releaseAsyncMessages(data);
|
|
470
|
+
}
|
|
462
471
|
}
|
|
463
472
|
};
|
|
464
473
|
if (source.isA("sap.ui.mdc.Field") || (source as Control).isA("sap.ui.mdc.MultiValueField")) {
|
|
@@ -577,6 +586,15 @@ class Field extends MacroAPI<{ readOnly: boolean; semanticObject: string }> {
|
|
|
577
586
|
}
|
|
578
587
|
}
|
|
579
588
|
|
|
589
|
+
/**
|
|
590
|
+
* Method to determine if the field has some Mdc field with pending user input.
|
|
591
|
+
* @returns True if the field has pending user input, false otherwise
|
|
592
|
+
*/
|
|
593
|
+
hasPendingUserInput(): boolean {
|
|
594
|
+
const targetControl = Field.getControlInFieldWrapper(this.getContent());
|
|
595
|
+
return !!(targetControl && targetControl.isA<mdcField>("sap.ui.mdc.Field") && targetControl.hasPendingUserInput());
|
|
596
|
+
}
|
|
597
|
+
|
|
580
598
|
/**
|
|
581
599
|
* Returns the label controls of the field
|
|
582
600
|
* when being referenced by the 'labelFor' attribute on the label or when in a form.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/controls/CommandExecution", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/library", "sap/fe/core/templating/CriticalityFormatters", "sap/fe/macros/messages/MessageButton", "sap/m/Button", "sap/m/DraftIndicator", "sap/m/Menu", "sap/m/MenuButton", "sap/m/MenuItem", "sap/m/OverflowToolbar", "sap/m/ToolbarSpacer", "sap/ui/core/InvisibleText", "sap/fe/base/HookSupport", "sap/fe/templates/ObjectPage/ObjectPageTemplating", "sap/m/OverflowToolbarLayoutData", "sap/ui/model/json/JSONModel", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ClassSupport, BuildingBlock, CommandExecution, ManifestSettings, MetaModelConverter, DataField, Action, BindingHelper, FPMHelper, ModelHelper, library, CriticalityFormatters, MessageButton, Button, DraftIndicator, Menu, MenuButton, MenuItem, OverflowToolbar, ToolbarSpacer, InvisibleText, HookSupport, ObjectPageTemplating, OverflowToolbarLayoutData, JSONModel, _jsx, _jsxs) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/controls/CommandExecution", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/library", "sap/fe/core/templating/CriticalityFormatters", "sap/fe/macros/messages/MessageButton", "sap/m/Button", "sap/m/DraftIndicator", "sap/m/Menu", "sap/m/MenuButton", "sap/m/MenuItem", "sap/m/OverflowToolbar", "sap/m/ToolbarSpacer", "sap/ui/core/InvisibleText", "sap/fe/base/HookSupport", "sap/fe/templates/ObjectPage/ObjectPageTemplating", "sap/m/OverflowToolbarLayoutData", "sap/m/ToolbarSeparator", "sap/ui/model/json/JSONModel", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ClassSupport, BuildingBlock, CommandExecution, ManifestSettings, MetaModelConverter, DataField, Action, BindingHelper, FPMHelper, ModelHelper, library, CriticalityFormatters, MessageButton, Button, DraftIndicator, Menu, MenuButton, MenuItem, OverflowToolbar, ToolbarSpacer, InvisibleText, HookSupport, ObjectPageTemplating, OverflowToolbarLayoutData, ToolbarSeparator, JSONModel, _jsx, _jsxs) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;
|
|
@@ -145,7 +145,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
145
145
|
"dt:designtime": "not-adaptable"
|
|
146
146
|
});
|
|
147
147
|
};
|
|
148
|
-
_proto.getPrimary = function getPrimary(emphasizedExpression) {
|
|
148
|
+
_proto.getPrimary = function getPrimary(emphasizedExpression, action) {
|
|
149
149
|
const controller = this._getOwner()?.getRootController();
|
|
150
150
|
const hiddenDraft = controller.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft?.enabled;
|
|
151
151
|
const viewData = controller.getView().getViewData();
|
|
@@ -181,7 +181,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
181
181
|
visible: compileExpression(ifElse(hiddenDraft === true, ifElse(viewData.fclEnabled === true, and(UI.IsEditable, equal(pathInModel("/showSaveAndCancelButton", "fclhelper"), true)), UI.IsEditable), UI.IsEditable)),
|
|
182
182
|
enabled: true,
|
|
183
183
|
"jsx:command": "cmd:Save|press",
|
|
184
|
-
"dt:designtime": "not-adaptable"
|
|
184
|
+
"dt:designtime": "not-adaptable",
|
|
185
|
+
children: {
|
|
186
|
+
layoutData: _jsx(OverflowToolbarLayoutData, {
|
|
187
|
+
priority: action?.priority,
|
|
188
|
+
group: action?.group
|
|
189
|
+
})
|
|
190
|
+
}
|
|
185
191
|
});
|
|
186
192
|
};
|
|
187
193
|
_proto.getTextSaveButton = function getTextSaveButton() {
|
|
@@ -195,7 +201,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
195
201
|
// If the roor object is not a new object then all pages should show Save.
|
|
196
202
|
return ifElse(ifElse(this.dataViewModelPath.startingEntitySet.annotations.Session?.StickySessionSupported !== undefined, UI.IsCreateMode, ifElse(this._hiddenDraft, and(pathInModel("/rootIsNewObject", "footerInternal")), Draft.IsNewObject)), createButtonText, saveButtonText);
|
|
197
203
|
};
|
|
198
|
-
_proto.getCancelButton = function getCancelButton() {
|
|
204
|
+
_proto.getCancelButton = function getCancelButton(action) {
|
|
199
205
|
const controller = this._getOwner()?.getRootController();
|
|
200
206
|
const hiddenDraft = controller.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft?.enabled;
|
|
201
207
|
const viewData = controller.getView().getViewData();
|
|
@@ -220,6 +226,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
220
226
|
"dt:designtime": "not-adaptable",
|
|
221
227
|
children: {
|
|
222
228
|
layoutData: _jsx(OverflowToolbarLayoutData, {
|
|
229
|
+
priority: action?.priority,
|
|
223
230
|
closeOverflowOnInteraction: false
|
|
224
231
|
})
|
|
225
232
|
}
|
|
@@ -243,6 +250,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
243
250
|
}
|
|
244
251
|
});
|
|
245
252
|
};
|
|
253
|
+
_proto.getToolbarSeparator = function getToolbarSeparator(action) {
|
|
254
|
+
return _jsx(ToolbarSeparator, {
|
|
255
|
+
children: {
|
|
256
|
+
layoutData: _jsx(OverflowToolbarLayoutData, {
|
|
257
|
+
group: action.group
|
|
258
|
+
})
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
};
|
|
246
262
|
_proto.getDataFieldForActionButton = function getDataFieldForActionButton(action) {
|
|
247
263
|
if (action.annotationPath) {
|
|
248
264
|
const controller = this._getOwner()?.getRootController();
|
|
@@ -293,7 +309,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
293
309
|
visible: action.visible,
|
|
294
310
|
enabled: action.enabled,
|
|
295
311
|
type: CriticalityFormatters.buildExpressionForCriticalityButtonType(dataFieldContextModelPath),
|
|
296
|
-
icon: action?.isAIOperation === true ? aiIcon : undefined
|
|
312
|
+
icon: action?.isAIOperation === true ? aiIcon : undefined,
|
|
313
|
+
children: {
|
|
314
|
+
layoutData: _jsx(OverflowToolbarLayoutData, {
|
|
315
|
+
priority: action.priority,
|
|
316
|
+
group: action.group
|
|
317
|
+
})
|
|
318
|
+
}
|
|
297
319
|
});
|
|
298
320
|
}
|
|
299
321
|
}
|
|
@@ -312,7 +334,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
312
334
|
}
|
|
313
335
|
};
|
|
314
336
|
}
|
|
315
|
-
return
|
|
337
|
+
return _jsxs(Button, {
|
|
316
338
|
id: this.createId(action.id),
|
|
317
339
|
"dt:designtime": action.visible === "true" || action.visible === "false" ? undefined : "not-adaptable-visibility",
|
|
318
340
|
text: action.text ?? "",
|
|
@@ -320,7 +342,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
320
342
|
type: "Transparent",
|
|
321
343
|
visible: action.visible,
|
|
322
344
|
enabled: action.enabled,
|
|
323
|
-
icon: action?.isAIOperation === true ? aiIcon : undefined
|
|
345
|
+
icon: action?.isAIOperation === true ? aiIcon : undefined,
|
|
346
|
+
children: [{
|
|
347
|
+
layoutData: _jsx(OverflowToolbarLayoutData, {
|
|
348
|
+
priority: action.priority,
|
|
349
|
+
group: action.group
|
|
350
|
+
})
|
|
351
|
+
}, "\u201A"]
|
|
324
352
|
});
|
|
325
353
|
}
|
|
326
354
|
};
|
|
@@ -337,15 +365,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
337
365
|
const emphasizedButtonToolKitExp = emphasizedButtonExpression ? resolveBindingString(emphasizedButtonExpression) : undefined;
|
|
338
366
|
return this.getPrimary(compileExpression(ifElse(Draft.IsNewObject, undefined, emphasizedButtonToolKitExp)));
|
|
339
367
|
}
|
|
340
|
-
return this.getPrimary(emphasizedButtonExpression);
|
|
368
|
+
return this.getPrimary(emphasizedButtonExpression, action);
|
|
341
369
|
case ActionType.Secondary:
|
|
342
|
-
return this.getCancelButton();
|
|
370
|
+
return this.getCancelButton(action);
|
|
343
371
|
case ActionType.CreateNext:
|
|
344
372
|
if (this._hiddenDraft && !this._hideCreateNext) {
|
|
345
373
|
const emphasizedButtonToolKitExp = emphasizedButtonExpression ? resolveBindingString(emphasizedButtonExpression) : undefined;
|
|
346
374
|
return this.getCreateNextButton(compileExpression(ifElse(Draft.IsNewObject, emphasizedButtonToolKitExp, undefined)));
|
|
347
375
|
}
|
|
348
376
|
return;
|
|
377
|
+
case ActionType.Separator:
|
|
378
|
+
return this.getToolbarSeparator(action);
|
|
349
379
|
default:
|
|
350
380
|
return this.getManifestButton(action);
|
|
351
381
|
}
|
|
@@ -416,4 +446,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
416
446
|
_exports = FooterContent;
|
|
417
447
|
return _exports;
|
|
418
448
|
}, false);
|
|
419
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb290ZXJDb250ZW50IiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsIl9kZWM0IiwicHJvcGVydHkiLCJ0eXBlIiwicmVxdWlyZWQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOCIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcHMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2hpZGVDcmVhdGVOZXh0IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiX2hpZGRlbkRyYWZ0IiwiY29udHJvbGxlciIsIl9nZXRPd25lciIsImdldFJvb3RDb250cm9sbGVyIiwidmlld0NvbnRleHQiLCJnZXRWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc05ld09iamVjdCIsImVkaXRGbG93IiwiaXNSb290Q29udGV4dE5ldyIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJpbml0aWFsaXplIiwib3duZXIiLCJzZXRNb2RlbCIsIkpTT05Nb2RlbCIsImFjdGlvbnMiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwiYmluZGluZ0NvbnRleHRzIiwiY29udmVydGVyQ29udGV4dCIsImdldE9iamVjdCIsImNvbnRleHRQYXRoVG9Vc2UiLCJmdWxsQ29udGV4dFBhdGgiLCJvRGF0YU1ldGFNb2RlbCIsIm1vZGVscyIsIm1ldGFNb2RlbCIsImRhdGFWaWV3TW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJpc0RyYWZ0VmFsaWRhdGlvbiIsIk1vZGVsSGVscGVyIiwiZ2V0RHJhZnRSb290IiwiUHJlcGFyYXRpb25BY3Rpb24iLCJlbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJNZXNzYWdlcyIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50Iiwib25NZXRhZGF0YUF2YWlsYWJsZSIsImdldEFwcENvbXBvbmVudCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiaGlkZUNyZWF0ZU5leHQiLCJnZXRBY3Rpb25Nb2RlbFBhdGgiLCJhY3Rpb24iLCJhbm5vdGF0aW9uUGF0aCIsImFjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidW5kZWZpbmVkIiwiZ2V0RHJhZnRJbmRpY2F0b3IiLCJlbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJjb21tb25Bbm5vdGF0aW9uIiwiRHJhZnRSb290IiwiRHJhZnROb2RlIiwiX2pzeCIsIkRyYWZ0SW5kaWNhdG9yIiwic3RhdGUiLCJ2aXNpYmxlIiwiZ2V0QXBwbHlCdXR0b24iLCJlbXBoYXNpemVkRXhwcmVzc2lvbiIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJpc0Rlc2t0b3AiLCJmY2xFbmFibGVkIiwiTWVudUJ1dHRvbiIsInRleHQiLCJkZWZhdWx0QWN0aW9uIiwiX2FwcGx5RG9jdW1lbnQiLCJ1c2VEZWZhdWx0QWN0aW9uT25seSIsImJ1dHRvbk1vZGUiLCJjaGlsZHJlbiIsIk1lbnUiLCJNZW51SXRlbSIsInByZXNzIiwiX3ZhbGlkYXRlRG9jdW1lbnQiLCJCdXR0b24iLCJpZCIsImNyZWF0ZUlkIiwiZ2V0UHJpbWFyeSIsImhpZGRlbkRyYWZ0IiwiYWRkRGVwZW5kZW50IiwiQ29tbWFuZEV4ZWN1dGlvbiIsInJlZiIsImNtZEV4ZWN1dGlvbiIsImNvbW1hbmQiLCJleGVjdXRlIiwiX3NhdmVEb2N1bWVudCIsIm9yIiwiaWZFbHNlIiwiYW5kIiwiVUkiLCJJc0VkaXRhYmxlIiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsImdldFRleHRTYXZlQnV0dG9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJzYXZlQnV0dG9uVGV4dCIsImdldFRyYW5zbGF0ZWRUZXh0IiwiY3JlYXRlQnV0dG9uVGV4dCIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiSXNDcmVhdGVNb2RlIiwiRHJhZnQiLCJJc05ld09iamVjdCIsImdldENhbmNlbEJ1dHRvbiIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImlzRHJhZnRSb290IiwiYXJpYUhhc1BvcHVwIiwiY29uc3RhbnQiLCJsYXlvdXREYXRhIiwiT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSIsImNsb3NlT3ZlcmZsb3dPbkludGVyYWN0aW9uIiwiZ2V0Q3JlYXRlTmV4dEJ1dHRvbiIsImNyZWF0ZU5leHREb2N1bWVudCIsImdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsInByZXNzRXZlbnQiLCJ2aWV3IiwiYW5ub3RhdGlvblBhdGhDb250ZXh0IiwiZGF0YUZpZWxkQ29udGV4dE1vZGVsUGF0aCIsImRhdGFGaWVsZEZvckFjdGlvbiIsInRhcmdldE9iamVjdCIsImFjdGlvblBhcmFtZXRlcnMiLCJlbnRpdHlTZXROYW1lIiwibmFtZSIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImxpYnJhcnkiLCJDaGFuZ2VTZXQiLCJJc29sYXRlZCIsImxhYmVsIiwiTGFiZWwiLCJ0b1N0cmluZyIsImlzTmF2aWdhYmxlIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiaGFuZGxlcnMiLCJvbkNhbGxBY3Rpb24iLCJBY3Rpb24iLCJjb250ZXh0cyIsIm1vZGVsIiwic3RhcnRzV2l0aCIsImlzQWN0aW9uV2l0aERpYWxvZyIsIkNyaXRpY2FsaXR5Rm9ybWF0dGVycyIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZSIsImljb24iLCJpc0FJT3BlcmF0aW9uIiwiYWlJY29uIiwiZ2V0TWFuaWZlc3RCdXR0b24iLCJPYmplY3RQYWdlVGVtcGxhdGluZyIsImlzTWFuaWZlc3RBY3Rpb24iLCJldmVudCIsIkZQTUhlbHBlciIsImFjdGlvbldyYXBwZXIiLCJoYW5kbGVyTW9kdWxlIiwiaGFuZGxlck1ldGhvZCIsImNhdGNoIiwiZXJyb3IiLCJMb2ciLCJnZXRBY3Rpb25Db250cm9scyIsImVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uIiwiYnVpbGRFbXBoYXNpemVkQnV0dG9uRXhwcmVzc2lvbiIsIm1hcCIsIkFjdGlvblR5cGUiLCJEZWZhdWx0QXBwbHkiLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJQcmltYXJ5IiwiZW1waGFzaXplZEJ1dHRvblRvb2xLaXRFeHAiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsIlNlY29uZGFyeSIsIkNyZWF0ZU5leHQiLCJmaWx0ZXIiLCJtZXNzYWdlQnV0dG9uIiwiTWVzc2FnZUJ1dHRvbiIsIm1lc3NhZ2VDaGFuZ2UiLCJfZ2V0Rm9vdGVyVmlzaWJpbGl0eSIsImFyaWFMYWJlbGxlZEJ5IiwiZm9vdGVyQmFyIiwiX2pzeHMiLCJPdmVyZmxvd1Rvb2xiYXIiLCJhc3luY01vZGUiLCJJbnZpc2libGVUZXh0IiwiVG9vbGJhclNwYWNlciIsImZpcmVQcmVzcyIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZvb3RlckNvbnRlbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFGaWVsZEZvckFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBlcXVhbCwgaWZFbHNlLCBvciwgcGF0aEluTW9kZWwsIHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBkZWZpbmVSZWZlcmVuY2UsIGRlZmluZVVJNUNsYXNzLCBpbXBsZW1lbnRJbnRlcmZhY2UsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByb3BlcnRpZXMsIFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncywgSGlkZGVuRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvbldpdGhEaWFsb2cgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7IGFpSWNvbiwgdHlwZSBCYXNlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlTGliIH0gZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgKiBhcyBDcml0aWNhbGl0eUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ3JpdGljYWxpdHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTWVzc2FnZUJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZXNzYWdlcy9NZXNzYWdlQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL09iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERyYWZ0SW5kaWNhdG9yIGZyb20gXCJzYXAvbS9EcmFmdEluZGljYXRvclwiO1xuaW1wb3J0IE1lbnUgZnJvbSBcInNhcC9tL01lbnVcIjtcbmltcG9ydCBNZW51QnV0dG9uIGZyb20gXCJzYXAvbS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJcIjtcbmltcG9ydCBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0ICogYXMgT2JqZWN0UGFnZVRlbXBsYXRpbmcgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9PYmplY3RQYWdlVGVtcGxhdGluZ1wiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckxheW91dERhdGFcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG50eXBlIENvbnRyb2xsZXJXaXRoQWN0aW9uID0gQ29udHJvbGxlciAmIHtcblx0aGFuZGxlcnM6IHtcblx0XHRvbkNhbGxBY3Rpb246IEZ1bmN0aW9uO1xuXHR9O1xufTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5Gb290ZXJDb250ZW50XCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb290ZXJDb250ZW50IGV4dGVuZHMgQnVpbGRpbmdCbG9jazxPdmVyZmxvd1Rvb2xiYXI+IHtcblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC51aS5jb3JlLlRvb2xiYXJcIilcblx0X19pbXBsZW1lbnRzX19zYXBfdWlfY29yZV9Ub29sYmFyID0gdHJ1ZTtcblxuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLm0uSUJhclwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF9tX0lCYXIgPSB0cnVlO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRyZXF1aXJlZDogdHJ1ZVxuXHR9KVxuXHRpZCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdGNtZEV4ZWN1dGlvbiE6IFJlZjxDb21tYW5kRXhlY3V0aW9uPjtcblxuXHRhY3Rpb25zPzogQmFzZUFjdGlvbltdO1xuXG5cdG9EYXRhTWV0YU1vZGVsITogT0RhdGFNZXRhTW9kZWw7XG5cblx0ZGF0YVZpZXdNb2RlbFBhdGghOiBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD47XG5cblx0aXNEcmFmdFZhbGlkYXRpb24hOiBib29sZWFuO1xuXG5cdF9oaWRkZW5EcmFmdCE6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBfaGlkZUNyZWF0ZU5leHQgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxGb290ZXJDb250ZW50Piwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzLCBvdGhlcnMpO1xuXHR9XG5cblx0QGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyKFwicm91dGluZ1wiLCBcIm9uQWZ0ZXJCaW5kaW5nXCIpXG5cdHB1YmxpYyBhc3luYyBvbkFmdGVyQmluZGluZyh0aGlzOiBGb290ZXJDb250ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuX2hpZGRlbkRyYWZ0KSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0Um9vdENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcjtcblx0XHRcdGNvbnN0IHZpZXdDb250ZXh0ID0gY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdGNvbnN0IGlzTmV3T2JqZWN0ID0gYXdhaXQgY29udHJvbGxlci5lZGl0Rmxvdy5pc1Jvb3RDb250ZXh0TmV3KHZpZXdDb250ZXh0KTtcblx0XHRcdCh0aGlzLmdldE1vZGVsKFwiZm9vdGVySW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShcIi9yb290SXNOZXdPYmplY3RcIiwgaXNOZXdPYmplY3QpO1xuXHRcdH1cblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpO1xuXHRcdHRoaXMuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCgpLCBcImZvb3RlckludGVybmFsXCIpO1xuXHRcdHRoaXMuYWN0aW9ucyA9IG93bmVyPy5wcmVwcm9jZXNzb3JDb250ZXh0Py5iaW5kaW5nQ29udGV4dHM/LmNvbnZlcnRlckNvbnRleHQ/LmdldE9iamVjdChcImZvb3RlckFjdGlvbnNcIik7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhUb1VzZSA9IG93bmVyPy5wcmVwcm9jZXNzb3JDb250ZXh0Py5mdWxsQ29udGV4dFBhdGg7XG5cdFx0dGhpcy5vRGF0YU1ldGFNb2RlbCA9IG93bmVyPy5wcmVwcm9jZXNzb3JDb250ZXh0Py5tb2RlbHMubWV0YU1vZGVsIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdHRoaXMuZGF0YVZpZXdNb2RlbFBhdGggPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoKHRoaXMubWV0YVBhdGgsIGNvbnRleHRQYXRoVG9Vc2UgPz8gdGhpcy5jb250ZXh0UGF0aCkhO1xuXHRcdGNvbnN0IHN0YXJ0aW5nRW50aXR5U2V0ID0gdGhpcy5kYXRhVmlld01vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldDtcblx0XHR0aGlzLmlzRHJhZnRWYWxpZGF0aW9uID0gISEoXG5cdFx0XHRNb2RlbEhlbHBlci5nZXREcmFmdFJvb3Qoc3RhcnRpbmdFbnRpdHlTZXQpPy5QcmVwYXJhdGlvbkFjdGlvbiAmJiBzdGFydGluZ0VudGl0eVNldD8uZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/Lk1lc3NhZ2VzXG5cdFx0KTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25NZXRhZGF0YUF2YWlsYWJsZSBldmVudC5cblx0ICovXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cdFx0dGhpcy5faGlkZGVuRHJhZnQgPSAoY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdFx0Py5lbmFibGVkO1xuXHRcdHRoaXMuX2hpZGVDcmVhdGVOZXh0ID1cblx0XHRcdChjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5oaWRlQ3JlYXRlTmV4dCA9PT1cblx0XHRcdHRydWU7XG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuaW5pdGlhbGl6ZSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0QWN0aW9uTW9kZWxQYXRoKGFjdGlvbjogQmFzZUFjdGlvbik6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkRm9yQWN0aW9uPiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBhY3Rpb24uYW5ub3RhdGlvblBhdGg7XG5cdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25Db250ZXh0ID0gdGhpcy5vRGF0YU1ldGFNb2RlbC5nZXRDb250ZXh0KGFubm90YXRpb25QYXRoKTtcblx0XHRcdHJldHVybiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkRm9yQWN0aW9uPihhY3Rpb25Db250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGdldERyYWZ0SW5kaWNhdG9yKCk6IERyYWZ0SW5kaWNhdG9yIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBlbnRpdHlTZXQgPSAodGhpcy5kYXRhVmlld01vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgfHwgdGhpcy5kYXRhVmlld01vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldCkgYXMgRW50aXR5U2V0OyAvLyBzdGFydGluZ0VudGl0eVNldCBpcyB1c2VkIG9uIGNvbnRhaW5tZW50IHNjZW5hcmlvXG5cdFx0Y29uc3QgY29tbW9uQW5ub3RhdGlvbiA9IGVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ29tbW9uO1xuXHRcdGlmICgoY29tbW9uQW5ub3RhdGlvbj8uRHJhZnRSb290IHx8IGNvbW1vbkFubm90YXRpb24/LkRyYWZ0Tm9kZSkgJiYgIXRoaXMuX2hpZGRlbkRyYWZ0KSB7XG5cdFx0XHRyZXR1cm4gPERyYWZ0SW5kaWNhdG9yIHN0YXRlPVwie3VpPi9kcmFmdFN0YXR1c31cIiB2aXNpYmxlPVwie3VpPi9pc0VkaXRhYmxlfVwiIC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRBcHBseUJ1dHRvbihlbXBoYXNpemVkRXhwcmVzc2lvbjogUHJvcGVydHlCaW5kaW5nSW5mbyk6IEJ1dHRvbiB8IE1lbnVCdXR0b24gfCBudWxsIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0Um9vdENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblx0XHRjb25zdCB2aWV3RGF0YSA9IGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0aWYgKCh2aWV3RGF0YT8udmlld0xldmVsICE9IG51bGwgJiYgdmlld0RhdGE/LnZpZXdMZXZlbCA8PSAxKSB8fCB0aGlzLl9oaWRkZW5EcmFmdCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmlzRHJhZnRWYWxpZGF0aW9uICYmICF2aWV3RGF0YS5pc0Rlc2t0b3AgJiYgIXZpZXdEYXRhLmZjbEVuYWJsZWQpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5UX0NPTU1PTl9PQkpFQ1RfUEFHRV9BUFBMWV9EUkFGVH1cIlxuXHRcdFx0XHRcdGRlZmF1bHRBY3Rpb249e2FzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRcdGF3YWl0IGNvbnRyb2xsZXIuX2FwcGx5RG9jdW1lbnQoY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSk7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0XHR1c2VEZWZhdWx0QWN0aW9uT25seT1cInRydWVcIlxuXHRcdFx0XHRcdGJ1dHRvbk1vZGU9XCJTcGxpdFwiXG5cdFx0XHRcdFx0dHlwZT17ZW1waGFzaXplZEV4cHJlc3Npb259XG5cdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGVcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PE1lbnU+XG5cdFx0XHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5UX0NPTU1PTl9PQkpFQ1RfUEFHRV9WQUxJREFURV9EUkFGVH1cIlxuXHRcdFx0XHRcdFx0XHRwcmVzcz17YXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IGNvbnRyb2xsZXIuX3ZhbGlkYXRlRG9jdW1lbnQoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9NZW51PlxuXHRcdFx0XHQ8L01lbnVCdXR0b24+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17dGhpcy5jcmVhdGVJZChcIlN0YW5kYXJkQWN0aW9uOjpBcHBseVwiKX1cblx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5UX0NPTU1PTl9PQkpFQ1RfUEFHRV9BUFBMWV9EUkFGVH1cIlxuXHRcdFx0XHR0eXBlPXtlbXBoYXNpemVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZW5hYmxlZD17dHJ1ZX1cblx0XHRcdFx0cHJlc3M9e2FzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRhd2FpdCBjb250cm9sbGVyLl9hcHBseURvY3VtZW50KGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHR2aXNpYmxlPVwie3VpPi9pc0VkaXRhYmxlfVwiXG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlXCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UHJpbWFyeShlbXBoYXNpemVkRXhwcmVzc2lvbj86IFByb3BlcnR5QmluZGluZ0luZm8pOiBCdXR0b24gfCBNZW51QnV0dG9uIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgaGlkZGVuRHJhZnQgPSAoY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdFx0Py5lbmFibGVkO1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncztcblx0XHRjb250cm9sbGVyXG5cdFx0XHQuZ2V0VmlldygpXG5cdFx0XHQuYWRkRGVwZW5kZW50KFxuXHRcdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRcdHJlZj17dGhpcy5jbWRFeGVjdXRpb259XG5cdFx0XHRcdFx0Y29tbWFuZD1cIlNhdmVcIlxuXHRcdFx0XHRcdGV4ZWN1dGU9e2NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXtvcihcblx0XHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdFx0aGlkZGVuRHJhZnQgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdFx0XHR2aWV3RGF0YS5mY2xFbmFibGVkID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlcXVhbChwYXRoSW5Nb2RlbChcIi9zaG93U2F2ZUFuZENhbmNlbEJ1dHRvblwiLCBcImZjbGhlbHBlclwiKSwgdHJ1ZSkpLFxuXHRcdFx0XHRcdFx0XHRcdFVJLklzRWRpdGFibGVcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0VUkuSXNFZGl0YWJsZVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiL2lzSW5saW5lRWRpdEFjdGl2ZVwiLCBcInVpXCIpLCB0cnVlKVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdGlmICh0aGlzLmlzRHJhZnRWYWxpZGF0aW9uICYmICF2aWV3RGF0YS5pc0Rlc2t0b3ApIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUZXh0U2F2ZUJ1dHRvbigpfVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlNhdmV8ZGVmYXVsdEFjdGlvblwiXG5cdFx0XHRcdFx0dXNlRGVmYXVsdEFjdGlvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0XHRidXR0b25Nb2RlPVwiU3BsaXRcIlxuXHRcdFx0XHRcdHR5cGU9e2VtcGhhc2l6ZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0XHRoaWRkZW5EcmFmdCA9PT0gdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0XHRcdHZpZXdEYXRhLmZjbEVuYWJsZWQgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0YW5kKFVJLklzRWRpdGFibGUsIGVxdWFsKHBhdGhJbk1vZGVsKFwiL3Nob3dTYXZlQW5kQ2FuY2VsQnV0dG9uXCIsIFwiZmNsaGVscGVyXCIpLCB0cnVlKSksXG5cdFx0XHRcdFx0XHRcdFx0VUkuSXNFZGl0YWJsZVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRVSS5Jc0VkaXRhYmxlXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8TWVudT5cblx0XHRcdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPlRfQ09NTU9OX09CSkVDVF9QQUdFX1ZBTElEQVRFX0RSQUZUfVwiXG5cdFx0XHRcdFx0XHRcdHByZXNzPXthc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgY29udHJvbGxlci5fdmFsaWRhdGVEb2N1bWVudCgpO1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L01lbnU+XG5cdFx0XHRcdDwvTWVudUJ1dHRvbj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0aGlzLmNyZWF0ZUlkKFwiU3RhbmRhcmRBY3Rpb246OlNhdmVcIil9XG5cdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VGV4dFNhdmVCdXR0b24oKX1cblx0XHRcdFx0dHlwZT17ZW1waGFzaXplZEV4cHJlc3Npb259XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdGhpZGRlbkRyYWZ0ID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YS5mY2xFbmFibGVkID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZXF1YWwocGF0aEluTW9kZWwoXCIvc2hvd1NhdmVBbmRDYW5jZWxCdXR0b25cIiwgXCJmY2xoZWxwZXJcIiksIHRydWUpKSxcblx0XHRcdFx0XHRcdFx0VUkuSXNFZGl0YWJsZVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFVJLklzRWRpdGFibGVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGVuYWJsZWQ9e3RydWV9XG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlNhdmV8cHJlc3NcIlxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGdldFRleHRTYXZlQnV0dG9uKCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0XHRjb25zdCBzYXZlQnV0dG9uVGV4dCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX09QX09CSkVDVF9QQUdFX1NBVkVcIik7XG5cdFx0Y29uc3QgY3JlYXRlQnV0dG9uVGV4dCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX09QX09CSkVDVF9QQUdFX0NSRUFURVwiKTtcblx0XHQvLyBJZiB3ZSdyZSBpbiBzdGlja3kgbW9kZSAgLT4gdGhlIHVpIGlzIGluIGNyZWF0ZSBtb2RlLCBzaG93IENyZWF0ZSwgZWxzZSBzaG93IFNhdmVcblx0XHQvLyBJZiBub3QgLT4gd2UncmUgaW4gZHJhZnQgb3IgaGlkZGVuIGRyYWZ0XG5cdFx0Ly8gSW4gY2FzZSBvZiBkcmFmdCBpZiBpdCBpcyBhIG5ldyBvYmplY3QgKCFJc0FjdGl2ZUVudGl0eSAmJiAhSGFzQWN0aXZlRW50aXR5KSwgc2hvdyBjcmVhdGUsIGVsc2Ugc2hvdyBzYXZlXG5cdFx0Ly8gSW4gY2FzZSBvZiBoaWRkZW4gZHJhZnQgdGhlIGJ1dHRvbiBzaG93cyB1cCBpbiBhbGwgcGFnZXMgYW5kIGZvbGxvd3MgdGhlIGJlbG93IGNyaXRlcmlhXG5cdFx0Ly8gXHRcdElmIHRoZSByb290IG9iamVjdCBpcyBhIG5ldyBvYmplY3QgKCFJc0FjdGl2ZUVudGl0eSAmJiAhSGFzQWN0aXZlRW50aXR5KSB0aGVuIGFsbCBwYWdlcyBzaG91bGQgc2hvdyBDcmVhdGUuXG5cdFx0Ly8gXHRcdElmIHRoZSByb29yIG9iamVjdCBpcyBub3QgYSBuZXcgb2JqZWN0IHRoZW4gYWxsIHBhZ2VzIHNob3VsZCBzaG93IFNhdmUuXG5cdFx0cmV0dXJuIGlmRWxzZShcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0KHRoaXMuZGF0YVZpZXdNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkICE9PSB1bmRlZmluZWQsXG5cdFx0XHRcdFVJLklzQ3JlYXRlTW9kZSxcblx0XHRcdFx0aWZFbHNlKHRoaXMuX2hpZGRlbkRyYWZ0LCBhbmQocGF0aEluTW9kZWwoXCIvcm9vdElzTmV3T2JqZWN0XCIsIFwiZm9vdGVySW50ZXJuYWxcIikpLCBEcmFmdC5Jc05ld09iamVjdClcblx0XHRcdCksXG5cdFx0XHRjcmVhdGVCdXR0b25UZXh0LFxuXHRcdFx0c2F2ZUJ1dHRvblRleHRcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDYW5jZWxCdXR0b24oKTogQnV0dG9uIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgaGlkZGVuRHJhZnQgPSAoY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdFx0Py5lbmFibGVkO1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncztcblx0XHRjb250cm9sbGVyLmdldFZpZXcoKS5hZGREZXBlbmRlbnQoXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRyZWY9e3RoaXMuY21kRXhlY3V0aW9ufVxuXHRcdFx0XHRjb21tYW5kPVwiQ2FuY2VsXCJcblx0XHRcdFx0ZXhlY3V0ZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXIuX2NhbmNlbERvY3VtZW50KHsgY2FuY2VsQnV0dG9uOiBcImZlOjpGb290ZXJCYXI6OlN0YW5kYXJkQWN0aW9uOjpDYW5jZWxcIiB9KTtcblx0XHRcdFx0fX1cblx0XHRcdFx0dmlzaWJsZT17aWZFbHNlKFxuXHRcdFx0XHRcdGhpZGRlbkRyYWZ0ID09PSB0cnVlLFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdHZpZXdEYXRhLmZjbEVuYWJsZWQgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZXF1YWwocGF0aEluTW9kZWwoXCIvc2hvd1NhdmVBbmRDYW5jZWxCdXR0b25cIiwgXCJmY2xoZWxwZXJcIiksIHRydWUpKSxcblx0XHRcdFx0XHRcdFVJLklzRWRpdGFibGVcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFVJLklzRWRpdGFibGVcblx0XHRcdFx0KX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHQvLyBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHNldHRpbmcgaXMgbmVlZGVkIHdoZW4gdGhlIGRpc2NhcmQgYnV0dG9uIGlzIGluIHRoZSBvdmVyZmxvd1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0aGlzLmNyZWF0ZUlkKFwiU3RhbmRhcmRBY3Rpb246OkNhbmNlbFwiKX1cblx0XHRcdFx0dGV4dD17XG5cdFx0XHRcdFx0TW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QodGhpcy5kYXRhVmlld01vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQpICYmICF0aGlzLl9oaWRkZW5EcmFmdFxuXHRcdFx0XHRcdFx0PyBcIntzYXAuZmUuaTE4bj5DX0NPTU1PTl9PQkpFQ1RfUEFHRV9ESVNDQVJEX0RSQUZUfVwiXG5cdFx0XHRcdFx0XHQ6IFwie3NhcC5mZS5pMThuPkNfQ09NTU9OX09CSkVDVF9QQUdFX0NBTkNFTH1cIlxuXHRcdFx0XHR9XG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNhbmNlbHxwcmVzc1wiXG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdGhpZGRlbkRyYWZ0ID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YS5mY2xFbmFibGVkID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZXF1YWwocGF0aEluTW9kZWwoXCIvc2hvd1NhdmVBbmRDYW5jZWxCdXR0b25cIiwgXCJmY2xoZWxwZXJcIiksIHRydWUpKSxcblx0XHRcdFx0XHRcdFx0VUkuSXNFZGl0YWJsZVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFVJLklzRWRpdGFibGVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGFyaWFIYXNQb3B1cD17aWZFbHNlKHBhdGhJbk1vZGVsKFwiL2lzRG9jdW1lbnRNb2RpZmllZFwiLCBcInVpXCIpLCBjb25zdGFudChcIkRpYWxvZ1wiKSwgY29uc3RhbnQoXCJOb25lXCIpKX1cblx0XHRcdFx0ZW5hYmxlZD17dHJ1ZX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGVcIlxuXHRcdFx0PlxuXHRcdFx0XHR7eyBsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBjbG9zZU92ZXJmbG93T25JbnRlcmFjdGlvbj17ZmFsc2V9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT4gfX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGdldENyZWF0ZU5leHRCdXR0b24oZW1waGFzaXplZEV4cHJlc3Npb246IFByb3BlcnR5QmluZGluZ0luZm8pOiBCdXR0b24gfCBudWxsIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0Um9vdENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblx0XHRjb25zdCB2aWV3RGF0YSA9IGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJTdGFuZGFyZEFjdGlvbjo6Q3JlYXRlTmV4dFwiKX1cblx0XHRcdFx0dGV4dD17XCJ7c2FwLmZlLmkxOG4+Q19DT01NT05fT0JKRUNUX1BBR0VfQ1JFQVRFX05FWFR9XCJ9XG5cdFx0XHRcdHByZXNzPXtjb250cm9sbGVyLmVkaXRGbG93LmNyZWF0ZU5leHREb2N1bWVudH1cblx0XHRcdFx0dHlwZT17ZW1waGFzaXplZEV4cHJlc3Npb259XG5cdFx0XHRcdHZpc2libGU9e2lmRWxzZShcblx0XHRcdFx0XHR0aGlzLl9oaWRkZW5EcmFmdCA9PT0gdHJ1ZSxcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHR2aWV3RGF0YS5mY2xFbmFibGVkID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0YW5kKERyYWZ0LklzTmV3T2JqZWN0LCBlcXVhbChwYXRoSW5Nb2RlbChcIi9zaG93U2F2ZUFuZENhbmNlbEJ1dHRvblwiLCBcImZjbGhlbHBlclwiKSwgdHJ1ZSkpLFxuXHRcdFx0XHRcdFx0RHJhZnQuSXNOZXdPYmplY3Rcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdERyYWZ0LklzTmV3T2JqZWN0XG5cdFx0XHRcdCl9XG5cdFx0XHRcdGVuYWJsZWQ9e3RydWV9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgbGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgY2xvc2VPdmVyZmxvd09uSW50ZXJhY3Rpb249e2ZhbHNlfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+IH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24oYWN0aW9uOiBCYXNlQWN0aW9uKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoYWN0aW9uLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0Um9vdENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gYWN0aW9uLmFubm90YXRpb25QYXRoO1xuXHRcdFx0bGV0IHByZXNzRXZlbnQ6IHsgcHJlc3M6IChldmVudDogRXZlbnQpID0+IHZvaWQgfSB8IHsgXCJqc3g6Y29tbWFuZFwiOiBDb21tYW5kUHJvcGVydGllcyB9O1xuXHRcdFx0Y29uc3QgdmlldyA9IGNvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGhDb250ZXh0ID0gdGhpcy5vRGF0YU1ldGFNb2RlbC5nZXRDb250ZXh0KGFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IGRhdGFGaWVsZENvbnRleHRNb2RlbFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkRm9yQWN0aW9uPihhbm5vdGF0aW9uUGF0aENvbnRleHQpO1xuXHRcdFx0Y29uc3QgZGF0YUZpZWxkRm9yQWN0aW9uID0gZGF0YUZpZWxkQ29udGV4dE1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRpZiAoZGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogdGhpcy5kYXRhVmlld01vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUsXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOlxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkRm9yQWN0aW9uLkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0PyAobGlicmFyeSBhcyBDb3JlTGliKS5JbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0XHRcdDogKGxpYnJhcnkgYXMgQ29yZUxpYikuSW52b2NhdGlvbkdyb3VwaW5nLklzb2xhdGVkLFxuXHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGRGb3JBY3Rpb24uTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGFjdGlvbi5pc05hdmlnYWJsZSxcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IGFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKCFhY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0XHRcdHByZXNzRXZlbnQgPSB7XG5cdFx0XHRcdFx0XHRwcmVzczogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHQoY29udHJvbGxlciBhcyBDb250cm9sbGVyV2l0aEFjdGlvbikuaGFuZGxlcnMub25DYWxsQWN0aW9uKHZpZXcsIGRhdGFGaWVsZEZvckFjdGlvbi5BY3Rpb24gYXMgc3RyaW5nLCB7XG5cdFx0XHRcdFx0XHRcdFx0Li4uYWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHQuLi57XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kZWw6IHZpZXcuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBjb21tYW5kIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdCBkb2Vzbid0IGdldCB0aGUgbWFuZGF0b3J5IHByZWZpeCBcImNtZDpcIiBzbyB3ZSBuZWVkIHRvIGFkZCBpdFxuXHRcdFx0XHRcdGlmICghYWN0aW9uLmNvbW1hbmQuc3RhcnRzV2l0aChcImNtZDpcIikpIHtcblx0XHRcdFx0XHRcdGFjdGlvbi5jb21tYW5kID0gYGNtZDoke2FjdGlvbi5jb21tYW5kfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHByZXNzRXZlbnQgPSB7IFwianN4OmNvbW1hbmRcIjogYCR7YWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQodGhpcy5nZXRBY3Rpb25Nb2RlbFBhdGgoYWN0aW9uKSl9XG5cdFx0XHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gY29uc2lkZXJzIGFjdGlvbnMgd2l0aCBkeW5hbWljIHZpc2liaWxpdHkuXG5cdFx0XHRcdFx0XHQvLyBXaGVuIHdlIGhhdmUgb3RoZXIgdmFsdWVzIHRoYW4gdHJ1ZSBvciBmYWxzZSwgaS5lLiBhbiBleHByZXNzaW9uLCB3ZSBleGNsdWRlIHRoZSBhY3Rpb25zIGZyb20gYWRhcHRpbmcgdGhlIHZpc2liaWxpdHkuXG5cdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHRcdFx0XHR0ZXh0PXthY3Rpb25QYXJhbWV0ZXJzLmxhYmVsfVxuXHRcdFx0XHRcdFx0ey4uLnByZXNzRXZlbnR9XG5cdFx0XHRcdFx0XHRhcmlhSGFzUG9wdXA9e2lzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGRDb250ZXh0TW9kZWxQYXRoLnRhcmdldE9iamVjdCl9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkfVxuXHRcdFx0XHRcdFx0dHlwZT17Q3JpdGljYWxpdHlGb3JtYXR0ZXJzLmJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZShkYXRhRmllbGRDb250ZXh0TW9kZWxQYXRoKX1cblx0XHRcdFx0XHRcdGljb249e2FjdGlvbj8uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpIGFzIEJ1dHRvbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldE1hbmlmZXN0QnV0dG9uKGFjdGlvbjogQmFzZUFjdGlvbik6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKE9iamVjdFBhZ2VUZW1wbGF0aW5nLmlzTWFuaWZlc3RBY3Rpb24oYWN0aW9uKSkge1xuXHRcdFx0bGV0IHByZXNzRXZlbnQ6IHsgcHJlc3M6IChldmVudDogRXZlbnQpID0+IHZvaWQgfSB8IHsgXCJqc3g6Y29tbWFuZFwiOiBDb21tYW5kUHJvcGVydGllcyB9O1xuXHRcdFx0aWYgKGFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRcdHByZXNzRXZlbnQgPSB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke2FjdGlvbi5jb21tYW5kfXxwcmVzc2AgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHByZXNzRXZlbnQgPSB7XG5cdFx0XHRcdFx0cHJlc3M6IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBhY3Rpb24uaGFuZGxlck1vZHVsZSwgYWN0aW9uLmhhbmRsZXJNZXRob2QsIHt9KS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17dGhpcy5jcmVhdGVJZChhY3Rpb24uaWQpfVxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dCA/PyBcIlwifVxuXHRcdFx0XHRcdHsuLi5wcmVzc0V2ZW50fVxuXHRcdFx0XHRcdHR5cGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWR9XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHQvPlxuXHRcdFx0KSBhcyBCdXR0b247XG5cdFx0fVxuXHR9XG5cblx0Z2V0QWN0aW9uQ29udHJvbHMoKTogQnV0dG9uW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uID0gT2JqZWN0UGFnZVRlbXBsYXRpbmcuYnVpbGRFbXBoYXNpemVkQnV0dG9uRXhwcmVzc2lvbih0aGlzLmRhdGFWaWV3TW9kZWxQYXRoKTtcblx0XHRyZXR1cm4gdGhpcy5hY3Rpb25zXG5cdFx0XHQ/Lm1hcCgoYWN0aW9uOiBCYXNlQWN0aW9uKSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIEFjdGlvblR5cGUuRGVmYXVsdEFwcGx5OlxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0QXBwbHlCdXR0b24oZW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24pO1xuXHRcdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24oYWN0aW9uKTtcblx0XHRcdFx0XHRjYXNlIEFjdGlvblR5cGUuUHJpbWFyeTpcblx0XHRcdFx0XHRcdGlmICh0aGlzLl9oaWRkZW5EcmFmdCAmJiAhdGhpcy5faGlkZUNyZWF0ZU5leHQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZW1waGFzaXplZEJ1dHRvblRvb2xLaXRFeHAgPSBlbXBoYXNpemVkQnV0dG9uRXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0XHRcdD8gcmVzb2x2ZUJpbmRpbmdTdHJpbmcoZW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24pXG5cdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFByaW1hcnkoY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKERyYWZ0LklzTmV3T2JqZWN0LCB1bmRlZmluZWQsIGVtcGhhc2l6ZWRCdXR0b25Ub29sS2l0RXhwKSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0UHJpbWFyeShlbXBoYXNpemVkQnV0dG9uRXhwcmVzc2lvbik7XG5cdFx0XHRcdFx0Y2FzZSBBY3Rpb25UeXBlLlNlY29uZGFyeTpcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldENhbmNlbEJ1dHRvbigpO1xuXHRcdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5DcmVhdGVOZXh0OlxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuX2hpZGRlbkRyYWZ0ICYmICF0aGlzLl9oaWRlQ3JlYXRlTmV4dCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbXBoYXNpemVkQnV0dG9uVG9vbEtpdEV4cCA9IGVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uXG5cdFx0XHRcdFx0XHRcdFx0PyByZXNvbHZlQmluZGluZ1N0cmluZyhlbXBoYXNpemVkQnV0dG9uRXhwcmVzc2lvbilcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Q3JlYXRlTmV4dEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoRHJhZnQuSXNOZXdPYmplY3QsIGVtcGhhc2l6ZWRCdXR0b25Ub29sS2l0RXhwLCB1bmRlZmluZWQpKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRNYW5pZmVzdEJ1dHRvbihhY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigoYWN0aW9uKTogYWN0aW9uIGlzIEJ1dHRvbiA9PiAhIWFjdGlvbik7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IE92ZXJmbG93VG9vbGJhciB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSBjb250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzO1xuXHRcdGNvbnN0IG1lc3NhZ2VCdXR0b246IE1lc3NhZ2VCdXR0b24gPSAoXG5cdFx0XHQ8TWVzc2FnZUJ1dHRvblxuXHRcdFx0XHRpZD17dGhpcy5jcmVhdGVJZChcIk1lc3NhZ2VCdXR0b25cIil9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdHRoaXMuX2hpZGRlbkRyYWZ0ID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YS5mY2xFbmFibGVkID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZXF1YWwocGF0aEluTW9kZWwoXCIvc2hvd1NhdmVBbmRDYW5jZWxCdXR0b25cIiwgXCJmY2xoZWxwZXJcIiksIHRydWUpKSxcblx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdG1lc3NhZ2VDaGFuZ2U9eygpOiB2b2lkID0+IGNvbnRyb2xsZXIuX2dldEZvb3RlclZpc2liaWxpdHkoKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1t0aGlzLmNyZWF0ZUlkKFwiTWVzc2FnZUJ1dHRvbjo6QXJpYVRleHRcIikgYXMgc3RyaW5nXX1cblx0XHRcdFx0dHlwZT1cIkVtcGhhc2l6ZWRcIlxuXHRcdFx0XHRhcmlhSGFzUG9wdXA9XCJEaWFsb2dcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGNvbnN0IGZvb3RlckJhciA9IChcblx0XHRcdDxPdmVyZmxvd1Rvb2xiYXIgaWQ9e3RoaXMuY3JlYXRlSWQoXCJfZmNcIil9IGFzeW5jTW9kZT17dHJ1ZX0+XG5cdFx0XHRcdDxJbnZpc2libGVUZXh0XG5cdFx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJNZXNzYWdlQnV0dG9uOjpBcmlhVGV4dFwiKX1cblx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfQlVUVE9OX0FSSUFfVEVYVH1cIlxuXHRcdFx0XHQvPlxuXHRcdFx0XHR7bWVzc2FnZUJ1dHRvbn1cblx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0e3RoaXMuZ2V0RHJhZnRJbmRpY2F0b3IoKX1cblx0XHRcdFx0e3RoaXMuZ2V0QWN0aW9uQ29udHJvbHMoKX1cblx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdCk7XG5cdFx0Y29udHJvbGxlclxuXHRcdFx0LmdldFZpZXcoKVxuXHRcdFx0LmFkZERlcGVuZGVudChcblx0XHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0XHRyZWY9e3RoaXMuY21kRXhlY3V0aW9ufVxuXHRcdFx0XHRcdGNvbW1hbmQ9XCJPcGVuTWVzc2FnZUJ1dHRvbk1lbnVcIlxuXHRcdFx0XHRcdGV4ZWN1dGU9eygpOiBNZXNzYWdlQnV0dG9uID0+IG1lc3NhZ2VCdXR0b24uZmlyZVByZXNzKCl9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdHJldHVybiBmb290ZXJCYXI7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0NBO0VBR0E7RUFBQSxJQVlxQkEsYUFBYSxJQUFBQyxJQUFBLEdBRGpDQyxjQUFjLENBQUMsNkJBQTZCLENBQUMsRUFBQUMsS0FBQSxHQUU1Q0Msa0JBQWtCLENBQUMscUJBQXFCLENBQUMsRUFBQUMsS0FBQSxHQUd6Q0Qsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEVBQUFFLEtBQUEsR0FHaENDLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFBUTtJQUNkQyxRQUFRLEVBQUU7RUFDWCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdESCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFLFFBQVE7SUFDZEMsUUFBUSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FHREosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSSxLQUFBLEdBRzVCQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBbUJqQkMsMEJBQTBCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLEVBQUFkLElBQUEsQ0FBQWUsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxjQUFBO0lBSnhELFNBQUFsQixjQUFZbUIsS0FBcUQsRUFBRUMsTUFBeUIsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDN0ZBLEtBQUEsR0FBQUgsY0FBQSxDQUFBSSxJQUFBLE9BQU1ILEtBQUssRUFBRUMsTUFBTSxDQUFDO01BQUNHLDBCQUFBLENBQUFGLEtBQUEsdUNBQUFHLFdBQUEsRUFBQUgsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLDhCQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxRQUFBSyxZQUFBLEVBQUFMLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxjQUFBTSxZQUFBLEVBQUFOLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxpQkFBQU8sWUFBQSxFQUFBUCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsa0JBQUFRLFlBQUEsRUFBQVIsS0FBQTtNQUFBQSxLQUFBLENBSGRTLGVBQWUsR0FBRyxLQUFLO01BQUEsT0FBQVQsS0FBQTtJQUkvQjtJQUFDVSxRQUFBLEdBQUEvQixhQUFBO0lBQUFnQyxjQUFBLENBQUFoQyxhQUFBLEVBQUFrQixjQUFBO0lBQUEsSUFBQWUsTUFBQSxHQUFBakMsYUFBQSxDQUFBa0MsU0FBQTtJQUFBRCxNQUFBLENBR1lFLGNBQWMsR0FEM0IsZUFDYUEsY0FBY0EsQ0FBQSxFQUFxQztNQUMvRCxJQUFJLElBQUksQ0FBQ0MsWUFBWSxFQUFFO1FBQ3RCLE1BQU1DLFVBQVUsR0FBRyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixDQUFDLENBQW1CO1FBQzFFLE1BQU1DLFdBQVcsR0FBR0gsVUFBVSxDQUFDSSxPQUFPLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVELE1BQU1DLFdBQVcsR0FBRyxNQUFNTixVQUFVLENBQUNPLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUNMLFdBQVcsQ0FBQztRQUMxRSxJQUFJLENBQUNNLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFlQyxXQUFXLENBQUMsa0JBQWtCLEVBQUVKLFdBQVcsQ0FBQztNQUM1RjtJQUNELENBQUM7SUFBQVYsTUFBQSxDQUVEZSxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQSxFQUFTO01BQ2xCLE1BQU1DLEtBQUssR0FBRyxJQUFJLENBQUNYLFNBQVMsQ0FBQyxDQUFDO01BQzlCLElBQUksQ0FBQ1ksUUFBUSxDQUFDLElBQUlDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUM7TUFDaEQsSUFBSSxDQUFDQyxPQUFPLEdBQUdILEtBQUssRUFBRUksbUJBQW1CLEVBQUVDLGVBQWUsRUFBRUMsZ0JBQWdCLEVBQUVDLFNBQVMsQ0FBQyxlQUFlLENBQUM7TUFDeEcsTUFBTUMsZ0JBQWdCLEdBQUdSLEtBQUssRUFBRUksbUJBQW1CLEVBQUVLLGVBQWU7TUFDcEUsSUFBSSxDQUFDQyxjQUFjLEdBQUdWLEtBQUssRUFBRUksbUJBQW1CLEVBQUVPLE1BQU0sQ0FBQ0MsU0FBMkI7TUFDcEYsSUFBSSxDQUFDQyxpQkFBaUIsR0FBRyxJQUFJLENBQUNDLDZCQUE2QixDQUFDLElBQUksQ0FBQ0MsUUFBUSxFQUFFUCxnQkFBZ0IsSUFBSSxJQUFJLENBQUNRLFdBQVcsQ0FBRTtNQUNqSCxNQUFNQyxpQkFBaUIsR0FBRyxJQUFJLENBQUNKLGlCQUFpQixDQUFDSSxpQkFBaUI7TUFDbEUsSUFBSSxDQUFDQyxpQkFBaUIsR0FBRyxDQUFDLEVBQ3pCQyxXQUFXLENBQUNDLFlBQVksQ0FBQ0gsaUJBQWlCLENBQUMsRUFBRUksaUJBQWlCLElBQUlKLGlCQUFpQixFQUFFSyxVQUFVLENBQUNDLFdBQVcsQ0FBQ0MsTUFBTSxFQUFFQyxRQUFRLENBQzVIO01BQ0QsSUFBSSxDQUFDQyxPQUFPLEdBQUcsSUFBSSxDQUFDQyxhQUFhLENBQUMsQ0FBQztJQUNwQzs7SUFFQTtBQUNEO0FBQ0EsT0FGQztJQUFBM0MsTUFBQSxDQUdBNEMsbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQSxFQUFTO01BQzNCLE1BQU14QyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsQ0FBQyxDQUF5QjtNQUNoRixJQUFJLENBQUNILFlBQVksR0FBSUMsVUFBVSxDQUFDeUMsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsMEJBQTBCLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxXQUFXLEVBQ3pHQyxPQUFPO01BQ1YsSUFBSSxDQUFDcEQsZUFBZSxHQUNsQk8sVUFBVSxDQUFDeUMsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsMEJBQTBCLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxXQUFXLEVBQWtCRSxjQUFjLEtBQ3hILElBQUk7TUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDUixPQUFPLEVBQUU7UUFDbEIsSUFBSSxDQUFDM0IsVUFBVSxDQUFDLENBQUM7TUFDbEI7SUFDRCxDQUFDO0lBQUFmLE1BQUEsQ0FFT21ELGtCQUFrQixHQUExQixTQUFRQSxrQkFBa0JBLENBQUNDLE1BQWtCLEVBQXVEO01BQ25HLE1BQU1DLGNBQWMsR0FBR0QsTUFBTSxDQUFDQyxjQUFjO01BQzVDLElBQUlBLGNBQWMsRUFBRTtRQUNuQixNQUFNQyxhQUFhLEdBQUcsSUFBSSxDQUFDNUIsY0FBYyxDQUFDNkIsVUFBVSxDQUFDRixjQUFjLENBQUM7UUFDcEUsT0FBT0csMkJBQTJCLENBQXFCRixhQUFhLENBQUM7TUFDdEU7TUFDQSxPQUFPRyxTQUFTO0lBQ2pCLENBQUM7SUFBQXpELE1BQUEsQ0FFRDBELGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUEsRUFBK0I7TUFDL0MsTUFBTUMsU0FBUyxHQUFJLElBQUksQ0FBQzlCLGlCQUFpQixDQUFDK0IsZUFBZSxJQUFJLElBQUksQ0FBQy9CLGlCQUFpQixDQUFDSSxpQkFBK0IsQ0FBQyxDQUFDO01BQ3JILE1BQU00QixnQkFBZ0IsR0FBR0YsU0FBUyxDQUFDcEIsV0FBVyxFQUFFQyxNQUFNO01BQ3RELElBQUksQ0FBQ3FCLGdCQUFnQixFQUFFQyxTQUFTLElBQUlELGdCQUFnQixFQUFFRSxTQUFTLEtBQUssQ0FBQyxJQUFJLENBQUM1RCxZQUFZLEVBQUU7UUFDdkYsT0FBTzZELElBQUEsQ0FBQ0MsY0FBYztVQUFDQyxLQUFLLEVBQUMsbUJBQW1CO1VBQUNDLE9BQU8sRUFBQztRQUFrQixDQUFFLENBQUM7TUFDL0U7TUFDQSxPQUFPVixTQUFTO0lBQ2pCLENBQUM7SUFBQXpELE1BQUEsQ0FFT29FLGNBQWMsR0FBdEIsU0FBUUEsY0FBY0EsQ0FBQ0Msb0JBQXlDLEVBQThCO01BQzdGLE1BQU1qRSxVQUFVLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsQ0FBQyxDQUF5QjtNQUNoRixNQUFNZ0UsUUFBUSxHQUFHbEUsVUFBVSxDQUFDSSxPQUFPLENBQUMsQ0FBQyxDQUFDK0QsV0FBVyxDQUFDLENBQXlCO01BQzNFLElBQUtELFFBQVEsRUFBRUUsU0FBUyxJQUFJLElBQUksSUFBSUYsUUFBUSxFQUFFRSxTQUFTLElBQUksQ0FBQyxJQUFLLElBQUksQ0FBQ3JFLFlBQVksRUFBRTtRQUNuRixPQUFPLElBQUk7TUFDWjtNQUNBLElBQUksSUFBSSxDQUFDK0IsaUJBQWlCLElBQUksQ0FBQ29DLFFBQVEsQ0FBQ0csU0FBUyxJQUFJLENBQUNILFFBQVEsQ0FBQ0ksVUFBVSxFQUFFO1FBQzFFLE9BQ0NWLElBQUEsQ0FBQ1csVUFBVTtVQUNWQyxJQUFJLEVBQUMsZ0RBQWdEO1VBQ3JEQyxhQUFhLEVBQUUsTUFBQUEsQ0FBQSxLQUEyQjtZQUN6QyxNQUFNekUsVUFBVSxDQUFDMEUsY0FBYyxDQUFDMUUsVUFBVSxDQUFDSSxPQUFPLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7VUFDMUUsQ0FBRTtVQUNGc0Usb0JBQW9CLEVBQUMsTUFBTTtVQUMzQkMsVUFBVSxFQUFDLE9BQU87VUFDbEJ6RyxJQUFJLEVBQUU4RixvQkFBcUI7VUFDM0IsaUJBQWMsZUFBZTtVQUFBWSxRQUFBLEVBRTdCakIsSUFBQSxDQUFDa0IsSUFBSTtZQUFBRCxRQUFBLEVBQ0pqQixJQUFBLENBQUNtQixRQUFRO2NBQ1JQLElBQUksRUFBQyxtREFBbUQ7Y0FDeERRLEtBQUssRUFBRSxNQUFBQSxDQUFBLEtBQTJCO2dCQUNqQyxNQUFNaEYsVUFBVSxDQUFDaUYsaUJBQWlCLENBQUMsQ0FBQztjQUNyQztZQUFFLENBQ0Y7VUFBQyxDQUNHO1FBQUMsQ0FDSSxDQUFDO01BRWY7TUFDQSxPQUNDckIsSUFBQSxDQUFDc0IsTUFBTTtRQUNOQyxFQUFFLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUMsdUJBQXVCLENBQUU7UUFDM0NaLElBQUksRUFBQyxnREFBZ0Q7UUFDckRyRyxJQUFJLEVBQUU4RixvQkFBcUI7UUFDM0JwQixPQUFPLEVBQUUsSUFBSztRQUNkbUMsS0FBSyxFQUFFLE1BQUFBLENBQUEsS0FBMkI7VUFDakMsTUFBTWhGLFVBQVUsQ0FBQzBFLGNBQWMsQ0FBQzFFLFVBQVUsQ0FBQ0ksT0FBTyxDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUU7UUFDRjBELE9BQU8sRUFBQyxrQkFBa0I7UUFDMUIsaUJBQWM7TUFBZSxDQUM3QixDQUFDO0lBRUosQ0FBQztJQUFBbkUsTUFBQSxDQUVPeUYsVUFBVSxHQUFsQixTQUFRQSxVQUFVQSxDQUFDcEIsb0JBQTBDLEVBQThCO01BQzFGLE1BQU1qRSxVQUFVLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsQ0FBQyxDQUF5QjtNQUNoRixNQUFNb0YsV0FBVyxHQUFJdEYsVUFBVSxDQUFDeUMsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsMEJBQTBCLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxXQUFXLEVBQ3pHQyxPQUFPO01BQ1YsTUFBTXFCLFFBQVEsR0FBR2xFLFVBQVUsQ0FBQ0ksT0FBTyxDQUFDLENBQUMsQ0FBQytELFdBQVcsQ0FBQyxDQUF5QjtNQUMzRW5FLFVBQVUsQ0FDUkksT0FBTyxDQUFDLENBQUMsQ0FDVG1GLFlBQVksQ0FDWjNCLElBQUEsQ0FBQzRCLGdCQUFnQjtRQUNoQkMsR0FBRyxFQUFFLElBQUksQ0FBQ0MsWUFBYTtRQUN2QkMsT0FBTyxFQUFDLE1BQU07UUFDZEMsT0FBTyxFQUFFNUYsVUFBVSxDQUFDNkYsYUFBYztRQUNsQzlCLE9BQU8sRUFBRStCLEVBQUUsQ0FDVkMsTUFBTSxDQUNMVCxXQUFXLEtBQUssSUFBSSxFQUNwQlMsTUFBTSxDQUNMN0IsUUFBUSxDQUFDSSxVQUFVLEtBQUssSUFBSSxFQUM1QjBCLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxVQUFVLEVBQUVDLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQ3JGSCxFQUFFLENBQUNDLFVBQ0osQ0FBQyxFQUNERCxFQUFFLENBQUNDLFVBQ0osQ0FBQyxFQUNEQyxLQUFLLENBQUNDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQ3JEO01BQUUsQ0FDRixDQUNGLENBQUM7TUFDRixJQUFJLElBQUksQ0FBQ3RFLGlCQUFpQixJQUFJLENBQUNvQyxRQUFRLENBQUNHLFNBQVMsRUFBRTtRQUNsRCxPQUNDVCxJQUFBLENBQUNXLFVBQVU7VUFDVkMsSUFBSSxFQUFFLElBQUksQ0FBQzZCLGlCQUFpQixDQUFDLENBQUU7VUFDL0IsZUFBWSx3QkFBd0I7VUFDcEMxQixvQkFBb0IsRUFBQyxNQUFNO1VBQzNCQyxVQUFVLEVBQUMsT0FBTztVQUNsQnpHLElBQUksRUFBRThGLG9CQUFxQjtVQUMzQkYsT0FBTyxFQUFFdUMsaUJBQWlCLENBQ3pCUCxNQUFNLENBQ0xULFdBQVcsS0FBSyxJQUFJLEVBQ3BCUyxNQUFNLENBQ0w3QixRQUFRLENBQUNJLFVBQVUsS0FBSyxJQUFJLEVBQzVCMEIsR0FBRyxDQUFDQyxFQUFFLENBQUNDLFVBQVUsRUFBRUMsS0FBSyxDQUFDQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFDckZILEVBQUUsQ0FBQ0MsVUFDSixDQUFDLEVBQ0RELEVBQUUsQ0FBQ0MsVUFDSixDQUNELENBQUU7VUFDRixpQkFBYyxlQUFlO1VBQUFyQixRQUFBLEVBRTdCakIsSUFBQSxDQUFDa0IsSUFBSTtZQUFBRCxRQUFBLEVBQ0pqQixJQUFBLENBQUNtQixRQUFRO2NBQ1JQLElBQUksRUFBQyxtREFBbUQ7Y0FDeERRLEtBQUssRUFBRSxNQUFBQSxDQUFBLEtBQTJCO2dCQUNqQyxNQUFNaEYsVUFBVSxDQUFDaUYsaUJBQWlCLENBQUMsQ0FBQztjQUNyQztZQUFFLENBQ0Y7VUFBQyxDQUNHO1FBQUMsQ0FDSSxDQUFDO01BRWY7TUFDQSxPQUNDckIsSUFBQSxDQUFDc0IsTUFBTTtRQUNOQyxFQUFFLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUMsc0JBQXNCLENBQUU7UUFDMUNaLElBQUksRUFBRSxJQUFJLENBQUM2QixpQkFBaUIsQ0FBQyxDQUFFO1FBQy9CbEksSUFBSSxFQUFFOEYsb0JBQXFCO1FBQzNCRixPQUFPLEVBQUV1QyxpQkFBaUIsQ0FDekJQLE1BQU0sQ0FDTFQsV0FBVyxLQUFLLElBQUksRUFDcEJTLE1BQU0sQ0FDTDdCLFFBQVEsQ0FBQ0ksVUFBVSxLQUFLLElBQUksRUFDNUIwQixHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsVUFBVSxFQUFFQyxLQUFLLENBQUNDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUNyRkgsRUFBRSxDQUFDQyxVQUNKLENBQUMsRUFDREQsRUFBRSxDQUFDQyxVQUNKLENBQ0QsQ0FBRTtRQUNGckQsT0FBTyxFQUFFLElBQUs7UUFDZCxlQUFZLGdCQUFnQjtRQUM1QixpQkFBYztNQUFlLENBQzdCLENBQUM7SUFFSixDQUFDO0lBQUFqRCxNQUFBLENBRU95RyxpQkFBaUIsR0FBekIsU0FBUUEsaUJBQWlCQSxDQUFBLEVBQXFDO01BQzdELE1BQU1FLGNBQWMsR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDO01BQ3RFLE1BQU1DLGdCQUFnQixHQUFHLElBQUksQ0FBQ0QsaUJBQWlCLENBQUMseUJBQXlCLENBQUM7TUFDMUU7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0EsT0FBT1QsTUFBTSxDQUNaQSxNQUFNLENBQ0osSUFBSSxDQUFDdEUsaUJBQWlCLENBQUNJLGlCQUFpQixDQUFlTSxXQUFXLENBQUN1RSxPQUFPLEVBQUVDLHNCQUFzQixLQUFLdEQsU0FBUyxFQUNqSDRDLEVBQUUsQ0FBQ1csWUFBWSxFQUNmYixNQUFNLENBQUMsSUFBSSxDQUFDaEcsWUFBWSxFQUFFaUcsR0FBRyxDQUFDSSxXQUFXLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFUyxLQUFLLENBQUNDLFdBQVcsQ0FDcEcsQ0FBQyxFQUNETCxnQkFBZ0IsRUFDaEJGLGNBQ0QsQ0FBQztJQUNGLENBQUM7SUFBQTNHLE1BQUEsQ0FFT21ILGVBQWUsR0FBdkIsU0FBUUEsZUFBZUEsQ0FBQSxFQUFrQjtNQUN4QyxNQUFNL0csVUFBVSxHQUFHLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsRUFBRUMsaUJBQWlCLENBQUMsQ0FBeUI7TUFDaEYsTUFBTW9GLFdBQVcsR0FBSXRGLFVBQVUsQ0FBQ3lDLGVBQWUsQ0FBQyxDQUFDLENBQUNDLDBCQUEwQixDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxFQUN6R0MsT0FBTztNQUNWLE1BQU1xQixRQUFRLEdBQUdsRSxVQUFVLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUMrRCxXQUFXLENBQUMsQ0FBeUI7TUFDM0VuRSxVQUFVLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUNtRixZQUFZLENBQ2hDM0IsSUFBQSxDQUFDNEIsZ0JBQWdCO1FBQ2hCQyxHQUFHLEVBQUUsSUFBSSxDQUFDQyxZQUFhO1FBQ3ZCQyxPQUFPLEVBQUMsUUFBUTtRQUNoQkMsT0FBTyxFQUFFQSxDQUFBLEtBQVk7VUFDcEI1RixVQUFVLENBQUNnSCxlQUFlLENBQUM7WUFBRUMsWUFBWSxFQUFFO1VBQXdDLENBQUMsQ0FBQztRQUN0RixDQUFFO1FBQ0ZsRCxPQUFPLEVBQUVnQyxNQUFNLENBQ2RULFdBQVcsS0FBSyxJQUFJLEVBQ3BCUyxNQUFNLENBQ0w3QixRQUFRLENBQUNJLFVBQVUsS0FBSyxJQUFJLEVBQzVCMEIsR0FBRyxDQUFDQyxFQUFFLENBQUNDLFVBQVUsRUFBRUMsS0FBSyxDQUFDQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFDckZILEVBQUUsQ0FBQ0MsVUFDSixDQUFDLEVBQ0RELEVBQUUsQ0FBQ0MsVUFDSjtNQUFFLENBQ0YsQ0FDRixDQUFDO01BQ0Q7TUFDQSxPQUNDdEMsSUFBQSxDQUFDc0IsTUFBTTtRQUNOQyxFQUFFLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUMsd0JBQXdCLENBQUU7UUFDNUNaLElBQUksRUFDSHpDLFdBQVcsQ0FBQ21GLFdBQVcsQ0FBQyxJQUFJLENBQUN6RixpQkFBaUIsQ0FBQytCLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDekQsWUFBWSxHQUNsRixrREFBa0QsR0FDbEQsMkNBQ0g7UUFDRCxlQUFZLGtCQUFrQjtRQUM5QmdFLE9BQU8sRUFBRXVDLGlCQUFpQixDQUN6QlAsTUFBTSxDQUNMVCxXQUFXLEtBQUssSUFBSSxFQUNwQlMsTUFBTSxDQUNMN0IsUUFBUSxDQUFDSSxVQUFVLEtBQUssSUFBSSxFQUM1QjBCLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxVQUFVLEVBQUVDLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQ3JGSCxFQUFFLENBQUNDLFVBQ0osQ0FBQyxFQUNERCxFQUFFLENBQUNDLFVBQ0osQ0FDRCxDQUFFO1FBQ0ZpQixZQUFZLEVBQUVwQixNQUFNLENBQUNLLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsRUFBRWdCLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRUEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFFO1FBQ3JHdkUsT0FBTyxFQUFFLElBQUs7UUFDZCxpQkFBYyxlQUFlO1FBQUFnQyxRQUFBLEVBRTVCO1VBQUV3QyxVQUFVLEVBQUV6RCxJQUFBLENBQUMwRCx5QkFBeUI7WUFBQ0MsMEJBQTBCLEVBQUU7VUFBTSxDQUE0QjtRQUFFO01BQUMsQ0FDcEcsQ0FBQztJQUVYLENBQUM7SUFBQTNILE1BQUEsQ0FFTzRILG1CQUFtQixHQUEzQixTQUFRQSxtQkFBbUJBLENBQUN2RCxvQkFBeUMsRUFBaUI7TUFDckYsTUFBTWpFLFVBQVUsR0FBRyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixDQUFDLENBQXlCO01BQ2hGLE1BQU1nRSxRQUFRLEdBQUdsRSxVQUFVLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUMrRCxXQUFXLENBQUMsQ0FBeUI7TUFDM0UsT0FDQ1AsSUFBQSxDQUFDc0IsTUFBTTtRQUNOQyxFQUFFLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUMsNEJBQTRCLENBQUU7UUFDaERaLElBQUksRUFBRSxnREFBaUQ7UUFDdkRRLEtBQUssRUFBRWhGLFVBQVUsQ0FBQ08sUUFBUSxDQUFDa0gsa0JBQW1CO1FBQzlDdEosSUFBSSxFQUFFOEYsb0JBQXFCO1FBQzNCRixPQUFPLEVBQUVnQyxNQUFNLENBQ2QsSUFBSSxDQUFDaEcsWUFBWSxLQUFLLElBQUksRUFDMUJnRyxNQUFNLENBQ0w3QixRQUFRLENBQUNJLFVBQVUsS0FBSyxJQUFJLEVBQzVCMEIsR0FBRyxDQUFDYSxLQUFLLENBQUNDLFdBQVcsRUFBRVgsS0FBSyxDQUFDQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFDekZTLEtBQUssQ0FBQ0MsV0FDUCxDQUFDLEVBQ0RELEtBQUssQ0FBQ0MsV0FDUCxDQUFFO1FBQ0ZqRSxPQUFPLEVBQUUsSUFBSztRQUNkLGlCQUFjLGVBQWU7UUFBQWdDLFFBQUEsRUFFNUI7VUFBRXdDLFVBQVUsRUFBRXpELElBQUEsQ0FBQzBELHlCQUF5QjtZQUFDQywwQkFBMEIsRUFBRTtVQUFNLENBQTRCO1FBQUU7TUFBQyxDQUNwRyxDQUFDO0lBRVgsQ0FBQztJQUFBM0gsTUFBQSxDQUVPOEgsMkJBQTJCLEdBQW5DLFNBQVFBLDJCQUEyQkEsQ0FBQzFFLE1BQWtCLEVBQXNCO01BQzNFLElBQUlBLE1BQU0sQ0FBQ0MsY0FBYyxFQUFFO1FBQzFCLE1BQU1qRCxVQUFVLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsQ0FBQyxDQUF5QjtRQUNoRixNQUFNK0MsY0FBYyxHQUFHRCxNQUFNLENBQUNDLGNBQWM7UUFDNUMsSUFBSTBFLFVBQW9GO1FBQ3hGLE1BQU1DLElBQUksR0FBRzVILFVBQVUsQ0FBQ0ksT0FBTyxDQUFDLENBQUM7UUFDakMsTUFBTXlILHFCQUFxQixHQUFHLElBQUksQ0FBQ3ZHLGNBQWMsQ0FBQzZCLFVBQVUsQ0FBQ0YsY0FBYyxDQUFDO1FBQzVFLE1BQU02RSx5QkFBeUIsR0FBRzFFLDJCQUEyQixDQUFxQnlFLHFCQUFxQixDQUFDO1FBQ3hHLE1BQU1FLGtCQUFrQixHQUFHRCx5QkFBeUIsQ0FBQ0UsWUFBWTtRQUNqRSxJQUFJRCxrQkFBa0IsRUFBRTtVQUN2QixNQUFNRSxnQkFBZ0IsR0FBRztZQUN4QkMsYUFBYSxFQUFFLElBQUksQ0FBQ3pHLGlCQUFpQixDQUFDK0IsZUFBZSxFQUFFMkUsSUFBSTtZQUMzREMsa0JBQWtCLEVBQ2pCTCxrQkFBa0IsQ0FBQ00sa0JBQWtCLEtBQUssb0NBQW9DLEdBQzFFQyxPQUFPLENBQWFELGtCQUFrQixDQUFDRSxTQUFTLEdBQ2hERCxPQUFPLENBQWFELGtCQUFrQixDQUFDRyxRQUFRO1lBQ3BEQyxLQUFLLEVBQUVWLGtCQUFrQixDQUFDVyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDQyxXQUFXLEVBQUU1RixNQUFNLENBQUM0RixXQUFXO1lBQy9CQyw4QkFBOEIsRUFBRTdGLE1BQU0sQ0FBQzZGO1VBQ3hDLENBQUM7VUFDRCxJQUFJLENBQUM3RixNQUFNLENBQUMyQyxPQUFPLEVBQUU7WUFDcEJnQyxVQUFVLEdBQUc7Y0FDWjNDLEtBQUssRUFBRUEsQ0FBQSxLQUFZO2dCQUNqQmhGLFVBQVUsQ0FBMEI4SSxRQUFRLENBQUNDLFlBQVksQ0FBQ25CLElBQUksRUFBRUcsa0JBQWtCLENBQUNpQixNQUFNLEVBQVk7a0JBQ3JHLEdBQUdmLGdCQUFnQjtrQkFDbkIsR0FBRztvQkFDRmdCLFFBQVEsRUFBRXJCLElBQUksQ0FBQ3ZILGlCQUFpQixDQUFDLENBQUM7b0JBQ2xDNkksS0FBSyxFQUFFdEIsSUFBSSxDQUFDbkgsUUFBUSxDQUFDO2tCQUN0QjtnQkFDRCxDQUFDLENBQUM7Y0FDSDtZQUNELENBQUM7VUFDRixDQUFDLE1BQU07WUFDTjtZQUNBLElBQUksQ0FBQ3VDLE1BQU0sQ0FBQzJDLE9BQU8sQ0FBQ3dELFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtjQUN2Q25HLE1BQU0sQ0FBQzJDLE9BQU8sR0FBRyxPQUFPM0MsTUFBTSxDQUFDMkMsT0FBTyxFQUFFO1lBQ3pDO1lBQ0FnQyxVQUFVLEdBQUc7Y0FBRSxhQUFhLEVBQUUsR0FBRzNFLE1BQU0sQ0FBQzJDLE9BQU87WUFBOEIsQ0FBQztVQUMvRTtVQUNBLE9BQ0MvQixJQUFBLENBQUNzQixNQUFNO1lBQ05DLEVBQUUsRUFBRSxJQUFJLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUNyQyxrQkFBa0IsQ0FBQ0MsTUFBTSxDQUFDO1lBQ2pEO1lBQ0E7WUFBQTtZQUNBLGlCQUFlQSxNQUFNLENBQUNlLE9BQU8sS0FBSyxNQUFNLElBQUlmLE1BQU0sQ0FBQ2UsT0FBTyxLQUFLLE9BQU8sR0FBR1YsU0FBUyxHQUFHLDBCQUEyQjtZQUNoSG1CLElBQUksRUFBRXlELGdCQUFnQixDQUFDUSxLQUFNO1lBQUEsR0FDekJkLFVBQVU7WUFDZFIsWUFBWSxFQUFFaUMsa0JBQWtCLENBQUN0Qix5QkFBeUIsQ0FBQ0UsWUFBWSxDQUFFO1lBQ3pFakUsT0FBTyxFQUFFZixNQUFNLENBQUNlLE9BQVE7WUFDeEJsQixPQUFPLEVBQUVHLE1BQU0sQ0FBQ0gsT0FBUTtZQUN4QjFFLElBQUksRUFBRWtMLHFCQUFxQixDQUFDQyx1Q0FBdUMsQ0FBQ3hCLHlCQUF5QixDQUFFO1lBQy9GeUIsSUFBSSxFQUFFdkcsTUFBTSxFQUFFd0csYUFBYSxLQUFLLElBQUksR0FBR0MsTUFBTSxHQUFHcEc7VUFBVSxDQUMxRCxDQUFDO1FBRUo7TUFDRDtJQUNELENBQUM7SUFBQXpELE1BQUEsQ0FFTzhKLGlCQUFpQixHQUF6QixTQUFRQSxpQkFBaUJBLENBQUMxRyxNQUFrQixFQUFzQjtNQUNqRSxJQUFJMkcsb0JBQW9CLENBQUNDLGdCQUFnQixDQUFDNUcsTUFBTSxDQUFDLEVBQUU7UUFDbEQsSUFBSTJFLFVBQW9GO1FBQ3hGLElBQUkzRSxNQUFNLENBQUMyQyxPQUFPLEVBQUU7VUFDbkJnQyxVQUFVLEdBQUc7WUFBRSxhQUFhLEVBQUUsT0FBTzNFLE1BQU0sQ0FBQzJDLE9BQU87VUFBUyxDQUFDO1FBQzlELENBQUMsTUFBTTtVQUNOZ0MsVUFBVSxHQUFHO1lBQ1ozQyxLQUFLLEVBQUc2RSxLQUFZLElBQVc7Y0FDOUJDLFNBQVMsQ0FBQ0MsYUFBYSxDQUFDRixLQUFLLEVBQUU3RyxNQUFNLENBQUNnSCxhQUFhLEVBQUVoSCxNQUFNLENBQUNpSCxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFFQyxLQUFjLElBQ25HQyxHQUFHLENBQUNELEtBQUssQ0FBQ0EsS0FBZSxDQUMxQixDQUFDO1lBQ0Y7VUFDRCxDQUFDO1FBQ0Y7UUFDQSxPQUNDdkcsSUFBQSxDQUFDc0IsTUFBTTtVQUNOQyxFQUFFLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUNwQyxNQUFNLENBQUNtQyxFQUFFLENBQUU7VUFDN0IsaUJBQWVuQyxNQUFNLENBQUNlLE9BQU8sS0FBSyxNQUFNLElBQUlmLE1BQU0sQ0FBQ2UsT0FBTyxLQUFLLE9BQU8sR0FBR1YsU0FBUyxHQUFHLDBCQUEyQjtVQUNoSG1CLElBQUksRUFBRXhCLE1BQU0sQ0FBQ3dCLElBQUksSUFBSSxFQUFHO1VBQUEsR0FDcEJtRCxVQUFVO1VBQ2R4SixJQUFJLEVBQUMsYUFBYTtVQUNsQjRGLE9BQU8sRUFBRWYsTUFBTSxDQUFDZSxPQUFRO1VBQ3hCbEIsT0FBTyxFQUFFRyxNQUFNLENBQUNILE9BQVE7VUFDeEIwRyxJQUFJLEVBQUV2RyxNQUFNLEVBQUV3RyxhQUFhLEtBQUssSUFBSSxHQUFHQyxNQUFNLEdBQUdwRztRQUFVLENBQzFELENBQUM7TUFFSjtJQUNELENBQUM7SUFBQXpELE1BQUEsQ0FFRHlLLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUEsRUFBeUI7TUFDekMsTUFBTUMsMEJBQTBCLEdBQUdYLG9CQUFvQixDQUFDWSwrQkFBK0IsQ0FBQyxJQUFJLENBQUM5SSxpQkFBaUIsQ0FBQztNQUMvRyxPQUFPLElBQUksQ0FBQ1YsT0FBTyxFQUNoQnlKLEdBQUcsQ0FBRXhILE1BQWtCLElBQUs7UUFDN0IsUUFBUUEsTUFBTSxDQUFDN0UsSUFBSTtVQUNsQixLQUFLc00sVUFBVSxDQUFDQyxZQUFZO1lBQzNCLE9BQU8sSUFBSSxDQUFDMUcsY0FBYyxDQUFDc0csMEJBQTBCLENBQUM7VUFDdkQsS0FBS0csVUFBVSxDQUFDRSxrQkFBa0I7WUFDakMsT0FBTyxJQUFJLENBQUNqRCwyQkFBMkIsQ0FBQzFFLE1BQU0sQ0FBQztVQUNoRCxLQUFLeUgsVUFBVSxDQUFDRyxPQUFPO1lBQ3RCLElBQUksSUFBSSxDQUFDN0ssWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDTixlQUFlLEVBQUU7Y0FDL0MsTUFBTW9MLDBCQUEwQixHQUFHUCwwQkFBMEIsR0FDMURRLG9CQUFvQixDQUFDUiwwQkFBMEIsQ0FBQyxHQUNoRGpILFNBQVM7Y0FDWixPQUFPLElBQUksQ0FBQ2dDLFVBQVUsQ0FBQ2lCLGlCQUFpQixDQUFDUCxNQUFNLENBQUNjLEtBQUssQ0FBQ0MsV0FBVyxFQUFFekQsU0FBUyxFQUFFd0gsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1lBQzVHO1lBQ0EsT0FBTyxJQUFJLENBQUN4RixVQUFVLENBQUNpRiwwQkFBMEIsQ0FBQztVQUNuRCxLQUFLRyxVQUFVLENBQUNNLFNBQVM7WUFDeEIsT0FBTyxJQUFJLENBQUNoRSxlQUFlLENBQUMsQ0FBQztVQUM5QixLQUFLMEQsVUFBVSxDQUFDTyxVQUFVO1lBQ3pCLElBQUksSUFBSSxDQUFDakwsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDTixlQUFlLEVBQUU7Y0FDL0MsTUFBTW9MLDBCQUEwQixHQUFHUCwwQkFBMEIsR0FDMURRLG9CQUFvQixDQUFDUiwwQkFBMEIsQ0FBQyxHQUNoRGpILFNBQVM7Y0FDWixPQUFPLElBQUksQ0FBQ21FLG1CQUFtQixDQUM5QmxCLGlCQUFpQixDQUFDUCxNQUFNLENBQUNjLEtBQUssQ0FBQ0MsV0FBVyxFQUFFK0QsMEJBQTBCLEVBQUV4SCxTQUFTLENBQUMsQ0FDbkYsQ0FBQztZQUNGO1lBQ0E7VUFDRDtZQUNDLE9BQU8sSUFBSSxDQUFDcUcsaUJBQWlCLENBQUMxRyxNQUFNLENBQUM7UUFDdkM7TUFDRCxDQUFDLENBQUMsQ0FDRGlJLE1BQU0sQ0FBRWpJLE1BQU0sSUFBdUIsQ0FBQyxDQUFDQSxNQUFNLENBQUM7SUFDakQsQ0FBQztJQUFBcEQsTUFBQSxDQUVEMkMsYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQUEsRUFBb0I7TUFDaEMsTUFBTXZDLFVBQVUsR0FBRyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixDQUFDLENBQXlCO01BQ2hGLE1BQU1nRSxRQUFRLEdBQUdsRSxVQUFVLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUMrRCxXQUFXLENBQUMsQ0FBeUI7TUFDM0UsTUFBTStHLGFBQTRCLEdBQ2pDdEgsSUFBQSxDQUFDdUgsYUFBYTtRQUNiaEcsRUFBRSxFQUFFLElBQUksQ0FBQ0MsUUFBUSxDQUFDLGVBQWUsQ0FBRTtRQUNuQ3JCLE9BQU8sRUFBRXVDLGlCQUFpQixDQUN6QlAsTUFBTSxDQUNMLElBQUksQ0FBQ2hHLFlBQVksS0FBSyxJQUFJLEVBQzFCZ0csTUFBTSxDQUNMN0IsUUFBUSxDQUFDSSxVQUFVLEtBQUssSUFBSSxFQUM1QjBCLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxVQUFVLEVBQUVDLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQ3JGLElBQ0QsQ0FBQyxFQUNELElBQ0QsQ0FDRCxDQUFFO1FBQ0ZnRixhQUFhLEVBQUVBLENBQUEsS0FBWXBMLFVBQVUsQ0FBQ3FMLG9CQUFvQixDQUFDLENBQUU7UUFDN0RDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQ2xHLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFZO1FBQ3JFakgsSUFBSSxFQUFDLFlBQVk7UUFDakJnSixZQUFZLEVBQUM7TUFBUSxDQUNyQixDQUNEO01BQ0QsTUFBTW9FLFNBQVMsR0FDZEMsS0FBQSxDQUFDQyxlQUFlO1FBQUN0RyxFQUFFLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUMsS0FBSyxDQUFFO1FBQUNzRyxTQUFTLEVBQUUsSUFBSztRQUFBN0csUUFBQSxHQUMxRGpCLElBQUEsQ0FBQytILGFBQWE7VUFDYnhHLEVBQUUsRUFBRSxJQUFJLENBQUNDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBRTtVQUM3Q1osSUFBSSxFQUFDO1FBQW1FLENBQ3hFLENBQUMsRUFDRDBHLGFBQWEsRUFDZHRILElBQUEsQ0FBQ2dJLGFBQWEsSUFBRSxDQUFDLEVBQ2hCLElBQUksQ0FBQ3RJLGlCQUFpQixDQUFDLENBQUMsRUFDeEIsSUFBSSxDQUFDK0csaUJBQWlCLENBQUMsQ0FBQztNQUFBLENBQ1QsQ0FDakI7TUFDRHJLLFVBQVUsQ0FDUkksT0FBTyxDQUFDLENBQUMsQ0FDVG1GLFlBQVksQ0FDWjNCLElBQUEsQ0FBQzRCLGdCQUFnQjtRQUNoQkMsR0FBRyxFQUFFLElBQUksQ0FBQ0MsWUFBYTtRQUN2QkMsT0FBTyxFQUFDLHVCQUF1QjtRQUMvQkMsT0FBTyxFQUFFQSxDQUFBLEtBQXFCc0YsYUFBYSxDQUFDVyxTQUFTLENBQUM7TUFBRSxDQUN4RCxDQUNGLENBQUM7TUFDRixPQUFPTixTQUFTO0lBQ2pCLENBQUM7SUFBQSxPQUFBNU4sYUFBQTtFQUFBLEVBMWV5Q21PLGFBQWEsR0FBQTNNLFdBQUEsR0FBQTRNLHlCQUFBLENBQUFuTixPQUFBLENBQUFpQixTQUFBLHdDQUFBL0IsS0FBQTtJQUFBa08sWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FFbkIsSUFBSTtJQUFBO0VBQUEsSUFBQS9NLFlBQUEsR0FBQTJNLHlCQUFBLENBQUFuTixPQUFBLENBQUFpQixTQUFBLCtCQUFBN0IsS0FBQTtJQUFBZ08sWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FHYixJQUFJO0lBQUE7RUFBQSxJQUFBOU0sWUFBQSxHQUFBME0seUJBQUEsQ0FBQW5OLE9BQUEsQ0FBQWlCLFNBQUEsU0FBQTVCLEtBQUE7SUFBQStOLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBN00sWUFBQSxHQUFBeU0seUJBQUEsQ0FBQW5OLE9BQUEsQ0FBQWlCLFNBQUEsZUFBQXhCLEtBQUE7SUFBQTJOLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBNU0sWUFBQSxHQUFBd00seUJBQUEsQ0FBQW5OLE9BQUEsQ0FBQWlCLFNBQUEsa0JBQUF2QixLQUFBO0lBQUEwTixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTNNLFlBQUEsR0FBQXVNLHlCQUFBLENBQUFuTixPQUFBLENBQUFpQixTQUFBLG1CQUFBdEIsS0FBQTtJQUFBeU4sWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFKLHlCQUFBLENBQUFuTixPQUFBLENBQUFpQixTQUFBLHFCQUFBcEIsS0FBQSxHQUFBMk4sTUFBQSxDQUFBQyx3QkFBQSxDQUFBek4sT0FBQSxDQUFBaUIsU0FBQSxxQkFBQWpCLE9BQUEsQ0FBQWlCLFNBQUEsR0FBQWpCLE9BQUEsTUFBQUQsTUFBQTtFQUFBZSxRQUFBLEdBQUEvQixhQUFBO0VBQUEsT0FBQStCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
449
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb290ZXJDb250ZW50IiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsIl9kZWM0IiwicHJvcGVydHkiLCJ0eXBlIiwicmVxdWlyZWQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOCIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcHMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2hpZGVDcmVhdGVOZXh0IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiX2hpZGRlbkRyYWZ0IiwiY29udHJvbGxlciIsIl9nZXRPd25lciIsImdldFJvb3RDb250cm9sbGVyIiwidmlld0NvbnRleHQiLCJnZXRWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc05ld09iamVjdCIsImVkaXRGbG93IiwiaXNSb290Q29udGV4dE5ldyIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJpbml0aWFsaXplIiwib3duZXIiLCJzZXRNb2RlbCIsIkpTT05Nb2RlbCIsImFjdGlvbnMiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwiYmluZGluZ0NvbnRleHRzIiwiY29udmVydGVyQ29udGV4dCIsImdldE9iamVjdCIsImNvbnRleHRQYXRoVG9Vc2UiLCJmdWxsQ29udGV4dFBhdGgiLCJvRGF0YU1ldGFNb2RlbCIsIm1vZGVscyIsIm1ldGFNb2RlbCIsImRhdGFWaWV3TW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJpc0RyYWZ0VmFsaWRhdGlvbiIsIk1vZGVsSGVscGVyIiwiZ2V0RHJhZnRSb290IiwiUHJlcGFyYXRpb25BY3Rpb24iLCJlbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJNZXNzYWdlcyIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50Iiwib25NZXRhZGF0YUF2YWlsYWJsZSIsImdldEFwcENvbXBvbmVudCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiaGlkZUNyZWF0ZU5leHQiLCJnZXRBY3Rpb25Nb2RlbFBhdGgiLCJhY3Rpb24iLCJhbm5vdGF0aW9uUGF0aCIsImFjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidW5kZWZpbmVkIiwiZ2V0RHJhZnRJbmRpY2F0b3IiLCJlbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJjb21tb25Bbm5vdGF0aW9uIiwiRHJhZnRSb290IiwiRHJhZnROb2RlIiwiX2pzeCIsIkRyYWZ0SW5kaWNhdG9yIiwic3RhdGUiLCJ2aXNpYmxlIiwiZ2V0QXBwbHlCdXR0b24iLCJlbXBoYXNpemVkRXhwcmVzc2lvbiIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJpc0Rlc2t0b3AiLCJmY2xFbmFibGVkIiwiTWVudUJ1dHRvbiIsInRleHQiLCJkZWZhdWx0QWN0aW9uIiwiX2FwcGx5RG9jdW1lbnQiLCJ1c2VEZWZhdWx0QWN0aW9uT25seSIsImJ1dHRvbk1vZGUiLCJjaGlsZHJlbiIsIk1lbnUiLCJNZW51SXRlbSIsInByZXNzIiwiX3ZhbGlkYXRlRG9jdW1lbnQiLCJCdXR0b24iLCJpZCIsImNyZWF0ZUlkIiwiZ2V0UHJpbWFyeSIsImhpZGRlbkRyYWZ0IiwiYWRkRGVwZW5kZW50IiwiQ29tbWFuZEV4ZWN1dGlvbiIsInJlZiIsImNtZEV4ZWN1dGlvbiIsImNvbW1hbmQiLCJleGVjdXRlIiwiX3NhdmVEb2N1bWVudCIsIm9yIiwiaWZFbHNlIiwiYW5kIiwiVUkiLCJJc0VkaXRhYmxlIiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsImdldFRleHRTYXZlQnV0dG9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJsYXlvdXREYXRhIiwiT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSIsInByaW9yaXR5IiwiZ3JvdXAiLCJzYXZlQnV0dG9uVGV4dCIsImdldFRyYW5zbGF0ZWRUZXh0IiwiY3JlYXRlQnV0dG9uVGV4dCIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiSXNDcmVhdGVNb2RlIiwiRHJhZnQiLCJJc05ld09iamVjdCIsImdldENhbmNlbEJ1dHRvbiIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImlzRHJhZnRSb290IiwiYXJpYUhhc1BvcHVwIiwiY29uc3RhbnQiLCJjbG9zZU92ZXJmbG93T25JbnRlcmFjdGlvbiIsImdldENyZWF0ZU5leHRCdXR0b24iLCJjcmVhdGVOZXh0RG9jdW1lbnQiLCJnZXRUb29sYmFyU2VwYXJhdG9yIiwiVG9vbGJhclNlcGFyYXRvciIsImdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsInByZXNzRXZlbnQiLCJ2aWV3IiwiYW5ub3RhdGlvblBhdGhDb250ZXh0IiwiZGF0YUZpZWxkQ29udGV4dE1vZGVsUGF0aCIsImRhdGFGaWVsZEZvckFjdGlvbiIsInRhcmdldE9iamVjdCIsImFjdGlvblBhcmFtZXRlcnMiLCJlbnRpdHlTZXROYW1lIiwibmFtZSIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImxpYnJhcnkiLCJDaGFuZ2VTZXQiLCJJc29sYXRlZCIsImxhYmVsIiwiTGFiZWwiLCJ0b1N0cmluZyIsImlzTmF2aWdhYmxlIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiaGFuZGxlcnMiLCJvbkNhbGxBY3Rpb24iLCJBY3Rpb24iLCJjb250ZXh0cyIsIm1vZGVsIiwic3RhcnRzV2l0aCIsImlzQWN0aW9uV2l0aERpYWxvZyIsIkNyaXRpY2FsaXR5Rm9ybWF0dGVycyIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZSIsImljb24iLCJpc0FJT3BlcmF0aW9uIiwiYWlJY29uIiwiZ2V0TWFuaWZlc3RCdXR0b24iLCJPYmplY3RQYWdlVGVtcGxhdGluZyIsImlzTWFuaWZlc3RBY3Rpb24iLCJldmVudCIsIkZQTUhlbHBlciIsImFjdGlvbldyYXBwZXIiLCJoYW5kbGVyTW9kdWxlIiwiaGFuZGxlck1ldGhvZCIsImNhdGNoIiwiZXJyb3IiLCJMb2ciLCJfanN4cyIsImdldEFjdGlvbkNvbnRyb2xzIiwiZW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24iLCJidWlsZEVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uIiwibWFwIiwiQWN0aW9uVHlwZSIsIkRlZmF1bHRBcHBseSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsIlByaW1hcnkiLCJlbXBoYXNpemVkQnV0dG9uVG9vbEtpdEV4cCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiU2Vjb25kYXJ5IiwiQ3JlYXRlTmV4dCIsIlNlcGFyYXRvciIsImZpbHRlciIsIm1lc3NhZ2VCdXR0b24iLCJNZXNzYWdlQnV0dG9uIiwibWVzc2FnZUNoYW5nZSIsIl9nZXRGb290ZXJWaXNpYmlsaXR5IiwiYXJpYUxhYmVsbGVkQnkiLCJmb290ZXJCYXIiLCJPdmVyZmxvd1Rvb2xiYXIiLCJhc3luY01vZGUiLCJJbnZpc2libGVUZXh0IiwiVG9vbGJhclNwYWNlciIsImZpcmVQcmVzcyIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZvb3RlckNvbnRlbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFGaWVsZEZvckFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBlcXVhbCwgaWZFbHNlLCBvciwgcGF0aEluTW9kZWwsIHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBkZWZpbmVSZWZlcmVuY2UsIGRlZmluZVVJNUNsYXNzLCBpbXBsZW1lbnRJbnRlcmZhY2UsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByb3BlcnRpZXMsIFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncywgSGlkZGVuRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvbldpdGhEaWFsb2cgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7IGFpSWNvbiwgdHlwZSBCYXNlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlTGliIH0gZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgKiBhcyBDcml0aWNhbGl0eUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ3JpdGljYWxpdHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTWVzc2FnZUJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZXNzYWdlcy9NZXNzYWdlQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL09iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERyYWZ0SW5kaWNhdG9yIGZyb20gXCJzYXAvbS9EcmFmdEluZGljYXRvclwiO1xuaW1wb3J0IE1lbnUgZnJvbSBcInNhcC9tL01lbnVcIjtcbmltcG9ydCBNZW51QnV0dG9uIGZyb20gXCJzYXAvbS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJcIjtcbmltcG9ydCBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0ICogYXMgT2JqZWN0UGFnZVRlbXBsYXRpbmcgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9PYmplY3RQYWdlVGVtcGxhdGluZ1wiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckxheW91dERhdGFcIjtcbmltcG9ydCBUb29sYmFyU2VwYXJhdG9yIGZyb20gXCJzYXAvbS9Ub29sYmFyU2VwYXJhdG9yXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcblxudHlwZSBDb250cm9sbGVyV2l0aEFjdGlvbiA9IENvbnRyb2xsZXIgJiB7XG5cdGhhbmRsZXJzOiB7XG5cdFx0b25DYWxsQWN0aW9uOiBGdW5jdGlvbjtcblx0fTtcbn07XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuRm9vdGVyQ29udGVudFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9vdGVyQ29udGVudCBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8T3ZlcmZsb3dUb29sYmFyPiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAudWkuY29yZS5Ub29sYmFyXCIpXG5cdF9faW1wbGVtZW50c19fc2FwX3VpX2NvcmVfVG9vbGJhciA9IHRydWU7XG5cblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC5tLklCYXJcIilcblx0X19pbXBsZW1lbnRzX19zYXBfbV9JQmFyID0gdHJ1ZTtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0aWQhOiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyBtZXRhUGF0aCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRjbWRFeGVjdXRpb24hOiBSZWY8Q29tbWFuZEV4ZWN1dGlvbj47XG5cblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXTtcblxuXHRvRGF0YU1ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdGRhdGFWaWV3TW9kZWxQYXRoITogRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+O1xuXG5cdGlzRHJhZnRWYWxpZGF0aW9uITogYm9vbGVhbjtcblxuXHRfaGlkZGVuRHJhZnQhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgX2hpZGVDcmVhdGVOZXh0ID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8Rm9vdGVyQ29udGVudD4sIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wcywgb3RoZXJzKTtcblx0fVxuXG5cdEBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcihcInJvdXRpbmdcIiwgXCJvbkFmdGVyQmluZGluZ1wiKVxuXHRwdWJsaWMgYXN5bmMgb25BZnRlckJpbmRpbmcodGhpczogRm9vdGVyQ29udGVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLl9oaWRkZW5EcmFmdCkge1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXI7XG5cdFx0XHRjb25zdCB2aWV3Q29udGV4dCA9IGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBpc05ld09iamVjdCA9IGF3YWl0IGNvbnRyb2xsZXIuZWRpdEZsb3cuaXNSb290Q29udGV4dE5ldyh2aWV3Q29udGV4dCk7XG5cdFx0XHQodGhpcy5nZXRNb2RlbChcImZvb3RlckludGVybmFsXCIpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoXCIvcm9vdElzTmV3T2JqZWN0XCIsIGlzTmV3T2JqZWN0KTtcblx0XHR9XG5cdH1cblxuXHRpbml0aWFsaXplKCk6IHZvaWQge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKTtcblx0XHR0aGlzLnNldE1vZGVsKG5ldyBKU09OTW9kZWwoKSwgXCJmb290ZXJJbnRlcm5hbFwiKTtcblx0XHR0aGlzLmFjdGlvbnMgPSBvd25lcj8ucHJlcHJvY2Vzc29yQ29udGV4dD8uYmluZGluZ0NvbnRleHRzPy5jb252ZXJ0ZXJDb250ZXh0Py5nZXRPYmplY3QoXCJmb290ZXJBY3Rpb25zXCIpO1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoVG9Vc2UgPSBvd25lcj8ucHJlcHJvY2Vzc29yQ29udGV4dD8uZnVsbENvbnRleHRQYXRoO1xuXHRcdHRoaXMub0RhdGFNZXRhTW9kZWwgPSBvd25lcj8ucHJlcHJvY2Vzc29yQ29udGV4dD8ubW9kZWxzLm1ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHR0aGlzLmRhdGFWaWV3TW9kZWxQYXRoID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCh0aGlzLm1ldGFQYXRoLCBjb250ZXh0UGF0aFRvVXNlID8/IHRoaXMuY29udGV4dFBhdGgpITtcblx0XHRjb25zdCBzdGFydGluZ0VudGl0eVNldCA9IHRoaXMuZGF0YVZpZXdNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQ7XG5cdFx0dGhpcy5pc0RyYWZ0VmFsaWRhdGlvbiA9ICEhKFxuXHRcdFx0TW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHN0YXJ0aW5nRW50aXR5U2V0KT8uUHJlcGFyYXRpb25BY3Rpb24gJiYgc3RhcnRpbmdFbnRpdHlTZXQ/LmVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5NZXNzYWdlc1xuXHRcdCk7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIG9uTWV0YWRhdGFBdmFpbGFibGUgZXZlbnQuXG5cdCAqL1xuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLl9nZXRPd25lcigpPy5nZXRSb290Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyO1xuXHRcdHRoaXMuX2hpZGRlbkRyYWZ0ID0gKGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHR0aGlzLl9oaWRlQ3JlYXRlTmV4dCA9XG5cdFx0XHQoY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uaGlkZUNyZWF0ZU5leHQgPT09XG5cdFx0XHR0cnVlO1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmluaXRpYWxpemUoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEFjdGlvbk1vZGVsUGF0aChhY3Rpb246IEJhc2VBY3Rpb24pOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEZvckFjdGlvbj4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gYWN0aW9uLmFubm90YXRpb25QYXRoO1xuXHRcdGlmIChhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IHRoaXMub0RhdGFNZXRhTW9kZWwuZ2V0Q29udGV4dChhbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEZvckFjdGlvbj4oYWN0aW9uQ29udGV4dCk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRnZXREcmFmdEluZGljYXRvcigpOiBEcmFmdEluZGljYXRvciB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gKHRoaXMuZGF0YVZpZXdNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0IHx8IHRoaXMuZGF0YVZpZXdNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpIGFzIEVudGl0eVNldDsgLy8gc3RhcnRpbmdFbnRpdHlTZXQgaXMgdXNlZCBvbiBjb250YWlubWVudCBzY2VuYXJpb1xuXHRcdGNvbnN0IGNvbW1vbkFubm90YXRpb24gPSBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNvbW1vbjtcblx0XHRpZiAoKGNvbW1vbkFubm90YXRpb24/LkRyYWZ0Um9vdCB8fCBjb21tb25Bbm5vdGF0aW9uPy5EcmFmdE5vZGUpICYmICF0aGlzLl9oaWRkZW5EcmFmdCkge1xuXHRcdFx0cmV0dXJuIDxEcmFmdEluZGljYXRvciBzdGF0ZT1cInt1aT4vZHJhZnRTdGF0dXN9XCIgdmlzaWJsZT1cInt1aT4vaXNFZGl0YWJsZX1cIiAvPjtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHByaXZhdGUgZ2V0QXBwbHlCdXR0b24oZW1waGFzaXplZEV4cHJlc3Npb246IFByb3BlcnR5QmluZGluZ0luZm8pOiBCdXR0b24gfCBNZW51QnV0dG9uIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSBjb250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzO1xuXHRcdGlmICgodmlld0RhdGE/LnZpZXdMZXZlbCAhPSBudWxsICYmIHZpZXdEYXRhPy52aWV3TGV2ZWwgPD0gMSkgfHwgdGhpcy5faGlkZGVuRHJhZnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRpZiAodGhpcy5pc0RyYWZ0VmFsaWRhdGlvbiAmJiAhdmlld0RhdGEuaXNEZXNrdG9wICYmICF2aWV3RGF0YS5mY2xFbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TWVudUJ1dHRvblxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+VF9DT01NT05fT0JKRUNUX1BBR0VfQVBQTFlfRFJBRlR9XCJcblx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uPXthc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdFx0XHRhd2FpdCBjb250cm9sbGVyLl9hcHBseURvY3VtZW50KGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0dXNlRGVmYXVsdEFjdGlvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0XHRidXR0b25Nb2RlPVwiU3BsaXRcIlxuXHRcdFx0XHRcdHR5cGU9e2VtcGhhc2l6ZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxNZW51PlxuXHRcdFx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+VF9DT01NT05fT0JKRUNUX1BBR0VfVkFMSURBVEVfRFJBRlR9XCJcblx0XHRcdFx0XHRcdFx0cHJlc3M9e2FzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBjb250cm9sbGVyLl92YWxpZGF0ZURvY3VtZW50KCk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvTWVudT5cblx0XHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJTdGFuZGFyZEFjdGlvbjo6QXBwbHlcIil9XG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+VF9DT01NT05fT0JKRUNUX1BBR0VfQVBQTFlfRFJBRlR9XCJcblx0XHRcdFx0dHlwZT17ZW1waGFzaXplZEV4cHJlc3Npb259XG5cdFx0XHRcdGVuYWJsZWQ9e3RydWV9XG5cdFx0XHRcdHByZXNzPXthc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdFx0YXdhaXQgY29udHJvbGxlci5fYXBwbHlEb2N1bWVudChjb250cm9sbGVyLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0dmlzaWJsZT1cInt1aT4vaXNFZGl0YWJsZX1cIlxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGdldFByaW1hcnkoZW1waGFzaXplZEV4cHJlc3Npb24/OiBQcm9wZXJ0eUJpbmRpbmdJbmZvLCBhY3Rpb24/OiBCYXNlQWN0aW9uKTogQnV0dG9uIHwgTWVudUJ1dHRvbiB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLl9nZXRPd25lcigpPy5nZXRSb290Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyO1xuXHRcdGNvbnN0IGhpZGRlbkRyYWZ0ID0gKGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRjb25zdCB2aWV3RGF0YSA9IGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0Y29udHJvbGxlclxuXHRcdFx0LmdldFZpZXcoKVxuXHRcdFx0LmFkZERlcGVuZGVudChcblx0XHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0XHRyZWY9e3RoaXMuY21kRXhlY3V0aW9ufVxuXHRcdFx0XHRcdGNvbW1hbmQ9XCJTYXZlXCJcblx0XHRcdFx0XHRleGVjdXRlPXtjb250cm9sbGVyLl9zYXZlRG9jdW1lbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17b3IoXG5cdFx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRcdGhpZGRlbkRyYWZ0ID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRcdFx0dmlld0RhdGEuZmNsRW5hYmxlZCA9PT0gdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZXF1YWwocGF0aEluTW9kZWwoXCIvc2hvd1NhdmVBbmRDYW5jZWxCdXR0b25cIiwgXCJmY2xoZWxwZXJcIiksIHRydWUpKSxcblx0XHRcdFx0XHRcdFx0XHRVSS5Jc0VkaXRhYmxlXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFVJLklzRWRpdGFibGVcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcIi9pc0lubGluZUVkaXRBY3RpdmVcIiwgXCJ1aVwiKSwgdHJ1ZSlcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHRpZiAodGhpcy5pc0RyYWZ0VmFsaWRhdGlvbiAmJiAhdmlld0RhdGEuaXNEZXNrdG9wKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TWVudUJ1dHRvblxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VGV4dFNhdmVCdXR0b24oKX1cblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpTYXZlfGRlZmF1bHRBY3Rpb25cIlxuXHRcdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5PVwidHJ1ZVwiXG5cdFx0XHRcdFx0YnV0dG9uTW9kZT1cIlNwbGl0XCJcblx0XHRcdFx0XHR0eXBlPXtlbXBoYXNpemVkRXhwcmVzc2lvbn1cblx0XHRcdFx0XHR2aXNpYmxlPXtjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdFx0aGlkZGVuRHJhZnQgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdFx0XHR2aWV3RGF0YS5mY2xFbmFibGVkID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlcXVhbChwYXRoSW5Nb2RlbChcIi9zaG93U2F2ZUFuZENhbmNlbEJ1dHRvblwiLCBcImZjbGhlbHBlclwiKSwgdHJ1ZSkpLFxuXHRcdFx0XHRcdFx0XHRcdFVJLklzRWRpdGFibGVcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0VUkuSXNFZGl0YWJsZVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGVcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PE1lbnU+XG5cdFx0XHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5UX0NPTU1PTl9PQkpFQ1RfUEFHRV9WQUxJREFURV9EUkFGVH1cIlxuXHRcdFx0XHRcdFx0XHRwcmVzcz17YXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IGNvbnRyb2xsZXIuX3ZhbGlkYXRlRG9jdW1lbnQoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9NZW51PlxuXHRcdFx0XHQ8L01lbnVCdXR0b24+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0aGlzLmNyZWF0ZUlkKFwiU3RhbmRhcmRBY3Rpb246OlNhdmVcIil9XG5cdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VGV4dFNhdmVCdXR0b24oKX1cblx0XHRcdFx0dHlwZT17ZW1waGFzaXplZEV4cHJlc3Npb259XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdGhpZGRlbkRyYWZ0ID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YS5mY2xFbmFibGVkID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZXF1YWwocGF0aEluTW9kZWwoXCIvc2hvd1NhdmVBbmRDYW5jZWxCdXR0b25cIiwgXCJmY2xoZWxwZXJcIiksIHRydWUpKSxcblx0XHRcdFx0XHRcdFx0VUkuSXNFZGl0YWJsZVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFVJLklzRWRpdGFibGVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGVuYWJsZWQ9e3RydWV9XG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlNhdmV8cHJlc3NcIlxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbj8ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24/Lmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRUZXh0U2F2ZUJ1dHRvbigpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdFx0Y29uc3Qgc2F2ZUJ1dHRvblRleHQgPSB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9TQVZFXCIpO1xuXHRcdGNvbnN0IGNyZWF0ZUJ1dHRvblRleHQgPSB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9DUkVBVEVcIik7XG5cdFx0Ly8gSWYgd2UncmUgaW4gc3RpY2t5IG1vZGUgIC0+IHRoZSB1aSBpcyBpbiBjcmVhdGUgbW9kZSwgc2hvdyBDcmVhdGUsIGVsc2Ugc2hvdyBTYXZlXG5cdFx0Ly8gSWYgbm90IC0+IHdlJ3JlIGluIGRyYWZ0IG9yIGhpZGRlbiBkcmFmdFxuXHRcdC8vIEluIGNhc2Ugb2YgZHJhZnQgaWYgaXQgaXMgYSBuZXcgb2JqZWN0ICghSXNBY3RpdmVFbnRpdHkgJiYgIUhhc0FjdGl2ZUVudGl0eSksIHNob3cgY3JlYXRlLCBlbHNlIHNob3cgc2F2ZVxuXHRcdC8vIEluIGNhc2Ugb2YgaGlkZGVuIGRyYWZ0IHRoZSBidXR0b24gc2hvd3MgdXAgaW4gYWxsIHBhZ2VzIGFuZCBmb2xsb3dzIHRoZSBiZWxvdyBjcml0ZXJpYVxuXHRcdC8vIFx0XHRJZiB0aGUgcm9vdCBvYmplY3QgaXMgYSBuZXcgb2JqZWN0ICghSXNBY3RpdmVFbnRpdHkgJiYgIUhhc0FjdGl2ZUVudGl0eSkgdGhlbiBhbGwgcGFnZXMgc2hvdWxkIHNob3cgQ3JlYXRlLlxuXHRcdC8vIFx0XHRJZiB0aGUgcm9vciBvYmplY3QgaXMgbm90IGEgbmV3IG9iamVjdCB0aGVuIGFsbCBwYWdlcyBzaG91bGQgc2hvdyBTYXZlLlxuXHRcdHJldHVybiBpZkVsc2UoXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdCh0aGlzLmRhdGFWaWV3TW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCkuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCAhPT0gdW5kZWZpbmVkLFxuXHRcdFx0XHRVSS5Jc0NyZWF0ZU1vZGUsXG5cdFx0XHRcdGlmRWxzZSh0aGlzLl9oaWRkZW5EcmFmdCwgYW5kKHBhdGhJbk1vZGVsKFwiL3Jvb3RJc05ld09iamVjdFwiLCBcImZvb3RlckludGVybmFsXCIpKSwgRHJhZnQuSXNOZXdPYmplY3QpXG5cdFx0XHQpLFxuXHRcdFx0Y3JlYXRlQnV0dG9uVGV4dCxcblx0XHRcdHNhdmVCdXR0b25UZXh0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q2FuY2VsQnV0dG9uKGFjdGlvbj86IEJhc2VBY3Rpb24pOiBCdXR0b24gfCBudWxsIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0Um9vdENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblx0XHRjb25zdCBoaWRkZW5EcmFmdCA9IChjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHQ/LmVuYWJsZWQ7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSBjb250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzO1xuXHRcdGNvbnRyb2xsZXIuZ2V0VmlldygpLmFkZERlcGVuZGVudChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdHJlZj17dGhpcy5jbWRFeGVjdXRpb259XG5cdFx0XHRcdGNvbW1hbmQ9XCJDYW5jZWxcIlxuXHRcdFx0XHRleGVjdXRlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y29udHJvbGxlci5fY2FuY2VsRG9jdW1lbnQoeyBjYW5jZWxCdXR0b246IFwiZmU6OkZvb3RlckJhcjo6U3RhbmRhcmRBY3Rpb246OkNhbmNlbFwiIH0pO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHR2aXNpYmxlPXtpZkVsc2UoXG5cdFx0XHRcdFx0aGlkZGVuRHJhZnQgPT09IHRydWUsXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0dmlld0RhdGEuZmNsRW5hYmxlZCA9PT0gdHJ1ZSxcblx0XHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlcXVhbChwYXRoSW5Nb2RlbChcIi9zaG93U2F2ZUFuZENhbmNlbEJ1dHRvblwiLCBcImZjbGhlbHBlclwiKSwgdHJ1ZSkpLFxuXHRcdFx0XHRcdFx0VUkuSXNFZGl0YWJsZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0VUkuSXNFZGl0YWJsZVxuXHRcdFx0XHQpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdC8vIE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgc2V0dGluZyBpcyBuZWVkZWQgd2hlbiB0aGUgZGlzY2FyZCBidXR0b24gaXMgaW4gdGhlIG92ZXJmbG93XG5cdFx0cmV0dXJuIChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJTdGFuZGFyZEFjdGlvbjo6Q2FuY2VsXCIpfVxuXHRcdFx0XHR0ZXh0PXtcblx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdCh0aGlzLmRhdGFWaWV3TW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCkgJiYgIXRoaXMuX2hpZGRlbkRyYWZ0XG5cdFx0XHRcdFx0XHQ/IFwie3NhcC5mZS5pMThuPkNfQ09NTU9OX09CSkVDVF9QQUdFX0RJU0NBUkRfRFJBRlR9XCJcblx0XHRcdFx0XHRcdDogXCJ7c2FwLmZlLmkxOG4+Q19DT01NT05fT0JKRUNUX1BBR0VfQ0FOQ0VMfVwiXG5cdFx0XHRcdH1cblx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q2FuY2VsfHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0aGlkZGVuRHJhZnQgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRcdHZpZXdEYXRhLmZjbEVuYWJsZWQgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlcXVhbChwYXRoSW5Nb2RlbChcIi9zaG93U2F2ZUFuZENhbmNlbEJ1dHRvblwiLCBcImZjbGhlbHBlclwiKSwgdHJ1ZSkpLFxuXHRcdFx0XHRcdFx0XHRVSS5Jc0VkaXRhYmxlXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0VUkuSXNFZGl0YWJsZVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KX1cblx0XHRcdFx0YXJpYUhhc1BvcHVwPXtpZkVsc2UocGF0aEluTW9kZWwoXCIvaXNEb2N1bWVudE1vZGlmaWVkXCIsIFwidWlcIiksIGNvbnN0YW50KFwiRGlhbG9nXCIpLCBjb25zdGFudChcIk5vbmVcIikpfVxuXHRcdFx0XHRlbmFibGVkPXt0cnVlfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGFcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e2FjdGlvbj8ucHJpb3JpdHl9XG5cdFx0XHRcdFx0XHRcdGNsb3NlT3ZlcmZsb3dPbkludGVyYWN0aW9uPXtmYWxzZX1cblx0XHRcdFx0XHRcdD48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q3JlYXRlTmV4dEJ1dHRvbihlbXBoYXNpemVkRXhwcmVzc2lvbjogUHJvcGVydHlCaW5kaW5nSW5mbyk6IEJ1dHRvbiB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLl9nZXRPd25lcigpPy5nZXRSb290Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyO1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncztcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17dGhpcy5jcmVhdGVJZChcIlN0YW5kYXJkQWN0aW9uOjpDcmVhdGVOZXh0XCIpfVxuXHRcdFx0XHR0ZXh0PXtcIntzYXAuZmUuaTE4bj5DX0NPTU1PTl9PQkpFQ1RfUEFHRV9DUkVBVEVfTkVYVH1cIn1cblx0XHRcdFx0cHJlc3M9e2NvbnRyb2xsZXIuZWRpdEZsb3cuY3JlYXRlTmV4dERvY3VtZW50fVxuXHRcdFx0XHR0eXBlPXtlbXBoYXNpemVkRXhwcmVzc2lvbn1cblx0XHRcdFx0dmlzaWJsZT17aWZFbHNlKFxuXHRcdFx0XHRcdHRoaXMuX2hpZGRlbkRyYWZ0ID09PSB0cnVlLFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdHZpZXdEYXRhLmZjbEVuYWJsZWQgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRhbmQoRHJhZnQuSXNOZXdPYmplY3QsIGVxdWFsKHBhdGhJbk1vZGVsKFwiL3Nob3dTYXZlQW5kQ2FuY2VsQnV0dG9uXCIsIFwiZmNsaGVscGVyXCIpLCB0cnVlKSksXG5cdFx0XHRcdFx0XHREcmFmdC5Jc05ld09iamVjdFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0RHJhZnQuSXNOZXdPYmplY3Rcblx0XHRcdFx0KX1cblx0XHRcdFx0ZW5hYmxlZD17dHJ1ZX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGVcIlxuXHRcdFx0PlxuXHRcdFx0XHR7eyBsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBjbG9zZU92ZXJmbG93T25JbnRlcmFjdGlvbj17ZmFsc2V9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT4gfX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGdldFRvb2xiYXJTZXBhcmF0b3IoYWN0aW9uOiBCYXNlQWN0aW9uKTogVG9vbGJhclNlcGFyYXRvciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUb29sYmFyU2VwYXJhdG9yPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0fX1cblx0XHRcdDwvVG9vbGJhclNlcGFyYXRvcj5cblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b24oYWN0aW9uOiBCYXNlQWN0aW9uKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoYWN0aW9uLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0Um9vdENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gYWN0aW9uLmFubm90YXRpb25QYXRoO1xuXHRcdFx0bGV0IHByZXNzRXZlbnQ6IHsgcHJlc3M6IChldmVudDogRXZlbnQpID0+IHZvaWQgfSB8IHsgXCJqc3g6Y29tbWFuZFwiOiBDb21tYW5kUHJvcGVydGllcyB9O1xuXHRcdFx0Y29uc3QgdmlldyA9IGNvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGhDb250ZXh0ID0gdGhpcy5vRGF0YU1ldGFNb2RlbC5nZXRDb250ZXh0KGFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IGRhdGFGaWVsZENvbnRleHRNb2RlbFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkRm9yQWN0aW9uPihhbm5vdGF0aW9uUGF0aENvbnRleHQpO1xuXHRcdFx0Y29uc3QgZGF0YUZpZWxkRm9yQWN0aW9uID0gZGF0YUZpZWxkQ29udGV4dE1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRpZiAoZGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogdGhpcy5kYXRhVmlld01vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUsXG5cdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOlxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkRm9yQWN0aW9uLkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0PyAobGlicmFyeSBhcyBDb3JlTGliKS5JbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0XHRcdDogKGxpYnJhcnkgYXMgQ29yZUxpYikuSW52b2NhdGlvbkdyb3VwaW5nLklzb2xhdGVkLFxuXHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGRGb3JBY3Rpb24uTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGFjdGlvbi5pc05hdmlnYWJsZSxcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IGFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKCFhY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0XHRcdHByZXNzRXZlbnQgPSB7XG5cdFx0XHRcdFx0XHRwcmVzczogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHQoY29udHJvbGxlciBhcyBDb250cm9sbGVyV2l0aEFjdGlvbikuaGFuZGxlcnMub25DYWxsQWN0aW9uKHZpZXcsIGRhdGFGaWVsZEZvckFjdGlvbi5BY3Rpb24gYXMgc3RyaW5nLCB7XG5cdFx0XHRcdFx0XHRcdFx0Li4uYWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHQuLi57XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kZWw6IHZpZXcuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBjb21tYW5kIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdCBkb2Vzbid0IGdldCB0aGUgbWFuZGF0b3J5IHByZWZpeCBcImNtZDpcIiBzbyB3ZSBuZWVkIHRvIGFkZCBpdFxuXHRcdFx0XHRcdGlmICghYWN0aW9uLmNvbW1hbmQuc3RhcnRzV2l0aChcImNtZDpcIikpIHtcblx0XHRcdFx0XHRcdGFjdGlvbi5jb21tYW5kID0gYGNtZDoke2FjdGlvbi5jb21tYW5kfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHByZXNzRXZlbnQgPSB7IFwianN4OmNvbW1hbmRcIjogYCR7YWN0aW9uLmNvbW1hbmR9fHByZXNzYCBhcyBDb21tYW5kUHJvcGVydGllcyB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQodGhpcy5nZXRBY3Rpb25Nb2RlbFBhdGgoYWN0aW9uKSl9XG5cdFx0XHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gY29uc2lkZXJzIGFjdGlvbnMgd2l0aCBkeW5hbWljIHZpc2liaWxpdHkuXG5cdFx0XHRcdFx0XHQvLyBXaGVuIHdlIGhhdmUgb3RoZXIgdmFsdWVzIHRoYW4gdHJ1ZSBvciBmYWxzZSwgaS5lLiBhbiBleHByZXNzaW9uLCB3ZSBleGNsdWRlIHRoZSBhY3Rpb25zIGZyb20gYWRhcHRpbmcgdGhlIHZpc2liaWxpdHkuXG5cdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHRcdFx0XHR0ZXh0PXthY3Rpb25QYXJhbWV0ZXJzLmxhYmVsfVxuXHRcdFx0XHRcdFx0ey4uLnByZXNzRXZlbnR9XG5cdFx0XHRcdFx0XHRhcmlhSGFzUG9wdXA9e2lzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGRDb250ZXh0TW9kZWxQYXRoLnRhcmdldE9iamVjdCl9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkfVxuXHRcdFx0XHRcdFx0dHlwZT17Q3JpdGljYWxpdHlGb3JtYXR0ZXJzLmJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZShkYXRhRmllbGRDb250ZXh0TW9kZWxQYXRoKX1cblx0XHRcdFx0XHRcdGljb249e2FjdGlvbj8uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpIGFzIEJ1dHRvbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldE1hbmlmZXN0QnV0dG9uKGFjdGlvbjogQmFzZUFjdGlvbik6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKE9iamVjdFBhZ2VUZW1wbGF0aW5nLmlzTWFuaWZlc3RBY3Rpb24oYWN0aW9uKSkge1xuXHRcdFx0bGV0IHByZXNzRXZlbnQ6IHsgcHJlc3M6IChldmVudDogRXZlbnQpID0+IHZvaWQgfSB8IHsgXCJqc3g6Y29tbWFuZFwiOiBDb21tYW5kUHJvcGVydGllcyB9O1xuXHRcdFx0aWYgKGFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRcdHByZXNzRXZlbnQgPSB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke2FjdGlvbi5jb21tYW5kfXxwcmVzc2AgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHByZXNzRXZlbnQgPSB7XG5cdFx0XHRcdFx0cHJlc3M6IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBhY3Rpb24uaGFuZGxlck1vZHVsZSwgYWN0aW9uLmhhbmRsZXJNZXRob2QsIHt9KS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17dGhpcy5jcmVhdGVJZChhY3Rpb24uaWQpfVxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dCA/PyBcIlwifVxuXHRcdFx0XHRcdHsuLi5wcmVzc0V2ZW50fVxuXHRcdFx0XHRcdHR5cGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWR9XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdOKAmlxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCkgYXMgQnV0dG9uO1xuXHRcdH1cblx0fVxuXG5cdGdldEFjdGlvbkNvbnRyb2xzKCk6IEJ1dHRvbltdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBlbXBoYXNpemVkQnV0dG9uRXhwcmVzc2lvbiA9IE9iamVjdFBhZ2VUZW1wbGF0aW5nLmJ1aWxkRW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24odGhpcy5kYXRhVmlld01vZGVsUGF0aCk7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aW9uc1xuXHRcdFx0Py5tYXAoKGFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0XHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBBY3Rpb25UeXBlLkRlZmF1bHRBcHBseTpcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldEFwcGx5QnV0dG9uKGVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uKTtcblx0XHRcdFx0XHRjYXNlIEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uKGFjdGlvbik7XG5cdFx0XHRcdFx0Y2FzZSBBY3Rpb25UeXBlLlByaW1hcnk6XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5faGlkZGVuRHJhZnQgJiYgIXRoaXMuX2hpZGVDcmVhdGVOZXh0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVtcGhhc2l6ZWRCdXR0b25Ub29sS2l0RXhwID0gZW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb25cblx0XHRcdFx0XHRcdFx0XHQ/IHJlc29sdmVCaW5kaW5nU3RyaW5nKGVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uKVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQcmltYXJ5KGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShEcmFmdC5Jc05ld09iamVjdCwgdW5kZWZpbmVkLCBlbXBoYXNpemVkQnV0dG9uVG9vbEtpdEV4cCkpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFByaW1hcnkoZW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24sIGFjdGlvbik7XG5cdFx0XHRcdFx0Y2FzZSBBY3Rpb25UeXBlLlNlY29uZGFyeTpcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldENhbmNlbEJ1dHRvbihhY3Rpb24pO1xuXHRcdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5DcmVhdGVOZXh0OlxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuX2hpZGRlbkRyYWZ0ICYmICF0aGlzLl9oaWRlQ3JlYXRlTmV4dCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbXBoYXNpemVkQnV0dG9uVG9vbEtpdEV4cCA9IGVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uXG5cdFx0XHRcdFx0XHRcdFx0PyByZXNvbHZlQmluZGluZ1N0cmluZyhlbXBoYXNpemVkQnV0dG9uRXhwcmVzc2lvbilcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Q3JlYXRlTmV4dEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoRHJhZnQuSXNOZXdPYmplY3QsIGVtcGhhc2l6ZWRCdXR0b25Ub29sS2l0RXhwLCB1bmRlZmluZWQpKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5TZXBhcmF0b3I6XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRUb29sYmFyU2VwYXJhdG9yKGFjdGlvbik7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldE1hbmlmZXN0QnV0dG9uKGFjdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChhY3Rpb24pOiBhY3Rpb24gaXMgQnV0dG9uID0+ICEhYWN0aW9uKTtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogT3ZlcmZsb3dUb29sYmFyIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5fZ2V0T3duZXIoKT8uZ2V0Um9vdENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblx0XHRjb25zdCB2aWV3RGF0YSA9IGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0Y29uc3QgbWVzc2FnZUJ1dHRvbjogTWVzc2FnZUJ1dHRvbiA9IChcblx0XHRcdDxNZXNzYWdlQnV0dG9uXG5cdFx0XHRcdGlkPXt0aGlzLmNyZWF0ZUlkKFwiTWVzc2FnZUJ1dHRvblwiKX1cblx0XHRcdFx0dmlzaWJsZT17Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0dGhpcy5faGlkZGVuRHJhZnQgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRcdHZpZXdEYXRhLmZjbEVuYWJsZWQgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlcXVhbChwYXRoSW5Nb2RlbChcIi9zaG93U2F2ZUFuZENhbmNlbEJ1dHRvblwiLCBcImZjbGhlbHBlclwiKSwgdHJ1ZSkpLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KX1cblx0XHRcdFx0bWVzc2FnZUNoYW5nZT17KCk6IHZvaWQgPT4gY29udHJvbGxlci5fZ2V0Rm9vdGVyVmlzaWJpbGl0eSgpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W3RoaXMuY3JlYXRlSWQoXCJNZXNzYWdlQnV0dG9uOjpBcmlhVGV4dFwiKSBhcyBzdHJpbmddfVxuXHRcdFx0XHR0eXBlPVwiRW1waGFzaXplZFwiXG5cdFx0XHRcdGFyaWFIYXNQb3B1cD1cIkRpYWxvZ1wiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0Y29uc3QgZm9vdGVyQmFyID0gKFxuXHRcdFx0PE92ZXJmbG93VG9vbGJhciBpZD17dGhpcy5jcmVhdGVJZChcIl9mY1wiKX0gYXN5bmNNb2RlPXt0cnVlfT5cblx0XHRcdFx0PEludmlzaWJsZVRleHRcblx0XHRcdFx0XHRpZD17dGhpcy5jcmVhdGVJZChcIk1lc3NhZ2VCdXR0b246OkFyaWFUZXh0XCIpfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+Q19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9CVVRUT05fQVJJQV9URVhUfVwiXG5cdFx0XHRcdC8+XG5cdFx0XHRcdHttZXNzYWdlQnV0dG9ufVxuXHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHR7dGhpcy5nZXREcmFmdEluZGljYXRvcigpfVxuXHRcdFx0XHR7dGhpcy5nZXRBY3Rpb25Db250cm9scygpfVxuXHRcdFx0PC9PdmVyZmxvd1Rvb2xiYXI+XG5cdFx0KTtcblx0XHRjb250cm9sbGVyXG5cdFx0XHQuZ2V0VmlldygpXG5cdFx0XHQuYWRkRGVwZW5kZW50KFxuXHRcdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRcdHJlZj17dGhpcy5jbWRFeGVjdXRpb259XG5cdFx0XHRcdFx0Y29tbWFuZD1cIk9wZW5NZXNzYWdlQnV0dG9uTWVudVwiXG5cdFx0XHRcdFx0ZXhlY3V0ZT17KCk6IE1lc3NhZ2VCdXR0b24gPT4gbWVzc2FnZUJ1dHRvbi5maXJlUHJlc3MoKX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0cmV0dXJuIGZvb3RlckJhcjtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvQ0E7RUFHQTtFQUFBLElBYXFCQSxhQUFhLElBQUFDLElBQUEsR0FEakNDLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBQyxLQUFBLEdBRTVDQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFBQyxLQUFBLEdBR3pDRCxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsRUFBQUUsS0FBQSxHQUdoQ0MsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRSxRQUFRO0lBQ2RDLFFBQVEsRUFBRTtFQUNYLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR0RILFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFBUTtJQUNkQyxRQUFRLEVBQUU7RUFDWCxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUdESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFJLEtBQUEsR0FHNUJDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FtQmpCQywwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsRUFBQWQsSUFBQSxDQUFBZSxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGNBQUE7SUFKeEQsU0FBQWxCLGNBQVltQixLQUFxRCxFQUFFQyxNQUF5QixFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUM3RkEsS0FBQSxHQUFBSCxjQUFBLENBQUFJLElBQUEsT0FBTUgsS0FBSyxFQUFFQyxNQUFNLENBQUM7TUFBQ0csMEJBQUEsQ0FBQUYsS0FBQSx1Q0FBQUcsV0FBQSxFQUFBSCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsOEJBQUFJLFlBQUEsRUFBQUosS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLFFBQUFLLFlBQUEsRUFBQUwsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGNBQUFNLFlBQUEsRUFBQU4sS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGlCQUFBTyxZQUFBLEVBQUFQLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxrQkFBQVEsWUFBQSxFQUFBUixLQUFBO01BQUFBLEtBQUEsQ0FIZFMsZUFBZSxHQUFHLEtBQUs7TUFBQSxPQUFBVCxLQUFBO0lBSS9CO0lBQUNVLFFBQUEsR0FBQS9CLGFBQUE7SUFBQWdDLGNBQUEsQ0FBQWhDLGFBQUEsRUFBQWtCLGNBQUE7SUFBQSxJQUFBZSxNQUFBLEdBQUFqQyxhQUFBLENBQUFrQyxTQUFBO0lBQUFELE1BQUEsQ0FHWUUsY0FBYyxHQUQzQixlQUNhQSxjQUFjQSxDQUFBLEVBQXFDO01BQy9ELElBQUksSUFBSSxDQUFDQyxZQUFZLEVBQUU7UUFDdEIsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsRUFBRUMsaUJBQWlCLENBQUMsQ0FBbUI7UUFDMUUsTUFBTUMsV0FBVyxHQUFHSCxVQUFVLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7UUFDNUQsTUFBTUMsV0FBVyxHQUFHLE1BQU1OLFVBQVUsQ0FBQ08sUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQ0wsV0FBVyxDQUFDO1FBQzFFLElBQUksQ0FBQ00sUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQWVDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRUosV0FBVyxDQUFDO01BQzVGO0lBQ0QsQ0FBQztJQUFBVixNQUFBLENBRURlLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFBLEVBQVM7TUFDbEIsTUFBTUMsS0FBSyxHQUFHLElBQUksQ0FBQ1gsU0FBUyxDQUFDLENBQUM7TUFDOUIsSUFBSSxDQUFDWSxRQUFRLENBQUMsSUFBSUMsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztNQUNoRCxJQUFJLENBQUNDLE9BQU8sR0FBR0gsS0FBSyxFQUFFSSxtQkFBbUIsRUFBRUMsZUFBZSxFQUFFQyxnQkFBZ0IsRUFBRUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztNQUN4RyxNQUFNQyxnQkFBZ0IsR0FBR1IsS0FBSyxFQUFFSSxtQkFBbUIsRUFBRUssZUFBZTtNQUNwRSxJQUFJLENBQUNDLGNBQWMsR0FBR1YsS0FBSyxFQUFFSSxtQkFBbUIsRUFBRU8sTUFBTSxDQUFDQyxTQUEyQjtNQUNwRixJQUFJLENBQUNDLGlCQUFpQixHQUFHLElBQUksQ0FBQ0MsNkJBQTZCLENBQUMsSUFBSSxDQUFDQyxRQUFRLEVBQUVQLGdCQUFnQixJQUFJLElBQUksQ0FBQ1EsV0FBVyxDQUFFO01BQ2pILE1BQU1DLGlCQUFpQixHQUFHLElBQUksQ0FBQ0osaUJBQWlCLENBQUNJLGlCQUFpQjtNQUNsRSxJQUFJLENBQUNDLGlCQUFpQixHQUFHLENBQUMsRUFDekJDLFdBQVcsQ0FBQ0MsWUFBWSxDQUFDSCxpQkFBaUIsQ0FBQyxFQUFFSSxpQkFBaUIsSUFBSUosaUJBQWlCLEVBQUVLLFVBQVUsQ0FBQ0MsV0FBVyxDQUFDQyxNQUFNLEVBQUVDLFFBQVEsQ0FDNUg7TUFDRCxJQUFJLENBQUNDLE9BQU8sR0FBRyxJQUFJLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BDOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUEzQyxNQUFBLENBR0E0QyxtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFBLEVBQVM7TUFDM0IsTUFBTXhDLFVBQVUsR0FBRyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixDQUFDLENBQXlCO01BQ2hGLElBQUksQ0FBQ0gsWUFBWSxHQUFJQyxVQUFVLENBQUN5QyxlQUFlLENBQUMsQ0FBQyxDQUFDQywwQkFBMEIsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUNDLFdBQVcsRUFDekdDLE9BQU87TUFDVixJQUFJLENBQUNwRCxlQUFlLEdBQ2xCTyxVQUFVLENBQUN5QyxlQUFlLENBQUMsQ0FBQyxDQUFDQywwQkFBMEIsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUNDLFdBQVcsRUFBa0JFLGNBQWMsS0FDeEgsSUFBSTtNQUNMLElBQUksQ0FBQyxJQUFJLENBQUNSLE9BQU8sRUFBRTtRQUNsQixJQUFJLENBQUMzQixVQUFVLENBQUMsQ0FBQztNQUNsQjtJQUNELENBQUM7SUFBQWYsTUFBQSxDQUVPbUQsa0JBQWtCLEdBQTFCLFNBQVFBLGtCQUFrQkEsQ0FBQ0MsTUFBa0IsRUFBdUQ7TUFDbkcsTUFBTUMsY0FBYyxHQUFHRCxNQUFNLENBQUNDLGNBQWM7TUFDNUMsSUFBSUEsY0FBYyxFQUFFO1FBQ25CLE1BQU1DLGFBQWEsR0FBRyxJQUFJLENBQUM1QixjQUFjLENBQUM2QixVQUFVLENBQUNGLGNBQWMsQ0FBQztRQUNwRSxPQUFPRywyQkFBMkIsQ0FBcUJGLGFBQWEsQ0FBQztNQUN0RTtNQUNBLE9BQU9HLFNBQVM7SUFDakIsQ0FBQztJQUFBekQsTUFBQSxDQUVEMEQsaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQSxFQUErQjtNQUMvQyxNQUFNQyxTQUFTLEdBQUksSUFBSSxDQUFDOUIsaUJBQWlCLENBQUMrQixlQUFlLElBQUksSUFBSSxDQUFDL0IsaUJBQWlCLENBQUNJLGlCQUErQixDQUFDLENBQUM7TUFDckgsTUFBTTRCLGdCQUFnQixHQUFHRixTQUFTLENBQUNwQixXQUFXLEVBQUVDLE1BQU07TUFDdEQsSUFBSSxDQUFDcUIsZ0JBQWdCLEVBQUVDLFNBQVMsSUFBSUQsZ0JBQWdCLEVBQUVFLFNBQVMsS0FBSyxDQUFDLElBQUksQ0FBQzVELFlBQVksRUFBRTtRQUN2RixPQUFPNkQsSUFBQSxDQUFDQyxjQUFjO1VBQUNDLEtBQUssRUFBQyxtQkFBbUI7VUFBQ0MsT0FBTyxFQUFDO1FBQWtCLENBQUUsQ0FBQztNQUMvRTtNQUNBLE9BQU9WLFNBQVM7SUFDakIsQ0FBQztJQUFBekQsTUFBQSxDQUVPb0UsY0FBYyxHQUF0QixTQUFRQSxjQUFjQSxDQUFDQyxvQkFBeUMsRUFBOEI7TUFDN0YsTUFBTWpFLFVBQVUsR0FBRyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixDQUFDLENBQXlCO01BQ2hGLE1BQU1nRSxRQUFRLEdBQUdsRSxVQUFVLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUMrRCxXQUFXLENBQUMsQ0FBeUI7TUFDM0UsSUFBS0QsUUFBUSxFQUFFRSxTQUFTLElBQUksSUFBSSxJQUFJRixRQUFRLEVBQUVFLFNBQVMsSUFBSSxDQUFDLElBQUssSUFBSSxDQUFDckUsWUFBWSxFQUFFO1FBQ25GLE9BQU8sSUFBSTtNQUNaO01BQ0EsSUFBSSxJQUFJLENBQUMrQixpQkFBaUIsSUFBSSxDQUFDb0MsUUFBUSxDQUFDRyxTQUFTLElBQUksQ0FBQ0gsUUFBUSxDQUFDSSxVQUFVLEVBQUU7UUFDMUUsT0FDQ1YsSUFBQSxDQUFDVyxVQUFVO1VBQ1ZDLElBQUksRUFBQyxnREFBZ0Q7VUFDckRDLGFBQWEsRUFBRSxNQUFBQSxDQUFBLEtBQTJCO1lBQ3pDLE1BQU16RSxVQUFVLENBQUMwRSxjQUFjLENBQUMxRSxVQUFVLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztVQUMxRSxDQUFFO1VBQ0ZzRSxvQkFBb0IsRUFBQyxNQUFNO1VBQzNCQyxVQUFVLEVBQUMsT0FBTztVQUNsQnpHLElBQUksRUFBRThGLG9CQUFxQjtVQUMzQixpQkFBYyxlQUFlO1VBQUFZLFFBQUEsRUFFN0JqQixJQUFBLENBQUNrQixJQUFJO1lBQUFELFFBQUEsRUFDSmpCLElBQUEsQ0FBQ21CLFFBQVE7Y0FDUlAsSUFBSSxFQUFDLG1EQUFtRDtjQUN4RFEsS0FBSyxFQUFFLE1BQUFBLENBQUEsS0FBMkI7Z0JBQ2pDLE1BQU1oRixVQUFVLENBQUNpRixpQkFBaUIsQ0FBQyxDQUFDO2NBQ3JDO1lBQUUsQ0FDRjtVQUFDLENBQ0c7UUFBQyxDQUNJLENBQUM7TUFFZjtNQUNBLE9BQ0NyQixJQUFBLENBQUNzQixNQUFNO1FBQ05DLEVBQUUsRUFBRSxJQUFJLENBQUNDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBRTtRQUMzQ1osSUFBSSxFQUFDLGdEQUFnRDtRQUNyRHJHLElBQUksRUFBRThGLG9CQUFxQjtRQUMzQnBCLE9BQU8sRUFBRSxJQUFLO1FBQ2RtQyxLQUFLLEVBQUUsTUFBQUEsQ0FBQSxLQUEyQjtVQUNqQyxNQUFNaEYsVUFBVSxDQUFDMEUsY0FBYyxDQUFDMUUsVUFBVSxDQUFDSSxPQUFPLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBRTtRQUNGMEQsT0FBTyxFQUFDLGtCQUFrQjtRQUMxQixpQkFBYztNQUFlLENBQzdCLENBQUM7SUFFSixDQUFDO0lBQUFuRSxNQUFBLENBRU95RixVQUFVLEdBQWxCLFNBQVFBLFVBQVVBLENBQUNwQixvQkFBMEMsRUFBRWpCLE1BQW1CLEVBQThCO01BQy9HLE1BQU1oRCxVQUFVLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsQ0FBQyxDQUF5QjtNQUNoRixNQUFNb0YsV0FBVyxHQUFJdEYsVUFBVSxDQUFDeUMsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsMEJBQTBCLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxXQUFXLEVBQ3pHQyxPQUFPO01BQ1YsTUFBTXFCLFFBQVEsR0FBR2xFLFVBQVUsQ0FBQ0ksT0FBTyxDQUFDLENBQUMsQ0FBQytELFdBQVcsQ0FBQyxDQUF5QjtNQUMzRW5FLFVBQVUsQ0FDUkksT0FBTyxDQUFDLENBQUMsQ0FDVG1GLFlBQVksQ0FDWjNCLElBQUEsQ0FBQzRCLGdCQUFnQjtRQUNoQkMsR0FBRyxFQUFFLElBQUksQ0FBQ0MsWUFBYTtRQUN2QkMsT0FBTyxFQUFDLE1BQU07UUFDZEMsT0FBTyxFQUFFNUYsVUFBVSxDQUFDNkYsYUFBYztRQUNsQzlCLE9BQU8sRUFBRStCLEVBQUUsQ0FDVkMsTUFBTSxDQUNMVCxXQUFXLEtBQUssSUFBSSxFQUNwQlMsTUFBTSxDQUNMN0IsUUFBUSxDQUFDSSxVQUFVLEtBQUssSUFBSSxFQUM1QjBCLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxVQUFVLEVBQUVDLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQ3JGSCxFQUFFLENBQUNDLFVBQ0osQ0FBQyxFQUNERCxFQUFFLENBQUNDLFVBQ0osQ0FBQyxFQUNEQyxLQUFLLENBQUNDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQ3JEO01BQUUsQ0FDRixDQUNGLENBQUM7TUFDRixJQUFJLElBQUksQ0FBQ3RFLGlCQUFpQixJQUFJLENBQUNvQyxRQUFRLENBQUNHLFNBQVMsRUFBRTtRQUNsRCxPQUNDVCxJQUFBLENBQUNXLFVBQVU7VUFDVkMsSUFBSSxFQUFFLElBQUksQ0FBQzZCLGlCQUFpQixDQUFDLENBQUU7VUFDL0IsZUFBWSx3QkFBd0I7VUFDcEMxQixvQkFBb0IsRUFBQyxNQUFNO1VBQzNCQyxVQUFVLEVBQUMsT0FBTztVQUNsQnpHLElBQUksRUFBRThGLG9CQUFxQjtVQUMzQkYsT0FBTyxFQUFFdUMsaUJBQWlCLENBQ3pCUCxNQUFNLENBQ0xULFdBQVcsS0FBSyxJQUFJLEVBQ3BCUyxNQUFNLENBQ0w3QixRQUFRLENBQUNJLFVBQVUsS0FBSyxJQUFJLEVBQzVCMEIsR0FBRyxDQUFDQyxFQUFFLENBQUNDLFVBQVUsRUFBRUMsS0FBSyxDQUFDQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFDckZILEVBQUUsQ0FBQ0MsVUFDSixDQUFDLEVBQ0RELEVBQUUsQ0FBQ0MsVUFDSixDQUNELENBQUU7VUFDRixpQkFBYyxlQUFlO1VBQUFyQixRQUFBLEVBRTdCakIsSUFBQSxDQUFDa0IsSUFBSTtZQUFBRCxRQUFBLEVBQ0pqQixJQUFBLENBQUNtQixRQUFRO2NBQ1JQLElBQUksRUFBQyxtREFBbUQ7Y0FDeERRLEtBQUssRUFBRSxNQUFBQSxDQUFBLEtBQTJCO2dCQUNqQyxNQUFNaEYsVUFBVSxDQUFDaUYsaUJBQWlCLENBQUMsQ0FBQztjQUNyQztZQUFFLENBQ0Y7VUFBQyxDQUNHO1FBQUMsQ0FDSSxDQUFDO01BRWY7TUFFQSxPQUNDckIsSUFBQSxDQUFDc0IsTUFBTTtRQUNOQyxFQUFFLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUMsc0JBQXNCLENBQUU7UUFDMUNaLElBQUksRUFBRSxJQUFJLENBQUM2QixpQkFBaUIsQ0FBQyxDQUFFO1FBQy9CbEksSUFBSSxFQUFFOEYsb0JBQXFCO1FBQzNCRixPQUFPLEVBQUV1QyxpQkFBaUIsQ0FDekJQLE1BQU0sQ0FDTFQsV0FBVyxLQUFLLElBQUksRUFDcEJTLE1BQU0sQ0FDTDdCLFFBQVEsQ0FBQ0ksVUFBVSxLQUFLLElBQUksRUFDNUIwQixHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsVUFBVSxFQUFFQyxLQUFLLENBQUNDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUNyRkgsRUFBRSxDQUFDQyxVQUNKLENBQUMsRUFDREQsRUFBRSxDQUFDQyxVQUNKLENBQ0QsQ0FBRTtRQUNGckQsT0FBTyxFQUFFLElBQUs7UUFDZCxlQUFZLGdCQUFnQjtRQUM1QixpQkFBYyxlQUFlO1FBQUFnQyxRQUFBLEVBRTVCO1VBQ0EwQixVQUFVLEVBQUUzQyxJQUFBLENBQUM0Qyx5QkFBeUI7WUFBQ0MsUUFBUSxFQUFFekQsTUFBTSxFQUFFeUQsUUFBUztZQUFDQyxLQUFLLEVBQUUxRCxNQUFNLEVBQUUwRDtVQUFNLENBQTRCO1FBQ3JIO01BQUMsQ0FDTSxDQUFDO0lBRVgsQ0FBQztJQUFBOUcsTUFBQSxDQUVPeUcsaUJBQWlCLEdBQXpCLFNBQVFBLGlCQUFpQkEsQ0FBQSxFQUFxQztNQUM3RCxNQUFNTSxjQUFjLEdBQUcsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQztNQUN0RSxNQUFNQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNELGlCQUFpQixDQUFDLHlCQUF5QixDQUFDO01BQzFFO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBLE9BQU9iLE1BQU0sQ0FDWkEsTUFBTSxDQUNKLElBQUksQ0FBQ3RFLGlCQUFpQixDQUFDSSxpQkFBaUIsQ0FBZU0sV0FBVyxDQUFDMkUsT0FBTyxFQUFFQyxzQkFBc0IsS0FBSzFELFNBQVMsRUFDakg0QyxFQUFFLENBQUNlLFlBQVksRUFDZmpCLE1BQU0sQ0FBQyxJQUFJLENBQUNoRyxZQUFZLEVBQUVpRyxHQUFHLENBQUNJLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUVhLEtBQUssQ0FBQ0MsV0FBVyxDQUNwRyxDQUFDLEVBQ0RMLGdCQUFnQixFQUNoQkYsY0FDRCxDQUFDO0lBQ0YsQ0FBQztJQUFBL0csTUFBQSxDQUVPdUgsZUFBZSxHQUF2QixTQUFRQSxlQUFlQSxDQUFDbkUsTUFBbUIsRUFBaUI7TUFDM0QsTUFBTWhELFVBQVUsR0FBRyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixDQUFDLENBQXlCO01BQ2hGLE1BQU1vRixXQUFXLEdBQUl0RixVQUFVLENBQUN5QyxlQUFlLENBQUMsQ0FBQyxDQUFDQywwQkFBMEIsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUNDLFdBQVcsRUFDekdDLE9BQU87TUFDVixNQUFNcUIsUUFBUSxHQUFHbEUsVUFBVSxDQUFDSSxPQUFPLENBQUMsQ0FBQyxDQUFDK0QsV0FBVyxDQUFDLENBQXlCO01BQzNFbkUsVUFBVSxDQUFDSSxPQUFPLENBQUMsQ0FBQyxDQUFDbUYsWUFBWSxDQUNoQzNCLElBQUEsQ0FBQzRCLGdCQUFnQjtRQUNoQkMsR0FBRyxFQUFFLElBQUksQ0FBQ0MsWUFBYTtRQUN2QkMsT0FBTyxFQUFDLFFBQVE7UUFDaEJDLE9BQU8sRUFBRUEsQ0FBQSxLQUFZO1VBQ3BCNUYsVUFBVSxDQUFDb0gsZUFBZSxDQUFDO1lBQUVDLFlBQVksRUFBRTtVQUF3QyxDQUFDLENBQUM7UUFDdEYsQ0FBRTtRQUNGdEQsT0FBTyxFQUFFZ0MsTUFBTSxDQUNkVCxXQUFXLEtBQUssSUFBSSxFQUNwQlMsTUFBTSxDQUNMN0IsUUFBUSxDQUFDSSxVQUFVLEtBQUssSUFBSSxFQUM1QjBCLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxVQUFVLEVBQUVDLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQ3JGSCxFQUFFLENBQUNDLFVBQ0osQ0FBQyxFQUNERCxFQUFFLENBQUNDLFVBQ0o7TUFBRSxDQUNGLENBQ0YsQ0FBQztNQUNEO01BQ0EsT0FDQ3RDLElBQUEsQ0FBQ3NCLE1BQU07UUFDTkMsRUFBRSxFQUFFLElBQUksQ0FBQ0MsUUFBUSxDQUFDLHdCQUF3QixDQUFFO1FBQzVDWixJQUFJLEVBQ0h6QyxXQUFXLENBQUN1RixXQUFXLENBQUMsSUFBSSxDQUFDN0YsaUJBQWlCLENBQUMrQixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3pELFlBQVksR0FDbEYsa0RBQWtELEdBQ2xELDJDQUNIO1FBQ0QsZUFBWSxrQkFBa0I7UUFDOUJnRSxPQUFPLEVBQUV1QyxpQkFBaUIsQ0FDekJQLE1BQU0sQ0FDTFQsV0FBVyxLQUFLLElBQUksRUFDcEJTLE1BQU0sQ0FDTDdCLFFBQVEsQ0FBQ0ksVUFBVSxLQUFLLElBQUksRUFDNUIwQixHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsVUFBVSxFQUFFQyxLQUFLLENBQUNDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUNyRkgsRUFBRSxDQUFDQyxVQUNKLENBQUMsRUFDREQsRUFBRSxDQUFDQyxVQUNKLENBQ0QsQ0FBRTtRQUNGcUIsWUFBWSxFQUFFeEIsTUFBTSxDQUFDSyxXQUFXLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEVBQUVvQixRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUVBLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBRTtRQUNyRzNFLE9BQU8sRUFBRSxJQUFLO1FBQ2QsaUJBQWMsZUFBZTtRQUFBZ0MsUUFBQSxFQUU1QjtVQUNBMEIsVUFBVSxFQUNUM0MsSUFBQSxDQUFDNEMseUJBQXlCO1lBQ3pCQyxRQUFRLEVBQUV6RCxNQUFNLEVBQUV5RCxRQUFTO1lBQzNCZ0IsMEJBQTBCLEVBQUU7VUFBTSxDQUNQO1FBRTlCO01BQUMsQ0FDTSxDQUFDO0lBRVgsQ0FBQztJQUFBN0gsTUFBQSxDQUVPOEgsbUJBQW1CLEdBQTNCLFNBQVFBLG1CQUFtQkEsQ0FBQ3pELG9CQUF5QyxFQUFpQjtNQUNyRixNQUFNakUsVUFBVSxHQUFHLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsRUFBRUMsaUJBQWlCLENBQUMsQ0FBeUI7TUFDaEYsTUFBTWdFLFFBQVEsR0FBR2xFLFVBQVUsQ0FBQ0ksT0FBTyxDQUFDLENBQUMsQ0FBQytELFdBQVcsQ0FBQyxDQUF5QjtNQUMzRSxPQUNDUCxJQUFBLENBQUNzQixNQUFNO1FBQ05DLEVBQUUsRUFBRSxJQUFJLENBQUNDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBRTtRQUNoRFosSUFBSSxFQUFFLGdEQUFpRDtRQUN2RFEsS0FBSyxFQUFFaEYsVUFBVSxDQUFDTyxRQUFRLENBQUNvSCxrQkFBbUI7UUFDOUN4SixJQUFJLEVBQUU4RixvQkFBcUI7UUFDM0JGLE9BQU8sRUFBRWdDLE1BQU0sQ0FDZCxJQUFJLENBQUNoRyxZQUFZLEtBQUssSUFBSSxFQUMxQmdHLE1BQU0sQ0FDTDdCLFFBQVEsQ0FBQ0ksVUFBVSxLQUFLLElBQUksRUFDNUIwQixHQUFHLENBQUNpQixLQUFLLENBQUNDLFdBQVcsRUFBRWYsS0FBSyxDQUFDQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFDekZhLEtBQUssQ0FBQ0MsV0FDUCxDQUFDLEVBQ0RELEtBQUssQ0FBQ0MsV0FDUCxDQUFFO1FBQ0ZyRSxPQUFPLEVBQUUsSUFBSztRQUNkLGlCQUFjLGVBQWU7UUFBQWdDLFFBQUEsRUFFNUI7VUFBRTBCLFVBQVUsRUFBRTNDLElBQUEsQ0FBQzRDLHlCQUF5QjtZQUFDaUIsMEJBQTBCLEVBQUU7VUFBTSxDQUE0QjtRQUFFO01BQUMsQ0FDcEcsQ0FBQztJQUVYLENBQUM7SUFBQTdILE1BQUEsQ0FFT2dJLG1CQUFtQixHQUEzQixTQUFRQSxtQkFBbUJBLENBQUM1RSxNQUFrQixFQUFvQjtNQUNqRSxPQUNDWSxJQUFBLENBQUNpRSxnQkFBZ0I7UUFBQWhELFFBQUEsRUFDZjtVQUNBMEIsVUFBVSxFQUFFM0MsSUFBQSxDQUFDNEMseUJBQXlCO1lBQUNFLEtBQUssRUFBRTFELE1BQU0sQ0FBQzBEO1VBQU0sQ0FBNEI7UUFDeEY7TUFBQyxDQUNnQixDQUFDO0lBRXJCLENBQUM7SUFBQTlHLE1BQUEsQ0FFT2tJLDJCQUEyQixHQUFuQyxTQUFRQSwyQkFBMkJBLENBQUM5RSxNQUFrQixFQUFzQjtNQUMzRSxJQUFJQSxNQUFNLENBQUNDLGNBQWMsRUFBRTtRQUMxQixNQUFNakQsVUFBVSxHQUFHLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUMsRUFBRUMsaUJBQWlCLENBQUMsQ0FBeUI7UUFDaEYsTUFBTStDLGNBQWMsR0FBR0QsTUFBTSxDQUFDQyxjQUFjO1FBQzVDLElBQUk4RSxVQUFvRjtRQUN4RixNQUFNQyxJQUFJLEdBQUdoSSxVQUFVLENBQUNJLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLE1BQU02SCxxQkFBcUIsR0FBRyxJQUFJLENBQUMzRyxjQUFjLENBQUM2QixVQUFVLENBQUNGLGNBQWMsQ0FBQztRQUM1RSxNQUFNaUYseUJBQXlCLEdBQUc5RSwyQkFBMkIsQ0FBcUI2RSxxQkFBcUIsQ0FBQztRQUN4RyxNQUFNRSxrQkFBa0IsR0FBR0QseUJBQXlCLENBQUNFLFlBQVk7UUFDakUsSUFBSUQsa0JBQWtCLEVBQUU7VUFDdkIsTUFBTUUsZ0JBQWdCLEdBQUc7WUFDeEJDLGFBQWEsRUFBRSxJQUFJLENBQUM3RyxpQkFBaUIsQ0FBQytCLGVBQWUsRUFBRStFLElBQUk7WUFDM0RDLGtCQUFrQixFQUNqQkwsa0JBQWtCLENBQUNNLGtCQUFrQixLQUFLLG9DQUFvQyxHQUMxRUMsT0FBTyxDQUFhRCxrQkFBa0IsQ0FBQ0UsU0FBUyxHQUNoREQsT0FBTyxDQUFhRCxrQkFBa0IsQ0FBQ0csUUFBUTtZQUNwREMsS0FBSyxFQUFFVixrQkFBa0IsQ0FBQ1csS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQztZQUMzQ0MsV0FBVyxFQUFFaEcsTUFBTSxDQUFDZ0csV0FBVztZQUMvQkMsOEJBQThCLEVBQUVqRyxNQUFNLENBQUNpRztVQUN4QyxDQUFDO1VBQ0QsSUFBSSxDQUFDakcsTUFBTSxDQUFDMkMsT0FBTyxFQUFFO1lBQ3BCb0MsVUFBVSxHQUFHO2NBQ1ovQyxLQUFLLEVBQUVBLENBQUEsS0FBWTtnQkFDakJoRixVQUFVLENBQTBCa0osUUFBUSxDQUFDQyxZQUFZLENBQUNuQixJQUFJLEVBQUVHLGtCQUFrQixDQUFDaUIsTUFBTSxFQUFZO2tCQUNyRyxHQUFHZixnQkFBZ0I7a0JBQ25CLEdBQUc7b0JBQ0ZnQixRQUFRLEVBQUVyQixJQUFJLENBQUMzSCxpQkFBaUIsQ0FBQyxDQUFDO29CQUNsQ2lKLEtBQUssRUFBRXRCLElBQUksQ0FBQ3ZILFFBQVEsQ0FBQztrQkFDdEI7Z0JBQ0QsQ0FBQyxDQUFDO2NBQ0g7WUFDRCxDQUFDO1VBQ0YsQ0FBQyxNQUFNO1lBQ047WUFDQSxJQUFJLENBQUN1QyxNQUFNLENBQUMyQyxPQUFPLENBQUM0RCxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7Y0FDdkN2RyxNQUFNLENBQUMyQyxPQUFPLEdBQUcsT0FBTzNDLE1BQU0sQ0FBQzJDLE9BQU8sRUFBRTtZQUN6QztZQUNBb0MsVUFBVSxHQUFHO2NBQUUsYUFBYSxFQUFFLEdBQUcvRSxNQUFNLENBQUMyQyxPQUFPO1lBQThCLENBQUM7VUFDL0U7VUFDQSxPQUNDL0IsSUFBQSxDQUFDc0IsTUFBTTtZQUNOQyxFQUFFLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUMsSUFBSSxDQUFDckMsa0JBQWtCLENBQUNDLE1BQU0sQ0FBQztZQUNqRDtZQUNBO1lBQUE7WUFDQSxpQkFBZUEsTUFBTSxDQUFDZSxPQUFPLEtBQUssTUFBTSxJQUFJZixNQUFNLENBQUNlLE9BQU8sS0FBSyxPQUFPLEdBQUdWLFNBQVMsR0FBRywwQkFBMkI7WUFDaEhtQixJQUFJLEVBQUU2RCxnQkFBZ0IsQ0FBQ1EsS0FBTTtZQUFBLEdBQ3pCZCxVQUFVO1lBQ2RSLFlBQVksRUFBRWlDLGtCQUFrQixDQUFDdEIseUJBQXlCLENBQUNFLFlBQVksQ0FBRTtZQUN6RXJFLE9BQU8sRUFBRWYsTUFBTSxDQUFDZSxPQUFRO1lBQ3hCbEIsT0FBTyxFQUFFRyxNQUFNLENBQUNILE9BQVE7WUFDeEIxRSxJQUFJLEVBQUVzTCxxQkFBcUIsQ0FBQ0MsdUNBQXVDLENBQUN4Qix5QkFBeUIsQ0FBRTtZQUMvRnlCLElBQUksRUFBRTNHLE1BQU0sRUFBRTRHLGFBQWEsS0FBSyxJQUFJLEdBQUdDLE1BQU0sR0FBR3hHLFNBQVU7WUFBQXdCLFFBQUEsRUFFekQ7Y0FDQTBCLFVBQVUsRUFDVDNDLElBQUEsQ0FBQzRDLHlCQUF5QjtnQkFBQ0MsUUFBUSxFQUFFekQsTUFBTSxDQUFDeUQsUUFBUztnQkFBQ0MsS0FBSyxFQUFFMUQsTUFBTSxDQUFDMEQ7Y0FBTSxDQUE0QjtZQUV4RztVQUFDLENBQ00sQ0FBQztRQUVYO01BQ0Q7SUFDRCxDQUFDO0lBQUE5RyxNQUFBLENBRU9rSyxpQkFBaUIsR0FBekIsU0FBUUEsaUJBQWlCQSxDQUFDOUcsTUFBa0IsRUFBc0I7TUFDakUsSUFBSStHLG9CQUFvQixDQUFDQyxnQkFBZ0IsQ0FBQ2hILE1BQU0sQ0FBQyxFQUFFO1FBQ2xELElBQUkrRSxVQUFvRjtRQUN4RixJQUFJL0UsTUFBTSxDQUFDMkMsT0FBTyxFQUFFO1VBQ25Cb0MsVUFBVSxHQUFHO1lBQUUsYUFBYSxFQUFFLE9BQU8vRSxNQUFNLENBQUMyQyxPQUFPO1VBQVMsQ0FBQztRQUM5RCxDQUFDLE1BQU07VUFDTm9DLFVBQVUsR0FBRztZQUNaL0MsS0FBSyxFQUFHaUYsS0FBWSxJQUFXO2NBQzlCQyxTQUFTLENBQUNDLGFBQWEsQ0FBQ0YsS0FBSyxFQUFFakgsTUFBTSxDQUFDb0gsYUFBYSxFQUFFcEgsTUFBTSxDQUFDcUgsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBRUMsS0FBYyxJQUNuR0MsR0FBRyxDQUFDRCxLQUFLLENBQUNBLEtBQWUsQ0FDMUIsQ0FBQztZQUNGO1VBQ0QsQ0FBQztRQUNGO1FBQ0EsT0FDQ0UsS0FBQSxDQUFDdkYsTUFBTTtVQUNOQyxFQUFFLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUNwQyxNQUFNLENBQUNtQyxFQUFFLENBQUU7VUFDN0IsaUJBQWVuQyxNQUFNLENBQUNlLE9BQU8sS0FBSyxNQUFNLElBQUlmLE1BQU0sQ0FBQ2UsT0FBTyxLQUFLLE9BQU8sR0FBR1YsU0FBUyxHQUFHLDBCQUEyQjtVQUNoSG1CLElBQUksRUFBRXhCLE1BQU0sQ0FBQ3dCLElBQUksSUFBSSxFQUFHO1VBQUEsR0FDcEJ1RCxVQUFVO1VBQ2Q1SixJQUFJLEVBQUMsYUFBYTtVQUNsQjRGLE9BQU8sRUFBRWYsTUFBTSxDQUFDZSxPQUFRO1VBQ3hCbEIsT0FBTyxFQUFFRyxNQUFNLENBQUNILE9BQVE7VUFDeEI4RyxJQUFJLEVBQUUzRyxNQUFNLEVBQUU0RyxhQUFhLEtBQUssSUFBSSxHQUFHQyxNQUFNLEdBQUd4RyxTQUFVO1VBQUF3QixRQUFBLEdBRXpEO1lBQ0EwQixVQUFVLEVBQUUzQyxJQUFBLENBQUM0Qyx5QkFBeUI7Y0FBQ0MsUUFBUSxFQUFFekQsTUFBTSxDQUFDeUQsUUFBUztjQUFDQyxLQUFLLEVBQUUxRCxNQUFNLENBQUMwRDtZQUFNLENBQTRCO1VBQ25ILENBQUMsRUFBQyxRQUVIO1FBQUEsQ0FBUSxDQUFDO01BRVg7SUFDRCxDQUFDO0lBQUE5RyxNQUFBLENBRUQ4SyxpQkFBaUIsR0FBakIsU0FBQUEsaUJBQWlCQSxDQUFBLEVBQXlCO01BQ3pDLE1BQU1DLDBCQUEwQixHQUFHWixvQkFBb0IsQ0FBQ2EsK0JBQStCLENBQUMsSUFBSSxDQUFDbkosaUJBQWlCLENBQUM7TUFDL0csT0FBTyxJQUFJLENBQUNWLE9BQU8sRUFDaEI4SixHQUFHLENBQUU3SCxNQUFrQixJQUFLO1FBQzdCLFFBQVFBLE1BQU0sQ0FBQzdFLElBQUk7VUFDbEIsS0FBSzJNLFVBQVUsQ0FBQ0MsWUFBWTtZQUMzQixPQUFPLElBQUksQ0FBQy9HLGNBQWMsQ0FBQzJHLDBCQUEwQixDQUFDO1VBQ3ZELEtBQUtHLFVBQVUsQ0FBQ0Usa0JBQWtCO1lBQ2pDLE9BQU8sSUFBSSxDQUFDbEQsMkJBQTJCLENBQUM5RSxNQUFNLENBQUM7VUFDaEQsS0FBSzhILFVBQVUsQ0FBQ0csT0FBTztZQUN0QixJQUFJLElBQUksQ0FBQ2xMLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQ04sZUFBZSxFQUFFO2NBQy9DLE1BQU15TCwwQkFBMEIsR0FBR1AsMEJBQTBCLEdBQzFEUSxvQkFBb0IsQ0FBQ1IsMEJBQTBCLENBQUMsR0FDaER0SCxTQUFTO2NBQ1osT0FBTyxJQUFJLENBQUNnQyxVQUFVLENBQUNpQixpQkFBaUIsQ0FBQ1AsTUFBTSxDQUFDa0IsS0FBSyxDQUFDQyxXQUFXLEVBQUU3RCxTQUFTLEVBQUU2SCwwQkFBMEIsQ0FBQyxDQUFDLENBQUM7WUFDNUc7WUFDQSxPQUFPLElBQUksQ0FBQzdGLFVBQVUsQ0FBQ3NGLDBCQUEwQixFQUFFM0gsTUFBTSxDQUFDO1VBQzNELEtBQUs4SCxVQUFVLENBQUNNLFNBQVM7WUFDeEIsT0FBTyxJQUFJLENBQUNqRSxlQUFlLENBQUNuRSxNQUFNLENBQUM7VUFDcEMsS0FBSzhILFVBQVUsQ0FBQ08sVUFBVTtZQUN6QixJQUFJLElBQUksQ0FBQ3RMLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQ04sZUFBZSxFQUFFO2NBQy9DLE1BQU15TCwwQkFBMEIsR0FBR1AsMEJBQTBCLEdBQzFEUSxvQkFBb0IsQ0FBQ1IsMEJBQTBCLENBQUMsR0FDaER0SCxTQUFTO2NBQ1osT0FBTyxJQUFJLENBQUNxRSxtQkFBbUIsQ0FDOUJwQixpQkFBaUIsQ0FBQ1AsTUFBTSxDQUFDa0IsS0FBSyxDQUFDQyxXQUFXLEVBQUVnRSwwQkFBMEIsRUFBRTdILFNBQVMsQ0FBQyxDQUNuRixDQUFDO1lBQ0Y7WUFDQTtVQUNELEtBQUt5SCxVQUFVLENBQUNRLFNBQVM7WUFDeEIsT0FBTyxJQUFJLENBQUMxRCxtQkFBbUIsQ0FBQzVFLE1BQU0sQ0FBQztVQUN4QztZQUNDLE9BQU8sSUFBSSxDQUFDOEcsaUJBQWlCLENBQUM5RyxNQUFNLENBQUM7UUFDdkM7TUFDRCxDQUFDLENBQUMsQ0FDRHVJLE1BQU0sQ0FBRXZJLE1BQU0sSUFBdUIsQ0FBQyxDQUFDQSxNQUFNLENBQUM7SUFDakQsQ0FBQztJQUFBcEQsTUFBQSxDQUVEMkMsYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQUEsRUFBb0I7TUFDaEMsTUFBTXZDLFVBQVUsR0FBRyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixDQUFDLENBQXlCO01BQ2hGLE1BQU1nRSxRQUFRLEdBQUdsRSxVQUFVLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUMrRCxXQUFXLENBQUMsQ0FBeUI7TUFDM0UsTUFBTXFILGFBQTRCLEdBQ2pDNUgsSUFBQSxDQUFDNkgsYUFBYTtRQUNidEcsRUFBRSxFQUFFLElBQUksQ0FBQ0MsUUFBUSxDQUFDLGVBQWUsQ0FBRTtRQUNuQ3JCLE9BQU8sRUFBRXVDLGlCQUFpQixDQUN6QlAsTUFBTSxDQUNMLElBQUksQ0FBQ2hHLFlBQVksS0FBSyxJQUFJLEVBQzFCZ0csTUFBTSxDQUNMN0IsUUFBUSxDQUFDSSxVQUFVLEtBQUssSUFBSSxFQUM1QjBCLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxVQUFVLEVBQUVDLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQ3JGLElBQ0QsQ0FBQyxFQUNELElBQ0QsQ0FDRCxDQUFFO1FBQ0ZzRixhQUFhLEVBQUVBLENBQUEsS0FBWTFMLFVBQVUsQ0FBQzJMLG9CQUFvQixDQUFDLENBQUU7UUFDN0RDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQ3hHLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFZO1FBQ3JFakgsSUFBSSxFQUFDLFlBQVk7UUFDakJvSixZQUFZLEVBQUM7TUFBUSxDQUNyQixDQUNEO01BQ0QsTUFBTXNFLFNBQVMsR0FDZHBCLEtBQUEsQ0FBQ3FCLGVBQWU7UUFBQzNHLEVBQUUsRUFBRSxJQUFJLENBQUNDLFFBQVEsQ0FBQyxLQUFLLENBQUU7UUFBQzJHLFNBQVMsRUFBRSxJQUFLO1FBQUFsSCxRQUFBLEdBQzFEakIsSUFBQSxDQUFDb0ksYUFBYTtVQUNiN0csRUFBRSxFQUFFLElBQUksQ0FBQ0MsUUFBUSxDQUFDLHlCQUF5QixDQUFFO1VBQzdDWixJQUFJLEVBQUM7UUFBbUUsQ0FDeEUsQ0FBQyxFQUNEZ0gsYUFBYSxFQUNkNUgsSUFBQSxDQUFDcUksYUFBYSxJQUFFLENBQUMsRUFDaEIsSUFBSSxDQUFDM0ksaUJBQWlCLENBQUMsQ0FBQyxFQUN4QixJQUFJLENBQUNvSCxpQkFBaUIsQ0FBQyxDQUFDO01BQUEsQ0FDVCxDQUNqQjtNQUNEMUssVUFBVSxDQUNSSSxPQUFPLENBQUMsQ0FBQyxDQUNUbUYsWUFBWSxDQUNaM0IsSUFBQSxDQUFDNEIsZ0JBQWdCO1FBQ2hCQyxHQUFHLEVBQUUsSUFBSSxDQUFDQyxZQUFhO1FBQ3ZCQyxPQUFPLEVBQUMsdUJBQXVCO1FBQy9CQyxPQUFPLEVBQUVBLENBQUEsS0FBcUI0RixhQUFhLENBQUNVLFNBQVMsQ0FBQztNQUFFLENBQ3hELENBQ0YsQ0FBQztNQUNGLE9BQU9MLFNBQVM7SUFDakIsQ0FBQztJQUFBLE9BQUFsTyxhQUFBO0VBQUEsRUE3Z0J5Q3dPLGFBQWEsR0FBQWhOLFdBQUEsR0FBQWlOLHlCQUFBLENBQUF4TixPQUFBLENBQUFpQixTQUFBLHdDQUFBL0IsS0FBQTtJQUFBdU8sWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FFbkIsSUFBSTtJQUFBO0VBQUEsSUFBQXBOLFlBQUEsR0FBQWdOLHlCQUFBLENBQUF4TixPQUFBLENBQUFpQixTQUFBLCtCQUFBN0IsS0FBQTtJQUFBcU8sWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FHYixJQUFJO0lBQUE7RUFBQSxJQUFBbk4sWUFBQSxHQUFBK00seUJBQUEsQ0FBQXhOLE9BQUEsQ0FBQWlCLFNBQUEsU0FBQTVCLEtBQUE7SUFBQW9PLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBbE4sWUFBQSxHQUFBOE0seUJBQUEsQ0FBQXhOLE9BQUEsQ0FBQWlCLFNBQUEsZUFBQXhCLEtBQUE7SUFBQWdPLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBak4sWUFBQSxHQUFBNk0seUJBQUEsQ0FBQXhOLE9BQUEsQ0FBQWlCLFNBQUEsa0JBQUF2QixLQUFBO0lBQUErTixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQWhOLFlBQUEsR0FBQTRNLHlCQUFBLENBQUF4TixPQUFBLENBQUFpQixTQUFBLG1CQUFBdEIsS0FBQTtJQUFBOE4sWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFKLHlCQUFBLENBQUF4TixPQUFBLENBQUFpQixTQUFBLHFCQUFBcEIsS0FBQSxHQUFBZ08sTUFBQSxDQUFBQyx3QkFBQSxDQUFBOU4sT0FBQSxDQUFBaUIsU0FBQSxxQkFBQWpCLE9BQUEsQ0FBQWlCLFNBQUEsR0FBQWpCLE9BQUEsTUFBQUQsTUFBQTtFQUFBZSxRQUFBLEdBQUEvQixhQUFBO0VBQUEsT0FBQStCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -40,6 +40,7 @@ import type PageController from "sap/fe/core/PageController";
|
|
|
40
40
|
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
|
|
41
41
|
import * as ObjectPageTemplating from "sap/fe/templates/ObjectPage/ObjectPageTemplating";
|
|
42
42
|
import OverflowToolbarLayoutData from "sap/m/OverflowToolbarLayoutData";
|
|
43
|
+
import ToolbarSeparator from "sap/m/ToolbarSeparator";
|
|
43
44
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
44
45
|
|
|
45
46
|
type ControllerWithAction = Controller & {
|
|
@@ -191,7 +192,7 @@ export default class FooterContent extends BuildingBlock<OverflowToolbar> {
|
|
|
191
192
|
);
|
|
192
193
|
}
|
|
193
194
|
|
|
194
|
-
private getPrimary(emphasizedExpression?: PropertyBindingInfo): Button | MenuButton | null {
|
|
195
|
+
private getPrimary(emphasizedExpression?: PropertyBindingInfo, action?: BaseAction): Button | MenuButton | null {
|
|
195
196
|
const controller = this._getOwner()?.getRootController() as ObjectPageController;
|
|
196
197
|
const hiddenDraft = (controller.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft as HiddenDraft)
|
|
197
198
|
?.enabled;
|
|
@@ -249,6 +250,7 @@ export default class FooterContent extends BuildingBlock<OverflowToolbar> {
|
|
|
249
250
|
</MenuButton>
|
|
250
251
|
);
|
|
251
252
|
}
|
|
253
|
+
|
|
252
254
|
return (
|
|
253
255
|
<Button
|
|
254
256
|
id={this.createId("StandardAction::Save")}
|
|
@@ -268,7 +270,11 @@ export default class FooterContent extends BuildingBlock<OverflowToolbar> {
|
|
|
268
270
|
enabled={true}
|
|
269
271
|
jsx:command="cmd:Save|press"
|
|
270
272
|
dt:designtime="not-adaptable"
|
|
271
|
-
|
|
273
|
+
>
|
|
274
|
+
{{
|
|
275
|
+
layoutData: <OverflowToolbarLayoutData priority={action?.priority} group={action?.group}></OverflowToolbarLayoutData>
|
|
276
|
+
}}
|
|
277
|
+
</Button>
|
|
272
278
|
);
|
|
273
279
|
}
|
|
274
280
|
|
|
@@ -292,7 +298,7 @@ export default class FooterContent extends BuildingBlock<OverflowToolbar> {
|
|
|
292
298
|
);
|
|
293
299
|
}
|
|
294
300
|
|
|
295
|
-
private getCancelButton(): Button | null {
|
|
301
|
+
private getCancelButton(action?: BaseAction): Button | null {
|
|
296
302
|
const controller = this._getOwner()?.getRootController() as ObjectPageController;
|
|
297
303
|
const hiddenDraft = (controller.getAppComponent().getEnvironmentCapabilities().getCapabilities().HiddenDraft as HiddenDraft)
|
|
298
304
|
?.enabled;
|
|
@@ -340,7 +346,14 @@ export default class FooterContent extends BuildingBlock<OverflowToolbar> {
|
|
|
340
346
|
enabled={true}
|
|
341
347
|
dt:designtime="not-adaptable"
|
|
342
348
|
>
|
|
343
|
-
{{
|
|
349
|
+
{{
|
|
350
|
+
layoutData: (
|
|
351
|
+
<OverflowToolbarLayoutData
|
|
352
|
+
priority={action?.priority}
|
|
353
|
+
closeOverflowOnInteraction={false}
|
|
354
|
+
></OverflowToolbarLayoutData>
|
|
355
|
+
)
|
|
356
|
+
}}
|
|
344
357
|
</Button>
|
|
345
358
|
);
|
|
346
359
|
}
|
|
@@ -371,6 +384,16 @@ export default class FooterContent extends BuildingBlock<OverflowToolbar> {
|
|
|
371
384
|
);
|
|
372
385
|
}
|
|
373
386
|
|
|
387
|
+
private getToolbarSeparator(action: BaseAction): ToolbarSeparator {
|
|
388
|
+
return (
|
|
389
|
+
<ToolbarSeparator>
|
|
390
|
+
{{
|
|
391
|
+
layoutData: <OverflowToolbarLayoutData group={action.group}></OverflowToolbarLayoutData>
|
|
392
|
+
}}
|
|
393
|
+
</ToolbarSeparator>
|
|
394
|
+
);
|
|
395
|
+
}
|
|
396
|
+
|
|
374
397
|
private getDataFieldForActionButton(action: BaseAction): Button | undefined {
|
|
375
398
|
if (action.annotationPath) {
|
|
376
399
|
const controller = this._getOwner()?.getRootController() as ObjectPageController;
|
|
@@ -423,7 +446,13 @@ export default class FooterContent extends BuildingBlock<OverflowToolbar> {
|
|
|
423
446
|
enabled={action.enabled}
|
|
424
447
|
type={CriticalityFormatters.buildExpressionForCriticalityButtonType(dataFieldContextModelPath)}
|
|
425
448
|
icon={action?.isAIOperation === true ? aiIcon : undefined}
|
|
426
|
-
|
|
449
|
+
>
|
|
450
|
+
{{
|
|
451
|
+
layoutData: (
|
|
452
|
+
<OverflowToolbarLayoutData priority={action.priority} group={action.group}></OverflowToolbarLayoutData>
|
|
453
|
+
)
|
|
454
|
+
}}
|
|
455
|
+
</Button>
|
|
427
456
|
) as Button;
|
|
428
457
|
}
|
|
429
458
|
}
|
|
@@ -453,7 +482,12 @@ export default class FooterContent extends BuildingBlock<OverflowToolbar> {
|
|
|
453
482
|
visible={action.visible}
|
|
454
483
|
enabled={action.enabled}
|
|
455
484
|
icon={action?.isAIOperation === true ? aiIcon : undefined}
|
|
456
|
-
|
|
485
|
+
>
|
|
486
|
+
{{
|
|
487
|
+
layoutData: <OverflowToolbarLayoutData priority={action.priority} group={action.group}></OverflowToolbarLayoutData>
|
|
488
|
+
}}
|
|
489
|
+
‚
|
|
490
|
+
</Button>
|
|
457
491
|
) as Button;
|
|
458
492
|
}
|
|
459
493
|
}
|
|
@@ -474,9 +508,9 @@ export default class FooterContent extends BuildingBlock<OverflowToolbar> {
|
|
|
474
508
|
: undefined;
|
|
475
509
|
return this.getPrimary(compileExpression(ifElse(Draft.IsNewObject, undefined, emphasizedButtonToolKitExp)));
|
|
476
510
|
}
|
|
477
|
-
return this.getPrimary(emphasizedButtonExpression);
|
|
511
|
+
return this.getPrimary(emphasizedButtonExpression, action);
|
|
478
512
|
case ActionType.Secondary:
|
|
479
|
-
return this.getCancelButton();
|
|
513
|
+
return this.getCancelButton(action);
|
|
480
514
|
case ActionType.CreateNext:
|
|
481
515
|
if (this._hiddenDraft && !this._hideCreateNext) {
|
|
482
516
|
const emphasizedButtonToolKitExp = emphasizedButtonExpression
|
|
@@ -487,6 +521,8 @@ export default class FooterContent extends BuildingBlock<OverflowToolbar> {
|
|
|
487
521
|
);
|
|
488
522
|
}
|
|
489
523
|
return;
|
|
524
|
+
case ActionType.Separator:
|
|
525
|
+
return this.getToolbarSeparator(action);
|
|
490
526
|
default:
|
|
491
527
|
return this.getManifestButton(action);
|
|
492
528
|
}
|