@sapui5/sap.fe.core 1.103.0 → 1.106.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +121 -0
- package/src/sap/fe/core/ActionRuntime.ts +122 -0
- package/src/sap/fe/core/AppComponent.js +24 -11
- package/src/sap/fe/core/AppComponent.ts +17 -5
- package/src/sap/fe/core/AppStateHandler.js +74 -62
- package/src/sap/fe/core/AppStateHandler.ts +24 -29
- package/src/sap/fe/core/BaseController.js +2 -2
- package/src/sap/fe/core/CommonUtils.js +147 -180
- package/src/sap/fe/core/CommonUtils.ts +166 -193
- package/src/sap/fe/core/ExtensionAPI.js +2 -2
- package/src/sap/fe/core/PageController.js +2 -2
- package/src/sap/fe/core/TemplateComponent.js +21 -10
- package/src/sap/fe/core/TemplateComponent.ts +3 -0
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +7 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +194 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +162 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -227
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +268 -119
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +111 -76
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +96 -76
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +723 -637
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +361 -398
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +83 -55
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +42 -44
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +29 -27
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +171 -74
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +167 -76
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +5 -21
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -17
- package/src/sap/fe/core/controllerextensions/MassEdit.js +3 -3
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Paginator.js +13 -13
- package/src/sap/fe/core/controllerextensions/Paginator.ts +11 -11
- package/src/sap/fe/core/controllerextensions/Placeholder.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +154 -123
- package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
- package/src/sap/fe/core/controllerextensions/SideEffects.js +157 -97
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +151 -95
- package/src/sap/fe/core/controllerextensions/ViewState.js +151 -80
- package/src/sap/fe/core/controllerextensions/ViewState.ts +95 -93
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +9 -9
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +6 -7
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +26 -11
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +30 -11
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -40
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +55 -47
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +31 -32
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1376 -914
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +654 -714
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +372 -326
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +210 -276
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +670 -521
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +537 -535
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +85 -65
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +16 -21
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +25 -13
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +53 -43
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +18 -27
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +9 -15
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +19 -3
- package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +26 -16
- package/src/sap/fe/core/controls/Any.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +5 -5
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -3
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FileWrapper.js +8 -3
- package/src/sap/fe/core/controls/FileWrapper.ts +5 -1
- package/src/sap/fe/core/controls/FilterBar.js +2 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +48 -17
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js +23 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +34 -9
- package/src/sap/fe/core/converters/ManifestSettings.js +19 -18
- package/src/sap/fe/core/converters/ManifestSettings.ts +53 -47
- package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +32 -10
- package/src/sap/fe/core/converters/MetaModelConverter.ts +42 -19
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +69 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +98 -51
- package/src/sap/fe/core/converters/controls/Common/Action.ts +121 -44
- package/src/sap/fe/core/converters/controls/Common/Chart.js +31 -34
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -34
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +43 -7
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -33
- package/src/sap/fe/core/converters/controls/Common/Form.js +8 -6
- package/src/sap/fe/core/converters/controls/Common/Form.ts +11 -14
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
- package/src/sap/fe/core/converters/controls/Common/Table.js +188 -157
- package/src/sap/fe/core/converters/controls/Common/Table.ts +279 -230
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +4 -4
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +57 -21
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +71 -18
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +30 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +43 -34
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +37 -25
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +85 -49
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +74 -50
- package/src/sap/fe/core/converters/helpers/Aggregation.js +54 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +56 -8
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +6 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +10 -2
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +182 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +167 -0
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +8 -14
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +6 -9
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +31 -31
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +54 -47
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +44 -15
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +64 -30
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
- package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
- package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/fpm/Component.js +33 -7
- package/src/sap/fe/core/fpm/Component.ts +14 -0
- package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +5 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +4 -3
- package/src/sap/fe/core/helpers/BindingToolkit.js +56 -24
- package/src/sap/fe/core/helpers/BindingToolkit.ts +67 -21
- package/src/sap/fe/core/helpers/ClassSupport.js +31 -3
- package/src/sap/fe/core/helpers/ClassSupport.ts +24 -1
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +39 -0
- package/src/sap/fe/core/helpers/LoaderUtils.ts +14 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +475 -99
- package/src/sap/fe/core/helpers/MassEditHelper.ts +468 -155
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +82 -36
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +52 -36
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +146 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper.ts +128 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +119 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +98 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
- package/src/sap/fe/core/library.js +2 -2
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +4 -41
- package/src/sap/fe/core/messagebundle_ar.properties +22 -45
- package/src/sap/fe/core/messagebundle_bg.properties +22 -45
- package/src/sap/fe/core/messagebundle_ca.properties +22 -45
- package/src/sap/fe/core/messagebundle_cs.properties +22 -45
- package/src/sap/fe/core/messagebundle_cy.properties +21 -44
- package/src/sap/fe/core/messagebundle_da.properties +22 -45
- package/src/sap/fe/core/messagebundle_de.properties +22 -45
- package/src/sap/fe/core/messagebundle_el.properties +22 -45
- package/src/sap/fe/core/messagebundle_en.properties +21 -44
- package/src/sap/fe/core/messagebundle_en_GB.properties +21 -44
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -42
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +20 -40
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +21 -42
- package/src/sap/fe/core/messagebundle_es.properties +22 -45
- package/src/sap/fe/core/messagebundle_es_MX.properties +22 -45
- package/src/sap/fe/core/messagebundle_et.properties +22 -45
- package/src/sap/fe/core/messagebundle_fi.properties +22 -45
- package/src/sap/fe/core/messagebundle_fr.properties +21 -44
- package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -43
- package/src/sap/fe/core/messagebundle_hi.properties +22 -45
- package/src/sap/fe/core/messagebundle_hr.properties +22 -45
- package/src/sap/fe/core/messagebundle_hu.properties +22 -45
- package/src/sap/fe/core/messagebundle_id.properties +22 -45
- package/src/sap/fe/core/messagebundle_it.properties +22 -45
- package/src/sap/fe/core/messagebundle_iw.properties +22 -45
- package/src/sap/fe/core/messagebundle_ja.properties +22 -45
- package/src/sap/fe/core/messagebundle_kk.properties +22 -45
- package/src/sap/fe/core/messagebundle_ko.properties +27 -50
- package/src/sap/fe/core/messagebundle_lt.properties +22 -45
- package/src/sap/fe/core/messagebundle_lv.properties +22 -45
- package/src/sap/fe/core/messagebundle_ms.properties +22 -45
- package/src/sap/fe/core/messagebundle_nl.properties +24 -47
- package/src/sap/fe/core/messagebundle_no.properties +22 -45
- package/src/sap/fe/core/messagebundle_pl.properties +23 -46
- package/src/sap/fe/core/messagebundle_pt.properties +23 -46
- package/src/sap/fe/core/messagebundle_pt_PT.properties +22 -45
- package/src/sap/fe/core/messagebundle_ro.properties +22 -45
- package/src/sap/fe/core/messagebundle_ru.properties +22 -45
- package/src/sap/fe/core/messagebundle_sh.properties +22 -45
- package/src/sap/fe/core/messagebundle_sk.properties +22 -45
- package/src/sap/fe/core/messagebundle_sl.properties +22 -45
- package/src/sap/fe/core/messagebundle_sv.properties +22 -45
- package/src/sap/fe/core/messagebundle_th.properties +20 -43
- package/src/sap/fe/core/messagebundle_tr.properties +22 -45
- package/src/sap/fe/core/messagebundle_uk.properties +22 -45
- package/src/sap/fe/core/messagebundle_vi.properties +22 -45
- package/src/sap/fe/core/messagebundle_zh_CN.properties +22 -45
- package/src/sap/fe/core/messagebundle_zh_TW.properties +22 -45
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +102 -74
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +62 -63
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -8
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ShellServicesFactory.js +22 -2
- package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +251 -200
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +160 -144
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
- 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 +1 -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/CommonFormatters.js +4 -3
- package/src/sap/fe/core/templating/CommonFormatters.ts +5 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +8 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +5 -2
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +4 -5
- package/src/sap/fe/core/templating/EntitySetHelper.ts +4 -3
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js +34 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +28 -12
- 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 -1
- package/src/sap/fe/core/templating/UIFormatters.js +5 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/Email.js +2 -2
|
@@ -11,7 +11,6 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
11
11
|
var aResolveFunctions = [];
|
|
12
12
|
var oDialog;
|
|
13
13
|
var oBackButton;
|
|
14
|
-
var oMessageTemplate;
|
|
15
14
|
var oMessageView;
|
|
16
15
|
|
|
17
16
|
function fnFormatTechnicalDetails() {
|
|
@@ -217,8 +216,10 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
217
216
|
}
|
|
218
217
|
|
|
219
218
|
function prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow) {
|
|
219
|
+
var oMessageTemplate;
|
|
220
|
+
|
|
220
221
|
if (!bStrictHandlingFlow) {
|
|
221
|
-
oMessageTemplate =
|
|
222
|
+
oMessageTemplate = new MessageItem(undefined, {
|
|
222
223
|
counter: {
|
|
223
224
|
path: "counter"
|
|
224
225
|
},
|
|
@@ -234,12 +235,14 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
234
235
|
} else {
|
|
235
236
|
oMessageTemplate = new MessageItem({
|
|
236
237
|
title: "{message}",
|
|
237
|
-
type:
|
|
238
|
+
type: {
|
|
239
|
+
path: "type"
|
|
240
|
+
},
|
|
238
241
|
longtextUrl: "{descriptionUrl}"
|
|
239
242
|
});
|
|
240
243
|
}
|
|
241
244
|
|
|
242
|
-
oMessageView =
|
|
245
|
+
oMessageView = new MessageView({
|
|
243
246
|
showDetailsPageHeader: false,
|
|
244
247
|
itemSelect: function () {
|
|
245
248
|
oBackButton.setVisible(true);
|
|
@@ -265,16 +268,12 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
265
268
|
};
|
|
266
269
|
}
|
|
267
270
|
|
|
268
|
-
function showUnboundMessages(aCustomMessages, oContext, bHasEtagMessage, bShowBoundTransition, showErrorInAPD, bShowMessageBox, concurrentEditFlag) {
|
|
271
|
+
function showUnboundMessages(aCustomMessages, oContext, bHasEtagMessage, bShowBoundTransition, showErrorInAPD, bShowMessageBox, concurrentEditFlag, bOnlyForTest) {
|
|
269
272
|
var aUnboundMessages = this.getMessages();
|
|
270
273
|
var oMessageManager = Core.getMessageManager();
|
|
271
274
|
var sHighestPriority;
|
|
272
275
|
var sHighestPriorityText;
|
|
273
276
|
var aFilters = [new Filter({
|
|
274
|
-
path: "code",
|
|
275
|
-
operator: FilterOperator.NE,
|
|
276
|
-
value1: null
|
|
277
|
-
}), new Filter({
|
|
278
277
|
path: "persistent",
|
|
279
278
|
operator: FilterOperator.NE,
|
|
280
279
|
value1: false
|
|
@@ -445,6 +444,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
445
444
|
aResolveFunctions = [];
|
|
446
445
|
}
|
|
447
446
|
});
|
|
447
|
+
oDialog.removeAllContent();
|
|
448
448
|
oDialog.addContent(oMessageObject.oMessageView);
|
|
449
449
|
|
|
450
450
|
if (messageHasETag) {
|
|
@@ -473,7 +473,10 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
473
473
|
oDialog.getCustomHeader().getContentMiddle()[0].setText(sHighestPriorityText);
|
|
474
474
|
oMessageView.navigateBack();
|
|
475
475
|
oDialog.open();
|
|
476
|
-
|
|
476
|
+
|
|
477
|
+
if (bOnlyForTest) {
|
|
478
|
+
resolve(oDialog);
|
|
479
|
+
}
|
|
477
480
|
}).catch(reject);
|
|
478
481
|
});
|
|
479
482
|
} else if (showMessageBox) {
|
|
@@ -580,7 +583,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
580
583
|
}
|
|
581
584
|
|
|
582
585
|
for (i = 0; i < aMessages.length; i++) {
|
|
583
|
-
if ((!bTransitionOnly || aMessages[i].persistent) && (bBoundMessages && aMessages[i].target !== "" || !bBoundMessages && (!aMessages[i].target || aMessages[i].target === ""))
|
|
586
|
+
if ((!bTransitionOnly || aMessages[i].persistent) && (bBoundMessages && aMessages[i].target !== "" || !bBoundMessages && (!aMessages[i].target || aMessages[i].target === ""))) {
|
|
584
587
|
aTransitionMessages.push(aMessages[i]);
|
|
585
588
|
}
|
|
586
589
|
}
|
|
@@ -589,9 +592,18 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
589
592
|
if (aTransitionMessages[i].code === "503" && aTransitionMessages[i].message !== "" && aTransitionMessages[i].message.indexOf(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_BACKEND_PREFIX")) === -1) {
|
|
590
593
|
aTransitionMessages[i].message = "\n".concat(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_BACKEND_PREFIX")).concat(aTransitionMessages[i].message);
|
|
591
594
|
}
|
|
595
|
+
} //Filtering messages again here to avoid showing pure technical messages raised by the model
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
var backendMessages = [];
|
|
599
|
+
|
|
600
|
+
for (i = 0; i < aTransitionMessages.length; i++) {
|
|
601
|
+
if (aTransitionMessages[i].technicalDetails && (aTransitionMessages[i].technicalDetails.originalMessage && aTransitionMessages[i].technicalDetails.originalMessage !== null || aTransitionMessages[i].technicalDetails.httpStatus && aTransitionMessages[i].technicalDetails.httpStatus !== null) || aTransitionMessages[i].code) {
|
|
602
|
+
backendMessages.push(aTransitionMessages[i]);
|
|
603
|
+
}
|
|
592
604
|
}
|
|
593
605
|
|
|
594
|
-
return
|
|
606
|
+
return backendMessages;
|
|
595
607
|
}
|
|
596
608
|
|
|
597
609
|
function removeTransitionMessages(bBoundMessages, sPathToBeRemoved) {
|
|
@@ -623,4 +635,4 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
623
635
|
};
|
|
624
636
|
return messageHandling;
|
|
625
637
|
}, false);
|
|
626
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVRlbXBsYXRlIiwib01lc3NhZ2VWaWV3IiwiZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzIiwic1ByZXZpb3VzR3JvdXBOYW1lIiwiaW5zZXJ0RGV0YWlsIiwib1Byb3BlcnR5IiwicHJvcGVydHkiLCJzdWJzdHIiLCJNYXRoIiwibWF4IiwibGFzdEluZGV4T2YiLCJpbnNlcnRHcm91cE5hbWUiLCJzSFRNTCIsImdyb3VwTmFtZSIsImdldFBhdGhzIiwic1REIiwiZm9yRWFjaCIsImZuRm9ybWF0RGVzY3JpcHRpb24iLCJmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkiLCJhTWVzc2FnZXMiLCJzTWVzc2FnZVByaW9yaXR5IiwiTm9uZSIsImlMZW5ndGgiLCJsZW5ndGgiLCJvTWVzc2FnZUNvdW50IiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiaSIsImdldFR5cGUiLCJmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkiLCJvTWVzc2FnZU1hbmFnZXIiLCJvUmVzb3VyY2VCdW5kbGUiLCJjb25jdXJyZW50RWRpdEZsYWciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXRPYmplY3QiLCJiTWVzc2FnZXNNb2RpZmllZCIsInNFdGFnTWVzc2FnZSIsIm9NZXNzYWdlIiwib1RlY2huaWNhbERldGFpbHMiLCJnZXRUZWNobmljYWxEZXRhaWxzIiwiaHR0cFN0YXR1cyIsImlzQ29uY3VycmVudE1vZGlmaWNhdGlvbiIsImdldFRleHQiLCJyZW1vdmVNZXNzYWdlcyIsInNldE1lc3NhZ2UiLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsImRpYWxvZ0Nsb3NlSGFuZGxlciIsImNsb3NlIiwic2V0VmlzaWJsZSIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJnZXRNb2RlbCIsInNldERhdGEiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0UmV0cnlBZnRlck1lc3NhZ2UiLCJiTWVzc2FnZURpYWxvZyIsImROb3ciLCJEYXRlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwiTWVzc2FnZUl0ZW0iLCJ1bmRlZmluZWQiLCJjb3VudGVyIiwicGF0aCIsInRpdGxlIiwic3VidGl0bGUiLCJsb25ndGV4dFVybCIsInR5cGUiLCJkZXNjcmlwdGlvbiIsIm1hcmt1cERlc2NyaXB0aW9uIiwiTWVzc2FnZVZpZXciLCJzaG93RGV0YWlsc1BhZ2VIZWFkZXIiLCJpdGVtU2VsZWN0IiwiaXRlbXMiLCJ0ZW1wbGF0ZSIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsInNob3dVbmJvdW5kTWVzc2FnZXMiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvQ29udGV4dCIsImJIYXNFdGFnTWVzc2FnZSIsImJTaG93Qm91bmRUcmFuc2l0aW9uIiwic2hvd0Vycm9ySW5BUEQiLCJiU2hvd01lc3NhZ2VCb3giLCJhVW5ib3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImNvbmNhdCIsInB1c2giLCJFUSIsImZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyIsImFDb250cm9sSWRzIiwiaW5kZXgiLCJJbmZpbml0eSIsIm9Db250cm9sIiwiYnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJnZXRDb2RlIiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJhQ3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiSXNBY3RpdmVFbnRpdHkiLCJjdXJyZW50Q29udGV4dCIsImV4aXN0aW5nTWVzc2FnZXMiLCJBcnJheSIsImlzQXJyYXkiLCJnZXREYXRhIiwib1VuaXF1ZU9iaiIsImFNb2RlbERhdGFBcnJheSIsImZpbHRlciIsIm9iaiIsImlkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwicmVqZWN0IiwidGhlbiIsIm1lc3NhZ2VIYXNFVGFnIiwib01lc3NhZ2VPYmplY3QiLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJhZnRlckNsb3NlIiwiY2FsbCIsImFkZENvbnRlbnQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJCdXR0b25UeXBlIiwic2V0QmVnaW5CdXR0b24iLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJyZWZyZXNoIiwiRW1waGFzaXplZCIsImRlc3Ryb3lCZWdpbkJ1dHRvbiIsImdldEl0ZW1zIiwiZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nIiwic2V0U3RhdGUiLCJnZXRDdXN0b21IZWFkZXIiLCJnZXRDb250ZW50TWlkZGxlIiwic2V0VGV4dCIsIm9wZW4iLCJjYXRjaCIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJmb3JtYXR0ZWRUZXh0U3RyaW5nIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJnZXRBZGRpdGlvbmFsVGV4dCIsImdldE1lc3NhZ2UiLCJmb3JtYXR0ZWRUZXh0IiwiRm9ybWF0dGVkVGV4dCIsImh0bWxUZXh0IiwiTWVzc2FnZUJveCIsImVycm9yIiwib25DbG9zZSIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInNQYXRoVG9CZVJlbW92ZWQiLCJnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwiLCJvTWVzc2FnZU1vZGVsIiwibGlzdEJpbmRpbmciLCJTdGFydHNXaXRoIiwibWFwIiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYU1lc3NhZ2VzVG9CZURlbGV0ZWQiLCJtZXNzYWdlSGFuZGxpbmciLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBbUJBLE1BQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUE1QjtBQUNBLE1BQUlFLFlBQW1CLEdBQUcsRUFBMUI7QUFDQSxNQUFJQyxnQkFBdUIsR0FBRyxFQUE5QjtBQUNBLE1BQUlDLGlCQUF3QixHQUFHLEVBQS9CO0FBQ0EsTUFBSUMsT0FBSjtBQUNBLE1BQUlDLFdBQUo7QUFDQSxNQUFJQyxnQkFBSjtBQUNBLE1BQUlDLFlBQUo7O0FBb0JBLFdBQVNDLHdCQUFULEdBQW9DO0FBQ25DLFFBQUlDLGtCQUFKLENBRG1DLENBR25DOztBQUNBLGFBQVNDLFlBQVQsQ0FBc0JDLFNBQXRCLEVBQXNDO0FBQ3JDLGFBQU9BLFNBQVMsQ0FBQ0MsUUFBVixHQUNKLFNBQ0FELFNBQVMsQ0FBQ0MsUUFEVixHQUVBLFdBRkEsR0FHQUQsU0FBUyxDQUFDQyxRQUFWLENBQW1CQyxNQUFuQixDQUEwQkMsSUFBSSxDQUFDQyxHQUFMLENBQVNKLFNBQVMsQ0FBQ0MsUUFBVixDQUFtQkksV0FBbkIsQ0FBK0IsR0FBL0IsQ0FBVCxFQUE4Q0wsU0FBUyxDQUFDQyxRQUFWLENBQW1CSSxXQUFuQixDQUErQixHQUEvQixDQUE5QyxJQUFxRixDQUEvRyxDQUhBLEdBSUEsU0FKQSxHQUtBLElBTEEsR0FNQUwsU0FBUyxDQUFDQyxRQU5WLEdBT0Esb0JBUkksR0FTSixFQVRIO0FBVUEsS0Fma0MsQ0FnQm5DOzs7QUFDQSxhQUFTSyxlQUFULENBQXlCTixTQUF6QixFQUF5QztBQUN4QyxVQUFJTyxLQUFLLEdBQUcsRUFBWjs7QUFDQSxVQUFJUCxTQUFTLENBQUNRLFNBQVYsSUFBdUJSLFNBQVMsQ0FBQ0MsUUFBakMsSUFBNkNELFNBQVMsQ0FBQ1EsU0FBVixLQUF3QlYsa0JBQXpFLEVBQTZGO0FBQzVGUyxRQUFBQSxLQUFLLElBQUksU0FBU1AsU0FBUyxDQUFDQyxRQUFuQixHQUE4QixlQUE5QixHQUFnREQsU0FBUyxDQUFDUSxTQUExRCxHQUFzRSxrQkFBL0U7QUFDQVYsUUFBQUEsa0JBQWtCLEdBQUdFLFNBQVMsQ0FBQ1EsU0FBL0I7QUFDQTs7QUFDRCxhQUFPRCxLQUFQO0FBQ0EsS0F4QmtDLENBMEJuQzs7O0FBQ0EsYUFBU0UsUUFBVCxHQUFvQjtBQUNuQixVQUFNQyxHQUFHLEdBQUcsa0JBQVosQ0FEbUIsQ0FDYTs7QUFDaEMsYUFBTyxDQUNOO0FBQUUscUJBQWEsRUFBZjtBQUFtQiw4QkFBZUEsR0FBZjtBQUFuQixPQURNLEVBRU47QUFBRSxxQkFBYSxFQUFmO0FBQW1CLDhCQUFlQSxHQUFmO0FBQW5CLE9BRk0sRUFHTjtBQUFFLHFCQUFhLGFBQWY7QUFBOEIsOEJBQWVBLEdBQWY7QUFBOUIsT0FITSxFQUlOO0FBQUUscUJBQWEsYUFBZjtBQUE4Qiw4QkFBZUEsR0FBZjtBQUE5QixPQUpNLEVBS047QUFBRSxxQkFBYSxhQUFmO0FBQThCLDhCQUFlQSxHQUFmO0FBQTlCLE9BTE0sRUFNTjtBQUFFLHFCQUFhLGFBQWY7QUFBOEIsOEJBQWVBLEdBQWY7QUFBOUIsT0FOTSxFQU9OO0FBQUUscUJBQWEsaUJBQWY7QUFBa0MsOEJBQWVBLEdBQWY7QUFBbEMsT0FQTSxFQVFOO0FBQUUscUJBQWEsaUJBQWY7QUFBa0MsOEJBQWVBLEdBQWY7QUFBbEMsT0FSTSxFQVNOO0FBQUUscUJBQWEsaUJBQWY7QUFBa0MsOEJBQWVBLEdBQWY7QUFBbEMsT0FUTSxFQVVOO0FBQUUscUJBQWEsaUJBQWY7QUFBa0MsOEJBQWVBLEdBQWY7QUFBbEMsT0FWTSxFQVdOO0FBQUUscUJBQWEsaUJBQWY7QUFBa0MsOEJBQWVBLEdBQWY7QUFBbEMsT0FYTSxFQVlOO0FBQUUscUJBQWEsaUJBQWY7QUFBa0MsOEJBQWVBLEdBQWY7QUFBbEMsT0FaTSxFQWFOO0FBQUUscUJBQWEsVUFBZjtBQUEyQiw4QkFBZUEsR0FBZjtBQUEzQixPQWJNLEVBY047QUFBRSxxQkFBYSxVQUFmO0FBQTJCLDhCQUFlQSxHQUFmO0FBQTNCLE9BZE0sQ0FBUDtBQWdCQTs7QUFFRCxRQUFJSCxLQUFLLEdBQUcsaUJBQWlCLHFCQUFqQixHQUF5QyxtREFBckQ7QUFDQUUsSUFBQUEsUUFBUSxHQUFHRSxPQUFYLENBQW1CLFVBQVVYLFNBQVYsRUFBOEQ7QUFDaEZPLE1BQUFBLEtBQUssYUFBTUEsS0FBSyxHQUFHRCxlQUFlLENBQUNOLFNBQUQsQ0FBN0IsU0FBMkNELFlBQVksQ0FBQ0MsU0FBRCxDQUF2RCxRQUFMO0FBQ0EsS0FGRDtBQUdBLFdBQU9PLEtBQVA7QUFDQTs7QUFDRCxXQUFTSyxtQkFBVCxHQUErQjtBQUM5QixXQUFPLFFBQVEsNkNBQVIsR0FBd0QscUJBQS9EO0FBQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTQywyQkFBVCxDQUFxQ0MsU0FBckMsRUFBdUQ7QUFDdEQsUUFBSUMsZ0JBQWdCLEdBQUczQixXQUFXLENBQUM0QixJQUFuQztBQUNBLFFBQU1DLE9BQU8sR0FBR0gsU0FBUyxDQUFDSSxNQUExQjtBQUNBLFFBQU1DLGFBQWtCLEdBQUc7QUFBRUMsTUFBQUEsS0FBSyxFQUFFLENBQVQ7QUFBWUMsTUFBQUEsT0FBTyxFQUFFLENBQXJCO0FBQXdCQyxNQUFBQSxPQUFPLEVBQUUsQ0FBakM7QUFBb0NDLE1BQUFBLFdBQVcsRUFBRTtBQUFqRCxLQUEzQjs7QUFFQSxTQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdQLE9BQXBCLEVBQTZCTyxDQUFDLEVBQTlCLEVBQWtDO0FBQ2pDLFFBQUVMLGFBQWEsQ0FBQ0wsU0FBUyxDQUFDVSxDQUFELENBQVQsQ0FBYUMsT0FBYixFQUFELENBQWY7QUFDQTs7QUFDRCxRQUFJTixhQUFhLENBQUMvQixXQUFXLENBQUNnQyxLQUFiLENBQWIsR0FBbUMsQ0FBdkMsRUFBMEM7QUFDekNMLE1BQUFBLGdCQUFnQixHQUFHM0IsV0FBVyxDQUFDZ0MsS0FBL0I7QUFDQSxLQUZELE1BRU8sSUFBSUQsYUFBYSxDQUFDL0IsV0FBVyxDQUFDaUMsT0FBYixDQUFiLEdBQXFDLENBQXpDLEVBQTRDO0FBQ2xETixNQUFBQSxnQkFBZ0IsR0FBRzNCLFdBQVcsQ0FBQ2lDLE9BQS9CO0FBQ0EsS0FGTSxNQUVBLElBQUlGLGFBQWEsQ0FBQy9CLFdBQVcsQ0FBQ2tDLE9BQWIsQ0FBYixHQUFxQyxDQUF6QyxFQUE0QztBQUNsRFAsTUFBQUEsZ0JBQWdCLEdBQUczQixXQUFXLENBQUNrQyxPQUEvQjtBQUNBLEtBRk0sTUFFQSxJQUFJSCxhQUFhLENBQUMvQixXQUFXLENBQUNtQyxXQUFiLENBQWIsR0FBeUMsQ0FBN0MsRUFBZ0Q7QUFDdERSLE1BQUFBLGdCQUFnQixHQUFHM0IsV0FBVyxDQUFDbUMsV0FBL0I7QUFDQTs7QUFDRCxXQUFPUixnQkFBUDtBQUNBLEcsQ0FDRDtBQUNBOzs7QUFDQSxXQUFTVyx3QkFBVCxDQUFrQ0MsZUFBbEMsRUFBd0RDLGVBQXhELEVBQThFQyxrQkFBOUUsRUFBdUg7QUFDdEgsUUFBTWYsU0FBUyxHQUFHYSxlQUFlLENBQUNHLGVBQWhCLEdBQWtDQyxTQUFsQyxDQUE0QyxHQUE1QyxDQUFsQjtBQUNBLFFBQUlDLGlCQUFpQixHQUFHLEtBQXhCO0FBQ0EsUUFBSUMsWUFBWSxHQUFHLEVBQW5CO0FBQ0FuQixJQUFBQSxTQUFTLENBQUNILE9BQVYsQ0FBa0IsVUFBVXVCLFFBQVYsRUFBeUJWLENBQXpCLEVBQWlDO0FBQ2xELFVBQU1XLGlCQUFpQixHQUFHRCxRQUFRLENBQUNFLG1CQUFULEVBQTFCOztBQUNBLFVBQUlELGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ0UsVUFBbEIsS0FBaUMsR0FBMUQsRUFBK0Q7QUFDOUQsWUFBSUYsaUJBQWlCLENBQUNHLHdCQUFsQixJQUE4Q1Qsa0JBQWxELEVBQXNFO0FBQ3JFSSxVQUFBQSxZQUFZLEdBQ1hBLFlBQVksSUFBSUwsZUFBZSxDQUFDVyxPQUFoQixDQUF3QixxRUFBeEIsQ0FEakI7QUFFQSxTQUhELE1BR087QUFDTk4sVUFBQUEsWUFBWSxHQUFHQSxZQUFZLElBQUlMLGVBQWUsQ0FBQ1csT0FBaEIsQ0FBd0IsNkNBQXhCLENBQS9CO0FBQ0E7O0FBQ0RaLFFBQUFBLGVBQWUsQ0FBQ2EsY0FBaEIsQ0FBK0IxQixTQUFTLENBQUNVLENBQUQsQ0FBeEM7QUFDQVUsUUFBQUEsUUFBUSxDQUFDTyxVQUFULENBQW9CUixZQUFwQjtBQUNBQyxRQUFBQSxRQUFRLENBQUNRLE1BQVQsR0FBa0IsRUFBbEI7QUFDQWYsUUFBQUEsZUFBZSxDQUFDZ0IsV0FBaEIsQ0FBNEJULFFBQTVCO0FBQ0FGLFFBQUFBLGlCQUFpQixHQUFHLElBQXBCO0FBQ0E7QUFDRCxLQWZEO0FBZ0JBLFdBQU9BLGlCQUFQO0FBQ0EsRyxDQUNEOzs7QUFDQSxXQUFTWSxrQkFBVCxHQUE4QjtBQUM3Qm5ELElBQUFBLE9BQU8sQ0FBQ29ELEtBQVI7QUFDQW5ELElBQUFBLFdBQVcsQ0FBQ29ELFVBQVosQ0FBdUIsS0FBdkI7QUFDQXhELElBQUFBLFlBQVksR0FBRyxFQUFmO0FBQ0EsUUFBTXlELG1CQUF3QixHQUFHbkQsWUFBWSxDQUFDb0QsUUFBYixFQUFqQzs7QUFDQSxRQUFJRCxtQkFBSixFQUF5QjtBQUN4QkEsTUFBQUEsbUJBQW1CLENBQUNFLE9BQXBCLENBQTRCLEVBQTVCO0FBQ0E7O0FBQ0RDLElBQUFBLCtCQUErQjtBQUMvQjs7QUFDRCxXQUFTQyxvQkFBVCxDQUE4QmpCLFFBQTlCLEVBQTZDa0IsY0FBN0MsRUFBbUU7QUFDbEUsUUFBTUMsSUFBSSxHQUFHLElBQUlDLElBQUosRUFBYjtBQUNBLFFBQU1uQixpQkFBaUIsR0FBR0QsUUFBUSxDQUFDRSxtQkFBVCxFQUExQjtBQUNBLFFBQU1SLGVBQWUsR0FBSTJCLElBQUQsQ0FBaUJDLHdCQUFqQixDQUEwQyxhQUExQyxDQUF4QjtBQUNBLFFBQUlDLGtCQUFKOztBQUNBLFFBQUl0QixpQkFBaUIsSUFBSUEsaUJBQWlCLENBQUNFLFVBQWxCLEtBQWlDLEdBQXRELElBQTZERixpQkFBaUIsQ0FBQ3VCLFVBQW5GLEVBQStGO0FBQzlGLFVBQU1DLFdBQVcsR0FBR3hCLGlCQUFpQixDQUFDdUIsVUFBdEM7QUFDQSxVQUFJRSxXQUFKOztBQUNBLFVBQUlQLElBQUksQ0FBQ1EsV0FBTCxPQUF1QkYsV0FBVyxDQUFDRSxXQUFaLEVBQTNCLEVBQXNEO0FBQ3JEO0FBQ0FELFFBQUFBLFdBQVcsR0FBR0UsVUFBVSxDQUFDQyxtQkFBWCxDQUErQjtBQUM1Q0MsVUFBQUEsT0FBTyxFQUFFO0FBRG1DLFNBQS9CLENBQWQ7QUFHQVAsUUFBQUEsa0JBQWtCLEdBQUc3QixlQUFlLENBQUNXLE9BQWhCLENBQXdCLG9DQUF4QixFQUE4RCxDQUFDcUIsV0FBVyxDQUFDSyxNQUFaLENBQW1CTixXQUFuQixDQUFELENBQTlELENBQXJCO0FBQ0EsT0FORCxNQU1PLElBQUlOLElBQUksQ0FBQ1EsV0FBTCxNQUFzQkYsV0FBVyxDQUFDRSxXQUFaLEVBQTFCLEVBQXFEO0FBQzNEO0FBQ0EsWUFBSVQsY0FBSixFQUFvQjtBQUNuQjtBQUNBSyxVQUFBQSxrQkFBa0IsYUFBTTdCLGVBQWUsQ0FBQ1csT0FBaEIsQ0FBd0Isb0NBQXhCLENBQU4sY0FBdUVYLGVBQWUsQ0FBQ1csT0FBaEIsQ0FDeEYsbUNBRHdGLENBQXZFLENBQWxCO0FBR0EsU0FMRCxNQUtPLElBQUljLElBQUksQ0FBQ2EsUUFBTCxPQUFvQlAsV0FBVyxDQUFDTyxRQUFaLEVBQXBCLElBQThDYixJQUFJLENBQUNjLE9BQUwsT0FBbUJSLFdBQVcsQ0FBQ1EsT0FBWixFQUFyRSxFQUE0RjtBQUNsR1AsVUFBQUEsV0FBVyxHQUFHRSxVQUFVLENBQUNDLG1CQUFYLENBQStCO0FBQzVDQyxZQUFBQSxPQUFPLEVBQUU7QUFEbUMsV0FBL0IsQ0FBZCxDQURrRyxDQUc5Rjs7QUFDSlAsVUFBQUEsa0JBQWtCLEdBQUc3QixlQUFlLENBQUNXLE9BQWhCLENBQXdCLG9DQUF4QixFQUE4RCxDQUFDcUIsV0FBVyxDQUFDSyxNQUFaLENBQW1CTixXQUFuQixDQUFELENBQTlELENBQXJCO0FBQ0EsU0FMTSxNQUtBO0FBQ047QUFDQUMsVUFBQUEsV0FBVyxHQUFHRSxVQUFVLENBQUNDLG1CQUFYLENBQStCO0FBQzVDQyxZQUFBQSxPQUFPLEVBQUU7QUFEbUMsV0FBL0IsQ0FBZDtBQUdBUCxVQUFBQSxrQkFBa0IsR0FBRzdCLGVBQWUsQ0FBQ1csT0FBaEIsQ0FBd0Isd0NBQXhCLEVBQWtFLENBQUNxQixXQUFXLENBQUNLLE1BQVosQ0FBbUJOLFdBQW5CLENBQUQsQ0FBbEUsQ0FBckI7QUFDQTtBQUNEO0FBQ0Q7O0FBRUQsUUFBSXhCLGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ0UsVUFBbEIsS0FBaUMsR0FBdEQsSUFBNkQsQ0FBQ0YsaUJBQWlCLENBQUN1QixVQUFwRixFQUFnRztBQUMvRkQsTUFBQUEsa0JBQWtCLEdBQUc3QixlQUFlLENBQUNXLE9BQWhCLENBQXdCLG1EQUF4QixDQUFyQjtBQUNBOztBQUNELFdBQU9rQixrQkFBUDtBQUNBOztBQUVELFdBQVNXLDJCQUFULENBQXFDckIsbUJBQXJDLEVBQXFFc0IsbUJBQXJFLEVBQW1HO0FBQ2xHLFFBQUksQ0FBQ0EsbUJBQUwsRUFBMEI7QUFDekIxRSxNQUFBQSxnQkFBZ0IsR0FDZkEsZ0JBQWdCLElBQ2hCLElBQUkyRSxXQUFKLENBQWdCQyxTQUFoQixFQUEyQjtBQUMxQkMsUUFBQUEsT0FBTyxFQUFFO0FBQUVDLFVBQUFBLElBQUksRUFBRTtBQUFSLFNBRGlCO0FBRTFCQyxRQUFBQSxLQUFLLEVBQUUsV0FGbUI7QUFHMUJDLFFBQUFBLFFBQVEsRUFBRSxrQkFIZ0I7QUFJMUJDLFFBQUFBLFdBQVcsRUFBRSxrQkFKYTtBQUsxQkMsUUFBQUEsSUFBSSxFQUFFO0FBQUVKLFVBQUFBLElBQUksRUFBRTtBQUFSLFNBTG9CO0FBTTFCSyxRQUFBQSxXQUFXLEVBQ1YsVUFDQSx3Q0FEQSxHQUVBLG1CQUZBLEdBR0FsRSxtQkFBbUIsRUFIbkIsR0FJQSxLQUpBLEdBS0FmLHdCQUF3QixFQUx4QixHQU1BLGtCQU5BLEdBT0EsU0FkeUI7QUFlMUJrRixRQUFBQSxpQkFBaUIsRUFBRTtBQWZPLE9BQTNCLENBRkQ7QUFtQkEsS0FwQkQsTUFvQk87QUFDTnBGLE1BQUFBLGdCQUFnQixHQUFHLElBQUkyRSxXQUFKLENBQWdCO0FBQ2xDSSxRQUFBQSxLQUFLLEVBQUUsV0FEMkI7QUFFbENHLFFBQUFBLElBQUksRUFBRSxTQUY0QjtBQUdsQ0QsUUFBQUEsV0FBVyxFQUFFO0FBSHFCLE9BQWhCLENBQW5CO0FBS0E7O0FBQ0RoRixJQUFBQSxZQUFZLEdBQ1hBLFlBQVksSUFDWixJQUFJb0YsV0FBSixDQUFnQjtBQUNmQyxNQUFBQSxxQkFBcUIsRUFBRSxLQURSO0FBRWZDLE1BQUFBLFVBQVUsRUFBRSxZQUFZO0FBQ3ZCeEYsUUFBQUEsV0FBVyxDQUFDb0QsVUFBWixDQUF1QixJQUF2QjtBQUNBLE9BSmM7QUFLZnFDLE1BQUFBLEtBQUssRUFBRTtBQUNOVixRQUFBQSxJQUFJLEVBQUUsR0FEQTtBQUVOVyxRQUFBQSxRQUFRLEVBQUV6RjtBQUZKO0FBTFEsS0FBaEIsQ0FGRDtBQVlBRCxJQUFBQSxXQUFXLEdBQ1ZBLFdBQVcsSUFDWCxJQUFJMkYsTUFBSixDQUFXO0FBQ1ZDLE1BQUFBLElBQUksRUFBRUMsUUFBUSxDQUFDQyxVQUFULENBQW9CLFVBQXBCLENBREk7QUFFVkMsTUFBQUEsT0FBTyxFQUFFLEtBRkM7QUFHVkMsTUFBQUEsS0FBSyxFQUFFLFlBQXdCO0FBQzlCOUYsUUFBQUEsWUFBWSxDQUFDK0YsWUFBYjtBQUNBLGFBQUs3QyxVQUFMLENBQWdCLEtBQWhCO0FBQ0E7QUFOUyxLQUFYLENBRkQsQ0F4Q2tHLENBa0RsRzs7QUFDQWxELElBQUFBLFlBQVksQ0FBQ2dHLFFBQWIsQ0FBc0I3QyxtQkFBdEI7QUFDQSxXQUFPO0FBQ05uRCxNQUFBQSxZQUFZLEVBQVpBLFlBRE07QUFFTkYsTUFBQUEsV0FBVyxFQUFYQTtBQUZNLEtBQVA7QUFJQTs7QUFFRCxXQUFTbUcsbUJBQVQsQ0FFQ0MsZUFGRCxFQUdDQyxRQUhELEVBSUNDLGVBSkQsRUFLQ0Msb0JBTEQsRUFNQ0MsY0FORCxFQU9DQyxlQVBELEVBUUN0RSxrQkFSRCxFQVNnQjtBQUNmLFFBQUl1RSxnQkFBZ0IsR0FBRyxLQUFLQyxXQUFMLEVBQXZCO0FBQ0EsUUFBTTFFLGVBQWUsR0FBRzRCLElBQUksQ0FBQytDLGlCQUFMLEVBQXhCO0FBQ0EsUUFBSUMsZ0JBQUo7QUFDQSxRQUFJQyxvQkFBSjtBQUNBLFFBQU1DLFFBQVEsR0FBRyxDQUNoQixJQUFJQyxNQUFKLENBQVc7QUFBRWpDLE1BQUFBLElBQUksRUFBRSxNQUFSO0FBQWdCa0MsTUFBQUEsUUFBUSxFQUFFQyxjQUFjLENBQUNDLEVBQXpDO0FBQTZDQyxNQUFBQSxNQUFNLEVBQUU7QUFBckQsS0FBWCxDQURnQixFQUVoQixJQUFJSixNQUFKLENBQVc7QUFBRWpDLE1BQUFBLElBQUksRUFBRSxZQUFSO0FBQXNCa0MsTUFBQUEsUUFBUSxFQUFFQyxjQUFjLENBQUNDLEVBQS9DO0FBQW1EQyxNQUFBQSxNQUFNLEVBQUU7QUFBM0QsS0FBWCxDQUZnQixDQUFqQjtBQUlBLFFBQUlDLGlCQUFzQyxHQUFHLEtBQTdDO0FBQUEsUUFDQ0MsY0FBbUMsR0FBRyxLQUR2Qzs7QUFHQSxRQUFJZixvQkFBSixFQUEwQjtBQUN6QkcsTUFBQUEsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDYSxNQUFqQixDQUF3QlosV0FBVyxDQUFDLElBQUQsRUFBTyxJQUFQLENBQW5DLENBQW5CLENBRHlCLENBRXpCOztBQUNBSSxNQUFBQSxRQUFRLENBQUNTLElBQVQsQ0FBYyxJQUFJUixNQUFKLENBQVc7QUFBRWpDLFFBQUFBLElBQUksRUFBRSxZQUFSO0FBQXNCa0MsUUFBQUEsUUFBUSxFQUFFQyxjQUFjLENBQUNPLEVBQS9DO0FBQW1ETCxRQUFBQSxNQUFNLEVBQUU7QUFBM0QsT0FBWCxDQUFkOztBQUNBLFVBQU1NLHdCQUF3QixHQUFHLFVBQVVDLFdBQVYsRUFBNEI7QUFDNUQsWUFBSUMsS0FBSyxHQUFHQyxRQUFaO0FBQUEsWUFDQ0MsUUFBUSxHQUFHakUsSUFBSSxDQUFDa0UsSUFBTCxDQUFVSixXQUFXLENBQUMsQ0FBRCxDQUFyQixDQURaO0FBRUEsWUFBTUssaUJBQWlCLEdBQUduRSxJQUFJLENBQUNrRSxJQUFMLENBQVVKLFdBQVcsQ0FBQyxDQUFELENBQXJCLENBQTFCOztBQUNBLGVBQU9HLFFBQVAsRUFBaUI7QUFDaEIsY0FBTUcsaUJBQWlCLEdBQ3RCSCxRQUFRLFlBQVlJLE1BQXBCLEdBQ0lGLGlCQUFpQixDQUFDRyxTQUFsQixFQUFELENBQXVDQyxZQUF2QyxDQUFvRCxJQUFwRCxFQUEwREMsT0FBMUQsQ0FBa0VMLGlCQUFsRSxDQURILEdBRUdILFFBSEo7O0FBSUEsY0FBSUMsUUFBUSxZQUFZSSxNQUF4QixFQUFnQztBQUMvQixnQkFBSU4sS0FBSyxHQUFHSyxpQkFBWixFQUErQjtBQUM5QkwsY0FBQUEsS0FBSyxHQUFHSyxpQkFBUixDQUQ4QixDQUU5Qjs7QUFDQUQsY0FBQUEsaUJBQWlCLENBQUNNLEtBQWxCO0FBQ0EsYUFMOEIsQ0FNL0I7OztBQUNBLG1CQUFPLEtBQVA7QUFDQTs7QUFDRFIsVUFBQUEsUUFBUSxHQUFHQSxRQUFRLENBQUNLLFNBQVQsRUFBWDtBQUNBOztBQUNELGVBQU8sSUFBUDtBQUNBLE9BckJEOztBQXNCQXBCLE1BQUFBLFFBQVEsQ0FBQ1MsSUFBVCxDQUNDLElBQUlSLE1BQUosQ0FBVztBQUNWakMsUUFBQUEsSUFBSSxFQUFFLFlBREk7QUFFVndELFFBQUFBLElBQUksRUFBRWIsd0JBRkk7QUFHVmMsUUFBQUEsYUFBYSxFQUFFO0FBSEwsT0FBWCxDQUREO0FBT0EsS0FqQ0QsTUFpQ087QUFDTjtBQUNBekIsTUFBQUEsUUFBUSxDQUFDUyxJQUFULENBQWMsSUFBSVIsTUFBSixDQUFXO0FBQUVqQyxRQUFBQSxJQUFJLEVBQUUsUUFBUjtBQUFrQmtDLFFBQUFBLFFBQVEsRUFBRUMsY0FBYyxDQUFDTyxFQUEzQztBQUErQ0wsUUFBQUEsTUFBTSxFQUFFO0FBQXZELE9BQVgsQ0FBZDtBQUNBOztBQUNELFFBQUloQixlQUFlLElBQUlBLGVBQWUsQ0FBQzVFLE1BQXZDLEVBQStDO0FBQzlDNEUsTUFBQUEsZUFBZSxDQUFDbkYsT0FBaEIsQ0FBd0IsVUFBVXVCLFFBQVYsRUFBeUI7QUFDaEQsWUFBTWlHLFdBQVcsR0FBR2pHLFFBQVEsQ0FBQ2tHLElBQVQsR0FBZ0JsRyxRQUFRLENBQUNrRyxJQUF6QixHQUFnQyxFQUFwRDtBQUNBekcsUUFBQUEsZUFBZSxDQUFDZ0IsV0FBaEIsQ0FDQyxJQUFJMEYsT0FBSixDQUFZO0FBQ1hDLFVBQUFBLE9BQU8sRUFBRXBHLFFBQVEsQ0FBQ3FHLElBRFA7QUFFWDFELFVBQUFBLElBQUksRUFBRTNDLFFBQVEsQ0FBQzJDLElBRko7QUFHWG5DLFVBQUFBLE1BQU0sRUFBRSxFQUhHO0FBSVg4RixVQUFBQSxVQUFVLEVBQUUsSUFKRDtBQUtYSixVQUFBQSxJQUFJLEVBQUVEO0FBTEssU0FBWixDQURELEVBRmdELENBV2hEO0FBQ0EsT0FaRDtBQWFBOztBQUNELFFBQU1wRixtQkFBbUIsR0FBSW5ELFlBQVksSUFBS0EsWUFBWSxDQUFDb0QsUUFBYixFQUFsQixJQUE0RCxJQUFJeUYsU0FBSixFQUF4Rjs7QUFDQSxRQUFJckMsZ0JBQWdCLENBQUNsRixNQUFqQixLQUE0QixDQUE1QixLQUFrQ2tGLGdCQUFnQixDQUFDLENBQUQsQ0FBaEIsQ0FBb0JzQyxPQUFwQixPQUFrQyxLQUFsQyxJQUEyQ3ZDLGVBQTdFLENBQUosRUFBbUc7QUFDbEcsVUFBSUMsZ0JBQWdCLENBQUMsQ0FBRCxDQUFoQixDQUFvQnNDLE9BQXBCLE9BQWtDLEtBQXRDLEVBQTZDO0FBQzVDMUIsUUFBQUEsY0FBYyxHQUFHLENBQUNkLGNBQWxCO0FBQ0EsT0FGRCxNQUVPO0FBQ05jLFFBQUFBLGNBQWMsR0FBRyxJQUFqQjtBQUNBO0FBQ0QsS0FORCxNQU1PO0FBQ04sVUFBTTJCLFlBQVksR0FBR2hILGVBQWUsQ0FBQ0csZUFBaEIsR0FBa0M4RyxRQUFsQyxDQUEyQyxHQUEzQyxFQUFnRHJFLFNBQWhELEVBQTJEQSxTQUEzRCxFQUFzRWtDLFFBQXRFLENBQXJCO0FBQUEsVUFDQ29DLGdCQUFnQixHQUFHRixZQUFZLENBQUNHLGtCQUFiLEVBRHBCOztBQUVBLFVBQUlELGdCQUFnQixJQUFJQSxnQkFBZ0IsQ0FBQzNILE1BQWpCLEdBQTBCLENBQWxELEVBQXFEO0FBQUE7O0FBQ3BEO0FBQ0EsWUFBSTZFLFFBQVEsSUFBSUEsUUFBSixhQUFJQSxRQUFKLHNDQUFJQSxRQUFRLENBQUVoRSxTQUFWLEVBQUosZ0RBQUksb0JBQXVCZ0gsY0FBbkMsSUFBcUQsQ0FBQzdDLGNBQTFELEVBQTBFO0FBQ3pFYSxVQUFBQSxpQkFBaUIsR0FBRyxJQUFwQjtBQUNBLFNBRkQsTUFFTztBQUNOQSxVQUFBQSxpQkFBaUIsR0FBRyxDQUFDYixjQUFyQjtBQUNBLFNBTm1ELENBTWxEO0FBQ0Y7QUFDQTtBQUNBOzs7QUFDQSxZQUFNcEYsU0FBZ0IsR0FBRyxFQUF6QjtBQUNBK0gsUUFBQUEsZ0JBQWdCLENBQUNsSSxPQUFqQixDQUF5QixVQUFVcUksY0FBVixFQUErQjtBQUN2RCxjQUFNOUcsUUFBUSxHQUFHOEcsY0FBYyxDQUFDakgsU0FBZixFQUFqQjtBQUNBakIsVUFBQUEsU0FBUyxDQUFDb0csSUFBVixDQUFlaEYsUUFBZjtBQUNBM0MsVUFBQUEsZ0JBQWdCLEdBQUd1QixTQUFuQjtBQUNBLFNBSkQsRUFYb0QsQ0FnQnBEO0FBQ0E7QUFDQTs7QUFDQSxZQUFJbUksZ0JBQXVCLEdBQUcsRUFBOUI7O0FBQ0EsWUFBSUMsS0FBSyxDQUFDQyxPQUFOLENBQWNwRyxtQkFBbUIsQ0FBQ3FHLE9BQXBCLEVBQWQsQ0FBSixFQUFrRDtBQUNqREgsVUFBQUEsZ0JBQWdCLEdBQUdsRyxtQkFBbUIsQ0FBQ3FHLE9BQXBCLEVBQW5CO0FBQ0E7O0FBQ0QsWUFBTUMsVUFBZSxHQUFHLEVBQXhCO0FBQ0EsWUFBSUMsZUFBc0IsR0FBRyxFQUE3QjtBQUNBQSxRQUFBQSxlQUFlLEdBQUcvSixnQkFBZ0IsQ0FBQzBILE1BQWpCLENBQXdCZ0MsZ0JBQXhCLEVBQTBDTSxNQUExQyxDQUFpRCxVQUFVQyxHQUFWLEVBQWU7QUFDakY7QUFDQSxpQkFBTyxDQUFDSCxVQUFVLENBQUNHLEdBQUcsQ0FBQ0MsRUFBTCxDQUFYLEtBQXdCSixVQUFVLENBQUNHLEdBQUcsQ0FBQ0MsRUFBTCxDQUFWLEdBQXFCLElBQTdDLENBQVA7QUFDQSxTQUhpQixDQUFsQjtBQUlBMUcsUUFBQUEsbUJBQW1CLENBQUNFLE9BQXBCLENBQTRCcUcsZUFBNUI7QUFDQTtBQUNEOztBQUNELFFBQUlsRCxnQkFBZ0IsQ0FBQ2xGLE1BQWpCLEtBQTRCLENBQTVCLElBQWlDLENBQUM0RSxlQUFsQyxJQUFxRCxDQUFDRSxlQUExRCxFQUEyRTtBQUMxRTtBQUNBLGFBQU8wRCxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsSUFBaEIsQ0FBUDtBQUNBLEtBSEQsTUFHTyxJQUFJdkQsZ0JBQWdCLENBQUNsRixNQUFqQixLQUE0QixDQUE1QixJQUFpQ2tGLGdCQUFnQixDQUFDLENBQUQsQ0FBaEIsQ0FBb0IzRSxPQUFwQixPQUFrQ3JDLFdBQVcsQ0FBQ2tDLE9BQS9FLElBQTBGLENBQUN3RSxlQUEvRixFQUFnSDtBQUN0SCxhQUFPLElBQUk0RCxPQUFKLENBQWtCLFVBQUNDLE9BQUQsRUFBYTtBQUNyQ0MsUUFBQUEsWUFBWSxDQUFDQyxJQUFiLENBQWtCekQsZ0JBQWdCLENBQUMsQ0FBRCxDQUFoQixDQUFvQmtDLE9BQXRDOztBQUNBLFlBQUl2RixtQkFBSixFQUF5QjtBQUN4QkEsVUFBQUEsbUJBQW1CLENBQUNFLE9BQXBCLENBQTRCLEVBQTVCO0FBQ0E7O0FBQ0R0QixRQUFBQSxlQUFlLENBQUNhLGNBQWhCLENBQStCNEQsZ0JBQS9CO0FBQ0F1RCxRQUFBQSxPQUFPO0FBQ1AsT0FQTSxDQUFQO0FBUUEsS0FUTSxNQVNBLElBQUk1QyxpQkFBSixFQUF1QjtBQUM3QnZILE1BQUFBLGlCQUFpQixHQUFHQSxpQkFBaUIsSUFBSSxFQUF6QztBQUNBLGFBQU8sSUFBSWtLLE9BQUosQ0FBWSxVQUFVQyxPQUFWLEVBQXlDRyxNQUF6QyxFQUF5RTtBQUMzRnRLLFFBQUFBLGlCQUFpQixDQUFDMEgsSUFBbEIsQ0FBdUJ5QyxPQUF2QjtBQUNDcEcsUUFBQUEsSUFBRCxDQUNFQyx3QkFERixDQUMyQixhQUQzQixFQUMwQyxJQUQxQyxFQUVFdUcsSUFGRixDQUVPLFVBQVVuSSxlQUFWLEVBQWdDO0FBQ3JDLGNBQU15QyxtQkFBbUIsR0FBRyxLQUE1QjtBQUNBLGNBQU0yRixjQUFjLEdBQUd0SSx3QkFBd0IsQ0FBQ0MsZUFBRCxFQUFrQkMsZUFBbEIsRUFBbUNDLGtCQUFuQyxDQUEvQztBQUNBLGNBQU1vSSxjQUFjLEdBQUc3RiwyQkFBMkIsQ0FBQ3JCLG1CQUFELEVBQXNCc0IsbUJBQXRCLENBQWxEO0FBQ0E1RSxVQUFBQSxPQUFPLEdBQ05BLE9BQU8sSUFDUCxJQUFJbUksTUFBSixDQUFXO0FBQ1ZzQyxZQUFBQSxTQUFTLEVBQUUsSUFERDtBQUVWQyxZQUFBQSxTQUFTLEVBQUUsSUFBSTlFLE1BQUosQ0FBVztBQUNyQkssY0FBQUEsS0FBSyxFQUFFLFlBQVk7QUFDbEI5QyxnQkFBQUEsa0JBQWtCLEdBREEsQ0FFbEI7O0FBQ0Esb0JBQUlxRCxvQkFBSixFQUEwQjtBQUN6Qm1FLGtCQUFBQSw2QkFBNkI7QUFDN0I7QUFDRCxlQVBvQjtBQVFyQjdCLGNBQUFBLElBQUksRUFBRTNHLGVBQWUsQ0FBQ1csT0FBaEIsQ0FBd0Isc0JBQXhCO0FBUmUsYUFBWCxDQUZEO0FBWVY4SCxZQUFBQSxZQUFZLEVBQUUsSUFBSUMsR0FBSixDQUFRO0FBQ3JCQyxjQUFBQSxhQUFhLEVBQUUsQ0FDZCxJQUFJQyxJQUFKLENBQVM7QUFDUmpDLGdCQUFBQSxJQUFJLEVBQUUzRyxlQUFlLENBQUNXLE9BQWhCLENBQXdCLG9EQUF4QjtBQURFLGVBQVQsQ0FEYyxDQURNO0FBTXJCa0ksY0FBQUEsV0FBVyxFQUFFLENBQUMvSyxXQUFEO0FBTlEsYUFBUixDQVpKO0FBb0JWZ0wsWUFBQUEsWUFBWSxFQUFFLFFBcEJKO0FBcUJWQyxZQUFBQSxhQUFhLEVBQUUsUUFyQkw7QUFzQlZDLFlBQUFBLGlCQUFpQixFQUFFLEtBdEJUO0FBdUJWQyxZQUFBQSxVQUFVLEVBQUUsWUFBWTtBQUN2QixtQkFBSyxJQUFJckosQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2hDLGlCQUFpQixDQUFDMEIsTUFBdEMsRUFBOENNLENBQUMsRUFBL0MsRUFBbUQ7QUFDbERoQyxnQkFBQUEsaUJBQWlCLENBQUNnQyxDQUFELENBQWpCLENBQXFCc0osSUFBckI7QUFDQTs7QUFDRHRMLGNBQUFBLGlCQUFpQixHQUFHLEVBQXBCO0FBQ0E7QUE1QlMsV0FBWCxDQUZEO0FBZ0NBQyxVQUFBQSxPQUFPLENBQUNzTCxVQUFSLENBQW1CZCxjQUFjLENBQUNySyxZQUFsQzs7QUFFQSxjQUFJb0ssY0FBSixFQUFvQjtBQUNuQmdCLFlBQUFBLEdBQUcsQ0FBQ0MsRUFBSixDQUFPQyxPQUFQLENBQWUsQ0FBQyxrQkFBRCxDQUFmLEVBQXFDLFVBQVVDLFVBQVYsRUFBMkI7QUFDL0QxTCxjQUFBQSxPQUFPLENBQUMyTCxjQUFSLENBQ0MsSUFBSS9GLE1BQUosQ0FBVztBQUNWSyxnQkFBQUEsS0FBSyxFQUFFLFlBQVk7QUFDbEI5QyxrQkFBQUEsa0JBQWtCOztBQUNsQixzQkFBSW1ELFFBQVEsQ0FBQ3NGLGlCQUFULEVBQUosRUFBa0M7QUFDakN0RixvQkFBQUEsUUFBUSxDQUFDdUYsVUFBVCxHQUFzQkMsWUFBdEI7QUFDQTs7QUFDRHhGLGtCQUFBQSxRQUFRLENBQUN5RixPQUFUO0FBQ0EsaUJBUFM7QUFRVmpELGdCQUFBQSxJQUFJLEVBQUUzRyxlQUFlLENBQUNXLE9BQWhCLENBQXdCLHdCQUF4QixDQVJJO0FBU1ZzQyxnQkFBQUEsSUFBSSxFQUFFc0csVUFBVSxDQUFDTTtBQVRQLGVBQVgsQ0FERDtBQWFBLGFBZEQ7QUFlQSxXQWhCRCxNQWdCTztBQUNOaE0sWUFBQUEsT0FBTyxDQUFDaU0sa0JBQVI7QUFDQTs7QUFDRG5GLFVBQUFBLGdCQUFnQixHQUFHMUYsMkJBQTJCLENBQUNqQixZQUFZLENBQUMrTCxRQUFiLEVBQUQsQ0FBOUM7QUFDQW5GLFVBQUFBLG9CQUFvQixHQUFHb0YsaUNBQWlDLENBQUNyRixnQkFBRCxDQUF4RDtBQUNBOUcsVUFBQUEsT0FBTyxDQUFDb00sUUFBUixDQUFpQnRGLGdCQUFqQjtBQUNDOUcsVUFBQUEsT0FBTyxDQUFDcU0sZUFBUixFQUFELENBQW1DQyxnQkFBbkMsR0FBc0QsQ0FBdEQsRUFBeURDLE9BQXpELENBQWlFeEYsb0JBQWpFO0FBQ0E1RyxVQUFBQSxZQUFZLENBQUMrRixZQUFiO0FBQ0FsRyxVQUFBQSxPQUFPLENBQUN3TSxJQUFSO0FBQ0F0QyxVQUFBQSxPQUFPLENBQUNsSyxPQUFELENBQVA7QUFDQSxTQWxFRixFQW1FRXlNLEtBbkVGLENBbUVRcEMsTUFuRVI7QUFvRUEsT0F0RU0sQ0FBUDtBQXVFQSxLQXpFTSxNQXlFQSxJQUFJOUMsY0FBSixFQUFvQjtBQUMxQixhQUFPLElBQUkwQyxPQUFKLENBQVksVUFBVUMsT0FBVixFQUFtQjtBQUNyQyxZQUFNekgsUUFBUSxHQUFHa0UsZ0JBQWdCLENBQUMsQ0FBRCxDQUFqQzs7QUFDQSxZQUFJbEUsUUFBUSxDQUFDaUssZ0JBQVQsSUFBNkI3TSxZQUFZLENBQUN5SSxPQUFiLENBQXFCN0YsUUFBUSxDQUFDaUssZ0JBQVQsQ0FBMEJDLGVBQTFCLENBQTBDOUQsT0FBL0QsTUFBNEUsQ0FBQyxDQUE5RyxFQUFpSDtBQUNoSGhKLFVBQUFBLFlBQVksQ0FBQzRILElBQWIsQ0FBa0JoRixRQUFRLENBQUNpSyxnQkFBVCxDQUEwQkMsZUFBMUIsQ0FBMEM5RCxPQUE1RDtBQUNBLGNBQUkrRCxtQkFBbUIsR0FBRyxjQUExQjtBQUNBLGNBQU1DLGlCQUFpQixHQUFHbkosb0JBQW9CLENBQUNqQixRQUFELEVBQVcsSUFBWCxDQUE5Qzs7QUFDQSxjQUFJb0ssaUJBQUosRUFBdUI7QUFDdEJELFlBQUFBLG1CQUFtQixpQkFBVUMsaUJBQVYsY0FBbkI7QUFDQTs7QUFDRCxjQUFJcEssUUFBUSxDQUFDd0csT0FBVCxPQUF1QixLQUF2QixJQUFnQ3hHLFFBQVEsQ0FBQ3FLLGlCQUFULE9BQWlDaEksU0FBckUsRUFBZ0Y7QUFDL0U4SCxZQUFBQSxtQkFBbUIsYUFBTUEsbUJBQW1CLEdBQUduSyxRQUFRLENBQUNxSyxpQkFBVCxFQUE1QixlQUE2RHJLLFFBQVEsQ0FBQ3NLLFVBQVQsRUFBN0QsbUJBQW5CO0FBQ0EsV0FGRCxNQUVPO0FBQ05ILFlBQUFBLG1CQUFtQixhQUFNQSxtQkFBbUIsR0FBR25LLFFBQVEsQ0FBQ3NLLFVBQVQsRUFBNUIsbUJBQW5CO0FBQ0E7O0FBQ0QsY0FBTUMsYUFBa0IsR0FBRyxJQUFJQyxhQUFKLENBQWtCO0FBQzVDQyxZQUFBQSxRQUFRLEVBQUVOO0FBRGtDLFdBQWxCLENBQTNCO0FBR0FPLFVBQUFBLFVBQVUsQ0FBQ0MsS0FBWCxDQUFpQkosYUFBakIsRUFBZ0M7QUFDL0JLLFlBQUFBLE9BQU8sRUFBRSxZQUFZO0FBQ3BCeE4sY0FBQUEsWUFBWSxHQUFHLEVBQWY7O0FBQ0Esa0JBQUkyRyxvQkFBSixFQUEwQjtBQUN6Qm1FLGdCQUFBQSw2QkFBNkI7QUFDN0I7O0FBQ0RsSCxjQUFBQSwrQkFBK0I7QUFDL0J5RyxjQUFBQSxPQUFPLENBQUMsSUFBRCxDQUFQO0FBQ0E7QUFSOEIsV0FBaEM7QUFVQTtBQUNELE9BNUJNLENBQVA7QUE2QkEsS0E5Qk0sTUE4QkE7QUFDTixhQUFPRCxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsSUFBaEIsQ0FBUDtBQUNBO0FBQ0Q7O0FBQ0QsV0FBU2lDLGlDQUFULENBQTJDckYsZ0JBQTNDLEVBQWtFO0FBQ2pFLFFBQU0zRSxlQUFlLEdBQUkyQixJQUFELENBQWlCQyx3QkFBakIsQ0FBMEMsYUFBMUMsQ0FBeEI7O0FBQ0EsWUFBUStDLGdCQUFSO0FBQ0MsV0FBSyxPQUFMO0FBQ0MsZUFBTzNFLGVBQWUsQ0FBQ1csT0FBaEIsQ0FBd0IsZ0RBQXhCLENBQVA7O0FBQ0QsV0FBSyxhQUFMO0FBQ0MsZUFBT1gsZUFBZSxDQUFDVyxPQUFoQixDQUF3Qix5REFBeEIsQ0FBUDs7QUFDRCxXQUFLLFNBQUw7QUFDQyxlQUFPWCxlQUFlLENBQUNXLE9BQWhCLENBQXdCLDREQUF4QixDQUFQOztBQUNELFdBQUssU0FBTDtBQUNDLGVBQU9YLGVBQWUsQ0FBQ1csT0FBaEIsQ0FBd0IsNERBQXhCLENBQVA7O0FBQ0Q7QUFDQyxlQUFPWCxlQUFlLENBQUNXLE9BQWhCLENBQXdCLG9EQUF4QixDQUFQO0FBVkY7QUFZQTs7QUFDRCxXQUFTVywrQkFBVCxHQUEyQztBQUMxQzZKLElBQUFBLHdCQUF3QixDQUFDLEtBQUQsQ0FBeEI7QUFDQTs7QUFDRCxXQUFTM0MsNkJBQVQsQ0FBdUM0QyxnQkFBdkMsRUFBa0U7QUFDakVELElBQUFBLHdCQUF3QixDQUFDLElBQUQsRUFBT0MsZ0JBQVAsQ0FBeEI7QUFDQTs7QUFFRCxXQUFTQywyQkFBVCxDQUFxQ0MsYUFBckMsRUFBeURGLGdCQUF6RCxFQUFvRjtBQUNuRixRQUFJQSxnQkFBZ0IsS0FBS3pJLFNBQXpCLEVBQW9DO0FBQ25DLGFBQU8ySSxhQUFhLENBQUNuTCxTQUFkLENBQXdCLEdBQXhCLENBQVA7QUFDQTs7QUFDRCxRQUFNb0wsV0FBVyxHQUFHRCxhQUFhLENBQUN0RSxRQUFkLENBQXVCLEdBQXZCLENBQXBCO0FBQ0F1RSxJQUFBQSxXQUFXLENBQUM1RCxNQUFaLENBQ0MsSUFBSTdDLE1BQUosQ0FBVztBQUNWakMsTUFBQUEsSUFBSSxFQUFFLFFBREk7QUFFVmtDLE1BQUFBLFFBQVEsRUFBRUMsY0FBYyxDQUFDd0csVUFGZjtBQUdWdEcsTUFBQUEsTUFBTSxFQUFFa0c7QUFIRSxLQUFYLENBREQ7QUFRQSxXQUFPRyxXQUFXLENBQUNyRSxrQkFBWixHQUFpQ3VFLEdBQWpDLENBQXFDLFVBQVV0SCxRQUFWLEVBQXlCO0FBQ3BFLGFBQU9BLFFBQVEsQ0FBQ2hFLFNBQVQsRUFBUDtBQUNBLEtBRk0sQ0FBUDtBQUdBOztBQUNELFdBQVNzRSxXQUFULEdBQW1IO0FBQUEsUUFBOUZpSCxjQUE4Rix1RUFBcEUsS0FBb0U7QUFBQSxRQUE3REMsZUFBNkQsdUVBQWxDLEtBQWtDO0FBQUEsUUFBM0JQLGdCQUEyQjtBQUNsSCxRQUFJeEwsQ0FBSjtBQUNBLFFBQU1HLGVBQWUsR0FBSTRCLElBQUQsQ0FBd0IrQyxpQkFBeEIsRUFBeEI7QUFBQSxRQUNDNEcsYUFBYSxHQUFHdkwsZUFBZSxDQUFDRyxlQUFoQixFQURqQjtBQUFBLFFBRUNGLGVBQWUsR0FBSTJCLElBQUQsQ0FBaUJDLHdCQUFqQixDQUEwQyxhQUExQyxDQUZuQjtBQUFBLFFBR0NnSyxtQkFBbUIsR0FBRyxFQUh2QjtBQUlBLFFBQUkxTSxTQUFnQixHQUFHLEVBQXZCOztBQUNBLFFBQUl3TSxjQUFjLElBQUlDLGVBQWxCLElBQXFDUCxnQkFBekMsRUFBMkQ7QUFDMURsTSxNQUFBQSxTQUFTLEdBQUdtTSwyQkFBMkIsQ0FBQ0MsYUFBRCxFQUFnQkYsZ0JBQWhCLENBQXZDO0FBQ0EsS0FGRCxNQUVPO0FBQ05sTSxNQUFBQSxTQUFTLEdBQUdvTSxhQUFhLENBQUNuTCxTQUFkLENBQXdCLEdBQXhCLENBQVo7QUFDQTs7QUFDRCxTQUFLUCxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdWLFNBQVMsQ0FBQ0ksTUFBMUIsRUFBa0NNLENBQUMsRUFBbkMsRUFBdUM7QUFDdEMsVUFDQyxDQUFDLENBQUMrTCxlQUFELElBQW9Cek0sU0FBUyxDQUFDVSxDQUFELENBQVQsQ0FBYWdILFVBQWxDLE1BQ0U4RSxjQUFjLElBQUl4TSxTQUFTLENBQUNVLENBQUQsQ0FBVCxDQUFha0IsTUFBYixLQUF3QixFQUEzQyxJQUFtRCxDQUFDNEssY0FBRCxLQUFvQixDQUFDeE0sU0FBUyxDQUFDVSxDQUFELENBQVQsQ0FBYWtCLE1BQWQsSUFBd0I1QixTQUFTLENBQUNVLENBQUQsQ0FBVCxDQUFha0IsTUFBYixLQUF3QixFQUFwRSxDQURwRCxLQUVBNUIsU0FBUyxDQUFDVSxDQUFELENBQVQsQ0FBYTRHLElBSGQsRUFJRTtBQUNEb0YsUUFBQUEsbUJBQW1CLENBQUN0RyxJQUFwQixDQUF5QnBHLFNBQVMsQ0FBQ1UsQ0FBRCxDQUFsQztBQUNBO0FBQ0Q7O0FBRUQsU0FBS0EsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHZ00sbUJBQW1CLENBQUN0TSxNQUFwQyxFQUE0Q00sQ0FBQyxFQUE3QyxFQUFpRDtBQUNoRCxVQUNDZ00sbUJBQW1CLENBQUNoTSxDQUFELENBQW5CLENBQXVCNEcsSUFBdkIsS0FBZ0MsS0FBaEMsSUFDQW9GLG1CQUFtQixDQUFDaE0sQ0FBRCxDQUFuQixDQUF1QjhHLE9BQXZCLEtBQW1DLEVBRG5DLElBRUFrRixtQkFBbUIsQ0FBQ2hNLENBQUQsQ0FBbkIsQ0FBdUI4RyxPQUF2QixDQUErQlAsT0FBL0IsQ0FBdUNuRyxlQUFlLENBQUNXLE9BQWhCLENBQXdCLDZDQUF4QixDQUF2QyxNQUFtSCxDQUFDLENBSHJILEVBSUU7QUFDRGlMLFFBQUFBLG1CQUFtQixDQUFDaE0sQ0FBRCxDQUFuQixDQUF1QjhHLE9BQXZCLGVBQXNDMUcsZUFBZSxDQUFDVyxPQUFoQixDQUF3Qiw2Q0FBeEIsQ0FBdEMsU0FDQ2lMLG1CQUFtQixDQUFDaE0sQ0FBRCxDQUFuQixDQUF1QjhHLE9BRHhCO0FBR0E7QUFDRDs7QUFDRCxXQUFPa0YsbUJBQVA7QUFDQTs7QUFDRCxXQUFTVCx3QkFBVCxDQUFrQ08sY0FBbEMsRUFBdUROLGdCQUF2RCxFQUFrRjtBQUNqRixRQUFNUyxvQkFBb0IsR0FBR3BILFdBQVcsQ0FBQ2lILGNBQUQsRUFBaUIsSUFBakIsRUFBdUJOLGdCQUF2QixDQUF4Qzs7QUFFQSxRQUFJUyxvQkFBb0IsQ0FBQ3ZNLE1BQXJCLEdBQThCLENBQWxDLEVBQXFDO0FBQ3BDcUMsTUFBQUEsSUFBSSxDQUFDK0MsaUJBQUwsR0FBeUI5RCxjQUF6QixDQUF3Q2lMLG9CQUF4QztBQUNBO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLE1BQU1DLGVBQW9DLEdBQUc7QUFDNUNySCxJQUFBQSxXQUFXLEVBQUVBLFdBRCtCO0FBRTVDUixJQUFBQSxtQkFBbUIsRUFBRUEsbUJBRnVCO0FBRzVDM0MsSUFBQUEsK0JBQStCLEVBQUVBLCtCQUhXO0FBSTVDa0gsSUFBQUEsNkJBQTZCLEVBQUVBLDZCQUphO0FBSzVDdUQsSUFBQUEsc0JBQXNCLEVBQUVqTSx3QkFMb0I7QUFNNUN5QixJQUFBQSxvQkFBb0IsRUFBRUEsb0JBTnNCO0FBTzVDaUIsSUFBQUEsMkJBQTJCLEVBQUVBO0FBUGUsR0FBN0M7U0FVZXNKLGUiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgTWVzc2FnZVZpZXcgZnJvbSBcInNhcC9tL01lc3NhZ2VWaWV3XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IENvcmVMaWIgZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbmNvbnN0IE1lc3NhZ2VUeXBlID0gQ29yZUxpYi5NZXNzYWdlVHlwZTtcbmxldCBhTWVzc2FnZUxpc3Q6IGFueVtdID0gW107XG5sZXQgYU1lc3NhZ2VEYXRhTGlzdDogYW55W10gPSBbXTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogYW55W10gPSBbXTtcbmxldCBvRGlhbG9nOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBvTWVzc2FnZVRlbXBsYXRlOiBNZXNzYWdlSXRlbTtcbmxldCBvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogKGJCb3VuZE1lc3NhZ2VzPzogYW55LCBiVHJhbnNpdGlvbk9ubHk/OiBhbnkpID0+IGFueVtdO1xuXHRzaG93VW5ib3VuZE1lc3NhZ2VzOiAoXG5cdFx0YUN1c3RvbU1lc3NhZ2VzPzogYW55W10sXG5cdFx0b0NvbnRleHQ/OiBhbnksXG5cdFx0Ykhhc0V0YWdNZXNzYWdlPzogYm9vbGVhbixcblx0XHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdFx0c2hvd0Vycm9ySW5BUEQ/OiBib29sZWFuLFxuXHRcdGJTaG93TWVzc2FnZUJveD86IGJvb2xlYW4sXG5cdFx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhblxuXHQpID0+IFByb21pc2U8YW55Pjtcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogKCkgPT4gdm9pZDtcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogKG9NZXNzYWdlTWFuYWdlcjogYW55LCBvUmVzb3VyY2VCdW5kbGU6IGFueSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBib29sZWFuO1xuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiAob01lc3NhZ2U6IGFueSwgYk1lc3NhZ2VEaWFsb2c/OiBhbnkpID0+IGFueTtcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiAob01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuKSA9PiBhbnk7XG59O1xuXG5mdW5jdGlvbiBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSB7XG5cdGxldCBzUHJldmlvdXNHcm91cE5hbWU6IHN0cmluZztcblxuXHQvLyBJbnNlcnQgdGVjaG5pY2FsIGRldGFpbCBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHIoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IGFueSkge1xuXHRcdGxldCBzSFRNTCA9IFwiXCI7XG5cdFx0aWYgKG9Qcm9wZXJ0eS5ncm91cE5hbWUgJiYgb1Byb3BlcnR5LnByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5ncm91cE5hbWUgIT09IHNQcmV2aW91c0dyb3VwTmFtZSkge1xuXHRcdFx0c0hUTUwgKz0gXCIoICR7XCIgKyBvUHJvcGVydHkucHJvcGVydHkgKyAnfSA/IFwiPGJyPjxoMz4nICsgb1Byb3BlcnR5Lmdyb3VwTmFtZSArICc8L2gzPlwiIDogXCJcIiApICsgJztcblx0XHRcdHNQcmV2aW91c0dyb3VwTmFtZSA9IG9Qcm9wZXJ0eS5ncm91cE5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBzSFRNTDtcblx0fVxuXG5cdC8vIExpc3Qgb2YgdGVjaG5pY2FsIGRldGFpbHMgdG8gYmUgc2hvd25cblx0ZnVuY3Rpb24gZ2V0UGF0aHMoKSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9zdGF0dXNgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9zdGF0dXNUZXh0YCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkFwcGxpY2F0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vQ29tcG9uZW50SWRgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlSWRgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlUmVwb3NpdG9yeWAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VWZXJzaW9uYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9BbmFseXNpc2AgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vTm90ZWAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vRGV0YWlsZWROb3RlYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkV4Y2VwdGlvbkNhdGVnb3J5YCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRpbWVTdGFtcGAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UcmFuc2FjdGlvbklkYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIk1lc3NhZ2VzXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9jb2RlYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIk1lc3NhZ2VzXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9tZXNzYWdlYCB9XG5cdFx0XTtcblx0fVxuXG5cdGxldCBzSFRNTCA9IFwiT2JqZWN0LmtleXMoXCIgKyBcIiR7dGVjaG5pY2FsRGV0YWlsc31cIiArICcpLmxlbmd0aCA+IDAgPyBcIjxoMj5UZWNobmljYWwgRGV0YWlsczwvaDI+XCIgOiBcIlwiICc7XG5cdGdldFBhdGhzKCkuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pIHtcblx0XHRzSFRNTCA9IGAke3NIVE1MICsgaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eSl9JHtpbnNlcnREZXRhaWwob1Byb3BlcnR5KX0gKyBgO1xuXHR9KTtcblx0cmV0dXJuIHNIVE1MO1xufVxuZnVuY3Rpb24gZm5Gb3JtYXREZXNjcmlwdGlvbigpIHtcblx0cmV0dXJuIFwiKCR7XCIgKyAnZGVzY3JpcHRpb259ID8gKFwiPGgyPkRlc2NyaXB0aW9uPC9oMj5cIiArICR7JyArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgdHlwZShFcnJvci9XYXJuaW5nL1N1Y2Nlc3MvSW5mb3JtYXRpb24pIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlcy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nLmZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eVxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nXG4gKiBAcGFyYW0gW2FNZXNzYWdlc10gTWVzc2FnZXMgbGlzdFxuICogQHJldHVybnMgSGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlc1xuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkoYU1lc3NhZ2VzOiBhbnlbXSkge1xuXHRsZXQgc01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IGlMZW5ndGggPSBhTWVzc2FnZXMubGVuZ3RoO1xuXHRjb25zdCBvTWVzc2FnZUNvdW50OiBhbnkgPSB7IEVycm9yOiAwLCBXYXJuaW5nOiAwLCBTdWNjZXNzOiAwLCBJbmZvcm1hdGlvbjogMCB9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaUxlbmd0aDsgaSsrKSB7XG5cdFx0KytvTWVzc2FnZUNvdW50W2FNZXNzYWdlc1tpXS5nZXRUeXBlKCldO1xuXHR9XG5cdGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkVycm9yXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5XYXJuaW5nXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLlN1Y2Nlc3NdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25dID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0fVxuXHRyZXR1cm4gc01lc3NhZ2VQcmlvcml0eTtcbn1cbi8vIGZ1bmN0aW9uIHdoaWNoIG1vZGlmeSBlLVRhZyBtZXNzYWdlcyBvbmx5LlxuLy8gcmV0dXJucyA6IHRydWUsIGlmIGFueSBlLVRhZyBtZXNzYWdlIGlzIG1vZGlmaWVkLCBvdGhlcndpc2UgZmFsc2UuXG5mdW5jdGlvbiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob01lc3NhZ2VNYW5hZ2VyOiBhbnksIG9SZXNvdXJjZUJ1bmRsZTogYW55LCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcblx0Y29uc3QgYU1lc3NhZ2VzID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmdldE9iamVjdChcIi9cIik7XG5cdGxldCBiTWVzc2FnZXNNb2RpZmllZCA9IGZhbHNlO1xuXHRsZXQgc0V0YWdNZXNzYWdlID0gXCJcIjtcblx0YU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnksIGk6IGFueSkge1xuXHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpO1xuXHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA0MTIpIHtcblx0XHRcdGlmIChvVGVjaG5pY2FsRGV0YWlscy5pc0NvbmN1cnJlbnRNb2RpZmljYXRpb24gJiYgY29uY3VycmVudEVkaXRGbGFnKSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9XG5cdFx0XHRcdFx0c0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU19DT05DVVJSRU5UX01PRElGSUNBVElPTlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNFdGFnTWVzc2FnZSA9IHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNcIik7XG5cdFx0XHR9XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzW2ldKTtcblx0XHRcdG9NZXNzYWdlLnNldE1lc3NhZ2Uoc0V0YWdNZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlLnRhcmdldCA9IFwiXCI7XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIuYWRkTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0Yk1lc3NhZ2VzTW9kaWZpZWQgPSB0cnVlO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBiTWVzc2FnZXNNb2RpZmllZDtcbn1cbi8vIERpYWxvZyBjbG9zZSBIYW5kbGluZ1xuZnVuY3Rpb24gZGlhbG9nQ2xvc2VIYW5kbGVyKCkge1xuXHRvRGlhbG9nLmNsb3NlKCk7XG5cdG9CYWNrQnV0dG9uLnNldFZpc2libGUoZmFsc2UpO1xuXHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbDogYW55ID0gb01lc3NhZ2VWaWV3LmdldE1vZGVsKCk7XG5cdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKHt9KTtcblx0fVxuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG59XG5mdW5jdGlvbiBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZTogYW55LCBiTWVzc2FnZURpYWxvZz86IGFueSkge1xuXHRjb25zdCBkTm93ID0gbmV3IERhdGUoKTtcblx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCk7XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdGxldCBzUmV0cnlBZnRlck1lc3NhZ2U7XG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdGNvbnN0IGRSZXRyeUFmdGVyID0gb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcjtcblx0XHRsZXQgb0RhdGVGb3JtYXQ7XG5cdFx0aWYgKGROb3cuZ2V0RnVsbFllYXIoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9kaWZmZXJlbnQgeWVhcnNcblx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkLCB5eXl5ICdhdCcgaGg6bW0gYVwiXG5cdFx0XHR9KTtcblx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRGdWxsWWVhcigpID09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vc2FtZSB5ZWFyXG5cdFx0XHRpZiAoYk1lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0Ly9sZXNzIHRoYW4gMiBtaW5cblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX1RJVExFXCIpfSAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19ERVNDXCJcblx0XHRcdFx0KX1gO1xuXHRcdFx0fSBlbHNlIGlmIChkTm93LmdldE1vbnRoKCkgIT09IGRSZXRyeUFmdGVyLmdldE1vbnRoKCkgfHwgZE5vdy5nZXREYXRlKCkgIT09IGRSZXRyeUFmdGVyLmdldERhdGUoKSkge1xuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkICdhdCcgaGg6bW0gYVwiXG5cdFx0XHRcdH0pOyAvL2RpZmZlcmVudCBtb250aHMgb3IgZGlmZmVyZW50IGRheXMgb2Ygc2FtZSBtb250aFxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vc2FtZSBkYXlcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiaGg6bW0gYVwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfREFZXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiAhb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9OT19SRVRSWV9BRlRFUlwiKTtcblx0fVxuXHRyZXR1cm4gc1JldHJ5QWZ0ZXJNZXNzYWdlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cob01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuKSB7XG5cdGlmICghYlN0cmljdEhhbmRsaW5nRmxvdykge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPVxuXHRcdFx0b01lc3NhZ2VUZW1wbGF0ZSB8fFxuXHRcdFx0bmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0XHRkZXNjcmlwdGlvbjpcblx0XHRcdFx0XHRcIns9ICR7XCIgK1xuXHRcdFx0XHRcdFwiZGVzY3JpcHRpb259IHx8ICR7dGVjaG5pY2FsRGV0YWlsc30gPyBcIiArXG5cdFx0XHRcdFx0J1wiPGh0bWw+PGJvZHk+XCIgKyAnICtcblx0XHRcdFx0XHRmbkZvcm1hdERlc2NyaXB0aW9uKCkgK1xuXHRcdFx0XHRcdFwiICsgXCIgK1xuXHRcdFx0XHRcdGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpICtcblx0XHRcdFx0XHQnXCI8L2JvZHk+PC9odG1sPlwiJyArXG5cdFx0XHRcdFx0JyA6IFwiXCIgfScsXG5cdFx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0dHlwZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCJcblx0XHR9KTtcblx0fVxuXHRvTWVzc2FnZVZpZXcgPVxuXHRcdG9NZXNzYWdlVmlldyB8fFxuXHRcdG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0XHRzaG93RGV0YWlsc1BhZ2VIZWFkZXI6IGZhbHNlLFxuXHRcdFx0aXRlbVNlbGVjdDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0XHR0ZW1wbGF0ZTogb01lc3NhZ2VUZW1wbGF0ZVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pIHtcblx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0b01lc3NhZ2VWaWV3LnNldE1vZGVsKG9NZXNzYWdlRGlhbG9nTW9kZWwpO1xuXHRyZXR1cm4ge1xuXHRcdG9NZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5mdW5jdGlvbiBzaG93VW5ib3VuZE1lc3NhZ2VzKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRhQ3VzdG9tTWVzc2FnZXM/OiBhbnlbXSxcblx0b0NvbnRleHQ/OiBhbnksXG5cdGJIYXNFdGFnTWVzc2FnZT86IGJvb2xlYW4sXG5cdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0c2hvd0Vycm9ySW5BUEQ/OiBib29sZWFuLFxuXHRiU2hvd01lc3NhZ2VCb3g/OiBib29sZWFuLFxuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuXG4pOiBQcm9taXNlPGFueT4ge1xuXHRsZXQgYVVuYm91bmRNZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRjb25zdCBhRmlsdGVycyA9IFtcblx0XHRuZXcgRmlsdGVyKHsgcGF0aDogXCJjb2RlXCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBudWxsIH0pLFxuXHRcdG5ldyBGaWx0ZXIoeyBwYXRoOiBcInBlcnNpc3RlbnRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLk5FLCB2YWx1ZTE6IGZhbHNlIH0pXG5cdF07XG5cdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuXHRcdHNob3dNZXNzYWdlQm94OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cblx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0YVVuYm91bmRNZXNzYWdlcyA9IGFVbmJvdW5kTWVzc2FnZXMuY29uY2F0KGdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gc2hvdyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIG5vdCBib3VuZCBzdGF0ZSBtZXNzYWdlcyBoZW5jZSBhZGQgYSBmaWx0ZXIgZm9yIHRoZSBzYW1lXG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IGFueSkge1xuXHRcdFx0bGV0IGluZGV4ID0gSW5maW5pdHksXG5cdFx0XHRcdG9Db250cm9sID0gQ29yZS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdFx0Y29uc3QgZXJyb3JGaWVsZENvbnRyb2wgPSBDb3JlLmJ5SWQoYUNvbnRyb2xJZHNbMF0pIGFzIENvbnRyb2w7XG5cdFx0XHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRcdFx0Y29uc3QgZmllbGRSYW5raW5EaWFsb2cgPVxuXHRcdFx0XHRcdG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nXG5cdFx0XHRcdFx0XHQ/IChlcnJvckZpZWxkQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBhbnkpLmZpbmRFbGVtZW50cyh0cnVlKS5pbmRleE9mKGVycm9yRmllbGRDb250cm9sKVxuXHRcdFx0XHRcdFx0OiBJbmZpbml0eTtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gZmllbGRSYW5raW5EaWFsb2c7XG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG9ubHkgdW5ib3VuZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNob3duIHNvIGFkZCBmaWx0ZXIgYWNjb3JkaW5nbHlcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInRhcmdldFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogXCJcIiB9KSk7XG5cdH1cblx0aWYgKGFDdXN0b21NZXNzYWdlcyAmJiBhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0YUN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VDb2RlID0gb01lc3NhZ2UuY29kZSA/IG9NZXNzYWdlLmNvZGUgOiBcIlwiO1xuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogb01lc3NhZ2UudGV4dCxcblx0XHRcdFx0XHR0eXBlOiBvTWVzc2FnZS50eXBlLFxuXHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdGNvZGU6IG1lc3NhZ2VDb2RlXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Ly9UaGUgdGFyZ2V0IGFuZCBwZXJzaXN0ZW50IHByb3BlcnRpZXMgb2YgdGhlIG1lc3NhZ2UgYXJlIGhhcmRjb2RlZCBhcyBcIlwiIGFuZCB0cnVlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggb25seSB1bmJvdW5kIG1lc3NhZ2VzLlxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSAob01lc3NhZ2VWaWV3ICYmIChvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwpKSB8fCBuZXcgSlNPTk1vZGVsKCk7XG5cdGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiAoYVVuYm91bmRNZXNzYWdlc1swXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIgfHwgYlNob3dNZXNzYWdlQm94KSkge1xuXHRcdGlmIChhVW5ib3VuZE1lc3NhZ2VzWzBdLmdldENvZGUoKSAhPT0gXCI1MDNcIikge1xuXHRcdFx0c2hvd01lc3NhZ2VCb3ggPSAhc2hvd0Vycm9ySW5BUEQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYUZpbHRlcnMpLFxuXHRcdFx0YUN1cnJlbnRDb250ZXh0cyA9IG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRpZiAoYUN1cnJlbnRDb250ZXh0cyAmJiBhQ3VycmVudENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIERvbid0IHNob3cgZGlhbG9nIGluY2FzZSB0aGVyZSBhcmUgbm8gZXJyb3JzIHRvIHNob3dcblx0XHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dD8uZ2V0T2JqZWN0KCk/LklzQWN0aXZlRW50aXR5ICYmICFzaG93RXJyb3JJbkFQRCkge1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9ICFzaG93RXJyb3JJbkFQRDtcblx0XHRcdH0gLy8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0YUN1cnJlbnRDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50Q29udGV4dDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9NZXNzYWdlID0gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGFNZXNzYWdlcy5wdXNoKG9NZXNzYWdlKTtcblx0XHRcdFx0YU1lc3NhZ2VEYXRhTGlzdCA9IGFNZXNzYWdlcztcblx0XHRcdH0pO1xuXHRcdFx0Ly8gaWYoYU1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiBhTWVzc2FnZUxpc3QubGVuZ3RoKSB7XG5cdFx0XHQvLyBcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTWVzc2FnZXMpO1xuXHRcdFx0Ly8gfVxuXHRcdFx0bGV0IGV4aXN0aW5nTWVzc2FnZXM6IGFueVtdID0gW107XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKSkpIHtcblx0XHRcdFx0ZXhpc3RpbmdNZXNzYWdlcyA9IG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1VuaXF1ZU9iajogYW55ID0ge307XG5cdFx0XHRsZXQgYU1vZGVsRGF0YUFycmF5OiBhbnlbXSA9IFtdO1xuXHRcdFx0YU1vZGVsRGF0YUFycmF5ID0gYU1lc3NhZ2VEYXRhTGlzdC5jb25jYXQoZXhpc3RpbmdNZXNzYWdlcykuZmlsdGVyKGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIGVudHJpZXMgaGF2aW5nIGR1cGxpY2F0ZSBtZXNzYWdlIGlkc1xuXHRcdFx0XHRyZXR1cm4gIW9VbmlxdWVPYmpbb2JqLmlkXSAmJiAob1VuaXF1ZU9ialtvYmouaWRdID0gdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTW9kZWxEYXRhQXJyYXkpO1xuXHRcdH1cblx0fVxuXHRpZiAoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDAgJiYgIWFDdXN0b21NZXNzYWdlcyAmJiAhYkhhc0V0YWdNZXNzYWdlKSB7XG5cdFx0Ly8gRG9uJ3Qgc2hvdyB0aGUgcG9wdXAgaWYgdGhlcmUgYXJlIG5vIHRyYW5zaWVudCBtZXNzYWdlc1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH0gZWxzZSBpZiAoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgYVVuYm91bmRNZXNzYWdlc1swXS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MgJiYgIWFDdXN0b21NZXNzYWdlcykge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3coYVVuYm91bmRNZXNzYWdlc1swXS5tZXNzYWdlKTtcblx0XHRcdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdFx0XHR9XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMoYVVuYm91bmRNZXNzYWdlcyk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoc2hvd01lc3NhZ2VEaWFsb2cpIHtcblx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IGFSZXNvbHZlRnVuY3Rpb25zIHx8IFtdO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0YVJlc29sdmVGdW5jdGlvbnMucHVzaChyZXNvbHZlKTtcblx0XHRcdChDb3JlIGFzIENvcmVFeClcblx0XHRcdFx0LmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIsIHRydWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IGJTdHJpY3RIYW5kbGluZ0Zsb3cgPSBmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlSGFzRVRhZyA9IGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvTWVzc2FnZU1hbmFnZXIsIG9SZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnKTtcblx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRcdFx0XHRvRGlhbG9nID1cblx0XHRcdFx0XHRcdG9EaWFsb2cgfHxcblx0XHRcdFx0XHRcdG5ldyBEaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0NMT1NFXCIpXG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21IZWFkZXI6IG5ldyBCYXIoe1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRNaWRkbGU6IFtcblx0XHRcdFx0XHRcdFx0XHRcdG5ldyBUZXh0KHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb0JhY2tCdXR0b25dXG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMzcuNWVtXCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiMjEuNWVtXCIsXG5cdFx0XHRcdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVJlc29sdmVGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zW2ldLmNhbGwoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBbXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5hZGRDb250ZW50KG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyk7XG5cblx0XHRcdFx0XHRpZiAobWVzc2FnZUhhc0VUYWcpIHtcblx0XHRcdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9tL0J1dHRvblR5cGVcIl0sIGZ1bmN0aW9uIChCdXR0b25UeXBlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0b0RpYWxvZy5zZXRCZWdpbkJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9SRUZSRVNIXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogQnV0dG9uVHlwZS5FbXBoYXNpemVkXG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3lCZWdpbkJ1dHRvbigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzSGlnaGVzdFByaW9yaXR5ID0gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KG9NZXNzYWdlVmlldy5nZXRJdGVtcygpKTtcblx0XHRcdFx0XHRzSGlnaGVzdFByaW9yaXR5VGV4dCA9IGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdFx0XHRvRGlhbG9nLnNldFN0YXRlKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0XHRcdChvRGlhbG9nLmdldEN1c3RvbUhlYWRlcigpIGFzIGFueSkuZ2V0Q29udGVudE1pZGRsZSgpWzBdLnNldFRleHQoc0hpZ2hlc3RQcmlvcml0eVRleHQpO1xuXHRcdFx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdFx0XHRyZXNvbHZlKG9EaWFsb2cpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZUJveCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVW5ib3VuZE1lc3NhZ2VzWzBdO1xuXHRcdFx0aWYgKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMgJiYgYU1lc3NhZ2VMaXN0LmluZGV4T2Yob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UubWVzc2FnZSkgPT09IC0xKSB7XG5cdFx0XHRcdGFNZXNzYWdlTGlzdC5wdXNoKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpO1xuXHRcdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IFwiPGh0bWw+PGJvZHk+XCI7XG5cdFx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2UsIHRydWUpO1xuXHRcdFx0XHRpZiAocmV0cnlBZnRlck1lc3NhZ2UpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYDxoNj4ke3JldHJ5QWZ0ZXJNZXNzYWdlfTwvaDY+PGJyPmA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9NZXNzYWdlLmdldENvZGUoKSAhPT0gXCI1MDNcIiAmJiBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZyArIG9NZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCl9OiAke29NZXNzYWdlLmdldE1lc3NhZ2UoKX08L2h0bWw+PC9ib2R5PmA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlZFRleHQ6IGFueSA9IG5ldyBGb3JtYXR0ZWRUZXh0KHtcblx0XHRcdFx0XHRodG1sVGV4dDogZm9ybWF0dGVkVGV4dFN0cmluZ1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihmb3JtYXR0ZWRUZXh0LCB7XG5cdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0YU1lc3NhZ2VMaXN0ID0gW107XG5cdFx0XHRcdFx0XHRpZiAoYlNob3dCb3VuZFRyYW5zaXRpb24pIHtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coc0hpZ2hlc3RQcmlvcml0eTogYW55KSB7XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiKTtcblx0XHRjYXNlIFwiSW5mb3JtYXRpb25cIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0lORk9cIik7XG5cdFx0Y2FzZSBcIlN1Y2Nlc3NcIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIik7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpO1xuXHR9XG59XG5mdW5jdGlvbiByZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCkge1xuXHRyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoZmFsc2UpO1xufVxuZnVuY3Rpb24gcmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykge1xuXHRyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXModHJ1ZSwgc1BhdGhUb0JlUmVtb3ZlZCk7XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzRnJvbU1lc3NhZ2VNb2RlbChvTWVzc2FnZU1vZGVsOiBhbnksIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpIHtcblx0aWYgKHNQYXRoVG9CZVJlbW92ZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblx0bGlzdEJpbmRpbmcuZmlsdGVyKFxuXHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0cGF0aDogXCJ0YXJnZXRcIixcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5TdGFydHNXaXRoLFxuXHRcdFx0dmFsdWUxOiBzUGF0aFRvQmVSZW1vdmVkXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzOiBib29sZWFuID0gZmFsc2UsIGJUcmFuc2l0aW9uT25seTogYm9vbGVhbiA9IGZhbHNlLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGxldCBpO1xuXHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSAoQ29yZSBhcyBDb3JlRXggYXMgYW55KS5nZXRNZXNzYWdlTWFuYWdlcigpLFxuXHRcdG9NZXNzYWdlTW9kZWwgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCksXG5cdFx0b1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSxcblx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzID0gW107XG5cdGxldCBhTWVzc2FnZXM6IGFueVtdID0gW107XG5cdGlmIChiQm91bmRNZXNzYWdlcyAmJiBiVHJhbnNpdGlvbk9ubHkgJiYgc1BhdGhUb0JlUmVtb3ZlZCkge1xuXHRcdGFNZXNzYWdlcyA9IGdldE1lc3NhZ2VzRnJvbU1lc3NhZ2VNb2RlbChvTWVzc2FnZU1vZGVsLCBzUGF0aFRvQmVSZW1vdmVkKTtcblx0fSBlbHNlIHtcblx0XHRhTWVzc2FnZXMgPSBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Zm9yIChpID0gMDsgaSA8IGFNZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdCghYlRyYW5zaXRpb25Pbmx5IHx8IGFNZXNzYWdlc1tpXS5wZXJzaXN0ZW50KSAmJlxuXHRcdFx0KChiQm91bmRNZXNzYWdlcyAmJiBhTWVzc2FnZXNbaV0udGFyZ2V0ICE9PSBcIlwiKSB8fCAoIWJCb3VuZE1lc3NhZ2VzICYmICghYU1lc3NhZ2VzW2ldLnRhcmdldCB8fCBhTWVzc2FnZXNbaV0udGFyZ2V0ID09PSBcIlwiKSkpICYmXG5cdFx0XHRhTWVzc2FnZXNbaV0uY29kZVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmNvZGUgPT09IFwiNTAzXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSAhPT0gXCJcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlLmluZGV4T2Yob1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpKSA9PT0gLTFcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSA9IGBcXG4ke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKX0ke1xuXHRcdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2Vcblx0XHRcdH1gO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVRyYW5zaXRpb25NZXNzYWdlcztcbn1cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYW55LCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGNvbnN0IGFNZXNzYWdlc1RvQmVEZWxldGVkID0gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXMsIHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXG5cdGlmIChhTWVzc2FnZXNUb0JlRGVsZXRlZC5sZW5ndGggPiAwKSB7XG5cdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1RvQmVEZWxldGVkKTtcblx0fVxufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmdcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBtZXNzYWdlSGFuZGxpbmc6IG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiBnZXRNZXNzYWdlcyxcblx0c2hvd1VuYm91bmRNZXNzYWdlczogc2hvd1VuYm91bmRNZXNzYWdlcyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2dcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VIYW5kbGluZztcbiJdfQ==
|
|
638
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0ciIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJOb25lIiwiaUxlbmd0aCIsImxlbmd0aCIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJpIiwiZ2V0VHlwZSIsImZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIm9NZXNzYWdlTWFuYWdlciIsIm9SZXNvdXJjZUJ1bmRsZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldE9iamVjdCIsImJNZXNzYWdlc01vZGlmaWVkIiwic0V0YWdNZXNzYWdlIiwib01lc3NhZ2UiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uIiwiZ2V0VGV4dCIsInJlbW92ZU1lc3NhZ2VzIiwic2V0TWVzc2FnZSIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsImdldE1vZGVsIiwic2V0RGF0YSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwic1JldHJ5QWZ0ZXJNZXNzYWdlIiwicmV0cnlBZnRlciIsImRSZXRyeUFmdGVyIiwib0RhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsIkRhdGVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicGF0dGVybiIsImZvcm1hdCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJvTWVzc2FnZVRlbXBsYXRlIiwiTWVzc2FnZUl0ZW0iLCJ1bmRlZmluZWQiLCJjb3VudGVyIiwicGF0aCIsInRpdGxlIiwic3VidGl0bGUiLCJsb25ndGV4dFVybCIsInR5cGUiLCJkZXNjcmlwdGlvbiIsIm1hcmt1cERlc2NyaXB0aW9uIiwiTWVzc2FnZVZpZXciLCJzaG93RGV0YWlsc1BhZ2VIZWFkZXIiLCJpdGVtU2VsZWN0IiwiaXRlbXMiLCJ0ZW1wbGF0ZSIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsInNob3dVbmJvdW5kTWVzc2FnZXMiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvQ29udGV4dCIsImJIYXNFdGFnTWVzc2FnZSIsImJTaG93Qm91bmRUcmFuc2l0aW9uIiwic2hvd0Vycm9ySW5BUEQiLCJiU2hvd01lc3NhZ2VCb3giLCJiT25seUZvclRlc3QiLCJhVW5ib3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImNvbmNhdCIsInB1c2giLCJFUSIsImZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyIsImFDb250cm9sSWRzIiwiaW5kZXgiLCJJbmZpbml0eSIsIm9Db250cm9sIiwiYnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJnZXRDb2RlIiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJhQ3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiSXNBY3RpdmVFbnRpdHkiLCJjdXJyZW50Q29udGV4dCIsImV4aXN0aW5nTWVzc2FnZXMiLCJBcnJheSIsImlzQXJyYXkiLCJnZXREYXRhIiwib1VuaXF1ZU9iaiIsImFNb2RlbERhdGFBcnJheSIsImZpbHRlciIsIm9iaiIsImlkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwicmVqZWN0IiwidGhlbiIsIm1lc3NhZ2VIYXNFVGFnIiwib01lc3NhZ2VPYmplY3QiLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJhZnRlckNsb3NlIiwiY2FsbCIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwiQnV0dG9uVHlwZSIsInNldEJlZ2luQnV0dG9uIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwiY2F0Y2giLCJ0ZWNobmljYWxEZXRhaWxzIiwib3JpZ2luYWxNZXNzYWdlIiwiZm9ybWF0dGVkVGV4dFN0cmluZyIsInJldHJ5QWZ0ZXJNZXNzYWdlIiwiZ2V0QWRkaXRpb25hbFRleHQiLCJnZXRNZXNzYWdlIiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsIm9uQ2xvc2UiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJzUGF0aFRvQmVSZW1vdmVkIiwiZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsIiwib01lc3NhZ2VNb2RlbCIsImxpc3RCaW5kaW5nIiwiU3RhcnRzV2l0aCIsIm1hcCIsImJCb3VuZE1lc3NhZ2VzIiwiYlRyYW5zaXRpb25Pbmx5IiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsImJhY2tlbmRNZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwibWVzc2FnZUhhbmRsaW5nIiwibW9kaWZ5RVRhZ01lc3NhZ2VzT25seSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsibWVzc2FnZUhhbmRsaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgTWVzc2FnZVZpZXcgZnJvbSBcInNhcC9tL01lc3NhZ2VWaWV3XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IENvcmVMaWIgZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbmNvbnN0IE1lc3NhZ2VUeXBlID0gQ29yZUxpYi5NZXNzYWdlVHlwZTtcbmxldCBhTWVzc2FnZUxpc3Q6IGFueVtdID0gW107XG5sZXQgYU1lc3NhZ2VEYXRhTGlzdDogYW55W10gPSBbXTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogYW55W10gPSBbXTtcbmxldCBvRGlhbG9nOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogKGJCb3VuZE1lc3NhZ2VzPzogYW55LCBiVHJhbnNpdGlvbk9ubHk/OiBhbnkpID0+IGFueVtdO1xuXHRzaG93VW5ib3VuZE1lc3NhZ2VzOiAoXG5cdFx0YUN1c3RvbU1lc3NhZ2VzPzogYW55W10sXG5cdFx0b0NvbnRleHQ/OiBhbnksXG5cdFx0Ykhhc0V0YWdNZXNzYWdlPzogYm9vbGVhbixcblx0XHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdFx0c2hvd0Vycm9ySW5BUEQ/OiBib29sZWFuLFxuXHRcdGJTaG93TWVzc2FnZUJveD86IGJvb2xlYW4sXG5cdFx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0XHRiT25seUZvclRlc3Q/OiBib29sZWFuXG5cdCkgPT4gUHJvbWlzZTxhbnk+O1xuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiAob01lc3NhZ2VNYW5hZ2VyOiBhbnksIG9SZXNvdXJjZUJ1bmRsZTogYW55LCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gdm9pZDtcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IChvTWVzc2FnZTogYW55LCBiTWVzc2FnZURpYWxvZz86IGFueSkgPT4gYW55O1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4pID0+IGFueTtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpIHtcblx0bGV0IHNQcmV2aW91c0dyb3VwTmFtZTogc3RyaW5nO1xuXG5cdC8vIEluc2VydCB0ZWNobmljYWwgZGV0YWlsIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnREZXRhaWwob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5LnByb3BlcnR5XG5cdFx0XHQ/IFwiKCAke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ID8gKFwiPHA+JyArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5LnN1YnN0cihNYXRoLm1heChvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpLCBvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIuXCIpKSArIDEpICtcblx0XHRcdFx0XHQnIDogXCIgKyAnICtcblx0XHRcdFx0XHRcIiR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gKyBcIjwvcD5cIikgOiBcIlwiICknXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblx0Ly8gSW5zZXJ0IGdyb3VwbmFtZSBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpIHtcblx0XHRjb25zdCBzVEQgPSBcInRlY2huaWNhbERldGFpbHNcIjsgLy8gbmFtZSBvZiBwcm9wZXJ0eSBpbiBtZXNzYWdlIG1vZGVsIGRhdGEgZm9yIHRlY2huaWNhbCBkZXRhaWxzXG5cdFx0cmV0dXJuIFtcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJcIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L3N0YXR1c2AgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJcIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L3N0YXR1c1RleHRgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9Db21wb25lbnRJZGAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VJZGAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VSZXBvc2l0b3J5YCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkFwcGxpY2F0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVZlcnNpb25gIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0FuYWx5c2lzYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9Ob3RlYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9EZXRhaWxlZE5vdGVgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXhjZXB0aW9uQ2F0ZWdvcnlgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVGltZVN0YW1wYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRyYW5zYWN0aW9uSWRgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiTWVzc2FnZXNcIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL2NvZGVgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiTWVzc2FnZXNcIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL21lc3NhZ2VgIH1cblx0XHRdO1xuXHR9XG5cblx0bGV0IHNIVE1MID0gXCJPYmplY3Qua2V5cyhcIiArIFwiJHt0ZWNobmljYWxEZXRhaWxzfVwiICsgJykubGVuZ3RoID4gMCA/IFwiPGgyPlRlY2huaWNhbCBEZXRhaWxzPC9oMj5cIiA6IFwiXCIgJztcblx0Z2V0UGF0aHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gYCR7c0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KX0ke2luc2VydERldGFpbChvUHJvcGVydHkpfSArIGA7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCkge1xuXHRyZXR1cm4gXCIoJHtcIiArICdkZXNjcmlwdGlvbn0gPyAoXCI8aDI+RGVzY3JpcHRpb248L2gyPlwiICsgJHsnICsgJ2Rlc2NyaXB0aW9ufSkgOiBcIlwiKSc7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSB0eXBlKEVycm9yL1dhcm5pbmcvU3VjY2Vzcy9JbmZvcm1hdGlvbikgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmcuZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmdcbiAqIEBwYXJhbSBbYU1lc3NhZ2VzXSBNZXNzYWdlcyBsaXN0XG4gKiBAcmV0dXJucyBIaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShhTWVzc2FnZXM6IGFueVtdKSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQ6IGFueSA9IHsgRXJyb3I6IDAsIFdhcm5pbmc6IDAsIFN1Y2Nlc3M6IDAsIEluZm9ybWF0aW9uOiAwIH07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpTGVuZ3RoOyBpKyspIHtcblx0XHQrK29NZXNzYWdlQ291bnRbYU1lc3NhZ2VzW2ldLmdldFR5cGUoKV07XG5cdH1cblx0aWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uO1xuXHR9XG5cdHJldHVybiBzTWVzc2FnZVByaW9yaXR5O1xufVxuLy8gZnVuY3Rpb24gd2hpY2ggbW9kaWZ5IGUtVGFnIG1lc3NhZ2VzIG9ubHkuXG4vLyByZXR1cm5zIDogdHJ1ZSwgaWYgYW55IGUtVGFnIG1lc3NhZ2UgaXMgbW9kaWZpZWQsIG90aGVyd2lzZSBmYWxzZS5cbmZ1bmN0aW9uIGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvTWVzc2FnZU1hbmFnZXI6IGFueSwgb1Jlc291cmNlQnVuZGxlOiBhbnksIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuXHRjb25zdCBhTWVzc2FnZXMgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0T2JqZWN0KFwiL1wiKTtcblx0bGV0IGJNZXNzYWdlc01vZGlmaWVkID0gZmFsc2U7XG5cdGxldCBzRXRhZ01lc3NhZ2UgPSBcIlwiO1xuXHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSwgaTogYW55KSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCk7XG5cdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDQxMikge1xuXHRcdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzLmlzQ29uY3VycmVudE1vZGlmaWNhdGlvbiAmJiBjb25jdXJyZW50RWRpdEZsYWcpIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID1cblx0XHRcdFx0XHRzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTX0NPTkNVUlJFTlRfTU9ESUZJQ0FUSU9OXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID0gc0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU1wiKTtcblx0XHRcdH1cblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNbaV0pO1xuXHRcdFx0b01lc3NhZ2Uuc2V0TWVzc2FnZShzRXRhZ01lc3NhZ2UpO1xuXHRcdFx0b01lc3NhZ2UudGFyZ2V0ID0gXCJcIjtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKSB7XG5cdG9EaWFsb2cuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsOiBhbnkgPSBvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKTtcblx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHR9XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcbn1cbmZ1bmN0aW9uIGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlOiBhbnksIGJNZXNzYWdlRGlhbG9nPzogYW55KSB7XG5cdGNvbnN0IGROb3cgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKTtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0bGV0IHNSZXRyeUFmdGVyTWVzc2FnZTtcblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0Y29uc3QgZFJldHJ5QWZ0ZXIgPSBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyO1xuXHRcdGxldCBvRGF0ZUZvcm1hdDtcblx0XHRpZiAoZE5vdy5nZXRGdWxsWWVhcigpICE9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL2RpZmZlcmVudCB5ZWFyc1xuXHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQsIHl5eXkgJ2F0JyBoaDptbSBhXCJcblx0XHRcdH0pO1xuXHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0fSBlbHNlIGlmIChkTm93LmdldEZ1bGxZZWFyKCkgPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9zYW1lIHllYXJcblx0XHRcdGlmIChiTWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHQvL2xlc3MgdGhhbiAyIG1pblxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfVElUTEVcIil9ICR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0RFU0NcIlxuXHRcdFx0XHQpfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0TW9udGgoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0TW9udGgoKSB8fCBkTm93LmdldERhdGUoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RGF0ZSgpKSB7XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQgJ2F0JyBoaDptbSBhXCJcblx0XHRcdFx0fSk7IC8vZGlmZmVyZW50IG1vbnRocyBvciBkaWZmZXJlbnQgZGF5cyBvZiBzYW1lIG1vbnRoXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9zYW1lIGRheVxuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJoaDptbSBhXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9EQVlcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmICFvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX05PX1JFVFJZX0FGVEVSXCIpO1xuXHR9XG5cdHJldHVybiBzUmV0cnlBZnRlck1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4pIHtcblx0bGV0IG9NZXNzYWdlVGVtcGxhdGU6IE1lc3NhZ2VJdGVtO1xuXHRpZiAoIWJTdHJpY3RIYW5kbGluZ0Zsb3cpIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRkZXNjcmlwdGlvbjpcblx0XHRcdFx0XCJ7PSAke1wiICtcblx0XHRcdFx0XCJkZXNjcmlwdGlvbn0gfHwgJHt0ZWNobmljYWxEZXRhaWxzfSA/IFwiICtcblx0XHRcdFx0J1wiPGh0bWw+PGJvZHk+XCIgKyAnICtcblx0XHRcdFx0Zm5Gb3JtYXREZXNjcmlwdGlvbigpICtcblx0XHRcdFx0XCIgKyBcIiArXG5cdFx0XHRcdGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpICtcblx0XHRcdFx0J1wiPC9ib2R5PjwvaHRtbD5cIicgK1xuXHRcdFx0XHQnIDogXCJcIiB9Jyxcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh7XG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIlxuXHRcdH0pO1xuXHR9XG5cdG9NZXNzYWdlVmlldyA9IG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0sXG5cdFx0aXRlbXM6IHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0dGVtcGxhdGU6IG9NZXNzYWdlVGVtcGxhdGVcblx0XHR9XG5cdH0pO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pIHtcblx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0b01lc3NhZ2VWaWV3LnNldE1vZGVsKG9NZXNzYWdlRGlhbG9nTW9kZWwpO1xuXHRyZXR1cm4ge1xuXHRcdG9NZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5mdW5jdGlvbiBzaG93VW5ib3VuZE1lc3NhZ2VzKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRhQ3VzdG9tTWVzc2FnZXM/OiBhbnlbXSxcblx0b0NvbnRleHQ/OiBhbnksXG5cdGJIYXNFdGFnTWVzc2FnZT86IGJvb2xlYW4sXG5cdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0c2hvd0Vycm9ySW5BUEQ/OiBib29sZWFuLFxuXHRiU2hvd01lc3NhZ2VCb3g/OiBib29sZWFuLFxuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRiT25seUZvclRlc3Q/OiBib29sZWFuXG4pOiBQcm9taXNlPGFueT4ge1xuXHRsZXQgYVVuYm91bmRNZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRjb25zdCBhRmlsdGVycyA9IFtuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KV07XG5cdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuXHRcdHNob3dNZXNzYWdlQm94OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cblx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0YVVuYm91bmRNZXNzYWdlcyA9IGFVbmJvdW5kTWVzc2FnZXMuY29uY2F0KGdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gc2hvdyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIG5vdCBib3VuZCBzdGF0ZSBtZXNzYWdlcyBoZW5jZSBhZGQgYSBmaWx0ZXIgZm9yIHRoZSBzYW1lXG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IGFueSkge1xuXHRcdFx0bGV0IGluZGV4ID0gSW5maW5pdHksXG5cdFx0XHRcdG9Db250cm9sID0gQ29yZS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdFx0Y29uc3QgZXJyb3JGaWVsZENvbnRyb2wgPSBDb3JlLmJ5SWQoYUNvbnRyb2xJZHNbMF0pIGFzIENvbnRyb2w7XG5cdFx0XHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRcdFx0Y29uc3QgZmllbGRSYW5raW5EaWFsb2cgPVxuXHRcdFx0XHRcdG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nXG5cdFx0XHRcdFx0XHQ/IChlcnJvckZpZWxkQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBhbnkpLmZpbmRFbGVtZW50cyh0cnVlKS5pbmRleE9mKGVycm9yRmllbGRDb250cm9sKVxuXHRcdFx0XHRcdFx0OiBJbmZpbml0eTtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gZmllbGRSYW5raW5EaWFsb2c7XG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG9ubHkgdW5ib3VuZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNob3duIHNvIGFkZCBmaWx0ZXIgYWNjb3JkaW5nbHlcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInRhcmdldFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogXCJcIiB9KSk7XG5cdH1cblx0aWYgKGFDdXN0b21NZXNzYWdlcyAmJiBhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0YUN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VDb2RlID0gb01lc3NhZ2UuY29kZSA/IG9NZXNzYWdlLmNvZGUgOiBcIlwiO1xuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogb01lc3NhZ2UudGV4dCxcblx0XHRcdFx0XHR0eXBlOiBvTWVzc2FnZS50eXBlLFxuXHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdGNvZGU6IG1lc3NhZ2VDb2RlXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Ly9UaGUgdGFyZ2V0IGFuZCBwZXJzaXN0ZW50IHByb3BlcnRpZXMgb2YgdGhlIG1lc3NhZ2UgYXJlIGhhcmRjb2RlZCBhcyBcIlwiIGFuZCB0cnVlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggb25seSB1bmJvdW5kIG1lc3NhZ2VzLlxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSAob01lc3NhZ2VWaWV3ICYmIChvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwpKSB8fCBuZXcgSlNPTk1vZGVsKCk7XG5cdGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiAoYVVuYm91bmRNZXNzYWdlc1swXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIgfHwgYlNob3dNZXNzYWdlQm94KSkge1xuXHRcdGlmIChhVW5ib3VuZE1lc3NhZ2VzWzBdLmdldENvZGUoKSAhPT0gXCI1MDNcIikge1xuXHRcdFx0c2hvd01lc3NhZ2VCb3ggPSAhc2hvd0Vycm9ySW5BUEQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYUZpbHRlcnMpLFxuXHRcdFx0YUN1cnJlbnRDb250ZXh0cyA9IG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRpZiAoYUN1cnJlbnRDb250ZXh0cyAmJiBhQ3VycmVudENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIERvbid0IHNob3cgZGlhbG9nIGluY2FzZSB0aGVyZSBhcmUgbm8gZXJyb3JzIHRvIHNob3dcblx0XHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dD8uZ2V0T2JqZWN0KCk/LklzQWN0aXZlRW50aXR5ICYmICFzaG93RXJyb3JJbkFQRCkge1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9ICFzaG93RXJyb3JJbkFQRDtcblx0XHRcdH0gLy8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0YUN1cnJlbnRDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50Q29udGV4dDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9NZXNzYWdlID0gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGFNZXNzYWdlcy5wdXNoKG9NZXNzYWdlKTtcblx0XHRcdFx0YU1lc3NhZ2VEYXRhTGlzdCA9IGFNZXNzYWdlcztcblx0XHRcdH0pO1xuXHRcdFx0Ly8gaWYoYU1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiBhTWVzc2FnZUxpc3QubGVuZ3RoKSB7XG5cdFx0XHQvLyBcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTWVzc2FnZXMpO1xuXHRcdFx0Ly8gfVxuXHRcdFx0bGV0IGV4aXN0aW5nTWVzc2FnZXM6IGFueVtdID0gW107XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKSkpIHtcblx0XHRcdFx0ZXhpc3RpbmdNZXNzYWdlcyA9IG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1VuaXF1ZU9iajogYW55ID0ge307XG5cdFx0XHRsZXQgYU1vZGVsRGF0YUFycmF5OiBhbnlbXSA9IFtdO1xuXHRcdFx0YU1vZGVsRGF0YUFycmF5ID0gYU1lc3NhZ2VEYXRhTGlzdC5jb25jYXQoZXhpc3RpbmdNZXNzYWdlcykuZmlsdGVyKGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIGVudHJpZXMgaGF2aW5nIGR1cGxpY2F0ZSBtZXNzYWdlIGlkc1xuXHRcdFx0XHRyZXR1cm4gIW9VbmlxdWVPYmpbb2JqLmlkXSAmJiAob1VuaXF1ZU9ialtvYmouaWRdID0gdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTW9kZWxEYXRhQXJyYXkpO1xuXHRcdH1cblx0fVxuXHRpZiAoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDAgJiYgIWFDdXN0b21NZXNzYWdlcyAmJiAhYkhhc0V0YWdNZXNzYWdlKSB7XG5cdFx0Ly8gRG9uJ3Qgc2hvdyB0aGUgcG9wdXAgaWYgdGhlcmUgYXJlIG5vIHRyYW5zaWVudCBtZXNzYWdlc1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH0gZWxzZSBpZiAoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgYVVuYm91bmRNZXNzYWdlc1swXS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MgJiYgIWFDdXN0b21NZXNzYWdlcykge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3coYVVuYm91bmRNZXNzYWdlc1swXS5tZXNzYWdlKTtcblx0XHRcdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdFx0XHR9XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMoYVVuYm91bmRNZXNzYWdlcyk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoc2hvd01lc3NhZ2VEaWFsb2cpIHtcblx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IGFSZXNvbHZlRnVuY3Rpb25zIHx8IFtdO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0YVJlc29sdmVGdW5jdGlvbnMucHVzaChyZXNvbHZlKTtcblx0XHRcdChDb3JlIGFzIENvcmVFeClcblx0XHRcdFx0LmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIsIHRydWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IGJTdHJpY3RIYW5kbGluZ0Zsb3cgPSBmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlSGFzRVRhZyA9IGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvTWVzc2FnZU1hbmFnZXIsIG9SZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnKTtcblx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRcdFx0XHRvRGlhbG9nID1cblx0XHRcdFx0XHRcdG9EaWFsb2cgfHxcblx0XHRcdFx0XHRcdG5ldyBEaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0NMT1NFXCIpXG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21IZWFkZXI6IG5ldyBCYXIoe1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRNaWRkbGU6IFtcblx0XHRcdFx0XHRcdFx0XHRcdG5ldyBUZXh0KHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb0JhY2tCdXR0b25dXG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMzcuNWVtXCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiMjEuNWVtXCIsXG5cdFx0XHRcdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVJlc29sdmVGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zW2ldLmNhbGwoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBbXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5yZW1vdmVBbGxDb250ZW50KCk7XG5cdFx0XHRcdFx0b0RpYWxvZy5hZGRDb250ZW50KG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyk7XG5cblx0XHRcdFx0XHRpZiAobWVzc2FnZUhhc0VUYWcpIHtcblx0XHRcdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9tL0J1dHRvblR5cGVcIl0sIGZ1bmN0aW9uIChCdXR0b25UeXBlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0b0RpYWxvZy5zZXRCZWdpbkJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9SRUZSRVNIXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogQnV0dG9uVHlwZS5FbXBoYXNpemVkXG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3lCZWdpbkJ1dHRvbigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzSGlnaGVzdFByaW9yaXR5ID0gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KG9NZXNzYWdlVmlldy5nZXRJdGVtcygpKTtcblx0XHRcdFx0XHRzSGlnaGVzdFByaW9yaXR5VGV4dCA9IGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdFx0XHRvRGlhbG9nLnNldFN0YXRlKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0XHRcdChvRGlhbG9nLmdldEN1c3RvbUhlYWRlcigpIGFzIGFueSkuZ2V0Q29udGVudE1pZGRsZSgpWzBdLnNldFRleHQoc0hpZ2hlc3RQcmlvcml0eVRleHQpO1xuXHRcdFx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdFx0XHRpZiAoYk9ubHlGb3JUZXN0KSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9EaWFsb2cpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoc2hvd01lc3NhZ2VCb3gpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlID0gYVVuYm91bmRNZXNzYWdlc1swXTtcblx0XHRcdGlmIChvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzICYmIGFNZXNzYWdlTGlzdC5pbmRleE9mKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpID09PSAtMSkge1xuXHRcdFx0XHRhTWVzc2FnZUxpc3QucHVzaChvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKTtcblx0XHRcdFx0bGV0IGZvcm1hdHRlZFRleHRTdHJpbmcgPSBcIjxodG1sPjxib2R5PlwiO1xuXHRcdFx0XHRjb25zdCByZXRyeUFmdGVyTWVzc2FnZSA9IGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlLCB0cnVlKTtcblx0XHRcdFx0aWYgKHJldHJ5QWZ0ZXJNZXNzYWdlKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGA8aDY+JHtyZXRyeUFmdGVyTWVzc2FnZX08L2g2Pjxicj5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvTWVzc2FnZS5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgb01lc3NhZ2UuZ2V0QWRkaXRpb25hbFRleHQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpfTogJHtvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgb01lc3NhZ2UuZ2V0TWVzc2FnZSgpfTwvaHRtbD48L2JvZHk+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRUZXh0OiBhbnkgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdFx0aHRtbFRleHQ6IGZvcm1hdHRlZFRleHRTdHJpbmdcblx0XHRcdFx0fSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3IoZm9ybWF0dGVkVGV4dCwge1xuXHRcdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHk6IGFueSkge1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRzd2l0Y2ggKHNIaWdoZXN0UHJpb3JpdHkpIHtcblx0XHRjYXNlIFwiRXJyb3JcIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfRVJST1JcIik7XG5cdFx0Y2FzZSBcIkluZm9ybWF0aW9uXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9TVUNDRVNTXCIpO1xuXHRcdGNhc2UgXCJXYXJuaW5nXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9XQVJOSU5HXCIpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogYW55LCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cdGxpc3RCaW5kaW5nLmZpbHRlcihcblx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdHBhdGg6IFwidGFyZ2V0XCIsXG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuU3RhcnRzV2l0aCxcblx0XHRcdHZhbHVlMTogc1BhdGhUb0JlUmVtb3ZlZFxuXHRcdH0pXG5cdCk7XG5cblx0cmV0dXJuIGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLm1hcChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0fSk7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiA9IGZhbHNlLCBiVHJhbnNpdGlvbk9ubHk6IGJvb2xlYW4gPSBmYWxzZSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykge1xuXHRsZXQgaTtcblx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gKENvcmUgYXMgQ29yZUV4IGFzIGFueSkuZ2V0TWVzc2FnZU1hbmFnZXIoKSxcblx0XHRvTWVzc2FnZU1vZGVsID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiksXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRpZiAoYkJvdW5kTWVzc2FnZXMgJiYgYlRyYW5zaXRpb25Pbmx5ICYmIHNQYXRoVG9CZVJlbW92ZWQpIHtcblx0XHRhTWVzc2FnZXMgPSBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdH0gZWxzZSB7XG5cdFx0YU1lc3NhZ2VzID0gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGZvciAoaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoIWJUcmFuc2l0aW9uT25seSB8fCBhTWVzc2FnZXNbaV0ucGVyc2lzdGVudCkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLnRhcmdldCAhPT0gXCJcIikgfHwgKCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS50YXJnZXQgfHwgYU1lc3NhZ2VzW2ldLnRhcmdldCA9PT0gXCJcIikpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmNvZGUgPT09IFwiNTAzXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSAhPT0gXCJcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlLmluZGV4T2Yob1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpKSA9PT0gLTFcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSA9IGBcXG4ke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKX0ke1xuXHRcdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2Vcblx0XHRcdH1gO1xuXHRcdH1cblx0fVxuXHQvL0ZpbHRlcmluZyBtZXNzYWdlcyBhZ2FpbiBoZXJlIHRvIGF2b2lkIHNob3dpbmcgcHVyZSB0ZWNobmljYWwgbWVzc2FnZXMgcmFpc2VkIGJ5IHRoZSBtb2RlbFxuXHRjb25zdCBiYWNrZW5kTWVzc2FnZXM6IGFueSA9IFtdO1xuXHRmb3IgKGkgPSAwOyBpIDwgYVRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMgJiZcblx0XHRcdFx0KChhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICYmXG5cdFx0XHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZSAhPT0gbnVsbCkgfHxcblx0XHRcdFx0XHQoYVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgJiYgYVRyYW5zaXRpb25NZXNzYWdlc1tpXS50ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IG51bGwpKSkgfHxcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0uY29kZVxuXHRcdCkge1xuXHRcdFx0YmFja2VuZE1lc3NhZ2VzLnB1c2goYVRyYW5zaXRpb25NZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBiYWNrZW5kTWVzc2FnZXM7XG59XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGFueSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIGZvciBGaW9yaSBNZXNzYWdlIEhhbmRsaW5nXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nXG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU2LjBcbiAqL1xuY29uc3QgbWVzc2FnZUhhbmRsaW5nOiBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogZ2V0TWVzc2FnZXMsXG5cdHNob3dVbmJvdW5kTWVzc2FnZXM6IHNob3dVbmJvdW5kTWVzc2FnZXMsXG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5LFxuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogZ2V0UmV0cnlBZnRlck1lc3NhZ2UsXG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNzYWdlSGFuZGxpbmc7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7RUFxQkEsSUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQTVCO0VBQ0EsSUFBSUUsWUFBbUIsR0FBRyxFQUExQjtFQUNBLElBQUlDLGdCQUF1QixHQUFHLEVBQTlCO0VBQ0EsSUFBSUMsaUJBQXdCLEdBQUcsRUFBL0I7RUFDQSxJQUFJQyxPQUFKO0VBQ0EsSUFBSUMsV0FBSjtFQUNBLElBQUlDLFlBQUo7O0VBcUJBLFNBQVNDLHdCQUFULEdBQW9DO0lBQ25DLElBQUlDLGtCQUFKLENBRG1DLENBR25DOztJQUNBLFNBQVNDLFlBQVQsQ0FBc0JDLFNBQXRCLEVBQXNDO01BQ3JDLE9BQU9BLFNBQVMsQ0FBQ0MsUUFBVixHQUNKLFNBQ0FELFNBQVMsQ0FBQ0MsUUFEVixHQUVBLFdBRkEsR0FHQUQsU0FBUyxDQUFDQyxRQUFWLENBQW1CQyxNQUFuQixDQUEwQkMsSUFBSSxDQUFDQyxHQUFMLENBQVNKLFNBQVMsQ0FBQ0MsUUFBVixD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
|
|
@@ -25,7 +25,6 @@ let aMessageDataList: any[] = [];
|
|
|
25
25
|
let aResolveFunctions: any[] = [];
|
|
26
26
|
let oDialog: Dialog;
|
|
27
27
|
let oBackButton: Button;
|
|
28
|
-
let oMessageTemplate: MessageItem;
|
|
29
28
|
let oMessageView: MessageView;
|
|
30
29
|
|
|
31
30
|
export type messageHandlingType = {
|
|
@@ -37,7 +36,8 @@ export type messageHandlingType = {
|
|
|
37
36
|
bShowBoundTransition?: boolean,
|
|
38
37
|
showErrorInAPD?: boolean,
|
|
39
38
|
bShowMessageBox?: boolean,
|
|
40
|
-
concurrentEditFlag?: boolean
|
|
39
|
+
concurrentEditFlag?: boolean,
|
|
40
|
+
bOnlyForTest?: boolean
|
|
41
41
|
) => Promise<any>;
|
|
42
42
|
removeUnboundTransitionMessages: () => void;
|
|
43
43
|
modifyETagMessagesOnly: (oMessageManager: any, oResourceBundle: any, concurrentEditFlag: boolean | undefined) => boolean;
|
|
@@ -210,45 +210,42 @@ function getRetryAfterMessage(oMessage: any, bMessageDialog?: any) {
|
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
function prepareMessageViewForDialog(oMessageDialogModel: JSONModel, bStrictHandlingFlow: boolean) {
|
|
213
|
+
let oMessageTemplate: MessageItem;
|
|
213
214
|
if (!bStrictHandlingFlow) {
|
|
214
|
-
oMessageTemplate =
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
description
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
markupDescription: true
|
|
232
|
-
});
|
|
215
|
+
oMessageTemplate = new MessageItem(undefined, {
|
|
216
|
+
counter: { path: "counter" },
|
|
217
|
+
title: "{message}",
|
|
218
|
+
subtitle: "{additionalText}",
|
|
219
|
+
longtextUrl: "{descriptionUrl}",
|
|
220
|
+
type: { path: "type" },
|
|
221
|
+
description:
|
|
222
|
+
"{= ${" +
|
|
223
|
+
"description} || ${technicalDetails} ? " +
|
|
224
|
+
'"<html><body>" + ' +
|
|
225
|
+
fnFormatDescription() +
|
|
226
|
+
" + " +
|
|
227
|
+
fnFormatTechnicalDetails() +
|
|
228
|
+
'"</body></html>"' +
|
|
229
|
+
' : "" }',
|
|
230
|
+
markupDescription: true
|
|
231
|
+
});
|
|
233
232
|
} else {
|
|
234
233
|
oMessageTemplate = new MessageItem({
|
|
235
234
|
title: "{message}",
|
|
236
|
-
type: "
|
|
235
|
+
type: { path: "type" },
|
|
237
236
|
longtextUrl: "{descriptionUrl}"
|
|
238
237
|
});
|
|
239
238
|
}
|
|
240
|
-
oMessageView =
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
}
|
|
251
|
-
});
|
|
239
|
+
oMessageView = new MessageView({
|
|
240
|
+
showDetailsPageHeader: false,
|
|
241
|
+
itemSelect: function () {
|
|
242
|
+
oBackButton.setVisible(true);
|
|
243
|
+
},
|
|
244
|
+
items: {
|
|
245
|
+
path: "/",
|
|
246
|
+
template: oMessageTemplate
|
|
247
|
+
}
|
|
248
|
+
});
|
|
252
249
|
oBackButton =
|
|
253
250
|
oBackButton ||
|
|
254
251
|
new Button({
|
|
@@ -275,16 +272,14 @@ function showUnboundMessages(
|
|
|
275
272
|
bShowBoundTransition?: boolean,
|
|
276
273
|
showErrorInAPD?: boolean,
|
|
277
274
|
bShowMessageBox?: boolean,
|
|
278
|
-
concurrentEditFlag?: boolean
|
|
275
|
+
concurrentEditFlag?: boolean,
|
|
276
|
+
bOnlyForTest?: boolean
|
|
279
277
|
): Promise<any> {
|
|
280
278
|
let aUnboundMessages = this.getMessages();
|
|
281
279
|
const oMessageManager = Core.getMessageManager();
|
|
282
280
|
let sHighestPriority;
|
|
283
281
|
let sHighestPriorityText;
|
|
284
|
-
const aFilters = [
|
|
285
|
-
new Filter({ path: "code", operator: FilterOperator.NE, value1: null }),
|
|
286
|
-
new Filter({ path: "persistent", operator: FilterOperator.NE, value1: false })
|
|
287
|
-
];
|
|
282
|
+
const aFilters = [new Filter({ path: "persistent", operator: FilterOperator.NE, value1: false })];
|
|
288
283
|
let showMessageDialog: boolean | undefined = false,
|
|
289
284
|
showMessageBox: boolean | undefined = false;
|
|
290
285
|
|
|
@@ -436,6 +431,7 @@ function showUnboundMessages(
|
|
|
436
431
|
aResolveFunctions = [];
|
|
437
432
|
}
|
|
438
433
|
});
|
|
434
|
+
oDialog.removeAllContent();
|
|
439
435
|
oDialog.addContent(oMessageObject.oMessageView);
|
|
440
436
|
|
|
441
437
|
if (messageHasETag) {
|
|
@@ -463,7 +459,9 @@ function showUnboundMessages(
|
|
|
463
459
|
(oDialog.getCustomHeader() as any).getContentMiddle()[0].setText(sHighestPriorityText);
|
|
464
460
|
oMessageView.navigateBack();
|
|
465
461
|
oDialog.open();
|
|
466
|
-
|
|
462
|
+
if (bOnlyForTest) {
|
|
463
|
+
resolve(oDialog);
|
|
464
|
+
}
|
|
467
465
|
})
|
|
468
466
|
.catch(reject);
|
|
469
467
|
});
|
|
@@ -555,8 +553,7 @@ function getMessages(bBoundMessages: boolean = false, bTransitionOnly: boolean =
|
|
|
555
553
|
for (i = 0; i < aMessages.length; i++) {
|
|
556
554
|
if (
|
|
557
555
|
(!bTransitionOnly || aMessages[i].persistent) &&
|
|
558
|
-
((bBoundMessages && aMessages[i].target !== "") || (!bBoundMessages && (!aMessages[i].target || aMessages[i].target === "")))
|
|
559
|
-
aMessages[i].code
|
|
556
|
+
((bBoundMessages && aMessages[i].target !== "") || (!bBoundMessages && (!aMessages[i].target || aMessages[i].target === "")))
|
|
560
557
|
) {
|
|
561
558
|
aTransitionMessages.push(aMessages[i]);
|
|
562
559
|
}
|
|
@@ -573,7 +570,20 @@ function getMessages(bBoundMessages: boolean = false, bTransitionOnly: boolean =
|
|
|
573
570
|
}`;
|
|
574
571
|
}
|
|
575
572
|
}
|
|
576
|
-
|
|
573
|
+
//Filtering messages again here to avoid showing pure technical messages raised by the model
|
|
574
|
+
const backendMessages: any = [];
|
|
575
|
+
for (i = 0; i < aTransitionMessages.length; i++) {
|
|
576
|
+
if (
|
|
577
|
+
(aTransitionMessages[i].technicalDetails &&
|
|
578
|
+
((aTransitionMessages[i].technicalDetails.originalMessage &&
|
|
579
|
+
aTransitionMessages[i].technicalDetails.originalMessage !== null) ||
|
|
580
|
+
(aTransitionMessages[i].technicalDetails.httpStatus && aTransitionMessages[i].technicalDetails.httpStatus !== null))) ||
|
|
581
|
+
aTransitionMessages[i].code
|
|
582
|
+
) {
|
|
583
|
+
backendMessages.push(aTransitionMessages[i]);
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
return backendMessages;
|
|
577
587
|
}
|
|
578
588
|
function removeTransitionMessages(bBoundMessages: any, sPathToBeRemoved?: string) {
|
|
579
589
|
const aMessagesToBeDeleted = getMessages(bBoundMessages, true, sPathToBeRemoved);
|