@sapui5/sap.fe.core 1.100.0 → 1.102.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 +4 -4
- package/src/sap/fe/core/.library +2 -3
- package/src/sap/fe/core/AppComponent.js +23 -30
- package/src/sap/fe/core/AppComponent.ts +35 -40
- package/src/sap/fe/core/AppStateHandler.js +8 -8
- package/src/sap/fe/core/AppStateHandler.ts +11 -11
- package/src/sap/fe/core/BaseController.js +9 -9
- package/src/sap/fe/core/BaseController.ts +3 -4
- package/src/sap/fe/core/CommonUtils.js +122 -101
- package/src/sap/fe/core/CommonUtils.ts +239 -193
- package/src/sap/fe/core/ExtensionAPI.js +12 -13
- package/src/sap/fe/core/ExtensionAPI.ts +21 -31
- package/src/sap/fe/core/PageController.js +19 -13
- package/src/sap/fe/core/PageController.ts +40 -34
- package/src/sap/fe/core/TemplateComponent.js +198 -123
- package/src/sap/fe/core/TemplateComponent.ts +109 -121
- package/src/sap/fe/core/TemplateModel.js +7 -9
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +935 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +837 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +660 -288
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +513 -331
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +43 -25
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +132 -103
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +16 -16
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +64 -55
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +166 -99
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +187 -149
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
- package/src/sap/fe/core/controllerextensions/MassEdit.js +13 -12
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +22 -22
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +14 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +20 -30
- package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
- package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
- package/src/sap/fe/core/controllerextensions/Paginator.js +24 -15
- package/src/sap/fe/core/controllerextensions/Paginator.ts +35 -20
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +34 -16
- package/src/sap/fe/core/controllerextensions/Share.ts +50 -32
- package/src/sap/fe/core/controllerextensions/SideEffects.js +15 -15
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +64 -65
- package/src/sap/fe/core/controllerextensions/ViewState.js +27 -31
- package/src/sap/fe/core/controllerextensions/ViewState.ts +103 -102
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +90 -132
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +18 -8
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +264 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +35 -33
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +100 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1584 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +190 -159
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +780 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +329 -76
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1149 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +169 -97
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +592 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +83 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +52 -36
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- package/src/sap/fe/core/controls/Any.js +28 -0
- package/src/sap/fe/core/controls/Any.ts +30 -0
- package/src/sap/fe/core/controls/CommandExecution.js +50 -16
- package/src/sap/fe/core/controls/CommandExecution.ts +31 -22
- package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +371 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +282 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +74 -36
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +23 -32
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +52 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +127 -67
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +127 -67
- package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
- package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
- package/src/sap/fe/core/controls/FileWrapper.js +360 -0
- package/src/sap/fe/core/controls/FileWrapper.ts +202 -0
- package/src/sap/fe/core/controls/FilterBar.js +154 -119
- package/src/sap/fe/core/controls/FilterBar.ts +128 -123
- package/src/sap/fe/core/controls/FormElementWrapper.js +102 -37
- package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -35
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +41 -81
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -35
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
- package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
- package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
- package/src/sap/fe/core/converters/annotations/DataField.js +20 -5
- package/src/sap/fe/core/converters/annotations/DataField.ts +27 -6
- package/src/sap/fe/core/converters/controls/Common/Action.js +14 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +17 -10
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -14
- package/src/sap/fe/core/converters/controls/Common/Form.js +16 -18
- package/src/sap/fe/core/converters/controls/Common/Form.ts +20 -20
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +389 -173
- package/src/sap/fe/core/converters/controls/Common/Table.ts +440 -244
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +26 -16
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -19
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +78 -47
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +146 -107
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +30 -25
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +39 -34
- package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -28
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +38 -45
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
- package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/TableFormatter.js +74 -13
- package/src/sap/fe/core/formatters/TableFormatter.ts +71 -16
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
- package/src/sap/fe/core/fpm/Component.js +46 -17
- package/src/sap/fe/core/fpm/Component.ts +11 -16
- package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
- package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
- package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
- package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
- package/src/sap/fe/core/helpers/ClassSupport.ts +315 -237
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
- package/src/sap/fe/core/helpers/MassEditHelper.js +522 -147
- package/src/sap/fe/core/helpers/MassEditHelper.ts +563 -236
- package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +39 -26
- package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
- package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +5 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -8
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
- package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
- package/src/sap/fe/core/library.js +13 -5
- package/src/sap/fe/core/library.ts +26 -17
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
- package/src/sap/fe/core/messagebundle.properties +135 -180
- package/src/sap/fe/core/messagebundle_ar.properties +31 -64
- package/src/sap/fe/core/messagebundle_bg.properties +31 -64
- package/src/sap/fe/core/messagebundle_ca.properties +31 -64
- package/src/sap/fe/core/messagebundle_cs.properties +31 -64
- package/src/sap/fe/core/messagebundle_cy.properties +32 -65
- package/src/sap/fe/core/messagebundle_da.properties +31 -64
- package/src/sap/fe/core/messagebundle_de.properties +29 -62
- package/src/sap/fe/core/messagebundle_el.properties +32 -65
- package/src/sap/fe/core/messagebundle_en.properties +32 -65
- package/src/sap/fe/core/messagebundle_en_GB.properties +29 -62
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -74
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +32 -65
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +20 -6
- package/src/sap/fe/core/messagebundle_es.properties +31 -64
- package/src/sap/fe/core/messagebundle_es_MX.properties +31 -64
- package/src/sap/fe/core/messagebundle_et.properties +31 -64
- package/src/sap/fe/core/messagebundle_fi.properties +29 -62
- package/src/sap/fe/core/messagebundle_fr.properties +36 -69
- package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -66
- package/src/sap/fe/core/messagebundle_hi.properties +29 -62
- package/src/sap/fe/core/messagebundle_hr.properties +32 -65
- package/src/sap/fe/core/messagebundle_hu.properties +30 -63
- package/src/sap/fe/core/messagebundle_id.properties +32 -65
- package/src/sap/fe/core/messagebundle_it.properties +31 -64
- package/src/sap/fe/core/messagebundle_iw.properties +31 -64
- package/src/sap/fe/core/messagebundle_ja.properties +29 -62
- package/src/sap/fe/core/messagebundle_kk.properties +31 -64
- package/src/sap/fe/core/messagebundle_ko.properties +31 -64
- package/src/sap/fe/core/messagebundle_lt.properties +31 -64
- package/src/sap/fe/core/messagebundle_lv.properties +32 -65
- package/src/sap/fe/core/messagebundle_ms.properties +31 -64
- package/src/sap/fe/core/messagebundle_nl.properties +31 -64
- package/src/sap/fe/core/messagebundle_no.properties +31 -64
- package/src/sap/fe/core/messagebundle_pl.properties +34 -67
- package/src/sap/fe/core/messagebundle_pt.properties +32 -65
- package/src/sap/fe/core/messagebundle_pt_PT.properties +31 -64
- package/src/sap/fe/core/messagebundle_ro.properties +33 -66
- package/src/sap/fe/core/messagebundle_ru.properties +33 -66
- package/src/sap/fe/core/messagebundle_sh.properties +31 -64
- package/src/sap/fe/core/messagebundle_sk.properties +31 -64
- package/src/sap/fe/core/messagebundle_sl.properties +29 -62
- package/src/sap/fe/core/messagebundle_sv.properties +30 -63
- package/src/sap/fe/core/messagebundle_th.properties +31 -64
- package/src/sap/fe/core/messagebundle_tr.properties +31 -64
- package/src/sap/fe/core/messagebundle_uk.properties +32 -65
- package/src/sap/fe/core/messagebundle_vi.properties +31 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +32 -65
- package/src/sap/fe/core/messagebundle_zh_TW.properties +34 -67
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +11 -8
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -13
- package/src/sap/fe/core/services/NavigationServiceFactory.js +5 -5
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +105 -66
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +59 -49
- package/src/sap/fe/core/services/ShellServicesFactory.js +104 -29
- package/src/sap/fe/core/services/ShellServicesFactory.ts +64 -30
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -10
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +38 -51
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +0 -3
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +27 -6
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
- package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
- package/src/sap/fe/core/templating/FilterHelper.js +4 -4
- package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
- package/src/sap/fe/core/templating/PropertyHelper.js +70 -33
- package/src/sap/fe/core/templating/PropertyHelper.ts +49 -27
- package/src/sap/fe/core/templating/UIFormatters.js +133 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +144 -50
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- package/src/sap/fe/core/type/Email.js +26 -8
- package/src/sap/fe/core/type/Email.ts +8 -7
- package/src/sap/fe/core/AnnotationHelper.js +0 -312
- package/src/sap/fe/core/AnnotationHelper.ts +0 -315
- package/src/sap/fe/core/RouterProxy.js +0 -926
- package/src/sap/fe/core/TransactionHelper.js +0 -1562
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -392
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -136
- package/src/sap/fe/core/actions/collaboration/Manage.js +0 -262
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +0 -103
- package/src/sap/fe/core/actions/draft.js +0 -523
- package/src/sap/fe/core/actions/messageHandling.js +0 -567
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/ui/core/service/
|
|
5
|
+
sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory"], function (Service, ServiceFactory) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
@@ -17,7 +17,7 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
17
17
|
|
|
18
18
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
19
19
|
|
|
20
|
-
function
|
|
20
|
+
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
21
21
|
|
|
22
22
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
23
23
|
|
|
@@ -28,7 +28,7 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
28
28
|
* @private
|
|
29
29
|
*/
|
|
30
30
|
var ShellServiceMock = /*#__PURE__*/function (_Service) {
|
|
31
|
-
|
|
31
|
+
_inheritsLoose(ShellServiceMock, _Service);
|
|
32
32
|
|
|
33
33
|
function ShellServiceMock() {
|
|
34
34
|
return _Service.apply(this, arguments) || this;
|
|
@@ -41,19 +41,27 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
41
41
|
this.instanceType = "mock";
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
-
_proto.getLinks = function
|
|
44
|
+
_proto.getLinks = function
|
|
45
|
+
/*oArgs: object*/
|
|
46
|
+
getLinks() {
|
|
45
47
|
return Promise.resolve([]);
|
|
46
48
|
};
|
|
47
49
|
|
|
48
|
-
_proto.getLinksWithCache = function
|
|
50
|
+
_proto.getLinksWithCache = function
|
|
51
|
+
/*oArgs: object*/
|
|
52
|
+
getLinksWithCache() {
|
|
49
53
|
return Promise.resolve([]);
|
|
50
54
|
};
|
|
51
55
|
|
|
52
|
-
_proto.toExternal = function
|
|
56
|
+
_proto.toExternal = function
|
|
57
|
+
/*oNavArgumentsArr: Array<object>, oComponent: object*/
|
|
58
|
+
toExternal() {
|
|
53
59
|
return;
|
|
54
60
|
};
|
|
55
61
|
|
|
56
|
-
_proto.getStartupAppState = function
|
|
62
|
+
_proto.getStartupAppState = function
|
|
63
|
+
/*oArgs: object*/
|
|
64
|
+
getStartupAppState() {
|
|
57
65
|
return Promise.resolve(null);
|
|
58
66
|
};
|
|
59
67
|
|
|
@@ -61,19 +69,31 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
61
69
|
return;
|
|
62
70
|
};
|
|
63
71
|
|
|
64
|
-
_proto.hrefForExternal = function
|
|
72
|
+
_proto.hrefForExternal = function
|
|
73
|
+
/*oArgs?: object, oComponent?: object, bAsync?: boolean*/
|
|
74
|
+
hrefForExternal() {
|
|
65
75
|
return "";
|
|
66
76
|
};
|
|
67
77
|
|
|
68
|
-
_proto.
|
|
78
|
+
_proto.hrefForExternalAsync = function hrefForExternalAsync(oArgs, oComponent) {
|
|
69
79
|
return Promise.resolve({});
|
|
70
80
|
};
|
|
71
81
|
|
|
72
|
-
_proto.
|
|
82
|
+
_proto.getAppState = function
|
|
83
|
+
/*oComponent: object, sAppStateKey: string*/
|
|
84
|
+
getAppState() {
|
|
73
85
|
return Promise.resolve({});
|
|
74
86
|
};
|
|
75
87
|
|
|
76
|
-
_proto.
|
|
88
|
+
_proto.createEmptyAppState = function
|
|
89
|
+
/*oComponent: object*/
|
|
90
|
+
createEmptyAppState() {
|
|
91
|
+
return Promise.resolve({});
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
_proto.isNavigationSupported = function
|
|
95
|
+
/*oNavArgumentsArr: Array<object>, oComponent: object*/
|
|
96
|
+
isNavigationSupported() {
|
|
77
97
|
return Promise.resolve({});
|
|
78
98
|
};
|
|
79
99
|
|
|
@@ -81,31 +101,49 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
81
101
|
return false;
|
|
82
102
|
};
|
|
83
103
|
|
|
84
|
-
_proto.
|
|
104
|
+
_proto.isInitialNavigationAsync = function isInitialNavigationAsync() {
|
|
85
105
|
return Promise.resolve({});
|
|
86
106
|
};
|
|
87
107
|
|
|
88
|
-
_proto.
|
|
108
|
+
_proto.expandCompactHash = function
|
|
109
|
+
/*sHashFragment: string*/
|
|
110
|
+
expandCompactHash() {
|
|
111
|
+
return Promise.resolve({});
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
_proto.parseShellHash = function
|
|
115
|
+
/*sHash: string*/
|
|
116
|
+
parseShellHash() {
|
|
89
117
|
return {};
|
|
90
118
|
};
|
|
91
119
|
|
|
92
|
-
_proto.splitHash = function
|
|
120
|
+
_proto.splitHash = function
|
|
121
|
+
/*sHash: string*/
|
|
122
|
+
splitHash() {
|
|
93
123
|
return Promise.resolve({});
|
|
94
124
|
};
|
|
95
125
|
|
|
96
|
-
_proto.constructShellHash = function
|
|
126
|
+
_proto.constructShellHash = function
|
|
127
|
+
/*oNewShellHash: object*/
|
|
128
|
+
constructShellHash() {
|
|
97
129
|
return "";
|
|
98
130
|
};
|
|
99
131
|
|
|
100
|
-
_proto.setDirtyFlag = function
|
|
132
|
+
_proto.setDirtyFlag = function
|
|
133
|
+
/*bDirty: boolean*/
|
|
134
|
+
setDirtyFlag() {
|
|
101
135
|
return;
|
|
102
136
|
};
|
|
103
137
|
|
|
104
|
-
_proto.registerDirtyStateProvider = function
|
|
138
|
+
_proto.registerDirtyStateProvider = function
|
|
139
|
+
/*fnDirtyStateProvider: Function*/
|
|
140
|
+
registerDirtyStateProvider() {
|
|
105
141
|
return;
|
|
106
142
|
};
|
|
107
143
|
|
|
108
|
-
_proto.deregisterDirtyStateProvider = function
|
|
144
|
+
_proto.deregisterDirtyStateProvider = function
|
|
145
|
+
/*fnDirtyStateProvider: Function*/
|
|
146
|
+
deregisterDirtyStateProvider() {
|
|
109
147
|
return;
|
|
110
148
|
};
|
|
111
149
|
|
|
@@ -121,23 +159,33 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
121
159
|
return false;
|
|
122
160
|
};
|
|
123
161
|
|
|
124
|
-
_proto.registerNavigationFilter = function
|
|
162
|
+
_proto.registerNavigationFilter = function
|
|
163
|
+
/*fnNavFilter: Function*/
|
|
164
|
+
registerNavigationFilter() {
|
|
125
165
|
return;
|
|
126
166
|
};
|
|
127
167
|
|
|
128
|
-
_proto.unregisterNavigationFilter = function
|
|
168
|
+
_proto.unregisterNavigationFilter = function
|
|
169
|
+
/*fnNavFilter: Function*/
|
|
170
|
+
unregisterNavigationFilter() {
|
|
129
171
|
return;
|
|
130
172
|
};
|
|
131
173
|
|
|
132
|
-
_proto.setBackNavigation = function
|
|
174
|
+
_proto.setBackNavigation = function
|
|
175
|
+
/*fnCallBack?: Function*/
|
|
176
|
+
setBackNavigation() {
|
|
133
177
|
return;
|
|
134
178
|
};
|
|
135
179
|
|
|
136
|
-
_proto.setHierarchy = function
|
|
180
|
+
_proto.setHierarchy = function
|
|
181
|
+
/*aHierarchyLevels: Array<object>*/
|
|
182
|
+
setHierarchy() {
|
|
137
183
|
return;
|
|
138
184
|
};
|
|
139
185
|
|
|
140
|
-
_proto.setTitle = function
|
|
186
|
+
_proto.setTitle = function
|
|
187
|
+
/*sTitle: string*/
|
|
188
|
+
setTitle() {
|
|
141
189
|
return;
|
|
142
190
|
};
|
|
143
191
|
|
|
@@ -152,7 +200,9 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
152
200
|
}
|
|
153
201
|
};
|
|
154
202
|
|
|
155
|
-
_proto.getPrimaryIntent = function
|
|
203
|
+
_proto.getPrimaryIntent = function
|
|
204
|
+
/*sSemanticObject: string, mParameters?: object*/
|
|
205
|
+
getPrimaryIntent() {
|
|
156
206
|
return Promise.resolve();
|
|
157
207
|
};
|
|
158
208
|
|
|
@@ -187,7 +237,7 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
187
237
|
|
|
188
238
|
|
|
189
239
|
var ShellServices = /*#__PURE__*/function (_Service2) {
|
|
190
|
-
|
|
240
|
+
_inheritsLoose(ShellServices, _Service2);
|
|
191
241
|
|
|
192
242
|
function ShellServices() {
|
|
193
243
|
return _Service2.apply(this, arguments) || this;
|
|
@@ -299,8 +349,6 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
299
349
|
if (oArgs.length === 0) {
|
|
300
350
|
resolve([]);
|
|
301
351
|
} else {
|
|
302
|
-
var aLinks;
|
|
303
|
-
|
|
304
352
|
var oCacheResults = _this3.fnFindSemanticObjectsInCache(oArgs);
|
|
305
353
|
|
|
306
354
|
if (oCacheResults.newArgs.length === 0) {
|
|
@@ -430,6 +478,21 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
430
478
|
_proto2.hrefForExternal = function hrefForExternal(oArgs, oComponent, bAsync) {
|
|
431
479
|
return this.crossAppNavService.hrefForExternal(oArgs, oComponent, !!bAsync);
|
|
432
480
|
}
|
|
481
|
+
/**
|
|
482
|
+
* Will call hrefForExternal method of CrossApplicationNavigation service.
|
|
483
|
+
*
|
|
484
|
+
* @private
|
|
485
|
+
* @ui5-restricted
|
|
486
|
+
* @param {object} oArgs Check the definition of
|
|
487
|
+
* @param {object} oComponent The appComponent
|
|
488
|
+
* sap.ushell.services.CrossApplicationNavigation=>hrefForExternalAsync arguments
|
|
489
|
+
* @returns {string} Promise which will be resolved to string
|
|
490
|
+
*/
|
|
491
|
+
;
|
|
492
|
+
|
|
493
|
+
_proto2.hrefForExternalAsync = function hrefForExternalAsync(oArgs, oComponent) {
|
|
494
|
+
return this.crossAppNavService.hrefForExternalAsync(oArgs, oComponent);
|
|
495
|
+
}
|
|
433
496
|
/**
|
|
434
497
|
* Will call getAppState method of CrossApplicationNavigation service with oComponent and oAppStateKey.
|
|
435
498
|
*
|
|
@@ -486,6 +549,18 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
486
549
|
_proto2.isInitialNavigation = function isInitialNavigation() {
|
|
487
550
|
return this.crossAppNavService.isInitialNavigation();
|
|
488
551
|
}
|
|
552
|
+
/**
|
|
553
|
+
* Will call isInitialNavigationAsync method of CrossApplicationNavigation service.
|
|
554
|
+
*
|
|
555
|
+
* @private
|
|
556
|
+
* @ui5-restricted
|
|
557
|
+
* @returns {Promise} Promise which will be resolved to boolean
|
|
558
|
+
*/
|
|
559
|
+
;
|
|
560
|
+
|
|
561
|
+
_proto2.isInitialNavigationAsync = function isInitialNavigationAsync() {
|
|
562
|
+
return this.crossAppNavService.isInitialNavigationAsync();
|
|
563
|
+
}
|
|
489
564
|
/**
|
|
490
565
|
* Will call expandCompactHash method of CrossApplicationNavigation service.
|
|
491
566
|
*
|
|
@@ -725,7 +800,7 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
725
800
|
|
|
726
801
|
|
|
727
802
|
var ShellServicesFactory = /*#__PURE__*/function (_ServiceFactory) {
|
|
728
|
-
|
|
803
|
+
_inheritsLoose(ShellServicesFactory, _ServiceFactory);
|
|
729
804
|
|
|
730
805
|
function ShellServicesFactory() {
|
|
731
806
|
return _ServiceFactory.apply(this, arguments) || this;
|
|
@@ -758,4 +833,4 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
|
|
|
758
833
|
|
|
759
834
|
return ShellServicesFactory;
|
|
760
835
|
}, false);
|
|
761
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNoZWxsU2VydmljZXNGYWN0b3J5LnRzIl0sIm5hbWVzIjpbIlNoZWxsU2VydmljZU1vY2siLCJpbml0IiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImluc3RhbmNlVHlwZSIsImdldExpbmtzIiwib0FyZ3MiLCJnZXRMaW5rc1dpdGhDYWNoZSIsInRvRXh0ZXJuYWwiLCJvTmF2QXJndW1lbnRzQXJyIiwib0NvbXBvbmVudCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsImJhY2tUb1ByZXZpb3VzQXBwIiwiaHJlZkZvckV4dGVybmFsIiwiYkFzeW5jIiwiZ2V0QXBwU3RhdGUiLCJzQXBwU3RhdGVLZXkiLCJjcmVhdGVFbXB0eUFwcFN0YXRlIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiaXNJbml0aWFsTmF2aWdhdGlvbiIsImV4cGFuZENvbXBhY3RIYXNoIiwic0hhc2hGcmFnbWVudCIsInBhcnNlU2hlbGxIYXNoIiwic0hhc2giLCJzcGxpdEhhc2giLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJvTmV3U2hlbGxIYXNoIiwic2V0RGlydHlGbGFnIiwiYkRpcnR5IiwicmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJmbkRpcnR5U3RhdGVQcm92aWRlciIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJjcmVhdGVSZW5kZXJlciIsImdldFVzZXIiLCJoYXNVU2hlbGwiLCJyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJmbk5hdkZpbHRlciIsInVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwic2V0QmFja05hdmlnYXRpb24iLCJmbkNhbGxCYWNrIiwic2V0SGllcmFyY2h5IiwiYUhpZXJhcmNoeUxldmVscyIsInNldFRpdGxlIiwic1RpdGxlIiwiZ2V0Q29udGVudERlbnNpdHkiLCJkb2N1bWVudCIsImJvZHkiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldFByaW1hcnlJbnRlbnQiLCJzU2VtYW50aWNPYmplY3QiLCJtUGFyYW1ldGVycyIsIlNlcnZpY2UiLCJ3cmFwSlF1ZXJ5UHJvbWlzZSIsImpxdWVyeVByb21pc2UiLCJyZWplY3QiLCJkb25lIiwiZmFpbCIsIlNoZWxsU2VydmljZXMiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJzY29wZU9iamVjdCIsIm9TaGVsbENvbnRhaW5lciIsInNldHRpbmdzIiwic2hlbGxDb250YWluZXIiLCJsaW5rc0NhY2hlIiwiZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSIsIl9vQXJncyIsImFDYWNoZWRTZW1hbnRpY09iamVjdHMiLCJhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwiaSIsImxlbmd0aCIsInNlbWFudGljT2JqZWN0IiwicHVzaCIsImxpbmtzIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsIm9sZEFyZ3MiLCJuZXdBcmdzIiwiY2FjaGVkTGlua3MiLCJyZXNvbHZlRm4iLCJyZWplY3RGbiIsIm9Dcm9zc0FwcE5hdlNlcnZpY2VQcm9taXNlIiwiZ2V0U2VydmljZUFzeW5jIiwib1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbFVJU2VydmljZVByb21pc2UiLCJnZXRTZXJ2aWNlIiwiYWxsIiwidGhlbiIsIm9Dcm9zc0FwcE5hdlNlcnZpY2UiLCJvVXJsUGFyc2luZ1NlcnZpY2UiLCJvU2hlbGxOYXZpZ2F0aW9uIiwib1NoZWxsVUlTZXJ2aWNlIiwiY3Jvc3NBcHBOYXZTZXJ2aWNlIiwidXJsUGFyc2luZ1NlcnZpY2UiLCJzaGVsbE5hdmlnYXRpb24iLCJzaGVsbFVJU2VydmljZSIsImNhdGNoIiwib0Vycm9yIiwiRXJyb3IiLCJhTGlua3MiLCJvQ2FjaGVSZXN1bHRzIiwib1NlbWFudGljT2JqZWN0c0xpbmtzIiwidW5kZWZpbmVkIiwiYXNzaWduIiwiYU1lcmdlZExpbmtzIiwiaiIsImsiLCJnZXRTaGVsbENvbnRhaW5lciIsIlNoZWxsU2VydmljZXNGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJvU2VydmljZUNvbnRleHQiLCJzYXAiLCJ1c2hlbGwiLCJDb250YWluZXIiLCJvU2hlbGxTZXJ2aWNlIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsIlNlcnZpY2VGYWN0b3J5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFDTUEsZ0I7Ozs7Ozs7OztXQUlMQyxJLEdBQUEsZ0JBQU87QUFDTixXQUFLQyxXQUFMLEdBQW1CQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsSUFBaEIsQ0FBbkI7QUFDQSxXQUFLQyxZQUFMLEdBQW9CLE1BQXBCO0FBQ0EsSzs7V0FFREMsUSxHQUFBLGtCQUFTQyxLQUFULEVBQXdCO0FBQ3ZCLGFBQU9KLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0EsSzs7V0FFREksaUIsR0FBQSwyQkFBa0JELEtBQWxCLEVBQWlDO0FBQ2hDLGFBQU9KLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0EsSzs7V0FFREssVSxHQUFBLG9CQUFXQyxnQkFBWCxFQUE0Q0MsVUFBNUMsRUFBZ0U7QUFDL0Q7QUFDQSxLOztXQUVEQyxrQixHQUFBLDRCQUFtQkwsS0FBbkIsRUFBa0M7QUFDakMsYUFBT0osT0FBTyxDQUFDQyxPQUFSLENBQWdCLElBQWhCLENBQVA7QUFDQSxLOztXQUVEUyxpQixHQUFBLDZCQUFvQjtBQUNuQjtBQUNBLEs7O1dBRURDLGUsR0FBQSx5QkFBZ0JQLEtBQWhCLEVBQWdDSSxVQUFoQyxFQUFxREksTUFBckQsRUFBdUU7QUFDdEUsYUFBTyxFQUFQO0FBQ0EsSzs7V0FFREMsVyxHQUFBLHFCQUFZTCxVQUFaLEVBQWdDTSxZQUFoQyxFQUFzRDtBQUNyRCxhQUFPZCxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsRUFBaEIsQ0FBUDtBQUNBLEs7O1dBRURjLG1CLEdBQUEsNkJBQW9CUCxVQUFwQixFQUF3QztBQUN2QyxhQUFPUixPQUFP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QUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVb0QsTUFBVixFQUFxQjtBQUN2QztBQUNBLFFBQUEsTUFBSSxDQUFDd0Msa0JBQUwsQ0FDRTlDLGdCQURGLENBQ21CQyxlQURuQixFQUNvQ0MsV0FEcEMsRUFFRU0sSUFGRixDQUVPLFVBQUMyQyxNQUFELEVBQWlCO0FBQ3RCN0MsVUFBQUEsTUFBTSxDQUFDLElBQUk4QyxLQUFKLENBQVVELE1BQU0sR0FBRyxpRUFBbkIsQ0FBRCxDQUFOO0FBQ0EsU0FKRixFQUtFVixJQUxGLENBS092RixPQUxQO0FBTUEsT0FSTSxDQUFQO0FBU0EsSzs7O0lBN2UwQmlELE87QUFnZjVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztNQUNNMkQsb0I7Ozs7Ozs7OztBQUNMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO1lBQ0NDLGMsR0FBQSx3QkFBZUMsZUFBZixFQUFnRztBQUMvRkEsTUFBQUEsZUFBZSxDQUFDbEQsUUFBaEIsQ0FBeUJDLGNBQXpCLEdBQTBDa0QsR0FBRyxDQUFDQyxNQUFKLElBQWVELEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFwRTtBQUNBLFVBQU1DLGFBQWEsR0FBR0osZUFBZSxDQUFDbEQsUUFBaEIsQ0FBeUJDLGNBQXpCLEdBQ25CLElBQUlOLGFBQUosQ0FBa0J1RCxlQUFsQixDQURtQixHQUVuQixJQUFJbEgsZ0JBQUosQ0FBcUJrSCxlQUFyQixDQUZIO0FBR0EsYUFBT0ksYUFBYSxDQUFDcEgsV0FBZCxDQUEwQnlGLElBQTFCLENBQStCLFlBQU07QUFDM0M7QUFDQ3VCLFFBQUFBLGVBQWUsQ0FBQ3BELFdBQWpCLENBQXFDeUQsZ0JBQXJDLEdBQXdEO0FBQUEsaUJBQU1ELGFBQU47QUFBQSxTQUF4RDs7QUFDQSxlQUFPQSxhQUFQO0FBQ0EsT0FKTSxDQUFQO0FBS0EsSzs7O0lBbEJpQ0UsYzs7U0FxQnBCUixvQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZVwiO1xuaW1wb3J0IENvbnRhaW5lciBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9Db250YWluZXJcIjtcbmltcG9ydCBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvblwiO1xuaW1wb3J0IFNoZWxsTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9TaGVsbE5hdmlnYXRpb25cIjtcbmltcG9ydCBVUkxQYXJzaW5nIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgSVNoZWxsU2VydmljZXNcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNoZWxsU2VydmljZXMge1xuXHRpbml0UHJvbWlzZTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cdGluc3RhbmNlVHlwZTogc3RyaW5nO1xuXHRjcm9zc0FwcE5hdlNlcnZpY2U/OiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbjtcblx0Z2V0TGlua3Mob0FyZ3M6IG9iamVjdCk6IFByb21pc2U8YW55PjtcblxuXHRnZXRMaW5rc1dpdGhDYWNoZShvQXJnczogb2JqZWN0KTogUHJvbWlzZTxhbnlbXT47XG5cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QpOiB2b2lkO1xuXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZShvQXJnczogb2JqZWN0KTogUHJvbWlzZTxhbnk+O1xuXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCk6IHZvaWQ7XG5cblx0aHJlZkZvckV4dGVybmFsKG9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCwgc0FwcFN0YXRlS2V5OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBvYmplY3Q7XG5cblx0aXNOYXZpZ2F0aW9uU3VwcG9ydGVkKG9OYXZBcmd1bWVudHNBcnI6IEFycmF5PG9iamVjdD4sIG9Db21wb25lbnQ6IG9iamVjdCk6IFByb21pc2U8YW55PjtcblxuXHRpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IGJvb2xlYW47XG5cblx0ZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogb2JqZWN0O1xuXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpOiBhbnk7XG5cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiBvYmplY3Q7XG5cblx0Y29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2g6IG9iamVjdCk6IHN0cmluZztcblxuXHRzZXREaXJ0eUZsYWcoYkRpcnR5OiBib29sZWFuKTogdm9pZDtcblxuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRjcmVhdGVSZW5kZXJlcigpOiBvYmplY3Q7XG5cblx0Z2V0VXNlcigpOiBhbnk7XG5cblx0aGFzVVNoZWxsKCk6IGJvb2xlYW47XG5cblx0cmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRzZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrPzogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+KTogdm9pZDtcblxuXHRzZXRUaXRsZShzVGl0bGU6IHN0cmluZyk6IHZvaWQ7XG5cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nO1xuXG5cdGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxhbnk+O1xufVxuXG4vKipcbiAqIE1vY2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZSBmb3IgT3BlbkZFXG4gKlxuICogQGltcGxlbWVudHMge0lTaGVsbFNlcnZpY2VzfVxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlTW9jayBleHRlbmRzIFNlcnZpY2U8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPiBpbXBsZW1lbnRzIElTaGVsbFNlcnZpY2VzIHtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPGFueT47XG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblxuXHRpbml0KCkge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcIm1vY2tcIjtcblx0fVxuXG5cdGdldExpbmtzKG9BcmdzOiBvYmplY3QpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdGdldExpbmtzV2l0aENhY2hlKG9BcmdzOiBvYmplY3QpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdHRvRXh0ZXJuYWwob05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Z2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBvYmplY3QpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHR9XG5cblx0YmFja1RvUHJldmlvdXNBcHAoKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aHJlZkZvckV4dGVybmFsKG9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBvYmplY3QsIHNBcHBTdGF0ZUtleTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IG9iamVjdCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0aXNOYXZpZ2F0aW9uU3VwcG9ydGVkKG9OYXZBcmd1bWVudHNBcnI6IEFycmF5PG9iamVjdD4sIG9Db21wb25lbnQ6IG9iamVjdCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0aXNJbml0aWFsTmF2aWdhdGlvbigpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRleHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50OiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0Y29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2g6IG9iamVjdCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y3JlYXRlUmVuZGVyZXIoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Z2V0VXNlcigpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRoYXNVU2hlbGwoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2s/OiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+KTogdm9pZCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdC8vIGluIGNhc2UgdGhlcmUgaXMgbm8gc2hlbGwgd2UgcHJvYmFibHkgbmVlZCB0byBsb29rIGF0IHRoZSBjbGFzc2VzIGJlaW5nIGRlZmluZWQgb24gdGhlIGJvZHlcblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb3p5XCIpKSB7XG5cdFx0XHRyZXR1cm4gXCJjb3p5XCI7XG5cdFx0fSBlbHNlIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvbXBhY3RcIikpIHtcblx0XHRcdHJldHVybiBcImNvbXBhY3RcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBvYmplY3QpOiBQcm9taXNlPGFueT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIFNoZWxsU2VydmljZXNTZXR0aW5nc1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IHR5cGUgU2hlbGxTZXJ2aWNlc1NldHRpbmdzID0ge1xuXHRzaGVsbENvbnRhaW5lcj86IENvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogV3JhcCBhIEpRdWVyeSBQcm9taXNlIHdpdGhpbiBhIG5hdGl2ZSB7UHJvbWlzZX0uXG4gKlxuICogQHRlbXBsYXRlIHtvYmplY3R9IFRcbiAqIEBwYXJhbSB7alF1ZXJ5LlByb21pc2U8VD59IGpxdWVyeVByb21pc2UgVGhlIG9yaWdpbmFsIGpxdWVyeSBwcm9taXNlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUPn0gQSBuYXRpdmUgcHJvbWlzZSB3cmFwcGluZyB0aGUgc2FtZSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHdyYXBKUXVlcnlQcm9taXNlPFQ+KGpxdWVyeVByb21pc2U6IGpRdWVyeS5Qcm9taXNlKTogUHJvbWlzZTxUPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0anF1ZXJ5UHJvbWlzZS5kb25lKHJlc29sdmUgYXMgYW55KS5mYWlsKHJlamVjdCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZXNcbiAqXG4gKiBAaW1wbGVtZW50cyB7SVNoZWxsU2VydmljZXN9XG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VzIGV4dGVuZHMgU2VydmljZTxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+PiBpbXBsZW1lbnRzIElTaGVsbFNlcnZpY2VzIHtcblx0cmVzb2x2ZUZuOiBhbnk7XG5cdHJlamVjdEZuOiBhbnk7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHQvLyAhOiBtZWFucyB0aGF0IHdlIGtub3cgaXQgd2lsbCBiZSBhc3NpZ25lZCBiZWZvcmUgdXNhZ2Vcblx0Y3Jvc3NBcHBOYXZTZXJ2aWNlITogQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb247XG5cdHVybFBhcnNpbmdTZXJ2aWNlITogVVJMUGFyc2luZztcblx0c2hlbGxOYXZpZ2F0aW9uITogU2hlbGxOYXZpZ2F0aW9uO1xuXHRvU2hlbGxDb250YWluZXIhOiBDb250YWluZXI7XG5cdHNoZWxsVUlTZXJ2aWNlITogYW55O1xuXHRpbnN0YW5jZVR5cGUhOiBzdHJpbmc7XG5cdGxpbmtzQ2FjaGUhOiBhbnk7XG5cdGZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGU6IGFueTtcblxuXHRpbml0KCkge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0IGFzIGFueTtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lciA9IG9Db250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyO1xuXHRcdHRoaXMuaW5zdGFuY2VUeXBlID0gXCJyZWFsXCI7XG5cdFx0dGhpcy5saW5rc0NhY2hlID0ge307XG5cdFx0dGhpcy5mbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlID0gZnVuY3Rpb24ob0FyZ3M6IGFueSk6IG9iamVjdCB7XG5cdFx0XHRjb25zdCBfb0FyZ3M6IGFueSA9IG9BcmdzO1xuXHRcdFx0Y29uc3QgYUNhY2hlZFNlbWFudGljT2JqZWN0cyA9IFtdO1xuXHRcdFx0Y29uc3QgYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyA9IFtdO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBfb0FyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKCEhX29BcmdzW2ldWzBdICYmICEhX29BcmdzW2ldWzBdLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMubGlua3NDYWNoZVtfb0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdKSB7XG5cdFx0XHRcdFx0XHRhQ2FjaGVkU2VtYW50aWNPYmplY3RzLnB1c2godGhpcy5saW5rc0NhY2hlW19vQXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9BcmdzW2ldWzBdLCBcImxpbmtzXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHRoaXMubGlua3NDYWNoZVtfb0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdLmxpbmtzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cy5wdXNoKF9vQXJnc1tpXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geyBvbGRBcmdzOiBvQXJncywgbmV3QXJnczogYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cywgY2FjaGVkTGlua3M6IGFDYWNoZWRTZW1hbnRpY09iamVjdHMgfTtcblx0XHR9O1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnJlc29sdmVGbiA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnJlamVjdEZuID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9Dcm9zc0FwcE5hdlNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cIik7XG5cdFx0Y29uc3Qgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVSTFBhcnNpbmdcIik7XG5cdFx0Y29uc3Qgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiU2hlbGxOYXZpZ2F0aW9uXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFVJU2VydmljZVByb21pc2UgPSBvQ29tcG9uZW50LmdldFNlcnZpY2UoXCJTaGVsbFVJU2VydmljZVwiKTtcblx0XHRQcm9taXNlLmFsbChbb0Nyb3NzQXBwTmF2U2VydmljZVByb21pc2UsIG9VcmxQYXJzaW5nU2VydmljZVByb21pc2UsIG9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSwgb1NoZWxsVUlTZXJ2aWNlUHJvbWlzZV0pXG5cdFx0XHQudGhlbigoW29Dcm9zc0FwcE5hdlNlcnZpY2UsIG9VcmxQYXJzaW5nU2VydmljZSwgb1NoZWxsTmF2aWdhdGlvbiwgb1NoZWxsVUlTZXJ2aWNlXSkgPT4ge1xuXHRcdFx0XHR0aGlzLmNyb3NzQXBwTmF2U2VydmljZSA9IG9Dcm9zc0FwcE5hdlNlcnZpY2U7XG5cdFx0XHRcdHRoaXMudXJsUGFyc2luZ1NlcnZpY2UgPSBvVXJsUGFyc2luZ1NlcnZpY2U7XG5cdFx0XHRcdHRoaXMuc2hlbGxOYXZpZ2F0aW9uID0gb1NoZWxsTmF2aWdhdGlvbjtcblx0XHRcdFx0dGhpcy5zaGVsbFVJU2VydmljZSA9IG9TaGVsbFVJU2VydmljZTtcblx0XHRcdFx0dGhpcy5yZXNvbHZlRm4oKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb25cblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0TGlua3MgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gdGFyZ2V0IGxpbmtzIGFycmF5XG5cdCAqL1xuXHRnZXRMaW5rcyhvQXJnczogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0dGhpcy5jcm9zc0FwcE5hdlNlcnZpY2Vcblx0XHRcdFx0LmdldExpbmtzKG9BcmdzKVxuXHRcdFx0XHQuZmFpbCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKG9FcnJvciArIFwiIHNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeS5nZXRMaW5rc1wiKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKHJlc29sdmUpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IGxpbmtzIGNvbmZpZ3VyZWQgZm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0ICYgYWN0aW9uIGluIGNhY2hlXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldExpbmtzIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldExpbmtzIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M6IG9iamVjdCk6IFByb21pc2U8YW55W10+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0XHRpZiAoKG9BcmdzIGFzIE9iamVjdFtdKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmVzb2x2ZShbXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsZXQgYUxpbmtzO1xuXHRcdFx0XHRjb25zdCBvQ2FjaGVSZXN1bHRzID0gdGhpcy5mbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlKG9BcmdzKTtcblxuXHRcdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5uZXdBcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHJlc29sdmUob0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0XHRcdFx0dGhpcy5jcm9zc0FwcE5hdlNlcnZpY2Vcblx0XHRcdFx0XHRcdC5nZXRMaW5rcyhvQ2FjaGVSZXN1bHRzLm5ld0FyZ3MpXG5cdFx0XHRcdFx0XHQuZmFpbCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihvRXJyb3IgKyBcIiBzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkuZ2V0TGlua3NXaXRoQ2FjaGVcIikpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50aGVuKChhTGlua3M6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNMaW5rczogYW55ID0ge307XG5cblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFMaW5rc1tpXS5sZW5ndGggPiAwICYmIG9DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5saW5rcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdHNMaW5rc1tvQ2FjaGVSZXN1bHRzLm5ld0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxpbmtzOiBhTGlua3NbaV1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5saW5rc0NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLmxpbmtzQ2FjaGUsIG9TZW1hbnRpY09iamVjdHNMaW5rcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKG9DYWNoZVJlc3VsdHMuY2FjaGVkTGlua3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShhTGlua3MpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFNZXJnZWRMaW5rcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblxuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgb0NhY2hlUmVzdWx0cy5vbGRBcmdzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaiA8IGFMaW5rcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFMaW5rc1tqXS5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NhY2hlUmVzdWx0cy5vbGRBcmdzW2tdWzBdLnNlbWFudGljT2JqZWN0ID09PSBvQ2FjaGVSZXN1bHRzLm5ld0FyZ3Nbal1bMF0uc2VtYW50aWNPYmplY3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goYUxpbmtzW2pdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2gob0NhY2hlUmVzdWx0cy5vbGRBcmdzW2tdWzBdLmxpbmtzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2gob0NhY2hlUmVzdWx0cy5vbGRBcmdzW2tdWzBdLmxpbmtzKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShhTWVyZ2VkTGlua3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIFNoZWxsQ29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogc2FwLnVzaGVsbC5jb250YWluZXJcblx0ICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IHdpdGggcHJlZGVmaW5lZCBzaGVsbENvbnRhaW5lciBtZXRob2RzXG5cdCAqL1xuXHRnZXRTaGVsbENvbnRhaW5lcigpIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXI7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHRvRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBOYXZpZ2F0aW9uIEFyZ3VtZW50cyBhbmQgb0NvbXBvbmVudC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7QXJyYXl9IG9OYXZBcmd1bWVudHNBcnIgQW5kXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PnRvRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmNyb3NzQXBwTmF2U2VydmljZS50b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IHN0YXJ0dXBBcHBTdGF0ZVxuXHQgKiBXaWxsIGNoZWNrIHRoZSBleGlzdGFuY2Ugb2YgdGhlIFNoZWxsQ29udGFpbmVyIGFuZCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0U3RhcnR1cEFwcFN0YXRlIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldFN0YXJ0dXBBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBPYmplY3Rcblx0ICovXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZShvQXJnczogQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdC8vIEpRdWVyeSBQcm9taXNlIGJlaGF2ZXMgZGlmZmVyZW50bHlcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0KHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlIGFzIGFueSlcblx0XHRcdFx0LmdldFN0YXJ0dXBBcHBTdGF0ZShvQXJncylcblx0XHRcdFx0LmZhaWwoKG9FcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihvRXJyb3IgKyBcIiBzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkuZ2V0U3RhcnR1cEFwcFN0YXRlXCIpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4ocmVzb2x2ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGJhY2tUb1ByZXZpb3VzQXBwIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRiYWNrVG9QcmV2aW91c0FwcCgpIHtcblx0XHRyZXR1cm4gdGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaHJlZkZvckV4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIHtib29sZWFufSBiQXN5bmMgV2hldGhlciB0aGlzIGNhbGwgc2hvdWxkIGJlIGFzeW5jIG9yIG5vdFxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5ocmVmRm9yRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBzdHJpbmdcblx0ICovXG5cdGhyZWZGb3JFeHRlcm5hbChvQXJnczogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlLmhyZWZGb3JFeHRlcm5hbChvQXJncywgb0NvbXBvbmVudCBhcyBvYmplY3QsICEhYkFzeW5jKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0QXBwU3RhdGUgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50IGFuZCBvQXBwU3RhdGVLZXkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbXBvbmVudFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0FwcFN0YXRlS2V5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0Z2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZykge1xuXHRcdHJldHVybiB3cmFwSlF1ZXJ5UHJvbWlzZSgodGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UgYXMgYW55KS5nZXRBcHBTdGF0ZShvQ29tcG9uZW50LCBzQXBwU3RhdGVLZXkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY3JlYXRlRW1wdHlBcHBTdGF0ZSBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5jcmVhdGVFbXB0eUFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpIHtcblx0XHRyZXR1cm4gKHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlIGFzIGFueSkuY3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge0FycmF5fSBvTmF2QXJndW1lbnRzQXJyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmlzTmF2aWdhdGlvblN1cHBvcnRlZCBhcmd1bWVudHNcblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QpIHtcblx0XHRyZXR1cm4gd3JhcEpRdWVyeVByb21pc2UodGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNJbml0aWFsTmF2aWdhdGlvbiBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gYm9vbGVhblxuXHQgKi9cblx0aXNJbml0aWFsTmF2aWdhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaXNJbml0aWFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBleHBhbmRDb21wYWN0SGFzaCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNIYXNoRnJhZ21lbnQgQW4gKGludGVybmFsIGZvcm1hdCkgc2hlbGwgaGFzaFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gQSBwcm9taXNlIHRoZSBzdWNjZXNzIGhhbmRsZXIgb2YgdGhlIHJlc29sdmUgcHJvbWlzZSBnZXQgYW4gZXhwYW5kZWQgc2hlbGwgaGFzaCBhcyBmaXJzdCBhcmd1bWVudFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQ6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLmNyb3NzQXBwTmF2U2VydmljZS5leHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcGFyc2VTaGVsbEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+cGFyc2VTaGVsbEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9XG5cdCAqL1xuXHRwYXJzZVNoZWxsSGFzaChzSGFzaDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UucGFyc2VTaGVsbEhhc2goc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzcGxpdEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+c3BsaXRIYXNoIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5zcGxpdEhhc2goc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjb25zdHJ1Y3RTaGVsbEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9OZXdTaGVsbEhhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5jb25zdHJ1Y3RTaGVsbEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFNoZWxsIEhhc2ggc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaDogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UuY29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXREaXJ0eUZsYWcgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJEaXJ0eSBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5zZXREaXJ0eUZsYWcgYXJndW1lbnRzXG5cdCAqL1xuXHRzZXREaXJ0eUZsYWcoYkRpcnR5OiBib29sZWFuKSB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuc2V0RGlydHlGbGFnKGJEaXJ0eSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlIHByb3ZpZGVyIGNhbGxiYWNrIG1ldGhvZC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZuRGlydHlTdGF0ZVByb3ZpZGVyIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIGFyZ3VtZW50c1xuXHQgKi9cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKSB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlIHByb3ZpZGVyIGNhbGxiYWNrIG1ldGhvZC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZuRGlydHlTdGF0ZVByb3ZpZGVyIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgYXJndW1lbnRzXG5cdCAqL1xuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbikge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjcmVhdGVSZW5kZXJlciBtZXRob2Qgb2YgdXNoZWxsIGNvbnRhaW5lci5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgcmVuZGVyZXIgb2JqZWN0XG5cdCAqL1xuXHRjcmVhdGVSZW5kZXJlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuY3JlYXRlUmVuZGVyZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0VXNlciBtZXRob2Qgb2YgdXNoZWxsIGNvbnRhaW5lci5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgVXNlciBvYmplY3Rcblx0ICovXG5cdGdldFVzZXIoKSB7XG5cdFx0cmV0dXJuICh0aGlzLm9TaGVsbENvbnRhaW5lciBhcyBhbnkpLmdldFVzZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNoZWNrIGlmIHVzaGVsbCBjb250YWluZXIgaXMgYXZhaWxhYmxlIG9yIG5vdC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWVcblx0ICovXG5cdGhhc1VTaGVsbCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIG1ldGhvZCBvZiBzaGVsbE5hdmlnYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZuTmF2RmlsdGVyIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gcmVnaXN0ZXJcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0cmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbikge1xuXHRcdCh0aGlzLnNoZWxsTmF2aWdhdGlvbiBhcyBhbnkpLnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIG1ldGhvZCBvZiBzaGVsbE5hdmlnYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZuTmF2RmlsdGVyIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gdW5yZWdpc3RlclxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pIHtcblx0XHQodGhpcy5zaGVsbE5hdmlnYXRpb24gYXMgYW55KS51bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEJhY2tOYXZpZ2F0aW9uIG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBiYWNrIGJ1dHRvbiBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5DYWxsQmFja10gQSBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgaW4gdGhlIFVJLlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRzZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrPzogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsVUlTZXJ2aWNlLnNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRIaWVyYXJjaHkgbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGdpdmVuIGhpZXJhcmNoeSBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdFtdfSBbYUhpZXJhcmNoeUxldmVsc10gQW4gYXJyYXkgcmVwcmVzZW50aW5nIGhpZXJhcmNoaWVzIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGFwcC5cblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0c2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IEFycmF5PG9iamVjdD4pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsVUlTZXJ2aWNlLnNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0VGl0bGUgbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGdpdmVuIHRpdGxlIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbc1RpdGxlXSBUaGUgbmV3IHRpdGxlLiBUaGUgZGVmYXVsdCB0aXRsZSBpcyBzZXQgaWYgdGhpcyBhcmd1bWVudCBpcyBub3QgZ2l2ZW4uXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbFVJU2VydmljZS5zZXRUaXRsZShzVGl0bGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IGRlZmluZWQgY29udGVudCBkZW5zaXR5LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29udGVudCBkZW5zaXR5IHZhbHVlXG5cdCAqL1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiAoKHRoaXMub1NoZWxsQ29udGFpbmVyIGFzIGFueSkuZ2V0VXNlcigpIGFzIGFueSkuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QsIHRoaXMgbWV0aG9kIGNvbnNpZGVycyBhbGwgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbWFudGljIG9iamVjdCBhbmRcblx0ICogcmV0dXJucyB0aGUgb25lIHRhZ2dlZCBhcyBhIFwicHJpbWFyeUFjdGlvblwiLiBJZiBubyBpbmJvdW5kIHRhZ2dlZCBhcyBcInByaW1hcnlBY3Rpb25cIiBleGlzdHMsIHRoZW4gaXQgcmV0dXJuc1xuXHQgKiB0aGUgaW50ZW50IG9mIHRoZSBmaXJzdCBpbmJvdW5kIChhZnRlciBzb3J0aW5nIGhhcyBiZWVuIGFwcGxpZWQpIG1hdGNoaW5nIHRoZSBhY3Rpb24gXCJkaXNwbGF5RmFjdFNoZWV0XCIuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1NlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdC5cblx0ICogQHBhcmFtIHtvYmplY3R9IG1QYXJhbWV0ZXJzIFNlZSAjQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24jZ2V0TGlua3MgZm9yIGRlc2NyaXB0aW9uLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGludGVudCBpZiBpdCBleGlzdHMuXG5cdCAqL1xuXHRnZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCk6IFByb21pc2U8YW55PiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0dGhpcy5jcm9zc0FwcE5hdlNlcnZpY2Vcblx0XHRcdFx0LmdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0LCBtUGFyYW1ldGVycylcblx0XHRcdFx0LmZhaWwoKG9FcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihvRXJyb3IgKyBcIiBzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkuZ2V0UHJpbWFyeUludGVudFwiKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKHJlc29sdmUpO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogU2VydmljZSBGYWN0b3J5IGZvciB0aGUgU2hlbGxTZXJ2aWNlc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZXNGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPiB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGVpdGhlciBhIHN0YW5kYXJkIG9yIGEgbW9jayBTaGVsbCBzZXJ2aWNlIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtTZXJ2aWNlQ29udGV4dDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+fSBvU2VydmljZUNvbnRleHQgVGhlIHNoZWxsc2VydmljZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPElTaGVsbFNlcnZpY2VzPn0gQSBwcm9taXNlIGZvciBhIHNoZWxsIHNlcnZpY2UgaW1wbGVtZW50YXRpb25cblx0ICogQHNlZSBTZXJ2aWNlRmFjdG9yeSNjcmVhdGVJbnN0YW5jZVxuXHQgKi9cblx0Y3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+KTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz4ge1xuXHRcdG9TZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lciA9IHNhcC51c2hlbGwgJiYgKHNhcC51c2hlbGwuQ29udGFpbmVyIGFzIENvbnRhaW5lcik7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZSA9IG9TZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lclxuXHRcdFx0PyBuZXcgU2hlbGxTZXJ2aWNlcyhvU2VydmljZUNvbnRleHQgYXMgU2VydmljZUNvbnRleHQ8UmVxdWlyZWQ8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPj4pXG5cdFx0XHQ6IG5ldyBTaGVsbFNlcnZpY2VNb2NrKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2UuaW5pdFByb21pc2UudGhlbigoKSA9PiB7XG5cdFx0XHQvLyBFbnJpY2ggdGhlIGFwcENvbXBvbmVudCB3aXRoIHRoaXMgbWV0aG9kXG5cdFx0XHQob1NlcnZpY2VDb250ZXh0LnNjb3BlT2JqZWN0IGFzIGFueSkuZ2V0U2hlbGxTZXJ2aWNlcyA9ICgpID0+IG9TaGVsbFNlcnZpY2U7XG5cdFx0XHRyZXR1cm4gb1NoZWxsU2VydmljZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaGVsbFNlcnZpY2VzRmFjdG9yeTtcbiJdfQ==
|
|
836
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNoZWxsU2VydmljZXNGYWN0b3J5LnRzIl0sIm5hbWVzIjpbIlNoZWxsU2VydmljZU1vY2siLCJpbml0IiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImluc3RhbmNlVHlwZSIsImdldExpbmtzIiwiZ2V0TGlua3NXaXRoQ2FjaGUiLCJ0b0V4dGVybmFsIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJocmVmRm9yRXh0ZXJuYWxBc3luYyIsIm9BcmdzIiwib0NvbXBvbmVudCIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsImlzSW5pdGlhbE5hdmlnYXRpb24iLCJpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMiLCJleHBhbmRDb21wYWN0SGFzaCIsInBhcnNlU2hlbGxIYXNoIiwic3BsaXRIYXNoIiwiY29uc3RydWN0U2hlbGxIYXNoIiwic2V0RGlydHlGbGFnIiwicmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwiY3JlYXRlUmVuZGVyZXIiLCJnZXRVc2VyIiwiaGFzVVNoZWxsIiwicmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwidW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInNldEhpZXJhcmNoeSIsInNldFRpdGxlIiwiZ2V0Q29udGVudERlbnNpdHkiLCJkb2N1bWVudCIsImJvZHkiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldFByaW1hcnlJbnRlbnQiLCJTZXJ2aWNlIiwid3JhcEpRdWVyeVByb21pc2UiLCJqcXVlcnlQcm9taXNlIiwicmVqZWN0IiwiZG9uZSIsImZhaWwiLCJTaGVsbFNlcnZpY2VzIiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwic2NvcGVPYmplY3QiLCJvU2hlbGxDb250YWluZXIiLCJzZXR0aW5ncyIsInNoZWxsQ29udGFpbmVyIiwibGlua3NDYWNoZSIsImZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUiLCJfb0FyZ3MiLCJhQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwiYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyIsImkiLCJsZW5ndGgiLCJzZW1hbnRpY09iamVjdCIsInB1c2giLCJsaW5rcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJvbGRBcmdzIiwibmV3QXJncyIsImNhY2hlZExpbmtzIiwicmVzb2x2ZUZuIiwicmVqZWN0Rm4iLCJvQ3Jvc3NBcHBOYXZTZXJ2aWNlUHJvbWlzZSIsImdldFNlcnZpY2VBc3luYyIsIm9VcmxQYXJzaW5nU2VydmljZVByb21pc2UiLCJvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxVSVNlcnZpY2VQcm9taXNlIiwiZ2V0U2VydmljZSIsImFsbCIsInRoZW4iLCJvQ3Jvc3NBcHBOYXZTZXJ2aWNlIiwib1VybFBhcnNpbmdTZXJ2aWNlIiwib1NoZWxsTmF2aWdhdGlvbiIsIm9TaGVsbFVJU2VydmljZSIsImNyb3NzQXBwTmF2U2VydmljZSIsInVybFBhcnNpbmdTZXJ2aWNlIiwic2hlbGxOYXZpZ2F0aW9uIiwic2hlbGxVSVNlcnZpY2UiLCJjYXRjaCIsIm9FcnJvciIsIkVycm9yIiwib0NhY2hlUmVzdWx0cyIsImFMaW5rcyIsIm9TZW1hbnRpY09iamVjdHNMaW5rcyIsInVuZGVmaW5lZCIsImFzc2lnbiIsImFNZXJnZWRMaW5rcyIsImoiLCJrIiwiZ2V0U2hlbGxDb250YWluZXIiLCJvTmF2QXJndW1lbnRzQXJyIiwiYkFzeW5jIiwic0FwcFN0YXRlS2V5Iiwic0hhc2hGcmFnbWVudCIsInNIYXNoIiwib05ld1NoZWxsSGFzaCIsImJEaXJ0eSIsImZuRGlydHlTdGF0ZVByb3ZpZGVyIiwiZm5OYXZGaWx0ZXIiLCJmbkNhbGxCYWNrIiwiYUhpZXJhcmNoeUxldmVscyIsInNUaXRsZSIsInNTZW1hbnRpY09iamVjdCIsIm1QYXJhbWV0ZXJzIiwiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsIm9TaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwiU2VydmljZUZhY3RvcnkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUNNQSxnQjs7Ozs7Ozs7O1dBSUxDLEksR0FBQSxnQkFBTztBQUNOLFdBQUtDLFdBQUwsR0FBbUJDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFuQjtBQUNBLFdBQUtDLFlBQUwsR0FBb0IsTUFBcEI7QUFDQSxLOztXQUVEQyxRLEdBQUE7QUFBUztBQUFULGVBQTRCO0FBQzNCLGFBQU9ILE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0EsSzs7V0FFREcsaUIsR0FBQTtBQUFrQjtBQUFsQix3QkFBcUM7QUFDcEMsYUFBT0osT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDQSxLOztXQUVESSxVLEdBQUE7QUFBVztBQUFYLGlCQUFvRTtBQUNuRTtBQUNBLEs7O1dBRURDLGtCLEdBQUE7QUFBbUI7QUFBbkIseUJBQXNDO0FBQ3JDLGFBQU9OLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFQO0FBQ0EsSzs7V0FFRE0saUIsR0FBQSw2QkFBb0I7QUFDbkI7QUFDQSxLOztXQUVEQyxlLEdBQUE7QUFBZ0I7QUFBaEIsc0JBQTJFO0FBQzFFLGFBQU8sRUFBUDtBQUNBLEs7O1dBRURDLG9CLEdBQUEsOEJBQXFCQyxLQUFyQixFQUFxQ0MsVUFBckMsRUFBMEQ7QUFDekQsYUFBT1gsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDQSxLOztXQUVEVyxXLEdBQUE7QUFBWTtBQUFaLGtCQUEwRDtBQUN6RCxhQUFPWixP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LElBQWVELEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFwRTtBQUNBLFVBQU1DLGFBQWEsR0FBR0osZUFBZSxDQUFDaEUsUUFBaEIsQ0FBeUJDLGNBQXpCLEdBQ25CLElBQUlOLGFBQUosQ0FBa0JxRSxlQUFsQixDQURtQixHQUVuQixJQUFJcEgsZ0JBQUosQ0FBcUJvSCxlQUFyQixDQUZIO0FBR0EsYUFBT0ksYUFBYSxDQUFDdEgsV0FBZCxDQUEwQjZFLElBQTFCLENBQStCLFlBQU07QUFDM0M7QUFDQ3FDLFFBQUFBLGVBQWUsQ0FBQ2xFLFdBQWpCLENBQXFDdUUsZ0JBQXJDLEdBQXdEO0FBQUEsaUJBQU1ELGFBQU47QUFBQSxTQUF4RDs7QUFDQSxlQUFPQSxhQUFQO0FBQ0EsT0FKTSxDQUFQO0FBS0EsSzs7O0lBbEJpQ0UsYzs7U0FxQnBCUixvQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBDb250YWluZXIgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvQ29udGFpbmVyXCI7XG5pbXBvcnQgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cIjtcbmltcG9ydCBTaGVsbE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvU2hlbGxOYXZpZ2F0aW9uXCI7XG5pbXBvcnQgVVJMUGFyc2luZyBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9VUkxQYXJzaW5nXCI7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzIHtcblx0aW5pdFByb21pc2U6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXHRpbnN0YW5jZVR5cGU6IHN0cmluZztcblx0Y3Jvc3NBcHBOYXZTZXJ2aWNlPzogQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb247XG5cdGdldExpbmtzKG9BcmdzOiBvYmplY3QpOiBQcm9taXNlPGFueT47XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M6IG9iamVjdCk6IFByb21pc2U8YW55W10+O1xuXG5cdHRvRXh0ZXJuYWwob05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0KTogdm9pZDtcblxuXHRnZXRTdGFydHVwQXBwU3RhdGUob0FyZ3M6IG9iamVjdCk6IFByb21pc2U8YW55PjtcblxuXHRiYWNrVG9QcmV2aW91c0FwcCgpOiB2b2lkO1xuXG5cdGhyZWZGb3JFeHRlcm5hbChvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbik6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcblxuXHRocmVmRm9yRXh0ZXJuYWxBc3luYyhvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCk6IFByb21pc2U8YW55PjtcblxuXHRnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuXG5cdGNyZWF0ZUVtcHR5QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50KTogb2JqZWN0O1xuXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTxhbnk+O1xuXG5cdGlzSW5pdGlhbE5hdmlnYXRpb24oKTogYm9vbGVhbjtcblxuXHRpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMoKTogUHJvbWlzZTxhbnk+O1xuXG5cdGV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQ6IHN0cmluZyk6IGFueTtcblxuXHRwYXJzZVNoZWxsSGFzaChzSGFzaDogc3RyaW5nKTogYW55O1xuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogb2JqZWN0O1xuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmc7XG5cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbik6IHZvaWQ7XG5cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0Y3JlYXRlUmVuZGVyZXIoKTogb2JqZWN0O1xuXG5cdGdldFVzZXIoKTogYW55O1xuXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuO1xuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0c2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjaz86IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0Pik6IHZvaWQ7XG5cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkO1xuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZztcblxuXHRnZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCk6IFByb21pc2U8YW55Pjtcbn1cblxuLyoqXG4gKiBNb2NrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGVsbFNlcnZpY2UgZm9yIE9wZW5GRVxuICpcbiAqIEBpbXBsZW1lbnRzIHtJU2hlbGxTZXJ2aWNlc31cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZU1vY2sgZXh0ZW5kcyBTZXJ2aWNlPFNoZWxsU2VydmljZXNTZXR0aW5ncz4gaW1wbGVtZW50cyBJU2hlbGxTZXJ2aWNlcyB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRpbnN0YW5jZVR5cGUhOiBzdHJpbmc7XG5cblx0aW5pdCgpIHtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuXHRcdHRoaXMuaW5zdGFuY2VUeXBlID0gXCJtb2NrXCI7XG5cdH1cblxuXHRnZXRMaW5rcygvKm9BcmdzOiBvYmplY3QqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUoLypvQXJnczogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdHRvRXh0ZXJuYWwoLypvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QqLykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZSgvKm9BcmdzOiBvYmplY3QqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblxuXHRiYWNrVG9QcmV2aW91c0FwcCgpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRocmVmRm9yRXh0ZXJuYWwoLypvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbiovKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRocmVmRm9yRXh0ZXJuYWxBc3luYyhvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0Z2V0QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QsIHNBcHBTdGF0ZUtleTogc3RyaW5nKi8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNyZWF0ZUVtcHR5QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0aXNOYXZpZ2F0aW9uU3VwcG9ydGVkKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGlzSW5pdGlhbE5hdmlnYXRpb24oKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aXNJbml0aWFsTmF2aWdhdGlvbkFzeW5jKCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0ZXhwYW5kQ29tcGFjdEhhc2goLypzSGFzaEZyYWdtZW50OiBzdHJpbmcqLykge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0cGFyc2VTaGVsbEhhc2goLypzSGFzaDogc3RyaW5nKi8pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRzcGxpdEhhc2goLypzSGFzaDogc3RyaW5nKi8pIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaCgvKm9OZXdTaGVsbEhhc2g6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRzZXREaXJ0eUZsYWcoLypiRGlydHk6IGJvb2xlYW4qLykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjcmVhdGVSZW5kZXJlcigpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRnZXRVc2VyKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGhhc1VTaGVsbCgpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoLypmbk5hdkZpbHRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKC8qZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzZXRCYWNrTmF2aWdhdGlvbigvKmZuQ2FsbEJhY2s/OiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2V0SGllcmFyY2h5KC8qYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0PiovKTogdm9pZCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2V0VGl0bGUoLypzVGl0bGU6IHN0cmluZyovKTogdm9pZCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nIHtcblx0XHQvLyBpbiBjYXNlIHRoZXJlIGlzIG5vIHNoZWxsIHdlIHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgY2xhc3NlcyBiZWluZyBkZWZpbmVkIG9uIHRoZSBib2R5XG5cdFx0aWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2FwVWlTaXplQ296eVwiKSkge1xuXHRcdFx0cmV0dXJuIFwiY296eVwiO1xuXHRcdH0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb21wYWN0XCIpKSB7XG5cdFx0XHRyZXR1cm4gXCJjb21wYWN0XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdGdldFByaW1hcnlJbnRlbnQoLypzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBvYmplY3QqLyk6IFByb21pc2U8YW55PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgU2hlbGxTZXJ2aWNlc1NldHRpbmdzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgdHlwZSBTaGVsbFNlcnZpY2VzU2V0dGluZ3MgPSB7XG5cdHNoZWxsQ29udGFpbmVyPzogQ29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBXcmFwIGEgSlF1ZXJ5IFByb21pc2Ugd2l0aGluIGEgbmF0aXZlIHtQcm9taXNlfS5cbiAqXG4gKiBAdGVtcGxhdGUge29iamVjdH0gVFxuICogQHBhcmFtIHtqUXVlcnkuUHJvbWlzZTxUPn0ganF1ZXJ5UHJvbWlzZSBUaGUgb3JpZ2luYWwganF1ZXJ5IHByb21pc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSBBIG5hdGl2ZSBwcm9taXNlIHdyYXBwaW5nIHRoZSBzYW1lIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gd3JhcEpRdWVyeVByb21pc2U8VD4oanF1ZXJ5UHJvbWlzZTogalF1ZXJ5LlByb21pc2UpOiBQcm9taXNlPFQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9jYXRjaC1vci1yZXR1cm5cblx0XHRqcXVlcnlQcm9taXNlLmRvbmUocmVzb2x2ZSBhcyBhbnkpLmZhaWwocmVqZWN0KTtcblx0fSk7XG59XG5cbi8qKlxuICogQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2hlbGxTZXJ2aWNlc1xuICpcbiAqIEBpbXBsZW1lbnRzIHtJU2hlbGxTZXJ2aWNlc31cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZXMgZXh0ZW5kcyBTZXJ2aWNlPFJlcXVpcmVkPFNoZWxsU2VydmljZXNTZXR0aW5ncz4+IGltcGxlbWVudHMgSVNoZWxsU2VydmljZXMge1xuXHRyZXNvbHZlRm46IGFueTtcblx0cmVqZWN0Rm46IGFueTtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPGFueT47XG5cdC8vICE6IG1lYW5zIHRoYXQgd2Uga25vdyBpdCB3aWxsIGJlIGFzc2lnbmVkIGJlZm9yZSB1c2FnZVxuXHRjcm9zc0FwcE5hdlNlcnZpY2UhOiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbjtcblx0dXJsUGFyc2luZ1NlcnZpY2UhOiBVUkxQYXJzaW5nO1xuXHRzaGVsbE5hdmlnYXRpb24hOiBTaGVsbE5hdmlnYXRpb247XG5cdG9TaGVsbENvbnRhaW5lciE6IENvbnRhaW5lcjtcblx0c2hlbGxVSVNlcnZpY2UhOiBhbnk7XG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblx0bGlua3NDYWNoZSE6IGFueTtcblx0Zm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZTogYW55O1xuXG5cdGluaXQoKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3QgYXMgYW55O1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyID0gb0NvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXI7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcInJlYWxcIjtcblx0XHR0aGlzLmxpbmtzQ2FjaGUgPSB7fTtcblx0XHR0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUgPSBmdW5jdGlvbiAob0FyZ3M6IGFueSk6IG9iamVjdCB7XG5cdFx0XHRjb25zdCBfb0FyZ3M6IGFueSA9IG9BcmdzO1xuXHRcdFx0Y29uc3QgYUNhY2hlZFNlbWFudGljT2JqZWN0cyA9IFtdO1xuXHRcdFx0Y29uc3QgYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyA9IFtdO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBfb0FyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKCEhX29BcmdzW2ldWzBdICYmICEhX29BcmdzW2ldWzBdLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMubGlua3NDYWNoZVtfb0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdKSB7XG5cdFx0XHRcdFx0XHRhQ2FjaGVkU2VtYW50aWNPYmplY3RzLnB1c2godGhpcy5saW5rc0NhY2hlW19vQXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9BcmdzW2ldWzBdLCBcImxpbmtzXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHRoaXMubGlua3NDYWNoZVtfb0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdLmxpbmtzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cy5wdXNoKF9vQXJnc1tpXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geyBvbGRBcmdzOiBvQXJncywgbmV3QXJnczogYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cywgY2FjaGVkTGlua3M6IGFDYWNoZWRTZW1hbnRpY09iamVjdHMgfTtcblx0XHR9O1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnJlc29sdmVGbiA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnJlamVjdEZuID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9Dcm9zc0FwcE5hdlNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cIik7XG5cdFx0Y29uc3Qgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVSTFBhcnNpbmdcIik7XG5cdFx0Y29uc3Qgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiU2hlbGxOYXZpZ2F0aW9uXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFVJU2VydmljZVByb21pc2UgPSBvQ29tcG9uZW50LmdldFNlcnZpY2UoXCJTaGVsbFVJU2VydmljZVwiKTtcblx0XHRQcm9taXNlLmFsbChbb0Nyb3NzQXBwTmF2U2VydmljZVByb21pc2UsIG9VcmxQYXJzaW5nU2VydmljZVByb21pc2UsIG9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSwgb1NoZWxsVUlTZXJ2aWNlUHJvbWlzZV0pXG5cdFx0XHQudGhlbigoW29Dcm9zc0FwcE5hdlNlcnZpY2UsIG9VcmxQYXJzaW5nU2VydmljZSwgb1NoZWxsTmF2aWdhdGlvbiwgb1NoZWxsVUlTZXJ2aWNlXSkgPT4ge1xuXHRcdFx0XHR0aGlzLmNyb3NzQXBwTmF2U2VydmljZSA9IG9Dcm9zc0FwcE5hdlNlcnZpY2U7XG5cdFx0XHRcdHRoaXMudXJsUGFyc2luZ1NlcnZpY2UgPSBvVXJsUGFyc2luZ1NlcnZpY2U7XG5cdFx0XHRcdHRoaXMuc2hlbGxOYXZpZ2F0aW9uID0gb1NoZWxsTmF2aWdhdGlvbjtcblx0XHRcdFx0dGhpcy5zaGVsbFVJU2VydmljZSA9IG9TaGVsbFVJU2VydmljZTtcblx0XHRcdFx0dGhpcy5yZXNvbHZlRm4oKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb25cblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0TGlua3MgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gdGFyZ2V0IGxpbmtzIGFycmF5XG5cdCAqL1xuXHRnZXRMaW5rcyhvQXJnczogb2JqZWN0KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0dGhpcy5jcm9zc0FwcE5hdlNlcnZpY2Vcblx0XHRcdFx0LmdldExpbmtzKG9BcmdzKVxuXHRcdFx0XHQuZmFpbCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKG9FcnJvciArIFwiIHNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeS5nZXRMaW5rc1wiKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKHJlc29sdmUpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IGxpbmtzIGNvbmZpZ3VyZWQgZm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0ICYgYWN0aW9uIGluIGNhY2hlXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldExpbmtzIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldExpbmtzIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M6IG9iamVjdCk6IFByb21pc2U8YW55W10+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0XHRpZiAoKG9BcmdzIGFzIE9iamVjdFtdKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmVzb2x2ZShbXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvQ2FjaGVSZXN1bHRzID0gdGhpcy5mbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlKG9BcmdzKTtcblxuXHRcdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5uZXdBcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHJlc29sdmUob0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0XHRcdFx0dGhpcy5jcm9zc0FwcE5hdlNlcnZpY2Vcblx0XHRcdFx0XHRcdC5nZXRMaW5rcyhvQ2FjaGVSZXN1bHRzLm5ld0FyZ3MpXG5cdFx0XHRcdFx0XHQuZmFpbCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihvRXJyb3IgKyBcIiBzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkuZ2V0TGlua3NXaXRoQ2FjaGVcIikpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50aGVuKChhTGlua3M6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNMaW5rczogYW55ID0ge307XG5cblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFMaW5rc1tpXS5sZW5ndGggPiAwICYmIG9DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5saW5rcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdHNMaW5rc1tvQ2FjaGVSZXN1bHRzLm5ld0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxpbmtzOiBhTGlua3NbaV1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5saW5rc0NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLmxpbmtzQ2FjaGUsIG9TZW1hbnRpY09iamVjdHNMaW5rcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKG9DYWNoZVJlc3VsdHMuY2FjaGVkTGlua3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShhTGlua3MpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFNZXJnZWRMaW5rcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblxuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgb0NhY2hlUmVzdWx0cy5vbGRBcmdzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaiA8IGFMaW5rcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFMaW5rc1tqXS5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NhY2hlUmVzdWx0cy5vbGRBcmdzW2tdWzBdLnNlbWFudGljT2JqZWN0ID09PSBvQ2FjaGVSZXN1bHRzLm5ld0FyZ3Nbal1bMF0uc2VtYW50aWNPYmplY3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goYUxpbmtzW2pdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2gob0NhY2hlUmVzdWx0cy5vbGRBcmdzW2tdWzBdLmxpbmtzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2gob0NhY2hlUmVzdWx0cy5vbGRBcmdzW2tdWzBdLmxpbmtzKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShhTWVyZ2VkTGlua3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIFNoZWxsQ29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogc2FwLnVzaGVsbC5jb250YWluZXJcblx0ICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IHdpdGggcHJlZGVmaW5lZCBzaGVsbENvbnRhaW5lciBtZXRob2RzXG5cdCAqL1xuXHRnZXRTaGVsbENvbnRhaW5lcigpIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXI7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHRvRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBOYXZpZ2F0aW9uIEFyZ3VtZW50cyBhbmQgb0NvbXBvbmVudC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7QXJyYXl9IG9OYXZBcmd1bWVudHNBcnIgQW5kXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PnRvRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmNyb3NzQXBwTmF2U2VydmljZS50b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IHN0YXJ0dXBBcHBTdGF0ZVxuXHQgKiBXaWxsIGNoZWNrIHRoZSBleGlzdGFuY2Ugb2YgdGhlIFNoZWxsQ29udGFpbmVyIGFuZCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0U3RhcnR1cEFwcFN0YXRlIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldFN0YXJ0dXBBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBPYmplY3Rcblx0ICovXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZShvQXJnczogQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdC8vIEpRdWVyeSBQcm9taXNlIGJlaGF2ZXMgZGlmZmVyZW50bHlcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0KHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlIGFzIGFueSlcblx0XHRcdFx0LmdldFN0YXJ0dXBBcHBTdGF0ZShvQXJncylcblx0XHRcdFx0LmZhaWwoKG9FcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihvRXJyb3IgKyBcIiBzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnkuZ2V0U3RhcnR1cEFwcFN0YXRlXCIpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4ocmVzb2x2ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGJhY2tUb1ByZXZpb3VzQXBwIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRiYWNrVG9QcmV2aW91c0FwcCgpIHtcblx0XHRyZXR1cm4gdGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaHJlZkZvckV4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIHtib29sZWFufSBiQXN5bmMgV2hldGhlciB0aGlzIGNhbGwgc2hvdWxkIGJlIGFzeW5jIG9yIG5vdFxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5ocmVmRm9yRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBzdHJpbmdcblx0ICovXG5cdGhyZWZGb3JFeHRlcm5hbChvQXJnczogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlLmhyZWZGb3JFeHRlcm5hbChvQXJncywgb0NvbXBvbmVudCBhcyBvYmplY3QsICEhYkFzeW5jKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaHJlZkZvckV4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+aHJlZkZvckV4dGVybmFsQXN5bmMgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBzdHJpbmdcblx0ICovXG5cdGhyZWZGb3JFeHRlcm5hbEFzeW5jKG9BcmdzOiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpIHtcblx0XHRyZXR1cm4gdGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaHJlZkZvckV4dGVybmFsQXN5bmMob0FyZ3MsIG9Db21wb25lbnQgYXMgb2JqZWN0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0QXBwU3RhdGUgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50IGFuZCBvQXBwU3RhdGVLZXkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbXBvbmVudFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0FwcFN0YXRlS2V5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0Z2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZykge1xuXHRcdHJldHVybiB3cmFwSlF1ZXJ5UHJvbWlzZSgodGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UgYXMgYW55KS5nZXRBcHBTdGF0ZShvQ29tcG9uZW50LCBzQXBwU3RhdGVLZXkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY3JlYXRlRW1wdHlBcHBTdGF0ZSBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5jcmVhdGVFbXB0eUFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpIHtcblx0XHRyZXR1cm4gKHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlIGFzIGFueSkuY3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge0FycmF5fSBvTmF2QXJndW1lbnRzQXJyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmlzTmF2aWdhdGlvblN1cHBvcnRlZCBhcmd1bWVudHNcblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QpIHtcblx0XHRyZXR1cm4gd3JhcEpRdWVyeVByb21pc2UodGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNJbml0aWFsTmF2aWdhdGlvbiBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gYm9vbGVhblxuXHQgKi9cblx0aXNJbml0aWFsTmF2aWdhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaXNJbml0aWFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIGJvb2xlYW5cblx0ICovXG5cdGlzSW5pdGlhbE5hdmlnYXRpb25Bc3luYygpIHtcblx0XHRyZXR1cm4gdGhpcy5jcm9zc0FwcE5hdlNlcnZpY2UuaXNJbml0aWFsTmF2aWdhdGlvbkFzeW5jKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGV4cGFuZENvbXBhY3RIYXNoIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0hhc2hGcmFnbWVudCBBbiAoaW50ZXJuYWwgZm9ybWF0KSBzaGVsbCBoYXNoXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBBIHByb21pc2UgdGhlIHN1Y2Nlc3MgaGFuZGxlciBvZiB0aGUgcmVzb2x2ZSBwcm9taXNlIGdldCBhbiBleHBhbmRlZCBzaGVsbCBoYXNoIGFzIGZpcnN0IGFyZ3VtZW50XG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0ZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3Jvc3NBcHBOYXZTZXJ2aWNlLmV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBwYXJzZVNoZWxsSGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5wYXJzZVNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMge29iamVjdH1cblx0ICovXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVNoZWxsSGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNwbGl0SGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5zcGxpdEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLnNwbGl0SGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNvbnN0cnVjdFNoZWxsSGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb05ld1NoZWxsSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PmNvbnN0cnVjdFNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMge3N0cmluZ30gU2hlbGwgSGFzaCBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5jb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldERpcnR5RmxhZyBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRpcnR5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnNldERpcnR5RmxhZyBhcmd1bWVudHNcblx0ICovXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5zZXREaXJ0eUZsYWcoYkRpcnR5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgYXJndW1lbnRzXG5cdCAqL1xuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24pIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBhcmd1bWVudHNcblx0ICovXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKSB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNyZWF0ZVJlbmRlcmVyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHJldHVybnMge29iamVjdH0gUmV0dXJucyByZW5kZXJlciBvYmplY3Rcblx0ICovXG5cdGNyZWF0ZVJlbmRlcmVyKCkge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5jcmVhdGVSZW5kZXJlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRVc2VyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHJldHVybnMge29iamVjdH0gUmV0dXJucyBVc2VyIG9iamVjdFxuXHQgKi9cblx0Z2V0VXNlcigpIHtcblx0XHRyZXR1cm4gKHRoaXMub1NoZWxsQ29udGFpbmVyIGFzIGFueSkuZ2V0VXNlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2hlY2sgaWYgdXNoZWxsIGNvbnRhaW5lciBpcyBhdmFpbGFibGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZVxuXHQgKi9cblx0aGFzVVNoZWxsKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCByZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byByZWdpc3RlclxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKSB7XG5cdFx0KHRoaXMuc2hlbGxOYXZpZ2F0aW9uIGFzIGFueSkucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgdW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbikge1xuXHRcdCh0aGlzLnNoZWxsTmF2aWdhdGlvbiBhcyBhbnkpLnVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0QmFja05hdmlnYXRpb24gbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGJhY2sgYnV0dG9uIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbkNhbGxCYWNrXSBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCBpbiB0aGUgVUkuXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdHNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2s/OiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEhpZXJhcmNoeSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gaGllcmFyY2h5IGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0W119IFthSGllcmFyY2h5TGV2ZWxzXSBBbiBhcnJheSByZXByZXNlbnRpbmcgaGllcmFyY2hpZXMgb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgYXBwLlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0Pik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtzVGl0bGVdIFRoZSBuZXcgdGl0bGUuIFRoZSBkZWZhdWx0IHRpdGxlIGlzIHNldCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBnaXZlbi5cblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsVUlTZXJ2aWNlLnNldFRpdGxlKHNUaXRsZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjdXJyZW50bHkgZGVmaW5lZCBjb250ZW50IGRlbnNpdHkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb250ZW50IGRlbnNpdHkgdmFsdWVcblx0ICovXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuICgodGhpcy5vU2hlbGxDb250YWluZXIgYXMgYW55KS5nZXRVc2VyKCkgYXMgYW55KS5nZXRDb250ZW50RGVuc2l0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvciBhIGdpdmVuIHNlbWFudGljIG9iamVjdCwgdGhpcyBtZXRob2QgY29uc2lkZXJzIGFsbCBhY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VtYW50aWMgb2JqZWN0IGFuZFxuXHQgKiByZXR1cm5zIHRoZSBvbmUgdGFnZ2VkIGFzIGEgXCJwcmltYXJ5QWN0aW9uXCIuIElmIG5vIGluYm91bmQgdGFnZ2VkIGFzIFwicHJpbWFyeUFjdGlvblwiIGV4aXN0cywgdGhlbiBpdCByZXR1cm5zXG5cdCAqIHRoZSBpbnRlbnQgb2YgdGhlIGZpcnN0IGluYm91bmQgKGFmdGVyIHNvcnRpbmcgaGFzIGJlZW4gYXBwbGllZCkgbWF0Y2hpbmcgdGhlIGFjdGlvbiBcImRpc3BsYXlGYWN0U2hlZXRcIi5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzU2VtYW50aWNPYmplY3QgU2VtYW50aWMgb2JqZWN0LlxuXHQgKiBAcGFyYW0ge29iamVjdH0gbVBhcmFtZXRlcnMgU2VlICNDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiNnZXRMaW5rcyBmb3IgZGVzY3JpcHRpb24uXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW50ZW50IGlmIGl0IGV4aXN0cy5cblx0ICovXG5cdGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxhbnk+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvY2F0Y2gtb3ItcmV0dXJuXG5cdFx0XHR0aGlzLmNyb3NzQXBwTmF2U2VydmljZVxuXHRcdFx0XHQuZ2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3QsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQuZmFpbCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKG9FcnJvciArIFwiIHNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeS5nZXRQcmltYXJ5SW50ZW50XCIpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4ocmVzb2x2ZSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIEZhY3RvcnkgZm9yIHRoZSBTaGVsbFNlcnZpY2VzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlc0ZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgZWl0aGVyIGEgc3RhbmRhcmQgb3IgYSBtb2NrIFNoZWxsIHNlcnZpY2UgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1NlcnZpY2VDb250ZXh0PFNoZWxsU2VydmljZXNTZXR0aW5ncz59IG9TZXJ2aWNlQ29udGV4dCBUaGUgc2hlbGxzZXJ2aWNlIGNvbnRleHRcblx0ICogQHJldHVybnMge1Byb21pc2U8SVNoZWxsU2VydmljZXM+fSBBIHByb21pc2UgZm9yIGEgc2hlbGwgc2VydmljZSBpbXBsZW1lbnRhdGlvblxuXHQgKiBAc2VlIFNlcnZpY2VGYWN0b3J5I2NyZWF0ZUluc3RhbmNlXG5cdCAqL1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFNoZWxsU2VydmljZXNTZXR0aW5ncz4pOiBQcm9taXNlPElTaGVsbFNlcnZpY2VzPiB7XG5cdFx0b1NlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyID0gc2FwLnVzaGVsbCAmJiAoc2FwLnVzaGVsbC5Db250YWluZXIgYXMgQ29udGFpbmVyKTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlID0gb1NlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyXG5cdFx0XHQ/IG5ldyBTaGVsbFNlcnZpY2VzKG9TZXJ2aWNlQ29udGV4dCBhcyBTZXJ2aWNlQ29udGV4dDxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+Pilcblx0XHRcdDogbmV3IFNoZWxsU2VydmljZU1vY2sob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gb1NoZWxsU2VydmljZS5pbml0UHJvbWlzZS50aGVuKCgpID0+IHtcblx0XHRcdC8vIEVucmljaCB0aGUgYXBwQ29tcG9uZW50IHdpdGggdGhpcyBtZXRob2Rcblx0XHRcdChvU2VydmljZUNvbnRleHQuc2NvcGVPYmplY3QgYXMgYW55KS5nZXRTaGVsbFNlcnZpY2VzID0gKCkgPT4gb1NoZWxsU2VydmljZTtcblx0XHRcdHJldHVybiBvU2hlbGxTZXJ2aWNlO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoZWxsU2VydmljZXNGYWN0b3J5O1xuIl19
|