@sapui5/sap.fe.core 1.102.2 → 1.104.1
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 +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +73 -30
- package/src/sap/fe/core/AppComponent.ts +65 -43
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- 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 +227 -126
- package/src/sap/fe/core/CommonUtils.ts +240 -163
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- 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/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
- 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 +101 -74
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
- 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 +9 -9
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- 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 +170 -139
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
- 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 +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- 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 +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- 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 +7 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
- 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 +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- 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 +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
- 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 +64 -35
- package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
- 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 +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
- 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 +30 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
- package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
- package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
- package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
- 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 +77 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -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 +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -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 -5
- 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 +55 -42
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- 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 +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- 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/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -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 +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- 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 +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- 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 +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -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 +39 -63
- package/src/sap/fe/core/messagebundle_ar.properties +25 -39
- package/src/sap/fe/core/messagebundle_bg.properties +25 -39
- package/src/sap/fe/core/messagebundle_ca.properties +25 -39
- package/src/sap/fe/core/messagebundle_cs.properties +25 -39
- package/src/sap/fe/core/messagebundle_cy.properties +25 -39
- package/src/sap/fe/core/messagebundle_da.properties +25 -39
- package/src/sap/fe/core/messagebundle_de.properties +25 -39
- package/src/sap/fe/core/messagebundle_el.properties +26 -40
- package/src/sap/fe/core/messagebundle_en.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
- package/src/sap/fe/core/messagebundle_es.properties +27 -41
- package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
- package/src/sap/fe/core/messagebundle_et.properties +25 -39
- package/src/sap/fe/core/messagebundle_fi.properties +25 -39
- package/src/sap/fe/core/messagebundle_fr.properties +26 -40
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
- package/src/sap/fe/core/messagebundle_hi.properties +25 -39
- package/src/sap/fe/core/messagebundle_hr.properties +25 -39
- package/src/sap/fe/core/messagebundle_hu.properties +25 -39
- package/src/sap/fe/core/messagebundle_id.properties +25 -39
- package/src/sap/fe/core/messagebundle_it.properties +41 -55
- package/src/sap/fe/core/messagebundle_iw.properties +25 -39
- package/src/sap/fe/core/messagebundle_ja.properties +25 -39
- package/src/sap/fe/core/messagebundle_kk.properties +25 -39
- package/src/sap/fe/core/messagebundle_ko.properties +30 -44
- package/src/sap/fe/core/messagebundle_lt.properties +25 -39
- package/src/sap/fe/core/messagebundle_lv.properties +25 -39
- package/src/sap/fe/core/messagebundle_ms.properties +25 -39
- package/src/sap/fe/core/messagebundle_nl.properties +27 -41
- package/src/sap/fe/core/messagebundle_no.properties +25 -39
- package/src/sap/fe/core/messagebundle_pl.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
- package/src/sap/fe/core/messagebundle_ro.properties +25 -39
- package/src/sap/fe/core/messagebundle_ru.properties +25 -39
- package/src/sap/fe/core/messagebundle_sh.properties +25 -39
- package/src/sap/fe/core/messagebundle_sk.properties +25 -39
- package/src/sap/fe/core/messagebundle_sl.properties +25 -39
- package/src/sap/fe/core/messagebundle_sv.properties +25 -39
- package/src/sap/fe/core/messagebundle_th.properties +25 -39
- package/src/sap/fe/core/messagebundle_tr.properties +25 -39
- package/src/sap/fe/core/messagebundle_uk.properties +25 -39
- package/src/sap/fe/core/messagebundle_vi.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
- 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 +97 -69
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- 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 +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
- 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 +224 -198
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
- 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 +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- 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 +16 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- 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 +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- 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/helpers/BindingExpression.js +0 -1732
|
@@ -16,8 +16,8 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
16
16
|
* Identifies if the given dataFieldAbstract that is passed is a "DataFieldForActionAbstract".
|
|
17
17
|
* DataFieldForActionAbstract has an inline action defined.
|
|
18
18
|
*
|
|
19
|
-
* @param
|
|
20
|
-
* @returns
|
|
19
|
+
* @param dataField DataField to be evaluated
|
|
20
|
+
* @returns Validates that dataField is a DataFieldForActionAbstractType
|
|
21
21
|
*/
|
|
22
22
|
function isDataFieldForActionAbstract(dataField) {
|
|
23
23
|
return dataField.hasOwnProperty("Action");
|
|
@@ -26,8 +26,8 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
26
26
|
* Identifies if the given dataFieldAbstract that is passed is a "DataField".
|
|
27
27
|
* DataField has a value defined.
|
|
28
28
|
*
|
|
29
|
-
* @param
|
|
30
|
-
* @returns
|
|
29
|
+
* @param dataField DataField to be evaluated
|
|
30
|
+
* @returns Validate that dataField is a DataFieldTypes
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
33
|
|
|
@@ -39,8 +39,8 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
39
39
|
/**
|
|
40
40
|
* Returns whether given DataField has a static hidden annotation.
|
|
41
41
|
*
|
|
42
|
-
* @param
|
|
43
|
-
* @returns
|
|
42
|
+
* @param dataField The DataField to check
|
|
43
|
+
* @returns `true` if DataField or referenced property has a static Hidden annotation, false else
|
|
44
44
|
* @private
|
|
45
45
|
*/
|
|
46
46
|
|
|
@@ -82,7 +82,7 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
82
82
|
* Returns the navigation path prefix for a property path.
|
|
83
83
|
*
|
|
84
84
|
* @param path The property path For e.g. /EntityType/Navigation/Property
|
|
85
|
-
* @returns
|
|
85
|
+
* @returns The navigation path prefix For e.g. /EntityType/Navigation/
|
|
86
86
|
*/
|
|
87
87
|
|
|
88
88
|
|
|
@@ -100,7 +100,7 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
100
100
|
* @param navigationPathPrefix Navigation path prefix, applicable in case of navigation properties.
|
|
101
101
|
* @param tableType Table type.
|
|
102
102
|
* @param relatedProperties The related properties identified so far.
|
|
103
|
-
* @returns
|
|
103
|
+
* @returns The related properties identified.
|
|
104
104
|
*/
|
|
105
105
|
|
|
106
106
|
|
|
@@ -129,7 +129,7 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
129
129
|
* @param tableType The table type.
|
|
130
130
|
* @param relatedProperties The related properties identified so far.
|
|
131
131
|
* @param addUnitInTemplate True if the unit/currency property needs to be added in the export template
|
|
132
|
-
* @returns
|
|
132
|
+
* @returns The related properties identified.
|
|
133
133
|
*/
|
|
134
134
|
|
|
135
135
|
|
|
@@ -225,6 +225,7 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
225
225
|
_appendTemplate("{".concat(descriptionIndex, "} ({").concat(valueIndex, "})"));
|
|
226
226
|
|
|
227
227
|
break;
|
|
228
|
+
// no default
|
|
228
229
|
}
|
|
229
230
|
} else {
|
|
230
231
|
var _property$annotations5, _property$annotations6, _property$annotations7, _property$annotations8, _property$annotations9, _property$annotations10, _property$Target, _property$Target$$tar, _property$annotations11, _property$annotations12, _property$annotations13, _property$annotations14, _property$annotations15, _property$Target2, _property$Target2$$ta;
|
|
@@ -310,12 +311,12 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
310
311
|
* Collect properties consumed by a DataField.
|
|
311
312
|
* This is for populating the ComplexPropertyInfos of the table delegate.
|
|
312
313
|
*
|
|
313
|
-
* @param
|
|
314
|
+
* @param dataField The DataField for which the properties need to be identified.
|
|
314
315
|
* @param converterContext The converter context.
|
|
315
|
-
* @param
|
|
316
|
-
* @param
|
|
317
|
-
* @param
|
|
318
|
-
* @returns
|
|
316
|
+
* @param tableType The table type.
|
|
317
|
+
* @param relatedProperties The properties identified so far.
|
|
318
|
+
* @param isEmbedded True if the DataField is embedded in another annotation (e.g. FieldGroup).
|
|
319
|
+
* @returns The properties related to the DataField.
|
|
319
320
|
*/
|
|
320
321
|
|
|
321
322
|
|
|
@@ -330,29 +331,48 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
330
331
|
};
|
|
331
332
|
var isEmbedded = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
332
333
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
334
|
+
switch (dataField === null || dataField === void 0 ? void 0 : dataField.$Type) {
|
|
335
|
+
case "com.sap.vocabularies.UI.v1.DataField":
|
|
336
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithUrl":
|
|
337
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath":
|
|
338
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation":
|
|
339
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithAction":
|
|
340
|
+
var property = dataField.Value;
|
|
341
|
+
relatedProperties = collectRelatedProperties(property.path, property.$target, converterContext, false, tableType, relatedProperties, isEmbedded);
|
|
336
342
|
|
|
337
|
-
|
|
343
|
+
var navigationPathPrefix = _getNavigationPathPrefix(property.path);
|
|
338
344
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
switch ((_dataField$Target = dataField.Target) === null || _dataField$Target === void 0 ? void 0 : (_dataField$Target$$ta = _dataField$Target.$target) === null || _dataField$Target$$ta === void 0 ? void 0 : _dataField$Target$$ta.$Type) {
|
|
342
|
-
case "com.sap.vocabularies.UI.v1.FieldGroupType":
|
|
343
|
-
(_dataField$Target$$ta2 = dataField.Target.$target.Data) === null || _dataField$Target$$ta2 === void 0 ? void 0 : _dataField$Target$$ta2.forEach(function (innerDataField) {
|
|
344
|
-
relatedProperties = collectRelatedPropertiesRecursively(innerDataField, converterContext, tableType, relatedProperties, true);
|
|
345
|
-
});
|
|
346
|
-
break;
|
|
345
|
+
relatedProperties = _collectAdditionalPropertiesForAnalyticalTable(dataField, navigationPathPrefix, tableType, relatedProperties);
|
|
346
|
+
break;
|
|
347
347
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
348
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForAction":
|
|
349
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation":
|
|
350
|
+
break;
|
|
351
351
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
352
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForAnnotation":
|
|
353
|
+
switch ((_dataField$Target = dataField.Target) === null || _dataField$Target === void 0 ? void 0 : (_dataField$Target$$ta = _dataField$Target.$target) === null || _dataField$Target$$ta === void 0 ? void 0 : _dataField$Target$$ta.$Type) {
|
|
354
|
+
case "com.sap.vocabularies.UI.v1.FieldGroupType":
|
|
355
|
+
(_dataField$Target$$ta2 = dataField.Target.$target.Data) === null || _dataField$Target$$ta2 === void 0 ? void 0 : _dataField$Target$$ta2.forEach(function (innerDataField) {
|
|
356
|
+
relatedProperties = collectRelatedPropertiesRecursively(innerDataField, converterContext, tableType, relatedProperties, true);
|
|
357
|
+
});
|
|
358
|
+
break;
|
|
359
|
+
|
|
360
|
+
case "com.sap.vocabularies.UI.v1.DataPointType":
|
|
361
|
+
relatedProperties = collectRelatedProperties(dataField.Target.$target.Value.path, dataField, converterContext, false, tableType, relatedProperties, isEmbedded);
|
|
362
|
+
break;
|
|
363
|
+
|
|
364
|
+
case "com.sap.vocabularies.Communication.v1.ContactType":
|
|
365
|
+
relatedProperties = collectRelatedProperties(dataField.Target.value, dataField, converterContext, false, tableType, relatedProperties, isEmbedded);
|
|
366
|
+
break;
|
|
367
|
+
|
|
368
|
+
default:
|
|
369
|
+
break;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
break;
|
|
373
|
+
|
|
374
|
+
default:
|
|
375
|
+
break;
|
|
356
376
|
}
|
|
357
377
|
|
|
358
378
|
return relatedProperties;
|
|
@@ -395,8 +415,11 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
395
415
|
|
|
396
416
|
sDataType = ((_Target5 = oDataField.Target) === null || _Target5 === void 0 ? void 0 : (_Target5$$target = _Target5.$target) === null || _Target5$$target === void 0 ? void 0 : (_Target5$$target$Valu = _Target5$$target.Value) === null || _Target5$$target$Valu === void 0 ? void 0 : (_Target5$$target$Valu2 = _Target5$$target$Valu.$Path) === null || _Target5$$target$Valu2 === void 0 ? void 0 : _Target5$$target$Valu2.$Type) || ((_Target6 = oDataField.Target) === null || _Target6 === void 0 ? void 0 : (_Target6$$target = _Target6.$target) === null || _Target6$$target === void 0 ? void 0 : (_Target6$$target$Valu = _Target6$$target.Value) === null || _Target6$$target$Valu === void 0 ? void 0 : _Target6$$target$Valu.$target.type);
|
|
397
417
|
} else {
|
|
418
|
+
var _Target7;
|
|
419
|
+
|
|
398
420
|
// e.g. FieldGroup or Chart
|
|
399
|
-
|
|
421
|
+
// FieldGroup Properties have no type, so we define it as a boolean type to prevent exceptions during the calculation of the width
|
|
422
|
+
sDataType = ((_Target7 = oDataField.Target) === null || _Target7 === void 0 ? void 0 : _Target7.$target.$Type) === "com.sap.vocabularies.UI.v1.ChartDefinitionType" ? undefined : "Edm.Boolean";
|
|
400
423
|
}
|
|
401
424
|
} else {
|
|
402
425
|
sDataType = undefined;
|
|
@@ -411,4 +434,4 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
|
|
|
411
434
|
_exports.getDataFieldDataType = getDataFieldDataType;
|
|
412
435
|
return _exports;
|
|
413
436
|
}, false);
|
|
414
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFGaWVsZC50cyJdLCJuYW1lcyI6WyJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiZGF0YUZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJpc0RhdGFGaWVsZFR5cGVzIiwiaXNEYXRhRmllbGRBbHdheXNIaWRkZW4iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwidmFsdWVPZiIsIlZhbHVlIiwiJHRhcmdldCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJvYmplY3QiLCJwcm9wZXJ0eSIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwidW5kZWZpbmVkIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzUHJvcGVydHkiLCJfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgiLCJwYXRoIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZSIsInRhcmdldCIsIm5hdmlnYXRpb25QYXRoUHJlZml4IiwidGFibGVUeXBlIiwicmVsYXRlZFByb3BlcnRpZXMiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiX3R5cGUiLCJoaWRkZW5Bbm5vdGF0aW9uUHJvcGVydHlQYXRoIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJpZ25vcmVTZWxmIiwicHJvcGVydGllcyIsImFkZFVuaXRJblRlbXBsYXRlIiwiX3B1c2hVbmlxdWUiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJfYXBwZW5kVGVtcGxhdGUiLCJleHBvcnRTZXR0aW5nc1RlbXBsYXRlIiwidGV4dEFubm90YXRpb24iLCJUZXh0IiwidmFsdWVJbmRleCIsInRhcmdldFZhbHVlIiwiY3VycmVuY3lPclVvTUluZGV4IiwidGltZXpvbmVPclVvTUluZGV4IiwiZXhwb3J0U2V0dGluZ3NXcmFwcGluZyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGgiLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwiZGVzY3JpcHRpb25JbmRleCIsInZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkIiwiY3VycmVuY3lPclVvTVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwiY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJ0aW1lem9uZVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkiLCJ0aW1lem9uZUFubm90YXRpb24iLCJUaW1lem9uZSIsIm5hbWUiLCJleHBvcnRVbml0TmFtZSIsImV4cG9ydFRpbWV6b25lTmFtZSIsIlRhcmdldCIsIlZpc3VhbGl6YXRpb24iLCJkYXRhUG9pbnRQcm9wZXJ0eSIsIlRhcmdldFZhbHVlIiwiTWF4aW11bVZhbHVlIiwidG9TdHJpbmciLCJEYXRhRmllbGREZWZhdWx0IiwiJFR5cGUiLCJkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkiLCJleHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eSIsImZuIiwiZXhwb3J0VW5pdFN0cmluZyIsImV4cG9ydFRpbWV6b25lU3RyaW5nIiwibGVuZ3RoIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJpc0VtYmVkZGVkIiwiRGF0YSIsImZvckVhY2giLCJpbm5lckRhdGFGaWVsZCIsImdldERhdGFGaWVsZERhdGFUeXBlIiwib0RhdGFGaWVsZCIsInNEYXRhVHlwZSIsInR5cGUiLCJzRGF0YVR5cGVGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiJFBhdGgiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FB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LE9BQWpELHFEQUFDLGlCQUFxRTBFLEVBQXRFLEVBQWlGMUUsT0FBcEYsNkNBQUcsU0FBMEZzRixJQUF0RztBQUNBLFdBRkQsTUFFTyxJQUFJLGFBQUNGLFVBQUQsQ0FBdUNwQixNQUF2QyxzREFBK0NoRSxPQUEvQyxDQUF1RHVFLEtBQXZELGdEQUFKLEVBQXNHO0FBQUE7O0FBQzVHYyxZQUFBQSxTQUFTLEdBQ1IsYUFBRUQsVUFBRCxDQUF1Q3BCLE1BQXhDLGlFQUFDLFNBQStDaEUsT0FBaEQsK0ZBQXVFRCxLQUF2RSwwR0FBOEV5RixLQUE5RSxrRkFBcUZqQixLQUFyRixrQkFDRWEsVUFBRCxDQUF1Q3BCLE1BRHhDLGlFQUNDLFNBQStDaEUsT0FEaEQsOEVBQ0EsaUJBQXVFRCxLQUR2RSwwREFDQSxzQkFBOEVDLE9BQTlFLENBQXNGc0YsSUFEdEYsQ0FERDtBQUdBLFdBSk0sTUFJQTtBQUNOO0FBQ0FELFlBQUFBLFNBQVMsR0FBRzlFLFNBQVo7QUFDQTtBQUNELFNBWEQsTUFXTztBQUNOOEUsVUFBQUEsU0FBUyxHQUFHOUUsU0FBWjtBQUNBOztBQUNEO0FBL0JGOztBQWtDQSxXQUFPOEUsU0FBUDtBQUNBLEdBckNNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHRDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzLFxuXHRDb250YWN0LFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhUG9pbnQsXG5cdFVJQW5ub3RhdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0ICogYXMgRWRtIGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L0VkbVwiO1xuaW1wb3J0IHsgVGFibGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSwgUHJvcGVydHlPclBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRpc1Byb3BlcnR5XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuXG5leHBvcnQgdHlwZSBDb21wbGV4UHJvcGVydHlJbmZvID0ge1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT47XG5cdGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT47XG5cdGV4cG9ydFNldHRpbmdzVGVtcGxhdGU/OiBzdHJpbmc7XG5cdGV4cG9ydFNldHRpbmdzV3JhcHBpbmc/OiBib29sZWFuO1xuXHRleHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eT86IHN0cmluZztcblx0dmlzdWFsU2V0dGluZ3NUb0JlRXhjbHVkZWQ/OiBzdHJpbmc7XG5cdGV4cG9ydFVuaXROYW1lPzogc3RyaW5nO1xuXHRleHBvcnRVbml0U3RyaW5nPzogc3RyaW5nO1xuXHRleHBvcnRUaW1lem9uZU5hbWU/OiBzdHJpbmc7XG5cdGV4cG9ydFRpbWV6b25lU3RyaW5nPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBJZGVudGlmaWVzIGlmIHRoZSBnaXZlbiBkYXRhRmllbGRBYnN0cmFjdCB0aGF0IGlzIHBhc3NlZCBpcyBhIFwiRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RcIi5cbiAqIERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IGhhcyBhbiBpbmxpbmUgYWN0aW9uIGRlZmluZWQuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgRGF0YUZpZWxkIHRvIGJlIGV2YWx1YXRlZFxuICogQHJldHVybnMge2Jvb2xlYW59IFZhbGlkYXRlcyB0aGF0IGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlcyB7XG5cdHJldHVybiAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMpLmhhc093blByb3BlcnR5KFwiQWN0aW9uXCIpO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgaWYgdGhlIGdpdmVuIGRhdGFGaWVsZEFic3RyYWN0IHRoYXQgaXMgcGFzc2VkIGlzIGEgXCJEYXRhRmllbGRcIi5cbiAqIERhdGFGaWVsZCBoYXMgYSB2YWx1ZSBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERhdGFGaWVsZCB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBWYWxpZGF0ZSB0aGF0IGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZFR5cGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRUeXBlcyB7XG5cdHJldHVybiAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5oYXNPd25Qcm9wZXJ0eShcIlZhbHVlXCIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBnaXZlbiBEYXRhRmllbGQgaGFzIGEgc3RhdGljIGhpZGRlbiBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIFRoZSBkYXRhZmllbGQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgZGF0YWZpZWxkIG9yIHJlZmVyZW5jZWQgcHJvcGVydHkgaGFzIGEgc3RhdGljIEhpZGRlbiBhbm5vdGF0aW9uLCBmYWxzZSBlbHNlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhRmllbGRBbHdheXNIaWRkZW4oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUgfHxcblx0XHQoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpICYmIGRhdGFGaWVsZC5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gPT09IHRydWUpXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgb2JqZWN0OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAodHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdGlmIChpc0RhdGFGaWVsZFR5cGVzKG9iamVjdCkgJiYgb2JqZWN0LlZhbHVlPy4kdGFyZ2V0KSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IG9iamVjdC5WYWx1ZT8uJHRhcmdldDtcblx0XHRcdGlmIChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5Py5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNQcm9wZXJ0eShvYmplY3QpKSB7XG5cdFx0XHRpZiAob2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgob2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hdmlnYXRpb24gcGF0aCBwcmVmaXggZm9yIGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCBGb3IgZS5nLiAvRW50aXR5VHlwZS9OYXZpZ2F0aW9uL1Byb3BlcnR5XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmF2aWdhdGlvbiBwYXRoIHByZWZpeCBGb3IgZS5nLiAvRW50aXR5VHlwZS9OYXZpZ2F0aW9uL1xuICovXG5mdW5jdGlvbiBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHBhdGguaW5kZXhPZihcIi9cIikgPiAtMSA/IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgOiBcIlwiO1xufVxuXG4vKipcbiAqIENvbGxlY3QgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciB0aGUgQUxQIHRhYmxlIHVzZS1jYXNlLlxuICpcbiAqIEZvciBlLmcuIElmIFVJLkhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSwgaW5jbHVkZSB0aGlzIHByb3BlcnR5IGluIHRoZSBhZGRpdGlvbmFsUHJvcGVydGllcyBvZiBDb21wbGV4UHJvcGVydHlJbmZvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFByb3BlcnR5IG9yIERhdGFGaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUGF0aFByZWZpeCBOYXZpZ2F0aW9uIHBhdGggcHJlZml4LCBhcHBsaWNhYmxlIGluIGNhc2Ugb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHRhYmxlVHlwZSBUYWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5mdW5jdGlvbiBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKFxuXHR0YXJnZXQ6IEVkbS5QcmltaXRpdmVUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aFByZWZpeDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHRpZiAodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvbiA9IHRhcmdldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvbj8ucGF0aCAmJiBoaWRkZW5Bbm5vdGF0aW9uLiR0YXJnZXQ/Ll90eXBlID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdGNvbnN0IGhpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIGhpZGRlbkFubm90YXRpb24ucGF0aDtcblx0XHRcdC8vIFRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGFkZGVkIHRvIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIG1hcCBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW2hpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGhdID0gaGlkZGVuQW5ub3RhdGlvbi4kdGFyZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogQ29sbGVjdCByZWxhdGVkIHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5J3MgYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaWdub3JlU2VsZiBXaGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIHNhbWUgcHJvcGVydHkgZnJvbSByZWxhdGVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gYWRkVW5pdEluVGVtcGxhdGUgVHJ1ZSBpZiB0aGUgdW5pdC9jdXJyZW5jeSBwcm9wZXJ0eSBuZWVkcyB0byBiZSBhZGRlZCBpbiB0aGUgZXhwb3J0IHRlbXBsYXRlXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRwYXRoOiBzdHJpbmcsXG5cdHByb3BlcnR5OiBFZG0uUHJpbWl0aXZlVHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aWdub3JlU2VsZjogYm9vbGVhbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvID0geyBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHt9IH0sXG5cdGFkZFVuaXRJblRlbXBsYXRlOiBib29sZWFuID0gZmFsc2Vcbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHQvKipcblx0ICogSGVscGVyIHRvIHB1c2ggdW5pcXVlIHJlbGF0ZWQgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIGtleSBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnRpZXMgb2JqZWN0IGNvbnRhaW5pbmcgdmFsdWUgcHJvcGVydHksIGRlc2NyaXB0aW9uIHByb3BlcnR5Li4uXG5cdCAqIEByZXR1cm5zIEluZGV4IGF0IHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhdmFpbGFibGVcblx0ICovXG5cdGZ1bmN0aW9uIF9wdXNoVW5pcXVlKGtleTogc3RyaW5nLCB2YWx1ZTogUHJvcGVydHkpOiBudW1iZXIge1xuXHRcdGlmICghcmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmluZGV4T2Yoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgdG8gYXBwZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgdGVtcGxhdGUgd2l0aCBhIGZvcm1hdHRlZCB0ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgRm9ybWF0dGVkIHRleHRcblx0ICovXG5cdGZ1bmN0aW9uIF9hcHBlbmRUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzVGVtcGxhdGVcblx0XHRcdD8gYCR7cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZX0ke3ZhbHVlfWBcblx0XHRcdDogYCR7dmFsdWV9YDtcblx0fVxuXG5cdGlmIChwYXRoICYmIHByb3BlcnR5KSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGhQcmVmaXggPSBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocGF0aCk7XG5cblx0XHQvLyBDaGVjayBmb3IgVGV4dCBhbm5vdGF0aW9uLlxuXHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRsZXQgdmFsdWVJbmRleDogbnVtYmVyO1xuXHRcdGxldCB0YXJnZXRWYWx1ZTogc3RyaW5nO1xuXHRcdGxldCBjdXJyZW5jeU9yVW9NSW5kZXg6IG51bWJlcjtcblx0XHRsZXQgdGltZXpvbmVPclVvTUluZGV4OiBudW1iZXI7XG5cblx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSkge1xuXHRcdFx0Ly8gRmllbGRHcm91cCB1c2UtY2FzZS4gTmVlZCB0byBhZGQgZWFjaCBGaWVsZCBpbiBuZXcgbGluZS5cblx0XHRcdF9hcHBlbmRUZW1wbGF0ZShcIlxcblwiKTtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzV3JhcHBpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0ZXh0QW5ub3RhdGlvbj8ucGF0aCAmJiB0ZXh0QW5ub3RhdGlvbj8uJHRhcmdldCkge1xuXHRcdFx0Ly8gQ2hlY2sgZm9yIFRleHQgQXJyYW5nZW1lbnQuXG5cdFx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdFx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25QYXRoUHJlZml4ICsgdGV4dEFubm90YXRpb24ucGF0aDtcblx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUocHJvcGVydHkgYXMgUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRcdGxldCBkZXNjcmlwdGlvbkluZGV4OiBudW1iZXI7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHQvLyBLZWVwIHZhbHVlIHdoZW4gZXhwb3J0aW5nIChzcGxpdCBtb2RlKSBvbiB0ZXh0IEFycmFuZ2VtZW50IGRlZmluZWQgYXMgI1RleHRPbmx5IChPbmx5IHZhbHVlcyBhcmUgZXhwZWN0ZWQgb24gcGFzdGUgZnJvbSBFeGNlbCBmdW5jdGlvbmFsaXR5KVxuXHRcdFx0XHRcdF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0XHRkZXNjcmlwdGlvbkluZGV4ID0gX3B1c2hVbmlxdWUodGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGgsIHRleHRBbm5vdGF0aW9uLiR0YXJnZXQpO1xuXHRcdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7ZGVzY3JpcHRpb25JbmRleH19YCk7XG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMudmlzdWFsU2V0dGluZ3NUb0JlRXhjbHVkZWQgPSBwYXRoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0XHRkZXNjcmlwdGlvbkluZGV4ID0gX3B1c2hVbmlxdWUodGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGgsIHRleHRBbm5vdGF0aW9uLiR0YXJnZXQpO1xuXHRcdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19ICh7JHtkZXNjcmlwdGlvbkluZGV4fX0pYCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uSW5kZXggPSBfcHVzaFVuaXF1ZSh0ZXh0QW5ub3RhdGlvblByb3BlcnR5UGF0aCwgdGV4dEFubm90YXRpb24uJHRhcmdldCk7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHtkZXNjcmlwdGlvbkluZGV4fX0gKHske3ZhbHVlSW5kZXh9fSlgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2hlY2sgZm9yIGZpZWxkIGNvbnRhaW5pbmcgQ3VycmVuY3kgT3IgVW5pdCBQcm9wZXJ0aWVzIG9yIFRpbWV6b25lXG5cdFx0XHRjb25zdCBjdXJyZW5jeU9yVW9NUHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCBjdXJyZW5jeU9yVW5pdEFubm90YXRpb24gPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdFx0Y29uc3QgdGltZXpvbmVQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRcdGNvbnN0IHRpbWV6b25lQW5ub3RhdGlvbiA9IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblxuXHRcdFx0aWYgKGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSAmJiBjdXJyZW5jeU9yVW5pdEFubm90YXRpb24/LiR0YXJnZXQpIHtcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0Y3VycmVuY3lPclVvTUluZGV4ID0gX3B1c2hVbmlxdWUoY3VycmVuY3lPclVvTVByb3BlcnR5Lm5hbWUsIGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0aWYgKGFkZFVuaXRJblRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0gIHske2N1cnJlbmN5T3JVb01JbmRleH19YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0VW5pdE5hbWUgPSBjdXJyZW5jeU9yVW9NUHJvcGVydHkubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aW1lem9uZVByb3BlcnR5ICYmIHRpbWV6b25lQW5ub3RhdGlvbj8uJHRhcmdldCkge1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHR0aW1lem9uZU9yVW9NSW5kZXggPSBfcHVzaFVuaXF1ZSh0aW1lem9uZVByb3BlcnR5Lm5hbWUsIHRpbWV6b25lQW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0aWYgKGFkZFVuaXRJblRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0gIHske3RpbWV6b25lT3JVb01JbmRleH19YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0VGltZXpvbmVOYW1lID0gdGltZXpvbmVQcm9wZXJ0eS5uYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5LlRhcmdldD8uJHRhcmdldD8uVmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRjb25zdCBkYXRhUG9pbnRQcm9wZXJ0eTogRWRtLlByaW1pdGl2ZVR5cGUgPSBwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgZGF0YVBvaW50UHJvcGVydHkpO1xuXHRcdFx0XHQvLyBOZXcgZmFrZSBwcm9wZXJ0eSBjcmVhdGVkIGZvciB0aGUgUmF0aW5nL1Byb2dyZXNzIFRhcmdldCBWYWx1ZS4gSXQnbGwgYmUgdXNlZCBmb3IgdGhlIGV4cG9ydCBvbiBzcGxpdCBtb2RlLlxuXHRcdFx0XHRfcHVzaFVuaXF1ZShwcm9wZXJ0eS5UYXJnZXQudmFsdWUsIHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0KTtcblx0XHRcdFx0dGFyZ2V0VmFsdWUgPSAocHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuVGFyZ2V0VmFsdWUgfHwgcHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuTWF4aW11bVZhbHVlKS50b1N0cmluZygpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fS8ke3RhcmdldFZhbHVlfWApO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0Ly8gRGF0YVBvaW50IHVzZS1jYXNlIHVzaW5nIERhdGFGaWVsZERlZmF1bHQuXG5cdFx0XHRcdGNvbnN0IGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eTogRWRtLlByaW1pdGl2ZVR5cGUgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5VSS5EYXRhRmllbGREZWZhdWx0O1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHQvLyBOZXcgZmFrZSBwcm9wZXJ0eSBjcmVhdGVkIGZvciB0aGUgUmF0aW5nL1Byb2dyZXNzIFRhcmdldCBWYWx1ZS4gSXQnbGwgYmUgdXNlZCBmb3IgdGhlIGV4cG9ydCBvbiBzcGxpdCBtb2RlLlxuXHRcdFx0XHRfcHVzaFVuaXF1ZShkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkuVGFyZ2V0LnZhbHVlLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdHRhcmdldFZhbHVlID0gKFxuXHRcdFx0XHRcdGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5UYXJnZXRWYWx1ZSB8fCBkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuVGFyZ2V0VmFsdWUuTWF4aW11bVZhbHVlXG5cdFx0XHRcdCkudG9TdHJpbmcoKTtcblx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0vJHt0YXJnZXRWYWx1ZX1gKTtcblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCIpIHtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHkgPVxuXHRcdFx0XHRcdHByb3BlcnR5LlRhcmdldC52YWx1ZS5zdWJzdHJpbmcoMCwgcHJvcGVydHkuVGFyZ2V0LnZhbHVlLmluZGV4T2YoXCIvXCIpICsgMSkgKyBwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5mbj8ucGF0aDtcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LmZuLiR0YXJnZXQpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0fSBlbHNlIGlmICghaWdub3JlU2VsZikge1xuXHRcdFx0XHQvLyBDb2xsZWN0IHVuZGVybHlpbmcgcHJvcGVydHlcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdFx0aWYgKGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFVuaXRTdHJpbmcgPSBgJHtjdXJyZW5jeU9yVW5pdEFubm90YXRpb259YDsgLy8gSGFyZC1jb2RlZCBjdXJyZW5jeS91bml0XG5cdFx0XHRcdH0gZWxzZSBpZiAodGltZXpvbmVBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0VGltZXpvbmVTdHJpbmcgPSBgJHt0aW1lem9uZUFubm90YXRpb259YDsgLy8gSGFyZC1jb2RlZCB0aW1lem9uZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKHByb3BlcnR5LCBuYXZpZ2F0aW9uUGF0aFByZWZpeCwgdGFibGVUeXBlLCByZWxhdGVkUHJvcGVydGllcyk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKS5sZW5ndGggPiAwICYmIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gQ29sbGVjdCB1bmRlcmx5aW5nIHByb3BlcnR5IGlmIG5vdCBjb2xsZWN0ZWQgYWxyZWFkeS5cblx0XHRcdC8vIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYWRkaXRpb25hbFByb3BlcnRpZXMgYXJlIG1hZGUgYXZhaWxhYmxlIG9ubHkgdG8gY29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBDb2xsZWN0IHByb3BlcnRpZXMgY29uc3VtZWQgYnkgYSBEYXRhRmllbGQuXG4gKiBUaGlzIGlzIGZvciBwb3B1bGF0aW5nIHRoZSBDb21wbGV4UHJvcGVydHlJbmZvcyBvZiB0aGUgdGFibGUgZGVsZWdhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgVGhlIERhdGFGaWVsZCBmb3Igd2hpY2ggdGhlIHByb3BlcnRpZXMgbmVlZCB0byBiZSBpZGVudGlmaWVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHtUYWJsZVR5cGV9IHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEBwYXJhbSB7Q29tcGxleFByb3BlcnR5SW5mb30gcmVsYXRlZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRW1iZWRkZWQgVHJ1ZSBpZiB0aGUgZGF0YWZpZWxkIGlzIGVtYmVkZGVkIGluIGFub3RoZXIgYW5ub3RhdGlvbiAoZS5nLiBGaWVsZEdyb3VwKS5cbiAqIEByZXR1cm5zIHtDb21wbGV4UHJvcGVydHlJbmZvfSBUaGUgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZSBEYXRhRmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseShcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm8gPSB7IHByb3BlcnRpZXM6IHt9LCBhZGRpdGlvbmFsUHJvcGVydGllczoge30gfSxcblx0aXNFbWJlZGRlZDogYm9vbGVhbiA9IGZhbHNlXG4pOiBDb21wbGV4UHJvcGVydHlJbmZvIHtcblx0aWYgKChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fCBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwpICYmIGRhdGFGaWVsZC5WYWx1ZSkge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YUZpZWxkLlZhbHVlO1xuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0cHJvcGVydHkucGF0aCxcblx0XHRcdHByb3BlcnR5LiR0YXJnZXQsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdGlzRW1iZWRkZWRcblx0XHQpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoUHJlZml4ID0gX2dldE5hdmlnYXRpb25QYXRoUHJlZml4KHByb3BlcnR5LnBhdGgpO1xuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZShkYXRhRmllbGQsIG5hdmlnYXRpb25QYXRoUHJlZml4LCB0YWJsZVR5cGUsIHJlbGF0ZWRQcm9wZXJ0aWVzKTtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlOlxuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdFx0aW5uZXJEYXRhRmllbGQsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS5wYXRoLFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRpc0VtYmVkZGVkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiOlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRpc0VtYmVkZGVkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IGdldERhdGFGaWVsZERhdGFUeXBlID0gZnVuY3Rpb24gKG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzRGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXMpLiRUeXBlO1xuXHRzd2l0Y2ggKHNEYXRhVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHNEYXRhVHlwZSA9IChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnN0IHNEYXRhVHlwZUZvckRhdGFGaWVsZEZvckFubm90YXRpb24gPSAob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQuJFR5cGU7XG5cdFx0XHRpZiAoc0RhdGFUeXBlRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdFx0XHRpZiAoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0LiRUeXBlID09PSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzLkNvbnRhY3RUeXBlKSB7XG5cdFx0XHRcdFx0c0RhdGFUeXBlID0gKCgob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQgYXMgQ29udGFjdCk/LmZuIGFzIGFueSkuJHRhcmdldD8udHlwZTtcblx0XHRcdFx0fSBlbHNlIGlmICgob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRzRGF0YVR5cGUgPVxuXHRcdFx0XHRcdFx0KChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJFBhdGg/LiRUeXBlIHx8XG5cdFx0XHRcdFx0XHQoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy4kdGFyZ2V0LnR5cGU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiBzRGF0YVR5cGU7XG59O1xuIl19
|
|
437
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFGaWVsZC50cyJdLCJuYW1lcyI6WyJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiZGF0YUZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJpc0RhdGFGaWVsZFR5cGVzIiwiaXNEYXRhRmllbGRBbHdheXNIaWRkZW4iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwidmFsdWVPZiIsIlZhbHVlIiwiJHRhcmdldCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJvYmplY3QiLCJwcm9wZXJ0eSIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwidW5kZWZpbmVkIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzUHJvcGVydHkiLCJfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgiLCJwYXRoIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZSIsInRhcmdldCIsIm5hdmlnYXRpb25QYXRoUHJlZml4IiwidGFibGVUeXBlIiwicmVsYXRlZFByb3BlcnRpZXMiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiX3R5cGUiLCJoaWRkZW5Bbm5vdGF0aW9uUHJvcGVydHlQYXRoIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJpZ25vcmVTZWxmIiwicHJvcGVydGllcyIsImFkZFVuaXRJblRlbXBsYXRlIiwiX3B1c2hVbmlxdWUiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJfYXBwZW5kVGVtcGxhdGUiLCJleHBvcnRTZXR0aW5nc1RlbXBsYXRlIiwidGV4dEFubm90YXRpb24iLCJUZXh0IiwidmFsdWVJbmRleCIsInRhcmdldFZhbHVlIiwiY3VycmVuY3lPclVvTUluZGV4IiwidGltZXpvbmVPclVvTUluZGV4IiwiZXhwb3J0U2V0dGluZ3NXcmFwcGluZyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGgiLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwiZGVzY3JpcHRpb25JbmRleCIsInZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkIiwiY3VycmVuY3lPclVvTVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwiY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJ0aW1lem9uZVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkiLCJ0aW1lem9uZUFubm90YXRpb24iLCJUaW1lem9uZSIsIm5hbWUiLCJleHBvcnRVbml0TmFtZSIsImV4cG9ydFRpbWV6b25lTmFtZSIsIlRhcmdldCIsIlZpc3VhbGl6YXRpb24iLCJkYXRhUG9pbnRQcm9wZXJ0eSIsIlRhcmdldFZhbHVlIiwiTWF4aW11bVZhbHVlIiwidG9TdHJpbmciLCJEYXRhRmllbGREZWZhdWx0IiwiJFR5cGUiLCJkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkiLCJleHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eSIsImZuIiwiZXhwb3J0VW5pdFN0cmluZyIsImV4cG9ydFRpbWV6b25lU3RyaW5nIiwibGVuZ3RoIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJpc0VtYmVkZGVkIiwiRGF0YSIsImZvckVhY2giLCJpbm5lckRhdGFGaWVsZCIsImdldERhdGFGaWVsZERhdGFUeXBlIiwib0RhdGFGaWVsZCIsInNEYXRhVHlwZSIsInR5cGUiLCJzRGF0YVR5cGVGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiJFBhdGgiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O0FB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REFBQyxpQkFBcUUwRSxFQUF0RSxFQUFpRjFFLE9BQXBGLDZDQUFHLFNBQTBGc0YsSUFBdEc7QUFDQSxXQUZELE1BRU8sSUFBSSxhQUFDRixVQUFELENBQXVDcEIsTUFBdkMsc0RBQStDaEUsT0FBL0MsQ0FBdUR1RSxLQUF2RCxnREFBSixFQUFzRztBQUFBOztBQUM1R2MsWUFBQUEsU0FBUyxHQUNSLGFBQUVELFVBQUQsQ0FBdUNwQixNQUF4QyxpRUFBQyxTQUErQ2hFLE9BQWhELCtGQUF1RUQsS0FBdkUsMEdBQThFeUYsS0FBOUUsa0ZBQXFGakIsS0FBckYsa0JBQ0VhLFVBQUQsQ0FBdUNwQixNQUR4QyxpRUFDQyxTQUErQ2hFLE9BRGhELDhFQUNBLGlCQUF1RUQsS0FEdkUsMERBQ0Esc0JBQThFQyxPQUE5RSxDQUFzRnNGLElBRHRGLENBREQ7QUFHQSxXQUpNLE1BSUE7QUFBQTs7QUFDTjtBQUNBO0FBQ0FELFlBQUFBLFNBQVMsR0FDUixhQUFDRCxVQUFELENBQXVDcEIsTUFBdkMsc0RBQStDaEUsT0FBL0MsQ0FBdUR1RSxLQUF2RCxNQUFpRSxnREFBakUsR0FDR2hFLFNBREgsR0FFRyxhQUhKO0FBSUE7QUFDRCxTQWZELE1BZU87QUFDTjhFLFVBQUFBLFNBQVMsR0FBRzlFLFNBQVo7QUFDQTs7QUFDRDtBQW5DRjs7QUFzQ0EsV0FBTzhFLFNBQVA7QUFDQSxHQXpDTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmltaXRpdmVUeXBlLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBDb250YWN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFQb2ludFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGlzUHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IHR5cGUgQ29tcGxleFByb3BlcnR5SW5mbyA9IHtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXHRhZGRpdGlvbmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXHRleHBvcnRTZXR0aW5nc1RlbXBsYXRlPzogc3RyaW5nO1xuXHRleHBvcnRTZXR0aW5nc1dyYXBwaW5nPzogYm9vbGVhbjtcblx0ZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdHZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkPzogc3RyaW5nO1xuXHRleHBvcnRVbml0TmFtZT86IHN0cmluZztcblx0ZXhwb3J0VW5pdFN0cmluZz86IHN0cmluZztcblx0ZXhwb3J0VGltZXpvbmVOYW1lPzogc3RyaW5nO1xuXHRleHBvcnRUaW1lem9uZVN0cmluZz86IHN0cmluZztcbn07XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0XCIuXG4gKiBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCBoYXMgYW4gaW5saW5lIGFjdGlvbiBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIHRvIGJlIGV2YWx1YXRlZFxuICogQHJldHVybnMgVmFsaWRhdGVzIHRoYXQgZGF0YUZpZWxkIGlzIGEgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzIHtcblx0cmV0dXJuIChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlcykuaGFzT3duUHJvcGVydHkoXCJBY3Rpb25cIik7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZFwiLlxuICogRGF0YUZpZWxkIGhhcyBhIHZhbHVlIGRlZmluZWQuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyBWYWxpZGF0ZSB0aGF0IGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZFR5cGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRUeXBlcyB7XG5cdHJldHVybiAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5oYXNPd25Qcm9wZXJ0eShcIlZhbHVlXCIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBnaXZlbiBEYXRhRmllbGQgaGFzIGEgc3RhdGljIGhpZGRlbiBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIERhdGFGaWVsZCB0byBjaGVja1xuICogQHJldHVybnMgYHRydWVgIGlmIERhdGFGaWVsZCBvciByZWZlcmVuY2VkIHByb3BlcnR5IGhhcyBhIHN0YXRpYyBIaWRkZW4gYW5ub3RhdGlvbiwgZmFsc2UgZWxzZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkQWx3YXlzSGlkZGVuKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlIHx8XG5cdFx0KGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkKSAmJiBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuID09PSB0cnVlKVxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG9iamVjdDogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoaXNEYXRhRmllbGRUeXBlcyhvYmplY3QpICYmIG9iamVjdC5WYWx1ZT8uJHRhcmdldCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBvYmplY3QuVmFsdWU/LiR0YXJnZXQ7XG5cdFx0XHRpZiAocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eT8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzUHJvcGVydHkob2JqZWN0KSkge1xuXHRcdFx0aWYgKG9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKG9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYXZpZ2F0aW9uIHBhdGggcHJlZml4IGZvciBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGggRm9yIGUuZy4gL0VudGl0eVR5cGUvTmF2aWdhdGlvbi9Qcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gcGF0aCBwcmVmaXggRm9yIGUuZy4gL0VudGl0eVR5cGUvTmF2aWdhdGlvbi9cbiAqL1xuZnVuY3Rpb24gX2dldE5hdmlnYXRpb25QYXRoUHJlZml4KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBwYXRoLmluZGV4T2YoXCIvXCIpID4gLTEgPyBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogXCJcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cbiAqXG4gKiBGb3IgZS5nLiBJZiBVSS5IaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHksIGluY2x1ZGUgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRhcmdldCBQcm9wZXJ0eSBvciBEYXRhRmllbGQgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gbmF2aWdhdGlvblBhdGhQcmVmaXggTmF2aWdhdGlvbiBwYXRoIHByZWZpeCwgYXBwbGljYWJsZSBpbiBjYXNlIG9mIG5hdmlnYXRpb24gcHJvcGVydGllcy5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGFibGUgdHlwZS5cbiAqIEBwYXJhbSByZWxhdGVkUHJvcGVydGllcyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgc28gZmFyLlxuICogQHJldHVybnMgVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5mdW5jdGlvbiBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKFxuXHR0YXJnZXQ6IFByaW1pdGl2ZVR5cGUsXG5cdG5hdmlnYXRpb25QYXRoUHJlZml4OiBzdHJpbmcsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRyZWxhdGVkUHJvcGVydGllczogQ29tcGxleFByb3BlcnR5SW5mb1xuKTogQ29tcGxleFByb3BlcnR5SW5mbyB7XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIpIHtcblx0XHRjb25zdCBoaWRkZW5Bbm5vdGF0aW9uID0gdGFyZ2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRcdGlmIChoaWRkZW5Bbm5vdGF0aW9uPy5wYXRoICYmIGhpZGRlbkFubm90YXRpb24uJHRhcmdldD8uX3R5cGUgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25QYXRoUHJlZml4ICsgaGlkZGVuQW5ub3RhdGlvbi5wYXRoO1xuXHRcdFx0Ly8gVGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgYWRkZWQgdG8gYWRkaXRpb25hbFByb3BlcnRpZXMgbWFwIGZvciB0aGUgQUxQIHRhYmxlIHVzZS1jYXNlLlxuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuYWRkaXRpb25hbFByb3BlcnRpZXNbaGlkZGVuQW5ub3RhdGlvblByb3BlcnR5UGF0aF0gPSBoaWRkZW5Bbm5vdGF0aW9uLiR0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBDb2xsZWN0IHJlbGF0ZWQgcHJvcGVydGllcyBmcm9tIGEgcHJvcGVydHkncyBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBpZ25vcmVTZWxmIFdoZXRoZXIgdG8gZXhjbHVkZSB0aGUgc2FtZSBwcm9wZXJ0eSBmcm9tIHJlbGF0ZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXMgVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkIHNvIGZhci5cbiAqIEBwYXJhbSBhZGRVbml0SW5UZW1wbGF0ZSBUcnVlIGlmIHRoZSB1bml0L2N1cnJlbmN5IHByb3BlcnR5IG5lZWRzIHRvIGJlIGFkZGVkIGluIHRoZSBleHBvcnQgdGVtcGxhdGVcbiAqIEByZXR1cm5zIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0cGF0aDogc3RyaW5nLFxuXHRwcm9wZXJ0eTogUHJpbWl0aXZlVHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aWdub3JlU2VsZjogYm9vbGVhbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvID0geyBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHt9IH0sXG5cdGFkZFVuaXRJblRlbXBsYXRlOiBib29sZWFuID0gZmFsc2Vcbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHQvKipcblx0ICogSGVscGVyIHRvIHB1c2ggdW5pcXVlIHJlbGF0ZWQgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIGtleSBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnRpZXMgb2JqZWN0IGNvbnRhaW5pbmcgdmFsdWUgcHJvcGVydHksIGRlc2NyaXB0aW9uIHByb3BlcnR5Li4uXG5cdCAqIEByZXR1cm5zIEluZGV4IGF0IHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhdmFpbGFibGVcblx0ICovXG5cdGZ1bmN0aW9uIF9wdXNoVW5pcXVlKGtleTogc3RyaW5nLCB2YWx1ZTogUHJvcGVydHkpOiBudW1iZXIge1xuXHRcdGlmICghcmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmluZGV4T2Yoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgdG8gYXBwZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgdGVtcGxhdGUgd2l0aCBhIGZvcm1hdHRlZCB0ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgRm9ybWF0dGVkIHRleHRcblx0ICovXG5cdGZ1bmN0aW9uIF9hcHBlbmRUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzVGVtcGxhdGVcblx0XHRcdD8gYCR7cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZX0ke3ZhbHVlfWBcblx0XHRcdDogYCR7dmFsdWV9YDtcblx0fVxuXG5cdGlmIChwYXRoICYmIHByb3BlcnR5KSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGhQcmVmaXggPSBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocGF0aCk7XG5cblx0XHQvLyBDaGVjayBmb3IgVGV4dCBhbm5vdGF0aW9uLlxuXHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRsZXQgdmFsdWVJbmRleDogbnVtYmVyO1xuXHRcdGxldCB0YXJnZXRWYWx1ZTogc3RyaW5nO1xuXHRcdGxldCBjdXJyZW5jeU9yVW9NSW5kZXg6IG51bWJlcjtcblx0XHRsZXQgdGltZXpvbmVPclVvTUluZGV4OiBudW1iZXI7XG5cblx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSkge1xuXHRcdFx0Ly8gRmllbGRHcm91cCB1c2UtY2FzZS4gTmVlZCB0byBhZGQgZWFjaCBGaWVsZCBpbiBuZXcgbGluZS5cblx0XHRcdF9hcHBlbmRUZW1wbGF0ZShcIlxcblwiKTtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzV3JhcHBpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0ZXh0QW5ub3RhdGlvbj8ucGF0aCAmJiB0ZXh0QW5ub3RhdGlvbj8uJHRhcmdldCkge1xuXHRcdFx0Ly8gQ2hlY2sgZm9yIFRleHQgQXJyYW5nZW1lbnQuXG5cdFx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdFx0XHRjb25zdCB0ZXh0QW5ub3RhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25QYXRoUHJlZml4ICsgdGV4dEFubm90YXRpb24ucGF0aDtcblx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUocHJvcGVydHksIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdFx0bGV0IGRlc2NyaXB0aW9uSW5kZXg6IG51bWJlcjtcblx0XHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdC8vIEtlZXAgdmFsdWUgd2hlbiBleHBvcnRpbmcgKHNwbGl0IG1vZGUpIG9uIHRleHQgQXJyYW5nZW1lbnQgZGVmaW5lZCBhcyAjVGV4dE9ubHkgKE9ubHkgdmFsdWVzIGFyZSBleHBlY3RlZCBvbiBwYXN0ZSBmcm9tIEV4Y2VsIGZ1bmN0aW9uYWxpdHkpXG5cdFx0XHRcdFx0X3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uSW5kZXggPSBfcHVzaFVuaXF1ZSh0ZXh0QW5ub3RhdGlvblByb3BlcnR5UGF0aCwgdGV4dEFubm90YXRpb24uJHRhcmdldCk7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHtkZXNjcmlwdGlvbkluZGV4fX1gKTtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy52aXN1YWxTZXR0aW5nc1RvQmVFeGNsdWRlZCA9IHBhdGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uSW5kZXggPSBfcHVzaFVuaXF1ZSh0ZXh0QW5ub3RhdGlvblByb3BlcnR5UGF0aCwgdGV4dEFubm90YXRpb24uJHRhcmdldCk7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0gKHske2Rlc2NyaXB0aW9uSW5kZXh9fSlgKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9wdXNoVW5pcXVlKHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoLCB0ZXh0QW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske2Rlc2NyaXB0aW9uSW5kZXh9fSAoeyR7dmFsdWVJbmRleH19KWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENoZWNrIGZvciBmaWVsZCBjb250YWluaW5nIEN1cnJlbmN5IE9yIFVuaXQgUHJvcGVydGllcyBvciBUaW1lem9uZVxuXHRcdFx0Y29uc3QgY3VycmVuY3lPclVvTVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkocHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpO1xuXHRcdFx0Y29uc3QgY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uID0gcHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgcHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0XHRcdGNvbnN0IHRpbWV6b25lUHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCB0aW1lem9uZUFubm90YXRpb24gPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cblx0XHRcdGlmIChjdXJyZW5jeU9yVW9NUHJvcGVydHkgJiYgY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uPy4kdGFyZ2V0KSB7XG5cdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdGN1cnJlbmN5T3JVb01JbmRleCA9IF9wdXNoVW5pcXVlKGN1cnJlbmN5T3JVb01Qcm9wZXJ0eS5uYW1lLCBjdXJyZW5jeU9yVW5pdEFubm90YXRpb24uJHRhcmdldCk7XG5cdFx0XHRcdGlmIChhZGRVbml0SW5UZW1wbGF0ZSkge1xuXHRcdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19ICB7JHtjdXJyZW5jeU9yVW9NSW5kZXh9fWApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFVuaXROYW1lID0gY3VycmVuY3lPclVvTVByb3BlcnR5Lm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGltZXpvbmVQcm9wZXJ0eSAmJiB0aW1lem9uZUFubm90YXRpb24/LiR0YXJnZXQpIHtcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0dGltZXpvbmVPclVvTUluZGV4ID0gX3B1c2hVbmlxdWUodGltZXpvbmVQcm9wZXJ0eS5uYW1lLCB0aW1lem9uZUFubm90YXRpb24uJHRhcmdldCk7XG5cdFx0XHRcdGlmIChhZGRVbml0SW5UZW1wbGF0ZSkge1xuXHRcdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19ICB7JHt0aW1lem9uZU9yVW9NSW5kZXh9fWApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFRpbWV6b25lTmFtZSA9IHRpbWV6b25lUHJvcGVydHkubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQ/LlZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0Y29uc3QgZGF0YVBvaW50UHJvcGVydHk6IFByaW1pdGl2ZVR5cGUgPSBwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgZGF0YVBvaW50UHJvcGVydHkpO1xuXHRcdFx0XHQvLyBOZXcgZmFrZSBwcm9wZXJ0eSBjcmVhdGVkIGZvciB0aGUgUmF0aW5nL1Byb2dyZXNzIFRhcmdldCBWYWx1ZS4gSXQnbGwgYmUgdXNlZCBmb3IgdGhlIGV4cG9ydCBvbiBzcGxpdCBtb2RlLlxuXHRcdFx0XHRfcHVzaFVuaXF1ZShwcm9wZXJ0eS5UYXJnZXQudmFsdWUsIHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0KTtcblx0XHRcdFx0dGFyZ2V0VmFsdWUgPSAocHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuVGFyZ2V0VmFsdWUgfHwgcHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuTWF4aW11bVZhbHVlKS50b1N0cmluZygpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fS8ke3RhcmdldFZhbHVlfWApO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0Ly8gRGF0YVBvaW50IHVzZS1jYXNlIHVzaW5nIERhdGFGaWVsZERlZmF1bHQuXG5cdFx0XHRcdGNvbnN0IGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eTogUHJpbWl0aXZlVHlwZSA9IHByb3BlcnR5LmFubm90YXRpb25zLlVJLkRhdGFGaWVsZERlZmF1bHQ7XG5cdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdC8vIE5ldyBmYWtlIHByb3BlcnR5IGNyZWF0ZWQgZm9yIHRoZSBSYXRpbmcvUHJvZ3Jlc3MgVGFyZ2V0IFZhbHVlLiBJdCdsbCBiZSB1c2VkIGZvciB0aGUgZXhwb3J0IG9uIHNwbGl0IG1vZGUuXG5cdFx0XHRcdF9wdXNoVW5pcXVlKGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eS5UYXJnZXQudmFsdWUsIHByb3BlcnR5KTtcblx0XHRcdFx0dGFyZ2V0VmFsdWUgPSAoXG5cdFx0XHRcdFx0ZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LlRhcmdldFZhbHVlIHx8IGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5UYXJnZXRWYWx1ZS5NYXhpbXVtVmFsdWVcblx0XHRcdFx0KS50b1N0cmluZygpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fS8ke3RhcmdldFZhbHVlfWApO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGVcIikge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eSA9XG5cdFx0XHRcdFx0cHJvcGVydHkuVGFyZ2V0LnZhbHVlLnN1YnN0cmluZygwLCBwcm9wZXJ0eS5UYXJnZXQudmFsdWUuaW5kZXhPZihcIi9cIikgKyAxKSArIHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LmZuPy5wYXRoO1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuZm4uJHRhcmdldCk7XG5cdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19YCk7XG5cdFx0XHR9IGVsc2UgaWYgKCFpZ25vcmVTZWxmKSB7XG5cdFx0XHRcdC8vIENvbGxlY3QgdW5kZXJseWluZyBwcm9wZXJ0eVxuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0XHRpZiAoY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0VW5pdFN0cmluZyA9IGAke2N1cnJlbmN5T3JVbml0QW5ub3RhdGlvbn1gOyAvLyBIYXJkLWNvZGVkIGN1cnJlbmN5L3VuaXRcblx0XHRcdFx0fSBlbHNlIGlmICh0aW1lem9uZUFubm90YXRpb24pIHtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy5leHBvcnRUaW1lem9uZVN0cmluZyA9IGAke3RpbWV6b25lQW5ub3RhdGlvbn1gOyAvLyBIYXJkLWNvZGVkIHRpbWV6b25lXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZWxhdGVkUHJvcGVydGllcyA9IF9jb2xsZWN0QWRkaXRpb25hbFByb3BlcnRpZXNGb3JBbmFseXRpY2FsVGFibGUocHJvcGVydHksIG5hdmlnYXRpb25QYXRoUHJlZml4LCB0YWJsZVR5cGUsIHJlbGF0ZWRQcm9wZXJ0aWVzKTtcblx0XHRpZiAoT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXMuYWRkaXRpb25hbFByb3BlcnRpZXMpLmxlbmd0aCA+IDAgJiYgT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBDb2xsZWN0IHVuZGVybHlpbmcgcHJvcGVydHkgaWYgbm90IGNvbGxlY3RlZCBhbHJlYWR5LlxuXHRcdFx0Ly8gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCBhZGRpdGlvbmFsUHJvcGVydGllcyBhcmUgbWFkZSBhdmFpbGFibGUgb25seSB0byBjb21wbGV4IHByb3BlcnR5IGluZm9zLlxuXHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19YCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlbGF0ZWRQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIENvbGxlY3QgcHJvcGVydGllcyBjb25zdW1lZCBieSBhIERhdGFGaWVsZC5cbiAqIFRoaXMgaXMgZm9yIHBvcHVsYXRpbmcgdGhlIENvbXBsZXhQcm9wZXJ0eUluZm9zIG9mIHRoZSB0YWJsZSBkZWxlZ2F0ZS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBEYXRhRmllbGQgZm9yIHdoaWNoIHRoZSBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgaWRlbnRpZmllZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gaXNFbWJlZGRlZCBUcnVlIGlmIHRoZSBEYXRhRmllbGQgaXMgZW1iZWRkZWQgaW4gYW5vdGhlciBhbm5vdGF0aW9uIChlLmcuIEZpZWxkR3JvdXApLlxuICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgRGF0YUZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvID0geyBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHt9IH0sXG5cdGlzRW1iZWRkZWQ6IGJvb2xlYW4gPSBmYWxzZVxuKTogQ29tcGxleFByb3BlcnR5SW5mbyB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkPy4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBkYXRhRmllbGQuVmFsdWU7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0cHJvcGVydHkucGF0aCxcblx0XHRcdFx0cHJvcGVydHkuJHRhcmdldCxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0XHRcdGlzRW1iZWRkZWRcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aFByZWZpeCA9IF9nZXROYXZpZ2F0aW9uUGF0aFByZWZpeChwcm9wZXJ0eS5wYXRoKTtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZShcblx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRuYXZpZ2F0aW9uUGF0aFByZWZpeCxcblx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydGllc1xuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldD8uJFR5cGUpIHtcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZTpcblx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRcdGlubmVyRGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS5wYXRoLFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0XHRcdFx0XHRpc0VtYmVkZGVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiOlxuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLlRhcmdldC52YWx1ZSxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0aXNFbWJlZGRlZFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IGdldERhdGFGaWVsZERhdGFUeXBlID0gZnVuY3Rpb24gKG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzRGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXMpLiRUeXBlO1xuXHRzd2l0Y2ggKHNEYXRhVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHNEYXRhVHlwZSA9IChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnN0IHNEYXRhVHlwZUZvckRhdGFGaWVsZEZvckFubm90YXRpb24gPSAob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQuJFR5cGU7XG5cdFx0XHRpZiAoc0RhdGFUeXBlRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdFx0XHRpZiAoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0LiRUeXBlID09PSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzLkNvbnRhY3RUeXBlKSB7XG5cdFx0XHRcdFx0c0RhdGFUeXBlID0gKCgob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQgYXMgQ29udGFjdCk/LmZuIGFzIGFueSkuJHRhcmdldD8udHlwZTtcblx0XHRcdFx0fSBlbHNlIGlmICgob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRzRGF0YVR5cGUgPVxuXHRcdFx0XHRcdFx0KChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJFBhdGg/LiRUeXBlIHx8XG5cdFx0XHRcdFx0XHQoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy4kdGFyZ2V0LnR5cGU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0Ly8gRmllbGRHcm91cCBQcm9wZXJ0aWVzIGhhdmUgbm8gdHlwZSwgc28gd2UgZGVmaW5lIGl0IGFzIGEgYm9vbGVhbiB0eXBlIHRvIHByZXZlbnQgZXhjZXB0aW9ucyBkdXJpbmcgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSB3aWR0aFxuXHRcdFx0XHRcdHNEYXRhVHlwZSA9XG5cdFx0XHRcdFx0XHQob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnREZWZpbml0aW9uVHlwZVwiXG5cdFx0XHRcdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdDogXCJFZG0uQm9vbGVhblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiBzRGF0YVR5cGU7XG59O1xuIl19
|