@sapui5/sap.fe.core 1.100.0 → 1.102.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/src/sap/fe/core/.library +2 -3
- package/src/sap/fe/core/AppComponent.js +23 -30
- package/src/sap/fe/core/AppComponent.ts +35 -40
- package/src/sap/fe/core/AppStateHandler.js +8 -8
- package/src/sap/fe/core/AppStateHandler.ts +11 -11
- package/src/sap/fe/core/BaseController.js +9 -9
- package/src/sap/fe/core/BaseController.ts +3 -4
- package/src/sap/fe/core/CommonUtils.js +122 -101
- package/src/sap/fe/core/CommonUtils.ts +239 -193
- package/src/sap/fe/core/ExtensionAPI.js +12 -13
- package/src/sap/fe/core/ExtensionAPI.ts +21 -31
- package/src/sap/fe/core/PageController.js +19 -13
- package/src/sap/fe/core/PageController.ts +40 -34
- package/src/sap/fe/core/TemplateComponent.js +198 -123
- package/src/sap/fe/core/TemplateComponent.ts +109 -121
- package/src/sap/fe/core/TemplateModel.js +7 -9
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +935 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +837 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +660 -288
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +513 -331
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +43 -25
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +132 -103
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +16 -16
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +64 -55
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +166 -99
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +187 -149
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
- package/src/sap/fe/core/controllerextensions/MassEdit.js +13 -12
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +22 -22
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +14 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +20 -30
- package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
- package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
- package/src/sap/fe/core/controllerextensions/Paginator.js +24 -15
- package/src/sap/fe/core/controllerextensions/Paginator.ts +35 -20
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +34 -16
- package/src/sap/fe/core/controllerextensions/Share.ts +50 -32
- package/src/sap/fe/core/controllerextensions/SideEffects.js +15 -15
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +64 -65
- package/src/sap/fe/core/controllerextensions/ViewState.js +27 -31
- package/src/sap/fe/core/controllerextensions/ViewState.ts +103 -102
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +90 -132
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +18 -8
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +264 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +35 -33
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +100 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1584 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +190 -159
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +780 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +329 -76
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1149 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +169 -97
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +592 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +83 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +52 -36
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- package/src/sap/fe/core/controls/Any.js +28 -0
- package/src/sap/fe/core/controls/Any.ts +30 -0
- package/src/sap/fe/core/controls/CommandExecution.js +50 -16
- package/src/sap/fe/core/controls/CommandExecution.ts +31 -22
- package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +371 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +282 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +74 -36
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +23 -32
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +52 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +127 -67
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +127 -67
- package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
- package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
- package/src/sap/fe/core/controls/FileWrapper.js +360 -0
- package/src/sap/fe/core/controls/FileWrapper.ts +202 -0
- package/src/sap/fe/core/controls/FilterBar.js +154 -119
- package/src/sap/fe/core/controls/FilterBar.ts +128 -123
- package/src/sap/fe/core/controls/FormElementWrapper.js +102 -37
- package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -35
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +41 -81
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -35
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
- package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
- package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
- package/src/sap/fe/core/converters/annotations/DataField.js +20 -5
- package/src/sap/fe/core/converters/annotations/DataField.ts +27 -6
- package/src/sap/fe/core/converters/controls/Common/Action.js +14 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +17 -10
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -14
- package/src/sap/fe/core/converters/controls/Common/Form.js +16 -18
- package/src/sap/fe/core/converters/controls/Common/Form.ts +20 -20
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +389 -173
- package/src/sap/fe/core/converters/controls/Common/Table.ts +440 -244
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +26 -16
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -19
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +78 -47
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +146 -107
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +30 -25
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +39 -34
- package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -28
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +38 -45
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
- package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/TableFormatter.js +74 -13
- package/src/sap/fe/core/formatters/TableFormatter.ts +71 -16
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
- package/src/sap/fe/core/fpm/Component.js +46 -17
- package/src/sap/fe/core/fpm/Component.ts +11 -16
- package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
- package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
- package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
- package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
- package/src/sap/fe/core/helpers/ClassSupport.ts +315 -237
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
- package/src/sap/fe/core/helpers/MassEditHelper.js +522 -147
- package/src/sap/fe/core/helpers/MassEditHelper.ts +563 -236
- package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +39 -26
- package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
- package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +5 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -8
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
- package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
- package/src/sap/fe/core/library.js +13 -5
- package/src/sap/fe/core/library.ts +26 -17
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
- package/src/sap/fe/core/messagebundle.properties +135 -180
- package/src/sap/fe/core/messagebundle_ar.properties +31 -64
- package/src/sap/fe/core/messagebundle_bg.properties +31 -64
- package/src/sap/fe/core/messagebundle_ca.properties +31 -64
- package/src/sap/fe/core/messagebundle_cs.properties +31 -64
- package/src/sap/fe/core/messagebundle_cy.properties +32 -65
- package/src/sap/fe/core/messagebundle_da.properties +31 -64
- package/src/sap/fe/core/messagebundle_de.properties +29 -62
- package/src/sap/fe/core/messagebundle_el.properties +32 -65
- package/src/sap/fe/core/messagebundle_en.properties +32 -65
- package/src/sap/fe/core/messagebundle_en_GB.properties +29 -62
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -74
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +32 -65
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +20 -6
- package/src/sap/fe/core/messagebundle_es.properties +31 -64
- package/src/sap/fe/core/messagebundle_es_MX.properties +31 -64
- package/src/sap/fe/core/messagebundle_et.properties +31 -64
- package/src/sap/fe/core/messagebundle_fi.properties +29 -62
- package/src/sap/fe/core/messagebundle_fr.properties +36 -69
- package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -66
- package/src/sap/fe/core/messagebundle_hi.properties +29 -62
- package/src/sap/fe/core/messagebundle_hr.properties +32 -65
- package/src/sap/fe/core/messagebundle_hu.properties +30 -63
- package/src/sap/fe/core/messagebundle_id.properties +32 -65
- package/src/sap/fe/core/messagebundle_it.properties +31 -64
- package/src/sap/fe/core/messagebundle_iw.properties +31 -64
- package/src/sap/fe/core/messagebundle_ja.properties +29 -62
- package/src/sap/fe/core/messagebundle_kk.properties +31 -64
- package/src/sap/fe/core/messagebundle_ko.properties +31 -64
- package/src/sap/fe/core/messagebundle_lt.properties +31 -64
- package/src/sap/fe/core/messagebundle_lv.properties +32 -65
- package/src/sap/fe/core/messagebundle_ms.properties +31 -64
- package/src/sap/fe/core/messagebundle_nl.properties +31 -64
- package/src/sap/fe/core/messagebundle_no.properties +31 -64
- package/src/sap/fe/core/messagebundle_pl.properties +34 -67
- package/src/sap/fe/core/messagebundle_pt.properties +32 -65
- package/src/sap/fe/core/messagebundle_pt_PT.properties +31 -64
- package/src/sap/fe/core/messagebundle_ro.properties +33 -66
- package/src/sap/fe/core/messagebundle_ru.properties +33 -66
- package/src/sap/fe/core/messagebundle_sh.properties +31 -64
- package/src/sap/fe/core/messagebundle_sk.properties +31 -64
- package/src/sap/fe/core/messagebundle_sl.properties +29 -62
- package/src/sap/fe/core/messagebundle_sv.properties +30 -63
- package/src/sap/fe/core/messagebundle_th.properties +31 -64
- package/src/sap/fe/core/messagebundle_tr.properties +31 -64
- package/src/sap/fe/core/messagebundle_uk.properties +32 -65
- package/src/sap/fe/core/messagebundle_vi.properties +31 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +32 -65
- package/src/sap/fe/core/messagebundle_zh_TW.properties +34 -67
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +11 -8
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -13
- package/src/sap/fe/core/services/NavigationServiceFactory.js +5 -5
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +105 -66
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +59 -49
- package/src/sap/fe/core/services/ShellServicesFactory.js +104 -29
- package/src/sap/fe/core/services/ShellServicesFactory.ts +64 -30
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -10
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +38 -51
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +0 -3
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +27 -6
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
- package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
- package/src/sap/fe/core/templating/FilterHelper.js +4 -4
- package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
- package/src/sap/fe/core/templating/PropertyHelper.js +70 -33
- package/src/sap/fe/core/templating/PropertyHelper.ts +49 -27
- package/src/sap/fe/core/templating/UIFormatters.js +133 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +144 -50
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- package/src/sap/fe/core/type/Email.js +26 -8
- package/src/sap/fe/core/type/Email.ts +8 -7
- package/src/sap/fe/core/AnnotationHelper.js +0 -312
- package/src/sap/fe/core/AnnotationHelper.ts +0 -315
- package/src/sap/fe/core/RouterProxy.js +0 -926
- package/src/sap/fe/core/TransactionHelper.js +0 -1562
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -392
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -136
- package/src/sap/fe/core/actions/collaboration/Manage.js +0 -262
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +0 -103
- package/src/sap/fe/core/actions/draft.js +0 -523
- package/src/sap/fe/core/actions/messageHandling.js +0 -567
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
|
@@ -2,19 +2,23 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/ObjectPage/HeaderFacet", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingExpression", "../../helpers/ConfigurableObject", "../../helpers/ID", "../../ManifestSettings", "../../objectPage/FormMenuActions", "../Common/DataVisualization", "../Common/Form"], function (Action, HeaderFacet, IssueManager, Key, BindingExpression, ConfigurableObject, ID, ManifestSettings, FormMenuActions, DataVisualization, Form) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
-
var
|
|
10
|
-
var
|
|
9
|
+
var isReferenceFacet = Form.isReferenceFacet;
|
|
10
|
+
var createFormDefinition = Form.createFormDefinition;
|
|
11
|
+
var getDataVisualizationConfiguration = DataVisualization.getDataVisualizationConfiguration;
|
|
11
12
|
var getVisibilityEnablementFormMenuActions = FormMenuActions.getVisibilityEnablementFormMenuActions;
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
13
|
+
var getFormHiddenActions = FormMenuActions.getFormHiddenActions;
|
|
14
|
+
var getFormActions = FormMenuActions.getFormActions;
|
|
15
|
+
var ActionType = ManifestSettings.ActionType;
|
|
16
|
+
var SubSectionID = ID.SubSectionID;
|
|
17
|
+
var SideContentID = ID.SideContentID;
|
|
18
|
+
var FormID = ID.FormID;
|
|
19
|
+
var CustomSubSectionID = ID.CustomSubSectionID;
|
|
20
|
+
var Placement = ConfigurableObject.Placement;
|
|
21
|
+
var insertCustomElements = ConfigurableObject.insertCustomElements;
|
|
18
22
|
var ref = BindingExpression.ref;
|
|
19
23
|
var not = BindingExpression.not;
|
|
20
24
|
var fn = BindingExpression.fn;
|
|
@@ -23,22 +27,18 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
23
27
|
var bindingExpression = BindingExpression.bindingExpression;
|
|
24
28
|
var annotationExpression = BindingExpression.annotationExpression;
|
|
25
29
|
var KeyHelper = Key.KeyHelper;
|
|
26
|
-
var
|
|
30
|
+
var IssueType = IssueManager.IssueType;
|
|
31
|
+
var IssueSeverity = IssueManager.IssueSeverity;
|
|
32
|
+
var IssueCategory = IssueManager.IssueCategory;
|
|
33
|
+
var getStashedSettingsForHeaderFacet = HeaderFacet.getStashedSettingsForHeaderFacet;
|
|
34
|
+
var getHeaderFacetsFromManifest = HeaderFacet.getHeaderFacetsFromManifest;
|
|
35
|
+
var getDesignTimeMetadataSettingsForHeaderFacet = HeaderFacet.getDesignTimeMetadataSettingsForHeaderFacet;
|
|
27
36
|
var removeDuplicateActions = Action.removeDuplicateActions;
|
|
28
|
-
var getSemanticObjectMapping = Action.getSemanticObjectMapping;
|
|
29
|
-
var ButtonType = Action.ButtonType;
|
|
30
37
|
var isActionNavigable = Action.isActionNavigable;
|
|
38
|
+
var getSemanticObjectMapping = Action.getSemanticObjectMapping;
|
|
39
|
+
var getEnabledForAnnotationAction = Action.getEnabledForAnnotationAction;
|
|
31
40
|
var getActionsFromManifest = Action.getActionsFromManifest;
|
|
32
|
-
var
|
|
33
|
-
var insertCustomElements = ConfigurableObject.insertCustomElements;
|
|
34
|
-
var getDataVisualizationConfiguration = DataVisualization.getDataVisualizationConfiguration;
|
|
35
|
-
var isReferenceFacet = Form.isReferenceFacet;
|
|
36
|
-
var createFormDefinition = Form.createFormDefinition;
|
|
37
|
-
var SideContentID = ID.SideContentID;
|
|
38
|
-
var SubSectionID = ID.SubSectionID;
|
|
39
|
-
var FormID = ID.FormID;
|
|
40
|
-
var CustomSubSectionID = ID.CustomSubSectionID;
|
|
41
|
-
var ActionType = ManifestSettings.ActionType;
|
|
41
|
+
var ButtonType = Action.ButtonType;
|
|
42
42
|
|
|
43
43
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
44
44
|
|
|
@@ -210,7 +210,9 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
210
210
|
function addFormMenuActions(actions, facetDefinition, converterContext) {
|
|
211
211
|
var hiddenActions = getFormHiddenActions(facetDefinition, converterContext) || [],
|
|
212
212
|
formActions = getFormActions(facetDefinition, converterContext),
|
|
213
|
-
formAllActions = insertCustomElements(actions, getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions)
|
|
213
|
+
formAllActions = insertCustomElements(actions, getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions), {
|
|
214
|
+
command: "overwrite"
|
|
215
|
+
});
|
|
214
216
|
return formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions;
|
|
215
217
|
}
|
|
216
218
|
/**
|
|
@@ -587,6 +589,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
587
589
|
};
|
|
588
590
|
}
|
|
589
591
|
|
|
592
|
+
var isVisible = manifestSubSection.visible !== undefined ? manifestSubSection.visible : true;
|
|
593
|
+
var isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0;
|
|
590
594
|
var subSectionDefinition = {
|
|
591
595
|
type: SubSectionType.Unknown,
|
|
592
596
|
id: manifestSubSection.id || CustomSubSectionID(subSectionKey),
|
|
@@ -596,7 +600,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
596
600
|
level: 1,
|
|
597
601
|
position: position,
|
|
598
602
|
visible: manifestSubSection.visible !== undefined ? manifestSubSection.visible : true,
|
|
599
|
-
sideContent: sideContent
|
|
603
|
+
sideContent: sideContent,
|
|
604
|
+
isVisibilityDynamic: isDynamicExpression
|
|
600
605
|
};
|
|
601
606
|
|
|
602
607
|
if (manifestSubSection.template || manifestSubSection.name) {
|
|
@@ -679,4 +684,4 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
679
684
|
|
|
680
685
|
return _exports;
|
|
681
686
|
}, false);
|
|
682
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwibmFtZXMiOlsiU3ViU2VjdGlvblR5cGUiLCJ0YXJnZXRUZXJtcyIsImhhc1RhYmxlIiwiZmFjZXRzIiwic29tZSIsImZhY2V0VHlwZSIsImluZGV4T2YiLCJUYXJnZXQiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjdXN0b21IZWFkZXJGYWNldCIsInRlbXBsYXRlRWRpdCIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbiIsInN1YlNlY3Rpb25JRCIsIkN1c3RvbVN1YlNlY3Rpb25JRCIsInN1YlNlY3Rpb24iLCJpZCIsInRpdGxlIiwidHlwZSIsIlhNTEZyYWdtZW50IiwidGVtcGxhdGUiLCJ2aXNpYmxlIiwibGV2ZWwiLCJzaWRlQ29udGVudCIsInVuZGVmaW5lZCIsInN0YXNoZWQiLCJmbGV4U2V0dGluZ3MiLCJhY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbktleSIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiYWRkRm9ybU1lbnVBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImdldEZvcm1IaWRkZW5BY3Rpb25zIiwiZm9ybUFjdGlvbnMiLCJnZXRGb3JtQWN0aW9ucyIsImZvcm1BbGxBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0RmFjZXRBY3Rpb25zIiwiQXJyYXkiLCJmaWx0ZXIiLCJpc1JlZmVyZW5jZUZhY2V0IiwiY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIiLCJnZXRCdXR0b25UeXBlIiwiRW1waGFzaXplZCIsIlBhdGhGb3JCdXR0b25UeXBlIiwicGF0aCIsIkJ1dHRvblR5cGUiLCJUcmFuc3BhcmVudCIsIkdob3N0IiwiaGFzU2luZ2xlQ29udGVudCIsIlN1YlNlY3Rpb25JRCIsIkZhY2V0Iiwib0hpZGRlbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwiaXNWaXNpYmxlIiwiY29tcGlsZUJpbmRpbmciLCJub3QiLCJlcXVhbCIsImFubm90YXRpb25FeHByZXNzaW9uIiwiaXNEeW5hbWljRXhwcmVzc2lvbiIsImlzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9uIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJVbmtub3duIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJjb250ZW50IiwidGFibGVDb250ZW50IiwiaW5kZXgiLCJ1bnN1cHBvcnRlZFRleHQiLCJpIiwiY29uY2F0IiwibWl4ZWRTdWJTZWN0aW9uIiwiTWl4ZWQiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImFjdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwic2hvd1RpdGxlIiwiaXNTdWJzZWN0aW9uVGl0bGVTaG93biIsInRpdGxlVmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24iLCJEYXRhVmlzdWFsaXphdGlvbiIsInRpdGxlVmlzaWJsZSIsImZvcm1FbGVtZW50U3ViU2VjdGlvbiIsInVuc3VwcG9ydGVkU3ViU2VjdGlvbiIsInRleHQiLCJzdWJTZWN0aW9uVGl0bGUiLCJyZWZlcmVuY2VUYXJnZXQiLCJ0YXJnZXRWYWx1ZSIsIm1hbmlmZXN0QWN0aW9ucyIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJzcGxpdCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzdWJzdHIiLCJEYXRhIiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsInF1YWxpZmllciIsImRhdGFGaWVsZCIsIlVJQW5ub3RhdGlvbiIsIlJlcXVpcmVzQ29udGV4dCIsInZhbHVlT2YiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTG93IiwiSXNzdWVUeXBlIiwiTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOIiwiUkVRVUlSRVNDT05URVhUIiwiSW5saW5lIiwiSU5MSU5FIiwiRGV0ZXJtaW5pbmciLCJERVRFUk1JTklORyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiRm9ybUlEIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiZW5hYmxlZCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJidXR0b25UeXBlIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsIkFjdGlvblRhcmdldCIsImJpbmRpbmciLCJyZXF1aXJlc0RpYWxvZyIsImlzRGlhbG9nIiwiY29udGV4dHMiLCJiaW5kaW5nRXhwcmVzc2lvbiIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImxhYmVsIiwibW9kZWwiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwicmVmIiwiYWN0aW9uRGVmaW5pdGlvbiIsImJDcml0aWNhbCIsIkNvbW1vbiIsIklzQWN0aW9uQ3JpdGljYWwiLCJwYXJhbWV0ZXJzIiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbnMiLCJzdWJTZWN0aW9uS2V5IiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbiIsIm1hbmlmZXN0U3ViU2VjdGlvbiIsIlNpZGVDb250ZW50SUQiLCJlcXVhbFNwbGl0IiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInN1YlNlY3Rpb25EZWZpbml0aW9uIiwibmFtZSIsIlBsYWNlaG9sZGVyIiwiY3VycmVudEZhY2V0IiwiZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24iLCJtYW5pZmVzdFdyYXBwZXIiLCJ1c2VJY29uVGFiQmFyIiwiaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZXZlcnkiLCJzdWJGYWNldCIsInJlZkZhY2V0Iiwic3ViQ29sbGVjdGlvbkZhY2V0Iiwic3ViUmVmRmFjZXQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Ba0RZQSxjOzthQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0tBQUFBLGMsS0FBQUEsYzs7O0FBNEZaLE1BQU1DLFdBQXFCLEdBQUcsb0pBQTlCLEMsQ0FNQTs7QUFDQSxNQUFNQyxRQUFRLEdBQUcsWUFBd0I7QUFBQSxRQUF2QkMsTUFBdUIsdUVBQVAsRUFBTztBQUN4QyxXQUFPQSxNQUFNLENBQUNDLElBQVAsQ0FBWSxVQUFBQyxTQUFTO0FBQUE7O0FBQUEsYUFBSUosV0FBVyxDQUFDSyxPQUFaLENBQW9CRCxTQUFwQixhQUFvQkEsU0FBcEIsNENBQW9CQSxTQUFTLENBQUVFLE1BQS9CLCtFQUFvQixrQkFBbUJDLE9BQXZDLDBEQUFvQixzQkFBNEJDLElBQWhELElBQXdELENBQUMsQ0FBN0Q7QUFBQSxLQUFyQixDQUFQO0FBQ0EsR0FGRDtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFdBQVNDLGlCQUFULENBQ05DLGVBRE0sRUFFTkMsZ0JBRk0sRUFHTkMsZUFITSxFQUltQjtBQUN6QjtBQUNBLFFBQU1DLGNBQWMsR0FBR0gsZUFBZSxDQUFDSSxNQUFoQixDQUF1QixVQUFDRCxjQUFELEVBQStCRSxlQUEvQixFQUFtRDtBQUNoRyxjQUFRQSxlQUFlLENBQUNDLEtBQXhCO0FBQ0M7QUFDQ0gsVUFBQUEsY0FBYyxDQUFDSSxJQUFmLENBQW9CRixlQUFwQjtBQUNBOztBQUNEO0FBQ0M7QUFDQTtBQUNBLGNBQUlBLGVBQWUsQ0FBQ0csTUFBaEIsQ0FBdUJDLElBQXZCLENBQTRCLFVBQUFmLFNBQVM7QUFBQSxtQkFBSUEsU0FBUyxDQUFDWSxLQUFWLGlEQUFKO0FBQUEsV0FBckMsQ0FBSixFQUFxRztBQUNwR0gsWUFBQUEsY0FBYyxDQUFDTyxNQUFmLE9BQUFQLGNBQWMsR0FBUUEsY0FBYyxDQUFDUSxNQUF2QixFQUErQixDQUEvQiw0QkFBcUNOLGVBQWUsQ0FBQ0csTUFBckQsR0FBZDtBQUNBLFdBRkQsTUFFTztBQUNOTCxZQUFBQSxjQUFjLENBQUNJLElBQWYsQ0FBb0JGLGVBQXBCO0FBQ0E7O0FBQ0Q7O0FBQ0Q7QUFDQztBQUNBO0FBZkY7O0FBaUJBLGFBQU9GLGNBQVA7QUFDQSxLQW5Cc0IsRUFtQnBCLEVBbkJvQixDQUF2QixDQUZ5QixDQXVCekI7O0FBQ0EsV0FBT0EsY0FBYyxDQUFDUyxHQUFmLENBQW1CLFVBQUFDLEtBQUs7QUFBQTs7QUFBQSxhQUM5QkMsZ0JBQWdCLENBQUNELEtBQUQsRUFBUVYsY0FBUixFQUF3QkYsZ0JBQXhCLEVBQTBDLENBQTFDLEVBQTZDLEVBQUVZLEtBQUYsYUFBRUEsS0FBRiwwQkFBRUEsS0FBRCxDQUFnQkwsTUFBakIsb0NBQUMsUUFBd0JHLE1BQXpCLENBQTdDLEVBQThFVCxlQUE5RSxDQURjO0FBQUEsS0FBeEIsQ0FBUDtBQUdBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLFdBQVNhLGtDQUFULENBQTRDZCxnQkFBNUMsRUFBd0c7QUFDOUcsUUFBTWUsa0JBQStELEdBQUdDLDJCQUEyQixDQUNsR2hCLGdCQUFnQixDQUFDaUIsa0JBQWpCLEdBQXNDQyxlQUF0QyxFQURrRyxDQUFuRztBQUdBLFFBQU1DLG1CQUFrRCxHQUFHLEVBQTNEO0FBQ0FDLElBQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZTixrQkFBWixFQUFnQ08sT0FBaEMsQ0FBd0MsVUFBU0MsR0FBVCxFQUFjO0FBQ3JESixNQUFBQSxtQkFBbUIsQ0FBQ2IsSUFBcEIsQ0FBeUJTLGtCQUFrQixDQUFDUSxHQUFELENBQTNDO0FBQ0EsYUFBT0osbUJBQVA7QUFDQSxLQUhEO0FBSUEsUUFBTWpCLGNBQWMsR0FBR2lCLG1CQUFtQixDQUFDaEIsTUFBcEIsQ0FBMkIsVUFBQ0QsY0FBRCxFQUFnRHNCLGlCQUFoRCxFQUFzRTtBQUN2SCxVQUFJQSxpQkFBaUIsQ0FBQ0MsWUFBdEIsRUFBb0M7QUFDbkN2QixRQUFBQSxjQUFjLENBQUNJLElBQWYsQ0FBb0JrQixpQkFBcEI7QUFDQTs7QUFDRCxhQUFPdEIsY0FBUDtBQUNBLEtBTHNCLEVBS3BCLEVBTG9CLENBQXZCO0FBT0EsV0FBT0EsY0FBYyxDQUFDUyxHQUFmLENBQW1CLFVBQUFhLGlCQUFpQjtBQUFBLGFBQUlFLGlDQUFpQyxDQUFDRixpQkFBRCxDQUFyQztBQUFBLEtBQXBDLENBQVA7QUFDQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNBLFdBQVNFLGlDQUFULENBQTJDRixpQkFBM0MsRUFBaUg7QUFDaEgsUUFBTUcsWUFBWSxHQUFHQyxrQkFBa0IsQ0FBQ0osaUJBQWlCLENBQUNELEdBQW5CLENBQXZDO0FBQ0EsUUFBTU0sVUFBaUMsR0FBRztBQUN6Q0MsTUFBQUEsRUFBRSxFQUFFSCxZQURxQztBQUV6Q0osTUFBQUEsR0FBRyxFQUFFQyxpQkFBaUIsQ0FBQ0QsR0FGa0I7QUFHekNRLE1BQUFBLEtBQUssRUFBRVAsaUJBQWlCLENBQUNPLEtBSGdCO0FBSXpDQyxNQUFBQSxJQUFJLEVBQUU1QyxjQUFjLENBQUM2QyxXQUpvQjtBQUt6Q0MsTUFBQUEsUUFBUSxFQUFFVixpQkFBaUIsQ0FBQ0MsWUFBbEIsSUFBa0MsRUFMSDtBQU16Q1UsTUFBQUEsT0FBTyxFQUFFWCxpQkFBaUIsQ0FBQ1csT0FOYztBQU96Q0MsTUFBQUEsS0FBSyxFQUFFLENBUGtDO0FBUXpDQyxNQUFBQSxXQUFXLEVBQUVDLFNBUjRCO0FBU3pDQyxNQUFBQSxPQUFPLEVBQUVmLGlCQUFpQixDQUFDZSxPQVRjO0FBVXpDQyxNQUFBQSxZQUFZLEVBQUVoQixpQkFBaUIsQ0FBQ2dCLFlBVlM7QUFXekNDLE1BQUFBLE9BQU8sRUFBRTtBQVhnQyxLQUExQztBQWFBLFdBQU9aLFVBQVA7QUFDQSxHLENBRUQ7QUFDQTtBQUNBOzs7QUFDQSxNQUFNYSxnQkFBZ0IsR0FBRyxVQUFDdEMsZUFBRCxFQUE4QnVDLFFBQTlCLEVBQTJEO0FBQUE7O0FBQ25GLFdBQU8sd0JBQUF2QyxlQUFlLENBQUN3QyxFQUFoQiw0RUFBb0JDLFFBQXBCLGlDQUFrQ3pDLGVBQWUsQ0FBQzBDLEtBQWxELDBEQUFrQyxzQkFBdUJELFFBQXZCLEVBQWxDLEtBQXVFRixRQUE5RTtBQUNBLEdBRkQ7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBU0ksa0JBQVQsQ0FDQ04sT0FERCxFQUVDckMsZUFGRCxFQUdDSixnQkFIRCxFQUlvQztBQUNuQyxRQUFNZ0QsYUFBMkIsR0FBR0Msb0JBQW9CLENBQUM3QyxlQUFELEVBQWtCSixnQkFBbEIsQ0FBcEIsSUFBMkQsRUFBL0Y7QUFBQSxRQUNDa0QsV0FBK0MsR0FBR0MsY0FBYyxDQUFDL0MsZUFBRCxFQUFrQkosZ0JBQWxCLENBRGpFO0FBQUEsUUFFQ29ELGNBQWMsR0FBR0Msb0JBQW9CLENBQ3BDWixPQURvQyxFQUVwQ2Esc0JBQXNCLENBQUNKLFdBQUQsRUFBY2xELGdCQUFkLEVBQWdDeUMsT0FBaEMsRUFBeUNILFNBQXpDLEVBQW9EQSxTQUFwRCxFQUErRFUsYUFBL0QsQ0FGYyxDQUZ0QztBQU1BLFdBQU9JLGNBQWMsR0FBR0csc0NBQXNDLENBQUNDLHNCQUFzQixDQUFDSixjQUFELENBQXZCLENBQXpDLEdBQW9GWCxPQUF6RztBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTZ0IsZUFBVCxDQUF5QnJELGVBQXpCLEVBQXNESixnQkFBdEQsRUFBNEg7QUFDM0gsUUFBSXlDLE9BQU8sR0FBRyxJQUFJaUIsS0FBSixFQUFkOztBQUNBLFlBQVF0RCxlQUFlLENBQUNDLEtBQXhCO0FBQ0M7QUFDQ29DLFFBQUFBLE9BQU8sR0FBSXJDLGVBQWUsQ0FBQ0csTUFBaEIsQ0FBdUJvRCxNQUF2QixDQUE4QixVQUFBdkQsZUFBZTtBQUFBLGlCQUFJd0QsZ0JBQWdCLENBQUN4RCxlQUFELENBQXBCO0FBQUEsU0FBN0MsQ0FBRCxDQUErR0QsTUFBL0csQ0FDVCxVQUFDc0MsT0FBRCxFQUE2QnJDLGVBQTdCO0FBQUEsaUJBQWlEeUQsdUJBQXVCLENBQUNwQixPQUFELEVBQVVyQyxlQUFWLEVBQTJCSixnQkFBM0IsQ0FBeEU7QUFBQSxTQURTLEVBRVQsRUFGUyxDQUFWO0FBSUE7O0FBQ0Q7QUFDQ3lDLFFBQUFBLE9BQU8sR0FBR29CLHVCQUF1QixDQUFDLEVBQUQsRUFBS3pELGVBQUwsRUFBNkNKLGdCQUE3QyxDQUFqQztBQUNBO0FBVEY7O0FBV0EsV0FBTytDLGtCQUFrQixDQUFDTixPQUFELEVBQVVyQyxlQUFWLEVBQTJCSixnQkFBM0IsQ0FBekI7QUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVM4RCxhQUFULENBQXVCQyxVQUF2QixFQUFvRTtBQUNuRSxRQUFNQyxpQkFBeUIsR0FBR0QsVUFBSCxhQUFHQSxVQUFILHVCQUFHQSxVQUFVLENBQUVFLElBQTlDOztBQUNBLFFBQUlELGlCQUFKLEVBQXVCO0FBQ3RCLGFBQU8sUUFBUSxLQUFSLEdBQWdCQSxpQkFBaEIsR0FBb0MsT0FBcEMsR0FBOENFLFVBQVUsQ0FBQ0MsV0FBekQsR0FBdUUsUUFBdkUsR0FBa0ZILGlCQUFsRixHQUFzRyxHQUF0RyxHQUE0RyxHQUFuSDtBQUNBLEtBRkQsTUFFTyxJQUFJRCxVQUFKLEVBQWdCO0FBQ3RCLGFBQU9HLFVBQVUsQ0FBQ0UsS0FBbEI7QUFDQTs7QUFDRCxXQUFPRixVQUFVLENBQUNDLFdBQWxCO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sV0FBU3RELGdCQUFULENBQ05ULGVBRE0sRUFFTkYsY0FGTSxFQUdORixnQkFITSxFQUlOb0MsS0FKTSxFQUtOaUMsZ0JBTE0sRUFNTnBFLGVBTk0sRUFPaUI7QUFBQTs7QUFDdkIsUUFBTTBCLFlBQVksR0FBRzJDLFlBQVksQ0FBQztBQUFFQyxNQUFBQSxLQUFLLEVBQUVuRTtBQUFULEtBQUQsQ0FBakM7QUFDQSxRQUFNb0UsaUJBQXNCLDRCQUFHcEUsZUFBZSxDQUFDcUUsV0FBbkIsb0ZBQUcsc0JBQTZCQyxFQUFoQywyREFBRyx1QkFBaUNDLE1BQWhFO0FBQ0EsUUFBTUMsU0FBUyxHQUFHQyxjQUFjLENBQUNDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLElBQUQsRUFBT0Msb0JBQW9CLENBQUNSLGlCQUFELENBQTNCLENBQU4sQ0FBSixDQUFoQztBQUNBLFFBQU1TLG1CQUFtQixHQUN4QkwsU0FBUyxJQUFJLE9BQU9BLFNBQVAsS0FBcUIsUUFBbEMsSUFBOENBLFNBQVMsQ0FBQ2xGLE9BQVYsQ0FBa0IsSUFBbEIsTUFBNEIsQ0FBMUUsSUFBK0UsQ0FBQThFLGlCQUFpQixTQUFqQixJQUFBQSxpQkFBaUIsV0FBakIsWUFBQUEsaUJBQWlCLENBQUV4QyxJQUFuQixNQUE0QixNQUQ1RztBQUVBLFFBQU1rRCwwQkFBMEIsR0FDL0JOLFNBQVMsSUFBSUssbUJBQWIsR0FBbUNMLFNBQVMsQ0FBQ08sU0FBVixDQUFvQlAsU0FBUyxDQUFDbEYsT0FBVixDQUFrQixJQUFsQixJQUEwQixDQUE5QyxFQUFpRGtGLFNBQVMsQ0FBQ1EsV0FBVixDQUFzQixHQUF0QixDQUFqRCxDQUFuQyxHQUFrSCxLQURuSDtBQUVBLFFBQU1yRCxLQUFLLEdBQUc4QyxjQUFjLENBQUNHLG9CQUFvQixDQUFDNUUsZUFBZSxDQUFDMEMsS0FBakIsQ0FBckIsQ0FBNUI7QUFDQSxRQUFNakIsVUFBMEIsR0FBRztBQUNsQ0MsTUFBQUEsRUFBRSxFQUFFSCxZQUQ4QjtBQUVsQ0osTUFBQUEsR0FBRyxFQUFFbUIsZ0JBQWdCLENBQUN0QyxlQUFELEVBQWtCdUIsWUFBbEIsQ0FGYTtBQUdsQ0ksTUFBQUEsS0FBSyxFQUFFQSxLQUgyQjtBQUlsQ0MsTUFBQUEsSUFBSSxFQUFFNUMsY0FBYyxDQUFDaUcsT0FKYTtBQUtsQ0MsTUFBQUEsY0FBYyxFQUFFdEYsZ0JBQWdCLENBQUN1RiwrQkFBakIsQ0FBaURuRixlQUFlLENBQUNvRixrQkFBakUsQ0FMa0I7QUFNbENyRCxNQUFBQSxPQUFPLEVBQUV5QyxTQU55QjtBQU9sQ2EsTUFBQUEsbUJBQW1CLEVBQUVSLG1CQVBhO0FBUWxDN0MsTUFBQUEsS0FBSyxFQUFFQSxLQVIyQjtBQVNsQ0MsTUFBQUEsV0FBVyxFQUFFQztBQVRxQixLQUFuQzs7QUFXQSxRQUFJckMsZUFBSixFQUFxQjtBQUNwQjRCLE1BQUFBLFVBQVUsQ0FBQ1UsT0FBWCxHQUFxQm1ELGdDQUFnQyxDQUFDdEYsZUFBRCxFQUFrQkEsZUFBbEIsRUFBbUNKLGdCQUFuQyxDQUFyRDtBQUNBNkIsTUFBQUEsVUFBVSxDQUFDVyxZQUFYLEdBQTBCO0FBQ3pCbUQsUUFBQUEsVUFBVSxFQUFFQywyQ0FBMkMsQ0FBQ3hGLGVBQUQsRUFBa0JBLGVBQWxCLEVBQW1DSixnQkFBbkM7QUFEOUIsT0FBMUI7QUFHQTs7QUFDRCxRQUFJNkYsT0FBb0MsR0FBRyxFQUEzQztBQUNBLFFBQU1DLFlBQXlDLEdBQUcsRUFBbEQ7QUFDQSxRQUFNQyxLQUFvQixHQUFHLEVBQTdCO0FBQ0EsUUFBSUMsZUFBZSxHQUFHLEVBQXRCO0FBQ0E1RCxJQUFBQSxLQUFLOztBQUNMLFlBQVFoQyxlQUFlLENBQUNDLEtBQXhCO0FBQ0M7QUFDQyxZQUFNZCxNQUFNLEdBQUdhLGVBQWUsQ0FBQ0csTUFBL0I7O0FBQ0EsWUFBSWpCLFFBQVEsQ0FBQ0MsTUFBRCxDQUFaLEVBQXNCO0FBQ3JCO0FBQ0EsZUFBSyxJQUFJMEcsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzFHLE1BQU0sQ0FBQ21CLE1BQTNCLEVBQW1DdUYsQ0FBQyxFQUFwQyxFQUF3QztBQUFBOztBQUN2QyxnQkFBSTVHLFdBQVcsQ0FBQ0ssT0FBWixZQUFxQkgsTUFBTSxDQUFDMEcsQ0FBRCxDQUFQLENBQW1CdEcsTUFBdkMsK0RBQW9CLFFBQTJCQyxPQUEvQyxvREFBb0IsZ0JBQW9DQyxJQUF4RCxJQUFnRSxDQUFDLENBQXJFLEVBQXdFO0FBQ3ZFO0FBQ0FpRyxjQUFBQSxZQUFZLENBQUN4RixJQUFiLENBQWtCTyxnQkFBZ0IsQ0FBQ3RCLE1BQU0sQ0FBQzBHLENBQUQsQ0FBUCxFQUFZLEVBQVosRUFBZ0JqRyxnQkFBaEIsRUFBa0NvQyxLQUFsQyxFQUF5QzdDLE1BQU0sQ0FBQ21CLE1BQVAsS0FBa0IsQ0FBM0QsRUFBOERULGVBQTlELENBQWxDO0FBQ0E4RixjQUFBQSxLQUFLLENBQUN6RixJQUFOLENBQVcyRixDQUFYO0FBQ0E7QUFDRDs7QUFDRCxlQUFLLElBQUlBLEVBQUMsR0FBR0YsS0FBSyxDQUFDckYsTUFBTixHQUFlLENBQTVCLEVBQStCdUYsRUFBQyxJQUFJLENBQXBDLEVBQXVDQSxFQUFDLEVBQXhDLEVBQTRDO0FBQzNDO0FBQ0ExRyxZQUFBQSxNQUFNLENBQUNrQixNQUFQLENBQWNzRixLQUFLLENBQUNFLEVBQUQsQ0FBbkIsRUFBd0IsQ0FBeEI7QUFDQTs7QUFDRCxjQUFJMUcsTUFBTSxDQUFDbUIsTUFBWCxFQUFtQjtBQUNsQk4sWUFBQUEsZUFBZSxDQUFDRyxNQUFoQixHQUF5QmhCLE1BQXpCLENBRGtCLENBRWxCOztBQUNBc0csWUFBQUEsT0FBTyxDQUFDdkYsSUFBUixDQUFhTyxnQkFBZ0IsQ0FBQ1QsZUFBRCxFQUFrQixFQUFsQixFQUFzQkosZ0JBQXRCLEVBQXdDb0MsS0FBeEMsRUFBK0NpQyxnQkFBL0MsRUFBaUVwRSxlQUFqRSxDQUE3QjtBQUNBOztBQUNENEYsVUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNLLE1BQVIsQ0FBZUosWUFBZixDQUFWOztBQUNBLGNBQU1LLGVBQWdDLG1DQUNsQ3RFLFVBRGtDO0FBRXJDRyxZQUFBQSxJQUFJLEVBQUU1QyxjQUFjLENBQUNnSCxLQUZnQjtBQUdyQ2hFLFlBQUFBLEtBQUssRUFBRUEsS0FIOEI7QUFJckN5RCxZQUFBQSxPQUFPLEVBQUVBO0FBSjRCLFlBQXRDOztBQU1BLGlCQUFPTSxlQUFQO0FBQ0EsU0ExQkQsTUEwQk87QUFDTixjQUFNMUQsT0FBTyxHQUFHZ0IsZUFBZSxDQUFDckQsZUFBRCxFQUFrQkosZ0JBQWxCLENBQS9CO0FBQUEsY0FDQ3FHLHdCQUF3QyxtQ0FDcEN4RSxVQURvQztBQUV2Q0csWUFBQUEsSUFBSSxFQUFFNUMsY0FBYyxDQUFDa0gsSUFGa0I7QUFHdkNDLFlBQUFBLGNBQWMsRUFBRUMsb0JBQW9CLENBQUNwRyxlQUFELEVBQWtCd0UsU0FBbEIsRUFBNkI1RSxnQkFBN0IsRUFBK0N5QyxPQUEvQyxDQUhHO0FBSXZDTCxZQUFBQSxLQUFLLEVBQUVBLEtBSmdDO0FBS3ZDSyxZQUFBQSxPQUFPLEVBQUVBLE9BQU8sQ0FBQ2tCLE1BQVIsQ0FBZSxVQUFBOEMsTUFBTTtBQUFBLHFCQUFJQSxNQUFNLENBQUNDLFNBQVAsS0FBcUJwRSxTQUF6QjtBQUFBLGFBQXJCO0FBTDhCLFlBRHpDOztBQVFBLGlCQUFPK0Qsd0JBQVA7QUFDQTs7QUFDRjtBQUNDLFlBQUksQ0FBQ2pHLGVBQWUsQ0FBQ1QsTUFBaEIsQ0FBdUJDLE9BQTVCLEVBQXFDO0FBQ3BDb0csVUFBQUEsZUFBZSwyQ0FBb0M1RixlQUFlLENBQUNULE1BQWhCLENBQXVCZ0gsS0FBM0QsQ0FBZjtBQUNBLFNBRkQsTUFFTztBQUNOLGtCQUFRdkcsZUFBZSxDQUFDVCxNQUFoQixDQUF1QkMsT0FBdkIsQ0FBK0JDLElBQXZDO0FBQ0M7QUFDQTtBQUNBO0FBQ0E7QUFDQyxrQkFBTStHLFlBQVksR0FBR0MsaUNBQWlDLENBQ3JEekcsZUFBZSxDQUFDVCxNQUFoQixDQUF1QmdILEtBRDhCLEVBRXJERyxpQ0FBaUMsQ0FBQzFHLGVBQUQsRUFBa0JGLGNBQWxCLEVBQWtDRixnQkFBbEMsQ0FGb0IsRUFHckRBLGdCQUhxRCxFQUlyRHNDLFNBSnFELEVBS3JEckMsZUFMcUQsQ0FBdEQ7QUFPQSxrQkFBTThHLFlBQVksR0FDakIsMEJBQUNILFlBQVksQ0FBQ0ksY0FBYixDQUE0QixDQUE1QixDQUFELDBHQUF5Q0MsVUFBekMsa0ZBQXFEbEYsS0FBckQsZ0NBQStENkUsWUFBWSxDQUFDSSxjQUFiLENBQTRCLENBQTVCLENBQS9ELDJEQUE4RCx1QkFBeUNqRixLQUF2RyxDQUREO0FBRUEsa0JBQU1tRixTQUFTLEdBQUdDLHNCQUFzQixDQUFDOUMsZ0JBQUQsRUFBbUJ4QyxVQUFVLENBQUNFLEtBQTlCLEVBQXFDZ0YsWUFBckMsQ0FBeEM7QUFDQSxrQkFBTUssc0JBQXNCLEdBQUd4QyxTQUFTLElBQUk3QyxLQUFLLEtBQUssV0FBdkIsS0FBdUNBLEtBQUssR0FBRzZDLFNBQUgsR0FBZSxLQUEzRCxDQUEvQjs7QUFDQSxrQkFBTXlDLDJCQUF3RCxtQ0FDMUR4RixVQUQwRDtBQUU3REcsZ0JBQUFBLElBQUksRUFBRTVDLGNBQWMsQ0FBQ2tJLGlCQUZ3QztBQUc3RGxGLGdCQUFBQSxLQUFLLEVBQUVBLEtBSHNEO0FBSTdEd0UsZ0JBQUFBLFlBQVksRUFBRUEsWUFKK0M7QUFLN0RNLGdCQUFBQSxTQUFTLEVBQUVBLFNBTGtEO0FBTTdESyxnQkFBQUEsWUFBWSxFQUFFdEMsbUJBQW1CLGlCQUN2QkMsMEJBRHVCLG9CQUNhbkQsS0FEYixtQ0FDMkNtRixTQUQzQywwQkFFOUJFO0FBUjBELGdCQUE5RDs7QUFVQSxxQkFBT0MsMkJBQVA7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDO0FBQ0Esa0JBQU01RSxRQUFPLEdBQUdnQixlQUFlLENBQUNyRCxlQUFELEVBQWtCSixnQkFBbEIsQ0FBL0I7QUFBQSxrQkFDQ3dILHFCQUFxQyxtQ0FDakMzRixVQURpQztBQUVwQ0csZ0JBQUFBLElBQUksRUFBRTVDLGNBQWMsQ0FBQ2tILElBRmU7QUFHcENsRSxnQkFBQUEsS0FBSyxFQUFFQSxLQUg2QjtBQUlwQ21FLGdCQUFBQSxjQUFjLEVBQUVDLG9CQUFvQixDQUFDcEcsZUFBRCxFQUFrQndFLFNBQWxCLEVBQTZCNUUsZ0JBQTdCLEVBQStDeUMsUUFBL0MsQ0FKQTtBQUtwQ0EsZ0JBQUFBLE9BQU8sRUFBRUEsUUFBTyxDQUFDa0IsTUFBUixDQUFlLFVBQUE4QyxNQUFNO0FBQUEseUJBQUlBLE1BQU0sQ0FBQ0MsU0FBUCxLQUFxQnBFLFNBQXpCO0FBQUEsaUJBQXJCO0FBTDJCLGdCQUR0Qzs7QUFRQSxxQkFBT2tGLHFCQUFQOztBQUVEO0FBQ0N4QixjQUFBQSxlQUFlLGlCQUFVNUYsZUFBZSxDQUFDVCxNQUFoQixDQUF1QkMsT0FBdkIsQ0FBK0JDLElBQXpDLGNBQWY7QUFDQTtBQTlDRjtBQWdEQTs7QUFDRDs7QUFDRDtBQUNDbUcsUUFBQUEsZUFBZSxHQUFHLHlCQUFsQjtBQUNBOztBQUNEO0FBQ0M7QUFsR0YsS0EvQnVCLENBbUl2Qjs7O0FBQ0EsUUFBTXlCLHFCQUE0QyxtQ0FDOUM1RixVQUQ4QztBQUVqRDZGLE1BQUFBLElBQUksRUFBRTFCO0FBRjJDLE1BQWxEOztBQUlBLFdBQU95QixxQkFBUDtBQUNBOzs7O0FBQ0QsV0FBU04sc0JBQVQsQ0FBZ0M5QyxnQkFBaEMsRUFBMkRzRCxlQUEzRCxFQUF1R1osWUFBdkcsRUFBc0k7QUFDckksUUFBSTFDLGdCQUFnQixJQUFJMEMsWUFBWSxLQUFLWSxlQUF6QyxFQUEwRDtBQUN6RCxhQUFPLEtBQVA7QUFDQTs7QUFDRCxXQUFPLElBQVA7QUFDQTs7QUFDRCxXQUFTOUQsdUJBQVQsQ0FDQ3BCLE9BREQsRUFFQ3JDLGVBRkQsRUFHQ0osZ0JBSEQsRUFJcUI7QUFDcEIsUUFBTTRILGVBQW9DLEdBQUd4SCxlQUFlLENBQUNULE1BQWhCLENBQXVCQyxPQUFwRTtBQUNBLFFBQU1pSSxXQUFXLEdBQUd6SCxlQUFlLENBQUNULE1BQWhCLENBQXVCZ0gsS0FBM0M7QUFDQSxRQUFJbUIsZUFBNkMsR0FBRyxFQUFwRDtBQUNBLFFBQUlDLG1CQUE2QyxHQUFHLEVBQXBEOztBQUNBLDZCQUFvQ0YsV0FBVyxDQUFDRyxLQUFaLENBQWtCLEdBQWxCLENBQXBDO0FBQUE7QUFBQSxRQUFLQyxzQkFBTDs7QUFDQSxRQUFJQSxzQkFBc0IsQ0FBQ3ZILE1BQXZCLEdBQWdDLENBQXBDLEVBQXVDO0FBQ3RDLFVBQUl1SCxzQkFBc0IsQ0FBQzdDLFdBQXZCLENBQW1DLEdBQW5DLE1BQTRDNkMsc0JBQXNCLENBQUN2SCxNQUF2QixHQUFnQyxDQUFoRixFQUFtRjtBQUNsRnVILFFBQUFBLHNCQUFzQixHQUFHQSxzQkFBc0IsQ0FBQ0MsTUFBdkIsQ0FBOEIsQ0FBOUIsRUFBaUNELHNCQUFzQixDQUFDdkgsTUFBdkIsR0FBZ0MsQ0FBakUsQ0FBekI7QUFDQTtBQUNELEtBSkQsTUFJTztBQUNOdUgsTUFBQUEsc0JBQXNCLEdBQUczRixTQUF6QjtBQUNBOztBQUVELFFBQUlzRixlQUFKLEVBQXFCO0FBQ3BCLGNBQVFBLGVBQWUsQ0FBQy9ILElBQXhCO0FBQ0M7QUFDQ2tJLFVBQUFBLG1CQUFtQixHQUFJSCxlQUFELENBQWdDTyxJQUF0RDtBQUNBTCxVQUFBQSxlQUFlLEdBQUd4RSxzQkFBc0IsQ0FDdkN0RCxnQkFBZ0IsQ0FBQ29JLCtCQUFqQixDQUFpRFIsZUFBakQsRUFBa0VuRixPQUQzQixFQUV2Q3pDLGdCQUZ1QyxFQUd2Q3NDLFNBSHVDLEVBSXZDQSxTQUp1QyxFQUt2Q0EsU0FMdUMsRUFNdkNBLFNBTnVDLEVBT3ZDbEMsZUFBZSxDQUFDb0Ysa0JBUHVCLENBQXhDO0FBU0E7O0FBQ0Q7QUFDQTtBQUNDLGNBQUlvQyxlQUFlLENBQUNTLFNBQXBCLEVBQStCO0FBQzlCTixZQUFBQSxtQkFBbUIsR0FBR0gsZUFBdEI7QUFDQTs7QUFDRDtBQWxCRjtBQW9CQTs7QUFFRG5GLElBQUFBLE9BQU8sR0FBR3NGLG1CQUFtQixDQUFDNUgsTUFBcEIsQ0FBMkIsVUFBQ3NDLE9BQUQsRUFBVTZGLFNBQVYsRUFBZ0Q7QUFBQTs7QUFDcEYsVUFBTUMsWUFBaUIsR0FBR0QsU0FBSCxhQUFHQSxTQUFILGdEQUFHQSxTQUFTLENBQUU3RCxXQUFkLDBEQUFHLHNCQUF3QkMsRUFBbEQ7O0FBQ0EsY0FBUTRELFNBQVMsQ0FBQ2pJLEtBQWxCO0FBQ0M7QUFDQyxjQUFJLDBCQUFBaUksU0FBUyxDQUFDRSxlQUFWLGdGQUEyQkMsT0FBM0IsUUFBeUMsSUFBN0MsRUFBbUQ7QUFDbER6SSxZQUFBQSxnQkFBZ0IsQ0FDZDBJLGNBREYsR0FFRUMsUUFGRixDQUVXQyxhQUFhLENBQUNDLFVBRnpCLEVBRXFDQyxhQUFhLENBQUNDLEdBRm5ELEVBRXdEQyxTQUFTLENBQUNDLDJCQUFWLENBQXNDQyxlQUY5RjtBQUdBOztBQUNELGNBQUksc0JBQUFaLFNBQVMsQ0FBQ2EsTUFBVix3RUFBa0JWLE9BQWxCLFFBQWdDLElBQXBDLEVBQTBDO0FBQ3pDekksWUFBQUEsZ0JBQWdCLENBQ2QwSSxjQURGLEdBRUVDLFFBRkYsQ0FFV0MsYUFBYSxDQUFDQyxVQUZ6QixFQUVxQ0MsYUFBYSxDQUFDQyxHQUZuRCxFQUV3REMsU0FBUyxDQUFDQywyQkFBVixDQUFzQ0csTUFGOUY7QUFHQTs7QUFDRCxjQUFJLDBCQUFBZCxTQUFTLENBQUNlLFdBQVYsZ0ZBQXVCWixPQUF2QixRQUFxQyxJQUF6QyxFQUErQztBQUM5Q3pJLFlBQUFBLGdCQUFnQixDQUNkMEksY0FERixHQUVFQyxRQUZGLENBRVdDLGFBQWEsQ0FBQ0MsVUFGekIsRUFFcUNDLGFBQWEsQ0FBQ0MsR0FGbkQsRUFFd0RDLFNBQVMsQ0FBQ0MsMkJBQVYsQ0FBc0NLLFdBRjlGO0FBR0E7O0FBQ0QsY0FBTUMscUJBQTBCLEdBQUcsRUFBbkM7O0FBQ0EsY0FBSWpCLFNBQVMsQ0FBQ2tCLE9BQWQsRUFBdUI7QUFDdEJELFlBQUFBLHFCQUFxQixDQUFDRSxxQkFBdEIsR0FBOENDLHdCQUF3QixDQUFDcEIsU0FBUyxDQUFDa0IsT0FBWCxDQUF0RTtBQUNBOztBQUNEL0csVUFBQUEsT0FBTyxDQUFDbkMsSUFBUixDQUFhO0FBQ1owQixZQUFBQSxJQUFJLEVBQUUySCxVQUFVLENBQUNDLGlDQURMO0FBRVo5SCxZQUFBQSxFQUFFLEVBQUUrSCxNQUFNLENBQUM7QUFBRXRGLGNBQUFBLEtBQUssRUFBRW5FO0FBQVQsYUFBRCxFQUE2QmtJLFNBQTdCLENBRkU7QUFHWi9HLFlBQUFBLEdBQUcsRUFBRXVJLFNBQVMsQ0FBQ0Msd0JBQVYsQ0FBbUN6QixTQUFuQyxDQUhPO0FBSVpaLFlBQUFBLElBQUksc0JBQUVZLFNBQVMsQ0FBQ3hGLEtBQVoscURBQUUsaUJBQWlCRCxRQUFqQixFQUpNO0FBS1p5QyxZQUFBQSxjQUFjLEVBQUUsRUFMSjtBQU1aMEUsWUFBQUEsT0FBTyxFQUNOMUIsU0FBUyxDQUFDMkIsbUJBQVYsS0FBa0MzSCxTQUFsQyxHQUNHdUMsY0FBYyxDQUFDRSxLQUFLLENBQUNDLG9CQUFvQiwwQkFBQ3NELFNBQVMsQ0FBQzJCLG1CQUFYLDBEQUFDLHNCQUErQnhCLE9BQS9CLEVBQUQsQ0FBckIsRUFBaUUsSUFBakUsQ0FBTixDQURqQixHQUVHLElBVFE7QUFVWnRHLFlBQUFBLE9BQU8sRUFBRTBDLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUNDLG9CQUFvQiwyQkFBQ3NELFNBQVMsQ0FBQzdELFdBQVgscUZBQUMsdUJBQXVCQyxFQUF4QixxRkFBQyx1QkFBMkJDLE1BQTVCLDJEQUFDLHVCQUFtQzhELE9BQW5DLEVBQUQsQ0FBckIsRUFBcUUsSUFBckUsQ0FBTixDQUFKLENBVlg7QUFXWnlCLFlBQUFBLFVBQVUsRUFBRXBHLGFBQWEsQ0FBQ3lFLFlBQUQsYUFBQ0EsWUFBRCx1QkFBQ0EsWUFBWSxDQUFFeEUsVUFBZixDQVhiO0FBWVpvRyxZQUFBQSxLQUFLLEVBQUV0RixjQUFjLENBQ3BCdUYsRUFBRSxDQUFDLGtDQUFELEVBQXFDLENBQ3RDcEYsb0JBQW9CLENBQUNzRCxTQUFTLENBQUMrQixjQUFYLENBRGtCLEVBRXRDckYsb0JBQW9CLENBQUNzRCxTQUFTLENBQUNnQyxNQUFYLENBRmtCLEVBR3RDZixxQkFIc0MsQ0FBckMsQ0FEa0IsQ0FaVDtBQW1CWmdCLFlBQUFBLFVBQVUsRUFBRTFGLGNBQWMsQ0FBQztBQUMxQjJGLGNBQUFBLGNBQWMsRUFBRXhGLG9CQUFvQixDQUFDc0QsU0FBUyxDQUFDK0IsY0FBWCxDQURWO0FBRTFCNUQsY0FBQUEsTUFBTSxFQUFFekIsb0JBQW9CLENBQUNzRCxTQUFTLENBQUNnQyxNQUFYO0FBRkYsYUFBRDtBQW5CZCxXQUFiO0FBd0JBOztBQUNEO0FBQ0MsY0FBTUcsZ0NBQXFDLEdBQUd6SyxnQkFBZ0IsQ0FBQ29JLCtCQUFqQixDQUFpRFIsZUFBakQsRUFBa0VuRixPQUFoSDtBQUNBLGNBQU1sQixHQUFXLEdBQUd1SSxTQUFTLENBQUNDLHdCQUFWLENBQW1DekIsU0FBbkMsQ0FBcEI7QUFDQTdGLFVBQUFBLE9BQU8sQ0FBQ25DLElBQVIsQ0FBYTtBQUNaMEIsWUFBQUEsSUFBSSxFQUFFMkgsVUFBVSxDQUFDZSxrQkFETDtBQUVaNUksWUFBQUEsRUFBRSxFQUFFK0gsTUFBTSxDQUFDO0FBQUV0RixjQUFBQSxLQUFLLEVBQUVuRTtBQUFULGFBQUQsRUFBNkJrSSxTQUE3QixDQUZFO0FBR1ovRyxZQUFBQSxHQUFHLEVBQUVBLEdBSE87QUFJWm1HLFlBQUFBLElBQUksdUJBQUVZLFNBQVMsQ0FBQ3hGLEtBQVosc0RBQUUsa0JBQWlCRCxRQUFqQixFQUpNO0FBS1p5QyxZQUFBQSxjQUFjLEVBQUUsRUFMSjtBQU1aMEUsWUFBQUEsT0FBTyxFQUFFVyw2QkFBNkIsQ0FBQzNLLGdCQUFELEVBQW1Cc0ksU0FBUyxDQUFDc0MsWUFBN0IsQ0FOMUI7QUFPWkMsWUFBQUEsT0FBTyxFQUFFNUMsc0JBQXNCLEdBQUcsaUJBQWlCQSxzQkFBakIsR0FBMEMsSUFBN0MsR0FBb0QzRixTQVB2RTtBQVFaSCxZQUFBQSxPQUFPLEVBQUUwQyxjQUFjLENBQUNDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDQyxvQkFBb0IsMkJBQUNzRCxTQUFTLENBQUM3RCxXQUFYLHFGQUFDLHVCQUF1QkMsRUFBeEIscUZBQUMsdUJBQTJCQyxNQUE1QiwyREFBQyx1QkFBbUM4RCxPQUFuQyxFQUFELENBQXJCLEVBQXFFLElBQXJFLENBQU4sQ0FBSixDQVJYO0FBU1pxQyxZQUFBQSxjQUFjLEVBQUVDLFFBQVEsQ0FBQ3pDLFNBQVMsQ0FBQ3NDLFlBQVgsQ0FUWjtBQVVaVixZQUFBQSxVQUFVLEVBQUVwRyxhQUFhLENBQUN5RSxZQUFELGFBQUNBLFlBQUQsdUJBQUNBLFlBQVksQ0FBRXhFLFVBQWYsQ0FWYjtBQVdab0csWUFBQUEsS0FBSyxFQUFFdEYsY0FBYyxDQUNwQnVGLEVBQUUsQ0FDRCxjQURDLEVBRUQsQ0FDQzlCLFNBQVMsQ0FBQ2dDLE1BRFgsRUFFQztBQUNDVSxjQUFBQSxRQUFRLEVBQUVaLEVBQUUsQ0FBQyxtQkFBRCxFQUFzQixFQUF0QixFQUEwQmEsaUJBQWlCLENBQUMsRUFBRCxFQUFLLFNBQUwsQ0FBM0MsQ0FEYjtBQUVDQyxjQUFBQSxrQkFBa0IsRUFBRzVDLFNBQVMsQ0FBQzZDLGtCQUFWLEtBQWlDLG9DQUFqQyxHQUNsQixXQURrQixHQUVsQixVQUpKO0FBS0NDLGNBQUFBLEtBQUssRUFBRXBHLG9CQUFvQixDQUFDc0QsU0FBUyxDQUFDeEYsS0FBWCxDQUw1QjtBQU1DdUksY0FBQUEsS0FBSyxFQUFFakIsRUFBRSxDQUFDLFVBQUQsRUFBYSxFQUFiLEVBQWlCYSxpQkFBaUIsQ0FBQyxHQUFELEVBQU0sU0FBTixDQUFsQyxDQU5WO0FBT0NLLGNBQUFBLFdBQVcsRUFBRUMsaUJBQWlCLENBQzdCZCxnQ0FBZ0MsSUFBSUEsZ0NBQWdDLENBQUNsSixHQUFELENBRHZDO0FBUC9CLGFBRkQsQ0FGQyxFQWdCRGlLLEdBQUcsQ0FBQyxXQUFELENBaEJGLENBRGtCLENBWFQ7QUErQlo5RSxZQUFBQSxTQUFTLEVBQUU0QixTQUFTLENBQUNhLE1BQVYsR0FBb0IvSSxlQUFlLENBQUNvRixrQkFBcEMsR0FBb0VsRDtBQS9CbkUsV0FBYjtBQWlDQTtBQWxGRjs7QUFvRkEsYUFBT0csT0FBUDtBQUNBLEtBdkZTLEVBdUZQQSxPQXZGTyxDQUFWO0FBd0ZBLFdBQU9ZLG9CQUFvQixDQUFDWixPQUFELEVBQVVxRixlQUFWLENBQTNCO0FBQ0E7O0FBRU0sV0FBU2lELFFBQVQsQ0FBa0JVLGdCQUFsQixFQUE2RDtBQUNuRSxRQUFJQSxnQkFBSixFQUFzQjtBQUFBOztBQUNyQixVQUFNQyxTQUFTLDRCQUFHRCxnQkFBZ0IsQ0FBQ2hILFdBQXBCLG9GQUFHLHNCQUE4QmtILE1BQWpDLDJEQUFHLHVCQUFzQ0MsZ0JBQXhEOztBQUNBLFVBQUlILGdCQUFnQixDQUFDSSxVQUFqQixDQUE0Qm5MLE1BQTVCLEdBQXFDLENBQXJDLElBQTBDZ0wsU0FBOUMsRUFBeUQ7QUFDeEQsZUFBTyxRQUFQO0FBQ0EsT0FGRCxNQUVPO0FBQ04sZUFBTyxNQUFQO0FBQ0E7QUFDRCxLQVBELE1BT087QUFDTixhQUFPLE1BQVA7QUFDQTtBQUNEOzs7O0FBRU0sV0FBU0ksdUJBQVQsQ0FDTkMsbUJBRE0sRUFFTi9MLGdCQUZNLEVBR3VDO0FBQzdDLFFBQU1nTSxXQUF1RCxHQUFHLEVBQWhFO0FBQ0E1SyxJQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWTBLLG1CQUFaLEVBQWlDekssT0FBakMsQ0FDQyxVQUFBMkssYUFBYTtBQUFBLGFBQ1hELFdBQVcsQ0FBQ0MsYUFBRCxDQUFYLEdBQTZCQyxzQkFBc0IsQ0FBQ0gsbUJBQW1CLENBQUNFLGFBQUQsQ0FBcEIsRUFBcUNBLGFBQXJDLEVBQW9Eak0sZ0JBQXBELENBRHhDO0FBQUEsS0FEZDtBQUlBLFdBQU9nTSxXQUFQO0FBQ0E7Ozs7QUFFTSxXQUFTRSxzQkFBVCxDQUNOQyxrQkFETSxFQUVORixhQUZNLEVBR05qTSxnQkFITSxFQUl1QjtBQUM3QixRQUFNcUMsV0FBdUMsR0FBRzhKLGtCQUFrQixDQUFDOUosV0FBbkIsR0FDN0M7QUFDQUgsTUFBQUEsUUFBUSxFQUFFaUssa0JBQWtCLENBQUM5SixXQUFuQixDQUErQkgsUUFEekM7QUFFQUosTUFBQUEsRUFBRSxFQUFFc0ssYUFBYSxDQUFDSCxhQUFELENBRmpCO0FBR0E5SixNQUFBQSxPQUFPLEVBQUUsS0FIVDtBQUlBa0ssTUFBQUEsVUFBVSxFQUFFRixrQkFBa0IsQ0FBQzlKLFdBQW5CLENBQStCZ0s7QUFKM0MsS0FENkMsR0FPN0MvSixTQVBIO0FBUUEsUUFBSWdLLFFBQVEsR0FBR0gsa0JBQWtCLENBQUNHLFFBQWxDOztBQUNBLFFBQUksQ0FBQ0EsUUFBTCxFQUFlO0FBQ2RBLE1BQUFBLFFBQVEsR0FBRztBQUNWQyxRQUFBQSxTQUFTLEVBQUVDLFNBQVMsQ0FBQ0M7QUFEWCxPQUFYO0FBR0E7O0FBQ0QsUUFBTUMsb0JBQW9CLEdBQUc7QUFDNUIxSyxNQUFBQSxJQUFJLEVBQUU1QyxjQUFjLENBQUNpRyxPQURPO0FBRTVCdkQsTUFBQUEsRUFBRSxFQUFFcUssa0JBQWtCLENBQUNySyxFQUFuQixJQUF5QkYsa0JBQWtCLENBQUNxSyxhQUFELENBRm5CO0FBRzVCeEosTUFBQUEsT0FBTyxFQUFFYSxzQkFBc0IsQ0FBQzZJLGtCQUFrQixDQUFDMUosT0FBcEIsRUFBNkJ6QyxnQkFBN0IsQ0FISDtBQUk1QnVCLE1BQUFBLEdBQUcsRUFBRTBLLGFBSnVCO0FBSzVCbEssTUFBQUEsS0FBSyxFQUFFb0ssa0JBQWtCLENBQUNwSyxLQUxFO0FBTTVCSyxNQUFBQSxLQUFLLEVBQUUsQ0FOcUI7QUFPNUJrSyxNQUFBQSxRQUFRLEVBQUVBLFFBUGtCO0FBUTVCbkssTUFBQUEsT0FBTyxFQUFFZ0ssa0JBQWtCLENBQUNoSyxPQUFuQixLQUErQkcsU0FBL0IsR0FBMkM2SixrQkFBa0IsQ0FBQ2hLLE9BQTlELEdBQXdFLElBUnJEO0FBUzVCRSxNQUFBQSxXQUFXLEVBQUVBO0FBVGUsS0FBN0I7O0FBV0EsUUFBSThKLGtCQUFrQixDQUFDakssUUFBbkIsSUFBK0JpSyxrQkFBa0IsQ0FBQ1EsSUFBdEQsRUFBNEQ7QUFDM0RELE1BQUFBLG9CQUFvQixDQUFDMUssSUFBckIsR0FBNEI1QyxjQUFjLENBQUM2QyxXQUEzQztBQUNFeUssTUFBQUEsb0JBQUYsQ0FBNkR4SyxRQUE3RCxHQUNDaUssa0JBQWtCLENBQUNqSyxRQUFuQixJQUErQmlLLGtCQUFrQixDQUFDUSxJQUFsRCxJQUEwRCxFQUQzRDtBQUVBLEtBSkQsTUFJTztBQUNORCxNQUFBQSxvQkFBb0IsQ0FBQzFLLElBQXJCLEdBQTRCNUMsY0FBYyxDQUFDd04sV0FBM0M7QUFDQTs7QUFDRCxXQUFPRixvQkFBUDtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNBLFdBQVM1RixpQ0FBVCxDQUNDK0YsWUFERCxFQUVDQyx1QkFGRCxFQUdDOU0sZ0JBSEQsRUFJVztBQUNWLFFBQU0rTSxlQUFlLEdBQUcvTSxnQkFBZ0IsQ0FBQ2lCLGtCQUFqQixFQUF4Qjs7QUFDQSxRQUFJOEwsZUFBZSxDQUFDQyxhQUFoQixFQUFKLEVBQXFDO0FBQ3BDO0FBQ0EsYUFBT0MsK0JBQStCLENBQUNKLFlBQUQsRUFBZUMsdUJBQWYsQ0FBdEM7QUFDQSxLQUhELE1BR087QUFBQTs7QUFDTixVQUFNSSxVQUFVLEdBQUdsTixnQkFBZ0IsQ0FBQ21OLGFBQWpCLEVBQW5COztBQUNBLFVBQUkseUJBQUFELFVBQVUsQ0FBQ3pJLFdBQVgsa0dBQXdCQyxFQUF4QixvR0FBNEJuRSxNQUE1QiwwRUFBb0NHLE1BQXBDLElBQThDLDJCQUFBd00sVUFBVSxDQUFDekksV0FBWCw0R0FBd0JDLEVBQXhCLDRHQUE0Qm5FLE1BQTVCLGtGQUFvQ0csTUFBcEMsSUFBNkMsQ0FBL0YsRUFBa0c7QUFDakcsZUFBT3VNLCtCQUErQixDQUFDSixZQUFELEVBQWVDLHVCQUFmLENBQXRDO0FBQ0EsT0FGRCxNQUVPO0FBQ04sZUFBTyxJQUFQO0FBQ0E7QUFDRDtBQUNEOztBQUVELFdBQVNHLCtCQUFULENBQXlDSixZQUF6QyxFQUFtRUMsdUJBQW5FLEVBQW1IO0FBQ2xILFdBQU9BLHVCQUF1QixDQUFDTSxLQUF4QixDQUE4QixVQUFTQyxRQUFULEVBQW1CO0FBQ3ZELFVBQUlBLFFBQVEsS0FBS1IsWUFBakIsRUFBK0I7QUFDOUIsWUFBSVEsUUFBUSxDQUFDaE4sS0FBVCxnREFBSixFQUF5RDtBQUFBOztBQUN4RCxjQUFNaU4sUUFBUSxHQUFHRCxRQUFqQjs7QUFDQSxjQUNDLHFCQUFBQyxRQUFRLENBQUMzTixNQUFULCtGQUFpQkMsT0FBakIsZ0ZBQTBCQyxJQUExQiwrQ0FDQSxzQkFBQXlOLFFBQVEsQ0FBQzNOLE1BQVQsaUdBQWlCQyxPQUFqQixnRkFBMEJDLElBQTFCLHNEQURBLElBRUEsMkJBQUF5TixRQUFRLENBQUMzTixNQUFULENBQWdCQyxPQUFoQixrRkFBeUJDLElBQXpCLCtEQUhELEVBSUU7QUFBQTs7QUFDRCxtQkFBTywwQkFBQXlOLFFBQVEsQ0FBQzdJLFdBQVQsMEdBQXNCQyxFQUF0QixrRkFBMEJDLE1BQTFCLE1BQXFDckMsU0FBckMsNkJBQWlEZ0wsUUFBUSxDQUFDN0ksV0FBMUQscUZBQWlELHVCQUFzQkMsRUFBdkUsMkRBQWlELHVCQUEwQkMsTUFBM0UsR0FBb0YsS0FBM0Y7QUFDQTs7QUFDRCxpQkFBTyxJQUFQO0FBQ0EsU0FWRCxNQVVPO0FBQ04sY0FBTTRJLGtCQUFrQixHQUFHRixRQUEzQjtBQUNBLGlCQUFPRSxrQkFBa0IsQ0FBQ2hOLE1BQW5CLENBQTBCNk0sS0FBMUIsQ0FBZ0MsVUFBU3hNLEtBQVQsRUFBZ0I7QUFBQTs7QUFDdEQsZ0JBQU00TSxXQUFXLEdBQUc1TSxLQUFwQjs7QUFDQSxnQkFDQyx3QkFBQTRNLFdBQVcsQ0FBQzdOLE1BQVoscUdBQW9CQyxPQUFwQixnRkFBNkJDLElBQTdCLCtDQUNBLHlCQUFBMk4sV0FBVyxDQUFDN04sTUFBWix1R0FBb0JDLE9BQXBCLGdGQUE2QkMsSUFBN0Isc0RBREEsSUFFQSx5QkFBQTJOLFdBQVcsQ0FBQzdOLE1BQVosdUdBQW9CQyxPQUFwQixnRkFBNkJDLElBQTdCLCtEQUhELEVBSUU7QUFBQTs7QUFDRCxxQkFBTywwQkFBQTJOLFdBQVcsQ0FBQy9JLFdBQVosMEdBQXlCQyxFQUF6QixrRkFBNkJDLE1BQTdCLE1BQXdDckMsU0FBeEMsNkJBQW9Ea0wsV0FBVyxDQUFDL0ksV0FBaEUscUZBQW9ELHVCQUF5QkMsRUFBN0UsMkRBQW9ELHVCQUE2QkMsTUFBakYsR0FBMEYsS0FBakc7QUFDQTs7QUFDRCxtQkFBTyxJQUFQO0FBQ0EsV0FWTSxDQUFQO0FBV0E7QUFDRDs7QUFDRCxhQUFPLElBQVA7QUFDQSxLQTVCTSxDQUFQO0FBNkJBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25UeXBlLCBNYW5pZmVzdFN1YlNlY3Rpb24sIE1hbmlmZXN0QWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7XG5cdEFubm90YXRpb25UZXJtLFxuXHRDb2xsZWN0aW9uRmFjZXRUeXBlcyxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0SWRlbnRpZmljYXRpb24sXG5cdE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U3RhdHVzSW5mbyxcblx0VUlBbm5vdGF0aW9uVGVybXMsXG5cdFVJQW5ub3RhdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgeyBDdXN0b21TdWJTZWN0aW9uSUQsIEZvcm1JRCwgU3ViU2VjdGlvbklELCBTaWRlQ29udGVudElEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IGNyZWF0ZUZvcm1EZWZpbml0aW9uLCBGb3JtRGVmaW5pdGlvbiwgaXNSZWZlcmVuY2VGYWNldCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uLCBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0Q29udmVydGVyQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRCdXR0b25UeXBlLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMsXG5cdEJhc2VBY3Rpb24sXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQge1xuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0YmluZGluZ0V4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0ZXF1YWwsXG5cdGZuLFxuXHRub3QsXG5cdHJlZlxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSXNzdWVUeXBlLCBJc3N1ZVNldmVyaXR5LCBJc3N1ZUNhdGVnb3J5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7XG5cdEZsZXhTZXR0aW5ncyxcblx0Z2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCxcblx0Z2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQsXG5cdEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCxcblx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7IGdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zLCBnZXRGb3JtSGlkZGVuQWN0aW9ucywgZ2V0Rm9ybUFjdGlvbnMgfSBmcm9tIFwiLi4vLi4vb2JqZWN0UGFnZS9Gb3JtTWVudUFjdGlvbnNcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5cbmV4cG9ydCBlbnVtIFN1YlNlY3Rpb25UeXBlIHtcblx0VW5rbm93biA9IFwiVW5rbm93blwiLCAvLyBEZWZhdWx0IFR5cGVcblx0Rm9ybSA9IFwiRm9ybVwiLFxuXHREYXRhVmlzdWFsaXphdGlvbiA9IFwiRGF0YVZpc3VhbGl6YXRpb25cIixcblx0WE1MRnJhZ21lbnQgPSBcIlhNTEZyYWdtZW50XCIsXG5cdFBsYWNlaG9sZGVyID0gXCJQbGFjZWhvbGRlclwiLFxuXHRNaXhlZCA9IFwiTWl4ZWRcIlxufVxuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiA9XG5cdHwgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uXG5cdHwgRm9ybVN1YlNlY3Rpb25cblx0fCBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb25cblx0fCBDb250YWN0U3ViU2VjdGlvblxuXHR8IFhNTEZyYWdtZW50U3ViU2VjdGlvblxuXHR8IFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgTWl4ZWRTdWJTZWN0aW9uO1xuXG50eXBlIEJhc2VTdWJTZWN0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0dGl0bGU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz47XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlO1xuXHR2aXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0aXNWaXNpYmlsaXR5RHluYW1pYz86IGJvb2xlYW4gfCBcIlwiO1xuXHRmbGV4U2V0dGluZ3M/OiBGbGV4U2V0dGluZ3M7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRsZXZlbDogbnVtYmVyO1xuXHRjb250ZW50PzogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXHRzaWRlQ29udGVudD86IFNpZGVDb250ZW50RGVmO1xufTtcblxudHlwZSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dGV4dDogc3RyaW5nO1xufTtcblxudHlwZSBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb247XG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzaG93VGl0bGU6IGJvb2xlYW47XG5cdHRpdGxlVmlzaWJsZT86IHN0cmluZyB8IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRhY3RTdWJTZWN0aW9uID0gVW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xuXG50eXBlIFhNTEZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBFbXBoYXNpemVkID0ge1xuXHRwYXRoOiBzdHJpbmc7XG59O1xuXG50eXBlIFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG50eXBlIE1peGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHRjb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtO1xuXHRmb3JtRGVmaW5pdGlvbjogRm9ybURlZmluaXRpb247XG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdIHwgQmFzZUFjdGlvbltdO1xufTtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHRpdGxlOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRzaG93VGl0bGU/OiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0dmlzaWJsZTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xufTtcblxudHlwZSBTaWRlQ29udGVudERlZiA9IHtcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGlkPzogc3RyaW5nO1xuXHRzaWRlQ29udGVudEZhbGxEb3duPzogc3RyaW5nO1xuXHRjb250YWluZXJRdWVyeT86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdGVxdWFsU3BsaXQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTZWN0aW9uPjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblxuY29uc3QgdGFyZ2V0VGVybXM6IHN0cmluZ1tdID0gW1xuXHRVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSxcblx0VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCxcblx0VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXTtcblxuLy8gVE9ETzogTmVlZCB0byBoYW5kbGUgVGFibGUgY2FzZSBpbnNpZGUgY3JlYXRlU3ViU2VjdGlvbiBmdW5jdGlvbiBpZiBDb2xsZWN0aW9uRmFjZXQgaGFzIFRhYmxlIFJlZmVyZW5jZUZhY2V0XG5jb25zdCBoYXNUYWJsZSA9IChmYWNldHM6IGFueVtdID0gW10pID0+IHtcblx0cmV0dXJuIGZhY2V0cy5zb21lKGZhY2V0VHlwZSA9PiB0YXJnZXRUZXJtcy5pbmRleE9mKGZhY2V0VHlwZT8uVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtKSA+IC0xKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHN1YnNlY3Rpb25zIGJhc2VkIG9uIGZhY2V0IGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIHtGYWNldFR5cGVzW119IGZhY2V0Q29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGZhY2V0c1xuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtib29sZWFufSBpc0hlYWRlclNlY3Rpb24gVHJ1ZSBpZiBoZWFkZXIgc2VjdGlvbiBpcyBnZW5lcmF0ZWQgaW4gdGhpcyBpdGVyYXRpb25cbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU3ViU2VjdGlvbltdfSBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbnMoXG5cdGZhY2V0Q29sbGVjdGlvbjogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Ly8gRmlyc3Qgd2UgZGV0ZXJtaW5lIHdoaWNoIHN1YiBzZWN0aW9uIHdlIG5lZWQgdG8gY3JlYXRlXG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gZmFjZXRDb2xsZWN0aW9uLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSwgZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdFx0Ly8gVE9ETyBJZiB0aGUgQ29sbGVjdGlvbiBGYWNldCBoYXMgYSBjaGlsZCBvZiB0eXBlIENvbGxlY3Rpb24gRmFjZXQgd2UgYnJpbmcgdGhlbSB1cCBvbmUgbGV2ZWwgKEZvcm0gKyBUYWJsZSB1c2UgY2FzZSkgP1xuXHRcdFx0XHQvLyBmaXJzdCBjYXNlIGZhY2V0IENvbGxlY3Rpb24gaXMgY29tYmluYXRpb24gb2YgY29sbGVjdGlvbiBhbmQgcmVmZXJlbmNlIGZhY2V0IG9yIG5vdCBhbGwgZmFjZXRzIGFyZSByZWZlcmVuY2UgZmFjZXRzLlxuXHRcdFx0XHRpZiAoZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maW5kKGZhY2V0VHlwZSA9PiBmYWNldFR5cGUuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkpIHtcblx0XHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5zcGxpY2UoZmFjZXRzVG9DcmVhdGUubGVuZ3RoLCAwLCAuLi5mYWNldERlZmluaXRpb24uRmFjZXRzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0OlxuXHRcdFx0XHQvLyBOb3Qgc3VwcG9ydGVkXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZXRzVG9DcmVhdGU7XG5cdH0sIFtdKTtcblxuXHQvLyBUaGVuIHdlIGNyZWF0ZSB0aGUgYWN0dWFsIHN1YnNlY3Rpb25zXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoZmFjZXQgPT5cblx0XHRjcmVhdGVTdWJTZWN0aW9uKGZhY2V0LCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCwgMCwgIShmYWNldCBhcyBhbnkpPy5GYWNldHM/Lmxlbmd0aCwgaXNIZWFkZXJTZWN0aW9uKVxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc3Vic2VjdGlvbnMgYmFzZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdGhlIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9uW119IFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKClcblx0KTtcblx0Y29uc3QgYUN1c3RvbUhlYWRlckZhY2V0czogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0T2JqZWN0LmtleXMoY3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdGFDdXN0b21IZWFkZXJGYWNldHMucHVzaChjdXN0b21IZWFkZXJGYWNldHNba2V5XSk7XG5cdFx0cmV0dXJuIGFDdXN0b21IZWFkZXJGYWNldHM7XG5cdH0pO1xuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGFDdXN0b21IZWFkZXJGYWNldHMucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10sIGN1c3RvbUhlYWRlckZhY2V0KSA9PiB7XG5cdFx0aWYgKGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCkge1xuXHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChjdXN0b21IZWFkZXJGYWNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoY3VzdG9tSGVhZGVyRmFjZXQgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldCBBIGN1c3RvbSBoZWFkZXIgZmFjZXRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb259IEEgZGVmaW5pdGlvbiBmb3IgYSBzdWJzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbihjdXN0b21IZWFkZXJGYWNldDogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBDdXN0b21TdWJTZWN0aW9uSUQoY3VzdG9tSGVhZGVyRmFjZXQua2V5KTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBjdXN0b21IZWFkZXJGYWNldC5rZXksXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0LnRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50LFxuXHRcdHRlbXBsYXRlOiBjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQgfHwgXCJcIixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldC52aXNpYmxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWQsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXQuc3Rhc2hlZCxcblx0XHRmbGV4U2V0dGluZ3M6IGN1c3RvbUhlYWRlckZhY2V0LmZsZXhTZXR0aW5ncyxcblx0XHRhY3Rpb25zOiB7fVxuXHR9O1xuXHRyZXR1cm4gc3ViU2VjdGlvbjtcbn1cblxuLy8gZnVuY3Rpb24gaXNUYXJnZXRGb3JDb21wbGlhbnQoYW5ub3RhdGlvblBhdGg6IEFubm90YXRpb25QYXRoKSB7XG4vLyBcdHJldHVybiAvLipjb21cXC5zYXBcXC52b2NhYnVsYXJpZXNcXC5VSVxcLnYxXFwuKEZpZWxkR3JvdXB8SWRlbnRpZmljYXRpb258RGF0YVBvaW50fFN0YXR1c0luZm8pLiovLnRlc3QoYW5ub3RhdGlvblBhdGgudmFsdWUpO1xuLy8gfVxuY29uc3QgZ2V0U3ViU2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG4vKipcbiAqIEFkZHMgRm9ybSBtZW51IGFjdGlvbiB0byBhbGwgZm9ybSBhY3Rpb25zLCByZW1vdmVzIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBoaWRkZW4gYWN0aW9ucy5cbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdfVxuICovXG5mdW5jdGlvbiBhZGRGb3JtTWVudUFjdGlvbnMoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgaGlkZGVuQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9ybUhpZGRlbkFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSB8fCBbXSxcblx0XHRmb3JtQWN0aW9uczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiA9IGdldEZvcm1BY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Zm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdGFjdGlvbnMsXG5cdFx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucylcblx0XHQpO1xuXHRyZXR1cm4gZm9ybUFsbEFjdGlvbnMgPyBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyhyZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGZvcm1BbGxBY3Rpb25zKSkgOiBhY3Rpb25zO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0aW9uIGZvcm0gYSBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7Q29udmVydGVyQWN0aW9uW10gfCBCYXNlQWN0aW9uW119IFRoZSBjdXJyZW50IGZhY2V0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0bGV0IGFjdGlvbnMgPSBuZXcgQXJyYXk8Q29udmVydGVyQWN0aW9uPigpO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbHRlcihmYWNldERlZmluaXRpb24gPT4gaXNSZWZlcmVuY2VGYWNldChmYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW10pLnJlZHVjZShcblx0XHRcdFx0KGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLCBmYWNldERlZmluaXRpb24pID0+IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKGFjdGlvbnMsIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFtdXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdGFjdGlvbnMgPSBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihbXSwgZmFjZXREZWZpbml0aW9uIGFzIFJlZmVyZW5jZUZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBSZXRydW5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIEVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMge0J1dHRvblR5cGUgfCBzdHJpbmd9IFRoZSBidXR0b24gdHlwZSBvciBwYXRoIGJhc2VkIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGdldEJ1dHRvblR5cGUoRW1waGFzaXplZDogRW1waGFzaXplZCk6IEJ1dHRvblR5cGUgfCBzdHJpbmcge1xuXHRjb25zdCBQYXRoRm9yQnV0dG9uVHlwZTogc3RyaW5nID0gRW1waGFzaXplZD8ucGF0aDtcblx0aWYgKFBhdGhGb3JCdXR0b25UeXBlKSB7XG5cdFx0cmV0dXJuIFwiez0gXCIgKyBcIiEke1wiICsgUGF0aEZvckJ1dHRvblR5cGUgKyBcIn0gPyAnXCIgKyBCdXR0b25UeXBlLlRyYW5zcGFyZW50ICsgXCInIDogJHtcIiArIFBhdGhGb3JCdXR0b25UeXBlICsgXCJ9XCIgKyBcIn1cIjtcblx0fSBlbHNlIGlmIChFbXBoYXNpemVkKSB7XG5cdFx0cmV0dXJuIEJ1dHRvblR5cGUuR2hvc3Q7XG5cdH1cblx0cmV0dXJuIEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBGYWNldFR5cGVzLlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxldmVsXG4gKiBAcGFyYW0gaGFzU2luZ2xlQ29udGVudFxuICogQHBhcmFtIGlzSGVhZGVyU2VjdGlvblxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9ufSBBIHN1YnNlY3Rpb24gZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbihcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsZXZlbDogbnVtYmVyLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IFN1YlNlY3Rpb25JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSk7XG5cdGNvbnN0IG9IaWRkZW5Bbm5vdGF0aW9uOiBhbnkgPSBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdGNvbnN0IGlzVmlzaWJsZSA9IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbCh0cnVlLCBhbm5vdGF0aW9uRXhwcmVzc2lvbihvSGlkZGVuQW5ub3RhdGlvbikpKSk7XG5cdGNvbnN0IGlzRHluYW1pY0V4cHJlc3Npb24gPVxuXHRcdGlzVmlzaWJsZSAmJiB0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmIGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgPT09IDAgJiYgb0hpZGRlbkFubm90YXRpb24/LnR5cGUgIT09IFwiUGF0aFwiO1xuXHRjb25zdCBpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbiA9XG5cdFx0aXNWaXNpYmxlICYmIGlzRHluYW1pY0V4cHJlc3Npb24gPyBpc1Zpc2libGUuc3Vic3RyaW5nKGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgKyAyLCBpc1Zpc2libGUubGFzdEluZGV4T2YoXCJ9XCIpKSA6IGZhbHNlO1xuXHRjb25zdCB0aXRsZSA9IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGZhY2V0RGVmaW5pdGlvbi5MYWJlbCkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBCYXNlU3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogZ2V0U3ViU2VjdGlvbktleShmYWNldERlZmluaXRpb24sIHN1YlNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHR2aXNpYmxlOiBpc1Zpc2libGUsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvbixcblx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZFxuXHR9O1xuXHRpZiAoaXNIZWFkZXJTZWN0aW9uKSB7XG5cdFx0c3ViU2VjdGlvbi5zdGFzaGVkID0gZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdHN1YlNlY3Rpb24uZmxleFNldHRpbmdzID0ge1xuXHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0XHR9O1xuXHR9XG5cdGxldCBjb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj4gPSBbXTtcblx0Y29uc3QgdGFibGVDb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj4gPSBbXTtcblx0Y29uc3QgaW5kZXg6IEFycmF5PG51bWJlcj4gPSBbXTtcblx0bGV0IHVuc3VwcG9ydGVkVGV4dCA9IFwiXCI7XG5cdGxldmVsKys7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRjb25zdCBmYWNldHMgPSBmYWNldERlZmluaXRpb24uRmFjZXRzO1xuXHRcdFx0aWYgKGhhc1RhYmxlKGZhY2V0cykpIHtcblx0XHRcdFx0Ly8gaWYgd2UgaGF2ZSB0YWJsZXMgaW4gYSBjb2xsZWN0aW9uIGZhY2V0IHRoZW4gd2UgY3JlYXRlIHNlcGFyYXRlIHN1YnNlY3Rpb24gZm9yIHRoZW1cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBmYWNldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZiAodGFyZ2V0VGVybXMuaW5kZXhPZigoZmFjZXRzW2ldIGFzIGFueSkuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHQvL2NyZWF0aW5nIHNlcGFyYXRlIGFycmF5IGZvciB0YWJsZXNcblx0XHRcdFx0XHRcdHRhYmxlQ29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXRzW2ldLCBbXSwgY29udmVydGVyQ29udGV4dCwgbGV2ZWwsIGZhY2V0cy5sZW5ndGggPT09IDEsIGlzSGVhZGVyU2VjdGlvbikpO1xuXHRcdFx0XHRcdFx0aW5kZXgucHVzaChpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChsZXQgaSA9IGluZGV4Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0Ly9yZW1vdmUgdGFibGUgZmFjZXRzIGZyb20gZmFjZXQgZGVmaW5pdGlvblxuXHRcdFx0XHRcdGZhY2V0cy5zcGxpY2UoaW5kZXhbaV0sIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmYWNldHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cyA9IGZhY2V0cztcblx0XHRcdFx0XHQvL2NyZWF0ZSBhIGZvcm0gc3Vic2VjdGlvbiBmcm9tIHRoZSByZW1haW5pbmcgZmFjZXRzXG5cdFx0XHRcdFx0Y29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXREZWZpbml0aW9uLCBbXSwgY29udmVydGVyQ29udGV4dCwgbGV2ZWwsIGhhc1NpbmdsZUNvbnRlbnQsIGlzSGVhZGVyU2VjdGlvbikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRlbnQgPSBjb250ZW50LmNvbmNhdCh0YWJsZUNvbnRlbnQpO1xuXHRcdFx0XHRjb25zdCBtaXhlZFN1YlNlY3Rpb246IE1peGVkU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLk1peGVkLFxuXHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRjb250ZW50OiBjb250ZW50XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBtaXhlZFN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25zID0gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0Zm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtLFxuXHRcdFx0XHRcdFx0Zm9ybURlZmluaXRpb246IGNyZWF0ZUZvcm1EZWZpbml0aW9uKGZhY2V0RGVmaW5pdGlvbiwgaXNWaXNpYmxlLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zKSxcblx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjtcblx0XHRcdH1cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aWYgKCFmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYFVuYWJsZSB0byBmaW5kIGFubm90YXRpb25QYXRoICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdFx0XHRnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoZmFjZXREZWZpbml0aW9uLCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0aXNIZWFkZXJTZWN0aW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBhbnkpPy5hbm5vdGF0aW9uPy50aXRsZSB8fCAocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIGFueSk/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2hvd1RpdGxlID0gaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50LCBzdWJTZWN0aW9uLnRpdGxlLCBjb250cm9sVGl0bGUpO1xuXHRcdFx0XHRcdFx0Y29uc3QgdGl0bGVWaXNpYmxlRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0aXRsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAodGl0bGUgPyBpc1Zpc2libGUgOiBmYWxzZSk7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uOiBwcmVzZW50YXRpb24sXG5cdFx0XHRcdFx0XHRcdHNob3dUaXRsZTogc2hvd1RpdGxlLFxuXHRcdFx0XHRcdFx0XHR0aXRsZVZpc2libGU6IGlzRHluYW1pY0V4cHJlc3Npb25cblx0XHRcdFx0XHRcdFx0XHQ/IGB7PSAoJHtpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbn0pICYmICgnJHt0aXRsZX0nICE9PSd1bmRlZmluZWQnKSAmJiAoJHtzaG93VGl0bGV9ID8gdHJ1ZSA6IGZhbHNlKSB9YFxuXHRcdFx0XHRcdFx0XHRcdDogdGl0bGVWaXNpYmxlRXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmb3JtIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBhY3Rpb25zID0gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50U3ViU2VjdGlvbjogRm9ybVN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtLFxuXHRcdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBpc1Zpc2libGUsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHRleHQ6IHVuc3VwcG9ydGVkVGV4dFxuXHR9O1xuXHRyZXR1cm4gdW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xufVxuZnVuY3Rpb24gaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLCBzdWJTZWN0aW9uVGl0bGU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4sIGNvbnRyb2xUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGlmIChoYXNTaW5nbGVDb250ZW50ICYmIGNvbnRyb2xUaXRsZSA9PT0gc3ViU2VjdGlvblRpdGxlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgcmVmZXJlbmNlVGFyZ2V0OiBBbm5vdGF0aW9uVGVybTxhbnk+ID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0O1xuXHRjb25zdCB0YXJnZXRWYWx1ZSA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWU7XG5cdGxldCBtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblx0bGV0IGRhdGFGaWVsZENvbGxlY3Rpb246IERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXSA9IFtdO1xuXHRsZXQgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGhdOiBhbnkgPSB0YXJnZXRWYWx1ZS5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA+IDApIHtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAocmVmZXJlbmNlVGFyZ2V0KSB7XG5cdFx0c3dpdGNoIChyZWZlcmVuY2VUYXJnZXQudGVybSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gKHJlZmVyZW5jZVRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhO1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnMsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSBhcyBzdHJpbmdcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TdGF0dXNJbmZvOlxuXHRcdFx0XHRpZiAocmVmZXJlbmNlVGFyZ2V0LnF1YWxpZmllcikge1xuXHRcdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSByZWZlcmVuY2VUYXJnZXQgYXMgSWRlbnRpZmljYXRpb24gfCBTdGF0dXNJbmZvO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGFjdGlvbnMgPSBkYXRhRmllbGRDb2xsZWN0aW9uLnJlZHVjZSgoYWN0aW9ucywgZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0Y29uc3QgVUlBbm5vdGF0aW9uOiBhbnkgPSBkYXRhRmllbGQ/LmFubm90YXRpb25zPy5VSTtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uUkVRVUlSRVNDT05URVhUKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLklOTElORSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGRhdGFGaWVsZC5NYXBwaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdGlkOiBGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdD8gY29tcGlsZUJpbmRpbmcoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSksIHRydWUpKVxuXHRcdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKFVJQW5ub3RhdGlvbj8uRW1waGFzaXplZCksXG5cdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Zm4oXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLCBbXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBjb21waWxlQmluZGluZyh7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdGFjdGlvbjogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbilcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0Y29uc3QgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb246IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGtleTogc3RyaW5nID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0XHRhY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdGlkOiBGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBcInsgJ3BhdGgnIDogJ1wiICsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCArIFwiJ31cIiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdHJlcXVpcmVzRGlhbG9nOiBpc0RpYWxvZyhkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKFVJQW5ub3RhdGlvbj8uRW1waGFzaXplZCksXG5cdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0XHRcdFwiaW52b2tlQWN0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRzOiBmbihcImdldEJpbmRpbmdDb250ZXh0XCIsIFtdLCBiaW5kaW5nRXhwcmVzc2lvbihcIlwiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiAoZGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiKSBhcyBPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkxhYmVsKSxcblx0XHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBmbihcImdldE1vZGVsXCIsIFtdLCBiaW5kaW5nRXhwcmVzc2lvbihcIi9cIiwgXCIkc291cmNlXCIpKSxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiBpc0FjdGlvbk5hdmlnYWJsZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gJiYgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb25ba2V5XVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0cmVmKFwiLmVkaXRGbG93XCIpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmYWNldE5hbWU6IGRhdGFGaWVsZC5JbmxpbmUgPyAoZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGFjdGlvbnM7XG5cdH0sIGFjdGlvbnMpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nKGFjdGlvbkRlZmluaXRpb246IGFueSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGlmIChhY3Rpb25EZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgYkNyaXRpY2FsID0gYWN0aW9uRGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0FjdGlvbkNyaXRpY2FsO1xuXHRcdGlmIChhY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMubGVuZ3RoID4gMSB8fCBiQ3JpdGljYWwpIHtcblx0XHRcdHJldHVybiBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMoXG5cdG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4gPSB7fTtcblx0T2JqZWN0LmtleXMobWFuaWZlc3RTdWJTZWN0aW9ucykuZm9yRWFjaChcblx0XHRzdWJTZWN0aW9uS2V5ID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHNpZGVDb250ZW50OiBTaWRlQ29udGVudERlZiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudFxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LnRlbXBsYXRlLFxuXHRcdFx0XHRpZDogU2lkZUNvbnRlbnRJRChzdWJTZWN0aW9uS2V5KSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdGVxdWFsU3BsaXQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC5lcXVhbFNwbGl0XG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCBwb3NpdGlvbiA9IG1hbmlmZXN0U3ViU2VjdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25EZWZpbml0aW9uID0ge1xuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0aWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5pZCB8fCBDdXN0b21TdWJTZWN0aW9uSUQoc3ViU2VjdGlvbktleSksXG5cdFx0YWN0aW9uczogZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFN1YlNlY3Rpb24uYWN0aW9ucywgY29udmVydGVyQ29udGV4dCksXG5cdFx0a2V5OiBzdWJTZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udGl0bGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHZpc2libGU6IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSA6IHRydWUsXG5cdFx0c2lkZUNvbnRlbnQ6IHNpZGVDb250ZW50XG5cdH07XG5cdGlmIChtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUpIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdFx0KChzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyB1bmtub3duKSBhcyBYTUxGcmFnbWVudFN1YlNlY3Rpb24pLnRlbXBsYXRlID1cblx0XHRcdG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSB8fCBcIlwiO1xuXHR9IGVsc2Uge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0fVxuXHRyZXR1cm4gc3ViU2VjdGlvbkRlZmluaXRpb24gYXMgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIGNvbmRlbnNlZCBtb2RlIGNhbiBiZSBhcHBsaTNlZCBvbiB0aGUgdGFibGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnRGYWNldFxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgZm9yIGNvbXBsaWFudCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZShcblx0Y3VycmVudEZhY2V0OiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBib29sZWFuIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKCkpIHtcblx0XHQvLyBJZiB0aGUgT1AgdXNlIHRoZSB0YWIgYmFzZWQgd2UgY2hlY2sgaWYgdGhlIGZhY2V0cyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBzZWN0aW9uIGFyZSBhbGwgbm9uIHZpc2libGVcblx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0aWYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCAmJiBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0OiBGYWNldFR5cGVzLCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbi5ldmVyeShmdW5jdGlvbihzdWJGYWNldCkge1xuXHRcdGlmIChzdWJGYWNldCAhPT0gY3VycmVudEZhY2V0KSB7XG5cdFx0XHRpZiAoc3ViRmFjZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdGNvbnN0IHJlZkZhY2V0ID0gc3ViRmFjZXQgYXMgUmVmZXJlbmNlRmFjZXRUeXBlcztcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQgfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQuJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzdWJDb2xsZWN0aW9uRmFjZXQgPSBzdWJGYWNldCBhcyBDb2xsZWN0aW9uRmFjZXRUeXBlcztcblx0XHRcdFx0cmV0dXJuIHN1YkNvbGxlY3Rpb25GYWNldC5GYWNldHMuZXZlcnkoZnVuY3Rpb24oZmFjZXQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJSZWZGYWNldCA9IGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG4iXX0=
|
|
687
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwibmFtZXMiOlsiU3ViU2VjdGlvblR5cGUiLCJ0YXJnZXRUZXJtcyIsImhhc1RhYmxlIiwiZmFjZXRzIiwic29tZSIsImZhY2V0VHlwZSIsImluZGV4T2YiLCJUYXJnZXQiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjdXN0b21IZWFkZXJGYWNldCIsInRlbXBsYXRlRWRpdCIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbiIsInN1YlNlY3Rpb25JRCIsIkN1c3RvbVN1YlNlY3Rpb25JRCIsInN1YlNlY3Rpb24iLCJpZCIsInRpdGxlIiwidHlwZSIsIlhNTEZyYWdtZW50IiwidGVtcGxhdGUiLCJ2aXNpYmxlIiwibGV2ZWwiLCJzaWRlQ29udGVudCIsInVuZGVmaW5lZCIsInN0YXNoZWQiLCJmbGV4U2V0dGluZ3MiLCJhY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbktleSIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiYWRkRm9ybU1lbnVBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImdldEZvcm1IaWRkZW5BY3Rpb25zIiwiZm9ybUFjdGlvbnMiLCJnZXRGb3JtQWN0aW9ucyIsImZvcm1BbGxBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiY29tbWFuZCIsImdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsImdldEZhY2V0QWN0aW9ucyIsIkFycmF5IiwiZmlsdGVyIiwiaXNSZWZlcmVuY2VGYWNldCIsImNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyIiwiZ2V0QnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJQYXRoRm9yQnV0dG9uVHlwZSIsInBhdGgiLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJHaG9zdCIsImhhc1NpbmdsZUNvbnRlbnQiLCJTdWJTZWN0aW9uSUQiLCJGYWNldCIsIm9IaWRkZW5Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsImlzVmlzaWJsZSIsImNvbXBpbGVCaW5kaW5nIiwibm90IiwiZXF1YWwiLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsImlzRHluYW1pY0V4cHJlc3Npb24iLCJpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbiIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiVW5rbm93biIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImRlc2lnbnRpbWUiLCJnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiY29udGVudCIsInRhYmxlQ29udGVudCIsImluZGV4IiwidW5zdXBwb3J0ZWRUZXh0IiwiaSIsImNvbmNhdCIsIm1peGVkU3ViU2VjdGlvbiIsIk1peGVkIiwiZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uIiwiRm9ybSIsImZvcm1EZWZpbml0aW9uIiwiY3JlYXRlRm9ybURlZmluaXRpb24iLCJhY3Rpb24iLCJmYWNldE5hbWUiLCJ2YWx1ZSIsInByZXNlbnRhdGlvbiIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZSIsImNvbnRyb2xUaXRsZSIsInZpc3VhbGl6YXRpb25zIiwiYW5ub3RhdGlvbiIsInNob3dUaXRsZSIsImlzU3Vic2VjdGlvblRpdGxlU2hvd24iLCJ0aXRsZVZpc2libGVFeHByZXNzaW9uIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJ0aXRsZVZpc2libGUiLCJmb3JtRWxlbWVudFN1YlNlY3Rpb24iLCJ1bnN1cHBvcnRlZFN1YlNlY3Rpb24iLCJ0ZXh0Iiwic3ViU2VjdGlvblRpdGxlIiwicmVmZXJlbmNlVGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJtYW5pZmVzdEFjdGlvbnMiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwic3BsaXQiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3Vic3RyIiwiRGF0YSIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJxdWFsaWZpZXIiLCJkYXRhRmllbGQiLCJVSUFubm90YXRpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJ2YWx1ZU9mIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsIkZvcm1JRCIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImVuYWJsZWQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiYnV0dG9uVHlwZSIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJBY3Rpb25UYXJnZXQiLCJiaW5kaW5nIiwicmVxdWlyZXNEaWFsb2ciLCJpc0RpYWxvZyIsImNvbnRleHRzIiwiYmluZGluZ0V4cHJlc3Npb24iLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIm1vZGVsIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsInJlZiIsImFjdGlvbkRlZmluaXRpb24iLCJiQ3JpdGljYWwiLCJDb21tb24iLCJJc0FjdGlvbkNyaXRpY2FsIiwicGFyYW1ldGVycyIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbktleSIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24iLCJtYW5pZmVzdFN1YlNlY3Rpb24iLCJTaWRlQ29udGVudElEIiwiZXF1YWxTcGxpdCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJzdWJTZWN0aW9uRGVmaW5pdGlvbiIsIm5hbWUiLCJQbGFjZWhvbGRlciIsImN1cnJlbnRGYWNldCIsImZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uIiwibWFuaWZlc3RXcmFwcGVyIiwidXNlSWNvblRhYkJhciIsImhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsImV2ZXJ5Iiwic3ViRmFjZXQiLCJyZWZGYWNldCIsInN1YkNvbGxlY3Rpb25GYWNldCIsInN1YlJlZkZhY2V0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQWtEWUEsYzs7YUFBQUEsYztBQUFBQSxJQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztLQUFBQSxjLEtBQUFBLGM7OztBQTRGWixNQUFNQyxXQUFxQixHQUFHLG9KQUE5QixDLENBTUE7O0FBQ0EsTUFBTUMsUUFBUSxHQUFHLFlBQXdCO0FBQUEsUUFBdkJDLE1BQXVCLHVFQUFQLEVBQU87QUFDeEMsV0FBT0EsTUFBTSxDQUFDQyxJQUFQLENBQVksVUFBQ0MsU0FBRDtBQUFBOztBQUFBLGFBQWVKLFdBQVcsQ0FBQ0ssT0FBWixDQUFvQkQsU0FBcEIsYUFBb0JBLFNBQXBCLDRDQUFvQkEsU0FBUyxDQUFFRSxNQUEvQiwrRUFBb0Isa0JBQW1CQyxPQUF2QywwREFBb0Isc0JBQTRCQyxJQUFoRCxJQUF3RCxDQUFDLENBQXhFO0FBQUEsS0FBWixDQUFQO0FBQ0EsR0FGRDtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFdBQVNDLGlCQUFULENBQ05DLGVBRE0sRUFFTkMsZ0JBRk0sRUFHTkMsZUFITSxFQUltQjtBQUN6QjtBQUNBLFFBQU1DLGNBQWMsR0FBR0gsZUFBZSxDQUFDSSxNQUFoQixDQUF1QixVQUFDRCxjQUFELEVBQStCRSxlQUEvQixFQUFtRDtBQUNoRyxjQUFRQSxlQUFlLENBQUNDLEtBQXhCO0FBQ0M7QUFDQ0gsVUFBQUEsY0FBYyxDQUFDSSxJQUFmLENBQW9CRixlQUFwQjtBQUNBOztBQUNEO0FBQ0M7QUFDQTtBQUNBLGNBQUlBLGVBQWUsQ0FBQ0cs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QUFwQixnRkFBNkJDLElBQTdCLCtEQUhELEVBSUU7QUFBQTs7QUFDRCxxQkFBTywwQkFBQTROLFdBQVcsQ0FBQy9JLFdBQVosMEdBQXlCQyxFQUF6QixrRkFBNkJDLE1BQTdCLE1BQXdDdEMsU0FBeEMsNkJBQW9EbUwsV0FBVyxDQUFDL0ksV0FBaEUscUZBQW9ELHVCQUF5QkMsRUFBN0UsMkRBQW9ELHVCQUE2QkMsTUFBakYsR0FBMEYsS0FBakc7QUFDQTs7QUFDRCxtQkFBTyxJQUFQO0FBQ0EsV0FWTSxDQUFQO0FBV0E7QUFDRDs7QUFDRCxhQUFPLElBQVA7QUFDQSxLQTVCTSxDQUFQO0FBNkJBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBbm5vdGF0aW9uVGVybSxcblx0Q29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdEZhY2V0VHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdElkZW50aWZpY2F0aW9uLFxuXHRPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdFN0YXR1c0luZm8sXG5cdFVJQW5ub3RhdGlvblRlcm1zLFxuXHRVSUFubm90YXRpb25UeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQ29tbXVuaWNhdGlvblwiO1xuaW1wb3J0IHtcblx0QmFzZUFjdGlvbixcblx0QnV0dG9uVHlwZSxcblx0Q29udmVydGVyQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCxcblx0RmxleFNldHRpbmdzLFxuXHRnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0LFxuXHRnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QsXG5cdGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHtcblx0YW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGVxdWFsLFxuXHRmbixcblx0bm90LFxuXHRyZWZcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgQ3VzdG9tU3ViU2VjdGlvbklELCBGb3JtSUQsIFNpZGVDb250ZW50SUQsIFN1YlNlY3Rpb25JRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlLCBNYW5pZmVzdEFjdGlvbiwgTWFuaWZlc3RTdWJTZWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEZvcm1BY3Rpb25zLCBnZXRGb3JtSGlkZGVuQWN0aW9ucywgZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMgfSBmcm9tIFwiLi4vLi4vb2JqZWN0UGFnZS9Gb3JtTWVudUFjdGlvbnNcIjtcbmltcG9ydCB7IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24sIEZvcm1EZWZpbml0aW9uLCBpc1JlZmVyZW5jZUZhY2V0IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5cbmV4cG9ydCBlbnVtIFN1YlNlY3Rpb25UeXBlIHtcblx0VW5rbm93biA9IFwiVW5rbm93blwiLCAvLyBEZWZhdWx0IFR5cGVcblx0Rm9ybSA9IFwiRm9ybVwiLFxuXHREYXRhVmlzdWFsaXphdGlvbiA9IFwiRGF0YVZpc3VhbGl6YXRpb25cIixcblx0WE1MRnJhZ21lbnQgPSBcIlhNTEZyYWdtZW50XCIsXG5cdFBsYWNlaG9sZGVyID0gXCJQbGFjZWhvbGRlclwiLFxuXHRNaXhlZCA9IFwiTWl4ZWRcIlxufVxuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiA9XG5cdHwgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uXG5cdHwgRm9ybVN1YlNlY3Rpb25cblx0fCBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb25cblx0fCBDb250YWN0U3ViU2VjdGlvblxuXHR8IFhNTEZyYWdtZW50U3ViU2VjdGlvblxuXHR8IFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgTWl4ZWRTdWJTZWN0aW9uO1xuXG50eXBlIEJhc2VTdWJTZWN0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0dGl0bGU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz47XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlO1xuXHR2aXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0aXNWaXNpYmlsaXR5RHluYW1pYz86IGJvb2xlYW4gfCBcIlwiO1xuXHRmbGV4U2V0dGluZ3M/OiBGbGV4U2V0dGluZ3M7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRsZXZlbDogbnVtYmVyO1xuXHRjb250ZW50PzogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXHRzaWRlQ29udGVudD86IFNpZGVDb250ZW50RGVmO1xufTtcblxudHlwZSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dGV4dDogc3RyaW5nO1xufTtcblxudHlwZSBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb247XG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzaG93VGl0bGU6IGJvb2xlYW47XG5cdHRpdGxlVmlzaWJsZT86IHN0cmluZyB8IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRhY3RTdWJTZWN0aW9uID0gVW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xuXG50eXBlIFhNTEZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBFbXBoYXNpemVkID0ge1xuXHRwYXRoOiBzdHJpbmc7XG59O1xuXG50eXBlIFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG50eXBlIE1peGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHRjb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtO1xuXHRmb3JtRGVmaW5pdGlvbjogRm9ybURlZmluaXRpb247XG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdIHwgQmFzZUFjdGlvbltdO1xufTtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHRpdGxlOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRzaG93VGl0bGU/OiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0dmlzaWJsZTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xufTtcblxudHlwZSBTaWRlQ29udGVudERlZiA9IHtcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGlkPzogc3RyaW5nO1xuXHRzaWRlQ29udGVudEZhbGxEb3duPzogc3RyaW5nO1xuXHRjb250YWluZXJRdWVyeT86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdGVxdWFsU3BsaXQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTZWN0aW9uPjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblxuY29uc3QgdGFyZ2V0VGVybXM6IHN0cmluZ1tdID0gW1xuXHRVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSxcblx0VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCxcblx0VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXTtcblxuLy8gVE9ETzogTmVlZCB0byBoYW5kbGUgVGFibGUgY2FzZSBpbnNpZGUgY3JlYXRlU3ViU2VjdGlvbiBmdW5jdGlvbiBpZiBDb2xsZWN0aW9uRmFjZXQgaGFzIFRhYmxlIFJlZmVyZW5jZUZhY2V0XG5jb25zdCBoYXNUYWJsZSA9IChmYWNldHM6IGFueVtdID0gW10pID0+IHtcblx0cmV0dXJuIGZhY2V0cy5zb21lKChmYWNldFR5cGUpID0+IHRhcmdldFRlcm1zLmluZGV4T2YoZmFjZXRUeXBlPy5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pID4gLTEpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgc3Vic2VjdGlvbnMgYmFzZWQgb24gZmFjZXQgZGVmaW5pdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZhY2V0VHlwZXNbXX0gZmFjZXRDb2xsZWN0aW9uIENvbGxlY3Rpb24gb2YgZmFjZXRzXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSGVhZGVyU2VjdGlvbiBUcnVlIGlmIGhlYWRlciBzZWN0aW9uIGlzIGdlbmVyYXRlZCBpbiB0aGlzIGl0ZXJhdGlvblxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9uW119IFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9ucyhcblx0ZmFjZXRDb2xsZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzSGVhZGVyU2VjdGlvbj86IGJvb2xlYW5cbik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHQvLyBGaXJzdCB3ZSBkZXRlcm1pbmUgd2hpY2ggc3ViIHNlY3Rpb24gd2UgbmVlZCB0byBjcmVhdGVcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBmYWNldENvbGxlY3Rpb24ucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLCBmYWNldERlZmluaXRpb24pID0+IHtcblx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0XHQvLyBUT0RPIElmIHRoZSBDb2xsZWN0aW9uIEZhY2V0IGhhcyBhIGNoaWxkIG9mIHR5cGUgQ29sbGVjdGlvbiBGYWNldCB3ZSBicmluZyB0aGVtIHVwIG9uZSBsZXZlbCAoRm9ybSArIFRhYmxlIHVzZSBjYXNlKSA/XG5cdFx0XHRcdC8vIGZpcnN0IGNhc2UgZmFjZXQgQ29sbGVjdGlvbiBpcyBjb21iaW5hdGlvbiBvZiBjb2xsZWN0aW9uIGFuZCByZWZlcmVuY2UgZmFjZXQgb3Igbm90IGFsbCBmYWNldHMgYXJlIHJlZmVyZW5jZSBmYWNldHMuXG5cdFx0XHRcdGlmIChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbmQoKGZhY2V0VHlwZSkgPT4gZmFjZXRUeXBlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpKSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUuc3BsaWNlKGZhY2V0c1RvQ3JlYXRlLmxlbmd0aCwgMCwgLi4uZmFjZXREZWZpbml0aW9uLkZhY2V0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdFx0Ly8gTm90IHN1cHBvcnRlZFxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlO1xuXHR9LCBbXSk7XG5cblx0Ly8gVGhlbiB3ZSBjcmVhdGUgdGhlIGFjdHVhbCBzdWJzZWN0aW9uc1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKChmYWNldCkgPT5cblx0XHRjcmVhdGVTdWJTZWN0aW9uKGZhY2V0LCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCwgMCwgIShmYWNldCBhcyBhbnkpPy5GYWNldHM/Lmxlbmd0aCwgaXNIZWFkZXJTZWN0aW9uKVxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc3Vic2VjdGlvbnMgYmFzZWQgb24gdGhlIGRlZmluaXRpb24gb2YgdGhlIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9uW119IFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKClcblx0KTtcblx0Y29uc3QgYUN1c3RvbUhlYWRlckZhY2V0czogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0T2JqZWN0LmtleXMoY3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRhQ3VzdG9tSGVhZGVyRmFjZXRzLnB1c2goY3VzdG9tSGVhZGVyRmFjZXRzW2tleV0pO1xuXHRcdHJldHVybiBhQ3VzdG9tSGVhZGVyRmFjZXRzO1xuXHR9KTtcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBhQ3VzdG9tSGVhZGVyRmFjZXRzLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldFtdLCBjdXN0b21IZWFkZXJGYWNldCkgPT4ge1xuXHRcdGlmIChjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQpIHtcblx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goY3VzdG9tSGVhZGVyRmFjZXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZXRzVG9DcmVhdGU7XG5cdH0sIFtdKTtcblxuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKChjdXN0b21IZWFkZXJGYWNldCkgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldCBBIGN1c3RvbSBoZWFkZXIgZmFjZXRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb259IEEgZGVmaW5pdGlvbiBmb3IgYSBzdWJzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbihjdXN0b21IZWFkZXJGYWNldDogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBDdXN0b21TdWJTZWN0aW9uSUQoY3VzdG9tSGVhZGVyRmFjZXQua2V5KTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBjdXN0b21IZWFkZXJGYWNldC5rZXksXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0LnRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50LFxuXHRcdHRlbXBsYXRlOiBjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQgfHwgXCJcIixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldC52aXNpYmxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWQsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXQuc3Rhc2hlZCxcblx0XHRmbGV4U2V0dGluZ3M6IGN1c3RvbUhlYWRlckZhY2V0LmZsZXhTZXR0aW5ncyxcblx0XHRhY3Rpb25zOiB7fVxuXHR9O1xuXHRyZXR1cm4gc3ViU2VjdGlvbjtcbn1cblxuLy8gZnVuY3Rpb24gaXNUYXJnZXRGb3JDb21wbGlhbnQoYW5ub3RhdGlvblBhdGg6IEFubm90YXRpb25QYXRoKSB7XG4vLyBcdHJldHVybiAvLipjb21cXC5zYXBcXC52b2NhYnVsYXJpZXNcXC5VSVxcLnYxXFwuKEZpZWxkR3JvdXB8SWRlbnRpZmljYXRpb258RGF0YVBvaW50fFN0YXR1c0luZm8pLiovLnRlc3QoYW5ub3RhdGlvblBhdGgudmFsdWUpO1xuLy8gfVxuY29uc3QgZ2V0U3ViU2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG4vKipcbiAqIEFkZHMgRm9ybSBtZW51IGFjdGlvbiB0byBhbGwgZm9ybSBhY3Rpb25zLCByZW1vdmVzIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBoaWRkZW4gYWN0aW9ucy5cbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdfVxuICovXG5mdW5jdGlvbiBhZGRGb3JtTWVudUFjdGlvbnMoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgaGlkZGVuQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9ybUhpZGRlbkFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSB8fCBbXSxcblx0XHRmb3JtQWN0aW9uczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiA9IGdldEZvcm1BY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Zm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdGFjdGlvbnMsXG5cdFx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucyksXG5cdFx0XHR7IGNvbW1hbmQ6IFwib3ZlcndyaXRlXCIgfVxuXHRcdCk7XG5cdHJldHVybiBmb3JtQWxsQWN0aW9ucyA/IGdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zKHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpKSA6IGFjdGlvbnM7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhY3Rpb24gZm9ybSBhIGZhY2V0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtDb252ZXJ0ZXJBY3Rpb25bXSB8IEJhc2VBY3Rpb25bXX0gVGhlIGN1cnJlbnQgZmFjZXQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHwgQ29udmVydGVyQWN0aW9uW10ge1xuXHRsZXQgYWN0aW9ucyA9IG5ldyBBcnJheTxDb252ZXJ0ZXJBY3Rpb24+KCk7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gKFxuXHRcdFx0XHRmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbHRlcigoZmFjZXREZWZpbml0aW9uKSA9PiBpc1JlZmVyZW5jZUZhY2V0KGZhY2V0RGVmaW5pdGlvbikpIGFzIFJlZmVyZW5jZUZhY2V0VHlwZXNbXVxuXHRcdFx0KS5yZWR1Y2UoXG5cdFx0XHRcdChhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSwgZmFjZXREZWZpbml0aW9uKSA9PiBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRbXVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoW10sIGZhY2V0RGVmaW5pdGlvbiBhcyBSZWZlcmVuY2VGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBhZGRGb3JtTWVudUFjdGlvbnMoYWN0aW9ucywgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cbi8qKlxuICogUmV0cnVucyB0aGUgYnV0dG9uIHR5cGUgYmFzZWQgb24gQFVJLkVtcGhhc2l6ZWQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBFbXBoYXNpemVkIEVtcGhhc2l6ZWQgYW5ub3RhdGlvbiB2YWx1ZS5cbiAqIEByZXR1cm5zIHtCdXR0b25UeXBlIHwgc3RyaW5nfSBUaGUgYnV0dG9uIHR5cGUgb3IgcGF0aCBiYXNlZCBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBnZXRCdXR0b25UeXBlKEVtcGhhc2l6ZWQ6IEVtcGhhc2l6ZWQpOiBCdXR0b25UeXBlIHwgc3RyaW5nIHtcblx0Y29uc3QgUGF0aEZvckJ1dHRvblR5cGU6IHN0cmluZyA9IEVtcGhhc2l6ZWQ/LnBhdGg7XG5cdGlmIChQYXRoRm9yQnV0dG9uVHlwZSkge1xuXHRcdHJldHVybiBcIns9IFwiICsgXCIhJHtcIiArIFBhdGhGb3JCdXR0b25UeXBlICsgXCJ9ID8gJ1wiICsgQnV0dG9uVHlwZS5UcmFuc3BhcmVudCArIFwiJyA6ICR7XCIgKyBQYXRoRm9yQnV0dG9uVHlwZSArIFwifVwiICsgXCJ9XCI7XG5cdH0gZWxzZSBpZiAoRW1waGFzaXplZCkge1xuXHRcdHJldHVybiBCdXR0b25UeXBlLkdob3N0O1xuXHR9XG5cdHJldHVybiBCdXR0b25UeXBlLlRyYW5zcGFyZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN1YnNlY3Rpb24gYmFzZWQgb24gRmFjZXRUeXBlcy5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBsZXZlbFxuICogQHBhcmFtIGhhc1NpbmdsZUNvbnRlbnRcbiAqIEBwYXJhbSBpc0hlYWRlclNlY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU3ViU2VjdGlvbn0gQSBzdWJzZWN0aW9uIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YlNlY3Rpb24oXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bGV2ZWw6IG51bWJlcixcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhbixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhblxuKTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBTdWJTZWN0aW9uSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0pO1xuXHRjb25zdCBvSGlkZGVuQW5ub3RhdGlvbjogYW55ID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRjb25zdCBpc1Zpc2libGUgPSBjb21waWxlQmluZGluZyhub3QoZXF1YWwodHJ1ZSwgYW5ub3RhdGlvbkV4cHJlc3Npb24ob0hpZGRlbkFubm90YXRpb24pKSkpO1xuXHRjb25zdCBpc0R5bmFtaWNFeHByZXNzaW9uID1cblx0XHRpc1Zpc2libGUgJiYgdHlwZW9mIGlzVmlzaWJsZSA9PT0gXCJzdHJpbmdcIiAmJiBpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpID09PSAwICYmIG9IaWRkZW5Bbm5vdGF0aW9uPy50eXBlICE9PSBcIlBhdGhcIjtcblx0Y29uc3QgaXNWaXNpYmxlRHluYW1pY0V4cHJlc3Npb24gPVxuXHRcdGlzVmlzaWJsZSAmJiBpc0R5bmFtaWNFeHByZXNzaW9uID8gaXNWaXNpYmxlLnN1YnN0cmluZyhpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpICsgMiwgaXNWaXNpYmxlLmxhc3RJbmRleE9mKFwifVwiKSkgOiBmYWxzZTtcblx0Y29uc3QgdGl0bGUgPSBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihmYWNldERlZmluaXRpb24uTGFiZWwpKTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogQmFzZVN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGdldFN1YlNlY3Rpb25LZXkoZmFjZXREZWZpbml0aW9uLCBzdWJTZWN0aW9uSUQpLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0dmlzaWJsZTogaXNWaXNpYmxlLFxuXHRcdGlzVmlzaWJpbGl0eUR5bmFtaWM6IGlzRHluYW1pY0V4cHJlc3Npb24sXG5cdFx0bGV2ZWw6IGxldmVsLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWRcblx0fTtcblx0aWYgKGlzSGVhZGVyU2VjdGlvbikge1xuXHRcdHN1YlNlY3Rpb24uc3Rhc2hlZCA9IGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRzdWJTZWN0aW9uLmZsZXhTZXR0aW5ncyA9IHtcblx0XHRcdGRlc2lnbnRpbWU6IGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0fTtcblx0fVxuXHRsZXQgY29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0gW107XG5cdGNvbnN0IHRhYmxlQ29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0gW107XG5cdGNvbnN0IGluZGV4OiBBcnJheTxudW1iZXI+ID0gW107XG5cdGxldCB1bnN1cHBvcnRlZFRleHQgPSBcIlwiO1xuXHRsZXZlbCsrO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0Y29uc3QgZmFjZXRzID0gZmFjZXREZWZpbml0aW9uLkZhY2V0cztcblx0XHRcdGlmIChoYXNUYWJsZShmYWNldHMpKSB7XG5cdFx0XHRcdC8vIGlmIHdlIGhhdmUgdGFibGVzIGluIGEgY29sbGVjdGlvbiBmYWNldCB0aGVuIHdlIGNyZWF0ZSBzZXBhcmF0ZSBzdWJzZWN0aW9uIGZvciB0aGVtXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmFjZXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKHRhcmdldFRlcm1zLmluZGV4T2YoKGZhY2V0c1tpXSBhcyBhbnkpLlRhcmdldD8uJHRhcmdldD8udGVybSkgPiAtMSkge1xuXHRcdFx0XHRcdFx0Ly9jcmVhdGluZyBzZXBhcmF0ZSBhcnJheSBmb3IgdGFibGVzXG5cdFx0XHRcdFx0XHR0YWJsZUNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZhY2V0c1tpXSwgW10sIGNvbnZlcnRlckNvbnRleHQsIGxldmVsLCBmYWNldHMubGVuZ3RoID09PSAxLCBpc0hlYWRlclNlY3Rpb24pKTtcblx0XHRcdFx0XHRcdGluZGV4LnB1c2goaSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAobGV0IGkgPSBpbmRleC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHRcdC8vcmVtb3ZlIHRhYmxlIGZhY2V0cyBmcm9tIGZhY2V0IGRlZmluaXRpb25cblx0XHRcdFx0XHRmYWNldHMuc3BsaWNlKGluZGV4W2ldLCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmFjZXRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5GYWNldHMgPSBmYWNldHM7XG5cdFx0XHRcdFx0Ly9jcmVhdGUgYSBmb3JtIHN1YnNlY3Rpb24gZnJvbSB0aGUgcmVtYWluaW5nIGZhY2V0c1xuXHRcdFx0XHRcdGNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZhY2V0RGVmaW5pdGlvbiwgW10sIGNvbnZlcnRlckNvbnRleHQsIGxldmVsLCBoYXNTaW5nbGVDb250ZW50LCBpc0hlYWRlclNlY3Rpb24pKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250ZW50ID0gY29udGVudC5jb25jYXQodGFibGVDb250ZW50KTtcblx0XHRcdFx0Y29uc3QgbWl4ZWRTdWJTZWN0aW9uOiBNaXhlZFN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5NaXhlZCxcblx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0Y29udGVudDogY29udGVudFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gbWl4ZWRTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9ucyA9IGdldEZhY2V0QWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjogRm9ybVN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybSxcblx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihmYWNldERlZmluaXRpb24sIGlzVmlzaWJsZSwgY29udmVydGVyQ29udGV4dCwgYWN0aW9ucyksXG5cdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjtcblx0XHRcdH1cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aWYgKCFmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYFVuYWJsZSB0byBmaW5kIGFubm90YXRpb25QYXRoICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdFx0XHRnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoZmFjZXREZWZpbml0aW9uLCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0aXNIZWFkZXJTZWN0aW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBhbnkpPy5hbm5vdGF0aW9uPy50aXRsZSB8fCAocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIGFueSk/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2hvd1RpdGxlID0gaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50LCBzdWJTZWN0aW9uLnRpdGxlLCBjb250cm9sVGl0bGUpO1xuXHRcdFx0XHRcdFx0Y29uc3QgdGl0bGVWaXNpYmxlRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0aXRsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAodGl0bGUgPyBpc1Zpc2libGUgOiBmYWxzZSk7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uOiBwcmVzZW50YXRpb24sXG5cdFx0XHRcdFx0XHRcdHNob3dUaXRsZTogc2hvd1RpdGxlLFxuXHRcdFx0XHRcdFx0XHR0aXRsZVZpc2libGU6IGlzRHluYW1pY0V4cHJlc3Npb25cblx0XHRcdFx0XHRcdFx0XHQ/IGB7PSAoJHtpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbn0pICYmICgnJHt0aXRsZX0nICE9PSd1bmRlZmluZWQnKSAmJiAoJHtzaG93VGl0bGV9ID8gdHJ1ZSA6IGZhbHNlKSB9YFxuXHRcdFx0XHRcdFx0XHRcdDogdGl0bGVWaXNpYmxlRXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmb3JtIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBhY3Rpb25zID0gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50U3ViU2VjdGlvbjogRm9ybVN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtLFxuXHRcdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBpc1Zpc2libGUsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5mYWNldE5hbWUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBmb3JtRWxlbWVudFN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYEZvciAke2ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtfSBGcmFnbWVudGA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IFwiRm9yIFJlZmVyZW5jZSBVUkwgRmFjZXRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHQvLyBJZiB3ZSByZWFjaCBoZXJlIHdlIGVuZGVkIHVwIHdpdGggYW4gdW5zdXBwb3J0ZWQgU3ViU2VjdGlvbiB0eXBlXG5cdGNvbnN0IHVuc3VwcG9ydGVkU3ViU2VjdGlvbjogVW5zdXBwb3J0ZWRTdWJTZWN0aW9uID0ge1xuXHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5mdW5jdGlvbiBpc1N1YnNlY3Rpb25UaXRsZVNob3duKGhhc1NpbmdsZUNvbnRlbnQ6IGJvb2xlYW4sIHN1YlNlY3Rpb25UaXRsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiwgY29udHJvbFRpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0aWYgKGhhc1NpbmdsZUNvbnRlbnQgJiYgY29udHJvbFRpdGxlID09PSBzdWJTZWN0aW9uVGl0bGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ29udmVydGVyQWN0aW9uW10ge1xuXHRjb25zdCByZWZlcmVuY2VUYXJnZXQ6IEFubm90YXRpb25UZXJtPGFueT4gPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZTtcblx0bGV0IG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgZGF0YUZpZWxkQ29sbGVjdGlvbjogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdID0gW107XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aF06IGFueSA9IHRhcmdldFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHIoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChyZWZlcmVuY2VUYXJnZXQpIHtcblx0XHRzd2l0Y2ggKHJlZmVyZW5jZVRhcmdldC50ZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSAocmVmZXJlbmNlVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucyxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lIGFzIHN0cmluZ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdGlmIChyZWZlcmVuY2VUYXJnZXQucXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbiA9IHJlZmVyZW5jZVRhcmdldCBhcyBJZGVudGlmaWNhdGlvbiB8IFN0YXR1c0luZm87XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0YWN0aW9ucyA9IGRhdGFGaWVsZENvbGxlY3Rpb24ucmVkdWNlKChhY3Rpb25zLCBkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRjb25zdCBVSUFubm90YXRpb246IGFueSA9IGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJO1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5SRVFVSVJFU0NPTlRFWFQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uSU5MSU5FKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uREVURVJNSU5JTkcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogYW55ID0ge307XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcoZGF0YUZpZWxkLk1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0aWQ6IEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDpcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0PyBjb21waWxlQmluZGluZyhlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0XHRcdDogdHJ1ZSxcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoVUlBbm5vdGF0aW9uPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRwcmVzczogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IGNvbXBpbGVCaW5kaW5nKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbjogYW55ID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucztcblx0XHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdGFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0aWQ6IEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdFx0YmluZGluZzogbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IFwieyAncGF0aCcgOiAnXCIgKyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICsgXCInfVwiIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRcdFx0cmVxdWlyZXNEaWFsb2c6IGlzRGlhbG9nKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoVUlBbm5vdGF0aW9uPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRwcmVzczogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRmbihcblx0XHRcdFx0XHRcdFx0XCJpbnZva2VBY3Rpb25cIixcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IGZuKFwiZ2V0QmluZGluZ0NvbnRleHRcIiwgW10sIGJpbmRpbmdFeHByZXNzaW9uKFwiXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IChkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBcIklzb2xhdGVkXCIpIGFzIE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuTGFiZWwpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kZWw6IGZuKFwiZ2V0TW9kZWxcIiwgW10sIGJpbmRpbmdFeHByZXNzaW9uKFwiL1wiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbiAmJiBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbltrZXldXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRyZWYoXCIuZWRpdEZsb3dcIilcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZhY2V0TmFtZTogZGF0YUZpZWxkLklubGluZSA/IChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lIGFzIHN0cmluZykgOiB1bmRlZmluZWRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYWN0aW9ucztcblx0fSwgYWN0aW9ucyk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2coYWN0aW9uRGVmaW5pdGlvbjogYW55IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0aWYgKGFjdGlvbkRlZmluaXRpb24pIHtcblx0XHRjb25zdCBiQ3JpdGljYWwgPSBhY3Rpb25EZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LklzQWN0aW9uQ3JpdGljYWw7XG5cdFx0aWYgKGFjdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycy5sZW5ndGggPiAxIHx8IGJDcml0aWNhbCkge1xuXHRcdFx0cmV0dXJuIFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhcblx0bWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+IHtcblx0Y29uc3Qgc3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IHt9O1xuXHRPYmplY3Qua2V5cyhtYW5pZmVzdFN1YlNlY3Rpb25zKS5mb3JFYWNoKFxuXHRcdChzdWJTZWN0aW9uS2V5KSA9PlxuXHRcdFx0KHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25LZXldID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbihtYW5pZmVzdFN1YlNlY3Rpb25zW3N1YlNlY3Rpb25LZXldLCBzdWJTZWN0aW9uS2V5LCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0KTtcblx0cmV0dXJuIHN1YlNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbihcblx0bWFuaWZlc3RTdWJTZWN0aW9uOiBNYW5pZmVzdFN1YlNlY3Rpb24sXG5cdHN1YlNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzaWRlQ29udGVudDogU2lkZUNvbnRlbnREZWYgfCB1bmRlZmluZWQgPSBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnRcblx0XHQ/IHtcblx0XHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC50ZW1wbGF0ZSxcblx0XHRcdFx0aWQ6IFNpZGVDb250ZW50SUQoc3ViU2VjdGlvbktleSksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRlcXVhbFNwbGl0OiBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnQuZXF1YWxTcGxpdFxuXHRcdCAgfVxuXHRcdDogdW5kZWZpbmVkO1xuXHRsZXQgcG9zaXRpb24gPSBtYW5pZmVzdFN1YlNlY3Rpb24ucG9zaXRpb247XG5cdGlmICghcG9zaXRpb24pIHtcblx0XHRwb3NpdGlvbiA9IHtcblx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0fTtcblx0fVxuXHRjb25zdCBpc1Zpc2libGUgPSBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgOiB0cnVlO1xuXHRjb25zdCBpc0R5bmFtaWNFeHByZXNzaW9uID0gaXNWaXNpYmxlICYmIHR5cGVvZiBpc1Zpc2libGUgPT09IFwic3RyaW5nXCIgJiYgaXNWaXNpYmxlLmluZGV4T2YoXCJ7PVwiKSA9PT0gMDtcblx0Y29uc3Qgc3ViU2VjdGlvbkRlZmluaXRpb24gPSB7XG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRpZDogbWFuaWZlc3RTdWJTZWN0aW9uLmlkIHx8IEN1c3RvbVN1YlNlY3Rpb25JRChzdWJTZWN0aW9uS2V5KSxcblx0XHRhY3Rpb25zOiBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0U3ViU2VjdGlvbi5hY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRrZXk6IHN1YlNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IG1hbmlmZXN0U3ViU2VjdGlvbi50aXRsZSxcblx0XHRsZXZlbDogMSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0dmlzaWJsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogdHJ1ZSxcblx0XHRzaWRlQ29udGVudDogc2lkZUNvbnRlbnQsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvblxuXHR9O1xuXHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLnRlbXBsYXRlIHx8IG1hbmlmZXN0U3ViU2VjdGlvbi5uYW1lKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHRcdChzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyB1bmtub3duIGFzIFhNTEZyYWdtZW50U3ViU2VjdGlvbikudGVtcGxhdGUgPSBtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUgfHwgXCJcIjtcblx0fSBlbHNlIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdH1cblx0cmV0dXJuIHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGlmIHRoZSBjb25kZW5zZWQgbW9kZSBjYW4gYmUgYXBwbGkzZWQgb24gdGhlIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RmFjZXRcbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZUluU2VjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGZvciBjb21wbGlhbnQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChtYW5pZmVzdFdyYXBwZXIudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0Ly8gSWYgdGhlIE9QIHVzZSB0aGUgdGFiIGJhc2VkIHdlIGNoZWNrIGlmIHRoZSBmYWNldHMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgc2VjdGlvbiBhcmUgYWxsIG5vbiB2aXNpYmxlXG5cdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggJiYgZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoID4gMSkge1xuXHRcdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcywgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24uZXZlcnkoZnVuY3Rpb24gKHN1YkZhY2V0KSB7XG5cdFx0aWYgKHN1YkZhY2V0ICE9PSBjdXJyZW50RmFjZXQpIHtcblx0XHRcdGlmIChzdWJGYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVmRmFjZXQgPSBzdWJGYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldC4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN1YkNvbGxlY3Rpb25GYWNldCA9IHN1YkZhY2V0IGFzIENvbGxlY3Rpb25GYWNldFR5cGVzO1xuXHRcdFx0XHRyZXR1cm4gc3ViQ29sbGVjdGlvbkZhY2V0LkZhY2V0cy5ldmVyeShmdW5jdGlvbiAoZmFjZXQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJSZWZGYWNldCA9IGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG4iXX0=
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ActionType, ManifestSubSection, ManifestAction } from "../../ManifestSettings";
|
|
2
1
|
import {
|
|
3
2
|
AnnotationTerm,
|
|
4
3
|
CollectionFacetTypes,
|
|
@@ -13,21 +12,25 @@ import {
|
|
|
13
12
|
UIAnnotationTypes
|
|
14
13
|
} from "@sap-ux/vocabularies-types";
|
|
15
14
|
import { CommunicationAnnotationTerms } from "@sap-ux/vocabularies-types/dist/generated/Communication";
|
|
16
|
-
import { CustomSubSectionID, FormID, SubSectionID, SideContentID } from "../../helpers/ID";
|
|
17
|
-
import { createFormDefinition, FormDefinition, isReferenceFacet } from "../Common/Form";
|
|
18
|
-
import { DataVisualizationDefinition, getDataVisualizationConfiguration } from "../Common/DataVisualization";
|
|
19
|
-
import { ConfigurableObject, ConfigurableRecord, CustomElement, insertCustomElements, Placement } from "../../helpers/ConfigurableObject";
|
|
20
15
|
import {
|
|
16
|
+
BaseAction,
|
|
17
|
+
ButtonType,
|
|
21
18
|
ConverterAction,
|
|
22
19
|
CustomAction,
|
|
23
20
|
getActionsFromManifest,
|
|
24
|
-
|
|
25
|
-
ButtonType,
|
|
21
|
+
getEnabledForAnnotationAction,
|
|
26
22
|
getSemanticObjectMapping,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
getEnabledForAnnotationAction
|
|
23
|
+
isActionNavigable,
|
|
24
|
+
removeDuplicateActions
|
|
30
25
|
} from "sap/fe/core/converters/controls/Common/Action";
|
|
26
|
+
import {
|
|
27
|
+
CustomObjectPageHeaderFacet,
|
|
28
|
+
FlexSettings,
|
|
29
|
+
getDesignTimeMetadataSettingsForHeaderFacet,
|
|
30
|
+
getHeaderFacetsFromManifest,
|
|
31
|
+
getStashedSettingsForHeaderFacet
|
|
32
|
+
} from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
|
|
33
|
+
import { IssueCategory, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
|
|
31
34
|
import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
|
|
32
35
|
import {
|
|
33
36
|
annotationExpression,
|
|
@@ -39,16 +42,13 @@ import {
|
|
|
39
42
|
not,
|
|
40
43
|
ref
|
|
41
44
|
} from "sap/fe/core/helpers/BindingExpression";
|
|
42
|
-
import { IssueType, IssueSeverity, IssueCategory } from "sap/fe/core/converters/helpers/IssueManager";
|
|
43
|
-
import {
|
|
44
|
-
FlexSettings,
|
|
45
|
-
getDesignTimeMetadataSettingsForHeaderFacet,
|
|
46
|
-
getStashedSettingsForHeaderFacet,
|
|
47
|
-
CustomObjectPageHeaderFacet,
|
|
48
|
-
getHeaderFacetsFromManifest
|
|
49
|
-
} from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
|
|
50
|
-
import { getVisibilityEnablementFormMenuActions, getFormHiddenActions, getFormActions } from "../../objectPage/FormMenuActions";
|
|
51
45
|
import ConverterContext from "../../ConverterContext";
|
|
46
|
+
import { ConfigurableObject, ConfigurableRecord, CustomElement, insertCustomElements, Placement } from "../../helpers/ConfigurableObject";
|
|
47
|
+
import { CustomSubSectionID, FormID, SideContentID, SubSectionID } from "../../helpers/ID";
|
|
48
|
+
import { ActionType, ManifestAction, ManifestSubSection } from "../../ManifestSettings";
|
|
49
|
+
import { getFormActions, getFormHiddenActions, getVisibilityEnablementFormMenuActions } from "../../objectPage/FormMenuActions";
|
|
50
|
+
import { DataVisualizationDefinition, getDataVisualizationConfiguration } from "../Common/DataVisualization";
|
|
51
|
+
import { createFormDefinition, FormDefinition, isReferenceFacet } from "../Common/Form";
|
|
52
52
|
|
|
53
53
|
export enum SubSectionType {
|
|
54
54
|
Unknown = "Unknown", // Default Type
|
|
@@ -150,7 +150,7 @@ const targetTerms: string[] = [
|
|
|
150
150
|
|
|
151
151
|
// TODO: Need to handle Table case inside createSubSection function if CollectionFacet has Table ReferenceFacet
|
|
152
152
|
const hasTable = (facets: any[] = []) => {
|
|
153
|
-
return facets.some(facetType => targetTerms.indexOf(facetType?.Target?.$target?.term) > -1);
|
|
153
|
+
return facets.some((facetType) => targetTerms.indexOf(facetType?.Target?.$target?.term) > -1);
|
|
154
154
|
};
|
|
155
155
|
|
|
156
156
|
/**
|
|
@@ -175,7 +175,7 @@ export function createSubSections(
|
|
|
175
175
|
case UIAnnotationTypes.CollectionFacet:
|
|
176
176
|
// TODO If the Collection Facet has a child of type Collection Facet we bring them up one level (Form + Table use case) ?
|
|
177
177
|
// first case facet Collection is combination of collection and reference facet or not all facets are reference facets.
|
|
178
|
-
if (facetDefinition.Facets.find(facetType => facetType.$Type === UIAnnotationTypes.CollectionFacet)) {
|
|
178
|
+
if (facetDefinition.Facets.find((facetType) => facetType.$Type === UIAnnotationTypes.CollectionFacet)) {
|
|
179
179
|
facetsToCreate.splice(facetsToCreate.length, 0, ...facetDefinition.Facets);
|
|
180
180
|
} else {
|
|
181
181
|
facetsToCreate.push(facetDefinition);
|
|
@@ -189,7 +189,7 @@ export function createSubSections(
|
|
|
189
189
|
}, []);
|
|
190
190
|
|
|
191
191
|
// Then we create the actual subsections
|
|
192
|
-
return facetsToCreate.map(facet =>
|
|
192
|
+
return facetsToCreate.map((facet) =>
|
|
193
193
|
createSubSection(facet, facetsToCreate, converterContext, 0, !(facet as any)?.Facets?.length, isHeaderSection)
|
|
194
194
|
);
|
|
195
195
|
}
|
|
@@ -205,7 +205,7 @@ export function createCustomHeaderFacetSubSections(converterContext: ConverterCo
|
|
|
205
205
|
converterContext.getManifestWrapper().getHeaderFacets()
|
|
206
206
|
);
|
|
207
207
|
const aCustomHeaderFacets: CustomObjectPageHeaderFacet[] = [];
|
|
208
|
-
Object.keys(customHeaderFacets).forEach(function(key) {
|
|
208
|
+
Object.keys(customHeaderFacets).forEach(function (key) {
|
|
209
209
|
aCustomHeaderFacets.push(customHeaderFacets[key]);
|
|
210
210
|
return aCustomHeaderFacets;
|
|
211
211
|
});
|
|
@@ -216,7 +216,7 @@ export function createCustomHeaderFacetSubSections(converterContext: ConverterCo
|
|
|
216
216
|
return facetsToCreate;
|
|
217
217
|
}, []);
|
|
218
218
|
|
|
219
|
-
return facetsToCreate.map(customHeaderFacet => createCustomHeaderFacetSubSection(customHeaderFacet));
|
|
219
|
+
return facetsToCreate.map((customHeaderFacet) => createCustomHeaderFacetSubSection(customHeaderFacet));
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
/**
|
|
@@ -266,7 +266,8 @@ function addFormMenuActions(
|
|
|
266
266
|
formActions: ConfigurableRecord<ManifestAction> = getFormActions(facetDefinition, converterContext),
|
|
267
267
|
formAllActions = insertCustomElements(
|
|
268
268
|
actions,
|
|
269
|
-
getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions)
|
|
269
|
+
getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions),
|
|
270
|
+
{ command: "overwrite" }
|
|
270
271
|
);
|
|
271
272
|
return formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions;
|
|
272
273
|
}
|
|
@@ -281,7 +282,9 @@ function getFacetActions(facetDefinition: FacetTypes, converterContext: Converte
|
|
|
281
282
|
let actions = new Array<ConverterAction>();
|
|
282
283
|
switch (facetDefinition.$Type) {
|
|
283
284
|
case UIAnnotationTypes.CollectionFacet:
|
|
284
|
-
actions = (
|
|
285
|
+
actions = (
|
|
286
|
+
facetDefinition.Facets.filter((facetDefinition) => isReferenceFacet(facetDefinition)) as ReferenceFacetTypes[]
|
|
287
|
+
).reduce(
|
|
285
288
|
(actions: ConverterAction[], facetDefinition) => createFormActionReducer(actions, facetDefinition, converterContext),
|
|
286
289
|
[]
|
|
287
290
|
);
|
|
@@ -391,7 +394,7 @@ export function createSubSection(
|
|
|
391
394
|
type: SubSectionType.Form,
|
|
392
395
|
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
|
|
393
396
|
level: level,
|
|
394
|
-
actions: actions.filter(action => action.facetName === undefined)
|
|
397
|
+
actions: actions.filter((action) => action.facetName === undefined)
|
|
395
398
|
};
|
|
396
399
|
return formCollectionSubSection;
|
|
397
400
|
}
|
|
@@ -439,7 +442,7 @@ export function createSubSection(
|
|
|
439
442
|
type: SubSectionType.Form,
|
|
440
443
|
level: level,
|
|
441
444
|
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
|
|
442
|
-
actions: actions.filter(action => action.facetName === undefined)
|
|
445
|
+
actions: actions.filter((action) => action.facetName === undefined)
|
|
443
446
|
};
|
|
444
447
|
return formElementSubSection;
|
|
445
448
|
|
|
@@ -619,7 +622,7 @@ export function createCustomSubSections(
|
|
|
619
622
|
): Record<string, CustomObjectPageSubSection> {
|
|
620
623
|
const subSections: Record<string, CustomObjectPageSubSection> = {};
|
|
621
624
|
Object.keys(manifestSubSections).forEach(
|
|
622
|
-
subSectionKey =>
|
|
625
|
+
(subSectionKey) =>
|
|
623
626
|
(subSections[subSectionKey] = createCustomSubSection(manifestSubSections[subSectionKey], subSectionKey, converterContext))
|
|
624
627
|
);
|
|
625
628
|
return subSections;
|
|
@@ -644,6 +647,8 @@ export function createCustomSubSection(
|
|
|
644
647
|
placement: Placement.After
|
|
645
648
|
};
|
|
646
649
|
}
|
|
650
|
+
const isVisible = manifestSubSection.visible !== undefined ? manifestSubSection.visible : true;
|
|
651
|
+
const isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0;
|
|
647
652
|
const subSectionDefinition = {
|
|
648
653
|
type: SubSectionType.Unknown,
|
|
649
654
|
id: manifestSubSection.id || CustomSubSectionID(subSectionKey),
|
|
@@ -653,12 +658,12 @@ export function createCustomSubSection(
|
|
|
653
658
|
level: 1,
|
|
654
659
|
position: position,
|
|
655
660
|
visible: manifestSubSection.visible !== undefined ? manifestSubSection.visible : true,
|
|
656
|
-
sideContent: sideContent
|
|
661
|
+
sideContent: sideContent,
|
|
662
|
+
isVisibilityDynamic: isDynamicExpression
|
|
657
663
|
};
|
|
658
664
|
if (manifestSubSection.template || manifestSubSection.name) {
|
|
659
665
|
subSectionDefinition.type = SubSectionType.XMLFragment;
|
|
660
|
-
(
|
|
661
|
-
manifestSubSection.template || manifestSubSection.name || "";
|
|
666
|
+
(subSectionDefinition as unknown as XMLFragmentSubSection).template = manifestSubSection.template || manifestSubSection.name || "";
|
|
662
667
|
} else {
|
|
663
668
|
subSectionDefinition.type = SubSectionType.Placeholder;
|
|
664
669
|
}
|
|
@@ -694,7 +699,7 @@ function getCondensedTableLayoutCompliance(
|
|
|
694
699
|
}
|
|
695
700
|
|
|
696
701
|
function hasNoOtherVisibleTableInTargets(currentFacet: FacetTypes, facetsToCreateInSection: FacetTypes[]): boolean {
|
|
697
|
-
return facetsToCreateInSection.every(function(subFacet) {
|
|
702
|
+
return facetsToCreateInSection.every(function (subFacet) {
|
|
698
703
|
if (subFacet !== currentFacet) {
|
|
699
704
|
if (subFacet.$Type === UIAnnotationTypes.ReferenceFacet) {
|
|
700
705
|
const refFacet = subFacet as ReferenceFacetTypes;
|
|
@@ -708,7 +713,7 @@ function hasNoOtherVisibleTableInTargets(currentFacet: FacetTypes, facetsToCreat
|
|
|
708
713
|
return true;
|
|
709
714
|
} else {
|
|
710
715
|
const subCollectionFacet = subFacet as CollectionFacetTypes;
|
|
711
|
-
return subCollectionFacet.Facets.every(function(facet) {
|
|
716
|
+
return subCollectionFacet.Facets.every(function (facet) {
|
|
712
717
|
const subRefFacet = facet as ReferenceFacetTypes;
|
|
713
718
|
if (
|
|
714
719
|
subRefFacet.Target?.$target?.term === UIAnnotationTerms.LineItem ||
|