@sapui5/sap.fe.core 1.101.0 → 1.103.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 +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +66 -30
- package/src/sap/fe/core/AppComponent.ts +68 -51
- package/src/sap/fe/core/AppStateHandler.js +13 -13
- package/src/sap/fe/core/AppStateHandler.ts +18 -18
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +279 -188
- package/src/sap/fe/core/CommonUtils.ts +306 -215
- package/src/sap/fe/core/ExtensionAPI.js +25 -30
- package/src/sap/fe/core/ExtensionAPI.ts +37 -41
- package/src/sap/fe/core/PageController.js +12 -7
- package/src/sap/fe/core/PageController.ts +10 -5
- package/src/sap/fe/core/TemplateComponent.js +6 -6
- package/src/sap/fe/core/TemplateComponent.ts +11 -11
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +306 -78
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +280 -70
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- 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 +351 -229
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +321 -246
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +59 -34
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -45
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +72 -72
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +82 -80
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +152 -131
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +171 -152
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +11 -10
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +31 -37
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +30 -15
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +19 -11
- package/src/sap/fe/core/controllerextensions/Paginator.ts +22 -14
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +39 -21
- package/src/sap/fe/core/controllerextensions/Share.ts +45 -26
- package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -62
- package/src/sap/fe/core/controllerextensions/ViewState.js +75 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +99 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +58 -112
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +7 -7
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +262 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +20 -21
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1631 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +270 -211
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +772 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +240 -100
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1199 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +364 -229
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +188 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +185 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +626 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +112 -69
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +937 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +72 -73
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +21 -24
- package/src/sap/fe/core/controls/CommandExecution.ts +19 -24
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +48 -43
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +51 -46
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +19 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +14 -8
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +50 -3
- package/src/sap/fe/core/controls/FileWrapper.ts +45 -12
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
- package/src/sap/fe/core/controls/FormElementWrapper.ts +14 -3
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +41 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +48 -48
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +71 -76
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +36 -65
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +551 -36
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +605 -36
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -14
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +56 -67
- package/src/sap/fe/core/converters/MetaModelConverter.ts +183 -193
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +73 -37
- package/src/sap/fe/core/converters/annotations/DataField.ts +121 -77
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +51 -49
- package/src/sap/fe/core/converters/controls/Common/Action.ts +58 -54
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -15
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +29 -27
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +30 -34
- package/src/sap/fe/core/converters/controls/Common/Form.ts +48 -58
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +318 -244
- package/src/sap/fe/core/converters/controls/Common/Table.ts +368 -297
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +135 -125
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +162 -148
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +51 -45
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +79 -67
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +92 -89
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +124 -120
- package/src/sap/fe/core/converters/helpers/Aggregation.js +11 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +25 -23
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -30
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +31 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +56 -55
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +65 -77
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -6
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +10 -8
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +83 -22
- package/src/sap/fe/core/formatters/TableFormatter.ts +80 -25
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/fpm/Component.js +2 -2
- package/src/sap/fe/core/fpm/Component.ts +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +388 -285
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +15 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +10 -9
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +532 -264
- package/src/sap/fe/core/helpers/MassEditHelper.ts +560 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +50 -58
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +16 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +20 -16
- 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 +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +51 -3
- package/src/sap/fe/core/library.ts +47 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +151 -197
- package/src/sap/fe/core/messagebundle_ar.properties +36 -63
- package/src/sap/fe/core/messagebundle_bg.properties +36 -63
- package/src/sap/fe/core/messagebundle_ca.properties +36 -63
- package/src/sap/fe/core/messagebundle_cs.properties +36 -63
- package/src/sap/fe/core/messagebundle_cy.properties +36 -63
- package/src/sap/fe/core/messagebundle_da.properties +37 -64
- package/src/sap/fe/core/messagebundle_de.properties +36 -63
- package/src/sap/fe/core/messagebundle_el.properties +38 -65
- package/src/sap/fe/core/messagebundle_en.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_GB.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +44 -73
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +52 -81
- package/src/sap/fe/core/messagebundle_es.properties +36 -63
- package/src/sap/fe/core/messagebundle_es_MX.properties +36 -63
- package/src/sap/fe/core/messagebundle_et.properties +36 -63
- package/src/sap/fe/core/messagebundle_fi.properties +36 -63
- package/src/sap/fe/core/messagebundle_fr.properties +39 -66
- package/src/sap/fe/core/messagebundle_fr_CA.properties +36 -63
- package/src/sap/fe/core/messagebundle_hi.properties +36 -63
- package/src/sap/fe/core/messagebundle_hr.properties +36 -63
- package/src/sap/fe/core/messagebundle_hu.properties +35 -62
- package/src/sap/fe/core/messagebundle_id.properties +37 -64
- package/src/sap/fe/core/messagebundle_it.properties +54 -81
- package/src/sap/fe/core/messagebundle_iw.properties +36 -63
- package/src/sap/fe/core/messagebundle_ja.properties +36 -63
- package/src/sap/fe/core/messagebundle_kk.properties +36 -63
- package/src/sap/fe/core/messagebundle_ko.properties +36 -63
- package/src/sap/fe/core/messagebundle_lt.properties +36 -63
- package/src/sap/fe/core/messagebundle_lv.properties +36 -63
- package/src/sap/fe/core/messagebundle_ms.properties +37 -64
- package/src/sap/fe/core/messagebundle_nl.properties +37 -64
- package/src/sap/fe/core/messagebundle_no.properties +36 -63
- package/src/sap/fe/core/messagebundle_pl.properties +37 -64
- package/src/sap/fe/core/messagebundle_pt.properties +37 -64
- package/src/sap/fe/core/messagebundle_pt_PT.properties +36 -63
- package/src/sap/fe/core/messagebundle_ro.properties +36 -63
- package/src/sap/fe/core/messagebundle_ru.properties +36 -63
- package/src/sap/fe/core/messagebundle_sh.properties +36 -63
- package/src/sap/fe/core/messagebundle_sk.properties +36 -63
- package/src/sap/fe/core/messagebundle_sl.properties +38 -65
- package/src/sap/fe/core/messagebundle_sv.properties +36 -63
- package/src/sap/fe/core/messagebundle_th.properties +36 -63
- package/src/sap/fe/core/messagebundle_tr.properties +36 -63
- package/src/sap/fe/core/messagebundle_uk.properties +37 -64
- package/src/sap/fe/core/messagebundle_vi.properties +37 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +36 -63
- package/src/sap/fe/core/messagebundle_zh_TW.properties +37 -64
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +12 -10
- package/src/sap/fe/core/services/NavigationServiceFactory.js +54 -45
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +61 -49
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +63 -60
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +76 -73
- package/src/sap/fe/core/services/ShellServicesFactory.js +102 -71
- package/src/sap/fe/core/services/ShellServicesFactory.ts +109 -78
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +24 -18
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +53 -50
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +3 -4
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -15
- package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -18
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +12 -11
- package/src/sap/fe/core/templating/FilterHelper.ts +17 -16
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +79 -56
- package/src/sap/fe/core/templating/PropertyHelper.ts +41 -27
- package/src/sap/fe/core/templating/UIFormatters.js +163 -97
- package/src/sap/fe/core/templating/UIFormatters.ts +210 -129
- 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 +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/AnnotationHelper.js +0 -331
- package/src/sap/fe/core/AnnotationHelper.ts +0 -321
- package/src/sap/fe/core/RouterProxy.js +0 -938
- package/src/sap/fe/core/TransactionHelper.js +0 -1577
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
- package/src/sap/fe/core/actions/collaboration/Manage.js +0 -264
- package/src/sap/fe/core/actions/draft.js +0 -665
- package/src/sap/fe/core/actions/messageHandling.js +0 -579
- 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/actions/sticky.ts +0 -119
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1729
|
@@ -2,29 +2,536 @@
|
|
|
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([], function () {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ModelHelper", "sap/fe/macros/internal/valuehelp/ValueListHelper", "sap/ui/core/Core"], function (Log, ModelHelper, ValueListHelper, Core) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* Constructor for a new Visual Filter Container.
|
|
10
|
-
* Used for visual filters
|
|
11
|
-
*
|
|
12
|
-
* @param {string} [sId] ID for the new control, generated automatically if no ID is given
|
|
13
|
-
* @extends sap.ui.mdc.filterbar.IFilterContainer
|
|
14
|
-
* @class
|
|
15
|
-
* @private
|
|
16
|
-
* @alias sap.fe.core.controls.filterbar.VisualFilterContainer
|
|
17
|
-
*/
|
|
18
8
|
var MassEditHandlers = {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Called for property change in the transient context.
|
|
11
|
+
*
|
|
12
|
+
* @function
|
|
13
|
+
* @param newValue New value of the property.
|
|
14
|
+
* @param dataProperty Final context returned after the paginator action
|
|
15
|
+
* @param mdcFieldId Final context returned after the paginator action
|
|
16
|
+
*/
|
|
17
|
+
contextPropertyChange: function (newValue, dataProperty, mdcFieldId) {
|
|
18
|
+
// Called for
|
|
19
|
+
// 1. Out Parameters.
|
|
20
|
+
// 2. Transient context property change.
|
|
21
|
+
var source = Core.byId(mdcFieldId);
|
|
22
|
+
var transCtx = source && source.getBindingContext();
|
|
23
|
+
var fieldInfoModel = source && source.getModel("fieldsInfo");
|
|
24
|
+
var values = fieldInfoModel.getProperty("/values/".concat(dataProperty)) || fieldInfoModel.getProperty("/unitData/".concat(dataProperty)) || [];
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
if (transCtx && (values.inputType === "InputWithValueHelp" || values.inputType === "InputWithUnit") && !values.valueListInfo) {
|
|
27
|
+
MassEditHandlers._setValueListInfo(transCtx, source, fieldInfoModel, dataProperty);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var isDialogOpen = fieldInfoModel && fieldInfoModel.getProperty("/isOpen");
|
|
31
|
+
|
|
32
|
+
if (!isDialogOpen || !source.getVisible()) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
MassEditHandlers._updateSelectKey(source, dataProperty, newValue);
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Called for change in the MDC field.
|
|
41
|
+
* This is called on selection done through VHD.
|
|
42
|
+
* This is not called on change of the dropdown as we are using a custom MassEditSelect control and not general Select.
|
|
43
|
+
*
|
|
44
|
+
* @function
|
|
45
|
+
* @param event Event object for change.
|
|
46
|
+
* @param propertyName Property path.
|
|
47
|
+
*/
|
|
48
|
+
handleMDCFieldChange: function (event, propertyName) {
|
|
49
|
+
// Called for
|
|
50
|
+
// 1. VHD property change.
|
|
51
|
+
var source = event && event.getSource();
|
|
52
|
+
var changePromise = event && event.getParameter("promise");
|
|
53
|
+
var comboBox = source.getContent();
|
|
54
|
+
|
|
55
|
+
if (!comboBox || !propertyName) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
changePromise.then(MassEditHandlers._updateSelectKeyForMDCFieldChange.bind(MassEditHandlers, source, propertyName)).catch(function (err) {
|
|
60
|
+
Log.warning("VHD selection couldn't be populated in the mass edit field.".concat(err));
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Called for selection change through the drop down.
|
|
66
|
+
*
|
|
67
|
+
* @function
|
|
68
|
+
* @param event Event object for change.
|
|
69
|
+
*/
|
|
70
|
+
handleSelectionChange: function (event) {
|
|
71
|
+
// Called for Manual selection from dropdown(comboBox or select)
|
|
72
|
+
// 1. VHD select.
|
|
73
|
+
// 2. Any value change in the control.
|
|
74
|
+
var source = event && event.getSource();
|
|
75
|
+
var key = source.getSelectedKey();
|
|
76
|
+
var params = source && key && key.split("/");
|
|
77
|
+
var propertyName;
|
|
78
|
+
|
|
79
|
+
if (params[0] === "UseValueHelpValue") {
|
|
80
|
+
var prevItem = event.getParameter("previousSelectedItem");
|
|
81
|
+
var selectKey = prevItem.getKey();
|
|
82
|
+
propertyName = params.slice(1).join("/");
|
|
83
|
+
|
|
84
|
+
MassEditHandlers._onVHSelect(source, propertyName, selectKey);
|
|
85
|
+
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
var fieldInfoModel = source && source.getModel("fieldsInfo");
|
|
90
|
+
propertyName = MassEditHandlers._getPropertyNameFromKey(key);
|
|
91
|
+
|
|
92
|
+
MassEditHandlers._updateSuggestionForFieldsWithInParameters(fieldInfoModel, propertyName, key.startsWith("Default/") || key.startsWith("ClearFieldValue/"), true);
|
|
93
|
+
|
|
94
|
+
MassEditHandlers._updateSuggestionForFieldsWithOutParameters(fieldInfoModel, propertyName, key.startsWith("Default/") || key.startsWith("ClearFieldValue/"), false);
|
|
95
|
+
|
|
96
|
+
MassEditHandlers._updateResults(source, params, true);
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Update selections to results and the suggests in drop downs.
|
|
101
|
+
*
|
|
102
|
+
* @function
|
|
103
|
+
* @param source MDC field that was changed.
|
|
104
|
+
* @param propertyName Property path.
|
|
105
|
+
* @param value New value.
|
|
106
|
+
*/
|
|
107
|
+
_updateSelectKeyForMDCFieldChange: function (source, propertyName, value) {
|
|
108
|
+
var transCtx = source && source.getBindingContext();
|
|
109
|
+
var fieldInfoModel = source && source.getModel("fieldsInfo");
|
|
110
|
+
var values = fieldInfoModel.getProperty("/values/".concat(propertyName)) || fieldInfoModel.getProperty("/unitData/".concat(propertyName)) || [];
|
|
111
|
+
|
|
112
|
+
if (transCtx && (values.inputType === "InputWithValueHelp" || values.inputType === "InputWithUnit") && !values.valueListInfo) {
|
|
113
|
+
MassEditHandlers._setValueListInfo(transCtx, source, fieldInfoModel, propertyName);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
MassEditHandlers._updateSuggestionForFieldsWithOutParameters(fieldInfoModel, propertyName, false, true);
|
|
117
|
+
|
|
118
|
+
MassEditHandlers._updateSuggestionForFieldsWithInParameters(fieldInfoModel, propertyName, false, true);
|
|
119
|
+
|
|
120
|
+
var formattedValue = source.getFormFormattedValue();
|
|
121
|
+
|
|
122
|
+
MassEditHandlers._updateSelectKey(source, propertyName, value, formattedValue);
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Update suggests for all drop downs with InParameter as the propertyName.
|
|
127
|
+
*
|
|
128
|
+
* @function
|
|
129
|
+
* @param fieldInfoModel Runtime model with parameters store information.
|
|
130
|
+
* @param propertyName Property path.
|
|
131
|
+
* @param resetValues Should the values be reset to original state.
|
|
132
|
+
* @param keepExistingSelection Should the existing selection before update remain.
|
|
133
|
+
*/
|
|
134
|
+
_updateSuggestionForFieldsWithInParameters: function (fieldInfoModel, propertyName, resetValues, keepExistingSelection) {
|
|
135
|
+
var values = fieldInfoModel.getProperty("/values");
|
|
136
|
+
var unitData = fieldInfoModel.getProperty("/unitData");
|
|
137
|
+
var fieldPaths = Object.keys(values);
|
|
138
|
+
var unitFieldPaths = Object.keys(unitData);
|
|
139
|
+
fieldPaths.forEach(MassEditHandlers._updateInParameterSuggetions.bind(MassEditHandlers, fieldInfoModel, "/values/", propertyName, resetValues, keepExistingSelection));
|
|
140
|
+
unitFieldPaths.forEach(MassEditHandlers._updateInParameterSuggetions.bind(MassEditHandlers, fieldInfoModel, "/unitData/", propertyName, resetValues, keepExistingSelection));
|
|
141
|
+
},
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Update suggests for a drop down with InParameter as the srcPropertyName.
|
|
145
|
+
*
|
|
146
|
+
* @function
|
|
147
|
+
* @param fieldInfoModel Runtime model with parameters store information.
|
|
148
|
+
* @param pathPrefix Path in the runtime model.
|
|
149
|
+
* @param srcPropertyName The InParameter Property path.
|
|
150
|
+
* @param resetValues Should the values be reset to original state.
|
|
151
|
+
* @param keepExistingSelection Should the existing selection before update remain.
|
|
152
|
+
* @param propertyName Property path that needs update of suggestions.
|
|
153
|
+
*/
|
|
154
|
+
_updateInParameterSuggetions: function (fieldInfoModel, pathPrefix, srcPropertyName, resetValues, keepExistingSelection, propertyName) {
|
|
155
|
+
var valueListInfo = fieldInfoModel.getProperty("".concat(pathPrefix + propertyName, "/valueListInfo"));
|
|
156
|
+
|
|
157
|
+
if (valueListInfo && srcPropertyName != propertyName) {
|
|
158
|
+
var inParameters = valueListInfo.inParameters;
|
|
159
|
+
|
|
160
|
+
if (inParameters && inParameters.length > 0 && inParameters.includes(srcPropertyName)) {
|
|
161
|
+
MassEditHandlers._updateFieldPathSuggestions(fieldInfoModel, pathPrefix + propertyName, resetValues, keepExistingSelection);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Update suggests for all OutParameter's drop downs of the propertyName.
|
|
168
|
+
*
|
|
169
|
+
* @function
|
|
170
|
+
* @param fieldInfoModel Runtime model with parameters store information.
|
|
171
|
+
* @param propertyName Property path.
|
|
172
|
+
* @param resetValues Should the values be reset to original state.
|
|
173
|
+
* @param keepExistingSelection Should the existing selection before update remain.
|
|
174
|
+
*/
|
|
175
|
+
_updateSuggestionForFieldsWithOutParameters: function (fieldInfoModel, propertyName, resetValues, keepExistingSelection) {
|
|
176
|
+
var valueListInfo = fieldInfoModel.getProperty("/values/".concat(propertyName, "/valueListInfo")) || fieldInfoModel.getProperty("/unitData/".concat(propertyName, "/valueListInfo"));
|
|
177
|
+
|
|
178
|
+
if (valueListInfo && valueListInfo.outParameters) {
|
|
179
|
+
var outParameters = valueListInfo.outParameters;
|
|
180
|
+
|
|
181
|
+
if (outParameters.length && outParameters.length > 0) {
|
|
182
|
+
MassEditHandlers._updateOutParameterSuggetions(outParameters, fieldInfoModel, resetValues, keepExistingSelection);
|
|
183
|
+
|
|
184
|
+
var pathPrefix = fieldInfoModel.getProperty("/values/".concat(propertyName)) && "/values/".concat(propertyName) || fieldInfoModel.getProperty("/unitData/".concat(propertyName)) && "/unitData/".concat(propertyName);
|
|
185
|
+
|
|
186
|
+
if (pathPrefix) {
|
|
187
|
+
MassEditHandlers._updateFieldPathSuggestions(fieldInfoModel, pathPrefix, false, true);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Update suggests for a drop down with InParameter as the srcPropertyName.
|
|
195
|
+
*
|
|
196
|
+
* @function
|
|
197
|
+
* @param outParameters String arrary of OutParameter property paths.
|
|
198
|
+
* @param fieldInfoModel Runtime model with parameters store information.
|
|
199
|
+
* @param resetValues Should the values be reset to original state.
|
|
200
|
+
* @param keepExistingSelection Should the existing selection before update remain.
|
|
201
|
+
*/
|
|
202
|
+
_updateOutParameterSuggetions: function (outParameters, fieldInfoModel, resetValues, keepExistingSelection) {
|
|
203
|
+
var values = fieldInfoModel.getProperty("/values");
|
|
204
|
+
var unitData = fieldInfoModel.getProperty("/unitData");
|
|
205
|
+
var fieldPaths = Object.keys(values);
|
|
206
|
+
var unitFieldPaths = Object.keys(unitData);
|
|
207
|
+
outParameters.forEach(function (outParameter) {
|
|
208
|
+
if (fieldPaths.includes(outParameter)) {
|
|
209
|
+
MassEditHandlers._updateFieldPathSuggestions(fieldInfoModel, "/values/".concat(outParameter), resetValues, keepExistingSelection);
|
|
210
|
+
} else if (unitFieldPaths.includes(outParameter)) {
|
|
211
|
+
MassEditHandlers._updateFieldPathSuggestions(fieldInfoModel, "/unitData/".concat(outParameter), resetValues, keepExistingSelection);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
},
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Update suggests for a drop down of a field.
|
|
218
|
+
*
|
|
219
|
+
* @function
|
|
220
|
+
* @param fieldInfoModel Runtime model with parameters store information.
|
|
221
|
+
* @param fieldPathAbsolute Complete runtime property path.
|
|
222
|
+
* @param resetValues Should the values be reset to original state.
|
|
223
|
+
* @param keepExistingSelection Should the existing selection before update remain.
|
|
224
|
+
*/
|
|
225
|
+
_updateFieldPathSuggestions: function (fieldInfoModel, fieldPathAbsolute, resetValues, keepExistingSelection) {
|
|
226
|
+
var options = fieldInfoModel.getProperty(fieldPathAbsolute);
|
|
227
|
+
var defaultOptions = options.defaultOptions;
|
|
228
|
+
var selectedKey = fieldInfoModel.getProperty("".concat(fieldPathAbsolute, "/selectedKey"));
|
|
229
|
+
var existingSelection = keepExistingSelection && options.find(function (option) {
|
|
230
|
+
return option.key === selectedKey;
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
if (resetValues) {
|
|
234
|
+
var selectOptions = options.selectOptions;
|
|
235
|
+
options.length = 0;
|
|
236
|
+
defaultOptions.forEach(function (defaultOption) {
|
|
237
|
+
return options.push(defaultOption);
|
|
238
|
+
});
|
|
239
|
+
selectOptions.forEach(function (selectOption) {
|
|
240
|
+
return options.push(selectOption);
|
|
241
|
+
});
|
|
242
|
+
} else {
|
|
243
|
+
options.length = 0;
|
|
244
|
+
defaultOptions.forEach(function (defaultOption) {
|
|
245
|
+
return options.push(defaultOption);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
fieldInfoModel.setProperty(fieldPathAbsolute, options);
|
|
250
|
+
|
|
251
|
+
if (existingSelection && !options.includes(existingSelection)) {
|
|
252
|
+
options.push(existingSelection);
|
|
253
|
+
fieldInfoModel.setProperty("".concat(fieldPathAbsolute, "/selectedKey"), selectedKey);
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Update In and Out Parameters in the MED.
|
|
259
|
+
*
|
|
260
|
+
* @function
|
|
261
|
+
* @param transCtx The transient context of the MED.
|
|
262
|
+
* @param source MDC field.
|
|
263
|
+
* @param fieldInfoModel Runtime model with parameters store information.
|
|
264
|
+
* @param propertyName Property path.
|
|
265
|
+
*/
|
|
266
|
+
_setValueListInfo: function (transCtx, source, fieldInfoModel, propertyName) {
|
|
267
|
+
var propPath = fieldInfoModel.getProperty("/values/".concat(propertyName)) && "/values/" || fieldInfoModel.getProperty("/unitData/".concat(propertyName)) && "/unitData/";
|
|
268
|
+
|
|
269
|
+
if (fieldInfoModel.getProperty("".concat(propPath).concat(propertyName, "/valueListInfo"))) {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
var fieldValueHelp = MassEditHandlers._getValueHelp(transCtx, source);
|
|
274
|
+
|
|
275
|
+
if (fieldValueHelp && fieldValueHelp.getDialogContent().getTable()) {
|
|
276
|
+
var inParameters = (fieldValueHelp.getInParameters() || []).map(function (inParam) {
|
|
277
|
+
return inParam.getFieldPath();
|
|
278
|
+
});
|
|
279
|
+
var outParameters = (fieldValueHelp.getInParameters() || []).map(function (outParam) {
|
|
280
|
+
return outParam.getFieldPath();
|
|
281
|
+
});
|
|
282
|
+
var info = {
|
|
283
|
+
inParameters: inParameters.map(function (inParam) {
|
|
284
|
+
return inParam.getFieldPath();
|
|
285
|
+
}),
|
|
286
|
+
outParameters: outParameters.map(function (outParam) {
|
|
287
|
+
return outParam.getFieldPath();
|
|
288
|
+
})
|
|
289
|
+
};
|
|
290
|
+
fieldInfoModel.setProperty("".concat(propPath).concat(propertyName, "/valueListInfo"), info);
|
|
291
|
+
|
|
292
|
+
if (info.outParameters.length > 0) {
|
|
293
|
+
MassEditHandlers._updateFieldPathSuggestions(fieldInfoModel, "/values/".concat(propertyName), false, true);
|
|
294
|
+
}
|
|
295
|
+
} else {
|
|
296
|
+
MassEditHandlers._requestValueList(transCtx, source, fieldInfoModel, propertyName);
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Request and update In and Out Parameters in the MED.
|
|
302
|
+
*
|
|
303
|
+
* @function
|
|
304
|
+
* @param transCtx The transient context of the MED.
|
|
305
|
+
* @param source MDC field.
|
|
306
|
+
* @param fieldInfoModel Runtime model with parameters store information.
|
|
307
|
+
* @param propertyName Property path.
|
|
308
|
+
*/
|
|
309
|
+
_requestValueList: function (transCtx, source, fieldInfoModel, propertyName) {
|
|
310
|
+
var metaPath = ModelHelper.getMetaPathForContext(transCtx);
|
|
311
|
+
var propertyPath = metaPath && "".concat(metaPath, "/").concat(propertyName);
|
|
312
|
+
var dependents = source === null || source === void 0 ? void 0 : source.getDependents();
|
|
313
|
+
var fieldHelp = source === null || source === void 0 ? void 0 : source.getFieldHelp();
|
|
314
|
+
var fieldValueHelp = dependents === null || dependents === void 0 ? void 0 : dependents.find(function (dependent) {
|
|
315
|
+
return dependent.getId() === fieldHelp;
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
if (!(fieldValueHelp !== null && fieldValueHelp !== void 0 && fieldValueHelp.getBindingContext())) {
|
|
319
|
+
fieldValueHelp === null || fieldValueHelp === void 0 ? void 0 : fieldValueHelp.setBindingContext(transCtx);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
var metaModel = transCtx.getModel().getMetaModel();
|
|
323
|
+
ValueListHelper.createVHUIModel(propertyPath, fieldValueHelp);
|
|
324
|
+
var valueListInfo = ValueListHelper.getValueListInfo(fieldValueHelp, metaModel, propertyPath);
|
|
325
|
+
valueListInfo.then(function (vLinfo) {
|
|
326
|
+
var propPath = fieldInfoModel.getProperty("/values/".concat(propertyName)) && "/values/" || fieldInfoModel.getProperty("/unitData/".concat(propertyName)) && "/unitData/";
|
|
327
|
+
var info = {
|
|
328
|
+
inParameters: vLinfo.inParameters.map(function (inParam) {
|
|
329
|
+
return inParam.getFieldPath();
|
|
330
|
+
}),
|
|
331
|
+
outParameters: vLinfo.outParameters.map(function (outParam) {
|
|
332
|
+
return outParam.getFieldPath();
|
|
333
|
+
})
|
|
334
|
+
};
|
|
335
|
+
fieldInfoModel.setProperty("".concat(propPath).concat(propertyName, "/valueListInfo"), info);
|
|
336
|
+
|
|
337
|
+
if (info.outParameters.length > 0) {
|
|
338
|
+
MassEditHandlers._updateFieldPathSuggestions(fieldInfoModel, "/values/".concat(propertyName), false, true);
|
|
339
|
+
}
|
|
340
|
+
}).catch(function () {
|
|
341
|
+
Log.warning("Mass Edit: Couldn't load valueList info for ".concat(propertyPath));
|
|
342
|
+
});
|
|
343
|
+
},
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Get field help control from MDC field.
|
|
347
|
+
*
|
|
348
|
+
* @function
|
|
349
|
+
* @param transCtx The transient context of the MED.
|
|
350
|
+
* @param source MDC field.
|
|
351
|
+
* @returns Field Help control.
|
|
352
|
+
*/
|
|
353
|
+
_getValueHelp: function (transCtx, source) {
|
|
354
|
+
var dependents = source === null || source === void 0 ? void 0 : source.getDependents();
|
|
355
|
+
var fieldHelp = source === null || source === void 0 ? void 0 : source.getFieldHelp();
|
|
356
|
+
return dependents === null || dependents === void 0 ? void 0 : dependents.find(function (dependent) {
|
|
357
|
+
return dependent.getId() === fieldHelp;
|
|
358
|
+
});
|
|
359
|
+
},
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Colled on drop down selection of VHD option.
|
|
363
|
+
*
|
|
364
|
+
* @function
|
|
365
|
+
* @param source Custom Mass Edit Select control.
|
|
366
|
+
* @param propertyName Property path.
|
|
367
|
+
* @param selectKey Previous key before the VHD was selected.
|
|
368
|
+
*/
|
|
369
|
+
_onVHSelect: function (source, propertyName, selectKey) {
|
|
370
|
+
// Called for
|
|
371
|
+
// 1. VHD selected.
|
|
372
|
+
var fieldInfoModel = source && source.getModel("fieldsInfo");
|
|
373
|
+
var propPath = fieldInfoModel.getProperty("/values/".concat(propertyName)) && "/values/" || fieldInfoModel.getProperty("/unitData/".concat(propertyName)) && "/unitData/";
|
|
374
|
+
var transCtx = source.getBindingContext();
|
|
375
|
+
|
|
376
|
+
var fieldValueHelp = MassEditHandlers._getValueHelp(transCtx, source.getParent());
|
|
377
|
+
|
|
378
|
+
if (!(fieldValueHelp !== null && fieldValueHelp !== void 0 && fieldValueHelp.getBindingContext())) {
|
|
379
|
+
fieldValueHelp === null || fieldValueHelp === void 0 ? void 0 : fieldValueHelp.setBindingContext(transCtx);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
source.fireValueHelpRequest();
|
|
383
|
+
fieldInfoModel.setProperty("".concat(propPath + propertyName, "/selectedKey"), selectKey);
|
|
384
|
+
},
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Gets Property name from selection key.
|
|
388
|
+
*
|
|
389
|
+
* @function
|
|
390
|
+
* @param key Selection key.
|
|
391
|
+
* @returns Property name.
|
|
392
|
+
*/
|
|
393
|
+
_getPropertyNameFromKey: function (key) {
|
|
394
|
+
var propertyName = "";
|
|
395
|
+
|
|
396
|
+
if (key.startsWith("Default/") || key.startsWith("ClearFieldValue/") || key.startsWith("UseValueHelpValue/")) {
|
|
397
|
+
propertyName = key.substring(key.indexOf("/") + 1);
|
|
398
|
+
} else {
|
|
399
|
+
propertyName = key.substring(0, key.lastIndexOf("/"));
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
return propertyName;
|
|
403
|
+
},
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Update selection to Custom Mass Edit Select from MDC field.
|
|
407
|
+
*
|
|
408
|
+
* @function
|
|
409
|
+
* @param source MDC field.
|
|
410
|
+
* @param propertyName Property path.
|
|
411
|
+
* @param value Value to update.
|
|
412
|
+
* @param fullText Full text to use.
|
|
413
|
+
*/
|
|
414
|
+
_updateSelectKey: function (source, propertyName, value, fullText) {
|
|
415
|
+
// Called for
|
|
416
|
+
// 1. VHD property change
|
|
417
|
+
// 2. Out Parameters.
|
|
418
|
+
// 3. Transient context property change.
|
|
419
|
+
var comboBox = source.getContent();
|
|
420
|
+
|
|
421
|
+
if (!comboBox || !propertyName) {
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
var key = comboBox.getSelectedKey();
|
|
426
|
+
|
|
427
|
+
if ((key.startsWith("Default/") || key.startsWith("ClearFieldValue/")) && !value) {
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
var formattedText = MassEditHandlers._valueExists(fullText) ? fullText : value;
|
|
432
|
+
var fieldInfoModel = source && source.getModel("fieldsInfo");
|
|
433
|
+
var values = fieldInfoModel.getProperty("/values/".concat(propertyName)) || fieldInfoModel.getProperty("/unitData/".concat(propertyName)) || [];
|
|
434
|
+
var propPath = fieldInfoModel.getProperty("/values/".concat(propertyName)) && "/values/" || fieldInfoModel.getProperty("/unitData/".concat(propertyName)) && "/unitData/";
|
|
435
|
+
var relatedField = values.find(function (fieldData) {
|
|
436
|
+
var _fieldData$textInfo;
|
|
437
|
+
|
|
438
|
+
return (fieldData === null || fieldData === void 0 ? void 0 : (_fieldData$textInfo = fieldData.textInfo) === null || _fieldData$textInfo === void 0 ? void 0 : _fieldData$textInfo.value) === value || fieldData.text === value;
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
if (relatedField) {
|
|
442
|
+
if (fullText && relatedField.textInfo && relatedField.textInfo.descriptionPath && (relatedField.text != formattedText || relatedField.textInfo.fullText != formattedText)) {
|
|
443
|
+
// Update the full text only when provided.
|
|
444
|
+
relatedField.text = formattedText;
|
|
445
|
+
relatedField.textInfo.fullText = formattedText;
|
|
446
|
+
relatedField.textInfo.description = source.getAdditionalValue();
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
if (relatedField.key === key) {
|
|
450
|
+
fieldInfoModel.setProperty("".concat(propPath + propertyName, "/selectedKey"), key);
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
key = relatedField.key;
|
|
455
|
+
} else if ([undefined, null, ""].indexOf(value) === -1) {
|
|
456
|
+
key = "".concat(propertyName, "/").concat(value);
|
|
457
|
+
var selectionInfo = {
|
|
458
|
+
text: formattedText,
|
|
459
|
+
key: key,
|
|
460
|
+
textInfo: {
|
|
461
|
+
description: source.getAdditionalValue(),
|
|
462
|
+
descriptionPath: values && values.textInfo && values.textInfo.descriptionPath,
|
|
463
|
+
fullText: formattedText,
|
|
464
|
+
textArrangement: source.getDisplay(),
|
|
465
|
+
value: source.getValue(),
|
|
466
|
+
valuePath: propertyName
|
|
467
|
+
}
|
|
468
|
+
};
|
|
469
|
+
values.push(selectionInfo);
|
|
470
|
+
values.selectOptions = values.selectOptions || [];
|
|
471
|
+
values.selectOptions.push(selectionInfo);
|
|
472
|
+
fieldInfoModel.setProperty(propPath + propertyName, values);
|
|
473
|
+
} else {
|
|
474
|
+
key = "Default/".concat(propertyName);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
fieldInfoModel.setProperty("".concat(propPath + propertyName, "/selectedKey"), key);
|
|
478
|
+
|
|
479
|
+
MassEditHandlers._updateResults(comboBox);
|
|
480
|
+
},
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Get Value from Drop down.
|
|
484
|
+
*
|
|
485
|
+
* @function
|
|
486
|
+
* @param source Drop down control.
|
|
487
|
+
* @returns Value of selection.
|
|
488
|
+
*/
|
|
489
|
+
_getValue: function (source) {
|
|
490
|
+
var _getSelectedItem;
|
|
491
|
+
|
|
492
|
+
return source.getMetadata().getName() === "sap.fe.core.controls.MassEditSelect" ? (_getSelectedItem = source.getSelectedItem()) === null || _getSelectedItem === void 0 ? void 0 : _getSelectedItem.getText() : source.getValue();
|
|
493
|
+
},
|
|
494
|
+
_getValueOnEmpty: function (oSource, fieldsInfoModel, value, sPropertyName) {
|
|
495
|
+
if (!value) {
|
|
496
|
+
var values = fieldsInfoModel.getProperty("/values/".concat(sPropertyName)) || fieldsInfoModel.getProperty("/unitData/".concat(sPropertyName)) || [];
|
|
497
|
+
|
|
498
|
+
if (values.unitProperty) {
|
|
499
|
+
value = 0;
|
|
500
|
+
oSource.setValue(value);
|
|
501
|
+
} else if (values.inputType === "CheckBox") {
|
|
502
|
+
value = false;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
return value;
|
|
507
|
+
},
|
|
508
|
+
_valueExists: function (value) {
|
|
509
|
+
return value != undefined && value != null;
|
|
510
|
+
},
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Updates selections to runtime model.
|
|
514
|
+
*
|
|
515
|
+
* @function
|
|
516
|
+
* @param oSource Drop down control.
|
|
517
|
+
* @param aParams Parts of key in runtime model.
|
|
518
|
+
* @param updateTransCtx Should transient context be updated with the value.
|
|
519
|
+
*/
|
|
520
|
+
_updateResults: function (oSource) {
|
|
521
|
+
var aParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
522
|
+
var updateTransCtx = arguments.length > 2 ? arguments[2] : undefined;
|
|
523
|
+
// Called for
|
|
524
|
+
// 1. VHD property change.
|
|
525
|
+
// 2. Out parameter.
|
|
526
|
+
// 3. transient context property change.
|
|
527
|
+
var fieldsInfoModel = oSource && oSource.getModel("fieldsInfo");
|
|
528
|
+
var oFieldsInfoData = fieldsInfoModel && fieldsInfoModel.getData();
|
|
529
|
+
|
|
530
|
+
var value = MassEditHandlers._getValue(oSource);
|
|
531
|
+
|
|
532
|
+
aParams = aParams.length > 0 ? aParams : oSource && oSource.getSelectedKey() && oSource.getSelectedKey().split("/");
|
|
533
|
+
var oDataObject;
|
|
534
|
+
var sPropertyName = oSource.getId().substring(oSource.getId().lastIndexOf(":") + 1);
|
|
28
535
|
|
|
29
536
|
if (aParams[0] === "Default") {
|
|
30
537
|
oDataObject = {
|
|
@@ -32,31 +539,29 @@ sap.ui.define([], function () {
|
|
|
32
539
|
value: aParams[0]
|
|
33
540
|
};
|
|
34
541
|
} else if (aParams[0] === "ClearFieldValue") {
|
|
542
|
+
value = "";
|
|
543
|
+
value = MassEditHandlers._getValueOnEmpty(oSource, fieldsInfoModel, value, sPropertyName);
|
|
35
544
|
oDataObject = {
|
|
36
545
|
keyValue: aParams[1],
|
|
37
|
-
value:
|
|
546
|
+
value: value
|
|
38
547
|
};
|
|
39
548
|
} else if (!aParams) {
|
|
40
|
-
|
|
549
|
+
value = MassEditHandlers._getValueOnEmpty(oSource, fieldsInfoModel, value, sPropertyName);
|
|
41
550
|
oDataObject = {
|
|
42
551
|
keyValue: sPropertyName,
|
|
43
|
-
value:
|
|
552
|
+
value: value
|
|
44
553
|
};
|
|
45
554
|
} else {
|
|
46
|
-
var
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return typeof data.text === "boolean" && data.text === Boolean(oSource.getValue());
|
|
555
|
+
var propertyName = aParams.slice(0, -1).join("/");
|
|
556
|
+
var propertyValues = fieldsInfoModel.getProperty("/values/".concat(propertyName)) || fieldsInfoModel.getProperty("/unitData/".concat(propertyName)) || [];
|
|
557
|
+
var relatedField = (propertyValues || []).find(function (oFieldData) {
|
|
558
|
+
var _oFieldData$textInfo;
|
|
559
|
+
|
|
560
|
+
return (oFieldData === null || oFieldData === void 0 ? void 0 : (_oFieldData$textInfo = oFieldData.textInfo) === null || _oFieldData$textInfo === void 0 ? void 0 : _oFieldData$textInfo.value) === value || oFieldData.text === value;
|
|
53
561
|
});
|
|
54
|
-
oDataObject =
|
|
55
|
-
keyValue:
|
|
56
|
-
value:
|
|
57
|
-
} : {
|
|
58
|
-
keyValue: aParams[0],
|
|
59
|
-
value: iValueIndex !== -1 ? oFieldsInfoData.values[aParams[0]][iValueIndex].text : oSource.getValue()
|
|
562
|
+
oDataObject = {
|
|
563
|
+
keyValue: propertyName,
|
|
564
|
+
value: relatedField.textInfo && MassEditHandlers._valueExists(relatedField.textInfo.value) ? relatedField.textInfo.value : relatedField.text
|
|
60
565
|
};
|
|
61
566
|
}
|
|
62
567
|
|
|
@@ -73,8 +578,18 @@ sap.ui.define([], function () {
|
|
|
73
578
|
} else {
|
|
74
579
|
oFieldsInfoData.results.push(oDataObject);
|
|
75
580
|
}
|
|
581
|
+
|
|
582
|
+
if (updateTransCtx && !oDataObject.keyValue.includes("/")) {
|
|
583
|
+
var transCtx = oSource.getBindingContext();
|
|
584
|
+
|
|
585
|
+
if (aParams[0] === "Default" || aParams[0] === "ClearFieldValue") {
|
|
586
|
+
transCtx.setProperty(oDataObject.keyValue, null);
|
|
587
|
+
} else if (oDataObject) {
|
|
588
|
+
transCtx.setProperty(oDataObject.keyValue, oDataObject.value);
|
|
589
|
+
}
|
|
590
|
+
}
|
|
76
591
|
}
|
|
77
592
|
};
|
|
78
593
|
return MassEditHandlers;
|
|
79
594
|
}, false);
|
|
80
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hc3NFZGl0SGFuZGxlcnMudHMiXSwibmFtZXMiOlsiTWFzc0VkaXRIYW5kbGVycyIsImhhbmRsZU1hc3NFZGl0Q2hhbmdlIiwib0V2ZW50Iiwib1NvdXJjZSIsImdldFNvdXJjZSIsImFQYXJhbXMiLCJnZXRTZWxlY3RlZEtleSIsInNwbGl0Iiwib0ZpZWxkc0luZm9EYXRhIiwiZ2V0TW9kZWwiLCJnZXREYXRhIiwib0RhdGFPYmplY3QiLCJrZXlWYWx1ZSIsInZhbHVlIiwic1Byb3BlcnR5TmFtZSIsImdldElkIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJnZXRWYWx1ZSIsImFSZWxhdGVkRmllbGQiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJvRmllbGREYXRhIiwidGV4dCIsInVuaXREYXRhIiwiaVZhbHVlSW5kZXgiLCJmaW5kSW5kZXgiLCJkYXRhIiwiQm9vbGVhbiIsInRleHRJbmZvIiwiYkV4aXN0aW5nRWxlbWVudGluZGV4IiwiaSIsInJlc3VsdHMiLCJsZW5ndGgiLCJwdXNoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQSxnQkFBZ0IsR0FBRztBQUN4QkMsSUFBQUEsb0JBQW9CLEVBQUUsVUFBVUMsTUFBVixFQUF1QjtBQUM1QyxVQUFNQyxPQUFPLEdBQUdELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxTQUFQLEVBQTFCO0FBQ0EsVUFBTUMsT0FBTyxHQUFHRixPQUFPLElBQUlBLE9BQU8sQ0FBQ0csY0FBUixFQUFYLElBQXVDSCxPQUFPLENBQUNHLGNBQVIsR0FBeUJDLEtBQXpCLENBQStCLEdBQS9CLENBQXZEO0FBQ0EsVUFBTUMsZUFBZSxHQUFHTCxPQUFPLElBQUlBLE9BQU8sQ0FBQ00sUUFBUixDQUFpQixZQUFqQixFQUErQkMsT0FBL0IsRUFBbkM7QUFDQSxVQUFJQyxXQUFKLENBSjRDLENBSzVDOztBQUNBO0FBQ0Y7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QTlCLEVBQW1Db0IsV0FBbkMsRUFBZ0RGLElBQXJFLEdBQTRFcEIsT0FBTyxDQUFDZSxRQUFSO0FBRm5GLFNBSEo7QUFPQTs7QUFDRCxVQUFJWSxxQkFBcUIsR0FBRyxDQUFDLENBQTdCOztBQUNBLFdBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3ZCLGVBQWUsQ0FBQ3dCLE9BQWhCLENBQXdCQyxNQUE1QyxFQUFvREYsQ0FBQyxFQUFyRCxFQUF5RDtBQUN4RCxZQUFJdkIsZUFBZSxDQUFDd0IsT0FBaEIsQ0FBd0JELENBQXhCLEVBQTJCbkIsUUFBM0IsS0FBd0NELFdBQVcsQ0FBQ0MsUUFBeEQsRUFBa0U7QUFDakVrQixVQUFBQSxxQkFBcUIsR0FBR0MsQ0FBeEI7QUFDQTtBQUNEOztBQUNELFVBQUlELHFCQUFxQixLQUFLLENBQUMsQ0FBL0IsRUFBa0M7QUFDakN0QixRQUFBQSxlQUFlLENBQUN3QixPQUFoQixDQUF3QkYscUJBQXhCLElBQWlEbkIsV0FBakQ7QUFDQSxPQUZELE1BRU87QUFDTkgsUUFBQUEsZUFBZSxDQUFDd0IsT0FBaEIsQ0FBd0JFLElBQXhCLENBQTZCdkIsV0FBN0I7QUFDQTtBQUNEO0FBekR1QixHQUF6QjtTQTREZVgsZ0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uc3RydWN0b3IgZm9yIGEgbmV3IFZpc3VhbCBGaWx0ZXIgQ29udGFpbmVyLlxuICogVXNlZCBmb3IgdmlzdWFsIGZpbHRlcnNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NJZF0gSUQgZm9yIHRoZSBuZXcgY29udHJvbCwgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgaWYgbm8gSUQgaXMgZ2l2ZW5cbiAqIEBleHRlbmRzIHNhcC51aS5tZGMuZmlsdGVyYmFyLklGaWx0ZXJDb250YWluZXJcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9scy5maWx0ZXJiYXIuVmlzdWFsRmlsdGVyQ29udGFpbmVyXG4gKi9cbmNvbnN0IE1hc3NFZGl0SGFuZGxlcnMgPSB7XG5cdGhhbmRsZU1hc3NFZGl0Q2hhbmdlOiBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBvU291cmNlID0gb0V2ZW50ICYmIG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBhUGFyYW1zID0gb1NvdXJjZSAmJiBvU291cmNlLmdldFNlbGVjdGVkS2V5KCkgJiYgb1NvdXJjZS5nZXRTZWxlY3RlZEtleSgpLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBvRmllbGRzSW5mb0RhdGEgPSBvU291cmNlICYmIG9Tb3VyY2UuZ2V0TW9kZWwoXCJmaWVsZHNJbmZvXCIpLmdldERhdGEoKTtcblx0XHRsZXQgb0RhdGFPYmplY3Q7XG5cdFx0Ly9UT0RPIC0gVmFsdWUgSGVscCBIYW5kbGluZyBMb2FkIFZhbHVlIEhlbHAgd2hlbiByZXNwZWN0aXZlIHZhbHVlIGlzIHNlbGVjdGVkIGluIGNvbWJvIEJveCBpbiBkaWFsb2dcblx0XHQvKlxuXHRcdFx0XHRpZiAoYVBhcmFtc1swXSA9PT0gXCJWYWx1ZUhlbHBcIikge1xuXHRcdFx0XHR9ICovXG5cdFx0aWYgKGFQYXJhbXNbMF0gPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0XHRvRGF0YU9iamVjdCA9IHsga2V5VmFsdWU6IGFQYXJhbXNbMV0sIHZhbHVlOiBhUGFyYW1zWzBdIH07XG5cdFx0fSBlbHNlIGlmIChhUGFyYW1zWzBdID09PSBcIkNsZWFyRmllbGRWYWx1ZVwiKSB7XG5cdFx0XHRvRGF0YU9iamVjdCA9IHsga2V5VmFsdWU6IGFQYXJhbXNbMV0sIHZhbHVlOiBcIlwiIH07XG5cdFx0fSBlbHNlIGlmICghYVBhcmFtcykge1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IG9Tb3VyY2UuZ2V0SWQoKS5zdWJzdHJpbmcob1NvdXJjZS5nZXRJZCgpLmxhc3RJbmRleE9mKFwiOlwiKSArIDEpO1xuXHRcdFx0b0RhdGFPYmplY3QgPSB7XG5cdFx0XHRcdGtleVZhbHVlOiBzUHJvcGVydHlOYW1lLFxuXHRcdFx0XHR2YWx1ZTogb1NvdXJjZS5nZXRWYWx1ZSgpXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBhUmVsYXRlZEZpZWxkID1cblx0XHRcdFx0YVBhcmFtc1swXSAmJlxuXHRcdFx0XHQoKG9GaWVsZHNJbmZvRGF0YS52YWx1ZXMgJiZcblx0XHRcdFx0XHRvRmllbGRzSW5mb0RhdGEudmFsdWVzW2FQYXJhbXNbMF1dICYmXG5cdFx0XHRcdFx0b0ZpZWxkc0luZm9EYXRhLnZhbHVlc1thUGFyYW1zWzBdXS5maWx0ZXIoZnVuY3Rpb24gKG9GaWVsZERhdGE6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9GaWVsZERhdGEudGV4dCA9PT0gb1NvdXJjZS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdH0pKSB8fFxuXHRcdFx0XHRcdChvRmllbGRzSW5mb0RhdGEudW5pdERhdGEgJiZcblx0XHRcdFx0XHRcdG9GaWVsZHNJbmZvRGF0YS51bml0RGF0YVthUGFyYW1zWzBdXSAmJlxuXHRcdFx0XHRcdFx0b0ZpZWxkc0luZm9EYXRhLnVuaXREYXRhW2FQYXJhbXNbMF1dLmZpbHRlcihmdW5jdGlvbiAob0ZpZWxkRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvRmllbGREYXRhLnRleHQgPT09IG9Tb3VyY2UuZ2V0VmFsdWUoKTtcblx0XHRcdFx0XHRcdH0pKSk7XG5cdFx0XHRjb25zdCBpVmFsdWVJbmRleCA9IChvRmllbGRzSW5mb0RhdGEudmFsdWVzW2FQYXJhbXNbMF1dIHx8IG9GaWVsZHNJbmZvRGF0YS51bml0RGF0YVthUGFyYW1zWzBdXSkuZmluZEluZGV4KGZ1bmN0aW9uIChcblx0XHRcdFx0ZGF0YTogYW55XG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBkYXRhLnRleHQgPT09IFwiYm9vbGVhblwiICYmIGRhdGEudGV4dCA9PT0gQm9vbGVhbihvU291cmNlLmdldFZhbHVlKCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRvRGF0YU9iamVjdCA9XG5cdFx0XHRcdGFSZWxhdGVkRmllbGQgJiYgYVJlbGF0ZWRGaWVsZFswXSAmJiBhUmVsYXRlZEZpZWxkWzBdLnRleHRJbmZvXG5cdFx0XHRcdFx0PyB7IGtleVZhbHVlOiBhUGFyYW1zWzBdLCB2YWx1ZTogYVJlbGF0ZWRGaWVsZFswXS50ZXh0SW5mby52YWx1ZSB9XG5cdFx0XHRcdFx0OiB7XG5cdFx0XHRcdFx0XHRcdGtleVZhbHVlOiBhUGFyYW1zWzBdLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogaVZhbHVlSW5kZXggIT09IC0xID8gb0ZpZWxkc0luZm9EYXRhLnZhbHVlc1thUGFyYW1zWzBdXVtpVmFsdWVJbmRleF0udGV4dCA6IG9Tb3VyY2UuZ2V0VmFsdWUoKVxuXHRcdFx0XHRcdCAgfTtcblx0XHR9XG5cdFx0bGV0IGJFeGlzdGluZ0VsZW1lbnRpbmRleCA9IC0xO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgb0ZpZWxkc0luZm9EYXRhLnJlc3VsdHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChvRmllbGRzSW5mb0RhdGEucmVzdWx0c1tpXS5rZXlWYWx1ZSA9PT0gb0RhdGFPYmplY3Qua2V5VmFsdWUpIHtcblx0XHRcdFx0YkV4aXN0aW5nRWxlbWVudGluZGV4ID0gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGJFeGlzdGluZ0VsZW1lbnRpbmRleCAhPT0gLTEpIHtcblx0XHRcdG9GaWVsZHNJbmZvRGF0YS5yZXN1bHRzW2JFeGlzdGluZ0VsZW1lbnRpbmRleF0gPSBvRGF0YU9iamVjdDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ZpZWxkc0luZm9EYXRhLnJlc3VsdHMucHVzaChvRGF0YU9iamVjdCk7XG5cdFx0fVxuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXNzRWRpdEhhbmRsZXJzO1xuIl19
|
|
595
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hc3NFZGl0SGFuZGxlcnMudHMiXSwibmFtZXMiOlsiTWFzc0VkaXRIYW5kbGVycyIsImNvbnRleHRQcm9wZXJ0eUNoYW5nZSIsIm5ld1ZhbHVlIiwiZGF0YVByb3BlcnR5IiwibWRjRmllbGRJZCIsInNvdXJjZSIsIkNvcmUiLCJieUlkIiwidHJhbnNDdHgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImZpZWxkSW5mb01vZGVsIiwiZ2V0TW9kZWwiLCJ2YWx1ZXMiLCJnZXRQcm9wZXJ0eSIsImlucHV0VHlwZSIsInZhbHVlTGlzdEluZm8iLCJfc2V0VmFsdWVMaXN0SW5mbyIsImlzRGlhbG9nT3BlbiIsImdldFZpc2libGUiLCJfdXBkYXRlU2VsZWN0S2V5IiwiaGFuZGxlTURDRmllbGRDaGFuZ2UiLCJldmVudCIsInByb3BlcnR5TmFtZSIsImdldFNvdXJjZSIsImNoYW5nZVByb21pc2UiLCJnZXRQYXJhbWV0ZXIiLCJjb21ib0JveCIsImdldENvbnRlbnQiLCJ0aGVuIiwiX3VwZGF0ZVNlbGVjdEtleUZvck1EQ0ZpZWxkQ2hhbmdlIiwiYmluZCIsImNhdGNoIiwiZXJyIiwiTG9nIiwid2FybmluZyIsImhhbmRsZVNlbGVjdGlvbkNoYW5nZSIsImtleSIsImdldFNlbGVjdGVkS2V5IiwicGFyYW1zIiwic3BsaXQiLCJwcmV2SXRlbSIsInNlbGVjdEtleSIsImdldEtleSIsInNsaWNlIiwiam9pbiIsIl9vblZIU2VsZWN0IiwiX2dldFByb3BlcnR5TmFtZUZyb21LZXkiLCJfdXBkYXRlU3VnZ2VzdGlvbkZvckZpZWxkc1dpdGhJblBhcmFtZXRlcnMiLCJzdGFydHNXaXRoIiwiX3VwZGF0ZVN1Z2dlc3Rpb25Gb3JGaWVsZHNXaXRoT3V0UGFyYW1ldGVycyIsIl91cGRhdGVSZXN1bHRzIiwidmFsdWUiLCJmb3JtYXR0ZWRWYWx1ZSIsImdldEZvcm1Gb3JtYXR0ZWRWYWx1ZSIsInJlc2V0VmFsdWVzIiwia2VlcEV4aXN0aW5nU2VsZWN0aW9uIiwidW5pdERhdGEiLCJmaWVsZFBhdGhzIiwiT2JqZWN0Iiwia2V5cyIsInVuaXRGaWVsZFBhdGhzIiwiZm9yRWFjaCIsIl91cGRhdGVJblBhcmFtZXRlclN1Z2dldGlvbnMiLCJwYXRoUHJlZml4Iiwic3JjUHJvcGVydHlOYW1lIiwiaW5QYXJhbWV0ZXJzIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJfdXBkYXRlRmllbGRQYXRoU3VnZ2VzdGlvbnMiLCJvdXRQYXJhbWV0ZXJzIiwiX3VwZGF0ZU91dFBhcmFtZXRlclN1Z2dldGlvbnMiLCJvdXRQYXJhbWV0ZXIiLCJmaWVsZFBhdGhBYnNvbHV0ZSIsIm9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsInNlbGVjdGVkS2V5IiwiZXhpc3RpbmdTZWxlY3Rpb24iLCJmaW5kIiwib3B0aW9uIiwic2VsZWN0T3B0aW9ucyIsImRlZmF1bHRPcHRpb24iLCJwdXNoIiwic2VsZWN0T3B0aW9uIiwic2V0UHJvcGVydHkiLCJwcm9wUGF0aCIsImZpZWxkVmFsdWVIZWxwIiwiX2dldFZhbHVlSGVscCIsImdldERpYWxvZ0NvbnRlbnQiLCJnZXRUYWJsZSIsImdldEluUGFyYW1ldGVycyIsIm1hcCIsImluUGFyYW0iLCJnZXRGaWVsZFBhdGgiLCJvdXRQYXJhbSIsImluZm8iLCJfcmVxdWVzdFZhbHVlTGlzdCIsIm1ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJkZXBlbmRlbnRzIiwiZ2V0RGVwZW5kZW50cyIsImZpZWxkSGVscCIsImdldEZpZWxkSGVscCIsImRlcGVuZGVudCIsImdldElkIiwic2V0QmluZGluZ0NvbnRleHQiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJWYWx1ZUxpc3RIZWxwZXIiLCJjcmVhdGVWSFVJTW9kZWwiLCJnZXRWYWx1ZUxpc3RJbmZvIiwidkxpbmZvIiwiZ2V0UGFyZW50IiwiZmlyZVZhbHVlSGVscFJlcXVlc3QiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwibGFzdEluZGV4T2YiLCJmdWxsVGV4dCIsImZvcm1hdHRlZFRleHQiLCJfdmFsdWVFeGlzdHMiLCJyZWxhdGVkRmllbGQiLCJmaWVsZERhdGEiLCJ0ZXh0SW5mbyIsInRleHQiLCJkZXNjcmlwdGlvblBhdGgiLCJkZXNjcmlwdGlvbiIsImdldEFkZGl0aW9uYWxWYWx1ZSIsInVuZGVmaW5lZCIsInNlbGVjdGlvbkluZm8iLCJ0ZXh0QXJyYW5nZW1lbnQiLCJnZXREaXNwbGF5IiwiZ2V0VmFsdWUiLCJ2YWx1ZVBhdGgiLCJfZ2V0VmFsdWUiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRTZWxlY3RlZEl0ZW0iLCJnZXRUZXh0IiwiX2dldFZhbHVlT25FbXB0eSIsIm9Tb3VyY2UiLCJmaWVsZHNJbmZvTW9kZWwiLCJzUHJvcGVydHlOYW1lIiwidW5pdFByb3BlcnR5Iiwic2V0VmFsdWUiLCJhUGFyYW1zIiwidXBkYXRlVHJhbnNDdHgiLCJvRmllbGRzSW5mb0RhdGEiLCJnZXREYXRhIiwib0RhdGFPYmplY3QiLCJrZXlWYWx1ZSIsInByb3BlcnR5VmFsdWVzIiwib0ZpZWxkRGF0YSIsImJFeGlzdGluZ0VsZW1lbnRpbmRleCIsImkiLCJyZXN1bHRzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBcUJBLE1BQU1BLGdCQUFxQixHQUFHO0FBQzdCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQ0MsSUFBQUEscUJBQXFCLEVBQUUsVUFBVUMsUUFBVixFQUF5QkMsWUFBekIsRUFBK0NDLFVBQS9DLEVBQW1FO0FBQ3pGO0FBQ0E7QUFDQTtBQUVBLFVBQU1DLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxJQUFMLENBQVVILFVBQVYsQ0FBZjtBQUNBLFVBQU1JLFFBQVEsR0FBR0gsTUFBTSxJQUFLQSxNQUFNLENBQUNJLGlCQUFQLEVBQTVCO0FBQ0EsVUFBTUMsY0FBYyxHQUFHTCxNQUFNLElBQUtBLE1BQU0sQ0FBQ00sUUFBUCxDQUFnQixZQUFoQixDQUFsQztBQUNBLFVBQU1DLE1BQU0sR0FDWEYsY0FB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QUFDRCxVQUFJRCxxQkFBcUIsS0FBSyxDQUFDLENBQS9CLEVBQWtDO0FBQ2pDTixRQUFBQSxlQUFlLENBQUNRLE9BQWhCLENBQXdCRixxQkFBeEIsSUFBaURKLFdBQWpEO0FBQ0EsT0FGRCxNQUVPO0FBQ05GLFFBQUFBLGVBQWUsQ0FBQ1EsT0FBaEIsQ0FBd0IxRSxJQUF4QixDQUE2Qm9FLFdBQTdCO0FBQ0E7O0FBQ0QsVUFBSUgsY0FBYyxJQUFJLENBQUNHLFdBQVcsQ0FBQ0MsUUFBWixDQUFxQm5GLFFBQXJCLENBQThCLEdBQTlCLENBQXZCLEVBQTJEO0FBQzFELFlBQU0zRCxRQUFRLEdBQUdvSSxPQUFPLENBQUNuSSxpQkFBUixFQUFqQjs7QUFDQSxZQUFJd0ksT0FBTyxDQUFDLENBQUQsQ0FBUCxLQUFlLFNBQWYsSUFBNEJBLE9BQU8sQ0FBQyxDQUFELENBQVAsS0FBZSxpQkFBL0MsRUFBa0U7QUFDakV6SSxVQUFBQSxRQUFRLENBQUMyRSxXQUFULENBQXFCa0UsV0FBVyxDQUFDQyxRQUFqQyxFQUEyQyxJQUEzQztBQUNBLFNBRkQsTUFFTyxJQUFJRCxXQUFKLEVBQWlCO0FBQ3ZCN0ksVUFBQUEsUUFBUSxDQUFDMkUsV0FBVCxDQUFxQmtFLFdBQVcsQ0FBQ0MsUUFBakMsRUFBMkNELFdBQVcsQ0FBQ2xHLEtBQXZEO0FBQ0E7QUFDRDtBQUNEO0FBcm1CNEIsR0FBOUI7U0F3bUJlbkQsZ0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uc3RydWN0b3IgZm9yIGEgbmV3IFZpc3VhbCBGaWx0ZXIgQ29udGFpbmVyLlxuICogVXNlZCBmb3IgdmlzdWFsIGZpbHRlcnNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NJZF0gSUQgZm9yIHRoZSBuZXcgY29udHJvbCwgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgaWYgbm8gSUQgaXMgZ2l2ZW5cbiAqIEBleHRlbmRzIHNhcC51aS5tZGMuZmlsdGVyYmFyLklGaWx0ZXJDb250YWluZXJcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9scy5maWx0ZXJiYXIuVmlzdWFsRmlsdGVyQ29udGFpbmVyXG4gKi9cbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgVmFsdWVMaXN0SGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbWJvQm94IGZyb20gXCJzYXAvbS9Db21ib0JveFwiO1xuaW1wb3J0IHR5cGUgU2VsZWN0IGZyb20gXCJzYXAvbS9TZWxlY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgSW5QYXJhbWV0ZXIgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvSW5QYXJhbWV0ZXJcIjtcbmltcG9ydCB0eXBlIE91dFBhcmFtZXRlciBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9PdXRQYXJhbWV0ZXJcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuXG5jb25zdCBNYXNzRWRpdEhhbmRsZXJzOiBhbnkgPSB7XG5cdC8qKlxuXHQgKiBDYWxsZWQgZm9yIHByb3BlcnR5IGNoYW5nZSBpbiB0aGUgdHJhbnNpZW50IGNvbnRleHQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gbmV3VmFsdWUgTmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIGRhdGFQcm9wZXJ0eSBGaW5hbCBjb250ZXh0IHJldHVybmVkIGFmdGVyIHRoZSBwYWdpbmF0b3IgYWN0aW9uXG5cdCAqIEBwYXJhbSBtZGNGaWVsZElkIEZpbmFsIGNvbnRleHQgcmV0dXJuZWQgYWZ0ZXIgdGhlIHBhZ2luYXRvciBhY3Rpb25cblx0ICovXG5cdGNvbnRleHRQcm9wZXJ0eUNoYW5nZTogZnVuY3Rpb24gKG5ld1ZhbHVlOiBhbnksIGRhdGFQcm9wZXJ0eTogc3RyaW5nLCBtZGNGaWVsZElkOiBzdHJpbmcpIHtcblx0XHQvLyBDYWxsZWQgZm9yXG5cdFx0Ly8gMS4gT3V0IFBhcmFtZXRlcnMuXG5cdFx0Ly8gMi4gVHJhbnNpZW50IGNvbnRleHQgcHJvcGVydHkgY2hhbmdlLlxuXG5cdFx0Y29uc3Qgc291cmNlID0gQ29yZS5ieUlkKG1kY0ZpZWxkSWQpIGFzIEZpZWxkO1xuXHRcdGNvbnN0IHRyYW5zQ3R4ID0gc291cmNlICYmIChzb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRjb25zdCBmaWVsZEluZm9Nb2RlbCA9IHNvdXJjZSAmJiAoc291cmNlLmdldE1vZGVsKFwiZmllbGRzSW5mb1wiKSBhcyBKU09OTW9kZWwpO1xuXHRcdGNvbnN0IHZhbHVlcyA9XG5cdFx0XHRmaWVsZEluZm9Nb2RlbC5nZXRQcm9wZXJ0eShgL3ZhbHVlcy8ke2RhdGFQcm9wZXJ0eX1gKSB8fCBmaWVsZEluZm9Nb2RlbC5nZXRQcm9wZXJ0eShgL3VuaXREYXRhLyR7ZGF0YVByb3BlcnR5fWApIHx8IFtdO1xuXG5cdFx0aWYgKHRyYW5zQ3R4ICYmICh2YWx1ZXMuaW5wdXRUeXBlID09PSBcIklucHV0V2l0aFZhbHVlSGVscFwiIHx8IHZhbHVlcy5pbnB1dFR5cGUgPT09IFwiSW5wdXRXaXRoVW5pdFwiKSAmJiAhdmFsdWVzLnZhbHVlTGlzdEluZm8pIHtcblx0XHRcdE1hc3NFZGl0SGFuZGxlcnMuX3NldFZhbHVlTGlzdEluZm8odHJhbnNDdHgsIHNvdXJjZSwgZmllbGRJbmZvTW9kZWwsIGRhdGFQcm9wZXJ0eSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNEaWFsb2dPcGVuID0gZmllbGRJbmZvTW9kZWwgJiYgZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoXCIvaXNPcGVuXCIpO1xuXHRcdGlmICghaXNEaWFsb2dPcGVuIHx8ICFzb3VyY2UuZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0TWFzc0VkaXRIYW5kbGVycy5fdXBkYXRlU2VsZWN0S2V5KHNvdXJjZSwgZGF0YVByb3BlcnR5LCBuZXdWYWx1ZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxlZCBmb3IgY2hhbmdlIGluIHRoZSBNREMgZmllbGQuXG5cdCAqIFRoaXMgaXMgY2FsbGVkIG9uIHNlbGVjdGlvbiBkb25lIHRocm91Z2ggVkhELlxuXHQgKiBUaGlzIGlzIG5vdCBjYWxsZWQgb24gY2hhbmdlIG9mIHRoZSBkcm9wZG93biBhcyB3ZSBhcmUgdXNpbmcgYSBjdXN0b20gTWFzc0VkaXRTZWxlY3QgY29udHJvbCBhbmQgbm90IGdlbmVyYWwgU2VsZWN0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIGV2ZW50IEV2ZW50IG9iamVjdCBmb3IgY2hhbmdlLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFByb3BlcnR5IHBhdGguXG5cdCAqL1xuXHRoYW5kbGVNRENGaWVsZENoYW5nZTogZnVuY3Rpb24gKGV2ZW50OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0Ly8gQ2FsbGVkIGZvclxuXHRcdC8vIDEuIFZIRCBwcm9wZXJ0eSBjaGFuZ2UuXG5cblx0XHRjb25zdCBzb3VyY2UgPSBldmVudCAmJiBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBjaGFuZ2VQcm9taXNlID0gZXZlbnQgJiYgZXZlbnQuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKTtcblx0XHRjb25zdCBjb21ib0JveCA9IHNvdXJjZS5nZXRDb250ZW50KCk7XG5cdFx0aWYgKCFjb21ib0JveCB8fCAhcHJvcGVydHlOYW1lKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2hhbmdlUHJvbWlzZVxuXHRcdFx0LnRoZW4oTWFzc0VkaXRIYW5kbGVycy5fdXBkYXRlU2VsZWN0S2V5Rm9yTURDRmllbGRDaGFuZ2UuYmluZChNYXNzRWRpdEhhbmRsZXJzLCBzb3VyY2UsIHByb3BlcnR5TmFtZSkpXG5cdFx0XHQuY2F0Y2goKGVycjogYW55KSA9PiB7XG5cdFx0XHRcdExvZy53YXJuaW5nKGBWSEQgc2VsZWN0aW9uIGNvdWxkbid0IGJlIHBvcHVsYXRlZCBpbiB0aGUgbWFzcyBlZGl0IGZpZWxkLiR7ZXJyfWApO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxlZCBmb3Igc2VsZWN0aW9uIGNoYW5nZSB0aHJvdWdoIHRoZSBkcm9wIGRvd24uXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gZXZlbnQgRXZlbnQgb2JqZWN0IGZvciBjaGFuZ2UuXG5cdCAqL1xuXHRoYW5kbGVTZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uIChldmVudDogYW55KSB7XG5cdFx0Ly8gQ2FsbGVkIGZvciBNYW51YWwgc2VsZWN0aW9uIGZyb20gZHJvcGRvd24oY29tYm9Cb3ggb3Igc2VsZWN0KVxuXHRcdC8vIDEuIFZIRCBzZWxlY3QuXG5cdFx0Ly8gMi4gQW55IHZhbHVlIGNoYW5nZSBpbiB0aGUgY29udHJvbC5cblxuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50ICYmIGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IGtleSA9IHNvdXJjZS5nZXRTZWxlY3RlZEtleSgpIGFzIHN0cmluZztcblx0XHRjb25zdCBwYXJhbXMgPSBzb3VyY2UgJiYga2V5ICYmIGtleS5zcGxpdChcIi9cIik7XG5cdFx0bGV0IHByb3BlcnR5TmFtZTtcblxuXHRcdGlmIChwYXJhbXNbMF0gPT09IFwiVXNlVmFsdWVIZWxwVmFsdWVcIikge1xuXHRcdFx0Y29uc3QgcHJldkl0ZW0gPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJwcmV2aW91c1NlbGVjdGVkSXRlbVwiKTtcblx0XHRcdGNvbnN0IHNlbGVjdEtleSA9IHByZXZJdGVtLmdldEtleSgpO1xuXHRcdFx0cHJvcGVydHlOYW1lID0gcGFyYW1zLnNsaWNlKDEpLmpvaW4oXCIvXCIpO1xuXHRcdFx0TWFzc0VkaXRIYW5kbGVycy5fb25WSFNlbGVjdChzb3VyY2UsIHByb3BlcnR5TmFtZSwgc2VsZWN0S2V5KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBmaWVsZEluZm9Nb2RlbCA9IHNvdXJjZSAmJiAoc291cmNlLmdldE1vZGVsKFwiZmllbGRzSW5mb1wiKSBhcyBKU09OTW9kZWwpO1xuXHRcdHByb3BlcnR5TmFtZSA9IE1hc3NFZGl0SGFuZGxlcnMuX2dldFByb3BlcnR5TmFtZUZyb21LZXkoa2V5KTtcblx0XHRNYXNzRWRpdEhhbmRsZXJzLl91cGRhdGVTdWdnZXN0aW9uRm9yRmllbGRzV2l0aEluUGFyYW1ldGVycyhcblx0XHRcdGZpZWxkSW5mb01vZGVsLFxuXHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0a2V5LnN0YXJ0c1dpdGgoXCJEZWZhdWx0L1wiKSB8fCBrZXkuc3RhcnRzV2l0aChcIkNsZWFyRmllbGRWYWx1ZS9cIiksXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRNYXNzRWRpdEhhbmRsZXJzLl91cGRhdGVTdWdnZXN0aW9uRm9yRmllbGRzV2l0aE91dFBhcmFtZXRlcnMoXG5cdFx0XHRmaWVsZEluZm9Nb2RlbCxcblx0XHRcdHByb3BlcnR5TmFtZSxcblx0XHRcdGtleS5zdGFydHNXaXRoKFwiRGVmYXVsdC9cIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJDbGVhckZpZWxkVmFsdWUvXCIpLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHRcdE1hc3NFZGl0SGFuZGxlcnMuX3VwZGF0ZVJlc3VsdHMoc291cmNlLCBwYXJhbXMsIHRydWUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgc2VsZWN0aW9ucyB0byByZXN1bHRzIGFuZCB0aGUgc3VnZ2VzdHMgaW4gZHJvcCBkb3ducy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBzb3VyY2UgTURDIGZpZWxkIHRoYXQgd2FzIGNoYW5nZWQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgUHJvcGVydHkgcGF0aC5cblx0ICogQHBhcmFtIHZhbHVlIE5ldyB2YWx1ZS5cblx0ICovXG5cdF91cGRhdGVTZWxlY3RLZXlGb3JNRENGaWVsZENoYW5nZTogZnVuY3Rpb24gKHNvdXJjZTogYW55LCBwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IHRyYW5zQ3R4ID0gc291cmNlICYmIHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGZpZWxkSW5mb01vZGVsID0gc291cmNlICYmIChzb3VyY2UuZ2V0TW9kZWwoXCJmaWVsZHNJbmZvXCIpIGFzIEpTT05Nb2RlbCk7XG5cdFx0Y29uc3QgdmFsdWVzID1cblx0XHRcdGZpZWxkSW5mb01vZGVsLmdldFByb3BlcnR5KGAvdmFsdWVzLyR7cHJvcGVydHlOYW1lfWApIHx8IGZpZWxkSW5mb01vZGVsLmdldFByb3BlcnR5KGAvdW5pdERhdGEvJHtwcm9wZXJ0eU5hbWV9YCkgfHwgW107XG5cblx0XHRpZiAodHJhbnNDdHggJiYgKHZhbHVlcy5pbnB1dFR5cGUgPT09IFwiSW5wdXRXaXRoVmFsdWVIZWxwXCIgfHwgdmFsdWVzLmlucHV0VHlwZSA9PT0gXCJJbnB1dFdpdGhVbml0XCIpICYmICF2YWx1ZXMudmFsdWVMaXN0SW5mbykge1xuXHRcdFx0TWFzc0VkaXRIYW5kbGVycy5fc2V0VmFsdWVMaXN0SW5mbyh0cmFuc0N0eCwgc291cmNlLCBmaWVsZEluZm9Nb2RlbCwgcHJvcGVydHlOYW1lKTtcblx0XHR9XG5cblx0XHRNYXNzRWRpdEhhbmRsZXJzLl91cGRhdGVTdWdnZXN0aW9uRm9yRmllbGRzV2l0aE91dFBhcmFtZXRlcnMoZmllbGRJbmZvTW9kZWwsIHByb3BlcnR5TmFtZSwgZmFsc2UsIHRydWUpO1xuXHRcdE1hc3NFZGl0SGFuZGxlcnMuX3VwZGF0ZVN1Z2dlc3Rpb25Gb3JGaWVsZHNXaXRoSW5QYXJhbWV0ZXJzKGZpZWxkSW5mb01vZGVsLCBwcm9wZXJ0eU5hbWUsIGZhbHNlLCB0cnVlKTtcblxuXHRcdGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gc291cmNlLmdldEZvcm1Gb3JtYXR0ZWRWYWx1ZSgpO1xuXHRcdE1hc3NFZGl0SGFuZGxlcnMuX3VwZGF0ZVNlbGVjdEtleShzb3VyY2UsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGZvcm1hdHRlZFZhbHVlKTtcblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlIHN1Z2dlc3RzIGZvciBhbGwgZHJvcCBkb3ducyB3aXRoIEluUGFyYW1ldGVyIGFzIHRoZSBwcm9wZXJ0eU5hbWUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gZmllbGRJbmZvTW9kZWwgUnVudGltZSBtb2RlbCB3aXRoIHBhcmFtZXRlcnMgc3RvcmUgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgUHJvcGVydHkgcGF0aC5cblx0ICogQHBhcmFtIHJlc2V0VmFsdWVzIFNob3VsZCB0aGUgdmFsdWVzIGJlIHJlc2V0IHRvIG9yaWdpbmFsIHN0YXRlLlxuXHQgKiBAcGFyYW0ga2VlcEV4aXN0aW5nU2VsZWN0aW9uIFNob3VsZCB0aGUgZXhpc3Rpbmcgc2VsZWN0aW9uIGJlZm9yZSB1cGRhdGUgcmVtYWluLlxuXHQgKi9cblx0X3VwZGF0ZVN1Z2dlc3Rpb25Gb3JGaWVsZHNXaXRoSW5QYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0ZmllbGRJbmZvTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0XHRyZXNldFZhbHVlczogYm9vbGVhbixcblx0XHRrZWVwRXhpc3RpbmdTZWxlY3Rpb246IGJvb2xlYW5cblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgdmFsdWVzID0gZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoXCIvdmFsdWVzXCIpO1xuXHRcdGNvbnN0IHVuaXREYXRhID0gZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoXCIvdW5pdERhdGFcIik7XG5cdFx0Y29uc3QgZmllbGRQYXRocyA9IE9iamVjdC5rZXlzKHZhbHVlcyk7XG5cdFx0Y29uc3QgdW5pdEZpZWxkUGF0aHMgPSBPYmplY3Qua2V5cyh1bml0RGF0YSk7XG5cblx0XHRmaWVsZFBhdGhzLmZvckVhY2goXG5cdFx0XHRNYXNzRWRpdEhhbmRsZXJzLl91cGRhdGVJblBhcmFtZXRlclN1Z2dldGlvbnMuYmluZChcblx0XHRcdFx0TWFzc0VkaXRIYW5kbGVycyxcblx0XHRcdFx0ZmllbGRJbmZvTW9kZWwsXG5cdFx0XHRcdFwiL3ZhbHVlcy9cIixcblx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRyZXNldFZhbHVlcyxcblx0XHRcdFx0a2VlcEV4aXN0aW5nU2VsZWN0aW9uXG5cdFx0XHQpXG5cdFx0KTtcblx0XHR1bml0RmllbGRQYXRocy5mb3JFYWNoKFxuXHRcdFx0TWFzc0VkaXRIYW5kbGVycy5fdXBkYXRlSW5QYXJhbWV0ZXJTdWdnZXRpb25zLmJpbmQoXG5cdFx0XHRcdE1hc3NFZGl0SGFuZGxlcnMsXG5cdFx0XHRcdGZpZWxkSW5mb01vZGVsLFxuXHRcdFx0XHRcIi91bml0RGF0YS9cIixcblx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRyZXNldFZhbHVlcyxcblx0XHRcdFx0a2VlcEV4aXN0aW5nU2VsZWN0aW9uXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlIHN1Z2dlc3RzIGZvciBhIGRyb3AgZG93biB3aXRoIEluUGFyYW1ldGVyIGFzIHRoZSBzcmNQcm9wZXJ0eU5hbWUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gZmllbGRJbmZvTW9kZWwgUnVudGltZSBtb2RlbCB3aXRoIHBhcmFtZXRlcnMgc3RvcmUgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBwYXRoUHJlZml4IFBhdGggaW4gdGhlIHJ1bnRpbWUgbW9kZWwuXG5cdCAqIEBwYXJhbSBzcmNQcm9wZXJ0eU5hbWUgVGhlIEluUGFyYW1ldGVyIFByb3BlcnR5IHBhdGguXG5cdCAqIEBwYXJhbSByZXNldFZhbHVlcyBTaG91bGQgdGhlIHZhbHVlcyBiZSByZXNldCB0byBvcmlnaW5hbCBzdGF0ZS5cblx0ICogQHBhcmFtIGtlZXBFeGlzdGluZ1NlbGVjdGlvbiBTaG91bGQgdGhlIGV4aXN0aW5nIHNlbGVjdGlvbiBiZWZvcmUgdXBkYXRlIHJlbWFpbi5cblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBQcm9wZXJ0eSBwYXRoIHRoYXQgbmVlZHMgdXBkYXRlIG9mIHN1Z2dlc3Rpb25zLlxuXHQgKi9cblx0X3VwZGF0ZUluUGFyYW1ldGVyU3VnZ2V0aW9uczogZnVuY3Rpb24gKFxuXHRcdGZpZWxkSW5mb01vZGVsOiBKU09OTW9kZWwsXG5cdFx0cGF0aFByZWZpeDogc3RyaW5nLFxuXHRcdHNyY1Byb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRcdHJlc2V0VmFsdWVzOiBib29sZWFuLFxuXHRcdGtlZXBFeGlzdGluZ1NlbGVjdGlvbjogYm9vbGVhbixcblx0XHRwcm9wZXJ0eU5hbWU6IHN0cmluZ1xuXHQpIHtcblx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoYCR7cGF0aFByZWZpeCArIHByb3BlcnR5TmFtZX0vdmFsdWVMaXN0SW5mb2ApO1xuXHRcdGlmICh2YWx1ZUxpc3RJbmZvICYmIHNyY1Byb3BlcnR5TmFtZSAhPSBwcm9wZXJ0eU5hbWUpIHtcblx0XHRcdGNvbnN0IGluUGFyYW1ldGVycyA9IHZhbHVlTGlzdEluZm8uaW5QYXJhbWV0ZXJzO1xuXHRcdFx0aWYgKGluUGFyYW1ldGVycyAmJiBpblBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiBpblBhcmFtZXRlcnMuaW5jbHVkZXMoc3JjUHJvcGVydHlOYW1lKSkge1xuXHRcdFx0XHRNYXNzRWRpdEhhbmRsZXJzLl91cGRhdGVGaWVsZFBhdGhTdWdnZXN0aW9ucyhmaWVsZEluZm9Nb2RlbCwgcGF0aFByZWZpeCArIHByb3BlcnR5TmFtZSwgcmVzZXRWYWx1ZXMsIGtlZXBFeGlzdGluZ1NlbGVjdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgc3VnZ2VzdHMgZm9yIGFsbCBPdXRQYXJhbWV0ZXIncyBkcm9wIGRvd25zIG9mIHRoZSBwcm9wZXJ0eU5hbWUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gZmllbGRJbmZvTW9kZWwgUnVudGltZSBtb2RlbCB3aXRoIHBhcmFtZXRlcnMgc3RvcmUgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgUHJvcGVydHkgcGF0aC5cblx0ICogQHBhcmFtIHJlc2V0VmFsdWVzIFNob3VsZCB0aGUgdmFsdWVzIGJlIHJlc2V0IHRvIG9yaWdpbmFsIHN0YXRlLlxuXHQgKiBAcGFyYW0ga2VlcEV4aXN0aW5nU2VsZWN0aW9uIFNob3VsZCB0aGUgZXhpc3Rpbmcgc2VsZWN0aW9uIGJlZm9yZSB1cGRhdGUgcmVtYWluLlxuXHQgKi9cblx0X3VwZGF0ZVN1Z2dlc3Rpb25Gb3JGaWVsZHNXaXRoT3V0UGFyYW1ldGVyczogZnVuY3Rpb24gKFxuXHRcdGZpZWxkSW5mb01vZGVsOiBKU09OTW9kZWwsXG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0cmVzZXRWYWx1ZXM6IGJvb2xlYW4sXG5cdFx0a2VlcEV4aXN0aW5nU2VsZWN0aW9uOiBib29sZWFuXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPVxuXHRcdFx0ZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoYC92YWx1ZXMvJHtwcm9wZXJ0eU5hbWV9L3ZhbHVlTGlzdEluZm9gKSB8fFxuXHRcdFx0ZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoYC91bml0RGF0YS8ke3Byb3BlcnR5TmFtZX0vdmFsdWVMaXN0SW5mb2ApO1xuXG5cdFx0aWYgKHZhbHVlTGlzdEluZm8gJiYgdmFsdWVMaXN0SW5mby5vdXRQYXJhbWV0ZXJzKSB7XG5cdFx0XHRjb25zdCBvdXRQYXJhbWV0ZXJzID0gdmFsdWVMaXN0SW5mby5vdXRQYXJhbWV0ZXJzO1xuXHRcdFx0aWYgKG91dFBhcmFtZXRlcnMubGVuZ3RoICYmIG91dFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRNYXNzRWRpdEhhbmRsZXJzLl91cGRhdGVPdXRQYXJhbWV0ZXJTdWdnZXRpb25zKG91dFBhcmFtZXRlcnMsIGZpZWxkSW5mb01vZGVsLCByZXNldFZhbHVlcywga2VlcEV4aXN0aW5nU2VsZWN0aW9uKTtcblx0XHRcdFx0Y29uc3QgcGF0aFByZWZpeCA9XG5cdFx0XHRcdFx0KGZpZWxkSW5mb01vZGVsLmdldFByb3BlcnR5KGAvdmFsdWVzLyR7cHJvcGVydHlOYW1lfWApICYmIGAvdmFsdWVzLyR7cHJvcGVydHlOYW1lfWApIHx8XG5cdFx0XHRcdFx0KGZpZWxkSW5mb01vZGVsLmdldFByb3BlcnR5KGAvdW5pdERhdGEvJHtwcm9wZXJ0eU5hbWV9YCkgJiYgYC91bml0RGF0YS8ke3Byb3BlcnR5TmFtZX1gKTtcblx0XHRcdFx0aWYgKHBhdGhQcmVmaXgpIHtcblx0XHRcdFx0XHRNYXNzRWRpdEhhbmRsZXJzLl91cGRhdGVGaWVsZFBhdGhTdWdnZXN0aW9ucyhmaWVsZEluZm9Nb2RlbCwgcGF0aFByZWZpeCwgZmFsc2UsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgc3VnZ2VzdHMgZm9yIGEgZHJvcCBkb3duIHdpdGggSW5QYXJhbWV0ZXIgYXMgdGhlIHNyY1Byb3BlcnR5TmFtZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBvdXRQYXJhbWV0ZXJzIFN0cmluZyBhcnJhcnkgb2YgT3V0UGFyYW1ldGVyIHByb3BlcnR5IHBhdGhzLlxuXHQgKiBAcGFyYW0gZmllbGRJbmZvTW9kZWwgUnVudGltZSBtb2RlbCB3aXRoIHBhcmFtZXRlcnMgc3RvcmUgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSByZXNldFZhbHVlcyBTaG91bGQgdGhlIHZhbHVlcyBiZSByZXNldCB0byBvcmlnaW5hbCBzdGF0ZS5cblx0ICogQHBhcmFtIGtlZXBFeGlzdGluZ1NlbGVjdGlvbiBTaG91bGQgdGhlIGV4aXN0aW5nIHNlbGVjdGlvbiBiZWZvcmUgdXBkYXRlIHJlbWFpbi5cblx0ICovXG5cdF91cGRhdGVPdXRQYXJhbWV0ZXJTdWdnZXRpb25zOiBmdW5jdGlvbiAoXG5cdFx0b3V0UGFyYW1ldGVyczogc3RyaW5nW10sXG5cdFx0ZmllbGRJbmZvTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRyZXNldFZhbHVlczogYm9vbGVhbixcblx0XHRrZWVwRXhpc3RpbmdTZWxlY3Rpb246IGJvb2xlYW5cblx0KSB7XG5cdFx0Y29uc3QgdmFsdWVzID0gZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoXCIvdmFsdWVzXCIpO1xuXHRcdGNvbnN0IHVuaXREYXRhID0gZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoXCIvdW5pdERhdGFcIik7XG5cdFx0Y29uc3QgZmllbGRQYXRocyA9IE9iamVjdC5rZXlzKHZhbHVlcyk7XG5cdFx0Y29uc3QgdW5pdEZpZWxkUGF0aHMgPSBPYmplY3Qua2V5cyh1bml0RGF0YSk7XG5cblx0XHRvdXRQYXJhbWV0ZXJzLmZvckVhY2goKG91dFBhcmFtZXRlcjogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAoZmllbGRQYXRocy5pbmNsdWRlcyhvdXRQYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdE1hc3NFZGl0SGFuZGxlcnMuX3VwZGF0ZUZpZWxkUGF0aFN1Z2dlc3Rpb25zKGZpZWxkSW5mb01vZGVsLCBgL3ZhbHVlcy8ke291dFBhcmFtZXRlcn1gLCByZXNldFZhbHVlcywga2VlcEV4aXN0aW5nU2VsZWN0aW9uKTtcblx0XHRcdH0gZWxzZSBpZiAodW5pdEZpZWxkUGF0aHMuaW5jbHVkZXMob3V0UGFyYW1ldGVyKSkge1xuXHRcdFx0XHRNYXNzRWRpdEhhbmRsZXJzLl91cGRhdGVGaWVsZFBhdGhTdWdnZXN0aW9ucyhcblx0XHRcdFx0XHRmaWVsZEluZm9Nb2RlbCxcblx0XHRcdFx0XHRgL3VuaXREYXRhLyR7b3V0UGFyYW1ldGVyfWAsXG5cdFx0XHRcdFx0cmVzZXRWYWx1ZXMsXG5cdFx0XHRcdFx0a2VlcEV4aXN0aW5nU2VsZWN0aW9uXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSBzdWdnZXN0cyBmb3IgYSBkcm9wIGRvd24gb2YgYSBmaWVsZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBmaWVsZEluZm9Nb2RlbCBSdW50aW1lIG1vZGVsIHdpdGggcGFyYW1ldGVycyBzdG9yZSBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIGZpZWxkUGF0aEFic29sdXRlIENvbXBsZXRlIHJ1bnRpbWUgcHJvcGVydHkgcGF0aC5cblx0ICogQHBhcmFtIHJlc2V0VmFsdWVzIFNob3VsZCB0aGUgdmFsdWVzIGJlIHJlc2V0IHRvIG9yaWdpbmFsIHN0YXRlLlxuXHQgKiBAcGFyYW0ga2VlcEV4aXN0aW5nU2VsZWN0aW9uIFNob3VsZCB0aGUgZXhpc3Rpbmcgc2VsZWN0aW9uIGJlZm9yZSB1cGRhdGUgcmVtYWluLlxuXHQgKi9cblx0X3VwZGF0ZUZpZWxkUGF0aFN1Z2dlc3Rpb25zOiBmdW5jdGlvbiAoXG5cdFx0ZmllbGRJbmZvTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRmaWVsZFBhdGhBYnNvbHV0ZTogc3RyaW5nLFxuXHRcdHJlc2V0VmFsdWVzOiBib29sZWFuLFxuXHRcdGtlZXBFeGlzdGluZ1NlbGVjdGlvbjogYm9vbGVhblxuXHQpIHtcblx0XHRjb25zdCBvcHRpb25zID0gZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoZmllbGRQYXRoQWJzb2x1dGUpO1xuXHRcdGNvbnN0IGRlZmF1bHRPcHRpb25zID0gb3B0aW9ucy5kZWZhdWx0T3B0aW9ucztcblx0XHRjb25zdCBzZWxlY3RlZEtleSA9IGZpZWxkSW5mb01vZGVsLmdldFByb3BlcnR5KGAke2ZpZWxkUGF0aEFic29sdXRlfS9zZWxlY3RlZEtleWApO1xuXHRcdGNvbnN0IGV4aXN0aW5nU2VsZWN0aW9uID0ga2VlcEV4aXN0aW5nU2VsZWN0aW9uICYmIG9wdGlvbnMuZmluZCgob3B0aW9uOiBhbnkpID0+IG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkS2V5KTtcblx0XHRpZiAocmVzZXRWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBvcHRpb25zLnNlbGVjdE9wdGlvbnM7XG5cdFx0XHRvcHRpb25zLmxlbmd0aCA9IDA7XG5cdFx0XHRkZWZhdWx0T3B0aW9ucy5mb3JFYWNoKChkZWZhdWx0T3B0aW9uOiBhbnkpID0+IG9wdGlvbnMucHVzaChkZWZhdWx0T3B0aW9uKSk7XG5cdFx0XHRzZWxlY3RPcHRpb25zLmZvckVhY2goKHNlbGVjdE9wdGlvbjogYW55KSA9PiBvcHRpb25zLnB1c2goc2VsZWN0T3B0aW9uKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9wdGlvbnMubGVuZ3RoID0gMDtcblx0XHRcdGRlZmF1bHRPcHRpb25zLmZvckVhY2goKGRlZmF1bHRPcHRpb246IGFueSkgPT4gb3B0aW9ucy5wdXNoKGRlZmF1bHRPcHRpb24pKTtcblx0XHR9XG5cblx0XHRmaWVsZEluZm9Nb2RlbC5zZXRQcm9wZXJ0eShmaWVsZFBhdGhBYnNvbHV0ZSwgb3B0aW9ucyk7XG5cblx0XHRpZiAoZXhpc3RpbmdTZWxlY3Rpb24gJiYgIW9wdGlvbnMuaW5jbHVkZXMoZXhpc3RpbmdTZWxlY3Rpb24pKSB7XG5cdFx0XHRvcHRpb25zLnB1c2goZXhpc3RpbmdTZWxlY3Rpb24pO1xuXHRcdFx0ZmllbGRJbmZvTW9kZWwuc2V0UHJvcGVydHkoYCR7ZmllbGRQYXRoQWJzb2x1dGV9L3NlbGVjdGVkS2V5YCwgc2VsZWN0ZWRLZXkpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlIEluIGFuZCBPdXQgUGFyYW1ldGVycyBpbiB0aGUgTUVELlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHRyYW5zQ3R4IFRoZSB0cmFuc2llbnQgY29udGV4dCBvZiB0aGUgTUVELlxuXHQgKiBAcGFyYW0gc291cmNlIE1EQyBmaWVsZC5cblx0ICogQHBhcmFtIGZpZWxkSW5mb01vZGVsIFJ1bnRpbWUgbW9kZWwgd2l0aCBwYXJhbWV0ZXJzIHN0b3JlIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFByb3BlcnR5IHBhdGguXG5cdCAqL1xuXHRfc2V0VmFsdWVMaXN0SW5mbzogZnVuY3Rpb24gKHRyYW5zQ3R4OiBDb250ZXh0LCBzb3VyY2U6IEZpZWxkLCBmaWVsZEluZm9Nb2RlbDogSlNPTk1vZGVsLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHByb3BQYXRoID1cblx0XHRcdChmaWVsZEluZm9Nb2RlbC5nZXRQcm9wZXJ0eShgL3ZhbHVlcy8ke3Byb3BlcnR5TmFtZX1gKSAmJiBcIi92YWx1ZXMvXCIpIHx8XG5cdFx0XHQoZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoYC91bml0RGF0YS8ke3Byb3BlcnR5TmFtZX1gKSAmJiBcIi91bml0RGF0YS9cIik7XG5cblx0XHRpZiAoZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoYCR7cHJvcFBhdGh9JHtwcm9wZXJ0eU5hbWV9L3ZhbHVlTGlzdEluZm9gKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBmaWVsZFZhbHVlSGVscCA9IE1hc3NFZGl0SGFuZGxlcnMuX2dldFZhbHVlSGVscCh0cmFuc0N0eCwgc291cmNlKTtcblx0XHRpZiAoZmllbGRWYWx1ZUhlbHAgJiYgZmllbGRWYWx1ZUhlbHAuZ2V0RGlhbG9nQ29udGVudCgpLmdldFRhYmxlKCkpIHtcblx0XHRcdGNvbnN0IGluUGFyYW1ldGVycyA9IChmaWVsZFZhbHVlSGVscC5nZXRJblBhcmFtZXRlcnMoKSB8fCBbXSkubWFwKChpblBhcmFtOiBJblBhcmFtZXRlcikgPT4gaW5QYXJhbS5nZXRGaWVsZFBhdGgoKSk7XG5cdFx0XHRjb25zdCBvdXRQYXJhbWV0ZXJzID0gKGZpZWxkVmFsdWVIZWxwLmdldEluUGFyYW1ldGVycygpIHx8IFtdKS5tYXAoKG91dFBhcmFtOiBPdXRQYXJhbWV0ZXIpID0+IG91dFBhcmFtLmdldEZpZWxkUGF0aCgpKTtcblx0XHRcdGNvbnN0IGluZm86IGFueSA9IHtcblx0XHRcdFx0aW5QYXJhbWV0ZXJzOiBpblBhcmFtZXRlcnMubWFwKChpblBhcmFtOiBhbnkpID0+IGluUGFyYW0uZ2V0RmllbGRQYXRoKCkpLFxuXHRcdFx0XHRvdXRQYXJhbWV0ZXJzOiBvdXRQYXJhbWV0ZXJzLm1hcCgob3V0UGFyYW06IGFueSkgPT4gb3V0UGFyYW0uZ2V0RmllbGRQYXRoKCkpXG5cdFx0XHR9O1xuXHRcdFx0ZmllbGRJbmZvTW9kZWwuc2V0UHJvcGVydHkoYCR7cHJvcFBhdGh9JHtwcm9wZXJ0eU5hbWV9L3ZhbHVlTGlzdEluZm9gLCBpbmZvKTtcblx0XHRcdGlmIChpbmZvLm91dFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRNYXNzRWRpdEhhbmRsZXJzLl91cGRhdGVGaWVsZFBhdGhTdWdnZXN0aW9ucyhmaWVsZEluZm9Nb2RlbCwgYC92YWx1ZXMvJHtwcm9wZXJ0eU5hbWV9YCwgZmFsc2UsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRNYXNzRWRpdEhhbmRsZXJzLl9yZXF1ZXN0VmFsdWVMaXN0KHRyYW5zQ3R4LCBzb3VyY2UsIGZpZWxkSW5mb01vZGVsLCBwcm9wZXJ0eU5hbWUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogUmVxdWVzdCBhbmQgdXBkYXRlIEluIGFuZCBPdXQgUGFyYW1ldGVycyBpbiB0aGUgTUVELlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHRyYW5zQ3R4IFRoZSB0cmFuc2llbnQgY29udGV4dCBvZiB0aGUgTUVELlxuXHQgKiBAcGFyYW0gc291cmNlIE1EQyBmaWVsZC5cblx0ICogQHBhcmFtIGZpZWxkSW5mb01vZGVsIFJ1bnRpbWUgbW9kZWwgd2l0aCBwYXJhbWV0ZXJzIHN0b3JlIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFByb3BlcnR5IHBhdGguXG5cdCAqL1xuXHRfcmVxdWVzdFZhbHVlTGlzdDogZnVuY3Rpb24gKHRyYW5zQ3R4OiBDb250ZXh0LCBzb3VyY2U6IEZpZWxkLCBmaWVsZEluZm9Nb2RlbDogSlNPTk1vZGVsLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG1ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KHRyYW5zQ3R4KTtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSAobWV0YVBhdGggJiYgYCR7bWV0YVBhdGh9LyR7cHJvcGVydHlOYW1lfWApIGFzIHN0cmluZztcblx0XHRjb25zdCBkZXBlbmRlbnRzID0gc291cmNlPy5nZXREZXBlbmRlbnRzKCk7XG5cdFx0Y29uc3QgZmllbGRIZWxwID0gc291cmNlPy5nZXRGaWVsZEhlbHAoKTtcblx0XHRjb25zdCBmaWVsZFZhbHVlSGVscCA9IGRlcGVuZGVudHM/LmZpbmQoKGRlcGVuZGVudDogYW55KSA9PiBkZXBlbmRlbnQuZ2V0SWQoKSA9PT0gZmllbGRIZWxwKTtcblx0XHRpZiAoIWZpZWxkVmFsdWVIZWxwPy5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRmaWVsZFZhbHVlSGVscD8uc2V0QmluZGluZ0NvbnRleHQodHJhbnNDdHgpO1xuXHRcdH1cblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0cmFuc0N0eC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFZhbHVlTGlzdEhlbHBlci5jcmVhdGVWSFVJTW9kZWwocHJvcGVydHlQYXRoLCBmaWVsZFZhbHVlSGVscCk7XG5cdFx0Y29uc3QgdmFsdWVMaXN0SW5mbyA9IFZhbHVlTGlzdEhlbHBlci5nZXRWYWx1ZUxpc3RJbmZvKGZpZWxkVmFsdWVIZWxwLCBtZXRhTW9kZWwsIHByb3BlcnR5UGF0aCkgYXMgUHJvbWlzZTxhbnk+O1xuXG5cdFx0dmFsdWVMaXN0SW5mb1xuXHRcdFx0LnRoZW4oKHZMaW5mbzogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHByb3BQYXRoID1cblx0XHRcdFx0XHQoZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoYC92YWx1ZXMvJHtwcm9wZXJ0eU5hbWV9YCkgJiYgXCIvdmFsdWVzL1wiKSB8fFxuXHRcdFx0XHRcdChmaWVsZEluZm9Nb2RlbC5nZXRQcm9wZXJ0eShgL3VuaXREYXRhLyR7cHJvcGVydHlOYW1lfWApICYmIFwiL3VuaXREYXRhL1wiKTtcblx0XHRcdFx0Y29uc3QgaW5mbzogYW55ID0ge1xuXHRcdFx0XHRcdGluUGFyYW1ldGVyczogdkxpbmZvLmluUGFyYW1ldGVycy5tYXAoKGluUGFyYW06IGFueSkgPT4gaW5QYXJhbS5nZXRGaWVsZFBhdGgoKSksXG5cdFx0XHRcdFx0b3V0UGFyYW1ldGVyczogdkxpbmZvLm91dFBhcmFtZXRlcnMubWFwKChvdXRQYXJhbTogYW55KSA9PiBvdXRQYXJhbS5nZXRGaWVsZFBhdGgoKSlcblx0XHRcdFx0fTtcblx0XHRcdFx0ZmllbGRJbmZvTW9kZWwuc2V0UHJvcGVydHkoYCR7cHJvcFBhdGh9JHtwcm9wZXJ0eU5hbWV9L3ZhbHVlTGlzdEluZm9gLCBpbmZvKTtcblx0XHRcdFx0aWYgKGluZm8ub3V0UGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0TWFzc0VkaXRIYW5kbGVycy5fdXBkYXRlRmllbGRQYXRoU3VnZ2VzdGlvbnMoZmllbGRJbmZvTW9kZWwsIGAvdmFsdWVzLyR7cHJvcGVydHlOYW1lfWAsIGZhbHNlLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdExvZy53YXJuaW5nKGBNYXNzIEVkaXQ6IENvdWxkbid0IGxvYWQgdmFsdWVMaXN0IGluZm8gZm9yICR7cHJvcGVydHlQYXRofWApO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBmaWVsZCBoZWxwIGNvbnRyb2wgZnJvbSBNREMgZmllbGQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gdHJhbnNDdHggVGhlIHRyYW5zaWVudCBjb250ZXh0IG9mIHRoZSBNRUQuXG5cdCAqIEBwYXJhbSBzb3VyY2UgTURDIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBGaWVsZCBIZWxwIGNvbnRyb2wuXG5cdCAqL1xuXHRfZ2V0VmFsdWVIZWxwOiBmdW5jdGlvbiAodHJhbnNDdHg6IENvbnRleHQsIHNvdXJjZTogRmllbGQpOiBhbnkge1xuXHRcdGNvbnN0IGRlcGVuZGVudHMgPSBzb3VyY2U/LmdldERlcGVuZGVudHMoKTtcblx0XHRjb25zdCBmaWVsZEhlbHAgPSBzb3VyY2U/LmdldEZpZWxkSGVscCgpO1xuXHRcdHJldHVybiBkZXBlbmRlbnRzPy5maW5kKChkZXBlbmRlbnQ6IGFueSkgPT4gZGVwZW5kZW50LmdldElkKCkgPT09IGZpZWxkSGVscCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbGxlZCBvbiBkcm9wIGRvd24gc2VsZWN0aW9uIG9mIFZIRCBvcHRpb24uXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gc291cmNlIEN1c3RvbSBNYXNzIEVkaXQgU2VsZWN0IGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgUHJvcGVydHkgcGF0aC5cblx0ICogQHBhcmFtIHNlbGVjdEtleSBQcmV2aW91cyBrZXkgYmVmb3JlIHRoZSBWSEQgd2FzIHNlbGVjdGVkLlxuXHQgKi9cblx0X29uVkhTZWxlY3Q6IGZ1bmN0aW9uIChzb3VyY2U6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHNlbGVjdEtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Ly8gQ2FsbGVkIGZvclxuXHRcdC8vIDEuIFZIRCBzZWxlY3RlZC5cblxuXHRcdGNvbnN0IGZpZWxkSW5mb01vZGVsID0gc291cmNlICYmIHNvdXJjZS5nZXRNb2RlbChcImZpZWxkc0luZm9cIik7XG5cdFx0Y29uc3QgcHJvcFBhdGggPVxuXHRcdFx0KGZpZWxkSW5mb01vZGVsLmdldFByb3BlcnR5KGAvdmFsdWVzLyR7cHJvcGVydHlOYW1lfWApICYmIFwiL3ZhbHVlcy9cIikgfHxcblx0XHRcdChmaWVsZEluZm9Nb2RlbC5nZXRQcm9wZXJ0eShgL3VuaXREYXRhLyR7cHJvcGVydHlOYW1lfWApICYmIFwiL3VuaXREYXRhL1wiKTtcblx0XHRjb25zdCB0cmFuc0N0eCA9IHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGZpZWxkVmFsdWVIZWxwID0gTWFzc0VkaXRIYW5kbGVycy5fZ2V0VmFsdWVIZWxwKHRyYW5zQ3R4LCBzb3VyY2UuZ2V0UGFyZW50KCkpO1xuXHRcdGlmICghZmllbGRWYWx1ZUhlbHA/LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdGZpZWxkVmFsdWVIZWxwPy5zZXRCaW5kaW5nQ29udGV4dCh0cmFuc0N0eCk7XG5cdFx0fVxuXHRcdHNvdXJjZS5maXJlVmFsdWVIZWxwUmVxdWVzdCgpO1xuXG5cdFx0ZmllbGRJbmZvTW9kZWwuc2V0UHJvcGVydHkoYCR7cHJvcFBhdGggKyBwcm9wZXJ0eU5hbWV9L3NlbGVjdGVkS2V5YCwgc2VsZWN0S2V5KTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyBQcm9wZXJ0eSBuYW1lIGZyb20gc2VsZWN0aW9uIGtleS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBrZXkgU2VsZWN0aW9uIGtleS5cblx0ICogQHJldHVybnMgUHJvcGVydHkgbmFtZS5cblx0ICovXG5cdF9nZXRQcm9wZXJ0eU5hbWVGcm9tS2V5OiBmdW5jdGlvbiAoa2V5OiBzdHJpbmcpIHtcblx0XHRsZXQgcHJvcGVydHlOYW1lID0gXCJcIjtcblx0XHRpZiAoa2V5LnN0YXJ0c1dpdGgoXCJEZWZhdWx0L1wiKSB8fCBrZXkuc3RhcnRzV2l0aChcIkNsZWFyRmllbGRWYWx1ZS9cIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJVc2VWYWx1ZUhlbHBWYWx1ZS9cIikpIHtcblx0XHRcdHByb3BlcnR5TmFtZSA9IGtleS5zdWJzdHJpbmcoa2V5LmluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BlcnR5TmFtZSA9IGtleS5zdWJzdHJpbmcoMCwga2V5Lmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eU5hbWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSBzZWxlY3Rpb24gdG8gQ3VzdG9tIE1hc3MgRWRpdCBTZWxlY3QgZnJvbSBNREMgZmllbGQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gc291cmNlIE1EQyBmaWVsZC5cblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBQcm9wZXJ0eSBwYXRoLlxuXHQgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gdXBkYXRlLlxuXHQgKiBAcGFyYW0gZnVsbFRleHQgRnVsbCB0ZXh0IHRvIHVzZS5cblx0ICovXG5cdF91cGRhdGVTZWxlY3RLZXk6IGZ1bmN0aW9uIChzb3VyY2U6IEZpZWxkLCBwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgZnVsbFRleHQ/OiBhbnkpOiB2b2lkIHtcblx0XHQvLyBDYWxsZWQgZm9yXG5cdFx0Ly8gMS4gVkhEIHByb3BlcnR5IGNoYW5nZVxuXHRcdC8vIDIuIE91dCBQYXJhbWV0ZXJzLlxuXHRcdC8vIDMuIFRyYW5zaWVudCBjb250ZXh0IHByb3BlcnR5IGNoYW5nZS5cblxuXHRcdGNvbnN0IGNvbWJvQm94ID0gc291cmNlLmdldENvbnRlbnQoKSBhcyBDb21ib0JveDtcblx0XHRpZiAoIWNvbWJvQm94IHx8ICFwcm9wZXJ0eU5hbWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IGtleTogc3RyaW5nID0gY29tYm9Cb3guZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRpZiAoKGtleS5zdGFydHNXaXRoKFwiRGVmYXVsdC9cIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJDbGVhckZpZWxkVmFsdWUvXCIpKSAmJiAhdmFsdWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBmb3JtYXR0ZWRUZXh0ID0gTWFzc0VkaXRIYW5kbGVycy5fdmFsdWVFeGlzdHMoZnVsbFRleHQpID8gZnVsbFRleHQgOiB2YWx1ZTtcblx0XHRjb25zdCBmaWVsZEluZm9Nb2RlbCA9IHNvdXJjZSAmJiAoc291cmNlLmdldE1vZGVsKFwiZmllbGRzSW5mb1wiKSBhcyBKU09OTW9kZWwpO1xuXHRcdGNvbnN0IHZhbHVlcyA9XG5cdFx0XHRmaWVsZEluZm9Nb2RlbC5nZXRQcm9wZXJ0eShgL3ZhbHVlcy8ke3Byb3BlcnR5TmFtZX1gKSB8fCBmaWVsZEluZm9Nb2RlbC5nZXRQcm9wZXJ0eShgL3VuaXREYXRhLyR7cHJvcGVydHlOYW1lfWApIHx8IFtdO1xuXHRcdGNvbnN0IHByb3BQYXRoID1cblx0XHRcdChmaWVsZEluZm9Nb2RlbC5nZXRQcm9wZXJ0eShgL3ZhbHVlcy8ke3Byb3BlcnR5TmFtZX1gKSAmJiBcIi92YWx1ZXMvXCIpIHx8XG5cdFx0XHQoZmllbGRJbmZvTW9kZWwuZ2V0UHJvcGVydHkoYC91bml0RGF0YS8ke3Byb3BlcnR5TmFtZX1gKSAmJiBcIi91bml0RGF0YS9cIik7XG5cblx0XHRjb25zdCByZWxhdGVkRmllbGQgPSB2YWx1ZXMuZmluZCgoZmllbGREYXRhOiBhbnkpID0+IGZpZWxkRGF0YT8udGV4dEluZm8/LnZhbHVlID09PSB2YWx1ZSB8fCBmaWVsZERhdGEudGV4dCA9PT0gdmFsdWUpO1xuXG5cdFx0aWYgKHJlbGF0ZWRGaWVsZCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRmdWxsVGV4dCAmJlxuXHRcdFx0XHRyZWxhdGVkRmllbGQudGV4dEluZm8gJiZcblx0XHRcdFx0cmVsYXRlZEZpZWxkLnRleHRJbmZvLmRlc2NyaXB0aW9uUGF0aCAmJlxuXHRcdFx0XHQocmVsYXRlZEZpZWxkLnRleHQgIT0gZm9ybWF0dGVkVGV4dCB8fCByZWxhdGVkRmllbGQudGV4dEluZm8uZnVsbFRleHQgIT0gZm9ybWF0dGVkVGV4dClcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBVcGRhdGUgdGhlIGZ1bGwgdGV4dCBvbmx5IHdoZW4gcHJvdmlkZWQuXG5cdFx0XHRcdHJlbGF0ZWRGaWVsZC50ZXh0ID0gZm9ybWF0dGVkVGV4dDtcblx0XHRcdFx0cmVsYXRlZEZpZWxkLnRleHRJbmZvLmZ1bGxUZXh0ID0gZm9ybWF0dGVkVGV4dDtcblx0XHRcdFx0cmVsYXRlZEZpZWxkLnRleHRJbmZvLmRlc2NyaXB0aW9uID0gc291cmNlLmdldEFkZGl0aW9uYWxWYWx1ZSgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJlbGF0ZWRGaWVsZC5rZXkgPT09IGtleSkge1xuXHRcdFx0XHRmaWVsZEluZm9Nb2RlbC5zZXRQcm9wZXJ0eShgJHtwcm9wUGF0aCArIHByb3BlcnR5TmFtZX0vc2VsZWN0ZWRLZXlgLCBrZXkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRrZXkgPSByZWxhdGVkRmllbGQua2V5O1xuXHRcdH0gZWxzZSBpZiAoW3VuZGVmaW5lZCwgbnVsbCwgXCJcIl0uaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG5cdFx0XHRrZXkgPSBgJHtwcm9wZXJ0eU5hbWV9LyR7dmFsdWV9YDtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkluZm8gPSB7XG5cdFx0XHRcdHRleHQ6IGZvcm1hdHRlZFRleHQsXG5cdFx0XHRcdGtleSxcblx0XHRcdFx0dGV4dEluZm86IHtcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogc291cmNlLmdldEFkZGl0aW9uYWxWYWx1ZSgpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uUGF0aDogdmFsdWVzICYmIHZhbHVlcy50ZXh0SW5mbyAmJiB2YWx1ZXMudGV4dEluZm8uZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0XHRcdGZ1bGxUZXh0OiBmb3JtYXR0ZWRUZXh0LFxuXHRcdFx0XHRcdHRleHRBcnJhbmdlbWVudDogc291cmNlLmdldERpc3BsYXkoKSxcblx0XHRcdFx0XHR2YWx1ZTogc291cmNlLmdldFZhbHVlKCksXG5cdFx0XHRcdFx0dmFsdWVQYXRoOiBwcm9wZXJ0eU5hbWVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHZhbHVlcy5wdXNoKHNlbGVjdGlvbkluZm8pO1xuXHRcdFx0dmFsdWVzLnNlbGVjdE9wdGlvbnMgPSB2YWx1ZXMuc2VsZWN0T3B0aW9ucyB8fCBbXTtcblx0XHRcdHZhbHVlcy5zZWxlY3RPcHRpb25zLnB1c2goc2VsZWN0aW9uSW5mbyk7XG5cdFx0XHRmaWVsZEluZm9Nb2RlbC5zZXRQcm9wZXJ0eShwcm9wUGF0aCArIHByb3BlcnR5TmFtZSwgdmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0a2V5ID0gYERlZmF1bHQvJHtwcm9wZXJ0eU5hbWV9YDtcblx0XHR9XG5cblx0XHRmaWVsZEluZm9Nb2RlbC5zZXRQcm9wZXJ0eShgJHtwcm9wUGF0aCArIHByb3BlcnR5TmFtZX0vc2VsZWN0ZWRLZXlgLCBrZXkpO1xuXHRcdE1hc3NFZGl0SGFuZGxlcnMuX3VwZGF0ZVJlc3VsdHMoY29tYm9Cb3gpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgVmFsdWUgZnJvbSBEcm9wIGRvd24uXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0gc291cmNlIERyb3AgZG93biBjb250cm9sLlxuXHQgKiBAcmV0dXJucyBWYWx1ZSBvZiBzZWxlY3Rpb24uXG5cdCAqL1xuXHRfZ2V0VmFsdWU6IGZ1bmN0aW9uIChzb3VyY2U6IENvbnRyb2wpIHtcblx0XHRyZXR1cm4gc291cmNlLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5mZS5jb3JlLmNvbnRyb2xzLk1hc3NFZGl0U2VsZWN0XCJcblx0XHRcdD8gKHNvdXJjZSBhcyBTZWxlY3QpLmdldFNlbGVjdGVkSXRlbSgpPy5nZXRUZXh0KClcblx0XHRcdDogKHNvdXJjZSBhcyBDb21ib0JveCkuZ2V0VmFsdWUoKTtcblx0fSxcblxuXHRfZ2V0VmFsdWVPbkVtcHR5OiBmdW5jdGlvbiAob1NvdXJjZTogYW55LCBmaWVsZHNJbmZvTW9kZWw6IEpTT05Nb2RlbCwgdmFsdWU6IGFueSwgc1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0Y29uc3QgdmFsdWVzID1cblx0XHRcdFx0ZmllbGRzSW5mb01vZGVsLmdldFByb3BlcnR5KGAvdmFsdWVzLyR7c1Byb3BlcnR5TmFtZX1gKSB8fCBmaWVsZHNJbmZvTW9kZWwuZ2V0UHJvcGVydHkoYC91bml0RGF0YS8ke3NQcm9wZXJ0eU5hbWV9YCkgfHwgW107XG5cdFx0XHRpZiAodmFsdWVzLnVuaXRQcm9wZXJ0eSkge1xuXHRcdFx0XHR2YWx1ZSA9IDA7XG5cdFx0XHRcdG9Tb3VyY2Uuc2V0VmFsdWUodmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZXMuaW5wdXRUeXBlID09PSBcIkNoZWNrQm94XCIpIHtcblx0XHRcdFx0dmFsdWUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXG5cdF92YWx1ZUV4aXN0czogZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcblx0XHRyZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkICYmIHZhbHVlICE9IG51bGw7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgc2VsZWN0aW9ucyB0byBydW50aW1lIG1vZGVsLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIG9Tb3VyY2UgRHJvcCBkb3duIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBhUGFyYW1zIFBhcnRzIG9mIGtleSBpbiBydW50aW1lIG1vZGVsLlxuXHQgKiBAcGFyYW0gdXBkYXRlVHJhbnNDdHggU2hvdWxkIHRyYW5zaWVudCBjb250ZXh0IGJlIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWUuXG5cdCAqL1xuXHRfdXBkYXRlUmVzdWx0czogZnVuY3Rpb24gKG9Tb3VyY2U6IGFueSwgYVBhcmFtczogQXJyYXk8c3RyaW5nPiA9IFtdLCB1cGRhdGVUcmFuc0N0eDogYm9vbGVhbikge1xuXHRcdC8vIENhbGxlZCBmb3Jcblx0XHQvLyAxLiBWSEQgcHJvcGVydHkgY2hhbmdlLlxuXHRcdC8vIDIuIE91dCBwYXJhbWV0ZXIuXG5cdFx0Ly8gMy4gdHJhbnNpZW50IGNvbnRleHQgcHJvcGVydHkgY2hhbmdlLlxuXHRcdGNvbnN0IGZpZWxkc0luZm9Nb2RlbCA9IG9Tb3VyY2UgJiYgb1NvdXJjZS5nZXRNb2RlbChcImZpZWxkc0luZm9cIik7XG5cdFx0Y29uc3Qgb0ZpZWxkc0luZm9EYXRhID0gZmllbGRzSW5mb01vZGVsICYmIGZpZWxkc0luZm9Nb2RlbC5nZXREYXRhKCk7XG5cdFx0bGV0IHZhbHVlID0gTWFzc0VkaXRIYW5kbGVycy5fZ2V0VmFsdWUob1NvdXJjZSBhcyBDb250cm9sKTtcblx0XHRhUGFyYW1zID0gYVBhcmFtcy5sZW5ndGggPiAwID8gYVBhcmFtcyA6IG9Tb3VyY2UgJiYgb1NvdXJjZS5nZXRTZWxlY3RlZEtleSgpICYmIG9Tb3VyY2UuZ2V0U2VsZWN0ZWRLZXkoKS5zcGxpdChcIi9cIik7XG5cblx0XHRsZXQgb0RhdGFPYmplY3Q7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IG9Tb3VyY2UuZ2V0SWQoKS5zdWJzdHJpbmcob1NvdXJjZS5nZXRJZCgpLmxhc3RJbmRleE9mKFwiOlwiKSArIDEpO1xuXG5cdFx0aWYgKGFQYXJhbXNbMF0gPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0XHRvRGF0YU9iamVjdCA9IHtcblx0XHRcdFx0a2V5VmFsdWU6IGFQYXJhbXNbMV0sXG5cdFx0XHRcdHZhbHVlOiBhUGFyYW1zWzBdXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoYVBhcmFtc1swXSA9PT0gXCJDbGVhckZpZWxkVmFsdWVcIikge1xuXHRcdFx0dmFsdWUgPSBcIlwiO1xuXHRcdFx0dmFsdWUgPSBNYXNzRWRpdEhhbmRsZXJzLl9nZXRWYWx1ZU9uRW1wdHkob1NvdXJjZSwgZmllbGRzSW5mb01vZGVsLCB2YWx1ZSwgc1Byb3BlcnR5TmFtZSk7XG5cdFx0XHRvRGF0YU9iamVjdCA9IHtcblx0XHRcdFx0a2V5VmFsdWU6IGFQYXJhbXNbMV0sXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKCFhUGFyYW1zKSB7XG5cdFx0XHR2YWx1ZSA9IE1hc3NFZGl0SGFuZGxlcnMuX2dldFZhbHVlT25FbXB0eShvU291cmNlLCBmaWVsZHNJbmZvTW9kZWwsIHZhbHVlLCBzUHJvcGVydHlOYW1lKTtcblx0XHRcdG9EYXRhT2JqZWN0ID0ge1xuXHRcdFx0XHRrZXlWYWx1ZTogc1Byb3BlcnR5TmFtZSxcblx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBhUGFyYW1zLnNsaWNlKDAsIC0xKS5qb2luKFwiL1wiKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWVzID1cblx0XHRcdFx0ZmllbGRzSW5mb01vZGVsLmdldFByb3BlcnR5KGAvdmFsdWVzLyR7cHJvcGVydHlOYW1lfWApIHx8IGZpZWxkc0luZm9Nb2RlbC5nZXRQcm9wZXJ0eShgL3VuaXREYXRhLyR7cHJvcGVydHlOYW1lfWApIHx8IFtdO1xuXG5cdFx0XHRjb25zdCByZWxhdGVkRmllbGQgPSAocHJvcGVydHlWYWx1ZXMgfHwgW10pLmZpbmQoZnVuY3Rpb24gKG9GaWVsZERhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0ZpZWxkRGF0YT8udGV4dEluZm8/LnZhbHVlID09PSB2YWx1ZSB8fCBvRmllbGREYXRhLnRleHQgPT09IHZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0XHRvRGF0YU9iamVjdCA9IHtcblx0XHRcdFx0a2V5VmFsdWU6IHByb3BlcnR5TmFtZSxcblx0XHRcdFx0dmFsdWU6XG5cdFx0XHRcdFx0cmVsYXRlZEZpZWxkLnRleHRJbmZvICYmIE1hc3NFZGl0SGFuZGxlcnMuX3ZhbHVlRXhpc3RzKHJlbGF0ZWRGaWVsZC50ZXh0SW5mby52YWx1ZSlcblx0XHRcdFx0XHRcdD8gcmVsYXRlZEZpZWxkLnRleHRJbmZvLnZhbHVlXG5cdFx0XHRcdFx0XHQ6IHJlbGF0ZWRGaWVsZC50ZXh0XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRsZXQgYkV4aXN0aW5nRWxlbWVudGluZGV4ID0gLTE7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvRmllbGRzSW5mb0RhdGEucmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKG9GaWVsZHNJbmZvRGF0YS5yZXN1bHRzW2ldLmtleVZhbHVlID09PSBvRGF0YU9iamVjdC5rZXlWYWx1ZSkge1xuXHRcdFx0XHRiRXhpc3RpbmdFbGVtZW50aW5kZXggPSBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYkV4aXN0aW5nRWxlbWVudGluZGV4ICE9PSAtMSkge1xuXHRcdFx0b0ZpZWxkc0luZm9EYXRhLnJlc3VsdHNbYkV4aXN0aW5nRWxlbWVudGluZGV4XSA9IG9EYXRhT2JqZWN0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvRmllbGRzSW5mb0RhdGEucmVzdWx0cy5wdXNoKG9EYXRhT2JqZWN0KTtcblx0XHR9XG5cdFx0aWYgKHVwZGF0ZVRyYW5zQ3R4ICYmICFvRGF0YU9iamVjdC5rZXlWYWx1ZS5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdGNvbnN0IHRyYW5zQ3R4ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0aWYgKGFQYXJhbXNbMF0gPT09IFwiRGVmYXVsdFwiIHx8IGFQYXJhbXNbMF0gPT09IFwiQ2xlYXJGaWVsZFZhbHVlXCIpIHtcblx0XHRcdFx0dHJhbnNDdHguc2V0UHJvcGVydHkob0RhdGFPYmplY3Qua2V5VmFsdWUsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChvRGF0YU9iamVjdCkge1xuXHRcdFx0XHR0cmFuc0N0eC5zZXRQcm9wZXJ0eShvRGF0YU9iamVjdC5rZXlWYWx1ZSwgb0RhdGFPYmplY3QudmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgTWFzc0VkaXRIYW5kbGVycztcbiJdfQ==
|