@sapui5/sap.fe.core 1.127.2 → 1.129.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -9
- package/src/sap/fe/core/ActionRuntime.ts +3 -7
- package/src/sap/fe/core/AppComponent.js +9 -19
- package/src/sap/fe/core/AppComponent.ts +2 -12
- package/src/sap/fe/core/AppStateHandler.js +3 -11
- package/src/sap/fe/core/AppStateHandler.ts +0 -7
- package/src/sap/fe/core/BaseController.js +4 -8
- package/src/sap/fe/core/BaseController.ts +0 -5
- package/src/sap/fe/core/CommonUtils.js +1 -9
- package/src/sap/fe/core/CommonUtils.ts +4 -8
- package/src/sap/fe/core/ExtensionAPI.js +10 -25
- package/src/sap/fe/core/ExtensionAPI.ts +4 -19
- package/src/sap/fe/core/InsightsFormattersExtension.js +5 -3
- package/src/sap/fe/core/PageController.js +7 -10
- package/src/sap/fe/core/PageController.ts +0 -3
- package/src/sap/fe/core/ResourceModel.js +3 -5
- package/src/sap/fe/core/ResourceModel.ts +0 -2
- package/src/sap/fe/core/ReuseComponent.js +8 -14
- package/src/sap/fe/core/ReuseComponent.ts +0 -6
- package/src/sap/fe/core/TemplateComponent.js +37 -9
- package/src/sap/fe/core/TemplateComponent.ts +3 -2
- package/src/sap/fe/core/TemplateModel.js +5 -5
- package/src/sap/fe/core/TemplateModel.ts +0 -1
- package/src/sap/fe/core/UIProvider.js +1 -1
- package/src/sap/fe/core/UIProvider.ts +44 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +7 -12
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +0 -5
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +61 -65
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +60 -63
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +21 -5
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +0 -4
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +6 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -20
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -11
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +0 -6
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +11 -10
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +0 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -7
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +0 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +3 -10
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +0 -7
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +5 -8
- package/src/sap/fe/core/controllerextensions/ContextSharing.ts +0 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +225 -155
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +248 -164
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -3
- package/src/sap/fe/core/controllerextensions/Feedback.ts +0 -2
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +4 -7
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -3
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -25
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -21
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +22 -34
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +25 -31
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +8 -21
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +4 -15
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +68 -31
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +78 -32
- package/src/sap/fe/core/controllerextensions/PageReady.js +4 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +4 -8
- package/src/sap/fe/core/controllerextensions/Paginator.ts +0 -4
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -4
- package/src/sap/fe/core/controllerextensions/Recommendations.js +15 -24
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +13 -20
- package/src/sap/fe/core/controllerextensions/Routing.js +4 -10
- package/src/sap/fe/core/controllerextensions/Routing.ts +0 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +17 -11
- package/src/sap/fe/core/controllerextensions/Share.ts +10 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.js +49 -45
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +54 -41
- package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +10 -34
- package/src/sap/fe/core/controllerextensions/ViewState.ts +3 -49
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +6 -8
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +4 -3
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +16 -12
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +126 -74
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +158 -91
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -22
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +0 -20
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -20
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +11 -17
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +191 -767
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +277 -1024
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -6
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +381 -250
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +467 -301
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +2 -6
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +0 -5
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +2 -6
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +4 -6
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -6
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +0 -4
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +4 -41
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -37
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -1
- package/src/sap/fe/core/controls/Any.js +1 -2
- package/src/sap/fe/core/controls/Any.ts +0 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -2
- package/src/sap/fe/core/controls/AnyElement.ts +0 -1
- package/src/sap/fe/core/controls/CommandExecution.js +3 -3
- package/src/sap/fe/core/controls/ComponentLoader.js +23 -10
- package/src/sap/fe/core/controls/ComponentLoader.ts +0 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +10 -13
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +0 -6
- package/src/sap/fe/core/controls/EventDelegateHook.js +8 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +7 -7
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +140 -24
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +141 -10
- package/src/sap/fe/core/converters/ConverterContext.js +8 -30
- package/src/sap/fe/core/converters/ConverterContext.ts +7 -29
- package/src/sap/fe/core/converters/ManifestSettings.js +37 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +12 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +12 -40
- package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -46
- package/src/sap/fe/core/converters/MetaModelConverter.js +44 -48
- package/src/sap/fe/core/converters/MetaModelConverter.ts +50 -48
- package/src/sap/fe/core/converters/TemplateConverter.js +3 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +0 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +0 -26
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -19
- package/src/sap/fe/core/converters/controls/Common/Action.js +13 -26
- package/src/sap/fe/core/converters/controls/Common/Action.ts +13 -31
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -5
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +2 -4
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +1 -2
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +0 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -7
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +11 -6
- package/src/sap/fe/core/converters/controls/Common/Table.js +159 -141
- package/src/sap/fe/core/converters/controls/Common/Table.ts +166 -122
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -30
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +3 -29
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +43 -55
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +43 -47
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +0 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -8
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +2 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -11
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +0 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -10
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +0 -9
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -7
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +0 -6
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +0 -8
- package/src/sap/fe/core/converters/helpers/ID.js +1 -2
- package/src/sap/fe/core/converters/helpers/ID.ts +0 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -2
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +0 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -5
- package/src/sap/fe/core/converters/helpers/Key.ts +0 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -2
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +0 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +0 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +6 -27
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +9 -26
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -16
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +0 -15
- package/src/sap/fe/core/definition/FEDefinition.js +2550 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -12
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +9 -10
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +8 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +0 -2
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +0 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +9 -14
- package/src/sap/fe/core/formatters/FiscalFormat.ts +0 -11
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -4
- package/src/sap/fe/core/formatters/KPIFormatter.ts +0 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +6 -3
- package/src/sap/fe/core/formatters/StandardFormatter.ts +6 -2
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -3
- package/src/sap/fe/core/fpm/Component.js +14 -17
- package/src/sap/fe/core/fpm/Component.ts +7 -10
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +3 -10
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +0 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -13
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +0 -11
- package/src/sap/fe/core/helpers/BindingHelper.js +1 -4
- package/src/sap/fe/core/helpers/BindingHelper.ts +0 -3
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +0 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +61 -32
- package/src/sap/fe/core/helpers/DeleteHelper.ts +79 -33
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +0 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +0 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +0 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -8
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +0 -7
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +7 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +0 -2
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +3 -8
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +0 -5
- package/src/sap/fe/core/helpers/MetaPath.js +1 -7
- package/src/sap/fe/core/helpers/MetaPath.ts +0 -6
- package/src/sap/fe/core/helpers/ModelHelper.js +55 -35
- package/src/sap/fe/core/helpers/ModelHelper.ts +64 -38
- package/src/sap/fe/core/helpers/PasteHelper.js +77 -24
- package/src/sap/fe/core/helpers/PasteHelper.ts +105 -23
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -3
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +0 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -4
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +0 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +3 -4
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -2
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +0 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -2
- package/src/sap/fe/core/helpers/SizeHelper.ts +0 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +7 -17
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -17
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -12
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +0 -11
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -10
- package/src/sap/fe/core/helpers/TitleHelper.ts +0 -9
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -2
- package/src/sap/fe/core/helpers/ToES6Promise.ts +0 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -15
- package/src/sap/fe/core/helpers/TypeGuards.ts +0 -14
- package/src/sap/fe/core/helpers/WebSocket.js +1 -1
- package/src/sap/fe/core/library.js +10 -44
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +8 -45
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -6
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -5
- package/src/sap/fe/core/messagebundle.properties +12 -1
- package/src/sap/fe/core/messagebundle_ar.properties +8 -0
- package/src/sap/fe/core/messagebundle_bg.properties +8 -0
- package/src/sap/fe/core/messagebundle_ca.properties +8 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +8 -0
- package/src/sap/fe/core/messagebundle_cs.properties +9 -1
- package/src/sap/fe/core/messagebundle_cy.properties +8 -0
- package/src/sap/fe/core/messagebundle_da.properties +8 -0
- package/src/sap/fe/core/messagebundle_de.properties +8 -0
- package/src/sap/fe/core/messagebundle_el.properties +8 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +144 -65
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +273 -194
- package/src/sap/fe/core/messagebundle_es.properties +9 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +8 -0
- package/src/sap/fe/core/messagebundle_et.properties +8 -0
- package/src/sap/fe/core/messagebundle_fi.properties +8 -0
- package/src/sap/fe/core/messagebundle_fr.properties +8 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -0
- package/src/sap/fe/core/messagebundle_hi.properties +9 -1
- package/src/sap/fe/core/messagebundle_hr.properties +8 -0
- package/src/sap/fe/core/messagebundle_hu.properties +8 -0
- package/src/sap/fe/core/messagebundle_id.properties +12 -4
- package/src/sap/fe/core/messagebundle_it.properties +8 -0
- package/src/sap/fe/core/messagebundle_iw.properties +8 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -0
- package/src/sap/fe/core/messagebundle_kk.properties +8 -0
- package/src/sap/fe/core/messagebundle_ko.properties +8 -0
- package/src/sap/fe/core/messagebundle_lt.properties +8 -0
- package/src/sap/fe/core/messagebundle_lv.properties +8 -0
- package/src/sap/fe/core/messagebundle_mk.properties +8 -0
- package/src/sap/fe/core/messagebundle_ms.properties +8 -0
- package/src/sap/fe/core/messagebundle_nl.properties +16 -8
- package/src/sap/fe/core/messagebundle_no.properties +8 -0
- package/src/sap/fe/core/messagebundle_pl.properties +8 -0
- package/src/sap/fe/core/messagebundle_pt.properties +8 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +8 -0
- package/src/sap/fe/core/messagebundle_ro.properties +8 -0
- package/src/sap/fe/core/messagebundle_ru.properties +8 -0
- package/src/sap/fe/core/messagebundle_sh.properties +8 -0
- package/src/sap/fe/core/messagebundle_sk.properties +8 -0
- package/src/sap/fe/core/messagebundle_sl.properties +8 -0
- package/src/sap/fe/core/messagebundle_sr.properties +8 -0
- package/src/sap/fe/core/messagebundle_sv.properties +8 -0
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +8 -0
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +8 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +8 -0
- package/src/sap/fe/core/operationsHelper.js +22 -7
- package/src/sap/fe/core/operationsHelper.ts +24 -5
- package/src/sap/fe/core/rootView/Fcl.controller.js +7 -27
- package/src/sap/fe/core/rootView/Fcl.controller.ts +0 -18
- package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -12
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +0 -5
- package/src/sap/fe/core/rootView/RootViewBaseController.js +10 -24
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -16
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +4 -4
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +3 -3
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +3 -4
- package/src/sap/fe/core/services/ContextSharingServiceFactory.ts +0 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +13 -20
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +11 -17
- package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -21
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -17
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +7 -19
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +0 -12
- package/src/sap/fe/core/services/ShellServicesFactory.js +8 -44
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -41
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +19 -60
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +14 -57
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +6 -14
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +2 -10
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +17 -7
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +17 -3
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +11 -24
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +0 -19
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -31
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +0 -27
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -4
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.ts +0 -3
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +7 -7
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +4 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +1 -2
- package/src/sap/fe/core/templating/ActionHelper.ts +0 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -2
- package/src/sap/fe/core/templating/CommonFormatters.ts +0 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -6
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +0 -5
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +0 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +0 -17
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +6 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -4
- package/src/sap/fe/core/templating/EntitySetHelper.ts +0 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +3 -4
- package/src/sap/fe/core/templating/FieldControlHelper.js +4 -9
- package/src/sap/fe/core/templating/FieldControlHelper.ts +3 -9
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -31
- package/src/sap/fe/core/templating/PropertyHelper.ts +0 -30
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +1 -7
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +0 -6
- package/src/sap/fe/core/templating/UIFormatters.js +18 -14
- package/src/sap/fe/core/templating/UIFormatters.ts +30 -18
- package/src/sap/fe/core/type/Date.js +3 -6
- package/src/sap/fe/core/type/Date.ts +0 -3
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +3 -3
- package/src/sap/fe/core/type/FiscalDate.js +3 -9
- package/src/sap/fe/core/type/FiscalDate.ts +0 -6
- package/src/sap/fe/core/type/InputMask.js +3 -7
- package/src/sap/fe/core/type/InputMask.ts +0 -4
|
@@ -28,21 +28,25 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
28
28
|
var finalExtension = ClassSupport.finalExtension;
|
|
29
29
|
var extensible = ClassSupport.extensible;
|
|
30
30
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
31
|
-
function _inheritsLoose(
|
|
32
|
-
function _setPrototypeOf(
|
|
33
|
-
function _applyDecoratedDescriptor(
|
|
31
|
+
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
|
|
32
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
33
|
+
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
34
34
|
// additionalStates are stored next to control IDs, so name clash avoidance needed. Fortunately IDs have restrictions:
|
|
35
35
|
// "Allowed is a sequence of characters (capital/lowercase), digits, underscores, dashes, points and/or colons."
|
|
36
36
|
// Therefore adding a symbol like # or @
|
|
37
37
|
const NavType = NavLibrary.NavType;
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
|
-
* Definition of a
|
|
41
|
-
*
|
|
40
|
+
* Definition of a navigation parameter
|
|
42
41
|
* @public
|
|
43
42
|
*/
|
|
44
43
|
|
|
45
44
|
const ADDITIONAL_STATES_KEY = "#additionalStates";
|
|
45
|
+
|
|
46
|
+
///////////////////////////////////////////////////////////////////
|
|
47
|
+
// methods to retrieve & apply states for the different controls //
|
|
48
|
+
///////////////////////////////////////////////////////////////////
|
|
49
|
+
|
|
46
50
|
const getStateUtil = async function () {
|
|
47
51
|
return (await __ui5_require_async("sap/ui/mdc/p13n/StateUtil")).default;
|
|
48
52
|
};
|
|
@@ -208,7 +212,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
208
212
|
* A controller extension offering hooks for state handling
|
|
209
213
|
*
|
|
210
214
|
* If you need to maintain a specific state for your application, you can use the controller extension.
|
|
211
|
-
*
|
|
212
215
|
* @hideconstructor
|
|
213
216
|
* @public
|
|
214
217
|
* @since 1.85.0
|
|
@@ -275,7 +278,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
275
278
|
*
|
|
276
279
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
277
280
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
278
|
-
*
|
|
279
281
|
* @param aCollectedControls The collected controls
|
|
280
282
|
* @protected
|
|
281
283
|
*/;
|
|
@@ -297,7 +299,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
297
299
|
|
|
298
300
|
/**
|
|
299
301
|
* Returns a map of <code>refreshBinding</code> function for a certain control.
|
|
300
|
-
*
|
|
301
302
|
* @param oControl The control to get state handler for
|
|
302
303
|
* @returns A plain object with one function: <code>refreshBinding</code>
|
|
303
304
|
*/;
|
|
@@ -323,7 +324,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
323
324
|
*
|
|
324
325
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
325
326
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
326
|
-
*
|
|
327
327
|
* @param _oControl The control for which the refresh handler is adapted.
|
|
328
328
|
* @param _oControlHandler A plain object which can have one function: <code>refreshBinding</code>
|
|
329
329
|
* @param _oControlHandler.refreshBinding
|
|
@@ -335,7 +335,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
335
335
|
|
|
336
336
|
/**
|
|
337
337
|
* Called when the application is suspended due to keep-alive mode.
|
|
338
|
-
*
|
|
339
338
|
* @public
|
|
340
339
|
*/;
|
|
341
340
|
_proto.onSuspend = function onSuspend() {
|
|
@@ -344,7 +343,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
344
343
|
|
|
345
344
|
/**
|
|
346
345
|
* Called when the application is restored due to keep-alive mode.
|
|
347
|
-
*
|
|
348
346
|
* @public
|
|
349
347
|
*/;
|
|
350
348
|
_proto.onRestore = function onRestore() {
|
|
@@ -362,7 +360,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
362
360
|
/**
|
|
363
361
|
* Helper function to enable multi override. It is adding an additional parameter (array) to the provided
|
|
364
362
|
* function (and its parameters), that will be evaluated via <code>Promise.all</code>.
|
|
365
|
-
*
|
|
366
363
|
* @param fnCall The function to be called
|
|
367
364
|
* @param args
|
|
368
365
|
* @returns A promise to be resolved with the result of all overrides
|
|
@@ -382,7 +379,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
382
379
|
*
|
|
383
380
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
384
381
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
385
|
-
*
|
|
386
382
|
* @param oControl The control to get state handler for
|
|
387
383
|
* @param aControlHandler A list of plain objects with two functions: <code>retrieve</code> and <code>apply</code>
|
|
388
384
|
* @protected
|
|
@@ -395,7 +391,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
395
391
|
|
|
396
392
|
/**
|
|
397
393
|
* Returns a map of <code>retrieve</code> and <code>apply</code> functions for a certain control.
|
|
398
|
-
*
|
|
399
394
|
* @param oControl The control to get state handler for
|
|
400
395
|
* @returns A plain object with two functions: <code>retrieve</code> and <code>apply</code>
|
|
401
396
|
*/;
|
|
@@ -437,7 +432,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
437
432
|
*
|
|
438
433
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
439
434
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
440
|
-
*
|
|
441
435
|
* @param _aCollectedControls The collected controls
|
|
442
436
|
* @protected
|
|
443
437
|
*/;
|
|
@@ -447,7 +441,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
447
441
|
|
|
448
442
|
/**
|
|
449
443
|
* Returns the key to be used for given control.
|
|
450
|
-
*
|
|
451
444
|
* @param oControl The control to get state key for
|
|
452
445
|
* @returns The key to be used for storing the controls state
|
|
453
446
|
*/;
|
|
@@ -458,7 +451,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
458
451
|
/**
|
|
459
452
|
* Retrieve the view state of this extensions view.
|
|
460
453
|
* When this function is called more than once before finishing, all but the final response will resolve to <code>undefined</code>.
|
|
461
|
-
*
|
|
462
454
|
* @returns A promise resolving the view state
|
|
463
455
|
* @public
|
|
464
456
|
*/;
|
|
@@ -517,7 +509,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
517
509
|
*
|
|
518
510
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
519
511
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
520
|
-
*
|
|
521
512
|
* @param mAdditionalStates The additional state
|
|
522
513
|
* @protected
|
|
523
514
|
*/;
|
|
@@ -529,7 +520,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
529
520
|
|
|
530
521
|
/**
|
|
531
522
|
* Returns a map of additional states (not control bound) to be added to the current view state of the given view.
|
|
532
|
-
*
|
|
533
523
|
* @returns Additional view states
|
|
534
524
|
*/;
|
|
535
525
|
_proto._retrieveAdditionalStates = function _retrieveAdditionalStates() {
|
|
@@ -540,7 +530,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
540
530
|
|
|
541
531
|
/**
|
|
542
532
|
* Returns the current state for the given control.
|
|
543
|
-
*
|
|
544
533
|
* @param oControl The object to get the state for
|
|
545
534
|
* @returns The state for the given control
|
|
546
535
|
*/;
|
|
@@ -566,7 +555,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
566
555
|
*
|
|
567
556
|
* Important:
|
|
568
557
|
* You should only override this method for custom pages and not for the standard ListReportPage and ObjectPage!
|
|
569
|
-
*
|
|
570
558
|
* @returns If <code>true</code>, only the initial view state is applied once,
|
|
571
559
|
* else any new view state is also applied on follow-up calls (default)
|
|
572
560
|
* @protected
|
|
@@ -577,7 +565,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
577
565
|
|
|
578
566
|
/**
|
|
579
567
|
* Retrieves the state of a specific control.
|
|
580
|
-
*
|
|
581
568
|
* @param control The managed control object whose state is to be retrieved.
|
|
582
569
|
* @returns - The state of the specified control.
|
|
583
570
|
*/;
|
|
@@ -593,7 +580,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
593
580
|
|
|
594
581
|
/**
|
|
595
582
|
* Applies the given view state to this extensions view.
|
|
596
|
-
*
|
|
597
583
|
* @param oViewState The view state to apply (can be undefined)
|
|
598
584
|
* @param oNavParameter The current navigation parameter
|
|
599
585
|
* @param oNavParameter.navigationType The actual navigation type
|
|
@@ -701,7 +687,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
701
687
|
*
|
|
702
688
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
703
689
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
704
|
-
*
|
|
705
690
|
* @param aPromises Extensible array of promises to be resolved before continuing
|
|
706
691
|
* @param navigationType Navigation type responsible for the applying the state
|
|
707
692
|
* @protected
|
|
@@ -717,7 +702,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
717
702
|
*
|
|
718
703
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
719
704
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
720
|
-
*
|
|
721
705
|
* @param aPromises Extensible array of promises to be resolved before continuing
|
|
722
706
|
* @protected
|
|
723
707
|
*/;
|
|
@@ -732,7 +716,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
732
716
|
*
|
|
733
717
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
734
718
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
735
|
-
*
|
|
736
719
|
* @param oViewState The current view state
|
|
737
720
|
* @param aPromises Extensible array of promises to be resolved before continuing
|
|
738
721
|
* @protected
|
|
@@ -751,12 +734,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
751
734
|
*
|
|
752
735
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
753
736
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
754
|
-
*
|
|
755
737
|
* @param oNavParameter The current navigation parameter
|
|
756
|
-
* @param oNavParameter.navigationType The actual navigation type
|
|
757
|
-
* @param [oNavParameter.selectionVariant] The selectionVariant from the navigation
|
|
758
|
-
* @param [oNavParameter.selectionVariantDefaults] The selectionVariant defaults from the navigation
|
|
759
|
-
* @param [oNavParameter.requiresStandardVariant] Defines whether the standard variant must be used in variant management
|
|
760
738
|
* @param aPromises Extensible array of promises to be resolved before continuing
|
|
761
739
|
* @protected
|
|
762
740
|
*/;
|
|
@@ -770,7 +748,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
770
748
|
|
|
771
749
|
/**
|
|
772
750
|
* Applying the given state to the given control.
|
|
773
|
-
*
|
|
774
751
|
* @param oControl The object to apply the given state
|
|
775
752
|
* @param oControlState The state for the given control
|
|
776
753
|
* @param [oNavParameters] The current navigation parameters
|
|
@@ -878,7 +855,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
878
855
|
|
|
879
856
|
/**
|
|
880
857
|
* Updates the initial state of the specified variant controls.
|
|
881
|
-
*
|
|
882
858
|
* @param variantControls An array of control IDs for which the initial state needs to be updated.
|
|
883
859
|
* @returns A promise that resolves when the initial state update is complete.
|
|
884
860
|
*/;
|
|
@@ -898,4 +874,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
898
874
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "refreshViewBindings", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshViewBindings"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshControls", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "refreshControlBinding", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshControlBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlRefreshBindingHandler", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlRefreshBindingHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshHandler", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onSuspend", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "onSuspend"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRestore", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onRestore"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "collectResults", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "collectResults"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptControlStateHandler", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlStateHandler", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptStateControls", [_dec22, _dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptStateControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getStateKey", [_dec24, _dec25], Object.getOwnPropertyDescriptor(_class2.prototype, "getStateKey"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveViewState", [_dec26, _dec27], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveAdditionalStates", [_dec28, _dec29], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveControlState", [_dec30, _dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveControlState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyInitialStateOnly", [_dec32, _dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "applyInitialStateOnly"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyViewState", [_dec34, _dec35], Object.getOwnPropertyDescriptor(_class2.prototype, "applyViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable", [_dec36], Object.getOwnPropertyDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeStateApplied", [_dec37, _dec38], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterStateApplied", [_dec39, _dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyAdditionalStates", [_dec41, _dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "applyAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_applyNavigationParametersToFilterbar", [_dec43], Object.getOwnPropertyDescriptor(_class2.prototype, "_applyNavigationParametersToFilterbar"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyNavigationParameters", [_dec44, _dec45], Object.getOwnPropertyDescriptor(_class2.prototype, "applyNavigationParameters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyControlState", [_dec46, _dec47], Object.getOwnPropertyDescriptor(_class2.prototype, "applyControlState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "updateAppStateDebounced", [_dec48], Object.getOwnPropertyDescriptor(_class2.prototype, "updateAppStateDebounced"), _class2.prototype)), _class2)) || _class);
|
|
899
875
|
return ViewState;
|
|
900
876
|
}, false);
|
|
901
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIkFERElUSU9OQUxfU1RBVEVTX0tFWSIsImdldFN0YXRlVXRpbCIsImRlZmF1bHQiLCJfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXAiLCJyZXRyaWV2ZSIsIm9WTSIsInZhcmlhbnRJZCIsImdldEN1cnJlbnRWYXJpYW50S2V5IiwiYXBwbHkiLCJjb250cm9sU3RhdGUiLCJ1bmRlZmluZWQiLCJpc1ZhcmlhbnRJZEF2YWlsYWJsZSIsIl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUiLCJzVmFyaWFudFJlZmVyZW5jZSIsImdldFN0YW5kYXJkVmFyaWFudEtleSIsImNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUiLCJwdXNoIiwiZ2V0Rm9yIiwiQ29udHJvbFZhcmlhbnRBcHBseUFQSSIsImFjdGl2YXRlVmFyaWFudCIsImVsZW1lbnQiLCJ2YXJpYW50UmVmZXJlbmNlIiwiX3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUiLCJlcnJvciIsIkxvZyIsImludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseSIsIm11bHRpcGxlTW9kZUNvbnRyb2wiLCJzZWxlY3RlZEtleSIsImNvbnRlbnQiLCJnZXRTZWxlY3RlZEtleSIsInRhYkJhciIsImdldEl0ZW1zIiwiZmluZCIsIml0ZW0iLCJnZXRLZXkiLCJzZXRTZWxlY3RlZEtleSIsInJlZnJlc2hCaW5kaW5nIiwib1RhYmxlIiwib1RhYmxlQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJvUm9vdEJpbmRpbmciLCJnZXRSb290QmluZGluZyIsImFnZ3JlZ2F0aW9uIiwiZ2V0QWdncmVnYXRpb24iLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJyZWZyZXNoIiwib0hlYWRlckNvbnRleHQiLCJnZXRIZWFkZXJDb250ZXh0Iiwic0dyb3VwSWQiLCJnZXRHcm91cElkIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJpbmZvIiwiZ2V0SWQiLCJvU2VnbWVudGVkQnV0dG9uIiwib0NvbnRyb2xTdGF0ZSIsImdldFBhcmVudCIsImlzQSIsImZpcmVFdmVudCIsIm9TZWxlY3QiLCJvRHluYW1pY1BhZ2UiLCJoZWFkZXJFeHBhbmRlZCIsImdldEhlYWRlckV4cGFuZGVkIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJvVmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsInJldHJpZXZlVmlld1N0YXRlIiwib05hdlBhcmFtZXRlcnMiLCJza2lwTWVyZ2UiLCJhcHBseVZpZXdTdGF0ZSIsInJlZnJlc2hWaWV3QmluZGluZ3MiLCJvQ29tcG9uZW50Q29udGFpbmVyIiwib0NvbXBvbmVudCIsImdldENvbXBvbmVudEluc3RhbmNlIiwicmV0cmlldmVDb250cm9sU3RhdGUiLCJnZXRSb290Q29udHJvbCIsImFwcGx5Q29udHJvbFN0YXRlIiwiVmlld1N0YXRlIiwiZGVmaW5lVUk1Q2xhc3MiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwicHJpdmF0ZUV4dGVuc2lvbiIsIkluc3RlYWQiLCJpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlciIsInZpZXdTdGF0ZUNvbnRyb2xzIiwic3RhdGVDb250cmlidXRvcnMiLCJ2YXJpYW50TWFuYWdlbWVudCIsImFkYXB0Q29udHJvbHMiLCJleHRlcm5hbFN0YXRlUHJvbWlzZXMiLCJjb250cm9sU3RhdGVLZXkiLCJpbml0aWFsQ29udHJvbFN0YXRlcyIsInZhcmlhbnRDb250cm9scyIsInVwZGF0ZUluaXRpYWxTdGF0ZSIsIlByb21pc2UiLCJhbGwiLCJmaWx0ZXIiLCJjb250cm9sIiwiaW5jbHVkZXMiLCJtYXAiLCJfYWRkRXZlbnRMaXN0ZW5lcnNUb1ZhcmlhbnRNYW5hZ2VtZW50IiwiZXh0ZXJuYWxTdGF0ZVByb21pc2UiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJnZXRTdGF0ZUtleSIsImZvckVhY2giLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiaSIsImUiLCJfaVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJyZXNvbHZlIiwiX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSIsImFDb250cm9scyIsImNvbGxlY3RSZXN1bHRzIiwiYmFzZSIsImFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyIsIm9Qcm9taXNlQ2hhaW4iLCJvQ29udHJvbCIsInRoZW4iLCJyZWZyZXNoQ29udHJvbEJpbmRpbmciLCJiaW5kIiwiYUNvbGxlY3RlZENvbnRyb2xzIiwib0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJnZXRDb250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwib1JlZnJlc2hCaW5kaW5nSGFuZGxlciIsInNUeXBlIiwiYWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXIiLCJfb0NvbnRyb2wiLCJfb0NvbnRyb2xIYW5kbGVyIiwib25TdXNwZW5kIiwib25SZXN0b3JlIiwiZGVzdHJveSIsImZuQ2FsbCIsImFSZXN1bHRzIiwiYXJncyIsImFkYXB0Q29udHJvbFN0YXRlSGFuZGxlciIsImFDb250cm9sSGFuZGxlciIsImdldENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyIiwiYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJyZXRyaWV2ZVN0YXRlIiwiYXBwbHlTdGF0ZSIsIl9jb250cm9sIiwic2hvdWxkQXBwbHlEaWZmU3RhdGUiLCJuYXZpZ2F0aW9uVHlwZSIsImh5YnJpZCIsImFwcGx5TGVnYWN5U3RhdGUiLCJnZXRDb250cm9sU3RhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJjb25jYXQiLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJfYUNvbGxlY3RlZENvbnRyb2xzIiwiZ2V0VmlldyIsImdldExvY2FsSWQiLCJvVmlld1N0YXRlIiwiYVJlc29sdmVkU3RhdGVzIiwidlJlc3VsdCIsImtleSIsInZhbHVlIiwicmVkdWNlIiwib1N0YXRlcyIsIm1TdGF0ZSIsIm9DdXJyZW50U3RhdGUiLCJtZXJnZU9iamVjdHMiLCJwcmV2U3RhdGUiLCJfY3VycmVudFZpZXdTdGF0ZSIsImtleXMiLCJsZW5ndGgiLCJfYWRkTWlzc2luZ1N0YXRlIiwibUFkZGl0aW9uYWxTdGF0ZXMiLCJfcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwicmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwiYUNvbnRyb2xTdGF0ZUhhbmRsZXJzIiwibUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJFcnJvciIsImNhbGwiLCJhU3RhdGVzIiwib0ZpbmFsU3RhdGUiLCJhcHBseUluaXRpYWxTdGF0ZU9ubHkiLCJjb250cm9sS2V5Iiwib05hdlBhcmFtZXRlciIsIl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUiLCJfX2lzUm9vdFZpZXdDb250cm9sbGVyIiwib25CZWZvcmVTdGF0ZUFwcGxpZWQiLCJoYXNWYXJpYW50TWFuYWdlbWVudCIsImNvbmZpZ09mU3RhdGVBcHBseSIsIm5hdlR5cGVQYXJhbWV0ZXJzIiwic3RhdGUiLCJzb3J0ZWRBZGFwdFN0YXRlQ29udHJvbHMiLCJtb2RpZmllZENvbnRyb2xzIiwiaXNWYXJpYW50TWFuYWdlbWVudENvbnRyb2wiLCJzS2V5IiwiaUFwcFN0YXRlIiwiYXBwbHlBZGRpdGlvbmFsU3RhdGVzIiwiYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIl9hcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzVG9GaWx0ZXJiYXIiLCJvbkFmdGVyU3RhdGVBcHBsaWVkIiwiX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJzVmFyaWFudElkIiwiYVZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlIiwib1ZhcmlhbnQiLCJwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUiLCJuYXZUeXBlIiwicm9vdFZpZXdDb250cm9sbGVyIiwiYVByb21pc2VzIiwiX29OYXZQYXJhbWV0ZXIiLCJfYVByb21pc2VzIiwidXBkYXRlQXBwU3RhdGVEZWJvdW5jZWQiLCJ1cGRhdGVBcHBTdGF0ZVRpbWVyIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwicmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yIiwic3RhdGVDb250cmlidXRvciIsImRlcmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yIiwidGFyZ2V0SW5kZXgiLCJmaW5kSW5kZXgiLCJjb250cmlidXRvciIsInNwbGljZSIsImdldEludGVyZmFjZSIsIl9nZXRDb250cm9sU3RhdGUiLCJmdWxsU3RhdGUiLCJpbml0aWFsU3RhdGUiLCJvUGF5bG9hZCIsInZhcmlhbnRNYW5hZ2VkQ29udHJvbHMiLCJmbkV2ZW50IiwiX3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2UiLCJhdHRhY2hTYXZlIiwiYXR0YWNoU2VsZWN0Iiwidm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0Iiwidm1Bc3NvY2lhdGVkY29udHJvbEtleSIsInZpZXdDb250cm9scyIsImNvbnRyb2xJZCIsInNldEluaXRpYWxTdGF0ZSIsIl9pc0luaXRpYWxTdGF0ZXNBcHBsaWNhYmxlIiwiaXNOYXZIeWJyaWQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJWaWV3U3RhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljUGFnZSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgTmF2TGlicmFyeSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlwbGVNb2RlQ29udHJvbCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L2NvbnRyb2xzL011bHRpcGxlTW9kZUNvbnRyb2xcIjtcbmltcG9ydCB0eXBlIEljb25UYWJGaWx0ZXIgZnJvbSBcInNhcC9tL0ljb25UYWJGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3QgZnJvbSBcInNhcC9tL1NlbGVjdFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgTURDQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuXG5pbXBvcnQgdHlwZSBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcIi4uL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXJDb250cm9sbGVyIGZyb20gXCIuLi9yb290Vmlldy9OYXZDb250YWluZXIuY29udHJvbGxlclwiO1xuXG4vLyBhZGRpdGlvbmFsU3RhdGVzIGFyZSBzdG9yZWQgbmV4dCB0byBjb250cm9sIElEcywgc28gbmFtZSBjbGFzaCBhdm9pZGFuY2UgbmVlZGVkLiBGb3J0dW5hdGVseSBJRHMgaGF2ZSByZXN0cmljdGlvbnM6XG4vLyBcIkFsbG93ZWQgaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIChjYXBpdGFsL2xvd2VyY2FzZSksIGRpZ2l0cywgdW5kZXJzY29yZXMsIGRhc2hlcywgcG9pbnRzIGFuZC9vciBjb2xvbnMuXCJcbi8vIFRoZXJlZm9yZSBhZGRpbmcgYSBzeW1ib2wgbGlrZSAjIG9yIEBcbmNvbnN0IE5hdlR5cGUgPSBOYXZMaWJyYXJ5Lk5hdlR5cGU7XG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBhIGN1c3RvbSBhY3Rpb24gdG8gYmUgdXNlZCBpbnNpZGUgdGhlIHRhYmxlIHRvb2xiYXJcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE5hdmlnYXRpb25QYXJhbWV0ZXIgPSB7XG5cdC8qKlxuXHQgKiAgVGhlIGFjdHVhbCBuYXZpZ2F0aW9uIHR5cGUuXG5cdCAqXG5cdCAqICBAcHVibGljXG5cdCAqL1xuXHRuYXZpZ2F0aW9uVHlwZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2VsZWN0aW9uVmFyaWFudD86IFNlbGVjdGlvblZhcmlhbnQ7XG5cdC8qKlxuXHQgKiBUaGUgc2VsZWN0aW9uVmFyaWFudCBkZWZhdWx0cyBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqXG5cdCAqICBAcHVibGljXG5cdCAqL1xuXHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM/OiBTZWxlY3Rpb25WYXJpYW50O1xuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIHRoZSBzdGFuZGFyZCB2YXJpYW50IG11c3QgYmUgdXNlZCBpbiB2YXJpYW50IG1hbmFnZW1lbnRcblx0ICpcblx0ICogIEBwdWJsaWNcblx0ICovXG5cdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50PzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IEFERElUSU9OQUxfU1RBVEVTX0tFWSA9IFwiI2FkZGl0aW9uYWxTdGF0ZXNcIjtcblxuZXhwb3J0IHR5cGUgQ29udHJvbFN0YXRlID1cblx0fCAoe1xuXHRcdFx0aW5pdGlhbFN0YXRlPzoge1xuXHRcdFx0XHRzdXBwbGVtZW50YXJ5Q29uZmlnPzogb2JqZWN0O1xuXHRcdFx0fTtcblx0XHRcdGZ1bGxTdGF0ZT86IHtcblx0XHRcdFx0ZmlsdGVyPzogb2JqZWN0O1xuXHRcdFx0fTtcblx0ICB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG5cdHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBOYXZQYXJhbWV0ZXJzID0ge1xuXHRuYXZpZ2F0aW9uVHlwZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBMZWdhY3lGaWx0ZXJCYXJTdGF0ZSA9IHtcblx0ZmlsdGVyPzogUmVjb3JkPHN0cmluZywgQXJyYXk8b2JqZWN0Pj47XG59ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1ldGhvZHMgdG8gcmV0cmlldmUgJiBhcHBseSBzdGF0ZXMgZm9yIHRoZSBkaWZmZXJlbnQgY29udHJvbHMgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCB0eXBlIENvbnRyb2xTdGF0ZUhhbmRsZXI8VCBleHRlbmRzIE1hbmFnZWRPYmplY3QsIEsgZXh0ZW5kcyB1bmtub3duIHwgdW5kZWZpbmVkPiA9IHtcblx0cmV0cmlldmU/OiAob0NvbnRyb2w6IFQpID0+IEsgfCBQcm9taXNlPEs+O1xuXHRhcHBseT86IChvQ29udHJvbDogVCwgY29udHJvbFN0YXRlOiBLLCBuYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlciwgc2tpcE1lcmdlPzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG5cdHJlZnJlc2hCaW5kaW5nPzogKG9Db250cm9sOiBUKSA9PiB2b2lkO1xufTtcbnR5cGUgQ29udHJvbFN0YXRlTWFwID0ge1xuXHRcInNhcC51aS5mbC52YXJpYW50cy5WYXJpYW50TWFuYWdlbWVudFwiOiBDb250cm9sU3RhdGVIYW5kbGVyPFZhcmlhbnRNYW5hZ2VtZW50LCB7IHZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCB9Pjtcblx0XCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuY29udHJvbHMuTXVsdGlwbGVNb2RlQ29udHJvbFwiOiBDb250cm9sU3RhdGVIYW5kbGVyPE11bHRpcGxlTW9kZUNvbnRyb2wsIHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9Pjtcblx0XCJzYXAudWkubWRjLlRhYmxlXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8TURDVGFibGUsIENvbnRyb2xTdGF0ZT47XG5cdFwic2FwLm0uU2VnbWVudGVkQnV0dG9uXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8U2VnbWVudGVkQnV0dG9uLCB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfT47XG5cdFwic2FwLm0uU2VsZWN0XCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8U2VsZWN0LCB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfT47XG5cdFwic2FwLmYuRHluYW1pY1BhZ2VcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxEeW5hbWljUGFnZSwgeyBoZWFkZXJFeHBhbmRlZDogYm9vbGVhbiB9Pjtcblx0XCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxDb21wb25lbnRDb250YWluZXIsIG9iamVjdD47XG5cdFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxGRVZpZXcsIENvbnRyb2xTdGF0ZT47XG59O1xuY29uc3QgZ2V0U3RhdGVVdGlsID0gYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dHlwZW9mIFN0YXRlVXRpbD4ge1xuXHRyZXR1cm4gKGF3YWl0IGltcG9ydChcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIikpLmRlZmF1bHQ7XG59O1xuY29uc3QgX21Db250cm9sU3RhdGVIYW5kbGVyTWFwOiBDb250cm9sU3RhdGVNYXAgPSB7XG5cdFwic2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9WTTogVmFyaWFudE1hbmFnZW1lbnQpOiB7IHZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCB9IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHZhcmlhbnRJZDogb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogYXN5bmMgZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgb1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgY29udHJvbFN0YXRlPzogeyB2YXJpYW50SWQ/OiBzdHJpbmcgfCBudWxsIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChjb250cm9sU3RhdGUgJiYgY29udHJvbFN0YXRlLnZhcmlhbnRJZCAhPT0gdW5kZWZpbmVkICYmIGNvbnRyb2xTdGF0ZS52YXJpYW50SWQgIT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXNWYXJpYW50SWRBdmFpbGFibGUgPSB0aGlzLl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNLCBjb250cm9sU3RhdGUudmFyaWFudElkKTtcblx0XHRcdFx0XHRsZXQgc1ZhcmlhbnRSZWZlcmVuY2U7XG5cdFx0XHRcdFx0aWYgKGlzVmFyaWFudElkQXZhaWxhYmxlKSB7XG5cdFx0XHRcdFx0XHRzVmFyaWFudFJlZmVyZW5jZSA9IGNvbnRyb2xTdGF0ZS52YXJpYW50SWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNWYXJpYW50UmVmZXJlbmNlID0gb1ZNLmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdFx0XHRcdFx0dGhpcy5jb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlLnB1c2goLi4ub1ZNLmdldEZvcigpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCIpKS5kZWZhdWx0O1xuXHRcdFx0XHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50OiBvVk0sXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlIGFzIHN0cmluZ1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKG9WTSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkucHVzaCguLi5vVk0uZ2V0Rm9yKCkpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZShvVk0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKG9WTSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuY29udHJvbHMuTXVsdGlwbGVNb2RlQ29udHJvbFwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChtdWx0aXBsZU1vZGVDb250cm9sOiBNdWx0aXBsZU1vZGVDb250cm9sKTogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG11bHRpcGxlTW9kZUNvbnRyb2wuY29udGVudC5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChtdWx0aXBsZU1vZGVDb250cm9sOiBNdWx0aXBsZU1vZGVDb250cm9sLCBjb250cm9sU3RhdGU/OiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSkge1xuXHRcdFx0aWYgKGNvbnRyb2xTdGF0ZT8uc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y29uc3QgdGFiQmFyID0gbXVsdGlwbGVNb2RlQ29udHJvbC5jb250ZW50O1xuXHRcdFx0XHRpZiAodGFiQmFyLmdldEl0ZW1zKCkuZmluZCgoaXRlbSkgPT4gKGl0ZW0gYXMgSWNvblRhYkZpbHRlcikuZ2V0S2V5KCkgPT09IGNvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSkpIHtcblx0XHRcdFx0XHR0YWJCYXIuc2V0U2VsZWN0ZWRLZXkoY29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkubWRjLlRhYmxlXCI6IHtcblx0XHRyZWZyZXNoQmluZGluZzogZnVuY3Rpb24gKG9UYWJsZTogTURDVGFibGUpIHtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb1Jvb3RCaW5kaW5nID0gb1RhYmxlQmluZGluZy5nZXRSb290QmluZGluZygpO1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IG9UYWJsZUJpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhcyB7IGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob1Jvb3RCaW5kaW5nID09PSBvVGFibGVCaW5kaW5nICYmIGFnZ3JlZ2F0aW9uPy5oaWVyYXJjaHlRdWFsaWZpZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdC8vIGFic29sdXRlIGJpbmRpbmcgKGV4Y2VwdCBUcmVlVGFibGUsIHdoZXJlIHdlIHdhbnQgdG8ga2VlcCBleHBhbnNpb24gc3RhdGVzKVxuXHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHJlbGF0aXZlIGJpbmRpbmcgb3IgVHJlZVRhYmxlXG5cdFx0XHRcdFx0Y29uc3Qgb0hlYWRlckNvbnRleHQgPSBvVGFibGVCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRcdFx0XHRjb25zdCBzR3JvdXBJZCA9IG9UYWJsZUJpbmRpbmcuZ2V0R3JvdXBJZCgpO1xuXG5cdFx0XHRcdFx0aWYgKG9IZWFkZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRvSGVhZGVyQ29udGV4dC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IFwiXCIgfV0sIHNHcm91cElkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5pbmZvKGBUYWJsZTogJHtvVGFibGUuZ2V0SWQoKX0gd2FzIG5vdCByZWZyZXNoZWQuIE5vIGJpbmRpbmcgZm91bmQhYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5tLlNlZ21lbnRlZEJ1dHRvblwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvU2VnbWVudGVkQnV0dG9uOiBTZWdtZW50ZWRCdXR0b24pOiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1NlZ21lbnRlZEJ1dHRvbi5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9TZWdtZW50ZWRCdXR0b246IFNlZ21lbnRlZEJ1dHRvbiwgb0NvbnRyb2xTdGF0ZT86IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KTogdm9pZCB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZT8uc2VsZWN0ZWRLZXkgJiYgb0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSAhPT0gb1NlZ21lbnRlZEJ1dHRvbi5nZXRTZWxlY3RlZEtleSgpKSB7XG5cdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24uc2V0U2VsZWN0ZWRLZXkob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSk7XG5cdFx0XHRcdGlmIChvU2VnbWVudGVkQnV0dG9uLmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLkFjdGlvblRvb2xiYXJcIikpIHtcblx0XHRcdFx0XHRvU2VnbWVudGVkQnV0dG9uLmZpcmVFdmVudChcInNlbGVjdGlvbkNoYW5nZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAubS5TZWxlY3RcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1NlbGVjdDogU2VsZWN0KTogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9TZWxlY3QuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvU2VsZWN0OiBTZWxlY3QsIG9Db250cm9sU3RhdGU/OiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSk6IHZvaWQge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGU/LnNlbGVjdGVkS2V5ICYmIG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkgIT09IG9TZWxlY3QuZ2V0U2VsZWN0ZWRLZXkoKSkge1xuXHRcdFx0XHRvU2VsZWN0LnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdFx0XHRpZiAob1NlbGVjdC5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdFx0b1NlbGVjdC5maXJlRXZlbnQoXCJjaGFuZ2VcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLmYuRHluYW1pY1BhZ2VcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob0R5bmFtaWNQYWdlOiBEeW5hbWljUGFnZSk6IHsgaGVhZGVyRXhwYW5kZWQ6IGJvb2xlYW4gfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRoZWFkZXJFeHBhbmRlZDogb0R5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9EeW5hbWljUGFnZTogRHluYW1pY1BhZ2UsIG9Db250cm9sU3RhdGU/OiB7IGhlYWRlckV4cGFuZGVkOiBib29sZWFuIH0pOiB2b2lkIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChvQ29udHJvbFN0YXRlLmhlYWRlckV4cGFuZGVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1ZpZXc6IEZFVmlldykge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAob1ZpZXc6IEZFVmlldywgb0NvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsIHNraXBNZXJnZT86IGJvb2xlYW4pIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSAmJiBvTmF2UGFyYW1ldGVycykge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLmFwcGx5Vmlld1N0YXRlKG9Db250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzLCBza2lwTWVyZ2UpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGFzeW5jIGZ1bmN0aW9uIChvVmlldzogRkVWaWV3KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5yZWZyZXNoVmlld0JpbmRpbmdzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiOiB7XG5cdFx0cmV0cmlldmU6IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9Db21wb25lbnRDb250YWluZXI6IENvbXBvbmVudENvbnRhaW5lcik6IFByb21pc2U8b2JqZWN0PiB7XG5cdFx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbXBvbmVudENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0aWYgKG9Db21wb25lbnQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmV0cmlldmVDb250cm9sU3RhdGUob0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7fSBhcyBvYmplY3Q7XG5cdFx0fSxcblx0XHRhcHBseTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdFx0dGhpczogVmlld1N0YXRlLFxuXHRcdFx0b0NvbXBvbmVudENvbnRhaW5lcjogQ29tcG9uZW50Q29udGFpbmVyLFxuXHRcdFx0b0NvbnRyb2xTdGF0ZTogb2JqZWN0LFxuXHRcdFx0b05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyXG5cdFx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbXBvbmVudENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0aWYgKG9Db21wb25lbnQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBwbHlDb250cm9sU3RhdGUob0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLCBvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuLyoqXG4gKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9mZmVyaW5nIGhvb2tzIGZvciBzdGF0ZSBoYW5kbGluZ1xuICpcbiAqIElmIHlvdSBuZWVkIHRvIG1haW50YWluIGEgc3BlY2lmaWMgc3RhdGUgZm9yIHlvdXIgYXBwbGljYXRpb24sIHlvdSBjYW4gdXNlIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbi5cbiAqXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS44NS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZVwiKVxuY2xhc3MgVmlld1N0YXRlIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyOiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWQ6IFByb21pc2U8dW5rbm93bj47XG5cblx0cHJpdmF0ZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlPzogRnVuY3Rpb247XG5cblx0cHVibGljIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRjb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseTogc3RyaW5nW10gPSBbXTtcblxuXHR2aWV3U3RhdGVDb250cm9sczogTWFuYWdlZE9iamVjdFtdID0gW107XG5cblx0c3RhdGVDb250cmlidXRvcnM6IChNYW5hZ2VkT2JqZWN0ICYgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPHVua25vd24+KVtdID0gW107XG5cblx0X2N1cnJlbnRWaWV3U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuXHRjb25maWdPZlN0YXRlQXBwbHk/OiB7XG5cdFx0c2tpcE1lcmdlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRuYXZUeXBlUGFyYW1ldGVycz86IE5hdlBhcmFtZXRlcnM7XG5cdFx0c3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0fTtcblxuXHRwcml2YXRlIHVwZGF0ZUFwcFN0YXRlVGltZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogQ29uc3RydWN0b3IuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyID0gMDtcblx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJlZnJlc2hWaWV3QmluZGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYUNvbnRyb2xzID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRhQ29udHJvbHNcblx0XHRcdC5maWx0ZXIoKG9Db250cm9sKSA9PiB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EgJiYgb0NvbnRyb2wuaXNBPE1hbmFnZWRPYmplY3Q+KFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKTtcblx0XHRcdH0pXG5cdFx0XHQuZm9yRWFjaCgob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHtcblx0XHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbih0aGlzLnJlZnJlc2hDb250cm9sQmluZGluZy5iaW5kKHRoaXMsIG9Db250cm9sKSk7XG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhZGQgYWxsIGNvbnRyb2xzIHJlbGV2YW50IGZvciByZWZyZXNoaW5nIHRvIHRoZSBwcm92aWRlZCBjb250cm9sIGFycmF5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gYUNvbGxlY3RlZENvbnRyb2xzIFRoZSBjb2xsZWN0ZWQgY29udHJvbHNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyhhQ29sbGVjdGVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyByZWZyZXNoQ29udHJvbEJpbmRpbmcob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciA9IHRoaXMuZ2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRpZiAodHlwZW9mIG9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyLnJlZnJlc2hCaW5kaW5nICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdExvZy5pbmZvKGByZWZyZXNoQmluZGluZyBoYW5kbGVyIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfSBpcyBub3QgcHJvdmlkZWRgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlci5yZWZyZXNoQmluZGluZy5iaW5kKHRoaXMsIG9Db250cm9sKSk7XG5cdFx0fVxuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+IGZ1bmN0aW9uIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBoYW5kbGVyIGZvclxuXHQgKiBAcmV0dXJucyBBIHBsYWluIG9iamVjdCB3aXRoIG9uZSBmdW5jdGlvbjogPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+XG5cdCAqL1xuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlcihvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IHtcblx0XHRyZWZyZXNoQmluZGluZz86IChvQ29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gdm9pZDtcblx0fSB7XG5cdFx0Y29uc3Qgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjoge1xuXHRcdFx0cmVmcmVzaEJpbmRpbmc/OiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHZvaWQ7XG5cdFx0fSA9IHt9O1xuXHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0Zm9yIChjb25zdCBzVHlwZSBpbiBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXApIHtcblx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHQvLyBwYXNzIG9ubHkgdGhlIHJlZnJlc2hCaW5kaW5nIGhhbmRsZXIgaW4gYW4gb2JqZWN0IHNvIHRoYXQgOlxuXHRcdFx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIGhhcyBhY2Nlc3Mgb25seSB0byByZWZyZXNoQmluZGluZyBhbmQgbm90IGFwcGx5IGFuZCByZXRlcml2ZSBhdCB0aGlzIHN0YWdlXG5cdFx0XHRcdFx0Ly8gMi4gQXBwbGljYXRpb24gbW9kaWZpY2F0aW9ucyB0byB0aGUgb2JqZWN0IHdpbGwgYmUgcmVmbGVjdGVkIGhlcmUgKGFzIHdlIHBhc3MgYnkgcmVmZXJlbmNlKVxuXHRcdFx0XHRcdG9SZWZyZXNoQmluZGluZ0hhbmRsZXJbXCJyZWZyZXNoQmluZGluZ1wiXSA9XG5cdFx0XHRcdFx0XHQoX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlIGFzIGtleW9mIENvbnRyb2xTdGF0ZU1hcF0ucmVmcmVzaEJpbmRpbmcgYXMgKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiB2b2lkKSB8fFxuXHRcdFx0XHRcdFx0e307XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihvQ29udHJvbCwgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcik7XG5cdFx0cmV0dXJuIG9SZWZyZXNoQmluZGluZ0hhbmRsZXI7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT4gZnVuY3Rpb24gZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gX29Db250cm9sIFRoZSBjb250cm9sIGZvciB3aGljaCB0aGUgcmVmcmVzaCBoYW5kbGVyIGlzIGFkYXB0ZWQuXG5cdCAqIEBwYXJhbSBfb0NvbnRyb2xIYW5kbGVyIEEgcGxhaW4gb2JqZWN0IHdoaWNoIGNhbiBoYXZlIG9uZSBmdW5jdGlvbjogPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+XG5cdCAqIEBwYXJhbSBfb0NvbnRyb2xIYW5kbGVyLnJlZnJlc2hCaW5kaW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXIoXG5cdFx0X29Db250cm9sOiBNYW5hZ2VkT2JqZWN0LFxuXHRcdF9vQ29udHJvbEhhbmRsZXI6IHtcblx0XHRcdHJlZnJlc2hCaW5kaW5nPzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiB2b2lkO1xuXHRcdH1cblx0KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHN1c3BlbmRlZCBkdWUgdG8ga2VlcC1hbGl2ZSBtb2RlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uU3VzcGVuZCgpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgcmVzdG9yZWQgZHVlIHRvIGtlZXAtYWxpdmUgbW9kZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJlc3RvcmUoKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJ1Y3RvciBtZXRob2QgZm9yIG9iamVjdHMuXG5cdCAqL1xuXHRkZXN0cm95KCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0c3VwZXIuZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBmdW5jdGlvbiB0byBlbmFibGUgbXVsdGkgb3ZlcnJpZGUuIEl0IGlzIGFkZGluZyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciAoYXJyYXkpIHRvIHRoZSBwcm92aWRlZFxuXHQgKiBmdW5jdGlvbiAoYW5kIGl0cyBwYXJhbWV0ZXJzKSwgdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCB2aWEgPGNvZGU+UHJvbWlzZS5hbGw8L2NvZGU+LlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5DYWxsIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIGFyZ3Ncblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJlc29sdmVkIHdpdGggdGhlIHJlc3VsdCBvZiBhbGwgb3ZlcnJpZGVzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGNvbGxlY3RSZXN1bHRzKGZuQ2FsbDogRnVuY3Rpb24sIC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8Q29udHJvbFtdPiB7XG5cdFx0Y29uc3QgYVJlc3VsdHM6IENvbnRyb2xbXSA9IFtdO1xuXHRcdGFyZ3MucHVzaChhUmVzdWx0cyk7XG5cdFx0Zm5DYWxsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPiBmdW5jdGlvbnMgZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEBwYXJhbSBhQ29udHJvbEhhbmRsZXIgQSBsaXN0IG9mIHBsYWluIG9iamVjdHMgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBhQ29udHJvbEhhbmRsZXI6IG9iamVjdFtdKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+IGZ1bmN0aW9ucyBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHJldHVybnMgQSBwbGFpbiBvYmplY3Qgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogQ29udHJvbFN0YXRlSGFuZGxlcjxNYW5hZ2VkT2JqZWN0LCBvYmplY3Q+W10ge1xuXHRcdGNvbnN0IGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8TWFuYWdlZE9iamVjdCwgb2JqZWN0PltdID0gW10sXG5cdFx0XHRhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcjogQ29udHJvbFN0YXRlSGFuZGxlcjxNYW5hZ2VkT2JqZWN0LCBvYmplY3Q+W10gPSBbXTtcblx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0b0NvbnRyb2wuaXNBPElWaWV3U3RhdGVDb250cmlidXRvcjxvYmplY3Q+PihcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLnZpZXdTdGF0ZS5JVmlld1N0YXRlQ29udHJpYnV0b3JcIikgJiZcblx0XHRcdFx0b0NvbnRyb2wucmV0cmlldmVTdGF0ZSAmJlxuXHRcdFx0XHRvQ29udHJvbC5hcHBseVN0YXRlXG5cdFx0XHQpIHtcblx0XHRcdFx0YUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlci5wdXNoKHtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0XHRcdFx0XHRyZXRyaWV2ZTogYXN5bmMgKF9jb250cm9sKSA9PiBvQ29udHJvbC5yZXRyaWV2ZVN0YXRlLmJpbmQob0NvbnRyb2wpKCksXG5cblx0XHRcdFx0XHRhcHBseTogYXN5bmMgKFxuXHRcdFx0XHRcdFx0X2NvbnRyb2w6IE1hbmFnZWRPYmplY3QsXG5cdFx0XHRcdFx0XHRjb250cm9sU3RhdGU/OiBvYmplY3QsXG5cdFx0XHRcdFx0XHRvTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0XHRcdFx0XHRza2lwTWVyZ2U/OiBib29sZWFuXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0XHRcdFx0XHQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3VsZEFwcGx5RGlmZlN0YXRlID1cblx0XHRcdFx0XHRcdFx0IXRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LmluY2x1ZGVzKG9Db250cm9sLmdldElkKCkpICYmXG5cdFx0XHRcdFx0XHRcdCF0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5jbHVkZXMob0NvbnRyb2wuZ2V0SWQoKSkgJiZcblx0XHRcdFx0XHRcdFx0b05hdlBhcmFtZXRlcnM/Lm5hdmlnYXRpb25UeXBlICE9PSBOYXZUeXBlLmh5YnJpZCAmJlxuXHRcdFx0XHRcdFx0XHRza2lwTWVyZ2UgIT09IHRydWU7XG5cdFx0XHRcdFx0XHRpZiAoIWNvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0NvbnRyb2wuYXBwbHlMZWdhY3lTdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IG9Db250cm9sLmFwcGx5TGVnYWN5U3RhdGUuYmluZChvQ29udHJvbCkoXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldENvbnRyb2xTdGF0ZS5iaW5kKHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRcdFx0b05hdlBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG91bGRBcHBseURpZmZTdGF0ZSxcblx0XHRcdFx0XHRcdFx0XHRcdHNraXBNZXJnZVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9Db250cm9sLmFwcGx5U3RhdGUuYmluZChvQ29udHJvbCkoY29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycywgc2hvdWxkQXBwbHlEaWZmU3RhdGUsIHNraXBNZXJnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoY29uc3Qgc1R5cGUgaW4gX21Db250cm9sU3RhdGVIYW5kbGVyTWFwKSB7XG5cdFx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHRcdC8vIGF2b2lkIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgaW50ZXJuYWwgX21Db250cm9sU3RhdGVIYW5kbGVyTWFwXG5cdFx0XHRcdFx0XHRhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLnB1c2goXG5cdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oe30sIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcFtzVHlwZSBhcyBrZXlvZiBDb250cm9sU3RhdGVNYXBdKSBhcyBDb250cm9sU3RhdGVIYW5kbGVyPFxuXHRcdFx0XHRcdFx0XHRcdE1hbmFnZWRPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0b2JqZWN0XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wsIGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyKTtcblx0XHRyZXR1cm4gYUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlci5jb25jYXQoYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFkZCBhbGwgY29udHJvbHMgZm9yIGdpdmVuIHZpZXcgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgdGhlIHN0YXRlIGhhbmRsaW5nIHRvIHRoZSBwcm92aWRlZCBjb250cm9sIGFycmF5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gX2FDb2xsZWN0ZWRDb250cm9scyBUaGUgY29sbGVjdGVkIGNvbnRyb2xzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YWRhcHRTdGF0ZUNvbnRyb2xzKF9hQ29sbGVjdGVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSk6IHZvaWQge1xuXHRcdF9hQ29sbGVjdGVkQ29udHJvbHMucHVzaCguLi50aGlzLnN0YXRlQ29udHJpYnV0b3JzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBrZXkgdG8gYmUgdXNlZCBmb3IgZ2l2ZW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBrZXkgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBrZXkgdG8gYmUgdXNlZCBmb3Igc3RvcmluZyB0aGUgY29udHJvbHMgc3RhdGVcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRTdGF0ZUtleShvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldExvY2FsSWQob0NvbnRyb2wuZ2V0SWQoKSkgfHwgb0NvbnRyb2wuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgdmlldyBzdGF0ZSBvZiB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBiZWZvcmUgZmluaXNoaW5nLCBhbGwgYnV0IHRoZSBmaW5hbCByZXNwb25zZSB3aWxsIHJlc29sdmUgdG8gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPi5cblx0ICpcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgdmlldyBzdGF0ZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmV0cmlldmVWaWV3U3RhdGUoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZD4ge1xuXHRcdCsrdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0bGV0IG9WaWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkO1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiAoTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZClbXSA9IGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdFN0YXRlQ29udHJvbHMpO1xuXHRcdFx0Y29uc3QgYVJlc29sdmVkU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdChcblx0XHRcdFx0XHRhQ29udHJvbHMuZmlsdGVyKGZ1bmN0aW9uIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0E8TWFuYWdlZE9iamVjdD4oXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0XHRcdH0pIGFzIE1hbmFnZWRPYmplY3RbXVxuXHRcdFx0XHQpLm1hcChhc3luYyAob0NvbnRyb2wpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29udHJvbCkudGhlbigodlJlc3VsdDogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0a2V5OiB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHZSZXN1bHRcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0b1ZpZXdTdGF0ZSA9IGFSZXNvbHZlZFN0YXRlcy5yZWR1Y2UoZnVuY3Rpb24gKG9TdGF0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBtU3RhdGU6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pIHtcblx0XHRcdFx0Y29uc3Qgb0N1cnJlbnRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0b0N1cnJlbnRTdGF0ZVttU3RhdGUua2V5XSA9IG1TdGF0ZS52YWx1ZTtcblx0XHRcdFx0cmV0dXJuIG1lcmdlT2JqZWN0cyhvU3RhdGVzLCBvQ3VycmVudFN0YXRlKTtcblx0XHRcdH0sIHt9KTtcblx0XHRcdGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuX2N1cnJlbnRWaWV3U3RhdGU7XG5cdFx0XHRpZiAocHJldlN0YXRlICYmIE9iamVjdC5rZXlzKHByZXZTdGF0ZSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aGlzLl9hZGRNaXNzaW5nU3RhdGUob1ZpZXdTdGF0ZSwgcHJldlN0YXRlKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG1BZGRpdGlvbmFsU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpKTtcblx0XHRcdGlmIChtQWRkaXRpb25hbFN0YXRlcyAmJiBPYmplY3Qua2V5cyhtQWRkaXRpb25hbFN0YXRlcykubGVuZ3RoKSB7XG5cdFx0XHRcdG9WaWV3U3RhdGVbQURESVRJT05BTF9TVEFURVNfS0VZXSA9IG1BZGRpdGlvbmFsU3RhdGVzO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHQtLXRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyO1xuXHRcdH1cblx0XHR0aGlzLl9jdXJyZW50Vmlld1N0YXRlID0gb1ZpZXdTdGF0ZTtcblx0XHRyZXR1cm4gdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIgPT09IDAgPyBvVmlld1N0YXRlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gVG8gY2FycnkgZm9yd2FyZCB1bmFwcGxpZWQgc3RhdGUgbG9zdCBkdWUgdG8gbGF6eSBsb2FkaW5nIG9mIGNvbnRyb2xzLlxuXHQvL1xuXHQvLyBJZiB1c2VyIDEgY2hhbmdlcyBhIGNvbnRyb2wncyBzdGF0ZSBpbiBhIGxhenktbG9hZGVkIHNlY3Rpb24gYW5kIG5hdmlnYXRlcyBhd2F5LCB0aGVuIHNoYXJlcyB0aGUgVVJMIHdpdGggdXNlciAyLFxuXHQvLyB3aG8gZG9lc24ndCB2aXNpdCB0aGUgbGF6eS1sb2FkZWQgc2VjdGlvbiwgdGhlIGNvbnRyb2wncyBzdGF0ZSBpcyBtaXNzZWQgaW4gdGhlIG5ldyBhcHAgc3RhdGUuXG5cdC8vIFRoaXMgZW5zdXJlcyB0aGUgZnVsbCBzdGF0ZSBmcm9tIHVzZXIgMSBpcyBwcmVzZXJ2ZWQgYW5kIHRyYW5zZmVycmVkIHRvIHVzZXIgMyB3aGVuIHRoZSBVUkwgaXMgc2hhcmVkLlxuXHRfYWRkTWlzc2luZ1N0YXRlKG9WaWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwcmV2U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcHJldlN0YXRlKSB7XG5cdFx0XHRpZiAoIShrZXkgaW4gb1ZpZXdTdGF0ZSkpIHtcblx0XHRcdFx0b1ZpZXdTdGF0ZVtrZXldID0gcHJldlN0YXRlW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgbWFwIG9mIGFkZGl0aW9uYWwgc3RhdGVzIChub3QgY29udHJvbCBib3VuZCkgdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmlldyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gdmlldy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG1BZGRpdGlvbmFsU3RhdGVzIFRoZSBhZGRpdGlvbmFsIHN0YXRlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMobUFkZGl0aW9uYWxTdGF0ZXM6IG9iamVjdCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiBhZGRpdGlvbmFsIHN0YXRlcyAobm90IGNvbnRyb2wgYm91bmQpIHRvIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IHZpZXcgc3RhdGUgb2YgdGhlIGdpdmVuIHZpZXcuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEFkZGl0aW9uYWwgdmlldyBzdGF0ZXNcblx0ICovXG5cdF9yZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMoKTogdW5rbm93biB7XG5cdFx0Y29uc3QgbUFkZGl0aW9uYWxTdGF0ZXMgPSB7fTtcblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLnJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhtQWRkaXRpb25hbFN0YXRlcyk7XG5cdFx0cmV0dXJuIG1BZGRpdGlvbmFsU3RhdGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIHRoZSBnaXZlbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIG9iamVjdCB0byBnZXQgdGhlIHN0YXRlIGZvclxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdGUgZm9yIHRoZSBnaXZlbiBjb250cm9sXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJldHJpZXZlQ29udHJvbFN0YXRlKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxvYmplY3Q+IHtcblx0XHRjb25zdCBhQ29udHJvbFN0YXRlSGFuZGxlcnMgPSB0aGlzLmdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdGFDb250cm9sU3RhdGVIYW5kbGVycy5tYXAoYXN5bmMgKG1Db250cm9sU3RhdGVIYW5kbGVyKSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbUNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZSBpcyBub3QgYSBmdW5jdGlvbiBmb3IgY29udHJvbDogJHtvQ29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbUNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUuY2FsbCh0aGlzLCBvQ29udHJvbCk7XG5cdFx0XHR9KVxuXHRcdCkudGhlbigoYVN0YXRlczogb2JqZWN0W10pID0+IHtcblx0XHRcdHJldHVybiBhU3RhdGVzLnJlZHVjZShmdW5jdGlvbiAob0ZpbmFsU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvQ3VycmVudFN0YXRlOiBvYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuIG1lcmdlT2JqZWN0cyhvRmluYWxTdGF0ZSwgb0N1cnJlbnRTdGF0ZSk7XG5cdFx0XHR9LCB7fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIHRoZSB2aWV3IHN0YXRlIHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgb25jZSBpbml0aWFsbHkuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkfS5cblx0ICpcblx0ICogSW1wb3J0YW50OlxuXHQgKiBZb3Ugc2hvdWxkIG9ubHkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIGN1c3RvbSBwYWdlcyBhbmQgbm90IGZvciB0aGUgc3RhbmRhcmQgTGlzdFJlcG9ydFBhZ2UgYW5kIE9iamVjdFBhZ2UhXG5cdCAqXG5cdCAqIEByZXR1cm5zIElmIDxjb2RlPnRydWU8L2NvZGU+LCBvbmx5IHRoZSBpbml0aWFsIHZpZXcgc3RhdGUgaXMgYXBwbGllZCBvbmNlLFxuXHQgKiBlbHNlIGFueSBuZXcgdmlldyBzdGF0ZSBpcyBhbHNvIGFwcGxpZWQgb24gZm9sbG93LXVwIGNhbGxzIChkZWZhdWx0KVxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0YXBwbHlJbml0aWFsU3RhdGVPbmx5KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udHJvbCBUaGUgbWFuYWdlZCBjb250cm9sIG9iamVjdCB3aG9zZSBzdGF0ZSBpcyB0byBiZSByZXRyaWV2ZWQuXG5cdCAqIEByZXR1cm5zIC0gVGhlIHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgY29udHJvbC5cblx0ICovXG5cdGdldENvbnRyb2xTdGF0ZShjb250cm9sOiBNYW5hZ2VkT2JqZWN0KTogQ29udHJvbFN0YXRlIHtcblx0XHRjb25zdCBvVmlld1N0YXRlID0gdGhpcy5fY3VycmVudFZpZXdTdGF0ZTtcblx0XHRsZXQgY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUgPSB7fTtcblx0XHRpZiAob1ZpZXdTdGF0ZSkge1xuXHRcdFx0Y29uc3QgY29udHJvbEtleSA9IHRoaXMuZ2V0U3RhdGVLZXkoY29udHJvbCk7XG5cdFx0XHRjb250cm9sU3RhdGUgPSBvVmlld1N0YXRlW2NvbnRyb2xLZXldIGFzIFJlY29yZDxzdHJpbmcsIENvbnRyb2xTdGF0ZT47XG5cdFx0fVxuXHRcdHJldHVybiBjb250cm9sU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgZ2l2ZW4gdmlldyBzdGF0ZSB0byB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICpcblx0ICogQHBhcmFtIG9WaWV3U3RhdGUgVGhlIHZpZXcgc3RhdGUgdG8gYXBwbHkgKGNhbiBiZSB1bmRlZmluZWQpXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMgVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudCBEZWZpbmVzIHdoZXRoZXIgdGhlIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKiBAcGFyYW0gc2tpcE1lcmdlIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byBza2lwIHRoZSBrZXkgdXNlciBzaGluZSB0aHJvdWdoXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBhcHBseVZpZXdTdGF0ZShcblx0XHRvVmlld1N0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0XHRvTmF2UGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdHNraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlJbml0aWFsU3RhdGVPbmx5KCkgJiYgdGhpcy5fZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHQvL1NOT1c6IENTMjAyMzAwMDY3NjU4OTcgRm9yIHRyYW5zaWVudCBBcHBTdGF0ZSwgd2UgcmV0dXJuIHdpdGhvdXQgYXBwbHlpbmcgdGhlIHN0YXRlIHRvIGNvbnRyb2xzIGluIFJvb3RDb250YWluZXIncyBjaGlsZHJlbiB2aWV3cyBhcyB0aGVyZSBpcyBubyBzdGF0ZSB0byBhcHBseVxuXHRcdFx0Ly9Pbmx5IG5lZWQgaXMgdG8gcmVzb2x2ZSB0aGUgX3BJbml0aWFsU3RhdGVBcHBsaWVkIHNvIHRoYXQgdXBkYXRlIG9mIEFwcFN0YXRlIGNhbiBzdGlsbCBoYXBwZW5cblx0XHRcdGlmICh0aGlzLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9WaWV3U3RhdGUsIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUpICYmICF0aGlzLl9faXNSb290Vmlld0NvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25CZWZvcmVTdGF0ZUFwcGxpZWQsIFtdLCBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlKTtcblx0XHRcdGNvbnN0IGFDb250cm9sczogTWFuYWdlZE9iamVjdFtdID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0U3RhdGVDb250cm9scyk7XG5cdFx0XHR0aGlzLnZpZXdTdGF0ZUNvbnRyb2xzID0gYUNvbnRyb2xzO1xuXHRcdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdGxldCBoYXNWYXJpYW50TWFuYWdlbWVudCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fY3VycmVudFZpZXdTdGF0ZSA9IG9WaWV3U3RhdGU7XG5cblx0XHRcdHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5ID0gdGhpcy5jb25maWdPZlN0YXRlQXBwbHkgPz8ge307XG5cdFx0XHR0aGlzLmNvbmZpZ09mU3RhdGVBcHBseS5za2lwTWVyZ2UgPSBza2lwTWVyZ2U7XG5cdFx0XHR0aGlzLmNvbmZpZ09mU3RhdGVBcHBseS5uYXZUeXBlUGFyYW1ldGVycyA9IG9OYXZQYXJhbWV0ZXI7XG5cdFx0XHR0aGlzLmNvbmZpZ09mU3RhdGVBcHBseS5zdGF0ZSA9IG9WaWV3U3RhdGU7XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVGhpcyBlbnN1cmVzIHRoYXQgdmFyaWFudE1hbmFnZW1lbnQgY29udHJvbCBpcyBhcHBsaWVkIGZpcnN0IHRvIGNhbGN1bGF0ZSB0aGUgaW5pdGlhbCBzdGF0ZSBmb3IgZGVsdGEgbG9naWNcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgc29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzID0gYUNvbnRyb2xzLnJlZHVjZSgobW9kaWZpZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdLCBjb250cm9sKSA9PiB7XG5cdFx0XHRcdGlmICghY29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBtb2RpZmllZENvbnRyb2xzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sID0gY29udHJvbC5pc0EoXCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIik7XG5cdFx0XHRcdGlmICghaGFzVmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0XHRoYXNWYXJpYW50TWFuYWdlbWVudCA9IGlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1vZGlmaWVkQ29udHJvbHMgPSBpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCA/IFtjb250cm9sLCAuLi5tb2RpZmllZENvbnRyb2xzXSA6IFsuLi5tb2RpZmllZENvbnRyb2xzLCBjb250cm9sXTtcblx0XHRcdFx0cmV0dXJuIG1vZGlmaWVkQ29udHJvbHM7XG5cdFx0XHR9LCBbXSk7XG5cblx0XHRcdC8vIEluIGNhc2Ugb2Ygbm8gVmFyaWFudCBNYW5hZ2VtZW50LCB0aGlzIGVuc3VyZXMgdGhhdCBpbml0aWFsIHN0YXRlcyBpcyBzZXRcblx0XHRcdGlmICghaGFzVmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSgpO1xuXHRcdFx0fVxuXHRcdFx0c29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKChvQ29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNLZXkgPSB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKTtcblx0XHRcdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKFxuXHRcdFx0XHRcdFx0dGhpcy5hcHBseUNvbnRyb2xTdGF0ZS5iaW5kKFxuXHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRvQ29udHJvbCxcblx0XHRcdFx0XHRcdFx0KG9WaWV3U3RhdGUgPyBvVmlld1N0YXRlW3NLZXldIDogdW5kZWZpbmVkKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0XHRcdFx0b05hdlBhcmFtZXRlcixcblx0XHRcdFx0XHRcdFx0c2tpcE1lcmdlID8/IGZhbHNlXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGF3YWl0IG9Qcm9taXNlQ2hhaW47XG5cdFx0XHRpZiAob05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUgfHwgb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSA9PT0gTmF2VHlwZS5oeWJyaWQpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyhcblx0XHRcdFx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFwcGx5QWRkaXRpb25hbFN0YXRlcyxcblx0XHRcdFx0XHRvVmlld1N0YXRlID8gb1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldIDogdW5kZWZpbmVkXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycywgb05hdlBhcmFtZXRlcik7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5fYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVyc1RvRmlsdGVyYmFyLCBvTmF2UGFyYW1ldGVyKTtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9WaWV3U3RhdGUsIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUpKSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLm9uQWZ0ZXJTdGF0ZUFwcGxpZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTtcblx0XHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHRfc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0XHRkZWxldGUgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdFx0cEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICF0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdH1cblxuXHRfaXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZSh2aWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLCBuYXZUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKCF2aWV3U3RhdGUgfHwgT2JqZWN0LmtleXModmlld1N0YXRlKS5sZW5ndGggPT09IDApICYmIG5hdlR5cGUgPT0gTmF2VHlwZS5pQXBwU3RhdGU7XG5cdH1cblxuXHRfX2lzUm9vdFZpZXdDb250cm9sbGVyKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIuaXNBPE5hdkNvbnRhaW5lckNvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyXCIpIHx8XG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIuaXNBPEZjbENvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IGJlZm9yZSBhIHN0YXRlIGZvciBnaXZlbiB2aWV3IGlzIGFwcGxpZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgTmF2aWdhdGlvbiB0eXBlIHJlc3BvbnNpYmxlIGZvciB0aGUgYXBwbHlpbmcgdGhlIHN0YXRlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZVN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSwgbmF2aWdhdGlvblR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IHdoZW4gc3RhdGUgZm9yIGdpdmVuIHZpZXcgd2FzIGFwcGxpZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25BZnRlclN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseWluZyBhZGRpdGlvbmFsLCBub3QgY29udHJvbCByZWxhdGVkLCBzdGF0ZXMgLSBpcyBjYWxsZWQgb25seSBpZiBuYXZpZ2F0aW9uIHR5cGUgaXMgaUFwcFN0YXRlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZpZXdTdGF0ZSBUaGUgY3VycmVudCB2aWV3IHN0YXRlXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YXBwbHlBZGRpdGlvbmFsU3RhdGVzKG9WaWV3U3RhdGU6IG9iamVjdCwgYVByb21pc2VzOiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0X2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhcihcblx0XHRfb05hdlBhcmFtZXRlcjoge1xuXHRcdFx0bmF2aWdhdGlvblR5cGU6IHN0cmluZztcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ/OiBvYmplY3Q7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM/OiBvYmplY3Q7XG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudD86IGJvb2xlYW47XG5cdFx0fSxcblx0XHRfYVByb21pc2VzOiBQcm9taXNlPHVua25vd24+XG5cdCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHkgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGlzIG5vdCBjYWxsZWQgaWYgdGhlIG5hdmlnYXRpb24gdHlwZSBpcyBpQXBwU3RhdGVcblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgVGhlIGFjdHVhbCBuYXZpZ2F0aW9uIHR5cGVcblx0ICogQHBhcmFtIFtvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnRdIFRoZSBzZWxlY3Rpb25WYXJpYW50IGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIFtvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnREZWZhdWx0c10gVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXIucmVxdWlyZXNTdGFuZGFyZFZhcmlhbnRdIERlZmluZXMgd2hldGhlciB0aGUgc3RhbmRhcmQgdmFyaWFudCBtdXN0IGJlIHVzZWQgaW4gdmFyaWFudCBtYW5hZ2VtZW50XG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGFwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnMoXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdG9OYXZQYXJhbWV0ZXI6IHtcblx0XHRcdG5hdmlnYXRpb25UeXBlOiBzdHJpbmc7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50Pzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudERlZmF1bHRzPzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdH0sXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdGFQcm9taXNlczogUHJvbWlzZTx1bmtub3duPlxuXHQpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5aW5nIHRoZSBnaXZlbiBzdGF0ZSB0byB0aGUgZ2l2ZW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBvYmplY3QgdG8gYXBwbHkgdGhlIGdpdmVuIHN0YXRlXG5cdCAqIEBwYXJhbSBvQ29udHJvbFN0YXRlIFRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2xcblx0ICogQHBhcmFtIFtvTmF2UGFyYW1ldGVyc10gVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBbc2tpcE1lcmdlXSBXaGV0aGVyIG1lcmdlIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdFxuXHQgKiBAcmV0dXJucyBSZXR1cm4gYSBwcm9taXNlIGZvciBhc3luYyBzdGF0ZSBoYW5kbGluZ1xuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBhcHBseUNvbnRyb2xTdGF0ZShcblx0XHRvQ29udHJvbDogTWFuYWdlZE9iamVjdCxcblx0XHRvQ29udHJvbFN0YXRlOiBvYmplY3QsXG5cdFx0b05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdHNraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYUNvbnRyb2xTdGF0ZUhhbmRsZXJzID0gdGhpcy5nZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sKTtcblx0XHRsZXQgb1Byb21pc2VDaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdGFDb250cm9sU3RhdGVIYW5kbGVycy5mb3JFYWNoKChtQ29udHJvbFN0YXRlSGFuZGxlcikgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBtQ29udHJvbFN0YXRlSGFuZGxlci5hcHBseSAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY29udHJvbFN0YXRlSGFuZGxlci5hcHBseSBpcyBub3QgYSBmdW5jdGlvbiBmb3IgY29udHJvbDogJHtvQ29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gKTtcblx0XHRcdH1cblx0XHRcdG9Qcm9taXNlQ2hhaW4gPSBvUHJvbWlzZUNoYWluLnRoZW4obUNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkuYmluZCh0aGlzLCBvQ29udHJvbCwgb0NvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnMsIHNraXBNZXJnZSkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHB1YmxpYyB1cGRhdGVBcHBTdGF0ZURlYm91bmNlZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy51cGRhdGVBcHBTdGF0ZVRpbWVyKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy51cGRhdGVBcHBTdGF0ZVRpbWVyKTtcblx0XHR9XG5cdFx0dGhpcy51cGRhdGVBcHBTdGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmJhc2UuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LCAyMDApIGFzIHVua25vd24gYXMgbnVtYmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIGEgZGVkaWNhdGVkIElWaWV3U3RhdGVDb250cmlidXRvciBpbnRvIHRoZSB3aG9sZSB2aWV3IHN0YXRlIGhhbmRsaW5nLlxuXHQgKiBAcGFyYW0gc3RhdGVDb250cmlidXRvciBUaGUgVmlld1N0YXRlQ29udHJpYnV0b3IgdG8gcmVnaXN0ZXJcblx0ICovXG5cdHJlZ2lzdGVyU3RhdGVDb250cmlidXRvcihzdGF0ZUNvbnRyaWJ1dG9yOiBNYW5hZ2VkT2JqZWN0ICYgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPHVua25vd24+KTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZUNvbnRyaWJ1dG9ycy5wdXNoKHN0YXRlQ29udHJpYnV0b3IpO1xuXHRcdGlmICh0aGlzLl9jdXJyZW50Vmlld1N0YXRlKSB7XG5cdFx0XHRjb25zdCBjb250cm9sS2V5ID0gdGhpcy5nZXRTdGF0ZUtleShzdGF0ZUNvbnRyaWJ1dG9yKTtcblx0XHRcdGNvbnN0IGNvbnRyb2xTdGF0ZSA9IHRoaXMuX2N1cnJlbnRWaWV3U3RhdGVbY29udHJvbEtleV07XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uVHlwZSA9IHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5Py5uYXZUeXBlUGFyYW1ldGVycz8ubmF2aWdhdGlvblR5cGU7XG5cdFx0XHRjb25zdCBza2lwTWVyZ2UgPSB0aGlzLmNvbmZpZ09mU3RhdGVBcHBseT8uc2tpcE1lcmdlO1xuXHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiBjb250cm9sU3RhdGUgPT09IHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5Py5zdGF0ZT8uW2NvbnRyb2xLZXldKSB7XG5cdFx0XHRcdC8vIFRvIGNoZWNrIHdoZXRoZXIgZGlmZnN0YXRlIHNodW9sZCBiZSBjYWxsZWQgb3Igbm90IHRvIGFwcGx5RXh0ZXJuYWxTdGF0ZVxuXHRcdFx0XHRjb25zdCBzaG91bGRBcHBseURpZmZTdGF0ZSA9XG5cdFx0XHRcdFx0IXRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LmluY2x1ZGVzKHN0YXRlQ29udHJpYnV0b3IuZ2V0SWQoKSkgJiZcblx0XHRcdFx0XHQhdGhpcy5jb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlLmluY2x1ZGVzKHN0YXRlQ29udHJpYnV0b3IuZ2V0SWQoKSkgJiZcblx0XHRcdFx0XHRuYXZpZ2F0aW9uVHlwZSAhPT0gTmF2VHlwZS5oeWJyaWQgJiZcblx0XHRcdFx0XHRza2lwTWVyZ2UgIT09IHRydWU7XG5cblx0XHRcdFx0c3RhdGVDb250cmlidXRvci5hcHBseVN0YXRlKGNvbnRyb2xTdGF0ZSwgdW5kZWZpbmVkLCBzaG91bGRBcHBseURpZmZTdGF0ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUFwcFN0YXRlRGVib3VuY2VkKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlcmVnaXN0ZXIgYSBkZWRpY2F0ZWQgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGZyb20gdGhlIHdob2xlIHZpZXcgc3RhdGUgaGFuZGxpbmcuXG5cdCAqIEBwYXJhbSBzdGF0ZUNvbnRyaWJ1dG9yIFRoZSBWaWV3U3RhdGVDb250cmlidXRvciB0byBkZXJlZ2lzdGVyXG5cdCAqL1xuXHRkZXJlZ2lzdGVyU3RhdGVDb250cmlidXRvcihzdGF0ZUNvbnRyaWJ1dG9yOiBNYW5hZ2VkT2JqZWN0ICYgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPHVua25vd24+KTogdm9pZCB7XG5cdFx0Y29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLnN0YXRlQ29udHJpYnV0b3JzLmZpbmRJbmRleCgoY29udHJpYnV0b3IpID0+IGNvbnRyaWJ1dG9yID09IHN0YXRlQ29udHJpYnV0b3IpO1xuXHRcdGlmICh0YXJnZXRJbmRleCAhPT0gLTEpIHtcblx0XHRcdHRoaXMuc3RhdGVDb250cmlidXRvcnMuc3BsaWNlKHRhcmdldEluZGV4LCAxKTtcblx0XHR9XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKTogdGhpcyB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvLyBtZXRob2QgdG8gZ2V0IHRoZSBjb250cm9sIHN0YXRlIGZvciBtZGMgY29udHJvbHMgYXBwbHlpbmcgdGhlIGRlbHRhIGxvZ2ljXG5cdF9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5OiBzdHJpbmcsIGNvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlKTogQ29udHJvbFN0YXRlIHtcblx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlciA9IHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXI7XG5cdFx0aWYgKE9iamVjdC5rZXlzKGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyKS5sZW5ndGggPiAwICYmIGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0pIHtcblx0XHRcdGlmIChPYmplY3Qua2V5cyhpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXldIGFzIG9iamVjdCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0gPSB7IC4uLmNvbnRyb2xTdGF0ZSB9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgZnVsbFN0YXRlOiBjb250cm9sU3RhdGUgYXMgb2JqZWN0LCBpbml0aWFsU3RhdGU6IGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0gYXMgb2JqZWN0IH07XG5cdFx0fVxuXHRcdHJldHVybiBjb250cm9sU3RhdGU7XG5cdH1cblxuXHQvL21ldGhvZCB0byBzdG9yZSB0aGUgaW5pdGlhbCBzdGF0ZXMgZm9yIGRlbHRhIGNvbXB1dGF0aW9uIG9mIG1kYyBjb250cm9sc1xuXHRfc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSA9IGFzeW5jICh2YXJpYW50TWFuYWdlbWVudD86IFZhcmlhbnRNYW5hZ2VtZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFkYXB0Q29udHJvbHMgPSB0aGlzLnZpZXdTdGF0ZUNvbnRyb2xzO1xuXG5cdFx0XHRjb25zdCBleHRlcm5hbFN0YXRlUHJvbWlzZXM6IFByb21pc2U8b2JqZWN0PltdID0gW107XG5cdFx0XHRjb25zdCBjb250cm9sU3RhdGVLZXk6IHN0cmluZ1tdID0gW107XG5cdFx0XHRsZXQgaW5pdGlhbENvbnRyb2xTdGF0ZXM6IG9iamVjdFtdID0gW107XG5cdFx0XHRjb25zdCB2YXJpYW50Q29udHJvbHM6IHN0cmluZ1tdID0gdmFyaWFudE1hbmFnZW1lbnQ/LmdldEZvcigpID8/IFtdO1xuXG5cdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWxTdGF0ZSh2YXJpYW50Q29udHJvbHMpO1xuXG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0YWRhcHRDb250cm9sc1xuXHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKGNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2wgJiZcblx0XHRcdFx0XHRcdFx0KCF2YXJpYW50TWFuYWdlbWVudCB8fCB2YXJpYW50Q29udHJvbHMuaW5jbHVkZXMoKGNvbnRyb2wgYXMgQ29udHJvbCkuZ2V0SWQoKSkpICYmXG5cdFx0XHRcdFx0XHRcdCgoY29udHJvbCBhcyBCYXNlT2JqZWN0KS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KGNvbnRyb2wgYXMgQmFzZU9iamVjdCkuaXNBKFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikgfHxcblx0XHRcdFx0XHRcdFx0XHQoY29udHJvbCBhcyBCYXNlT2JqZWN0KS5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5tYXAoYXN5bmMgKGNvbnRyb2wpID0+IHtcblx0XHRcdFx0XHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQodmFyaWFudE1hbmFnZW1lbnQsIHZhcmlhbnRDb250cm9scyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsU3RhdGVQcm9taXNlID0gKGF3YWl0IGdldFN0YXRlVXRpbCgpKS5yZXRyaWV2ZUV4dGVybmFsU3RhdGUoY29udHJvbCBhcyBNRENDb250cm9sKTtcblx0XHRcdFx0XHRcdGV4dGVybmFsU3RhdGVQcm9taXNlcy5wdXNoKGV4dGVybmFsU3RhdGVQcm9taXNlKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZUtleS5wdXNoKHRoaXMuZ2V0U3RhdGVLZXkoY29udHJvbCkpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHQpO1xuXG5cdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKGV4dGVybmFsU3RhdGVQcm9taXNlcyk7XG5cdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlcy5mb3JFYWNoKChpbml0aWFsQ29udHJvbFN0YXRlOiBvYmplY3QsIGk6IG51bWJlcikgPT4ge1xuXHRcdFx0XHR0aGlzLmluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleVtpXV0gPSBpbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gQXR0YWNoIGV2ZW50IHRvIHNhdmUgYW5kIHNlbGVjdCBvZiBWYXJpYW50IE1hbmFnZW1lbnQgdG8gdXBkYXRlIHRoZSBpbml0aWFsIENvbnRyb2wgU3RhdGVzIG9uIHZhcmlhbnQgY2hhbmdlXG5cdF9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQodmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCB2YXJpYW50Q29udHJvbHM6IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3Qgb1BheWxvYWQgPSB7IHZhcmlhbnRNYW5hZ2VkQ29udHJvbHM6IHZhcmlhbnRDb250cm9scyB9O1xuXHRcdGNvbnN0IGZuRXZlbnQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLl91cGRhdGVJbml0aWFsU3RhdGVzT25WYXJpYW50Q2hhbmdlKHZhcmlhbnRDb250cm9scyk7XG5cdFx0fTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5hdHRhY2hTYXZlKG9QYXlsb2FkLCBmbkV2ZW50LCB7fSk7XG5cdFx0dmFyaWFudE1hbmFnZW1lbnQuYXR0YWNoU2VsZWN0KG9QYXlsb2FkLCBmbkV2ZW50LCB7fSk7XG5cdH1cblxuXHRfdXBkYXRlSW5pdGlhbFN0YXRlc09uVmFyaWFudENoYW5nZSh2bUFzc29jaWF0ZWRDb250cm9sc1RvUmVzZXQ6IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIgPSB0aGlzLmluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyO1xuXHRcdE9iamVjdC5rZXlzKGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyKS5mb3JFYWNoKChjb250cm9sS2V5KSA9PiB7XG5cdFx0XHRmb3IgKGNvbnN0IHZtQXNzb2NpYXRlZGNvbnRyb2xLZXkgb2Ygdm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0KSB7XG5cdFx0XHRcdGlmICh2bUFzc29jaWF0ZWRjb250cm9sS2V5LmluY2x1ZGVzKGNvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbEtleV0gPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMudXBkYXRlSW5pdGlhbFN0YXRlKHZtQXNzb2NpYXRlZENvbnRyb2xzVG9SZXNldCk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHZhcmlhbnQgY29udHJvbHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB2YXJpYW50Q29udHJvbHMgQW4gYXJyYXkgb2YgY29udHJvbCBJRHMgZm9yIHdoaWNoIHRoZSBpbml0aWFsIHN0YXRlIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGluaXRpYWwgc3RhdGUgdXBkYXRlIGlzIGNvbXBsZXRlLlxuXHQgKi9cblx0YXN5bmMgdXBkYXRlSW5pdGlhbFN0YXRlKHZhcmlhbnRDb250cm9sczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB2aWV3Q29udHJvbHM6IChNYW5hZ2VkT2JqZWN0IHwgdW5kZWZpbmVkKVtdID0gdGhpcy5zdGF0ZUNvbnRyaWJ1dG9ycztcblx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdHZpZXdDb250cm9scy5tYXAoYXN5bmMgKGNvbnRyb2wpID0+IHtcblx0XHRcdFx0Y29uc3QgY29udHJvbElkOiBzdHJpbmcgPSBjb250cm9sPy5nZXRJZCgpIGFzIHN0cmluZztcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHZhcmlhbnRDb250cm9scy5pbmNsdWRlcyhjb250cm9sSWQpICYmXG5cdFx0XHRcdFx0Y29udHJvbD8uaXNBPElWaWV3U3RhdGVDb250cmlidXRvcjxvYmplY3Q+PihcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLnZpZXdTdGF0ZS5JVmlld1N0YXRlQ29udHJpYnV0b3JcIikgJiZcblx0XHRcdFx0XHRjb250cm9sLnNldEluaXRpYWxTdGF0ZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhd2FpdCBjb250cm9sLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHRfaXNJbml0aWFsU3RhdGVzQXBwbGljYWJsZShcblx0XHRpbml0aWFsU3RhdGU6IG9iamVjdCB8IHVuZGVmaW5lZCxcblx0XHRjb250cm9sOiBGaWx0ZXJCYXIgfCBNRENUYWJsZSxcblx0XHRza2lwTWVyZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0aXNOYXZIeWJyaWQ/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQhIWluaXRpYWxTdGF0ZSAmJlxuXHRcdFx0IXRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LmluY2x1ZGVzKGNvbnRyb2wuZ2V0SWQoKSkgJiZcblx0XHRcdCF0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5jbHVkZXMoY29udHJvbC5nZXRJZCgpKSAmJlxuXHRcdFx0KGlzTmF2SHlicmlkID8/IHRydWUpICYmXG5cdFx0XHRza2lwTWVyZ2UgIT09IHRydWVcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdTdGF0ZTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNEJBO0VBQ0E7RUFDQTtFQUNBLE1BQU1BLE9BQU8sR0FBR0MsVUFBVSxDQUFDRCxPQUFPOztFQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQTRC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
|
|
877
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIkFERElUSU9OQUxfU1RBVEVTX0tFWSIsImdldFN0YXRlVXRpbCIsIl9fdWk1X3JlcXVpcmVfYXN5bmMiLCJkZWZhdWx0IiwiX21Db250cm9sU3RhdGVIYW5kbGVyTWFwIiwicmV0cmlldmUiLCJvVk0iLCJ2YXJpYW50SWQiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsImFwcGx5IiwiY29udHJvbFN0YXRlIiwidW5kZWZpbmVkIiwiaXNWYXJpYW50SWRBdmFpbGFibGUiLCJfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJjb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlIiwicHVzaCIsImdldEZvciIsIkNvbnRyb2xWYXJpYW50QXBwbHlBUEkiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsIl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlIiwiZXJyb3IiLCJMb2ciLCJpbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkiLCJtdWx0aXBsZU1vZGVDb250cm9sIiwic2VsZWN0ZWRLZXkiLCJjb250ZW50IiwiZ2V0U2VsZWN0ZWRLZXkiLCJ0YWJCYXIiLCJnZXRJdGVtcyIsImZpbmQiLCJpdGVtIiwiZ2V0S2V5Iiwic2V0U2VsZWN0ZWRLZXkiLCJyZWZyZXNoQmluZGluZyIsIm9UYWJsZSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwib1Jvb3RCaW5kaW5nIiwiZ2V0Um9vdEJpbmRpbmciLCJhZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwicmVmcmVzaCIsIm9IZWFkZXJDb250ZXh0IiwiZ2V0SGVhZGVyQ29udGV4dCIsInNHcm91cElkIiwiZ2V0R3JvdXBJZCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiaW5mbyIsImdldElkIiwib1NlZ21lbnRlZEJ1dHRvbiIsIm9Db250cm9sU3RhdGUiLCJfb1NlZ21lbnRlZEJ1dHRvbiRnZXQiLCJnZXRQYXJlbnQiLCJpc0EiLCJmaXJlRXZlbnQiLCJvU2VsZWN0IiwiX29TZWxlY3QkZ2V0UGFyZW50Iiwib0R5bmFtaWNQYWdlIiwiaGVhZGVyRXhwYW5kZWQiLCJnZXRIZWFkZXJFeHBhbmRlZCIsInNldEhlYWRlckV4cGFuZGVkIiwib1ZpZXciLCJvQ29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIm9OYXZQYXJhbWV0ZXJzIiwic2tpcE1lcmdlIiwiYXBwbHlWaWV3U3RhdGUiLCJyZWZyZXNoVmlld0JpbmRpbmdzIiwib0NvbXBvbmVudENvbnRhaW5lciIsIm9Db21wb25lbnQiLCJnZXRDb21wb25lbnRJbnN0YW5jZSIsInJldHJpZXZlQ29udHJvbFN0YXRlIiwiZ2V0Um9vdENvbnRyb2wiLCJhcHBseUNvbnRyb2xTdGF0ZSIsIlZpZXdTdGF0ZSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHVibGljRXh0ZW5zaW9uIiwiX2RlYzMiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWM0IiwiX2RlYzUiLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIl9kZWM2IiwicHJpdmF0ZUV4dGVuc2lvbiIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsIl9kZWMzMiIsIl9kZWMzMyIsIkluc3RlYWQiLCJfZGVjMzQiLCJfZGVjMzUiLCJfZGVjMzYiLCJfZGVjMzciLCJfZGVjMzgiLCJfZGVjMzkiLCJfZGVjNDAiLCJfZGVjNDEiLCJfZGVjNDIiLCJfZGVjNDMiLCJfZGVjNDQiLCJfZGVjNDUiLCJfZGVjNDYiLCJfZGVjNDciLCJfZGVjNDgiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfaW5oZXJpdHNMb29zZSIsIl90aGlzIiwiY2FsbCIsImluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyIiwidmlld1N0YXRlQ29udHJvbHMiLCJzdGF0ZUNvbnRyaWJ1dG9ycyIsInZhcmlhbnRNYW5hZ2VtZW50IiwiYWRhcHRDb250cm9scyIsImV4dGVybmFsU3RhdGVQcm9taXNlcyIsImNvbnRyb2xTdGF0ZUtleSIsImluaXRpYWxDb250cm9sU3RhdGVzIiwidmFyaWFudENvbnRyb2xzIiwidXBkYXRlSW5pdGlhbFN0YXRlIiwiUHJvbWlzZSIsImFsbCIsImZpbHRlciIsImNvbnRyb2wiLCJpbmNsdWRlcyIsIm1hcCIsIl9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQiLCJleHRlcm5hbFN0YXRlUHJvbWlzZSIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImdldFN0YXRlS2V5IiwiZm9yRWFjaCIsImluaXRpYWxDb250cm9sU3RhdGUiLCJpIiwiZSIsIl9pUmV0cmlldmluZ1N0YXRlQ291bnRlciIsIl9wSW5pdGlhbFN0YXRlQXBwbGllZCIsInJlc29sdmUiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiYUNvbnRyb2xzIiwiY29sbGVjdFJlc3VsdHMiLCJiYXNlIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwib1Byb21pc2VDaGFpbiIsIm9Db250cm9sIiwidGhlbiIsInJlZnJlc2hDb250cm9sQmluZGluZyIsImJpbmQiLCJhQ29sbGVjdGVkQ29udHJvbHMiLCJvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciIsImdldENvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwic1R5cGUiLCJhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlciIsIl9vQ29udHJvbCIsIl9vQ29udHJvbEhhbmRsZXIiLCJvblN1c3BlbmQiLCJvblJlc3RvcmUiLCJkZXN0cm95IiwiZm5DYWxsIiwiYVJlc3VsdHMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImFkYXB0Q29udHJvbFN0YXRlSGFuZGxlciIsImFDb250cm9sSGFuZGxlciIsImdldENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyIiwiYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJyZXRyaWV2ZVN0YXRlIiwiYXBwbHlTdGF0ZSIsIl9jb250cm9sIiwic2hvdWxkQXBwbHlEaWZmU3RhdGUiLCJuYXZpZ2F0aW9uVHlwZSIsImh5YnJpZCIsImFwcGx5TGVnYWN5U3RhdGUiLCJnZXRDb250cm9sU3RhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJjb25jYXQiLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJfYUNvbGxlY3RlZENvbnRyb2xzIiwiZ2V0VmlldyIsImdldExvY2FsSWQiLCJvVmlld1N0YXRlIiwiYVJlc29sdmVkU3RhdGVzIiwidlJlc3VsdCIsImtleSIsInZhbHVlIiwicmVkdWNlIiwib1N0YXRlcyIsIm1TdGF0ZSIsIm9DdXJyZW50U3RhdGUiLCJtZXJnZU9iamVjdHMiLCJwcmV2U3RhdGUiLCJfY3VycmVudFZpZXdTdGF0ZSIsImtleXMiLCJfYWRkTWlzc2luZ1N0YXRlIiwibUFkZGl0aW9uYWxTdGF0ZXMiLCJfcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwicmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwiYUNvbnRyb2xTdGF0ZUhhbmRsZXJzIiwibUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJFcnJvciIsImFTdGF0ZXMiLCJvRmluYWxTdGF0ZSIsImFwcGx5SW5pdGlhbFN0YXRlT25seSIsImNvbnRyb2xLZXkiLCJvTmF2UGFyYW1ldGVyIiwiX2dldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJfaXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZSIsIl9faXNSb290Vmlld0NvbnRyb2xsZXIiLCJvbkJlZm9yZVN0YXRlQXBwbGllZCIsImhhc1ZhcmlhbnRNYW5hZ2VtZW50IiwiY29uZmlnT2ZTdGF0ZUFwcGx5IiwibmF2VHlwZVBhcmFtZXRlcnMiLCJzdGF0ZSIsInNvcnRlZEFkYXB0U3RhdGVDb250cm9scyIsIm1vZGlmaWVkQ29udHJvbHMiLCJpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInNLZXkiLCJpQXBwU3RhdGUiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwiX2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhciIsIm9uQWZ0ZXJTdGF0ZUFwcGxpZWQiLCJfc2V0SW5pdGlhbFN0YXRlQXBwbGllZCIsInNWYXJpYW50SWQiLCJhVmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUiLCJvVmFyaWFudCIsInBJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSIsIm5hdlR5cGUiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJhUHJvbWlzZXMiLCJfb05hdlBhcmFtZXRlciIsIl9hUHJvbWlzZXMiLCJ1cGRhdGVBcHBTdGF0ZURlYm91bmNlZCIsInVwZGF0ZUFwcFN0YXRlVGltZXIiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJyZWdpc3RlclN0YXRlQ29udHJpYnV0b3IiLCJzdGF0ZUNvbnRyaWJ1dG9yIiwiX3RoaXMkY29uZmlnT2ZTdGF0ZUFwIiwiX3RoaXMkY29uZmlnT2ZTdGF0ZUFwMiIsIl90aGlzJGNvbmZpZ09mU3RhdGVBcDMiLCJfdGhpcyRjb25maWdPZlN0YXRlQXA0IiwiX3RoaXMkY29uZmlnT2ZTdGF0ZUFwNSIsImRlcmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yIiwidGFyZ2V0SW5kZXgiLCJmaW5kSW5kZXgiLCJjb250cmlidXRvciIsInNwbGljZSIsImdldEludGVyZmFjZSIsIl9nZXRDb250cm9sU3RhdGUiLCJmdWxsU3RhdGUiLCJpbml0aWFsU3RhdGUiLCJvUGF5bG9hZCIsInZhcmlhbnRNYW5hZ2VkQ29udHJvbHMiLCJmbkV2ZW50IiwiX3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2UiLCJhdHRhY2hTYXZlIiwiYXR0YWNoU2VsZWN0Iiwidm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0Iiwidm1Bc3NvY2lhdGVkY29udHJvbEtleSIsInZpZXdDb250cm9scyIsImNvbnRyb2xJZCIsInNldEluaXRpYWxTdGF0ZSIsIl9pc0luaXRpYWxTdGF0ZXNBcHBsaWNhYmxlIiwiaXNOYXZIeWJyaWQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlld1N0YXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1BhZ2UgZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIElWaWV3U3RhdGVDb250cmlidXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvdmlld1N0YXRlL0lWaWV3U3RhdGVDb250cmlidXRvclwiO1xuaW1wb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IE5hdkxpYnJhcnkgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiRmlsdGVyIGZyb20gXCJzYXAvbS9JY29uVGFiRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU2VsZWN0IGZyb20gXCJzYXAvbS9TZWxlY3RcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCB0eXBlIE1EQ0NvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcblxuaW1wb3J0IHR5cGUgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCIuLi9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyQ29udHJvbGxlciBmcm9tIFwiLi4vcm9vdFZpZXcvTmF2Q29udGFpbmVyLmNvbnRyb2xsZXJcIjtcblxuLy8gYWRkaXRpb25hbFN0YXRlcyBhcmUgc3RvcmVkIG5leHQgdG8gY29udHJvbCBJRHMsIHNvIG5hbWUgY2xhc2ggYXZvaWRhbmNlIG5lZWRlZC4gRm9ydHVuYXRlbHkgSURzIGhhdmUgcmVzdHJpY3Rpb25zOlxuLy8gXCJBbGxvd2VkIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyAoY2FwaXRhbC9sb3dlcmNhc2UpLCBkaWdpdHMsIHVuZGVyc2NvcmVzLCBkYXNoZXMsIHBvaW50cyBhbmQvb3IgY29sb25zLlwiXG4vLyBUaGVyZWZvcmUgYWRkaW5nIGEgc3ltYm9sIGxpa2UgIyBvciBAXG5jb25zdCBOYXZUeXBlID0gTmF2TGlicmFyeS5OYXZUeXBlO1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBuYXZpZ2F0aW9uIHBhcmFtZXRlclxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uUGFyYW1ldGVyID0ge1xuXHQvKipcblx0ICogIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlLlxuXHQgKiAgQHB1YmxpY1xuXHQgKi9cblx0bmF2aWdhdGlvblR5cGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3Rpb25WYXJpYW50IGZyb20gdGhlIG5hdmlnYXRpb24uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNlbGVjdGlvblZhcmlhbnQ/OiBTZWxlY3Rpb25WYXJpYW50O1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiAgQHB1YmxpY1xuXHQgKi9cblx0c2VsZWN0aW9uVmFyaWFudERlZmF1bHRzPzogU2VsZWN0aW9uVmFyaWFudDtcblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciB0aGUgc3RhbmRhcmQgdmFyaWFudCBtdXN0IGJlIHVzZWQgaW4gdmFyaWFudCBtYW5hZ2VtZW50XG5cdCAqICBAcHVibGljXG5cdCAqL1xuXHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudD86IGJvb2xlYW47XG59O1xuXG5jb25zdCBBRERJVElPTkFMX1NUQVRFU19LRVkgPSBcIiNhZGRpdGlvbmFsU3RhdGVzXCI7XG5cbmV4cG9ydCB0eXBlIENvbnRyb2xTdGF0ZSA9XG5cdHwgKHtcblx0XHRcdGluaXRpYWxTdGF0ZT86IHtcblx0XHRcdFx0c3VwcGxlbWVudGFyeUNvbmZpZz86IG9iamVjdDtcblx0XHRcdH07XG5cdFx0XHRmdWxsU3RhdGU/OiB7XG5cdFx0XHRcdGZpbHRlcj86IG9iamVjdDtcblx0XHRcdH07XG5cdCAgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuXHR8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgTmF2UGFyYW1ldGVycyA9IHtcblx0bmF2aWdhdGlvblR5cGU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgTGVnYWN5RmlsdGVyQmFyU3RhdGUgPSB7XG5cdGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIEFycmF5PG9iamVjdD4+O1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBtZXRob2RzIHRvIHJldHJpZXZlICYgYXBwbHkgc3RhdGVzIGZvciB0aGUgZGlmZmVyZW50IGNvbnRyb2xzIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgdHlwZSBDb250cm9sU3RhdGVIYW5kbGVyPFQgZXh0ZW5kcyBNYW5hZ2VkT2JqZWN0LCBLIGV4dGVuZHMgdW5rbm93biB8IHVuZGVmaW5lZD4gPSB7XG5cdHJldHJpZXZlPzogKG9Db250cm9sOiBUKSA9PiBLIHwgUHJvbWlzZTxLPjtcblx0YXBwbHk/OiAob0NvbnRyb2w6IFQsIGNvbnRyb2xTdGF0ZTogSywgbmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsIHNraXBNZXJnZT86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXHRyZWZyZXNoQmluZGluZz86IChvQ29udHJvbDogVCkgPT4gdm9pZDtcbn07XG50eXBlIENvbnRyb2xTdGF0ZU1hcCA9IHtcblx0XCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxWYXJpYW50TWFuYWdlbWVudCwgeyB2YXJpYW50SWQ6IHN0cmluZyB8IG51bGwgfT47XG5cdFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LmNvbnRyb2xzLk11bHRpcGxlTW9kZUNvbnRyb2xcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxNdWx0aXBsZU1vZGVDb250cm9sLCB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfT47XG5cdFwic2FwLnVpLm1kYy5UYWJsZVwiOiBDb250cm9sU3RhdGVIYW5kbGVyPE1EQ1RhYmxlLCBDb250cm9sU3RhdGU+O1xuXHRcInNhcC5tLlNlZ21lbnRlZEJ1dHRvblwiOiBDb250cm9sU3RhdGVIYW5kbGVyPFNlZ21lbnRlZEJ1dHRvbiwgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0+O1xuXHRcInNhcC5tLlNlbGVjdFwiOiBDb250cm9sU3RhdGVIYW5kbGVyPFNlbGVjdCwgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0+O1xuXHRcInNhcC5mLkR5bmFtaWNQYWdlXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8RHluYW1pY1BhZ2UsIHsgaGVhZGVyRXhwYW5kZWQ6IGJvb2xlYW4gfT47XG5cdFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8Q29tcG9uZW50Q29udGFpbmVyLCBvYmplY3Q+O1xuXHRcInNhcC51aS5jb3JlLm12Yy5WaWV3XCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8RkVWaWV3LCBDb250cm9sU3RhdGU+O1xufTtcbmNvbnN0IGdldFN0YXRlVXRpbCA9IGFzeW5jIGZ1bmN0aW9uICgpOiBQcm9taXNlPHR5cGVvZiBTdGF0ZVV0aWw+IHtcblx0cmV0dXJuIChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCIpKS5kZWZhdWx0O1xufTtcbmNvbnN0IF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcDogQ29udHJvbFN0YXRlTWFwID0ge1xuXHRcInNhcC51aS5mbC52YXJpYW50cy5WYXJpYW50TWFuYWdlbWVudFwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvVk06IFZhcmlhbnRNYW5hZ2VtZW50KTogeyB2YXJpYW50SWQ6IHN0cmluZyB8IG51bGwgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR2YXJpYW50SWQ6IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGNvbnRyb2xTdGF0ZT86IHsgdmFyaWFudElkPzogc3RyaW5nIHwgbnVsbCB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoY29udHJvbFN0YXRlICYmIGNvbnRyb2xTdGF0ZS52YXJpYW50SWQgIT09IHVuZGVmaW5lZCAmJiBjb250cm9sU3RhdGUudmFyaWFudElkICE9PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGlzVmFyaWFudElkQXZhaWxhYmxlID0gdGhpcy5fY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTSwgY29udHJvbFN0YXRlLnZhcmlhbnRJZCk7XG5cdFx0XHRcdFx0bGV0IHNWYXJpYW50UmVmZXJlbmNlO1xuXHRcdFx0XHRcdGlmIChpc1ZhcmlhbnRJZEF2YWlsYWJsZSkge1xuXHRcdFx0XHRcdFx0c1ZhcmlhbnRSZWZlcmVuY2UgPSBjb250cm9sU3RhdGUudmFyaWFudElkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzVmFyaWFudFJlZmVyZW5jZSA9IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdHRoaXMuY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZS5wdXNoKC4uLm9WTS5nZXRGb3IoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBDb250cm9sVmFyaWFudEFwcGx5QVBJID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9mbC9hcHBseS9hcGkvQ29udHJvbFZhcmlhbnRBcHBseUFQSVwiKSkuZGVmYXVsdDtcblx0XHRcdFx0XHRcdGF3YWl0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudDogb1ZNLFxuXHRcdFx0XHRcdFx0XHR2YXJpYW50UmVmZXJlbmNlOiBzVmFyaWFudFJlZmVyZW5jZSBhcyBzdHJpbmdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZShvVk0pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdHRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LnB1c2goLi4ub1ZNLmdldEZvcigpKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUob1ZNKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZShvVk0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LmNvbnRyb2xzLk11bHRpcGxlTW9kZUNvbnRyb2xcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAobXVsdGlwbGVNb2RlQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCk6IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBtdWx0aXBsZU1vZGVDb250cm9sLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAobXVsdGlwbGVNb2RlQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCwgY29udHJvbFN0YXRlPzogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0pIHtcblx0XHRcdGlmIChjb250cm9sU3RhdGU/LnNlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdGNvbnN0IHRhYkJhciA9IG11bHRpcGxlTW9kZUNvbnRyb2wuY29udGVudDtcblx0XHRcdFx0aWYgKHRhYkJhci5nZXRJdGVtcygpLmZpbmQoKGl0ZW0pID0+IChpdGVtIGFzIEljb25UYWJGaWx0ZXIpLmdldEtleSgpID09PSBjb250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpKSB7XG5cdFx0XHRcdFx0dGFiQmFyLnNldFNlbGVjdGVkS2V5KGNvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLm1kYy5UYWJsZVwiOiB7XG5cdFx0cmVmcmVzaEJpbmRpbmc6IGZ1bmN0aW9uIChvVGFibGU6IE1EQ1RhYmxlKSB7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb290QmluZGluZyA9IG9UYWJsZUJpbmRpbmcuZ2V0Um9vdEJpbmRpbmcoKTtcblx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb24gPSBvVGFibGVCaW5kaW5nLmdldEFnZ3JlZ2F0aW9uKCkgYXMgeyBoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKG9Sb290QmluZGluZyA9PT0gb1RhYmxlQmluZGluZyAmJiBhZ2dyZWdhdGlvbj8uaGllcmFyY2h5UXVhbGlmaWVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBhYnNvbHV0ZSBiaW5kaW5nIChleGNlcHQgVHJlZVRhYmxlLCB3aGVyZSB3ZSB3YW50IHRvIGtlZXAgZXhwYW5zaW9uIHN0YXRlcylcblx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZWxhdGl2ZSBiaW5kaW5nIG9yIFRyZWVUYWJsZVxuXHRcdFx0XHRcdGNvbnN0IG9IZWFkZXJDb250ZXh0ID0gb1RhYmxlQmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0Y29uc3Qgc0dyb3VwSWQgPSBvVGFibGVCaW5kaW5nLmdldEdyb3VwSWQoKTtcblxuXHRcdFx0XHRcdGlmIChvSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0b0hlYWRlckNvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBcIlwiIH1dLCBzR3JvdXBJZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cuaW5mbyhgVGFibGU6ICR7b1RhYmxlLmdldElkKCl9IHdhcyBub3QgcmVmcmVzaGVkLiBObyBiaW5kaW5nIGZvdW5kIWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAubS5TZWdtZW50ZWRCdXR0b25cIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1NlZ21lbnRlZEJ1dHRvbjogU2VnbWVudGVkQnV0dG9uKTogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9TZWdtZW50ZWRCdXR0b24uZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvU2VnbWVudGVkQnV0dG9uOiBTZWdtZW50ZWRCdXR0b24sIG9Db250cm9sU3RhdGU/OiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSk6IHZvaWQge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGU/LnNlbGVjdGVkS2V5ICYmIG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkgIT09IG9TZWdtZW50ZWRCdXR0b24uZ2V0U2VsZWN0ZWRLZXkoKSkge1xuXHRcdFx0XHRvU2VnbWVudGVkQnV0dG9uLnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdFx0XHRpZiAob1NlZ21lbnRlZEJ1dHRvbi5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdFx0b1NlZ21lbnRlZEJ1dHRvbi5maXJlRXZlbnQoXCJzZWxlY3Rpb25DaGFuZ2VcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLm0uU2VsZWN0XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9TZWxlY3Q6IFNlbGVjdCk6IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBvU2VsZWN0LmdldFNlbGVjdGVkS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgb1NlbGVjdDogU2VsZWN0LCBvQ29udHJvbFN0YXRlPzogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0pOiB2b2lkIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlPy5zZWxlY3RlZEtleSAmJiBvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5ICE9PSBvU2VsZWN0LmdldFNlbGVjdGVkS2V5KCkpIHtcblx0XHRcdFx0b1NlbGVjdC5zZXRTZWxlY3RlZEtleShvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KTtcblx0XHRcdFx0aWYgKG9TZWxlY3QuZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMuQWN0aW9uVG9vbGJhclwiKSkge1xuXHRcdFx0XHRcdG9TZWxlY3QuZmlyZUV2ZW50KFwiY2hhbmdlXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5mLkR5bmFtaWNQYWdlXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9EeW5hbWljUGFnZTogRHluYW1pY1BhZ2UpOiB7IGhlYWRlckV4cGFuZGVkOiBib29sZWFuIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aGVhZGVyRXhwYW5kZWQ6IG9EeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvRHluYW1pY1BhZ2U6IER5bmFtaWNQYWdlLCBvQ29udHJvbFN0YXRlPzogeyBoZWFkZXJFeHBhbmRlZDogYm9vbGVhbiB9KTogdm9pZCB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQob0NvbnRyb2xTdGF0ZS5oZWFkZXJFeHBhbmRlZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLm12Yy5WaWV3XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9WaWV3OiBGRVZpZXcpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLnJldHJpZXZlVmlld1N0YXRlKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSxcblx0XHRhcHBseTogYXN5bmMgZnVuY3Rpb24gKG9WaWV3OiBGRVZpZXcsIG9Db250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBza2lwTWVyZ2U/OiBib29sZWFuKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUgJiYgb05hdlBhcmFtZXRlcnMpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5hcHBseVZpZXdTdGF0ZShvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycywgc2tpcE1lcmdlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlZnJlc2hCaW5kaW5nOiBhc3luYyBmdW5jdGlvbiAob1ZpZXc6IEZFVmlldykge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUucmVmcmVzaFZpZXdCaW5kaW5ncygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIjoge1xuXHRcdHJldHJpZXZlOiBhc3luYyBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvQ29tcG9uZW50Q29udGFpbmVyOiBDb21wb25lbnRDb250YWluZXIpOiBQcm9taXNlPG9iamVjdD4ge1xuXHRcdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db21wb25lbnRDb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdGlmIChvQ29tcG9uZW50KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJldHJpZXZlQ29udHJvbFN0YXRlKG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge30gYXMgb2JqZWN0O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRcdHRoaXM6IFZpZXdTdGF0ZSxcblx0XHRcdG9Db21wb25lbnRDb250YWluZXI6IENvbXBvbmVudENvbnRhaW5lcixcblx0XHRcdG9Db250cm9sU3RhdGU6IG9iamVjdCxcblx0XHRcdG9OYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlclxuXHRcdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db21wb25lbnRDb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdGlmIChvQ29tcG9uZW50KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwcGx5Q29udHJvbFN0YXRlKG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSwgb0NvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBmb3Igc3RhdGUgaGFuZGxpbmdcbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBtYWludGFpbiBhIHNwZWNpZmljIHN0YXRlIGZvciB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgY2FuIHVzZSB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS44NS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZVwiKVxuY2xhc3MgVmlld1N0YXRlIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyOiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWQ6IFByb21pc2U8dW5rbm93bj47XG5cblx0cHJpdmF0ZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlPzogRnVuY3Rpb247XG5cblx0cHVibGljIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRjb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseTogc3RyaW5nW10gPSBbXTtcblxuXHR2aWV3U3RhdGVDb250cm9sczogTWFuYWdlZE9iamVjdFtdID0gW107XG5cblx0c3RhdGVDb250cmlidXRvcnM6IChNYW5hZ2VkT2JqZWN0ICYgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPHVua25vd24+KVtdID0gW107XG5cblx0X2N1cnJlbnRWaWV3U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuXHRjb25maWdPZlN0YXRlQXBwbHk/OiB7XG5cdFx0c2tpcE1lcmdlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRuYXZUeXBlUGFyYW1ldGVycz86IE5hdlBhcmFtZXRlcnM7XG5cdFx0c3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0fTtcblxuXHRwcml2YXRlIHVwZGF0ZUFwcFN0YXRlVGltZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogQ29uc3RydWN0b3IuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyID0gMDtcblx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJlZnJlc2hWaWV3QmluZGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYUNvbnRyb2xzID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRhQ29udHJvbHNcblx0XHRcdC5maWx0ZXIoKG9Db250cm9sKSA9PiB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EgJiYgb0NvbnRyb2wuaXNBPE1hbmFnZWRPYmplY3Q+KFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKTtcblx0XHRcdH0pXG5cdFx0XHQuZm9yRWFjaCgob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHtcblx0XHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbih0aGlzLnJlZnJlc2hDb250cm9sQmluZGluZy5iaW5kKHRoaXMsIG9Db250cm9sKSk7XG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhZGQgYWxsIGNvbnRyb2xzIHJlbGV2YW50IGZvciByZWZyZXNoaW5nIHRvIHRoZSBwcm92aWRlZCBjb250cm9sIGFycmF5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gYUNvbGxlY3RlZENvbnRyb2xzIFRoZSBjb2xsZWN0ZWQgY29udHJvbHNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyhhQ29sbGVjdGVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyByZWZyZXNoQ29udHJvbEJpbmRpbmcob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciA9IHRoaXMuZ2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRpZiAodHlwZW9mIG9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyLnJlZnJlc2hCaW5kaW5nICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdExvZy5pbmZvKGByZWZyZXNoQmluZGluZyBoYW5kbGVyIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfSBpcyBub3QgcHJvdmlkZWRgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlci5yZWZyZXNoQmluZGluZy5iaW5kKHRoaXMsIG9Db250cm9sKSk7XG5cdFx0fVxuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+IGZ1bmN0aW9uIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBoYW5kbGVyIGZvclxuXHQgKiBAcmV0dXJucyBBIHBsYWluIG9iamVjdCB3aXRoIG9uZSBmdW5jdGlvbjogPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+XG5cdCAqL1xuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlcihvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IHtcblx0XHRyZWZyZXNoQmluZGluZz86IChvQ29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gdm9pZDtcblx0fSB7XG5cdFx0Y29uc3Qgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjoge1xuXHRcdFx0cmVmcmVzaEJpbmRpbmc/OiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHZvaWQ7XG5cdFx0fSA9IHt9O1xuXHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0Zm9yIChjb25zdCBzVHlwZSBpbiBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXApIHtcblx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHQvLyBwYXNzIG9ubHkgdGhlIHJlZnJlc2hCaW5kaW5nIGhhbmRsZXIgaW4gYW4gb2JqZWN0IHNvIHRoYXQgOlxuXHRcdFx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIGhhcyBhY2Nlc3Mgb25seSB0byByZWZyZXNoQmluZGluZyBhbmQgbm90IGFwcGx5IGFuZCByZXRlcml2ZSBhdCB0aGlzIHN0YWdlXG5cdFx0XHRcdFx0Ly8gMi4gQXBwbGljYXRpb24gbW9kaWZpY2F0aW9ucyB0byB0aGUgb2JqZWN0IHdpbGwgYmUgcmVmbGVjdGVkIGhlcmUgKGFzIHdlIHBhc3MgYnkgcmVmZXJlbmNlKVxuXHRcdFx0XHRcdG9SZWZyZXNoQmluZGluZ0hhbmRsZXJbXCJyZWZyZXNoQmluZGluZ1wiXSA9XG5cdFx0XHRcdFx0XHQoX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlIGFzIGtleW9mIENvbnRyb2xTdGF0ZU1hcF0ucmVmcmVzaEJpbmRpbmcgYXMgKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiB2b2lkKSB8fFxuXHRcdFx0XHRcdFx0e307XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihvQ29udHJvbCwgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcik7XG5cdFx0cmV0dXJuIG9SZWZyZXNoQmluZGluZ0hhbmRsZXI7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT4gZnVuY3Rpb24gZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gX29Db250cm9sIFRoZSBjb250cm9sIGZvciB3aGljaCB0aGUgcmVmcmVzaCBoYW5kbGVyIGlzIGFkYXB0ZWQuXG5cdCAqIEBwYXJhbSBfb0NvbnRyb2xIYW5kbGVyIEEgcGxhaW4gb2JqZWN0IHdoaWNoIGNhbiBoYXZlIG9uZSBmdW5jdGlvbjogPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+XG5cdCAqIEBwYXJhbSBfb0NvbnRyb2xIYW5kbGVyLnJlZnJlc2hCaW5kaW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXIoXG5cdFx0X29Db250cm9sOiBNYW5hZ2VkT2JqZWN0LFxuXHRcdF9vQ29udHJvbEhhbmRsZXI6IHtcblx0XHRcdHJlZnJlc2hCaW5kaW5nPzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiB2b2lkO1xuXHRcdH1cblx0KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHN1c3BlbmRlZCBkdWUgdG8ga2VlcC1hbGl2ZSBtb2RlLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uU3VzcGVuZCgpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgcmVzdG9yZWQgZHVlIHRvIGtlZXAtYWxpdmUgbW9kZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJlc3RvcmUoKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJ1Y3RvciBtZXRob2QgZm9yIG9iamVjdHMuXG5cdCAqL1xuXHRkZXN0cm95KCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0c3VwZXIuZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBmdW5jdGlvbiB0byBlbmFibGUgbXVsdGkgb3ZlcnJpZGUuIEl0IGlzIGFkZGluZyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciAoYXJyYXkpIHRvIHRoZSBwcm92aWRlZFxuXHQgKiBmdW5jdGlvbiAoYW5kIGl0cyBwYXJhbWV0ZXJzKSwgdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCB2aWEgPGNvZGU+UHJvbWlzZS5hbGw8L2NvZGU+LlxuXHQgKiBAcGFyYW0gZm5DYWxsIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIGFyZ3Ncblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJlc29sdmVkIHdpdGggdGhlIHJlc3VsdCBvZiBhbGwgb3ZlcnJpZGVzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGNvbGxlY3RSZXN1bHRzKGZuQ2FsbDogRnVuY3Rpb24sIC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8Q29udHJvbFtdPiB7XG5cdFx0Y29uc3QgYVJlc3VsdHM6IENvbnRyb2xbXSA9IFtdO1xuXHRcdGFyZ3MucHVzaChhUmVzdWx0cyk7XG5cdFx0Zm5DYWxsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPiBmdW5jdGlvbnMgZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEBwYXJhbSBhQ29udHJvbEhhbmRsZXIgQSBsaXN0IG9mIHBsYWluIG9iamVjdHMgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBhQ29udHJvbEhhbmRsZXI6IG9iamVjdFtdKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+IGZ1bmN0aW9ucyBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHJldHVybnMgQSBwbGFpbiBvYmplY3Qgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogQ29udHJvbFN0YXRlSGFuZGxlcjxNYW5hZ2VkT2JqZWN0LCBvYmplY3Q+W10ge1xuXHRcdGNvbnN0IGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8TWFuYWdlZE9iamVjdCwgb2JqZWN0PltdID0gW10sXG5cdFx0XHRhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcjogQ29udHJvbFN0YXRlSGFuZGxlcjxNYW5hZ2VkT2JqZWN0LCBvYmplY3Q+W10gPSBbXTtcblx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0b0NvbnRyb2wuaXNBPElWaWV3U3RhdGVDb250cmlidXRvcjxvYmplY3Q+PihcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLnZpZXdTdGF0ZS5JVmlld1N0YXRlQ29udHJpYnV0b3JcIikgJiZcblx0XHRcdFx0b0NvbnRyb2wucmV0cmlldmVTdGF0ZSAmJlxuXHRcdFx0XHRvQ29udHJvbC5hcHBseVN0YXRlXG5cdFx0XHQpIHtcblx0XHRcdFx0YUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlci5wdXNoKHtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0XHRcdFx0XHRyZXRyaWV2ZTogYXN5bmMgKF9jb250cm9sKSA9PiBvQ29udHJvbC5yZXRyaWV2ZVN0YXRlLmJpbmQob0NvbnRyb2wpKCksXG5cblx0XHRcdFx0XHRhcHBseTogYXN5bmMgKFxuXHRcdFx0XHRcdFx0X2NvbnRyb2w6IE1hbmFnZWRPYmplY3QsXG5cdFx0XHRcdFx0XHRjb250cm9sU3RhdGU/OiBvYmplY3QsXG5cdFx0XHRcdFx0XHRvTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0XHRcdFx0XHRza2lwTWVyZ2U/OiBib29sZWFuXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0XHRcdFx0XHQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3VsZEFwcGx5RGlmZlN0YXRlID1cblx0XHRcdFx0XHRcdFx0IXRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LmluY2x1ZGVzKG9Db250cm9sLmdldElkKCkpICYmXG5cdFx0XHRcdFx0XHRcdCF0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5jbHVkZXMob0NvbnRyb2wuZ2V0SWQoKSkgJiZcblx0XHRcdFx0XHRcdFx0b05hdlBhcmFtZXRlcnM/Lm5hdmlnYXRpb25UeXBlICE9PSBOYXZUeXBlLmh5YnJpZCAmJlxuXHRcdFx0XHRcdFx0XHRza2lwTWVyZ2UgIT09IHRydWU7XG5cdFx0XHRcdFx0XHRpZiAoIWNvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0NvbnRyb2wuYXBwbHlMZWdhY3lTdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IG9Db250cm9sLmFwcGx5TGVnYWN5U3RhdGUuYmluZChvQ29udHJvbCkoXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldENvbnRyb2xTdGF0ZS5iaW5kKHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRcdFx0b05hdlBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG91bGRBcHBseURpZmZTdGF0ZSxcblx0XHRcdFx0XHRcdFx0XHRcdHNraXBNZXJnZVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9Db250cm9sLmFwcGx5U3RhdGUuYmluZChvQ29udHJvbCkoY29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycywgc2hvdWxkQXBwbHlEaWZmU3RhdGUsIHNraXBNZXJnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoY29uc3Qgc1R5cGUgaW4gX21Db250cm9sU3RhdGVIYW5kbGVyTWFwKSB7XG5cdFx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHRcdC8vIGF2b2lkIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgaW50ZXJuYWwgX21Db250cm9sU3RhdGVIYW5kbGVyTWFwXG5cdFx0XHRcdFx0XHRhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLnB1c2goXG5cdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oe30sIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcFtzVHlwZSBhcyBrZXlvZiBDb250cm9sU3RhdGVNYXBdKSBhcyBDb250cm9sU3RhdGVIYW5kbGVyPFxuXHRcdFx0XHRcdFx0XHRcdE1hbmFnZWRPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0b2JqZWN0XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wsIGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyKTtcblx0XHRyZXR1cm4gYUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlci5jb25jYXQoYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFkZCBhbGwgY29udHJvbHMgZm9yIGdpdmVuIHZpZXcgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgdGhlIHN0YXRlIGhhbmRsaW5nIHRvIHRoZSBwcm92aWRlZCBjb250cm9sIGFycmF5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gX2FDb2xsZWN0ZWRDb250cm9scyBUaGUgY29sbGVjdGVkIGNvbnRyb2xzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YWRhcHRTdGF0ZUNvbnRyb2xzKF9hQ29sbGVjdGVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSk6IHZvaWQge1xuXHRcdF9hQ29sbGVjdGVkQ29udHJvbHMucHVzaCguLi50aGlzLnN0YXRlQ29udHJpYnV0b3JzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBrZXkgdG8gYmUgdXNlZCBmb3IgZ2l2ZW4gY29udHJvbC5cblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBrZXkgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBrZXkgdG8gYmUgdXNlZCBmb3Igc3RvcmluZyB0aGUgY29udHJvbHMgc3RhdGVcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRTdGF0ZUtleShvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldExvY2FsSWQob0NvbnRyb2wuZ2V0SWQoKSkgfHwgb0NvbnRyb2wuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgdmlldyBzdGF0ZSBvZiB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBiZWZvcmUgZmluaXNoaW5nLCBhbGwgYnV0IHRoZSBmaW5hbCByZXNwb25zZSB3aWxsIHJlc29sdmUgdG8gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPi5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgdmlldyBzdGF0ZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmV0cmlldmVWaWV3U3RhdGUoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZD4ge1xuXHRcdCsrdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0bGV0IG9WaWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkO1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiAoTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZClbXSA9IGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdFN0YXRlQ29udHJvbHMpO1xuXHRcdFx0Y29uc3QgYVJlc29sdmVkU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdChcblx0XHRcdFx0XHRhQ29udHJvbHMuZmlsdGVyKGZ1bmN0aW9uIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0E8TWFuYWdlZE9iamVjdD4oXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0XHRcdH0pIGFzIE1hbmFnZWRPYmplY3RbXVxuXHRcdFx0XHQpLm1hcChhc3luYyAob0NvbnRyb2wpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29udHJvbCkudGhlbigodlJlc3VsdDogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0a2V5OiB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHZSZXN1bHRcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0b1ZpZXdTdGF0ZSA9IGFSZXNvbHZlZFN0YXRlcy5yZWR1Y2UoZnVuY3Rpb24gKG9TdGF0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBtU3RhdGU6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pIHtcblx0XHRcdFx0Y29uc3Qgb0N1cnJlbnRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0b0N1cnJlbnRTdGF0ZVttU3RhdGUua2V5XSA9IG1TdGF0ZS52YWx1ZTtcblx0XHRcdFx0cmV0dXJuIG1lcmdlT2JqZWN0cyhvU3RhdGVzLCBvQ3VycmVudFN0YXRlKTtcblx0XHRcdH0sIHt9KTtcblx0XHRcdGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuX2N1cnJlbnRWaWV3U3RhdGU7XG5cdFx0XHRpZiAocHJldlN0YXRlICYmIE9iamVjdC5rZXlzKHByZXZTdGF0ZSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aGlzLl9hZGRNaXNzaW5nU3RhdGUob1ZpZXdTdGF0ZSwgcHJldlN0YXRlKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG1BZGRpdGlvbmFsU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpKTtcblx0XHRcdGlmIChtQWRkaXRpb25hbFN0YXRlcyAmJiBPYmplY3Qua2V5cyhtQWRkaXRpb25hbFN0YXRlcykubGVuZ3RoKSB7XG5cdFx0XHRcdG9WaWV3U3RhdGVbQURESVRJT05BTF9TVEFURVNfS0VZXSA9IG1BZGRpdGlvbmFsU3RhdGVzO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHQtLXRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyO1xuXHRcdH1cblx0XHR0aGlzLl9jdXJyZW50Vmlld1N0YXRlID0gb1ZpZXdTdGF0ZTtcblx0XHRyZXR1cm4gdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIgPT09IDAgPyBvVmlld1N0YXRlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gVG8gY2FycnkgZm9yd2FyZCB1bmFwcGxpZWQgc3RhdGUgbG9zdCBkdWUgdG8gbGF6eSBsb2FkaW5nIG9mIGNvbnRyb2xzLlxuXHQvL1xuXHQvLyBJZiB1c2VyIDEgY2hhbmdlcyBhIGNvbnRyb2wncyBzdGF0ZSBpbiBhIGxhenktbG9hZGVkIHNlY3Rpb24gYW5kIG5hdmlnYXRlcyBhd2F5LCB0aGVuIHNoYXJlcyB0aGUgVVJMIHdpdGggdXNlciAyLFxuXHQvLyB3aG8gZG9lc24ndCB2aXNpdCB0aGUgbGF6eS1sb2FkZWQgc2VjdGlvbiwgdGhlIGNvbnRyb2wncyBzdGF0ZSBpcyBtaXNzZWQgaW4gdGhlIG5ldyBhcHAgc3RhdGUuXG5cdC8vIFRoaXMgZW5zdXJlcyB0aGUgZnVsbCBzdGF0ZSBmcm9tIHVzZXIgMSBpcyBwcmVzZXJ2ZWQgYW5kIHRyYW5zZmVycmVkIHRvIHVzZXIgMyB3aGVuIHRoZSBVUkwgaXMgc2hhcmVkLlxuXHRfYWRkTWlzc2luZ1N0YXRlKG9WaWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwcmV2U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcHJldlN0YXRlKSB7XG5cdFx0XHRpZiAoIShrZXkgaW4gb1ZpZXdTdGF0ZSkpIHtcblx0XHRcdFx0b1ZpZXdTdGF0ZVtrZXldID0gcHJldlN0YXRlW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgbWFwIG9mIGFkZGl0aW9uYWwgc3RhdGVzIChub3QgY29udHJvbCBib3VuZCkgdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmlldyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gdmlldy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIG1BZGRpdGlvbmFsU3RhdGVzIFRoZSBhZGRpdGlvbmFsIHN0YXRlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMobUFkZGl0aW9uYWxTdGF0ZXM6IG9iamVjdCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiBhZGRpdGlvbmFsIHN0YXRlcyAobm90IGNvbnRyb2wgYm91bmQpIHRvIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IHZpZXcgc3RhdGUgb2YgdGhlIGdpdmVuIHZpZXcuXG5cdCAqIEByZXR1cm5zIEFkZGl0aW9uYWwgdmlldyBzdGF0ZXNcblx0ICovXG5cdF9yZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMoKTogdW5rbm93biB7XG5cdFx0Y29uc3QgbUFkZGl0aW9uYWxTdGF0ZXMgPSB7fTtcblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLnJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhtQWRkaXRpb25hbFN0YXRlcyk7XG5cdFx0cmV0dXJuIG1BZGRpdGlvbmFsU3RhdGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIHRoZSBnaXZlbiBjb250cm9sLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIG9iamVjdCB0byBnZXQgdGhlIHN0YXRlIGZvclxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdGUgZm9yIHRoZSBnaXZlbiBjb250cm9sXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJldHJpZXZlQ29udHJvbFN0YXRlKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxvYmplY3Q+IHtcblx0XHRjb25zdCBhQ29udHJvbFN0YXRlSGFuZGxlcnMgPSB0aGlzLmdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdGFDb250cm9sU3RhdGVIYW5kbGVycy5tYXAoYXN5bmMgKG1Db250cm9sU3RhdGVIYW5kbGVyKSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbUNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZSBpcyBub3QgYSBmdW5jdGlvbiBmb3IgY29udHJvbDogJHtvQ29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbUNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUuY2FsbCh0aGlzLCBvQ29udHJvbCk7XG5cdFx0XHR9KVxuXHRcdCkudGhlbigoYVN0YXRlczogb2JqZWN0W10pID0+IHtcblx0XHRcdHJldHVybiBhU3RhdGVzLnJlZHVjZShmdW5jdGlvbiAob0ZpbmFsU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvQ3VycmVudFN0YXRlOiBvYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuIG1lcmdlT2JqZWN0cyhvRmluYWxTdGF0ZSwgb0N1cnJlbnRTdGF0ZSk7XG5cdFx0XHR9LCB7fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIHRoZSB2aWV3IHN0YXRlIHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgb25jZSBpbml0aWFsbHkuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkfS5cblx0ICpcblx0ICogSW1wb3J0YW50OlxuXHQgKiBZb3Ugc2hvdWxkIG9ubHkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIGN1c3RvbSBwYWdlcyBhbmQgbm90IGZvciB0aGUgc3RhbmRhcmQgTGlzdFJlcG9ydFBhZ2UgYW5kIE9iamVjdFBhZ2UhXG5cdCAqIEByZXR1cm5zIElmIDxjb2RlPnRydWU8L2NvZGU+LCBvbmx5IHRoZSBpbml0aWFsIHZpZXcgc3RhdGUgaXMgYXBwbGllZCBvbmNlLFxuXHQgKiBlbHNlIGFueSBuZXcgdmlldyBzdGF0ZSBpcyBhbHNvIGFwcGxpZWQgb24gZm9sbG93LXVwIGNhbGxzIChkZWZhdWx0KVxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0YXBwbHlJbml0aWFsU3RhdGVPbmx5KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBjb250cm9sLlxuXHQgKiBAcGFyYW0gY29udHJvbCBUaGUgbWFuYWdlZCBjb250cm9sIG9iamVjdCB3aG9zZSBzdGF0ZSBpcyB0byBiZSByZXRyaWV2ZWQuXG5cdCAqIEByZXR1cm5zIC0gVGhlIHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgY29udHJvbC5cblx0ICovXG5cdGdldENvbnRyb2xTdGF0ZShjb250cm9sOiBNYW5hZ2VkT2JqZWN0KTogQ29udHJvbFN0YXRlIHtcblx0XHRjb25zdCBvVmlld1N0YXRlID0gdGhpcy5fY3VycmVudFZpZXdTdGF0ZTtcblx0XHRsZXQgY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUgPSB7fTtcblx0XHRpZiAob1ZpZXdTdGF0ZSkge1xuXHRcdFx0Y29uc3QgY29udHJvbEtleSA9IHRoaXMuZ2V0U3RhdGVLZXkoY29udHJvbCk7XG5cdFx0XHRjb250cm9sU3RhdGUgPSBvVmlld1N0YXRlW2NvbnRyb2xLZXldIGFzIFJlY29yZDxzdHJpbmcsIENvbnRyb2xTdGF0ZT47XG5cdFx0fVxuXHRcdHJldHVybiBjb250cm9sU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgZ2l2ZW4gdmlldyBzdGF0ZSB0byB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICogQHBhcmFtIG9WaWV3U3RhdGUgVGhlIHZpZXcgc3RhdGUgdG8gYXBwbHkgKGNhbiBiZSB1bmRlZmluZWQpXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMgVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudCBEZWZpbmVzIHdoZXRoZXIgdGhlIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKiBAcGFyYW0gc2tpcE1lcmdlIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byBza2lwIHRoZSBrZXkgdXNlciBzaGluZSB0aHJvdWdoXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBhcHBseVZpZXdTdGF0ZShcblx0XHRvVmlld1N0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0XHRvTmF2UGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdHNraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlJbml0aWFsU3RhdGVPbmx5KCkgJiYgdGhpcy5fZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHQvL1NOT1c6IENTMjAyMzAwMDY3NjU4OTcgRm9yIHRyYW5zaWVudCBBcHBTdGF0ZSwgd2UgcmV0dXJuIHdpdGhvdXQgYXBwbHlpbmcgdGhlIHN0YXRlIHRvIGNvbnRyb2xzIGluIFJvb3RDb250YWluZXIncyBjaGlsZHJlbiB2aWV3cyBhcyB0aGVyZSBpcyBubyBzdGF0ZSB0byBhcHBseVxuXHRcdFx0Ly9Pbmx5IG5lZWQgaXMgdG8gcmVzb2x2ZSB0aGUgX3BJbml0aWFsU3RhdGVBcHBsaWVkIHNvIHRoYXQgdXBkYXRlIG9mIEFwcFN0YXRlIGNhbiBzdGlsbCBoYXBwZW5cblx0XHRcdGlmICh0aGlzLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9WaWV3U3RhdGUsIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUpICYmICF0aGlzLl9faXNSb290Vmlld0NvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25CZWZvcmVTdGF0ZUFwcGxpZWQsIFtdLCBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlKTtcblx0XHRcdGNvbnN0IGFDb250cm9sczogTWFuYWdlZE9iamVjdFtdID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0U3RhdGVDb250cm9scyk7XG5cdFx0XHR0aGlzLnZpZXdTdGF0ZUNvbnRyb2xzID0gYUNvbnRyb2xzO1xuXHRcdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdGxldCBoYXNWYXJpYW50TWFuYWdlbWVudCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fY3VycmVudFZpZXdTdGF0ZSA9IG9WaWV3U3RhdGU7XG5cblx0XHRcdHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5ID0gdGhpcy5jb25maWdPZlN0YXRlQXBwbHkgPz8ge307XG5cdFx0XHR0aGlzLmNvbmZpZ09mU3RhdGVBcHBseS5za2lwTWVyZ2UgPSBza2lwTWVyZ2U7XG5cdFx0XHR0aGlzLmNvbmZpZ09mU3RhdGVBcHBseS5uYXZUeXBlUGFyYW1ldGVycyA9IG9OYXZQYXJhbWV0ZXI7XG5cdFx0XHR0aGlzLmNvbmZpZ09mU3RhdGVBcHBseS5zdGF0ZSA9IG9WaWV3U3RhdGU7XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVGhpcyBlbnN1cmVzIHRoYXQgdmFyaWFudE1hbmFnZW1lbnQgY29udHJvbCBpcyBhcHBsaWVkIGZpcnN0IHRvIGNhbGN1bGF0ZSB0aGUgaW5pdGlhbCBzdGF0ZSBmb3IgZGVsdGEgbG9naWNcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgc29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzID0gYUNvbnRyb2xzLnJlZHVjZSgobW9kaWZpZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdLCBjb250cm9sKSA9PiB7XG5cdFx0XHRcdGlmICghY29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBtb2RpZmllZENvbnRyb2xzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sID0gY29udHJvbC5pc0EoXCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIik7XG5cdFx0XHRcdGlmICghaGFzVmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0XHRoYXNWYXJpYW50TWFuYWdlbWVudCA9IGlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1vZGlmaWVkQ29udHJvbHMgPSBpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCA/IFtjb250cm9sLCAuLi5tb2RpZmllZENvbnRyb2xzXSA6IFsuLi5tb2RpZmllZENvbnRyb2xzLCBjb250cm9sXTtcblx0XHRcdFx0cmV0dXJuIG1vZGlmaWVkQ29udHJvbHM7XG5cdFx0XHR9LCBbXSk7XG5cblx0XHRcdC8vIEluIGNhc2Ugb2Ygbm8gVmFyaWFudCBNYW5hZ2VtZW50LCB0aGlzIGVuc3VyZXMgdGhhdCBpbml0aWFsIHN0YXRlcyBpcyBzZXRcblx0XHRcdGlmICghaGFzVmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSgpO1xuXHRcdFx0fVxuXHRcdFx0c29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKChvQ29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNLZXkgPSB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKTtcblx0XHRcdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKFxuXHRcdFx0XHRcdFx0dGhpcy5hcHBseUNvbnRyb2xTdGF0ZS5iaW5kKFxuXHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRvQ29udHJvbCxcblx0XHRcdFx0XHRcdFx0KG9WaWV3U3RhdGUgPyBvVmlld1N0YXRlW3NLZXldIDogdW5kZWZpbmVkKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0XHRcdFx0b05hdlBhcmFtZXRlcixcblx0XHRcdFx0XHRcdFx0c2tpcE1lcmdlID8/IGZhbHNlXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGF3YWl0IG9Qcm9taXNlQ2hhaW47XG5cdFx0XHRpZiAob05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUgfHwgb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSA9PT0gTmF2VHlwZS5oeWJyaWQpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyhcblx0XHRcdFx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFwcGx5QWRkaXRpb25hbFN0YXRlcyxcblx0XHRcdFx0XHRvVmlld1N0YXRlID8gb1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldIDogdW5kZWZpbmVkXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycywgb05hdlBhcmFtZXRlcik7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5fYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVyc1RvRmlsdGVyYmFyLCBvTmF2UGFyYW1ldGVyKTtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9WaWV3U3RhdGUsIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUpKSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLm9uQWZ0ZXJTdGF0ZUFwcGxpZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTtcblx0XHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHRfc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0XHRkZWxldGUgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdFx0cEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICF0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdH1cblxuXHRfaXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZSh2aWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLCBuYXZUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKCF2aWV3U3RhdGUgfHwgT2JqZWN0LmtleXModmlld1N0YXRlKS5sZW5ndGggPT09IDApICYmIG5hdlR5cGUgPT0gTmF2VHlwZS5pQXBwU3RhdGU7XG5cdH1cblxuXHRfX2lzUm9vdFZpZXdDb250cm9sbGVyKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIuaXNBPE5hdkNvbnRhaW5lckNvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyXCIpIHx8XG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIuaXNBPEZjbENvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IGJlZm9yZSBhIHN0YXRlIGZvciBnaXZlbiB2aWV3IGlzIGFwcGxpZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgTmF2aWdhdGlvbiB0eXBlIHJlc3BvbnNpYmxlIGZvciB0aGUgYXBwbHlpbmcgdGhlIHN0YXRlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZVN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSwgbmF2aWdhdGlvblR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IHdoZW4gc3RhdGUgZm9yIGdpdmVuIHZpZXcgd2FzIGFwcGxpZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25BZnRlclN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseWluZyBhZGRpdGlvbmFsLCBub3QgY29udHJvbCByZWxhdGVkLCBzdGF0ZXMgLSBpcyBjYWxsZWQgb25seSBpZiBuYXZpZ2F0aW9uIHR5cGUgaXMgaUFwcFN0YXRlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0gb1ZpZXdTdGF0ZSBUaGUgY3VycmVudCB2aWV3IHN0YXRlXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YXBwbHlBZGRpdGlvbmFsU3RhdGVzKG9WaWV3U3RhdGU6IG9iamVjdCwgYVByb21pc2VzOiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0X2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhcihfb05hdlBhcmFtZXRlcjogTmF2aWdhdGlvblBhcmFtZXRlciwgX2FQcm9taXNlczogUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHkgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGlzIG5vdCBjYWxsZWQgaWYgdGhlIG5hdmlnYXRpb24gdHlwZSBpcyBpQXBwU3RhdGVcblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycyhcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0b05hdlBhcmFtZXRlcjogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPHVua25vd24+XG5cdCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHlpbmcgdGhlIGdpdmVuIHN0YXRlIHRvIHRoZSBnaXZlbiBjb250cm9sLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIG9iamVjdCB0byBhcHBseSB0aGUgZ2l2ZW4gc3RhdGVcblx0ICogQHBhcmFtIG9Db250cm9sU3RhdGUgVGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbFxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXJzXSBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIFtza2lwTWVyZ2VdIFdoZXRoZXIgbWVyZ2Ugc2hvdWxkIGJlIHNraXBwZWQgb3Igbm90XG5cdCAqIEByZXR1cm5zIFJldHVybiBhIHByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGFwcGx5Q29udHJvbFN0YXRlKFxuXHRcdG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LFxuXHRcdG9Db250cm9sU3RhdGU6IG9iamVjdCxcblx0XHRvTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0c2tpcE1lcmdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhQ29udHJvbFN0YXRlSGFuZGxlcnMgPSB0aGlzLmdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wpO1xuXHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0YUNvbnRyb2xTdGF0ZUhhbmRsZXJzLmZvckVhY2goKG1Db250cm9sU3RhdGVIYW5kbGVyKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIG1Db250cm9sU3RhdGVIYW5kbGVyLmFwcGx5ICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjb250cm9sU3RhdGVIYW5kbGVyLmFwcGx5IGlzIG5vdCBhIGZ1bmN0aW9uIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdFx0fVxuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihtQ29udHJvbFN0YXRlSGFuZGxlci5hcHBseS5iaW5kKHRoaXMsIG9Db250cm9sLCBvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycywgc2tpcE1lcmdlKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9Qcm9taXNlQ2hhaW47XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0cHVibGljIHVwZGF0ZUFwcFN0YXRlRGVib3VuY2VkKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnVwZGF0ZUFwcFN0YXRlVGltZXIpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnVwZGF0ZUFwcFN0YXRlVGltZXIpO1xuXHRcdH1cblx0XHR0aGlzLnVwZGF0ZUFwcFN0YXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuYmFzZS5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sIDIwMCkgYXMgdW5rbm93biBhcyBudW1iZXI7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXIgYSBkZWRpY2F0ZWQgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGludG8gdGhlIHdob2xlIHZpZXcgc3RhdGUgaGFuZGxpbmcuXG5cdCAqIEBwYXJhbSBzdGF0ZUNvbnRyaWJ1dG9yIFRoZSBWaWV3U3RhdGVDb250cmlidXRvciB0byByZWdpc3RlclxuXHQgKi9cblx0cmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yKHN0YXRlQ29udHJpYnV0b3I6IE1hbmFnZWRPYmplY3QgJiBJVmlld1N0YXRlQ29udHJpYnV0b3I8dW5rbm93bj4pOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlQ29udHJpYnV0b3JzLnB1c2goc3RhdGVDb250cmlidXRvcik7XG5cdFx0aWYgKHRoaXMuX2N1cnJlbnRWaWV3U3RhdGUpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2xLZXkgPSB0aGlzLmdldFN0YXRlS2V5KHN0YXRlQ29udHJpYnV0b3IpO1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlID0gdGhpcy5fY3VycmVudFZpZXdTdGF0ZVtjb250cm9sS2V5XTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25UeXBlID0gdGhpcy5jb25maWdPZlN0YXRlQXBwbHk/Lm5hdlR5cGVQYXJhbWV0ZXJzPy5uYXZpZ2F0aW9uVHlwZTtcblx0XHRcdGNvbnN0IHNraXBNZXJnZSA9IHRoaXMuY29uZmlnT2ZTdGF0ZUFwcGx5Py5za2lwTWVyZ2U7XG5cdFx0XHRpZiAoY29udHJvbFN0YXRlICYmIGNvbnRyb2xTdGF0ZSA9PT0gdGhpcy5jb25maWdPZlN0YXRlQXBwbHk/LnN0YXRlPy5bY29udHJvbEtleV0pIHtcblx0XHRcdFx0Ly8gVG8gY2hlY2sgd2hldGhlciBkaWZmc3RhdGUgc2h1b2xkIGJlIGNhbGxlZCBvciBub3QgdG8gYXBwbHlFeHRlcm5hbFN0YXRlXG5cdFx0XHRcdGNvbnN0IHNob3VsZEFwcGx5RGlmZlN0YXRlID1cblx0XHRcdFx0XHQhdGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkuaW5jbHVkZXMoc3RhdGVDb250cmlidXRvci5nZXRJZCgpKSAmJlxuXHRcdFx0XHRcdCF0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5jbHVkZXMoc3RhdGVDb250cmlidXRvci5nZXRJZCgpKSAmJlxuXHRcdFx0XHRcdG5hdmlnYXRpb25UeXBlICE9PSBOYXZUeXBlLmh5YnJpZCAmJlxuXHRcdFx0XHRcdHNraXBNZXJnZSAhPT0gdHJ1ZTtcblxuXHRcdFx0XHRzdGF0ZUNvbnRyaWJ1dG9yLmFwcGx5U3RhdGUoY29udHJvbFN0YXRlLCB1bmRlZmluZWQsIHNob3VsZEFwcGx5RGlmZlN0YXRlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudXBkYXRlQXBwU3RhdGVEZWJvdW5jZWQoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVyZWdpc3RlciBhIGRlZGljYXRlZCBJVmlld1N0YXRlQ29udHJpYnV0b3IgZnJvbSB0aGUgd2hvbGUgdmlldyBzdGF0ZSBoYW5kbGluZy5cblx0ICogQHBhcmFtIHN0YXRlQ29udHJpYnV0b3IgVGhlIFZpZXdTdGF0ZUNvbnRyaWJ1dG9yIHRvIGRlcmVnaXN0ZXJcblx0ICovXG5cdGRlcmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yKHN0YXRlQ29udHJpYnV0b3I6IE1hbmFnZWRPYmplY3QgJiBJVmlld1N0YXRlQ29udHJpYnV0b3I8dW5rbm93bj4pOiB2b2lkIHtcblx0XHRjb25zdCB0YXJnZXRJbmRleCA9IHRoaXMuc3RhdGVDb250cmlidXRvcnMuZmluZEluZGV4KChjb250cmlidXRvcikgPT4gY29udHJpYnV0b3IgPT0gc3RhdGVDb250cmlidXRvcik7XG5cdFx0aWYgKHRhcmdldEluZGV4ICE9PSAtMSkge1xuXHRcdFx0dGhpcy5zdGF0ZUNvbnRyaWJ1dG9ycy5zcGxpY2UodGFyZ2V0SW5kZXgsIDEpO1xuXHRcdH1cblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8vIG1ldGhvZCB0byBnZXQgdGhlIGNvbnRyb2wgc3RhdGUgZm9yIG1kYyBjb250cm9scyBhcHBseWluZyB0aGUgZGVsdGEgbG9naWNcblx0X2dldENvbnRyb2xTdGF0ZShjb250cm9sU3RhdGVLZXk6IHN0cmluZywgY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcjtcblx0XHRpZiAoT2JqZWN0LmtleXMoaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIpLmxlbmd0aCA+IDAgJiYgaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5XSkge1xuXHRcdFx0aWYgKE9iamVjdC5rZXlzKGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0gYXMgb2JqZWN0KS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5XSA9IHsgLi4uY29udHJvbFN0YXRlIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geyBmdWxsU3RhdGU6IGNvbnRyb2xTdGF0ZSBhcyBvYmplY3QsIGluaXRpYWxTdGF0ZTogaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5XSBhcyBvYmplY3QgfTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8vbWV0aG9kIHRvIHN0b3JlIHRoZSBpbml0aWFsIHN0YXRlcyBmb3IgZGVsdGEgY29tcHV0YXRpb24gb2YgbWRjIGNvbnRyb2xzXG5cdF9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlID0gYXN5bmMgKHZhcmlhbnRNYW5hZ2VtZW50PzogVmFyaWFudE1hbmFnZW1lbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYWRhcHRDb250cm9scyA9IHRoaXMudmlld1N0YXRlQ29udHJvbHM7XG5cblx0XHRcdGNvbnN0IGV4dGVybmFsU3RhdGVQcm9taXNlczogUHJvbWlzZTxvYmplY3Q+W10gPSBbXTtcblx0XHRcdGNvbnN0IGNvbnRyb2xTdGF0ZUtleTogc3RyaW5nW10gPSBbXTtcblx0XHRcdGxldCBpbml0aWFsQ29udHJvbFN0YXRlczogb2JqZWN0W10gPSBbXTtcblx0XHRcdGNvbnN0IHZhcmlhbnRDb250cm9sczogc3RyaW5nW10gPSB2YXJpYW50TWFuYWdlbWVudD8uZ2V0Rm9yKCkgPz8gW107XG5cblx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbFN0YXRlKHZhcmlhbnRDb250cm9scyk7XG5cblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRhZGFwdENvbnRyb2xzXG5cdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoY29udHJvbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0Y29udHJvbCAmJlxuXHRcdFx0XHRcdFx0XHQoIXZhcmlhbnRNYW5hZ2VtZW50IHx8IHZhcmlhbnRDb250cm9scy5pbmNsdWRlcygoY29udHJvbCBhcyBDb250cm9sKS5nZXRJZCgpKSkgJiZcblx0XHRcdFx0XHRcdFx0KChjb250cm9sIGFzIEJhc2VPYmplY3QpLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgfHxcblx0XHRcdFx0XHRcdFx0XHQoY29udHJvbCBhcyBCYXNlT2JqZWN0KS5pc0EoXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSB8fFxuXHRcdFx0XHRcdFx0XHRcdChjb250cm9sIGFzIEJhc2VPYmplY3QpLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Lm1hcChhc3luYyAoY29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzVG9WYXJpYW50TWFuYWdlbWVudCh2YXJpYW50TWFuYWdlbWVudCwgdmFyaWFudENvbnRyb2xzKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxTdGF0ZVByb21pc2UgPSAoYXdhaXQgZ2V0U3RhdGVVdGlsKCkpLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShjb250cm9sIGFzIE1EQ0NvbnRyb2wpO1xuXHRcdFx0XHRcdFx0ZXh0ZXJuYWxTdGF0ZVByb21pc2VzLnB1c2goZXh0ZXJuYWxTdGF0ZVByb21pc2UpO1xuXHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlS2V5LnB1c2godGhpcy5nZXRTdGF0ZUtleShjb250cm9sKSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdCk7XG5cblx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoZXh0ZXJuYWxTdGF0ZVByb21pc2VzKTtcblx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzLmZvckVhY2goKGluaXRpYWxDb250cm9sU3RhdGU6IG9iamVjdCwgaTogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5W2ldXSA9IGluaXRpYWxDb250cm9sU3RhdGU7XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBBdHRhY2ggZXZlbnQgdG8gc2F2ZSBhbmQgc2VsZWN0IG9mIFZhcmlhbnQgTWFuYWdlbWVudCB0byB1cGRhdGUgdGhlIGluaXRpYWwgQ29udHJvbCBTdGF0ZXMgb24gdmFyaWFudCBjaGFuZ2Vcblx0X2FkZEV2ZW50TGlzdGVuZXJzVG9WYXJpYW50TWFuYWdlbWVudCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQsIHZhcmlhbnRDb250cm9sczogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCBvUGF5bG9hZCA9IHsgdmFyaWFudE1hbmFnZWRDb250cm9sczogdmFyaWFudENvbnRyb2xzIH07XG5cdFx0Y29uc3QgZm5FdmVudCA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMuX3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2UodmFyaWFudENvbnRyb2xzKTtcblx0XHR9O1xuXHRcdHZhcmlhbnRNYW5hZ2VtZW50LmF0dGFjaFNhdmUob1BheWxvYWQsIGZuRXZlbnQsIHt9KTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5hdHRhY2hTZWxlY3Qob1BheWxvYWQsIGZuRXZlbnQsIHt9KTtcblx0fVxuXG5cdF91cGRhdGVJbml0aWFsU3RhdGVzT25WYXJpYW50Q2hhbmdlKHZtQXNzb2NpYXRlZENvbnRyb2xzVG9SZXNldDogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlciA9IHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXI7XG5cdFx0T2JqZWN0LmtleXMoaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIpLmZvckVhY2goKGNvbnRyb2xLZXkpID0+IHtcblx0XHRcdGZvciAoY29uc3Qgdm1Bc3NvY2lhdGVkY29udHJvbEtleSBvZiB2bUFzc29jaWF0ZWRDb250cm9sc1RvUmVzZXQpIHtcblx0XHRcdFx0aWYgKHZtQXNzb2NpYXRlZGNvbnRyb2xLZXkuaW5jbHVkZXMoY29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sS2V5XSA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy51cGRhdGVJbml0aWFsU3RhdGUodm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgdmFyaWFudCBjb250cm9scy5cblx0ICogQHBhcmFtIHZhcmlhbnRDb250cm9scyBBbiBhcnJheSBvZiBjb250cm9sIElEcyBmb3Igd2hpY2ggdGhlIGluaXRpYWwgc3RhdGUgbmVlZHMgdG8gYmUgdXBkYXRlZC5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbCBzdGF0ZSB1cGRhdGUgaXMgY29tcGxldGUuXG5cdCAqL1xuXHRhc3luYyB1cGRhdGVJbml0aWFsU3RhdGUodmFyaWFudENvbnRyb2xzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHZpZXdDb250cm9sczogKE1hbmFnZWRPYmplY3QgfCB1bmRlZmluZWQpW10gPSB0aGlzLnN0YXRlQ29udHJpYnV0b3JzO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0dmlld0NvbnRyb2xzLm1hcChhc3luYyAoY29udHJvbCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250cm9sSWQ6IHN0cmluZyA9IGNvbnRyb2w/LmdldElkKCkgYXMgc3RyaW5nO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dmFyaWFudENvbnRyb2xzLmluY2x1ZGVzKGNvbnRyb2xJZCkgJiZcblx0XHRcdFx0XHRjb250cm9sPy5pc0E8SVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPG9iamVjdD4+KFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMudmlld1N0YXRlLklWaWV3U3RhdGVDb250cmlidXRvclwiKSAmJlxuXHRcdFx0XHRcdGNvbnRyb2wuc2V0SW5pdGlhbFN0YXRlXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGF3YWl0IGNvbnRyb2wuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdF9pc0luaXRpYWxTdGF0ZXNBcHBsaWNhYmxlKFxuXHRcdGluaXRpYWxTdGF0ZTogb2JqZWN0IHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRyb2w6IEZpbHRlckJhciB8IE1EQ1RhYmxlLFxuXHRcdHNraXBNZXJnZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRpc05hdkh5YnJpZD86IGJvb2xlYW5cblx0KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCEhaW5pdGlhbFN0YXRlICYmXG5cdFx0XHQhdGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkuaW5jbHVkZXMoY29udHJvbC5nZXRJZCgpKSAmJlxuXHRcdFx0IXRoaXMuY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZS5pbmNsdWRlcyhjb250cm9sLmdldElkKCkpICYmXG5cdFx0XHQoaXNOYXZIeWJyaWQgPz8gdHJ1ZSkgJiZcblx0XHRcdHNraXBNZXJnZSAhPT0gdHJ1ZVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld1N0YXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE0QkE7RUFDQTtFQUNBO0VBQ0EsTUFBTUEsT0FBTyxHQUFHQyxVQUFVLENBQUNELE9BQU87O0VBRWxDO0FBQ0E7QUFDQTtBQUNBOztFQXdCQSxNQUFNRSxxQkFBcUIsR0FBRyxtQkFBbUI7O0VBb0JqRDtFQUNBO0VBQ0E7O0VBZ0JBLE1BQU1DLFlBQVksR0FBRyxlQUFBQSxDQUFBLEVBQTZDO0lBQ2pFLE9BQU8sQ0FBQyxNQUFNQyxtQkFBQSxDQUFPLDJCQUEyQixDQUFDLEVBQUVDLE9B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
|