@sapui5/sap.fe.core 1.101.0 → 1.103.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +66 -30
- package/src/sap/fe/core/AppComponent.ts +68 -51
- package/src/sap/fe/core/AppStateHandler.js +13 -13
- package/src/sap/fe/core/AppStateHandler.ts +18 -18
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +279 -188
- package/src/sap/fe/core/CommonUtils.ts +306 -215
- package/src/sap/fe/core/ExtensionAPI.js +25 -30
- package/src/sap/fe/core/ExtensionAPI.ts +37 -41
- package/src/sap/fe/core/PageController.js +12 -7
- package/src/sap/fe/core/PageController.ts +10 -5
- package/src/sap/fe/core/TemplateComponent.js +6 -6
- package/src/sap/fe/core/TemplateComponent.ts +11 -11
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +306 -78
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +280 -70
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +351 -229
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +321 -246
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +59 -34
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -45
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +72 -72
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +82 -80
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +152 -131
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +171 -152
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +11 -10
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +31 -37
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +30 -15
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +19 -11
- package/src/sap/fe/core/controllerextensions/Paginator.ts +22 -14
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +39 -21
- package/src/sap/fe/core/controllerextensions/Share.ts +45 -26
- package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -62
- package/src/sap/fe/core/controllerextensions/ViewState.js +75 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +99 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +58 -112
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +7 -7
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +262 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +20 -21
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1631 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +270 -211
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +772 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +240 -100
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1199 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +364 -229
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +188 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +185 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +626 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +112 -69
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +937 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +72 -73
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +21 -24
- package/src/sap/fe/core/controls/CommandExecution.ts +19 -24
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +48 -43
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +51 -46
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +19 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +14 -8
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +50 -3
- package/src/sap/fe/core/controls/FileWrapper.ts +45 -12
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
- package/src/sap/fe/core/controls/FormElementWrapper.ts +14 -3
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +41 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +48 -48
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +71 -76
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +36 -65
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +551 -36
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +605 -36
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -14
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +56 -67
- package/src/sap/fe/core/converters/MetaModelConverter.ts +183 -193
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +73 -37
- package/src/sap/fe/core/converters/annotations/DataField.ts +121 -77
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +51 -49
- package/src/sap/fe/core/converters/controls/Common/Action.ts +58 -54
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -15
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +29 -27
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +30 -34
- package/src/sap/fe/core/converters/controls/Common/Form.ts +48 -58
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +318 -244
- package/src/sap/fe/core/converters/controls/Common/Table.ts +368 -297
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +135 -125
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +162 -148
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +51 -45
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +79 -67
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +92 -89
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +124 -120
- package/src/sap/fe/core/converters/helpers/Aggregation.js +11 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +25 -23
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -30
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +31 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +56 -55
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +65 -77
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -6
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +10 -8
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +83 -22
- package/src/sap/fe/core/formatters/TableFormatter.ts +80 -25
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/fpm/Component.js +2 -2
- package/src/sap/fe/core/fpm/Component.ts +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +388 -285
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +15 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +10 -9
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +532 -264
- package/src/sap/fe/core/helpers/MassEditHelper.ts +560 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +50 -58
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +16 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +20 -16
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +51 -3
- package/src/sap/fe/core/library.ts +47 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +151 -197
- package/src/sap/fe/core/messagebundle_ar.properties +36 -63
- package/src/sap/fe/core/messagebundle_bg.properties +36 -63
- package/src/sap/fe/core/messagebundle_ca.properties +36 -63
- package/src/sap/fe/core/messagebundle_cs.properties +36 -63
- package/src/sap/fe/core/messagebundle_cy.properties +36 -63
- package/src/sap/fe/core/messagebundle_da.properties +37 -64
- package/src/sap/fe/core/messagebundle_de.properties +36 -63
- package/src/sap/fe/core/messagebundle_el.properties +38 -65
- package/src/sap/fe/core/messagebundle_en.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_GB.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +44 -73
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +52 -81
- package/src/sap/fe/core/messagebundle_es.properties +36 -63
- package/src/sap/fe/core/messagebundle_es_MX.properties +36 -63
- package/src/sap/fe/core/messagebundle_et.properties +36 -63
- package/src/sap/fe/core/messagebundle_fi.properties +36 -63
- package/src/sap/fe/core/messagebundle_fr.properties +39 -66
- package/src/sap/fe/core/messagebundle_fr_CA.properties +36 -63
- package/src/sap/fe/core/messagebundle_hi.properties +36 -63
- package/src/sap/fe/core/messagebundle_hr.properties +36 -63
- package/src/sap/fe/core/messagebundle_hu.properties +35 -62
- package/src/sap/fe/core/messagebundle_id.properties +37 -64
- package/src/sap/fe/core/messagebundle_it.properties +54 -81
- package/src/sap/fe/core/messagebundle_iw.properties +36 -63
- package/src/sap/fe/core/messagebundle_ja.properties +36 -63
- package/src/sap/fe/core/messagebundle_kk.properties +36 -63
- package/src/sap/fe/core/messagebundle_ko.properties +36 -63
- package/src/sap/fe/core/messagebundle_lt.properties +36 -63
- package/src/sap/fe/core/messagebundle_lv.properties +36 -63
- package/src/sap/fe/core/messagebundle_ms.properties +37 -64
- package/src/sap/fe/core/messagebundle_nl.properties +37 -64
- package/src/sap/fe/core/messagebundle_no.properties +36 -63
- package/src/sap/fe/core/messagebundle_pl.properties +37 -64
- package/src/sap/fe/core/messagebundle_pt.properties +37 -64
- package/src/sap/fe/core/messagebundle_pt_PT.properties +36 -63
- package/src/sap/fe/core/messagebundle_ro.properties +36 -63
- package/src/sap/fe/core/messagebundle_ru.properties +36 -63
- package/src/sap/fe/core/messagebundle_sh.properties +36 -63
- package/src/sap/fe/core/messagebundle_sk.properties +36 -63
- package/src/sap/fe/core/messagebundle_sl.properties +38 -65
- package/src/sap/fe/core/messagebundle_sv.properties +36 -63
- package/src/sap/fe/core/messagebundle_th.properties +36 -63
- package/src/sap/fe/core/messagebundle_tr.properties +36 -63
- package/src/sap/fe/core/messagebundle_uk.properties +37 -64
- package/src/sap/fe/core/messagebundle_vi.properties +37 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +36 -63
- package/src/sap/fe/core/messagebundle_zh_TW.properties +37 -64
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +12 -10
- package/src/sap/fe/core/services/NavigationServiceFactory.js +54 -45
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +61 -49
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +63 -60
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +76 -73
- package/src/sap/fe/core/services/ShellServicesFactory.js +102 -71
- package/src/sap/fe/core/services/ShellServicesFactory.ts +109 -78
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +24 -18
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +53 -50
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +3 -4
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -15
- package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -18
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +12 -11
- package/src/sap/fe/core/templating/FilterHelper.ts +17 -16
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +79 -56
- package/src/sap/fe/core/templating/PropertyHelper.ts +41 -27
- package/src/sap/fe/core/templating/UIFormatters.js +163 -97
- package/src/sap/fe/core/templating/UIFormatters.ts +210 -129
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/AnnotationHelper.js +0 -331
- package/src/sap/fe/core/AnnotationHelper.ts +0 -321
- package/src/sap/fe/core/RouterProxy.js +0 -938
- package/src/sap/fe/core/TransactionHelper.js +0 -1577
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
- package/src/sap/fe/core/actions/collaboration/Manage.js +0 -264
- package/src/sap/fe/core/actions/draft.js +0 -665
- package/src/sap/fe/core/actions/messageHandling.js +0 -579
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/actions/sticky.ts +0 -119
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1729
|
@@ -2,43 +2,44 @@
|
|
|
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/BindingToolkit", "../../helpers/ConfigurableObject", "../../helpers/ID", "../../ManifestSettings", "../../objectPage/FormMenuActions", "../Common/DataVisualization", "../Common/Form"], function (Action, HeaderFacet, IssueManager, Key, BindingToolkit, 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 getFormHiddenActions = FormMenuActions.getFormHiddenActions;
|
|
14
|
+
var getFormActions = FormMenuActions.getFormActions;
|
|
15
|
+
var ActionType = ManifestSettings.ActionType;
|
|
16
|
+
var getSubSectionID = ID.getSubSectionID;
|
|
17
|
+
var getSideContentID = ID.getSideContentID;
|
|
18
|
+
var getFormID = ID.getFormID;
|
|
19
|
+
var getCustomSubSectionID = ID.getCustomSubSectionID;
|
|
20
|
+
var Placement = ConfigurableObject.Placement;
|
|
21
|
+
var insertCustomElements = ConfigurableObject.insertCustomElements;
|
|
22
|
+
var ref = BindingToolkit.ref;
|
|
23
|
+
var pathInModel = BindingToolkit.pathInModel;
|
|
24
|
+
var not = BindingToolkit.not;
|
|
25
|
+
var ifElse = BindingToolkit.ifElse;
|
|
26
|
+
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
27
|
+
var fn = BindingToolkit.fn;
|
|
28
|
+
var equal = BindingToolkit.equal;
|
|
29
|
+
var compileExpression = BindingToolkit.compileExpression;
|
|
30
|
+
var KeyHelper = Key.KeyHelper;
|
|
31
|
+
var IssueType = IssueManager.IssueType;
|
|
32
|
+
var IssueSeverity = IssueManager.IssueSeverity;
|
|
33
|
+
var IssueCategory = IssueManager.IssueCategory;
|
|
13
34
|
var getStashedSettingsForHeaderFacet = HeaderFacet.getStashedSettingsForHeaderFacet;
|
|
35
|
+
var getHeaderFacetsFromManifest = HeaderFacet.getHeaderFacetsFromManifest;
|
|
14
36
|
var getDesignTimeMetadataSettingsForHeaderFacet = HeaderFacet.getDesignTimeMetadataSettingsForHeaderFacet;
|
|
15
|
-
var IssueCategory = IssueManager.IssueCategory;
|
|
16
|
-
var IssueSeverity = IssueManager.IssueSeverity;
|
|
17
|
-
var IssueType = IssueManager.IssueType;
|
|
18
|
-
var ref = BindingExpression.ref;
|
|
19
|
-
var not = BindingExpression.not;
|
|
20
|
-
var fn = BindingExpression.fn;
|
|
21
|
-
var equal = BindingExpression.equal;
|
|
22
|
-
var compileBinding = BindingExpression.compileBinding;
|
|
23
|
-
var bindingExpression = BindingExpression.bindingExpression;
|
|
24
|
-
var annotationExpression = BindingExpression.annotationExpression;
|
|
25
|
-
var KeyHelper = Key.KeyHelper;
|
|
26
|
-
var getEnabledForAnnotationAction = Action.getEnabledForAnnotationAction;
|
|
27
37
|
var removeDuplicateActions = Action.removeDuplicateActions;
|
|
28
|
-
var getSemanticObjectMapping = Action.getSemanticObjectMapping;
|
|
29
|
-
var ButtonType = Action.ButtonType;
|
|
30
38
|
var isActionNavigable = Action.isActionNavigable;
|
|
39
|
+
var getSemanticObjectMapping = Action.getSemanticObjectMapping;
|
|
40
|
+
var getEnabledForAnnotationAction = Action.getEnabledForAnnotationAction;
|
|
31
41
|
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;
|
|
42
|
+
var ButtonType = Action.ButtonType;
|
|
42
43
|
|
|
43
44
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
44
45
|
|
|
@@ -91,10 +92,10 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
91
92
|
/**
|
|
92
93
|
* Create subsections based on facet definition.
|
|
93
94
|
*
|
|
94
|
-
* @param
|
|
95
|
-
* @param
|
|
96
|
-
* @param
|
|
97
|
-
* @returns
|
|
95
|
+
* @param facetCollection Collection of facets
|
|
96
|
+
* @param converterContext The converter context
|
|
97
|
+
* @param isHeaderSection True if header section is generated in this iteration
|
|
98
|
+
* @returns The current subsections
|
|
98
99
|
*/
|
|
99
100
|
|
|
100
101
|
|
|
@@ -136,8 +137,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
136
137
|
/**
|
|
137
138
|
* Creates subsections based on the definition of the custom header facet.
|
|
138
139
|
*
|
|
139
|
-
* @param
|
|
140
|
-
* @returns
|
|
140
|
+
* @param converterContext The converter context
|
|
141
|
+
* @returns The current subsections
|
|
141
142
|
*/
|
|
142
143
|
|
|
143
144
|
|
|
@@ -165,15 +166,14 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
165
166
|
* Creates a subsection based on a custom header facet.
|
|
166
167
|
*
|
|
167
168
|
* @param customHeaderFacet A custom header facet
|
|
168
|
-
*
|
|
169
|
-
* @returns {ObjectPageSubSection} A definition for a subsection
|
|
169
|
+
* @returns A definition for a subsection
|
|
170
170
|
*/
|
|
171
171
|
|
|
172
172
|
|
|
173
173
|
_exports.createCustomHeaderFacetSubSections = createCustomHeaderFacetSubSections;
|
|
174
174
|
|
|
175
175
|
function createCustomHeaderFacetSubSection(customHeaderFacet) {
|
|
176
|
-
var subSectionID =
|
|
176
|
+
var subSectionID = getCustomSubSectionID(customHeaderFacet.key);
|
|
177
177
|
var subSection = {
|
|
178
178
|
id: subSectionID,
|
|
179
179
|
key: customHeaderFacet.key,
|
|
@@ -200,24 +200,28 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
200
200
|
};
|
|
201
201
|
/**
|
|
202
202
|
* Adds Form menu action to all form actions, removes duplicate actions and hidden actions.
|
|
203
|
+
*
|
|
203
204
|
* @param actions The actions involved
|
|
204
205
|
* @param facetDefinition The definition for the facet
|
|
205
206
|
* @param converterContext The converter context
|
|
206
|
-
* @returns
|
|
207
|
+
* @returns The form menu actions
|
|
207
208
|
*/
|
|
208
209
|
|
|
209
210
|
|
|
210
211
|
function addFormMenuActions(actions, facetDefinition, converterContext) {
|
|
211
212
|
var hiddenActions = getFormHiddenActions(facetDefinition, converterContext) || [],
|
|
212
213
|
formActions = getFormActions(facetDefinition, converterContext),
|
|
213
|
-
formAllActions = insertCustomElements(actions, getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions)
|
|
214
|
+
formAllActions = insertCustomElements(actions, getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions), {
|
|
215
|
+
command: "overwrite"
|
|
216
|
+
});
|
|
214
217
|
return formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions;
|
|
215
218
|
}
|
|
216
219
|
/**
|
|
217
220
|
* Retrieves the action form a facet.
|
|
221
|
+
*
|
|
218
222
|
* @param facetDefinition
|
|
219
223
|
* @param converterContext
|
|
220
|
-
* @returns
|
|
224
|
+
* @returns The current facet actions
|
|
221
225
|
*/
|
|
222
226
|
|
|
223
227
|
|
|
@@ -226,61 +230,60 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
226
230
|
|
|
227
231
|
switch (facetDefinition.$Type) {
|
|
228
232
|
case "com.sap.vocabularies.UI.v1.CollectionFacet":
|
|
229
|
-
actions = facetDefinition.Facets.filter(function (
|
|
230
|
-
return isReferenceFacet(
|
|
231
|
-
}).reduce(function (
|
|
232
|
-
return createFormActionReducer(
|
|
233
|
+
actions = facetDefinition.Facets.filter(function (subFacetDefinition) {
|
|
234
|
+
return isReferenceFacet(subFacetDefinition);
|
|
235
|
+
}).reduce(function (actionReducer, referenceFacet) {
|
|
236
|
+
return createFormActionReducer(actionReducer, referenceFacet, converterContext);
|
|
233
237
|
}, []);
|
|
234
238
|
break;
|
|
235
239
|
|
|
236
240
|
case "com.sap.vocabularies.UI.v1.ReferenceFacet":
|
|
237
241
|
actions = createFormActionReducer([], facetDefinition, converterContext);
|
|
238
242
|
break;
|
|
243
|
+
|
|
244
|
+
default:
|
|
245
|
+
break;
|
|
239
246
|
}
|
|
240
247
|
|
|
241
248
|
return addFormMenuActions(actions, facetDefinition, converterContext);
|
|
242
249
|
}
|
|
243
250
|
/**
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
* @
|
|
251
|
+
* Returns the button type based on @UI.Emphasized annotation.
|
|
252
|
+
*
|
|
253
|
+
* @param emphasized Emphasized annotation value.
|
|
254
|
+
* @returns The button type or path based expression.
|
|
247
255
|
*/
|
|
248
256
|
|
|
249
257
|
|
|
250
|
-
function getButtonType(
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
return "{= " + "!${" + PathForButtonType + "} ? '" + ButtonType.Transparent + "' : ${" + PathForButtonType + "}" + "}";
|
|
255
|
-
} else if (Emphasized) {
|
|
256
|
-
return ButtonType.Ghost;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
return ButtonType.Transparent;
|
|
258
|
+
function getButtonType(emphasized) {
|
|
259
|
+
// Emphasized is a boolean so if it's equal to true we show the button as Ghost, otherwise as Transparent
|
|
260
|
+
var buttonTypeCondition = equal(getExpressionFromAnnotation(emphasized), true);
|
|
261
|
+
return compileExpression(ifElse(buttonTypeCondition, ButtonType.Ghost, ButtonType.Transparent));
|
|
260
262
|
}
|
|
261
263
|
/**
|
|
262
264
|
* Create a subsection based on FacetTypes.
|
|
265
|
+
*
|
|
263
266
|
* @param facetDefinition
|
|
264
267
|
* @param facetsToCreate
|
|
265
268
|
* @param converterContext
|
|
266
269
|
* @param level
|
|
267
270
|
* @param hasSingleContent
|
|
268
271
|
* @param isHeaderSection
|
|
269
|
-
* @returns
|
|
272
|
+
* @returns A subsection definition
|
|
270
273
|
*/
|
|
271
274
|
|
|
272
275
|
|
|
273
276
|
function createSubSection(facetDefinition, facetsToCreate, converterContext, level, hasSingleContent, isHeaderSection) {
|
|
274
277
|
var _facetDefinition$anno, _facetDefinition$anno2, _presentation$visuali, _presentation$visuali2, _presentation$visuali3;
|
|
275
278
|
|
|
276
|
-
var subSectionID =
|
|
279
|
+
var subSectionID = getSubSectionID({
|
|
277
280
|
Facet: facetDefinition
|
|
278
281
|
});
|
|
279
282
|
var oHiddenAnnotation = (_facetDefinition$anno = facetDefinition.annotations) === null || _facetDefinition$anno === void 0 ? void 0 : (_facetDefinition$anno2 = _facetDefinition$anno.UI) === null || _facetDefinition$anno2 === void 0 ? void 0 : _facetDefinition$anno2.Hidden;
|
|
280
|
-
var isVisible =
|
|
283
|
+
var isVisible = compileExpression(not(equal(true, getExpressionFromAnnotation(oHiddenAnnotation))));
|
|
281
284
|
var isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0 && (oHiddenAnnotation === null || oHiddenAnnotation === void 0 ? void 0 : oHiddenAnnotation.type) !== "Path";
|
|
282
285
|
var isVisibleDynamicExpression = isVisible && isDynamicExpression ? isVisible.substring(isVisible.indexOf("{=") + 2, isVisible.lastIndexOf("}")) : false;
|
|
283
|
-
var title =
|
|
286
|
+
var title = compileExpression(getExpressionFromAnnotation(facetDefinition.Label));
|
|
284
287
|
var subSection = {
|
|
285
288
|
id: subSectionID,
|
|
286
289
|
key: getSubSectionKey(facetDefinition, subSectionID),
|
|
@@ -467,10 +470,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
467
470
|
}
|
|
468
471
|
}
|
|
469
472
|
|
|
470
|
-
actions = dataFieldCollection.reduce(function (
|
|
471
|
-
var _dataField$
|
|
472
|
-
|
|
473
|
-
var UIAnnotation = dataField === null || dataField === void 0 ? void 0 : (_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : _dataField$annotation.UI;
|
|
473
|
+
actions = dataFieldCollection.reduce(function (actionReducer, dataField) {
|
|
474
|
+
var _dataField$RequiresCo, _dataField$Inline, _dataField$Determinin, _dataField$Label, _dataField$Navigation, _dataField$annotation, _dataField$annotation2, _dataField$annotation3, _dataField$annotation4, _dataField$annotation5, _dataField$Label2, _dataField$annotation6, _dataField$annotation7, _dataField$annotation8, _dataField$annotation9, _dataField$annotation10;
|
|
474
475
|
|
|
475
476
|
switch (dataField.$Type) {
|
|
476
477
|
case "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation":
|
|
@@ -492,21 +493,21 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
492
493
|
mNavigationParameters.semanticObjectMapping = getSemanticObjectMapping(dataField.Mapping);
|
|
493
494
|
}
|
|
494
495
|
|
|
495
|
-
|
|
496
|
+
actionReducer.push({
|
|
496
497
|
type: ActionType.DataFieldForIntentBasedNavigation,
|
|
497
|
-
id:
|
|
498
|
+
id: getFormID({
|
|
498
499
|
Facet: facetDefinition
|
|
499
500
|
}, dataField),
|
|
500
501
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
501
502
|
text: (_dataField$Label = dataField.Label) === null || _dataField$Label === void 0 ? void 0 : _dataField$Label.toString(),
|
|
502
503
|
annotationPath: "",
|
|
503
|
-
enabled: dataField.NavigationAvailable !== undefined ?
|
|
504
|
-
visible:
|
|
505
|
-
buttonType: getButtonType(
|
|
506
|
-
press:
|
|
507
|
-
customData:
|
|
508
|
-
semanticObject:
|
|
509
|
-
action:
|
|
504
|
+
enabled: dataField.NavigationAvailable !== undefined ? compileExpression(equal(getExpressionFromAnnotation((_dataField$Navigation = dataField.NavigationAvailable) === null || _dataField$Navigation === void 0 ? void 0 : _dataField$Navigation.valueOf()), true)) : "true",
|
|
505
|
+
visible: compileExpression(not(equal(getExpressionFromAnnotation((_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : (_dataField$annotation2 = _dataField$annotation.UI) === null || _dataField$annotation2 === void 0 ? void 0 : (_dataField$annotation3 = _dataField$annotation2.Hidden) === null || _dataField$annotation3 === void 0 ? void 0 : _dataField$annotation3.valueOf()), true))),
|
|
506
|
+
buttonType: getButtonType((_dataField$annotation4 = dataField.annotations) === null || _dataField$annotation4 === void 0 ? void 0 : (_dataField$annotation5 = _dataField$annotation4.UI) === null || _dataField$annotation5 === void 0 ? void 0 : _dataField$annotation5.Emphasized),
|
|
507
|
+
press: compileExpression(fn("._intentBasedNavigation.navigate", [getExpressionFromAnnotation(dataField.SemanticObject), getExpressionFromAnnotation(dataField.Action), mNavigationParameters])),
|
|
508
|
+
customData: compileExpression({
|
|
509
|
+
semanticObject: getExpressionFromAnnotation(dataField.SemanticObject),
|
|
510
|
+
action: getExpressionFromAnnotation(dataField.Action)
|
|
510
511
|
})
|
|
511
512
|
});
|
|
512
513
|
break;
|
|
@@ -514,32 +515,35 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
514
515
|
case "com.sap.vocabularies.UI.v1.DataFieldForAction":
|
|
515
516
|
var formManifestActionsConfiguration = converterContext.getManifestControlConfiguration(referenceTarget).actions;
|
|
516
517
|
var key = KeyHelper.generateKeyFromDataField(dataField);
|
|
517
|
-
|
|
518
|
+
actionReducer.push({
|
|
518
519
|
type: ActionType.DataFieldForAction,
|
|
519
|
-
id:
|
|
520
|
+
id: getFormID({
|
|
520
521
|
Facet: facetDefinition
|
|
521
522
|
}, dataField),
|
|
522
523
|
key: key,
|
|
523
524
|
text: (_dataField$Label2 = dataField.Label) === null || _dataField$Label2 === void 0 ? void 0 : _dataField$Label2.toString(),
|
|
524
525
|
annotationPath: "",
|
|
525
526
|
enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
|
|
526
|
-
binding: navigationPropertyPath ? "{ 'path' : '"
|
|
527
|
-
visible:
|
|
527
|
+
binding: navigationPropertyPath ? "{ 'path' : '".concat(navigationPropertyPath, "'}") : undefined,
|
|
528
|
+
visible: compileExpression(not(equal(getExpressionFromAnnotation((_dataField$annotation6 = dataField.annotations) === null || _dataField$annotation6 === void 0 ? void 0 : (_dataField$annotation7 = _dataField$annotation6.UI) === null || _dataField$annotation7 === void 0 ? void 0 : (_dataField$annotation8 = _dataField$annotation7.Hidden) === null || _dataField$annotation8 === void 0 ? void 0 : _dataField$annotation8.valueOf()), true))),
|
|
528
529
|
requiresDialog: isDialog(dataField.ActionTarget),
|
|
529
|
-
buttonType: getButtonType(
|
|
530
|
-
press:
|
|
531
|
-
contexts: fn("getBindingContext", [],
|
|
530
|
+
buttonType: getButtonType((_dataField$annotation9 = dataField.annotations) === null || _dataField$annotation9 === void 0 ? void 0 : (_dataField$annotation10 = _dataField$annotation9.UI) === null || _dataField$annotation10 === void 0 ? void 0 : _dataField$annotation10.Emphasized),
|
|
531
|
+
press: compileExpression(fn("invokeAction", [dataField.Action, {
|
|
532
|
+
contexts: fn("getBindingContext", [], pathInModel("", "$source")),
|
|
532
533
|
invocationGrouping: dataField.InvocationGrouping === "UI.OperationGroupingType/ChangeSet" ? "ChangeSet" : "Isolated",
|
|
533
|
-
label:
|
|
534
|
-
model: fn("getModel", [],
|
|
534
|
+
label: getExpressionFromAnnotation(dataField.Label),
|
|
535
|
+
model: fn("getModel", [], pathInModel("/", "$source")),
|
|
535
536
|
isNavigable: isActionNavigable(formManifestActionsConfiguration && formManifestActionsConfiguration[key])
|
|
536
537
|
}], ref(".editFlow"))),
|
|
537
538
|
facetName: dataField.Inline ? facetDefinition.fullyQualifiedName : undefined
|
|
538
539
|
});
|
|
539
540
|
break;
|
|
541
|
+
|
|
542
|
+
default:
|
|
543
|
+
break;
|
|
540
544
|
}
|
|
541
545
|
|
|
542
|
-
return
|
|
546
|
+
return actionReducer;
|
|
543
547
|
}, actions);
|
|
544
548
|
return insertCustomElements(actions, manifestActions);
|
|
545
549
|
}
|
|
@@ -575,7 +579,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
575
579
|
function createCustomSubSection(manifestSubSection, subSectionKey, converterContext) {
|
|
576
580
|
var sideContent = manifestSubSection.sideContent ? {
|
|
577
581
|
template: manifestSubSection.sideContent.template,
|
|
578
|
-
id:
|
|
582
|
+
id: getSideContentID(subSectionKey),
|
|
579
583
|
visible: false,
|
|
580
584
|
equalSplit: manifestSubSection.sideContent.equalSplit
|
|
581
585
|
} : undefined;
|
|
@@ -591,7 +595,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
591
595
|
var isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0;
|
|
592
596
|
var subSectionDefinition = {
|
|
593
597
|
type: SubSectionType.Unknown,
|
|
594
|
-
id: manifestSubSection.id ||
|
|
598
|
+
id: manifestSubSection.id || getCustomSubSectionID(subSectionKey),
|
|
595
599
|
actions: getActionsFromManifest(manifestSubSection.actions, converterContext),
|
|
596
600
|
key: subSectionKey,
|
|
597
601
|
title: manifestSubSection.title,
|
|
@@ -617,8 +621,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
617
621
|
* @param currentFacet
|
|
618
622
|
* @param facetsToCreateInSection
|
|
619
623
|
* @param converterContext
|
|
620
|
-
*
|
|
621
|
-
* @returns {boolean} `true` for compliant, false otherwise
|
|
624
|
+
* @returns `true` for compliant, false otherwise
|
|
622
625
|
*/
|
|
623
626
|
|
|
624
627
|
|
|
@@ -682,4 +685,4 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
682
685
|
|
|
683
686
|
return _exports;
|
|
684
687
|
}, false);
|
|
685
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwibmFtZXMiOlsiU3ViU2VjdGlvblR5cGUiLCJ0YXJnZXRUZXJtcyIsImhhc1RhYmxlIiwiZmFjZXRzIiwic29tZSIsImZhY2V0VHlwZSIsImluZGV4T2YiLCJUYXJnZXQiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjdXN0b21IZWFkZXJGYWNldCIsInRlbXBsYXRlRWRpdCIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbiIsInN1YlNlY3Rpb25JRCIsIkN1c3RvbVN1YlNlY3Rpb25JRCIsInN1YlNlY3Rpb24iLCJpZCIsInRpdGxlIiwidHlwZSIsIlhNTEZyYWdtZW50IiwidGVtcGxhdGUiLCJ2aXNpYmxlIiwibGV2ZWwiLCJzaWRlQ29udGVudCIsInVuZGVmaW5lZCIsInN0YXNoZWQiLCJmbGV4U2V0dGluZ3MiLCJhY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbktleSIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiYWRkRm9ybU1lbnVBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImdldEZvcm1IaWRkZW5BY3Rpb25zIiwiZm9ybUFjdGlvbnMiLCJnZXRGb3JtQWN0aW9ucyIsImZvcm1BbGxBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0RmFjZXRBY3Rpb25zIiwiQXJyYXkiLCJmaWx0ZXIiLCJpc1JlZmVyZW5jZUZhY2V0IiwiY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIiLCJnZXRCdXR0b25UeXBlIiwiRW1waGFzaXplZCIsIlBhdGhGb3JCdXR0b25UeXBlIiwicGF0aCIsIkJ1dHRvblR5cGUiLCJUcmFuc3BhcmVudCIsIkdob3N0IiwiaGFzU2luZ2xlQ29udGVudCIsIlN1YlNlY3Rpb25JRCIsIkZhY2V0Iiwib0hpZGRlbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwiaXNWaXNpYmxlIiwiY29tcGlsZUJpbmRpbmciLCJub3QiLCJlcXVhbCIsImFubm90YXRpb25FeHByZXNzaW9uIiwiaXNEeW5hbWljRXhwcmVzc2lvbiIsImlzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9uIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJVbmtub3duIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJjb250ZW50IiwidGFibGVDb250ZW50IiwiaW5kZXgiLCJ1bnN1cHBvcnRlZFRleHQiLCJpIiwiY29uY2F0IiwibWl4ZWRTdWJTZWN0aW9uIiwiTWl4ZWQiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImFjdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwic2hvd1RpdGxlIiwiaXNTdWJzZWN0aW9uVGl0bGVTaG93biIsInRpdGxlVmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24iLCJEYXRhVmlzdWFsaXphdGlvbiIsInRpdGxlVmlzaWJsZSIsImZvcm1FbGVtZW50U3ViU2VjdGlvbiIsInVuc3VwcG9ydGVkU3ViU2VjdGlvbiIsInRleHQiLCJzdWJTZWN0aW9uVGl0bGUiLCJyZWZlcmVuY2VUYXJnZXQiLCJ0YXJnZXRWYWx1ZSIsIm1hbmlmZXN0QWN0aW9ucyIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJzcGxpdCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzdWJzdHIiLCJEYXRhIiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsInF1YWxpZmllciIsImRhdGFGaWVsZCIsIlVJQW5ub3RhdGlvbiIsIlJlcXVpcmVzQ29udGV4dCIsInZhbHVlT2YiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTG93IiwiSXNzdWVUeXBlIiwiTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOIiwiUkVRVUlSRVNDT05URVhUIiwiSW5saW5lIiwiSU5MSU5FIiwiRGV0ZXJtaW5pbmciLCJERVRFUk1JTklORyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiRm9ybUlEIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiZW5hYmxlZCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJidXR0b25UeXBlIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsIkFjdGlvblRhcmdldCIsImJpbmRpbmciLCJyZXF1aXJlc0RpYWxvZyIsImlzRGlhbG9nIiwiY29udGV4dHMiLCJiaW5kaW5nRXhwcmVzc2lvbiIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImxhYmVsIiwibW9kZWwiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwicmVmIiwiYWN0aW9uRGVmaW5pdGlvbiIsImJDcml0aWNhbCIsIkNvbW1vbiIsIklzQWN0aW9uQ3JpdGljYWwiLCJwYXJhbWV0ZXJzIiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbnMiLCJzdWJTZWN0aW9uS2V5IiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbiIsIm1hbmlmZXN0U3ViU2VjdGlvbiIsIlNpZGVDb250ZW50SUQiLCJlcXVhbFNwbGl0IiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInN1YlNlY3Rpb25EZWZpbml0aW9uIiwibmFtZSIsIlBsYWNlaG9sZGVyIiwiY3VycmVudEZhY2V0IiwiZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24iLCJtYW5pZmVzdFdyYXBwZXIiLCJ1c2VJY29uVGFiQmFyIiwiaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZXZlcnkiLCJzdWJGYWNldCIsInJlZkZhY2V0Iiwic3ViQ29sbGVjdGlvbkZhY2V0Iiwic3ViUmVmRmFjZXQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Ba0RZQSxjOzthQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0tBQUFBLGMsS0FBQUEsYzs7O0FBNEZaLE1BQU1DLFdBQXFCLEdBQUcsb0pBQTlCLEMsQ0FNQTs7QUFDQSxNQUFNQyxRQUFRLEdBQUcsWUFBd0I7QUFBQSxRQUF2QkMsTUFBdUIsdUVBQVAsRUFBTztBQUN4QyxXQUFPQSxNQUFNLENBQUNDLElBQVAsQ0FBWSxVQUFBQyxTQUFTO0FBQUE7O0FBQUEsYUFBSUosV0FBVyxDQUFDSyxPQUFaLENBQW9CRCxTQUFwQixhQUFvQkEsU0FBcEIsNENBQW9CQSxTQUFTLENBQUVFLE1BQS9CLCtFQUFvQixrQkFBbUJDLE9BQXZDLDBEQUFvQixzQkFBNEJDLElBQWhELElBQXdELENBQUMsQ0FBN0Q7QUFBQSxLQUFyQixDQUFQO0FBQ0EsR0FGRDtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFdBQVNDLGlCQUFULENBQ05DLGVBRE0sRUFFTkMsZ0JBRk0sRUFHTkMsZUFITSxFQUltQjtBQUN6QjtBQUNBLFFBQU1DLGNBQWMsR0FBR0gsZUFBZSxDQUFDSSxNQUFoQixDQUF1QixVQUFDRCxjQUFELEVBQStCRSxlQUEvQixFQUFtRDtBQUNoRyxjQUFRQSxlQUFlLENBQUNDLEtBQXhCO0FBQ0M7QUFDQ0gsVUFBQUEsY0FBYyxDQUFDSSxJQUFmLENBQW9CRixlQUFwQjtBQUNBOztBQUNEO0FBQ0M7QUFDQTtBQUNBLGNBQUlBLGVBQWUsQ0FBQ0csTUFBaEIsQ0FB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LDBCQUFBMk4sV0FBVyxDQUFDL0ksV0FBWiwwR0FBeUJDLEVBQXpCLGtGQUE2QkMsTUFBN0IsTUFBd0NyQyxTQUF4Qyw2QkFBb0RrTCxXQUFXLENBQUMvSSxXQUFoRSxxRkFBb0QsdUJBQXlCQyxFQUE3RSwyREFBb0QsdUJBQTZCQyxNQUFqRixHQUEwRixLQUFqRztBQUNBOztBQUNELG1CQUFPLElBQVA7QUFDQSxXQVZNLENBQVA7QUFXQTtBQUNEOztBQUNELGFBQU8sSUFBUDtBQUNBLEtBNUJNLENBQVA7QUE2QkEiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvblR5cGUsIE1hbmlmZXN0U3ViU2VjdGlvbiwgTWFuaWZlc3RBY3Rpb24gfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHtcblx0QW5ub3RhdGlvblRlcm0sXG5cdENvbGxlY3Rpb25GYWNldFR5cGVzLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRJZGVudGlmaWNhdGlvbixcblx0T3BlcmF0aW9uR3JvdXBpbmdUeXBlLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRTdGF0dXNJbmZvLFxuXHRVSUFubm90YXRpb25UZXJtcyxcblx0VUlBbm5vdGF0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB7IEN1c3RvbVN1YlNlY3Rpb25JRCwgRm9ybUlELCBTdWJTZWN0aW9uSUQsIFNpZGVDb250ZW50SUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24sIEZvcm1EZWZpbml0aW9uLCBpc1JlZmVyZW5jZUZhY2V0IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQge1xuXHRDb252ZXJ0ZXJBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdEJ1dHRvblR5cGUsXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9ucyxcblx0QmFzZUFjdGlvbixcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7XG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRiaW5kaW5nRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRlcXVhbCxcblx0Zm4sXG5cdG5vdCxcblx0cmVmXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJc3N1ZVR5cGUsIElzc3VlU2V2ZXJpdHksIElzc3VlQ2F0ZWdvcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHtcblx0RmxleFNldHRpbmdzLFxuXHRnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0LFxuXHRnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCxcblx0Q3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0LFxuXHRnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3Rcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMsIGdldEZvcm1IaWRkZW5BY3Rpb25zLCBnZXRGb3JtQWN0aW9ucyB9IGZyb20gXCIuLi8uLi9vYmplY3RQYWdlL0Zvcm1NZW51QWN0aW9uc1wiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IGVudW0gU3ViU2VjdGlvblR5cGUge1xuXHRVbmtub3duID0gXCJVbmtub3duXCIsIC8vIERlZmF1bHQgVHlwZVxuXHRGb3JtID0gXCJGb3JtXCIsXG5cdERhdGFWaXN1YWxpemF0aW9uID0gXCJEYXRhVmlzdWFsaXphdGlvblwiLFxuXHRYTUxGcmFnbWVudCA9IFwiWE1MRnJhZ21lbnRcIixcblx0UGxhY2Vob2xkZXIgPSBcIlBsYWNlaG9sZGVyXCIsXG5cdE1peGVkID0gXCJNaXhlZFwiXG59XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uID1cblx0fCBVbnN1cHBvcnRlZFN1YlNlY3Rpb25cblx0fCBGb3JtU3ViU2VjdGlvblxuXHR8IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvblxuXHR8IENvbnRhY3RTdWJTZWN0aW9uXG5cdHwgWE1MRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb25cblx0fCBNaXhlZFN1YlNlY3Rpb247XG5cbnR5cGUgQmFzZVN1YlNlY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHR0aXRsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPjtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0dHlwZTogU3ViU2VjdGlvblR5cGU7XG5cdHZpc2libGU6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc1Zpc2liaWxpdHlEeW5hbWljPzogYm9vbGVhbiB8IFwiXCI7XG5cdGZsZXhTZXR0aW5ncz86IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGxldmVsOiBudW1iZXI7XG5cdGNvbnRlbnQ/OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cdHNpZGVDb250ZW50PzogU2lkZUNvbnRlbnREZWY7XG59O1xuXG50eXBlIFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0ZXh0OiBzdHJpbmc7XG59O1xuXG50eXBlIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbjtcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNob3dUaXRsZTogYm9vbGVhbjtcblx0dGl0bGVWaXNpYmxlPzogc3RyaW5nIHwgYm9vbGVhbjtcbn07XG5cbnR5cGUgQ29udGFjdFN1YlNlY3Rpb24gPSBVbnN1cHBvcnRlZFN1YlNlY3Rpb247XG5cbnR5cGUgWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG50eXBlIEVtcGhhc2l6ZWQgPSB7XG5cdHBhdGg6IHN0cmluZztcbn07XG5cbnR5cGUgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgTWl4ZWRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm07XG5cdGZvcm1EZWZpbml0aW9uOiBGb3JtRGVmaW5pdGlvbjtcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10gfCBCYXNlQWN0aW9uW107XG59O1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ6IHN0cmluZztcblx0dGl0bGU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz47XG5cdHNob3dUaXRsZT86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR2aXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0c3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG59O1xuXG50eXBlIFNpZGVDb250ZW50RGVmID0ge1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0aWQ/OiBzdHJpbmc7XG5cdHNpZGVDb250ZW50RmFsbERvd24/OiBzdHJpbmc7XG5cdGNvbnRhaW5lclF1ZXJ5Pzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0ZXF1YWxTcGxpdD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZVNlY3Rpb24+O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXG5jb25zdCB0YXJnZXRUZXJtczogc3RyaW5nW10gPSBbXG5cdFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtLFxuXHRVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50LFxuXHRVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5dO1xuXG4vLyBUT0RPOiBOZWVkIHRvIGhhbmRsZSBUYWJsZSBjYXNlIGluc2lkZSBjcmVhdGVTdWJTZWN0aW9uIGZ1bmN0aW9uIGlmIENvbGxlY3Rpb25GYWNldCBoYXMgVGFibGUgUmVmZXJlbmNlRmFjZXRcbmNvbnN0IGhhc1RhYmxlID0gKGZhY2V0czogYW55W10gPSBbXSkgPT4ge1xuXHRyZXR1cm4gZmFjZXRzLnNvbWUoZmFjZXRUeXBlID0+IHRhcmdldFRlcm1zLmluZGV4T2YoZmFjZXRUeXBlPy5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pID4gLTEpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgc3Vic2VjdGlvbnMgYmFzZWQgb24gZmFjZXQgZGVmaW5pdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZhY2V0VHlwZXNbXX0gZmFjZXRDb2xsZWN0aW9uIENvbGxlY3Rpb24gb2YgZmFjZXRzXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSGVhZGVyU2VjdGlvbiBUcnVlIGlmIGhlYWRlciBzZWN0aW9uIGlzIGdlbmVyYXRlZCBpbiB0aGlzIGl0ZXJhdGlvblxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9uW119IFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9ucyhcblx0ZmFjZXRDb2xsZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzSGVhZGVyU2VjdGlvbj86IGJvb2xlYW5cbik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHQvLyBGaXJzdCB3ZSBkZXRlcm1pbmUgd2hpY2ggc3ViIHNlY3Rpb24gd2UgbmVlZCB0byBjcmVhdGVcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBmYWNldENvbGxlY3Rpb24ucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLCBmYWNldERlZmluaXRpb24pID0+IHtcblx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0XHQvLyBUT0RPIElmIHRoZSBDb2xsZWN0aW9uIEZhY2V0IGhhcyBhIGNoaWxkIG9mIHR5cGUgQ29sbGVjdGlvbiBGYWNldCB3ZSBicmluZyB0aGVtIHVwIG9uZSBsZXZlbCAoRm9ybSArIFRhYmxlIHVzZSBjYXNlKSA/XG5cdFx0XHRcdC8vIGZpcnN0IGNhc2UgZmFjZXQgQ29sbGVjdGlvbiBpcyBjb21iaW5hdGlvbiBvZiBjb2xsZWN0aW9uIGFuZCByZWZlcmVuY2UgZmFjZXQgb3Igbm90IGFsbCBmYWNldHMgYXJlIHJlZmVyZW5jZSBmYWNldHMuXG5cdFx0XHRcdGlmIChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbmQoZmFjZXRUeXBlID0+IGZhY2V0VHlwZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSkge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnNwbGljZShmYWNldHNUb0NyZWF0ZS5sZW5ndGgsIDAsIC4uLmZhY2V0RGVmaW5pdGlvbi5GYWNldHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHRcdC8vIE5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdC8vIFRoZW4gd2UgY3JlYXRlIHRoZSBhY3R1YWwgc3Vic2VjdGlvbnNcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcChmYWNldCA9PlxuXHRcdGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXQsIGZhY2V0c1RvQ3JlYXRlLCBjb252ZXJ0ZXJDb250ZXh0LCAwLCAhKGZhY2V0IGFzIGFueSk/LkZhY2V0cz8ubGVuZ3RoLCBpc0hlYWRlclNlY3Rpb24pXG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBzdWJzZWN0aW9ucyBiYXNlZCBvbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY3VzdG9tIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb25bXX0gVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldD4gPSBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKVxuXHQpO1xuXHRjb25zdCBhQ3VzdG9tSGVhZGVyRmFjZXRzOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXRbXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG5cdFx0YUN1c3RvbUhlYWRlckZhY2V0cy5wdXNoKGN1c3RvbUhlYWRlckZhY2V0c1trZXldKTtcblx0XHRyZXR1cm4gYUN1c3RvbUhlYWRlckZhY2V0cztcblx0fSk7XG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gYUN1c3RvbUhlYWRlckZhY2V0cy5yZWR1Y2UoKGZhY2V0c1RvQ3JlYXRlOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXRbXSwgY3VzdG9tSGVhZGVyRmFjZXQpID0+IHtcblx0XHRpZiAoY3VzdG9tSGVhZGVyRmFjZXQudGVtcGxhdGVFZGl0KSB7XG5cdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGN1c3RvbUhlYWRlckZhY2V0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlO1xuXHR9LCBbXSk7XG5cblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcChjdXN0b21IZWFkZXJGYWNldCA9PiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24oY3VzdG9tSGVhZGVyRmFjZXQpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBhIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQHBhcmFtIGN1c3RvbUhlYWRlckZhY2V0IEEgY3VzdG9tIGhlYWRlciBmYWNldFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU3ViU2VjdGlvbn0gQSBkZWZpbml0aW9uIGZvciBhIHN1YnNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0OiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IEN1c3RvbVN1YlNlY3Rpb25JRChjdXN0b21IZWFkZXJGYWNldC5rZXkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGN1c3RvbUhlYWRlckZhY2V0LmtleSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXQudGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQsXG5cdFx0dGVtcGxhdGU6IGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCB8fCBcIlwiLFxuXHRcdHZpc2libGU6IGN1c3RvbUhlYWRlckZhY2V0LnZpc2libGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRzdGFzaGVkOiBjdXN0b21IZWFkZXJGYWNldC5zdGFzaGVkLFxuXHRcdGZsZXhTZXR0aW5nczogY3VzdG9tSGVhZGVyRmFjZXQuZmxleFNldHRpbmdzLFxuXHRcdGFjdGlvbnM6IHt9XG5cdH07XG5cdHJldHVybiBzdWJTZWN0aW9uO1xufVxuXG4vLyBmdW5jdGlvbiBpc1RhcmdldEZvckNvbXBsaWFudChhbm5vdGF0aW9uUGF0aDogQW5ub3RhdGlvblBhdGgpIHtcbi8vIFx0cmV0dXJuIC8uKmNvbVxcLnNhcFxcLnZvY2FidWxhcmllc1xcLlVJXFwudjFcXC4oRmllbGRHcm91cHxJZGVudGlmaWNhdGlvbnxEYXRhUG9pbnR8U3RhdHVzSW5mbykuKi8udGVzdChhbm5vdGF0aW9uUGF0aC52YWx1ZSk7XG4vLyB9XG5jb25zdCBnZXRTdWJTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcbi8qKlxuICogQWRkcyBGb3JtIG1lbnUgYWN0aW9uIHRvIGFsbCBmb3JtIGFjdGlvbnMsIHJlbW92ZXMgZHVwbGljYXRlIGFjdGlvbnMgYW5kIGhpZGRlbiBhY3Rpb25zLlxuICogQHBhcmFtIGFjdGlvbnMgVGhlIGFjdGlvbnMgaW52b2x2ZWRcbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb24gVGhlIGRlZmluaXRpb24gZm9yIHRoZSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7QmFzZUFjdGlvbltdIHwgQ29udmVydGVyQWN0aW9uW119XG4gKi9cbmZ1bmN0aW9uIGFkZEZvcm1NZW51QWN0aW9ucyhcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQmFzZUFjdGlvbltdIHwgQ29udmVydGVyQWN0aW9uW10ge1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRGb3JtSGlkZGVuQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpIHx8IFtdLFxuXHRcdGZvcm1BY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+ID0gZ2V0Rm9ybUFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRmb3JtQWxsQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0YWN0aW9ucyxcblx0XHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoZm9ybUFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaWRkZW5BY3Rpb25zKVxuXHRcdCk7XG5cdHJldHVybiBmb3JtQWxsQWN0aW9ucyA/IGdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zKHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpKSA6IGFjdGlvbnM7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhY3Rpb24gZm9ybSBhIGZhY2V0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtDb252ZXJ0ZXJBY3Rpb25bXSB8IEJhc2VBY3Rpb25bXX0gVGhlIGN1cnJlbnQgZmFjZXQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHwgQ29udmVydGVyQWN0aW9uW10ge1xuXHRsZXQgYWN0aW9ucyA9IG5ldyBBcnJheTxDb252ZXJ0ZXJBY3Rpb24+KCk7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gKGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZmlsdGVyKGZhY2V0RGVmaW5pdGlvbiA9PiBpc1JlZmVyZW5jZUZhY2V0KGZhY2V0RGVmaW5pdGlvbikpIGFzIFJlZmVyZW5jZUZhY2V0VHlwZXNbXSkucmVkdWNlKFxuXHRcdFx0XHQoYWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sIGZhY2V0RGVmaW5pdGlvbikgPT4gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoYWN0aW9ucywgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0W11cblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFtdLCBmYWNldERlZmluaXRpb24gYXMgUmVmZXJlbmNlRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gYWRkRm9ybU1lbnVBY3Rpb25zKGFjdGlvbnMsIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG59XG4vKipcbiAqIFJldHJ1bnMgdGhlIGJ1dHRvbiB0eXBlIGJhc2VkIG9uIEBVSS5FbXBoYXNpemVkIGFubm90YXRpb24uXG4gKiBAcGFyYW0gRW1waGFzaXplZCBFbXBoYXNpemVkIGFubm90YXRpb24gdmFsdWUuXG4gKiBAcmV0dXJucyB7QnV0dG9uVHlwZSB8IHN0cmluZ30gVGhlIGJ1dHRvbiB0eXBlIG9yIHBhdGggYmFzZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0QnV0dG9uVHlwZShFbXBoYXNpemVkOiBFbXBoYXNpemVkKTogQnV0dG9uVHlwZSB8IHN0cmluZyB7XG5cdGNvbnN0IFBhdGhGb3JCdXR0b25UeXBlOiBzdHJpbmcgPSBFbXBoYXNpemVkPy5wYXRoO1xuXHRpZiAoUGF0aEZvckJ1dHRvblR5cGUpIHtcblx0XHRyZXR1cm4gXCJ7PSBcIiArIFwiISR7XCIgKyBQYXRoRm9yQnV0dG9uVHlwZSArIFwifSA/ICdcIiArIEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQgKyBcIicgOiAke1wiICsgUGF0aEZvckJ1dHRvblR5cGUgKyBcIn1cIiArIFwifVwiO1xuXHR9IGVsc2UgaWYgKEVtcGhhc2l6ZWQpIHtcblx0XHRyZXR1cm4gQnV0dG9uVHlwZS5HaG9zdDtcblx0fVxuXHRyZXR1cm4gQnV0dG9uVHlwZS5UcmFuc3BhcmVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIEZhY2V0VHlwZXMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbGV2ZWxcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb259IEEgc3Vic2VjdGlvbiBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9uKFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGxldmVsOiBudW1iZXIsXG5cdGhhc1NpbmdsZUNvbnRlbnQ6IGJvb2xlYW4sXG5cdGlzSGVhZGVyU2VjdGlvbj86IGJvb2xlYW5cbik6IE9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc3ViU2VjdGlvbklEID0gU3ViU2VjdGlvbklEKHsgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9KTtcblx0Y29uc3Qgb0hpZGRlbkFubm90YXRpb246IGFueSA9IGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0Y29uc3QgaXNWaXNpYmxlID0gY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKHRydWUsIGFubm90YXRpb25FeHByZXNzaW9uKG9IaWRkZW5Bbm5vdGF0aW9uKSkpKTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9XG5cdFx0aXNWaXNpYmxlICYmIHR5cGVvZiBpc1Zpc2libGUgPT09IFwic3RyaW5nXCIgJiYgaXNWaXNpYmxlLmluZGV4T2YoXCJ7PVwiKSA9PT0gMCAmJiBvSGlkZGVuQW5ub3RhdGlvbj8udHlwZSAhPT0gXCJQYXRoXCI7XG5cdGNvbnN0IGlzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9uID1cblx0XHRpc1Zpc2libGUgJiYgaXNEeW5hbWljRXhwcmVzc2lvbiA/IGlzVmlzaWJsZS5zdWJzdHJpbmcoaXNWaXNpYmxlLmluZGV4T2YoXCJ7PVwiKSArIDIsIGlzVmlzaWJsZS5sYXN0SW5kZXhPZihcIn1cIikpIDogZmFsc2U7XG5cdGNvbnN0IHRpdGxlID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oZmFjZXREZWZpbml0aW9uLkxhYmVsKSk7XG5cdGNvbnN0IHN1YlNlY3Rpb246IEJhc2VTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBnZXRTdWJTZWN0aW9uS2V5KGZhY2V0RGVmaW5pdGlvbiwgc3ViU2VjdGlvbklEKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdHZpc2libGU6IGlzVmlzaWJsZSxcblx0XHRpc1Zpc2liaWxpdHlEeW5hbWljOiBpc0R5bmFtaWNFeHByZXNzaW9uLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCB0YWJsZUNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCBpbmRleDogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXHRsZXQgdW5zdXBwb3J0ZWRUZXh0ID0gXCJcIjtcblx0bGV2ZWwrKztcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGNvbnN0IGZhY2V0cyA9IGZhY2V0RGVmaW5pdGlvbi5GYWNldHM7XG5cdFx0XHRpZiAoaGFzVGFibGUoZmFjZXRzKSkge1xuXHRcdFx0XHQvLyBpZiB3ZSBoYXZlIHRhYmxlcyBpbiBhIGNvbGxlY3Rpb24gZmFjZXQgdGhlbiB3ZSBjcmVhdGUgc2VwYXJhdGUgc3Vic2VjdGlvbiBmb3IgdGhlbVxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZhY2V0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICh0YXJnZXRUZXJtcy5pbmRleE9mKChmYWNldHNbaV0gYXMgYW55KS5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pID4gLTEpIHtcblx0XHRcdFx0XHRcdC8vY3JlYXRpbmcgc2VwYXJhdGUgYXJyYXkgZm9yIHRhYmxlc1xuXHRcdFx0XHRcdFx0dGFibGVDb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldHNbaV0sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgZmFjZXRzLmxlbmd0aCA9PT0gMSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdFx0XHRpbmRleC5wdXNoKGkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGxldCBpID0gaW5kZXgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHQvL3JlbW92ZSB0YWJsZSBmYWNldHMgZnJvbSBmYWNldCBkZWZpbml0aW9uXG5cdFx0XHRcdFx0ZmFjZXRzLnNwbGljZShpbmRleFtpXSwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGZhY2V0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uRmFjZXRzID0gZmFjZXRzO1xuXHRcdFx0XHRcdC8vY3JlYXRlIGEgZm9ybSBzdWJzZWN0aW9uIGZyb20gdGhlIHJlbWFpbmluZyBmYWNldHNcblx0XHRcdFx0XHRjb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldERlZmluaXRpb24sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGVudCA9IGNvbnRlbnQuY29uY2F0KHRhYmxlQ29udGVudCk7XG5cdFx0XHRcdGNvbnN0IG1peGVkU3ViU2VjdGlvbjogTWl4ZWRTdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTWl4ZWQsXG5cdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGNvbnRlbnRcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIG1peGVkU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBpc1Zpc2libGUsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbi5mYWNldE5hbWUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uO1xuXHRcdFx0fVxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRpZiAoIWZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBgVW5hYmxlIHRvIGZpbmQgYW5ub3RhdGlvblBhdGggJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUsXG5cdFx0XHRcdFx0XHRcdGdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZShmYWNldERlZmluaXRpb24sIGZhY2V0c1RvQ3JlYXRlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRpc0hlYWRlclNlY3Rpb25cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250cm9sVGl0bGUgPVxuXHRcdFx0XHRcdFx0XHQocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIGFueSk/LmFubm90YXRpb24/LnRpdGxlIHx8IChwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgYW55KT8udGl0bGU7XG5cdFx0XHRcdFx0XHRjb25zdCBzaG93VGl0bGUgPSBpc1N1YnNlY3Rpb25UaXRsZVNob3duKGhhc1NpbmdsZUNvbnRlbnQsIHN1YlNlY3Rpb24udGl0bGUsIGNvbnRyb2xUaXRsZSk7XG5cdFx0XHRcdFx0XHRjb25zdCB0aXRsZVZpc2libGVFeHByZXNzaW9uID0gaXNWaXNpYmxlICYmIHRpdGxlICE9PSBcInVuZGVmaW5lZFwiICYmICh0aXRsZSA/IGlzVmlzaWJsZSA6IGZhbHNlKTtcblx0XHRcdFx0XHRcdGNvbnN0IGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRwcmVzZW50YXRpb246IHByZXNlbnRhdGlvbixcblx0XHRcdFx0XHRcdFx0c2hvd1RpdGxlOiBzaG93VGl0bGUsXG5cdFx0XHRcdFx0XHRcdHRpdGxlVmlzaWJsZTogaXNEeW5hbWljRXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0XHRcdD8gYHs9ICgke2lzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9ufSkgJiYgKCcke3RpdGxlfScgIT09J3VuZGVmaW5lZCcpICYmICgke3Nob3dUaXRsZX0gPyB0cnVlIDogZmFsc2UpIH1gXG5cdFx0XHRcdFx0XHRcdFx0OiB0aXRsZVZpc2libGVFeHByZXNzaW9uXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjtcblxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRGF0YVBvaW50OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0XHRjYXNlIENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMuQ29udGFjdDpcblx0XHRcdFx0XHRcdC8vIEFsbCB0aG9zZSBlbGVtZW50IGJlbG9uZyB0byBhIGZvcm0gZmFjZXRcblx0XHRcdFx0XHRcdGNvbnN0IGFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihmYWNldERlZmluaXRpb24sIGlzVmlzaWJsZSwgY29udmVydGVyQ29udGV4dCwgYWN0aW9ucyksXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uczogYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbi5mYWNldE5hbWUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBmb3JtRWxlbWVudFN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYEZvciAke2ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtfSBGcmFnbWVudGA7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IFwiRm9yIFJlZmVyZW5jZSBVUkwgRmFjZXRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHQvLyBJZiB3ZSByZWFjaCBoZXJlIHdlIGVuZGVkIHVwIHdpdGggYW4gdW5zdXBwb3J0ZWQgU3ViU2VjdGlvbiB0eXBlXG5cdGNvbnN0IHVuc3VwcG9ydGVkU3ViU2VjdGlvbjogVW5zdXBwb3J0ZWRTdWJTZWN0aW9uID0ge1xuXHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5mdW5jdGlvbiBpc1N1YnNlY3Rpb25UaXRsZVNob3duKGhhc1NpbmdsZUNvbnRlbnQ6IGJvb2xlYW4sIHN1YlNlY3Rpb25UaXRsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiwgY29udHJvbFRpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0aWYgKGhhc1NpbmdsZUNvbnRlbnQgJiYgY29udHJvbFRpdGxlID09PSBzdWJTZWN0aW9uVGl0bGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ29udmVydGVyQWN0aW9uW10ge1xuXHRjb25zdCByZWZlcmVuY2VUYXJnZXQ6IEFubm90YXRpb25UZXJtPGFueT4gPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZTtcblx0bGV0IG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgZGF0YUZpZWxkQ29sbGVjdGlvbjogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdID0gW107XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aF06IGFueSA9IHRhcmdldFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHIoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChyZWZlcmVuY2VUYXJnZXQpIHtcblx0XHRzd2l0Y2ggKHJlZmVyZW5jZVRhcmdldC50ZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSAocmVmZXJlbmNlVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucyxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lIGFzIHN0cmluZ1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdGlmIChyZWZlcmVuY2VUYXJnZXQucXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbiA9IHJlZmVyZW5jZVRhcmdldCBhcyBJZGVudGlmaWNhdGlvbiB8IFN0YXR1c0luZm87XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0YWN0aW9ucyA9IGRhdGFGaWVsZENvbGxlY3Rpb24ucmVkdWNlKChhY3Rpb25zLCBkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRjb25zdCBVSUFubm90YXRpb246IGFueSA9IGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJO1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5SRVFVSVJFU0NPTlRFWFQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uSU5MSU5FKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uREVURVJNSU5JTkcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogYW55ID0ge307XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcoZGF0YUZpZWxkLk1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0aWQ6IEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDpcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0PyBjb21waWxlQmluZGluZyhlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0XHRcdDogdHJ1ZSxcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoVUlBbm5vdGF0aW9uPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRwcmVzczogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IGNvbXBpbGVCaW5kaW5nKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbjogYW55ID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucztcblx0XHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdGFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0aWQ6IEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdFx0YmluZGluZzogbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IFwieyAncGF0aCcgOiAnXCIgKyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICsgXCInfVwiIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRcdFx0cmVxdWlyZXNEaWFsb2c6IGlzRGlhbG9nKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoVUlBbm5vdGF0aW9uPy5FbXBoYXNpemVkKSxcblx0XHRcdFx0XHRwcmVzczogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRmbihcblx0XHRcdFx0XHRcdFx0XCJpbnZva2VBY3Rpb25cIixcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IGZuKFwiZ2V0QmluZGluZ0NvbnRleHRcIiwgW10sIGJpbmRpbmdFeHByZXNzaW9uKFwiXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IChkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBcIklzb2xhdGVkXCIpIGFzIE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuTGFiZWwpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kZWw6IGZuKFwiZ2V0TW9kZWxcIiwgW10sIGJpbmRpbmdFeHByZXNzaW9uKFwiL1wiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbiAmJiBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbltrZXldXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRyZWYoXCIuZWRpdEZsb3dcIilcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZhY2V0TmFtZTogZGF0YUZpZWxkLklubGluZSA/IChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lIGFzIHN0cmluZykgOiB1bmRlZmluZWRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYWN0aW9ucztcblx0fSwgYWN0aW9ucyk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2coYWN0aW9uRGVmaW5pdGlvbjogYW55IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0aWYgKGFjdGlvbkRlZmluaXRpb24pIHtcblx0XHRjb25zdCBiQ3JpdGljYWwgPSBhY3Rpb25EZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LklzQWN0aW9uQ3JpdGljYWw7XG5cdFx0aWYgKGFjdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycy5sZW5ndGggPiAxIHx8IGJDcml0aWNhbCkge1xuXHRcdFx0cmV0dXJuIFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhcblx0bWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+IHtcblx0Y29uc3Qgc3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IHt9O1xuXHRPYmplY3Qua2V5cyhtYW5pZmVzdFN1YlNlY3Rpb25zKS5mb3JFYWNoKFxuXHRcdHN1YlNlY3Rpb25LZXkgPT5cblx0XHRcdChzdWJTZWN0aW9uc1tzdWJTZWN0aW9uS2V5XSA9IGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24obWFuaWZlc3RTdWJTZWN0aW9uc1tzdWJTZWN0aW9uS2V5XSwgc3ViU2VjdGlvbktleSwgY29udmVydGVyQ29udGV4dCkpXG5cdCk7XG5cdHJldHVybiBzdWJTZWN0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24oXG5cdG1hbmlmZXN0U3ViU2VjdGlvbjogTWFuaWZlc3RTdWJTZWN0aW9uLFxuXHRzdWJTZWN0aW9uS2V5OiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc2lkZUNvbnRlbnQ6IFNpZGVDb250ZW50RGVmIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnQudGVtcGxhdGUsXG5cdFx0XHRcdGlkOiBTaWRlQ29udGVudElEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0ZXF1YWxTcGxpdDogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LmVxdWFsU3BsaXRcblx0XHQgIH1cblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHBvc2l0aW9uID0gbWFuaWZlc3RTdWJTZWN0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0Y29uc3QgaXNWaXNpYmxlID0gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogdHJ1ZTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmIGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgPT09IDA7XG5cdGNvbnN0IHN1YlNlY3Rpb25EZWZpbml0aW9uID0ge1xuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0aWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5pZCB8fCBDdXN0b21TdWJTZWN0aW9uSUQoc3ViU2VjdGlvbktleSksXG5cdFx0YWN0aW9uczogZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFN1YlNlY3Rpb24uYWN0aW9ucywgY29udmVydGVyQ29udGV4dCksXG5cdFx0a2V5OiBzdWJTZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udGl0bGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHZpc2libGU6IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSA6IHRydWUsXG5cdFx0c2lkZUNvbnRlbnQ6IHNpZGVDb250ZW50LFxuXHRcdGlzVmlzaWJpbGl0eUR5bmFtaWM6IGlzRHluYW1pY0V4cHJlc3Npb25cblx0fTtcblx0aWYgKG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSkge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudDtcblx0XHQoKHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIHVua25vd24pIGFzIFhNTEZyYWdtZW50U3ViU2VjdGlvbikudGVtcGxhdGUgPVxuXHRcdFx0bWFuaWZlc3RTdWJTZWN0aW9uLnRlbXBsYXRlIHx8IG1hbmlmZXN0U3ViU2VjdGlvbi5uYW1lIHx8IFwiXCI7XG5cdH0gZWxzZSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHR9XG5cdHJldHVybiBzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgY29uZGVuc2VkIG1vZGUgY2FuIGJlIGFwcGxpM2VkIG9uIHRoZSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudEZhY2V0XG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVJblNlY3Rpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBmb3IgY29tcGxpYW50LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlKFxuXHRjdXJyZW50RmFjZXQ6IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IGJvb2xlYW4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobWFuaWZlc3RXcmFwcGVyLnVzZUljb25UYWJCYXIoKSkge1xuXHRcdC8vIElmIHRoZSBPUCB1c2UgdGhlIHRhYiBiYXNlZCB3ZSBjaGVjayBpZiB0aGUgZmFjZXRzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGZvciB0aGlzIHNlY3Rpb24gYXJlIGFsbCBub24gdmlzaWJsZVxuXHRcdHJldHVybiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldCwgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoICYmIGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCA+IDEpIHtcblx0XHRcdHJldHVybiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldCwgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQ6IEZhY2V0VHlwZXMsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uOiBGYWNldFR5cGVzW10pOiBib29sZWFuIHtcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uLmV2ZXJ5KGZ1bmN0aW9uKHN1YkZhY2V0KSB7XG5cdFx0aWYgKHN1YkZhY2V0ICE9PSBjdXJyZW50RmFjZXQpIHtcblx0XHRcdGlmIChzdWJGYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVmRmFjZXQgPSBzdWJGYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldC4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN1YkNvbGxlY3Rpb25GYWNldCA9IHN1YkZhY2V0IGFzIENvbGxlY3Rpb25GYWNldFR5cGVzO1xuXHRcdFx0XHRyZXR1cm4gc3ViQ29sbGVjdGlvbkZhY2V0LkZhY2V0cy5ldmVyeShmdW5jdGlvbihmYWNldCkge1xuXHRcdFx0XHRcdGNvbnN0IHN1YlJlZkZhY2V0ID0gZmFjZXQgYXMgUmVmZXJlbmNlRmFjZXRUeXBlcztcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtIHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQgfHxcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN1YlJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuICE9PSB1bmRlZmluZWQgPyBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiA6IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9KTtcbn1cbiJdfQ==
|
|
688
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwibmFtZXMiOlsiU3ViU2VjdGlvblR5cGUiLCJ0YXJnZXRUZXJtcyIsImhhc1RhYmxlIiwiZmFjZXRzIiwic29tZSIsImZhY2V0VHlwZSIsImluZGV4T2YiLCJUYXJnZXQiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjdXN0b21IZWFkZXJGYWNldCIsInRlbXBsYXRlRWRpdCIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbiIsInN1YlNlY3Rpb25JRCIsImdldEN1c3RvbVN1YlNlY3Rpb25JRCIsInN1YlNlY3Rpb24iLCJpZCIsInRpdGxlIiwidHlwZSIsIlhNTEZyYWdtZW50IiwidGVtcGxhdGUiLCJ2aXNpYmxlIiwibGV2ZWwiLCJzaWRlQ29udGVudCIsInVuZGVmaW5lZCIsInN0YXNoZWQiLCJmbGV4U2V0dGluZ3MiLCJhY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbktleSIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwiYWRkRm9ybU1lbnVBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImdldEZvcm1IaWRkZW5BY3Rpb25zIiwiZm9ybUFjdGlvbnMiLCJnZXRGb3JtQWN0aW9ucyIsImZvcm1BbGxBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiY29tbWFuZCIsImdldFZpc2liaWxpdHlFbmFibGVtZW50Rm9ybU1lbnVBY3Rpb25zIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsImdldEZhY2V0QWN0aW9ucyIsIkFycmF5IiwiZmlsdGVyIiwic3ViRmFjZXREZWZpbml0aW9uIiwiaXNSZWZlcmVuY2VGYWNldCIsImFjdGlvblJlZHVjZXIiLCJyZWZlcmVuY2VGYWNldCIsImNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyIiwiZ2V0QnV0dG9uVHlwZSIsImVtcGhhc2l6ZWQiLCJidXR0b25UeXBlQ29uZGl0aW9uIiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkJ1dHRvblR5cGUiLCJHaG9zdCIsIlRyYW5zcGFyZW50IiwiaGFzU2luZ2xlQ29udGVudCIsImdldFN1YlNlY3Rpb25JRCIsIkZhY2V0Iiwib0hpZGRlbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwiaXNWaXNpYmxlIiwibm90IiwiaXNEeW5hbWljRXhwcmVzc2lvbiIsImlzVmlzaWJsZUR5bmFtaWNFeHByZXNzaW9uIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJVbmtub3duIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJjb250ZW50IiwidGFibGVDb250ZW50IiwiaW5kZXgiLCJ1bnN1cHBvcnRlZFRleHQiLCJpIiwiY29uY2F0IiwibWl4ZWRTdWJTZWN0aW9uIiwiTWl4ZWQiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImFjdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwic2hvd1RpdGxlIiwiaXNTdWJzZWN0aW9uVGl0bGVTaG93biIsInRpdGxlVmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24iLCJEYXRhVmlzdWFsaXphdGlvbiIsInRpdGxlVmlzaWJsZSIsImZvcm1FbGVtZW50U3ViU2VjdGlvbiIsInVuc3VwcG9ydGVkU3ViU2VjdGlvbiIsInRleHQiLCJzdWJTZWN0aW9uVGl0bGUiLCJyZWZlcmVuY2VUYXJnZXQiLCJ0YXJnZXRWYWx1ZSIsIm1hbmlmZXN0QWN0aW9ucyIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJzcGxpdCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJzdWJzdHIiLCJEYXRhIiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsInF1YWxpZmllciIsImRhdGFGaWVsZCIsIlJlcXVpcmVzQ29udGV4dCIsInZhbHVlT2YiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTG93IiwiSXNzdWVUeXBlIiwiTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOIiwiUkVRVUlSRVNDT05URVhUIiwiSW5saW5lIiwiSU5MSU5FIiwiRGV0ZXJtaW5pbmciLCJERVRFUk1JTklORyIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0Rm9ybUlEIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiZW5hYmxlZCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJidXR0b25UeXBlIiwiRW1waGFzaXplZCIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJBY3Rpb25UYXJnZXQiLCJiaW5kaW5nIiwicmVxdWlyZXNEaWFsb2ciLCJpc0RpYWxvZyIsImNvbnRleHRzIiwicGF0aEluTW9kZWwiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIm1vZGVsIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsInJlZiIsImFjdGlvbkRlZmluaXRpb24iLCJiQ3JpdGljYWwiLCJDb21tb24iLCJJc0FjdGlvbkNyaXRpY2FsIiwicGFyYW1ldGVycyIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbktleSIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb24iLCJtYW5pZmVzdFN1YlNlY3Rpb24iLCJnZXRTaWRlQ29udGVudElEIiwiZXF1YWxTcGxpdCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJzdWJTZWN0aW9uRGVmaW5pdGlvbiIsIm5hbWUiLCJQbGFjZWhvbGRlciIsImN1cnJlbnRGYWNldCIsImZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uIiwibWFuaWZlc3RXcmFwcGVyIiwidXNlSWNvblRhYkJhciIsImhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsImV2ZXJ5Iiwic3ViRmFjZXQiLCJyZWZGYWNldCIsInN1YkNvbGxlY3Rpb25GYWNldCIsInN1YlJlZkZhY2V0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFrRFlBLGM7O2FBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0FBQUFBLElBQUFBLGM7QUFBQUEsSUFBQUEsYztBQUFBQSxJQUFBQSxjO0FBQUFBLElBQUFBLGM7S0FBQUEsYyxLQUFBQSxjOzs7QUF3RlosTUFBTUMsV0FBcUIsR0FBRyxvSkFBOUIsQyxDQU1BOztBQUNBLE1BQU1DLFFBQVEsR0FBRyxZQUF3QjtBQUFBLFFBQXZCQyxNQUF1Qix1RUFBUCxFQUFPO0FBQ3hDLFdBQU9BLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLFVBQUNDLFNBQUQ7QUFBQTs7QUFBQSxhQUFlSixXQUFXLENBQUNLLE9BQVosQ0FBb0JELFNBQXBCLGFBQW9CQSxTQUFwQiw0Q0FBb0JBLFNBQVMsQ0FBRUUsTUFBL0IsK0VBQW9CLGtCQUFtQkMsT0FBdkMsMERBQW9CLHNCQUE0QkMsSUFBaEQsSUFBd0QsQ0FBQyxDQUF4RTtBQUFBLEtBQVosQ0FBUDtBQUNBLEdBRkQ7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxXQUFTQyxpQkFBVCxDQUNOQyxlQURNLEVBRU5DLGdCQUZNLEVBR05DLGVBSE0sRUFJbUI7QUFDekI7QUFDQSxRQUFNQyxjQUFjLEdBQUdILGVBQWUsQ0FBQ0ksTUFBaEIsQ0FBdUIsVUFBQ0QsY0FBRCxFQUErQkUsZUFBL0IsRUFBbUQ7QUFDaEcsY0FBUUEsZUFBZSxDQUFDQyxLQUF4QjtBQUNDO0FBQ0NILFVBQUFBLGNBQWMsQ0FBQ0ksSUFBZixDQUFvQkYsZUFBcEI7QUFDQTs7QUFDRDtBQUNDO0FBQ0E7QUFDQSxjQUFJQSxlQUFlLENBQUNHLE1BQWhCLENBQXVCQyxJQUF2QixDQUE0QixVQUFDZixTQUFEO0FBQUEsbUJBQWVBLFNBQVMsQ0FBQ1ksS0FBVixpREFBZjtBQUFBLFdBQTVCLENBQUosRUFBdUc7QUFDdEdILFlBQUFBLGNBQWMsQ0FBQ08sTUFBZixPQUFBUCxjQUFjLEdBQVFBLGNBQWMsQ0FBQ1EsTUFBdkIsRUFBK0IsQ0FBL0IsNEJBQXFDTixlQUFlLENBQUNHLE1BQXJELEdBQWQ7QUFDQSxXQUZELE1BRU87QUFDTkwsWUFBQUEsY0FBYyxDQUFDSSxJQUFmLENBQW9CRixlQUFwQjtBQUNBOztBQUNEOztBQUNEO0FBQ0M7QUFDQTtBQWZGOztBQWlCQSxhQUFPRixjQUFQO0FBQ0EsS0FuQnNCLEVBbUJwQixFQW5Cb0IsQ0FBdkIsQ0FGeUIsQ0F1QnpCOztBQUNBLFdBQU9BLGNBQWMsQ0FBQ1MsR0FBZixDQUFtQixVQUFDQyxLQUFEO0FBQUE7O0FBQUEsYUFDekJDLGdCQUFnQixDQUFDRCxLQUFELEVBQVFWLGNBQVIsRUFBd0JGLGdCQUF4QixFQUEwQyxDQUExQyxFQUE2QyxFQUFFWSxLQUFGLGFBQUVBLEtBQUYsMEJBQUVBLEtBQUQsQ0FBZ0JMLE1BQWpCLG9DQUFDLFFBQXdCRyxNQUF6QixDQUE3QyxFQUE4RVQsZUFBOUUsQ0FEUztBQUFBLEtBQW5CLENBQVA7QUFHQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxXQUFTYSxrQ0FBVCxDQUE0Q2QsZ0JBQTVDLEVBQXdHO0FBQzlHLFFBQU1lLGtCQUErRCxHQUFHQywyQkFBMkIsQ0FDbEdoQixnQkFBZ0IsQ0FBQ2lCLGtCQUFqQixHQUFzQ0MsZUFBdEMsRUFEa0csQ0FBbkc7QUFHQSxRQUFNQyxtQkFBa0QsR0FBRyxFQUEzRDtBQUNBQyxJQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWU4sa0JBQVosRUFBZ0NPLE9BQWhDLENBQXdDLFVBQVVDLEdBQVYsRUFBZTtBQUN0REosTUFBQUEsbUJBQW1CLENBQUNiLElBQXBCLENBQXlCUyxrQkFBa0IsQ0FBQ1EsR0FBRCxDQUEzQztBQUNBLGFBQU9KLG1CQUFQO0FBQ0EsS0FIRDtBQUlBLFFBQU1qQixjQUFjLEdBQUdpQixtQkFBbUIsQ0FBQ2hCLE1BQXBCLENBQTJCLFVBQUNELGNBQUQsRUFBZ0RzQixpQkFBaEQsRUFBc0U7QUFDdkgsVUFBSUEsaUJBQWlCLENBQUNDLFlBQXRCLEVBQW9DO0FBQ25DdkIsUUFBQUEsY0FBYyxDQUFDSSxJQUFmLENBQW9Ca0IsaUJBQXBCO0FBQ0E7O0FBQ0QsYUFBT3RCLGNBQVA7QUFDQSxLQUxzQixFQUtwQixFQUxvQixDQUF2QjtBQU9BLFdBQU9BLGNBQWMsQ0FBQ1MsR0FBZixDQUFtQixVQUFDYSxpQkFBRDtBQUFBLGFBQXVCRSxpQ0FBaUMsQ0FBQ0YsaUJBQUQsQ0FBeEQ7QUFBQSxLQUFuQixDQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ0EsV0FBU0UsaUNBQVQsQ0FBMkNGLGlCQUEzQyxFQUFpSDtBQUNoSCxRQUFNRyxZQUFZLEdBQUdDLHFCQUFxQixDQUFDSixpQkFBaUIsQ0FBQ0QsR0FBbkIsQ0FBMUM7QUFDQSxRQUFNTSxVQUFpQyxHQUFHO0FBQ3pDQyxNQUFBQSxFQUFFLEVBQUVILFlBRHFDO0FBRXpDSixNQUFBQSxHQUFHLEVBQUVDLGlCQUFpQixDQUFDRCxHQUZrQjtBQUd6Q1EsTUFBQUEsS0FBSyxFQUFFUCxpQkFBaUIsQ0FBQ08sS0FIZ0I7QUFJekNDLE1BQUFBLElBQUksRUFBRTVDLGNBQWMsQ0FBQzZDLFdBSm9CO0FBS3pDQyxNQUFBQSxRQUFRLEVBQUVWLGlCQUFpQixDQUFDQyxZQUFsQixJQUFrQyxFQUxIO0FBTXpDVSxNQUFBQSxPQUFPLEVBQUVYLGlCQUFpQixDQUFDVyxPQU5jO0FBT3pDQyxNQUFBQSxLQUFLLEVBQUUsQ0FQa0M7QUFRekNDLE1BQUFBLFdBQVcsRUFBRUMsU0FSNEI7QUFTekNDLE1BQUFBLE9BQU8sRUFBRWYsaUJBQWlCLENBQUNlLE9BVGM7QUFVekNDLE1BQUFBLFlBQVksRUFBRWhCLGlCQUFpQixDQUFDZ0IsWUFWUztBQVd6Q0MsTUFBQUEsT0FBTyxFQUFFO0FBWGdDLEtBQTFDO0FBYUEsV0FBT1osVUFBUDtBQUNBLEcsQ0FFRDtBQUNBO0FBQ0E7OztBQUNBLE1BQU1hLGdCQUFnQixHQUFHLFVBQUN0QyxlQUFELEVBQThCdUMsUUFBOUIsRUFBMkQ7QUFBQTs7QUFDbkYsV0FBTyx3QkFBQXZDLGVBQWUsQ0FBQ3dDLEVBQWhCLDRFQUFvQkMsUUFBcEIsaUNBQWtDekMsZUFBZSxDQUFDMEMsS0FBbEQsMERBQWtDLHNCQUF1QkQsUUFBdkIsRUFBbEMsS0FBdUVGLFFBQTlFO0FBQ0EsR0FGRDtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVNJLGtCQUFULENBQ0NOLE9BREQsRUFFQ3JDLGVBRkQsRUFHQ0osZ0JBSEQsRUFJb0M7QUFDbkMsUUFBTWdELGFBQTJCLEdBQUdDLG9CQUFvQixDQUFDN0MsZUFBRCxFQUFrQkosZ0JBQWxCLENBQXBCLElBQTJELEVBQS9GO0FBQUEsUUFDQ2tELFdBQStDLEdBQUdDLGNBQWMsQ0FBQy9DLGVBQUQsRUFBa0JKLGdCQUFsQixDQURqRTtBQUFBLFFBRUNvRCxjQUFjLEdBQUdDLG9CQUFvQixDQUNwQ1osT0FEb0MsRUFFcENhLHNCQUFzQixDQUFDSixXQUFELEVBQWNsRCxnQkFBZCxFQUFnQ3lDLE9BQWhDLEVBQXlDSCxTQUF6QyxFQUFvREEsU0FBcEQsRUFBK0RVLGFBQS9ELENBRmMsRUFHcEM7QUFBRU8sTUFBQUEsT0FBTyxFQUFFO0FBQVgsS0FIb0MsQ0FGdEM7QUFPQSxXQUFPSCxjQUFjLEdBQUdJLHNDQUFzQyxDQUFDQyxzQkFBc0IsQ0FBQ0wsY0FBRCxDQUF2QixDQUF6QyxHQUFvRlgsT0FBekc7QUFDQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTaUIsZUFBVCxDQUF5QnRELGVBQXpCLEVBQXNESixnQkFBdEQsRUFBNEg7QUFDM0gsUUFBSXlDLE9BQU8sR0FBRyxJQUFJa0IsS0FBSixFQUFkOztBQUNBLFlBQVF2RCxlQUFlLENBQUNDLEtBQXhCO0FBQ0M7QUFDQ29DLFFBQUFBLE9BQU8sR0FDTnJDLGVBQWUsQ0FBQ0csTUFBaEIsQ0FBdUJxRCxNQUF2QixDQUE4QixVQUFDQyxrQkFBRDtBQUFBLGlCQUF3QkMsZ0JBQWdCLENBQUNELGtCQUFELENBQXhDO0FBQUEsU0FBOUIsQ0FEUyxDQUVSMUQsTUFGUSxDQUdULFVBQUM0RCxhQUFELEVBQW1DQyxjQUFuQztBQUFBLGlCQUNDQyx1QkFBdUIsQ0FBQ0YsYUFBRCxFQUFnQkMsY0FBaEIsRUFBZ0NoRSxnQkFBaEMsQ0FEeEI7QUFBQSxTQUhTLEVBS1QsRUFMUyxDQUFWO0FBT0E7O0FBQ0Q7QUFDQ3lDLFFBQUFBLE9BQU8sR0FBR3dCLHVCQUF1QixDQUFDLEVBQUQsRUFBSzdELGVBQUwsRUFBc0JKLGdCQUF0QixDQUFqQztBQUNBOztBQUNEO0FBQ0M7QUFkRjs7QUFnQkEsV0FBTytDLGtCQUFrQixDQUFDTixPQUFELEVBQVVyQyxlQUFWLEVBQTJCSixnQkFBM0IsQ0FBekI7QUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBU2tFLGFBQVQsQ0FBdUJDLFVBQXZCLEVBQXVFO0FBQ3RFO0FBQ0EsUUFBTUMsbUJBQW1CLEdBQUdDLEtBQUssQ0FBQ0MsMkJBQTJCLENBQUNILFVBQUQsQ0FBNUIsRUFBMEMsSUFBMUMsQ0FBakM7QUFDQSxXQUFPSSxpQkFBaUIsQ0FBQ0MsTUFBTSxDQUFDSixtQkFBRCxFQUFzQkssVUFBVSxDQUFDQyxLQUFqQyxFQUF3Q0QsVUFBVSxDQUFDRSxXQUFuRCxDQUFQLENBQXhCO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxXQUFTOUQsZ0JBQVQsQ0FDTlQsZUFETSxFQUVORixjQUZNLEVBR05GLGdCQUhNLEVBSU5vQyxLQUpNLEVBS053QyxnQkFMTSxFQU1OM0UsZUFOTSxFQU9pQjtBQUFBOztBQUN2QixRQUFNMEIsWUFBWSxHQUFHa0QsZUFBZSxDQUFDO0FBQUVDLE1BQUFBLEtBQUssRUFBRTFFO0FBQVQsS0FBRCxDQUFwQztBQUNBLFFBQU0yRSxpQkFBc0IsNEJBQUczRSxlQUFlLENBQUM0RSxXQUFuQixvRkFBRyxzQkFBNkJDLEVBQWhDLDJEQUFHLHVCQUFpQ0MsTUFBaEU7QUFDQSxRQUFNQyxTQUFTLEdBQUdaLGlCQUFpQixDQUFDYSxHQUFHLENBQUNmLEtBQUssQ0FBQyxJQUFELEVBQU9DLDJCQUEyQixDQUFDUyxpQkFBRCxDQUFsQyxDQUFOLENBQUosQ0FBbkM7QUFDQSxRQUFNTSxtQkFBbUIsR0FDeEJGLFNBQVMsSUFBSSxPQUFPQSxTQUFQLEtBQXFCLFFBQWxDLElBQThDQSxTQUFTLENBQUN6RixPQUFWLENBQWtCLElBQWxCLE1BQTRCLENBQTFFLElBQStFLENBQUFxRixpQkFBaUIsU0FBakIsSUFBQUEsaUJBQWlCLFdBQWpCLFlBQUFBLGlCQUFpQixDQUFFL0MsSUFBbkIsTUFBNEIsTUFENUc7QUFFQSxRQUFNc0QsMEJBQTBCLEdBQy9CSCxTQUFTLElBQUlFLG1CQUFiLEdBQW1DRixTQUFTLENBQUNJLFNBQVYsQ0FBb0JKLFNBQVMsQ0FBQ3pGLE9BQVYsQ0FBa0IsSUFBbEIsSUFBMEIsQ0FBOUMsRUFBaUR5RixTQUFTLENBQUNLLFdBQVYsQ0FBc0IsR0FBdEIsQ0FBakQsQ0FBbkMsR0FBa0gsS0FEbkg7QUFFQSxRQUFNekQsS0FBSyxHQUFHd0MsaUJBQWlCLENBQUNELDJCQUEyQixDQUFDbEUsZUFBZSxDQUFDMEMsS0FBakIsQ0FBNUIsQ0FBL0I7QUFDQSxRQUFNakIsVUFBMEIsR0FBRztBQUNsQ0MsTUFBQUEsRUFBRSxFQUFFSCxZQUQ4QjtBQUVsQ0osTUFBQUEsR0FBRyxFQUFFbUIsZ0JBQWdCLENBQUN0QyxlQUFELEVBQWtCdUIsWUFBbEIsQ0FGYTtBQUdsQ0ksTUFBQUEsS0FBSyxFQUFFQSxLQUgyQjtBQUlsQ0MsTUFBQUEsSUFBSSxFQUFFNUMsY0FBYyxDQUFDcUcsT0FKYTtBQUtsQ0MsTUFBQUEsY0FBYyxFQUFFMUYsZ0JBQWdCLENBQUMyRiwrQkFBakIsQ0FBaUR2RixlQUFlLENBQUN3RixrQkFBakUsQ0FMa0I7QUFNbEN6RCxNQUFBQSxPQUFPLEVBQUVnRCxTQU55QjtBQU9sQ1UsTUFBQUEsbUJBQW1CLEVBQUVSLG1CQVBhO0FBUWxDakQsTUFBQUEsS0FBSyxFQUFFQSxLQVIyQjtBQVNsQ0MsTUFBQUEsV0FBVyxFQUFFQztBQVRxQixLQUFuQzs7QUFXQSxRQUFJckMsZUFBSixFQUFxQjtBQUNwQjRCLE1BQUFBLFVBQVUsQ0FBQ1UsT0FBWCxHQUFxQnVELGdDQUFnQyxDQUFDMUYsZUFBRCxFQUFrQkEsZUFBbEIsRUFBbUNKLGdCQUFuQyxDQUFyRDtBQUNBNkIsTUFBQUEsVUFBVSxDQUFDVyxZQUFYLEdBQTBCO0FBQ3pCdUQsUUFBQUEsVUFBVSxFQUFFQywyQ0FBMkMsQ0FBQzVGLGVBQUQsRUFBa0JBLGVBQWxCLEVBQW1DSixnQkFBbkM7QUFEOUIsT0FBMUI7QUFHQTs7QUFDRCxRQUFJaUcsT0FBb0MsR0FBRyxFQUEzQztBQUNBLFFBQU1DLFlBQXlDLEdBQUcsRUFBbEQ7QUFDQSxRQUFNQyxLQUFvQixHQUFHLEVBQTdCO0FBQ0EsUUFBSUMsZUFBZSxHQUFHLEVBQXRCO0FBQ0FoRSxJQUFBQSxLQUFLOztBQUNMLFlBQVFoQyxlQUFlLENBQUNDLEtBQXhCO0FBQ0M7QUFDQyxZQUFNZCxNQUFNLEdBQUdhLGVBQWUsQ0FBQ0csTUFBL0I7O0FBQ0EsWUFBSWpCLFFBQVEsQ0FBQ0MsTUFBRCxDQUFaLEVBQXNCO0FBQ3JCO0FBQ0EsZUFBSyxJQUFJOEcsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzlHLE1BQU0sQ0FBQ21CLE1BQTNCLEVBQW1DMkYsQ0FBQyxFQUFwQyxFQUF3QztBQUFBOztBQUN2QyxnQkFBSWhILFdBQVcsQ0FBQ0ssT0FBWixZQUFxQkgsTUFBTSxDQUFDOEcsQ0FBRCxDQUFQLENBQW1CMUcsTUFBdkMsK0RBQW9CLFFBQTJCQyxPQUEvQyxvREFBb0IsZ0JBQW9DQyxJQUF4RCxJQUFnRSxDQUFDLENBQXJFLEVBQXdFO0FBQ3ZFO0FBQ0FxRyxjQUFBQSxZQUFZLENBQUM1RixJQUFiLENBQWtCTyxnQkFBZ0IsQ0FBQ3RCLE1BQU0sQ0FBQzhHLENBQUQsQ0FBUCxFQUFZLEVBQVosRUFBZ0JyRyxnQkFBaEIsRUFBa0NvQyxLQUFsQyxFQUF5QzdDLE1BQU0sQ0FBQ21CLE1BQVAsS0FBa0IsQ0FBM0QsRUFBOERULGVBQTlELENBQWxDO0FBQ0FrRyxjQUFBQSxLQUFLLENBQUM3RixJQUFOLENBQVcrRixDQUFYO0FBQ0E7QUFDRDs7QUFDRCxlQUFLLElBQUlBLEVBQUMsR0FBR0YsS0FBSyxDQUFDekYsTUFBTixHQUFlLENBQTVCLEVBQStCMkYsRUFBQyxJQUFJLENBQXBDLEVBQXVDQSxFQUFDLEVBQXhDLEVBQTRDO0FBQzNDO0FBQ0E5RyxZQUFBQSxNQUFNLENBQUNrQixNQUFQLENBQWMwRixLQUFLLENBQUNFLEVBQUQsQ0FBbkIsRUFBd0IsQ0FBeEI7QUFDQTs7QUFDRCxjQUFJOUcsTUFBTSxDQUFDbUIsTUFBWCxFQUFtQjtBQUNsQk4sWUFBQUEsZUFBZSxDQUFDRyxNQUFoQixHQUF5QmhCLE1BQXpCLENBRGtCLENBRWxCOztBQUNBMEcsWUFBQUEsT0FBTyxDQUFDM0YsSUFBUixDQUFhTyxnQkFBZ0IsQ0FBQ1QsZUFBRCxFQUFrQixFQUFsQixFQUFzQkosZ0JBQXRCLEVBQXdDb0MsS0FBeEMsRUFBK0N3QyxnQkFBL0MsRUFBaUUzRSxlQUFqRSxDQUE3QjtBQUNBOztBQUNEZ0csVUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNLLE1BQVIsQ0FBZUosWUFBZixDQUFWOztBQUNBLGNBQU1LLGVBQWdDLG1DQUNsQzFFLFVBRGtDO0FBRXJDRyxZQUFBQSxJQUFJLEVBQUU1QyxjQUFjLENBQUNvSCxLQUZnQjtBQUdyQ3BFLFlBQUFBLEtBQUssRUFBRUEsS0FIOEI7QUFJckM2RCxZQUFBQSxPQUFPLEVBQUVBO0FBSjRCLFlBQXRDOztBQU1BLGlCQUFPTSxlQUFQO0FBQ0EsU0ExQkQsTUEwQk87QUFDTixjQUFNOUQsT0FBTyxHQUFHaUIsZUFBZSxDQUFDdEQsZUFBRCxFQUFrQkosZ0JBQWxCLENBQS9CO0FBQUEsY0FDQ3lHLHdCQUF3QyxtQ0FDcEM1RSxVQURvQztBQUV2Q0csWUFBQUEsSUFBSSxFQUFFNUMsY0FBYyxDQUFDc0gsSUFGa0I7QUFHdkNDLFlBQUFBLGNBQWMsRUFBRUMsb0JBQW9CLENBQUN4RyxlQUFELEVBQWtCK0UsU0FBbEIsRUFBNkJuRixnQkFBN0IsRUFBK0N5QyxPQUEvQyxDQUhHO0FBSXZDTCxZQUFBQSxLQUFLLEVBQUVBLEtBSmdDO0FBS3ZDSyxZQUFBQSxPQUFPLEVBQUVBLE9BQU8sQ0FBQ21CLE1BQVIsQ0FBZSxVQUFDaUQsTUFBRDtBQUFBLHFCQUFZQSxNQUFNLENBQUNDLFNBQVAsS0FBcUJ4RSxTQUFqQztBQUFBLGFBQWY7QUFMOEIsWUFEekM7O0FBUUEsaUJBQU9tRSx3QkFBUDtBQUNBOztBQUNGO0FBQ0MsWUFBSSxDQUFDckcsZUFBZSxDQUFDVCxNQUFoQixDQUF1QkMsT0FBNUIsRUFBcUM7QUFDcEN3RyxVQUFBQSxlQUFlLDJDQUFvQ2hHLGVBQWUsQ0FBQ1QsTUFBaEIsQ0FBdUJvSCxLQUEzRCxDQUFmO0FBQ0EsU0FGRCxNQUVPO0FBQ04sa0JBQVEzRyxlQUFlLENBQUNULE1BQWhCLENBQXVCQyxPQUF2QixDQUErQkMsSUFBdkM7QUFDQztBQUNBO0FBQ0E7QUFDQTtBQUNDLGtCQUFNbUgsWUFBWSxHQUFHQyxpQ0FBaUMsQ0FDckQ3RyxlQUFlLENBQUNULE1BQWhCLENBQXVCb0gsS0FEOEIsRUFFckRHLGlDQUFpQyxDQUFDOUcsZUFBRCxFQUFrQkYsY0FBbEIsRUFBa0NGLGdCQUFsQyxDQUZvQixFQUdyREEsZ0JBSHFELEVBSXJEc0MsU0FKcUQsRUFLckRyQyxlQUxxRCxDQUF0RDtBQU9BLGtCQUFNa0gsWUFBWSxHQUNqQiwwQkFBQ0gsWUFBWSxDQUFDSSxjQUFiLENBQTRCLENBQTVCLENBQUQsMEdBQXlDQyxVQUF6QyxrRkFBcUR0RixLQUFyRCxnQ0FBK0RpRixZQUFZLENBQUNJLGNBQWIsQ0FBNEIsQ0FBNUIsQ0FBL0QsMkRBQThELHVCQUF5Q3JGLEtBQXZHLENBREQ7QUFFQSxrQkFBTXVGLFNBQVMsR0FBR0Msc0JBQXNCLENBQUMzQyxnQkFBRCxFQUFtQi9DLFVBQVUsQ0FBQ0UsS0FBOUIsRUFBcUNvRixZQUFyQyxDQUF4QztBQUNBLGtCQUFNSyxzQkFBc0IsR0FBR3JDLFNBQVMsSUFBSXBELEtBQUssS0FBSyxXQUF2QixLQUF1Q0EsS0FBSyxHQUFHb0QsU0FBSCxHQUFlLEtBQTNELENBQS9COztBQUNBLGtCQUFNc0MsMkJBQXdELG1DQUMxRDVGLFVBRDBEO0FBRTdERyxnQkFBQUEsSUFBSSxFQUFFNUMsY0FBYyxDQUFDc0ksaUJBRndDO0FBRzdEdEYsZ0JBQUFBLEtBQUssRUFBRUEsS0FIc0Q7QUFJN0Q0RSxnQkFBQUEsWUFBWSxFQUFFQSxZQUorQztBQUs3RE0sZ0JBQUFBLFNBQVMsRUFBRUEsU0FMa0Q7QUFNN0RLLGdCQUFBQSxZQUFZLEVBQUV0QyxtQkFBbUIsaUJBQ3ZCQywwQkFEdUIsb0JBQ2F2RCxLQURiLG1DQUMyQ3VGLFNBRDNDLDBCQUU5QkU7QUFSMEQsZ0JBQTlEOztBQVVBLHFCQUFPQywyQkFBUDs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0M7QUFDQSxrQkFBTWhGLFFBQU8sR0FBR2lCLGVBQWUsQ0FBQ3RELGVBQUQsRUFBa0JKLGdCQUFsQixDQUEvQjtBQUFBLGtCQUNDNEgscUJBQXFDLG1DQUNqQy9GLFVBRGlDO0FBRXBDRyxnQkFBQUEsSUFBSSxFQUFFNUMsY0FBYyxDQUFDc0gsSUFGZTtBQUdwQ3RFLGdCQUFBQSxLQUFLLEVBQUVBLEtBSDZCO0FBSXBDdUUsZ0JBQUFBLGNBQWMsRUFBRUMsb0JBQW9CLENBQUN4RyxlQUFELEVBQWtCK0UsU0FBbEIsRUFBNkJuRixnQkFBN0IsRUFBK0N5QyxRQUEvQyxDQUpBO0FBS3BDQSxnQkFBQUEsT0FBTyxFQUFFQSxRQUFPLENBQUNtQixNQUFSLENBQWUsVUFBQ2lELE1BQUQ7QUFBQSx5QkFBWUEsTUFBTSxDQUFDQyxTQUFQLEtBQXFCeEUsU0FBakM7QUFBQSxpQkFBZjtBQUwyQixnQkFEdEM7O0FBUUEscUJBQU9zRixxQkFBUDs7QUFFRDtBQUNDeEIsY0FBQUEsZUFBZSxpQkFBVWhHLGVBQWUsQ0FBQ1QsTUFBaEIsQ0FBdUJDLE9BQXZCLENBQStCQyxJQUF6QyxjQUFmO0FBQ0E7QUE5Q0Y7QUFnREE7O0FBQ0Q7O0FBQ0Q7QUFDQ3VHLFFBQUFBLGVBQWUsR0FBRyx5QkFBbEI7QUFDQTs7QUFDRDtBQUNDO0FBbEdGLEtBL0J1QixDQW1JdkI7OztBQUNBLFFBQU15QixxQkFBNEMsbUNBQzlDaEcsVUFEOEM7QUFFakRpRyxNQUFBQSxJQUFJLEVBQUUxQjtBQUYyQyxNQUFsRDs7QUFJQSxXQUFPeUIscUJBQVA7QUFDQTs7OztBQUNELFdBQVNOLHNCQUFULENBQ0MzQyxnQkFERCxFQUVDbUQsZUFGRCxFQUdDWixZQUhELEVBSVc7QUFDVixRQUFJdkMsZ0JBQWdCLElBQUl1QyxZQUFZLEtBQUtZLGVBQXpDLEVBQTBEO0FBQ3pELGFBQU8sS0FBUDtBQUNBOztBQUNELFdBQU8sSUFBUDtBQUNBOztBQUNELFdBQVM5RCx1QkFBVCxDQUNDeEIsT0FERCxFQUVDckMsZUFGRCxFQUdDSixnQkFIRCxFQUlxQjtBQUNwQixRQUFNZ0ksZUFBb0MsR0FBRzVILGVBQWUsQ0FBQ1QsTUFBaEIsQ0FBdUJDLE9BQXBFO0FBQ0EsUUFBTXFJLFdBQVcsR0FBRzdILGVBQWUsQ0FBQ1QsTUFBaEIsQ0FBdUJvSCxLQUEzQztBQUNBLFFBQUltQixlQUE2QyxHQUFHLEVBQXBEO0FBQ0EsUUFBSUMsbUJBQTZDLEdBQUcsRUFBcEQ7O0FBQ0EsNkJBQW9DRixXQUFXLENBQUNHLEtBQVosQ0FBa0IsR0FBbEIsQ0FBcEM7QUFBQTtBQUFBLFFBQUtDLHNCQUFMOztBQUNBLFFBQUlBLHNCQUFzQixDQUFDM0gsTUFBdkIsR0FBZ0MsQ0FBcEMsRUFBdUM7QUFDdEMsVUFBSTJILHNCQUFzQixDQUFDN0MsV0FBdkIsQ0FBbUMsR0FBbkMsTUFBNEM2QyxzQkFBc0IsQ0FBQzNILE1BQXZCLEdBQWdDLENBQWhGLEVBQW1GO0FBQ2xGMkgsUUFBQUEsc0JBQXNCLEdBQUdBLHNCQUFzQixDQUFDQyxNQUF2QixDQUE4QixDQUE5QixFQUFpQ0Qsc0JBQXNCLENBQUMzSCxNQUF2QixHQUFnQyxDQUFqRSxDQUF6QjtBQUNBO0FBQ0QsS0FKRCxNQUlPO0FBQ04ySCxNQUFBQSxzQkFBc0IsR0FBRy9GLFNBQXpCO0FBQ0E7O0FBRUQsUUFBSTBGLGVBQUosRUFBcUI7QUFDcEIsY0FBUUEsZUFBZSxDQUFDbkksSUFBeEI7QUFDQztBQUNDc0ksVUFBQUEsbUJBQW1CLEdBQUlILGVBQUQsQ0FBZ0NPLElBQXREO0FBQ0FMLFVBQUFBLGVBQWUsR0FBRzVFLHNCQUFzQixDQUN2Q3RELGdCQUFnQixDQUFDd0ksK0JBQWpCLENBQWlEUixlQUFqRCxFQUFrRXZGLE9BRDNCLEVBRXZDekMsZ0JBRnVDLEVBR3ZDc0MsU0FIdUMsRUFJdkNBLFNBSnVDLEVBS3ZDQSxTQUx1QyxFQU12Q0EsU0FOdUMsRUFPdkNsQyxlQUFlLENBQUN3RixrQkFQdUIsQ0FBeEM7QUFTQTs7QUFDRDtBQUNBO0FBQ0MsY0FBSW9DLGVBQWUsQ0FBQ1MsU0FBcEIsRUFBK0I7QUFDOUJOLFlBQUFBLG1CQUFtQixHQUFHSCxlQUF0QjtBQUNBOztBQUNEO0FBbEJGO0FBb0JBOztBQUVEdkYsSUFBQUEsT0FBTyxHQUFHMEYsbUJBQW1CLENBQUNoSSxNQUFwQixDQUEyQixVQUFDNEQsYUFBRCxFQUFnQjJFLFNBQWhCLEVBQXNEO0FBQUE7O0FBQzFGLGNBQVFBLFNBQVMsQ0FBQ3JJLEtBQWxCO0FBQ0M7QUFDQyxjQUFJLDBCQUFBcUksU0FBUyxDQUFDQyxlQUFWLGdGQUEyQkMsT0FBM0IsUUFBeUMsSUFBN0MsRUFBbUQ7QUFDbEQ1SSxZQUFBQSxnQkFBZ0IsQ0FDZDZJLGNBREYsR0FFRUMsUUFGRixDQUVXQyxhQUFhLENBQUNDLFVBRnpCLEVBRXFDQyxhQUFhLENBQUNDLEdBRm5ELEVBRXdEQyxTQUFTLENBQUNDLDJCQUFWLENBQXNDQyxlQUY5RjtBQUdBOztBQUNELGNBQUksc0JBQUFYLFNBQVMsQ0FBQ1ksTUFBVix3RUFBa0JWLE9BQWxCLFFBQWdDLElBQXBDLEVBQTBDO0FBQ3pDNUksWUFBQUEsZ0JBQWdCLENBQ2Q2SSxjQURGLEdBRUVDLFFBRkYsQ0FFV0MsYUFBYSxDQUFDQyxVQUZ6QixFQUVxQ0MsYUFBYSxDQUFDQyxHQUZuRCxFQUV3REMsU0FBUyxDQUFDQywyQkFBVixDQUFzQ0csTUFGOUY7QUFHQTs7QUFDRCxjQUFJLDBCQUFBYixTQUFTLENBQUNjLFdBQVYsZ0ZBQXVCWixPQUF2QixRQUFxQyxJQUF6QyxFQUErQztBQUM5QzVJLFlBQUFBLGdCQUFnQixDQUNkNkksY0FERixHQUVFQyxRQUZGLENBRVdDLGFBQWEsQ0FBQ0MsVUFGekIsRUFFcUNDLGFBQWEsQ0FBQ0MsR0FGbkQsRUFFd0RDLFNBQVMsQ0FBQ0MsMkJBQVYsQ0FBc0NLLFdBRjlGO0FBR0E7O0FBQ0QsY0FBTUMscUJBQTBCLEdBQUcsRUFBbkM7O0FBQ0EsY0FBSWhCLFNBQVMsQ0FBQ2lCLE9BQWQsRUFBdUI7QUFDdEJELFlBQUFBLHFCQUFxQixDQUFDRSxxQkFBdEIsR0FBOENDLHdCQUF3QixDQUFDbkIsU0FBUyxDQUFDaUIsT0FBWCxDQUF0RTtBQUNBOztBQUNENUYsVUFBQUEsYUFBYSxDQUFDekQsSUFBZCxDQUFtQjtBQUNsQjBCLFlBQUFBLElBQUksRUFBRThILFVBQVUsQ0FBQ0MsaUNBREM7QUFFbEJqSSxZQUFBQSxFQUFFLEVBQUVrSSxTQUFTLENBQUM7QUFBRWxGLGNBQUFBLEtBQUssRUFBRTFFO0FBQVQsYUFBRCxFQUE2QnNJLFNBQTdCLENBRks7QUFHbEJuSCxZQUFBQSxHQUFHLEVBQUUwSSxTQUFTLENBQUNDLHdCQUFWLENBQW1DeEIsU0FBbkMsQ0FIYTtBQUlsQlosWUFBQUEsSUFBSSxzQkFBRVksU0FBUyxDQUFDNUYsS0FBWixxREFBRSxpQkFBaUJELFFBQWpCLEVBSlk7QUFLbEI2QyxZQUFBQSxjQUFjLEVBQUUsRUFMRTtBQU1sQnlFLFlBQUFBLE9BQU8sRUFDTnpCLFNBQVMsQ0FBQzBCLG1CQUFWLEtBQWtDOUgsU0FBbEMsR0FDR2lDLGlCQUFpQixDQUFDRixLQUFLLENBQUNDLDJCQUEyQiwwQkFBQ29FLFNBQVMsQ0FBQzBCLG1CQUFYLDBEQUFDLHNCQUErQnhCLE9BQS9CLEVBQUQsQ0FBNUIsRUFBd0UsSUFBeEUsQ0FBTixDQURwQixHQUVHLE1BVGM7QUFVbEJ6RyxZQUFBQSxPQUFPLEVBQUVvQyxpQkFBaUIsQ0FBQ2EsR0FBRyxDQUFDZixLQUFLLENBQUNDLDJCQUEyQiwwQkFBQ29FLFNBQVMsQ0FBQzFELFdBQVgsb0ZBQUMsc0JBQXVCQyxFQUF4QixxRkFBQyx1QkFBMkJDLE1BQTVCLDJEQUFDLHVCQUFtQzBELE9BQW5DLEVBQUQsQ0FBNUIsRUFBNEUsSUFBNUUsQ0FBTixDQUFKLENBVlI7QUFXbEJ5QixZQUFBQSxVQUFVLEVBQUVuRyxhQUFhLDJCQUFDd0UsU0FBUyxDQUFDMUQsV0FBWCxxRkFBQyx1QkFBdUJDLEVBQXhCLDJEQUFDLHVCQUEyQnFGLFVBQTVCLENBWFA7QUFZbEJDLFlBQUFBLEtBQUssRUFBRWhHLGlCQUFpQixDQUN2QmlHLEVBQUUsQ0FBQyxrQ0FBRCxFQUFxQyxDQUN0Q2xHLDJCQUEyQixDQUFDb0UsU0FBUyxDQUFDK0IsY0FBWCxDQURXLEVBRXRDbkcsMkJBQTJCLENBQUNvRSxTQUFTLENBQUNnQyxNQUFYLENBRlcsRUFHdENoQixxQkFIc0MsQ0FBckMsQ0FEcUIsQ0FaTjtBQW1CbEJpQixZQUFBQSxVQUFVLEVBQUVwRyxpQkFBaUIsQ0FBQztBQUM3QnFHLGNBQUFBLGNBQWMsRUFBRXRHLDJCQUEyQixDQUFDb0UsU0FBUyxDQUFDK0IsY0FBWCxDQURkO0FBRTdCNUQsY0FBQUEsTUFBTSxFQUFFdkMsMkJBQTJCLENBQUNvRSxTQUFTLENBQUNnQyxNQUFYO0FBRk4sYUFBRDtBQW5CWCxXQUFuQjtBQXdCQTs7QUFDRDtBQUNDLGNBQU1HLGdDQUFxQyxHQUFHN0ssZ0JBQWdCLENBQUN3SSwrQkFBakIsQ0FBaURSLGVBQWpELEVBQWtFdkYsT0FBaEg7QUFDQSxjQUFNbEIsR0FBVyxHQUFHMEksU0FBUyxDQUFDQyx3QkFBVixDQUFtQ3hCLFNBQW5DLENBQXBCO0FBQ0EzRSxVQUFBQSxhQUFhLENBQUN6RCxJQUFkLENBQW1CO0FBQ2xCMEIsWUFBQUEsSUFBSSxFQUFFOEgsVUFBVSxDQUFDZ0Isa0JBREM7QUFFbEJoSixZQUFBQSxFQUFFLEVBQUVrSSxTQUFTLENBQUM7QUFBRWxGLGNBQUFBLEtBQUssRUFBRTFFO0FBQVQsYUFBRCxFQUE2QnNJLFNBQTdCLENBRks7QUFHbEJuSCxZQUFBQSxHQUFHLEVBQUVBLEdBSGE7QUFJbEJ1RyxZQUFBQSxJQUFJLHVCQUFFWSxTQUFTLENBQUM1RixLQUFaLHNEQUFFLGtCQUFpQkQsUUFBakIsRUFKWTtBQUtsQjZDLFlBQUFBLGNBQWMsRUFBRSxFQUxFO0FBTWxCeUUsWUFBQUEsT0FBTyxFQUFFWSw2QkFBNkIsQ0FBQy9LLGdCQUFELEVBQW1CMEksU0FBUyxDQUFDc0MsWUFBN0IsQ0FOcEI7QUFPbEJDLFlBQUFBLE9BQU8sRUFBRTVDLHNCQUFzQix5QkFBa0JBLHNCQUFsQixVQUErQy9GLFNBUDVEO0FBUWxCSCxZQUFBQSxPQUFPLEVBQUVvQyxpQkFBaUIsQ0FBQ2EsR0FBRyxDQUFDZixLQUFLLENBQUNDLDJCQUEyQiwyQkFBQ29FLFNBQVMsQ0FBQzFELFdBQVgscUZBQUMsdUJBQXVCQyxFQUF4QixxRkFBQyx1QkFBMkJDLE1BQTVCLDJEQUFDLHVCQUFtQzBELE9BQW5DLEVBQUQsQ0FBNUIsRUFBNEUsSUFBNUUsQ0FBTixDQUFKLENBUlI7QUFTbEJzQyxZQUFBQSxjQUFjLEVBQUVDLFFBQVEsQ0FBQ3pDLFNBQVMsQ0FBQ3NDLFlBQVgsQ0FUTjtBQVVsQlgsWUFBQUEsVUFBVSxFQUFFbkcsYUFBYSwyQkFBQ3dFLFNBQVMsQ0FBQzFELFdBQVgsc0ZBQUMsdUJBQXVCQyxFQUF4Qiw0REFBQyx3QkFBMkJxRixVQUE1QixDQVZQO0FBV2xCQyxZQUFBQSxLQUFLLEVBQUVoRyxpQkFBaUIsQ0FDdkJpRyxFQUFFLENBQ0QsY0FEQyxFQUVELENBQ0M5QixTQUFTLENBQUNnQyxNQURYLEVBRUM7QUFDQ1UsY0FBQUEsUUFBUSxFQUFFWixFQUFFLENBQUMsbUJBQUQsRUFBc0IsRUFBdEIsRUFBMEJhLFdBQVcsQ0FBQyxFQUFELEVBQUssU0FBTCxDQUFyQyxDQURiO0FBRUNDLGNBQUFBLGtCQUFrQixFQUFHNUMsU0FBUyxDQUFDNkMsa0JBQVYsS0FBaUMsb0NBQWpDLEdBQ2xCLFdBRGtCLEdBRWxCLFVBSko7QUFLQ0MsY0FBQUEsS0FBSyxFQUFFbEgsMkJBQTJCLENBQUNvRSxTQUFTLENBQUM1RixLQUFYLENBTG5DO0FBTUMySSxjQUFBQSxLQUFLLEVBQUVqQixFQUFFLENBQUMsVUFBRCxFQUFhLEVBQWIsRUFBaUJhLFdBQVcsQ0FBQyxHQUFELEVBQU0sU0FBTixDQUE1QixDQU5WO0FBT0NLLGNBQUFBLFdBQVcsRUFBRUMsaUJBQWlCLENBQzdCZCxnQ0FBZ0MsSUFBSUEsZ0NBQWdDLENBQUN0SixHQUFELENBRHZDO0FBUC9CLGFBRkQsQ0FGQyxFQWdCRHFLLEdBQUcsQ0FBQyxXQUFELENBaEJGLENBRHFCLENBWE47QUErQmxCOUUsWUFBQUEsU0FBUyxFQUFFNEIsU0FBUyxDQUFDWSxNQUFWLEdBQW1CbEosZUFBZSxDQUFDd0Ysa0JBQW5DLEdBQXdEdEQ7QUEvQmpELFdBQW5CO0FBaUNBOztBQUNEO0FBQ0M7QUFwRkY7O0FBc0ZBLGFBQU95QixhQUFQO0FBQ0EsS0F4RlMsRUF3RlB0QixPQXhGTyxDQUFWO0FBeUZBLFdBQU9ZLG9CQUFvQixDQUFDWixPQUFELEVBQVV5RixlQUFWLENBQTNCO0FBQ0E7O0FBRU0sV0FBU2lELFFBQVQsQ0FBa0JVLGdCQUFsQixFQUE2RDtBQUNuRSxRQUFJQSxnQkFBSixFQUFzQjtBQUFBOztBQUNyQixVQUFNQyxTQUFTLDRCQUFHRCxnQkFBZ0IsQ0FBQzdHLFdBQXBCLG9GQUFHLHNCQUE4QitHLE1BQWpDLDJEQUFHLHVCQUFzQ0MsZ0JBQXhEOztBQUNBLFVBQUlILGdCQUFnQixDQUFDSSxVQUFqQixDQUE0QnZMLE1BQTVCLEdBQXFDLENBQXJDLElBQTBDb0wsU0FBOUMsRUFBeUQ7QUFDeEQsZUFBTyxRQUFQO0FBQ0EsT0FGRCxNQUVPO0FBQ04sZUFBTyxNQUFQO0FBQ0E7QUFDRCxLQVBELE1BT087QUFDTixhQUFPLE1BQVA7QUFDQTtBQUNEOzs7O0FBRU0sV0FBU0ksdUJBQVQsQ0FDTkMsbUJBRE0sRUFFTm5NLGdCQUZNLEVBR3VDO0FBQzdDLFFBQU1vTSxXQUF1RCxHQUFHLEVBQWhFO0FBQ0FoTCxJQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWThLLG1CQUFaLEVBQWlDN0ssT0FBakMsQ0FDQyxVQUFDK0ssYUFBRDtBQUFBLGFBQ0VELFdBQVcsQ0FBQ0MsYUFBRCxDQUFYLEdBQTZCQyxzQkFBc0IsQ0FBQ0gsbUJBQW1CLENBQUNFLGFBQUQsQ0FBcEIsRUFBcUNBLGFBQXJDLEVBQW9Eck0sZ0JBQXBELENBRHJEO0FBQUEsS0FERDtBQUlBLFdBQU9vTSxXQUFQO0FBQ0E7Ozs7QUFFTSxXQUFTRSxzQkFBVCxDQUNOQyxrQkFETSxFQUVORixhQUZNLEVBR05yTSxnQkFITSxFQUl1QjtBQUM3QixRQUFNcUMsV0FBdUMsR0FBR2tLLGtCQUFrQixDQUFDbEssV0FBbkIsR0FDN0M7QUFDQUgsTUFBQUEsUUFBUSxFQUFFcUssa0JBQWtCLENBQUNsSyxXQUFuQixDQUErQkgsUUFEekM7QUFFQUosTUFBQUEsRUFBRSxFQUFFMEssZ0JBQWdCLENBQUNILGFBQUQsQ0FGcEI7QUFHQWxLLE1BQUFBLE9BQU8sRUFBRSxLQUhUO0FBSUFzSyxNQUFBQSxVQUFVLEVBQUVGLGtCQUFrQixDQUFDbEssV0FBbkIsQ0FBK0JvSztBQUozQyxLQUQ2QyxHQU83Q25LLFNBUEg7QUFRQSxRQUFJb0ssUUFBUSxHQUFHSCxrQkFBa0IsQ0FBQ0csUUFBbEM7O0FBQ0EsUUFBSSxDQUFDQSxRQUFMLEVBQWU7QUFDZEEsTUFBQUEsUUFBUSxHQUFHO0FBQ1ZDLFFBQUFBLFNBQVMsRUFBRUMsU0FBUyxDQUFDQztBQURYLE9BQVg7QUFHQTs7QUFDRCxRQUFNMUgsU0FBUyxHQUFHb0gsa0JBQWtCLENBQUNwSyxPQUFuQixLQUErQkcsU0FBL0IsR0FBMkNpSyxrQkFBa0IsQ0FBQ3BLLE9BQTlELEdBQXdFLElBQTFGO0FBQ0EsUUFBTWtELG1CQUFtQixHQUFHRixTQUFTLElBQUksT0FBT0EsU0FBUCxLQUFxQixRQUFsQyxJQUE4Q0EsU0FBUyxDQUFDekYsT0FBVixDQUFrQixJQUFsQixNQUE0QixDQUF0RztBQUNBLFFBQU1vTixvQkFBb0IsR0FBRztBQUM1QjlLLE1BQUFBLElBQUksRUFBRTVDLGNBQWMsQ0FBQ3FHLE9BRE87QUFFNUIzRCxNQUFBQSxFQUFFLEVBQUV5SyxrQkFBa0IsQ0FBQ3pLLEVBQW5CLElBQXlCRixxQkFBcUIsQ0FBQ3lLLGFBQUQsQ0FGdEI7QUFHNUI1SixNQUFBQSxPQUFPLEVBQUVhLHNCQUFzQixDQUFDaUosa0JBQWtCLENBQUM5SixPQUFwQixFQUE2QnpDLGdCQUE3QixDQUhIO0FBSTVCdUIsTUFBQUEsR0FBRyxFQUFFOEssYUFKdUI7QUFLNUJ0SyxNQUFBQSxLQUFLLEVBQUV3SyxrQkFBa0IsQ0FBQ3hLLEtBTEU7QUFNNUJLLE1BQUFBLEtBQUssRUFBRSxDQU5xQjtBQU81QnNLLE1BQUFBLFFBQVEsRUFBRUEsUUFQa0I7QUFRNUJ2SyxNQUFBQSxPQUFPLEVBQUVvSyxrQkFBa0IsQ0FBQ3BLLE9BQW5CLEtBQStCRyxTQUEvQixHQUEyQ2lLLGtCQUFrQixDQUFDcEssT0FBOUQsR0FBd0UsSUFSckQ7QUFTNUJFLE1BQUFBLFdBQVcsRUFBRUEsV0FUZTtBQVU1QndELE1BQUFBLG1CQUFtQixFQUFFUjtBQVZPLEtBQTdCOztBQVlBLFFBQUlrSCxrQkFBa0IsQ0FBQ3JLLFFBQW5CLElBQStCcUssa0JBQWtCLENBQUNRLElBQXRELEVBQTREO0FBQzNERCxNQUFBQSxvQkFBb0IsQ0FBQzlLLElBQXJCLEdBQTRCNUMsY0FBYyxDQUFDNkMsV0FBM0M7QUFDQzZLLE1BQUFBLG9CQUFELENBQTJENUssUUFBM0QsR0FBc0VxSyxrQkFBa0IsQ0FBQ3JLLFFBQW5CLElBQStCcUssa0JBQWtCLENBQUNRLElBQWxELElBQTBELEVBQWhJO0FBQ0EsS0FIRCxNQUdPO0FBQ05ELE1BQUFBLG9CQUFvQixDQUFDOUssSUFBckIsR0FBNEI1QyxjQUFjLENBQUM0TixXQUEzQztBQUNBOztBQUNELFdBQU9GLG9CQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNBLFdBQVM1RixpQ0FBVCxDQUNDK0YsWUFERCxFQUVDQyx1QkFGRCxFQUdDbE4sZ0JBSEQsRUFJVztBQUNWLFFBQU1tTixlQUFlLEdBQUduTixnQkFBZ0IsQ0FBQ2lCLGtCQUFqQixFQUF4Qjs7QUFDQSxRQUFJa00sZUFBZSxDQUFDQyxhQUFoQixFQUFKLEVBQXFDO0FBQ3BDO0FBQ0EsYUFBT0MsK0JBQStCLENBQUNKLFlBQUQsRUFBZUMsdUJBQWYsQ0FBdEM7QUFDQSxLQUhELE1BR087QUFBQTs7QUFDTixVQUFNSSxVQUFVLEdBQUd0TixnQkFBZ0IsQ0FBQ3VOLGFBQWpCLEVBQW5COztBQUNBLFVBQUkseUJBQUFELFVBQVUsQ0FBQ3RJLFdBQVgsa0dBQXdCQyxFQUF4QixvR0FBNEIxRSxNQUE1QiwwRUFBb0NHLE1BQXBDLElBQThDLDJCQUFBNE0sVUFBVSxDQUFDdEksV0FBWCw0R0FBd0JDLEVBQXhCLDRHQUE0QjFFLE1BQTVCLGtGQUFvQ0csTUFBcEMsSUFBNkMsQ0FBL0YsRUFBa0c7QUFDakcsZUFBTzJNLCtCQUErQixDQUFDSixZQUFELEVBQWVDLHVCQUFmLENBQXRDO0FBQ0EsT0FGRCxNQUVPO0FBQ04sZUFBTyxJQUFQO0FBQ0E7QUFDRDtBQUNEOztBQUVELFdBQVNHLCtCQUFULENBQXlDSixZQUF6QyxFQUFtRUMsdUJBQW5FLEVBQW1IO0FBQ2xILFdBQU9BLHVCQUF1QixDQUFDTSxLQUF4QixDQUE4QixVQUFVQyxRQUFWLEVBQW9CO0FBQ3hELFVBQUlBLFFBQVEsS0FBS1IsWUFBakIsRUFBK0I7QUFDOUIsWUFBSVEsUUFBUSxDQUFDcE4sS0FBVCxnREFBSixFQUF5RDtBQUFBOztBQUN4RCxjQUFNcU4sUUFBUSxHQUFHRCxRQUFqQjs7QUFDQSxjQUNDLHFCQUFBQyxRQUFRLENBQUMvTixNQUFULCtGQUFpQkMsT0FBakIsZ0ZBQTBCQyxJQUExQiwrQ0FDQSxzQkFBQTZOLFFBQVEsQ0FBQy9OLE1BQVQsaUdBQWlCQyxPQUFqQixnRkFBMEJDLElBQTFCLHNEQURBLElBRUEsMkJBQUE2TixRQUFRLENBQUMvTixNQUFULENBQWdCQyxPQUFoQixrRkFBeUJDLElBQXpCLCtEQUhELEVBSUU7QUFBQTs7QUFDRCxtQkFBTywwQkFBQTZOLFFBQVEsQ0FBQzFJLFdBQVQsMEdBQXNCQyxFQUF0QixrRkFBMEJDLE1BQTFCLE1BQXFDNUMsU0FBckMsNkJBQWlEb0wsUUFBUSxDQUFDMUksV0FBMUQscUZBQWlELHVCQUFzQkMsRUFBdkUsMkRBQWlELHVCQUEwQkMsTUFBM0UsR0FBb0YsS0FBM0Y7QUFDQTs7QUFDRCxpQkFBTyxJQUFQO0FBQ0EsU0FWRCxNQVVPO0FBQ04sY0FBTXlJLGtCQUFrQixHQUFHRixRQUEzQjtBQUNBLGlCQUFPRSxrQkFBa0IsQ0FBQ3BOLE1BQW5CLENBQTBCaU4sS0FBMUIsQ0FBZ0MsVUFBVTVNLEtBQVYsRUFBaUI7QUFBQTs7QUFDdkQsZ0JBQU1nTixXQUFXLEdBQUdoTixLQUFwQjs7QUFDQSxnQkFDQyx3QkFBQWdOLFdBQVcsQ0FBQ2pPLE1BQVoscUdBQW9CQyxPQUFwQixnRkFBNkJDLElBQTdCLCtDQUNBLHlCQUFBK04sV0FBVyxDQUFDak8sTUFBWix1R0FBb0JDLE9BQXBCLGdGQUE2QkMsSUFBN0Isc0RBREEsSUFFQSx5QkFBQStOLFdBQVcsQ0FBQ2pPLE1BQVosdUdBQW9CQyxPQUFwQixnRkFBNkJDLElBQTdCLCtEQUhELEVBSUU7QUFBQTs7QUFDRCxxQkFBTywwQkFBQStOLFdBQVcsQ0FBQzVJLFdBQVosMEdBQXlCQyxFQUF6QixrRkFBNkJDLE1BQTdCLE1BQXdDNUMsU0FBeEMsNkJBQW9Ec0wsV0FBVyxDQUFDNUksV0FBaEUscUZBQW9ELHVCQUF5QkMsRUFBN0UsMkRBQW9ELHVCQUE2QkMsTUFBakYsR0FBMEYsS0FBakc7QUFDQTs7QUFDRCxtQkFBTyxJQUFQO0FBQ0EsV0FWTSxDQUFQO0FBV0E7QUFDRDs7QUFDRCxhQUFPLElBQVA7QUFDQSxLQTVCTSxDQUFQO0FBNkJBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25UZXJtIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25GYWNldFR5cGVzLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRFbXBoYXNpemVkLFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uLCBDb252ZXJ0ZXJBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdEJ1dHRvblR5cGUsXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0LCBGbGV4U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQge1xuXHRnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0LFxuXHRnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QsXG5cdGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0ZXF1YWwsXG5cdGZuLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0bm90LFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDdXN0b21TdWJTZWN0aW9uSUQsIGdldEZvcm1JRCwgZ2V0U2lkZUNvbnRlbnRJRCwgZ2V0U3ViU2VjdGlvbklEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RBY3Rpb24sIE1hbmlmZXN0U3ViU2VjdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEZvcm1BY3Rpb25zLCBnZXRGb3JtSGlkZGVuQWN0aW9ucywgZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMgfSBmcm9tIFwiLi4vLi4vb2JqZWN0UGFnZS9Gb3JtTWVudUFjdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHsgZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24sIGlzUmVmZXJlbmNlRmFjZXQgfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcblxuZXhwb3J0IGVudW0gU3ViU2VjdGlvblR5cGUge1xuXHRVbmtub3duID0gXCJVbmtub3duXCIsIC8vIERlZmF1bHQgVHlwZVxuXHRGb3JtID0gXCJGb3JtXCIsXG5cdERhdGFWaXN1YWxpemF0aW9uID0gXCJEYXRhVmlzdWFsaXphdGlvblwiLFxuXHRYTUxGcmFnbWVudCA9IFwiWE1MRnJhZ21lbnRcIixcblx0UGxhY2Vob2xkZXIgPSBcIlBsYWNlaG9sZGVyXCIsXG5cdE1peGVkID0gXCJNaXhlZFwiXG59XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uID1cblx0fCBVbnN1cHBvcnRlZFN1YlNlY3Rpb25cblx0fCBGb3JtU3ViU2VjdGlvblxuXHR8IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvblxuXHR8IENvbnRhY3RTdWJTZWN0aW9uXG5cdHwgWE1MRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb25cblx0fCBNaXhlZFN1YlNlY3Rpb247XG5cbnR5cGUgQmFzZVN1YlNlY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHR0aXRsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aXNWaXNpYmlsaXR5RHluYW1pYz86IGJvb2xlYW4gfCBcIlwiO1xuXHRmbGV4U2V0dGluZ3M/OiBGbGV4U2V0dGluZ3M7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRsZXZlbDogbnVtYmVyO1xuXHRjb250ZW50PzogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXHRzaWRlQ29udGVudD86IFNpZGVDb250ZW50RGVmO1xufTtcblxudHlwZSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dGV4dDogc3RyaW5nO1xufTtcblxudHlwZSBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb247XG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzaG93VGl0bGU6IGJvb2xlYW47XG5cdHRpdGxlVmlzaWJsZT86IHN0cmluZyB8IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRhY3RTdWJTZWN0aW9uID0gVW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xuXG50eXBlIFhNTEZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBQbGFjZWhvbGRlckZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBNaXhlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0Y29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybTtcblx0Zm9ybURlZmluaXRpb246IEZvcm1EZWZpbml0aW9uO1xuXHRhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSB8IEJhc2VBY3Rpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZDogc3RyaW5nO1xuXHR0aXRsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHNob3dUaXRsZT86IGJvb2xlYW47XG5cdHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcbn07XG5cbnR5cGUgU2lkZUNvbnRlbnREZWYgPSB7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0c2lkZUNvbnRlbnRGYWxsRG93bj86IHN0cmluZztcblx0Y29udGFpbmVyUXVlcnk/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRlcXVhbFNwbGl0PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlU2VjdGlvbj47XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cbmNvbnN0IHRhcmdldFRlcm1zOiBzdHJpbmdbXSA9IFtcblx0VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sXG5cdFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbl07XG5cbi8vIFRPRE86IE5lZWQgdG8gaGFuZGxlIFRhYmxlIGNhc2UgaW5zaWRlIGNyZWF0ZVN1YlNlY3Rpb24gZnVuY3Rpb24gaWYgQ29sbGVjdGlvbkZhY2V0IGhhcyBUYWJsZSBSZWZlcmVuY2VGYWNldFxuY29uc3QgaGFzVGFibGUgPSAoZmFjZXRzOiBhbnlbXSA9IFtdKSA9PiB7XG5cdHJldHVybiBmYWNldHMuc29tZSgoZmFjZXRUeXBlKSA9PiB0YXJnZXRUZXJtcy5pbmRleE9mKGZhY2V0VHlwZT8uVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtKSA+IC0xKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHN1YnNlY3Rpb25zIGJhc2VkIG9uIGZhY2V0IGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGZhY2V0Q29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGZhY2V0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uIFRydWUgaWYgaGVhZGVyIHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGluIHRoaXMgaXRlcmF0aW9uXG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbnMoXG5cdGZhY2V0Q29sbGVjdGlvbjogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Ly8gRmlyc3Qgd2UgZGV0ZXJtaW5lIHdoaWNoIHN1YiBzZWN0aW9uIHdlIG5lZWQgdG8gY3JlYXRlXG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gZmFjZXRDb2xsZWN0aW9uLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSwgZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdFx0Ly8gVE9ETyBJZiB0aGUgQ29sbGVjdGlvbiBGYWNldCBoYXMgYSBjaGlsZCBvZiB0eXBlIENvbGxlY3Rpb24gRmFjZXQgd2UgYnJpbmcgdGhlbSB1cCBvbmUgbGV2ZWwgKEZvcm0gKyBUYWJsZSB1c2UgY2FzZSkgP1xuXHRcdFx0XHQvLyBmaXJzdCBjYXNlIGZhY2V0IENvbGxlY3Rpb24gaXMgY29tYmluYXRpb24gb2YgY29sbGVjdGlvbiBhbmQgcmVmZXJlbmNlIGZhY2V0IG9yIG5vdCBhbGwgZmFjZXRzIGFyZSByZWZlcmVuY2UgZmFjZXRzLlxuXHRcdFx0XHRpZiAoZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maW5kKChmYWNldFR5cGUpID0+IGZhY2V0VHlwZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSkge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnNwbGljZShmYWNldHNUb0NyZWF0ZS5sZW5ndGgsIDAsIC4uLmZhY2V0RGVmaW5pdGlvbi5GYWNldHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHRcdC8vIE5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdC8vIFRoZW4gd2UgY3JlYXRlIHRoZSBhY3R1YWwgc3Vic2VjdGlvbnNcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcCgoZmFjZXQpID0+XG5cdFx0Y3JlYXRlU3ViU2VjdGlvbihmYWNldCwgZmFjZXRzVG9DcmVhdGUsIGNvbnZlcnRlckNvbnRleHQsIDAsICEoZmFjZXQgYXMgYW55KT8uRmFjZXRzPy5sZW5ndGgsIGlzSGVhZGVyU2VjdGlvbilcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHN1YnNlY3Rpb25zIGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldD4gPSBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKVxuXHQpO1xuXHRjb25zdCBhQ3VzdG9tSGVhZGVyRmFjZXRzOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXRbXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhjdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGFDdXN0b21IZWFkZXJGYWNldHMucHVzaChjdXN0b21IZWFkZXJGYWNldHNba2V5XSk7XG5cdFx0cmV0dXJuIGFDdXN0b21IZWFkZXJGYWNldHM7XG5cdH0pO1xuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGFDdXN0b21IZWFkZXJGYWNldHMucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10sIGN1c3RvbUhlYWRlckZhY2V0KSA9PiB7XG5cdFx0aWYgKGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCkge1xuXHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChjdXN0b21IZWFkZXJGYWNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoKGN1c3RvbUhlYWRlckZhY2V0KSA9PiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24oY3VzdG9tSGVhZGVyRmFjZXQpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBhIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQHBhcmFtIGN1c3RvbUhlYWRlckZhY2V0IEEgY3VzdG9tIGhlYWRlciBmYWNldFxuICogQHJldHVybnMgQSBkZWZpbml0aW9uIGZvciBhIHN1YnNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0OiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldEN1c3RvbVN1YlNlY3Rpb25JRChjdXN0b21IZWFkZXJGYWNldC5rZXkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGN1c3RvbUhlYWRlckZhY2V0LmtleSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXQudGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQsXG5cdFx0dGVtcGxhdGU6IGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCB8fCBcIlwiLFxuXHRcdHZpc2libGU6IGN1c3RvbUhlYWRlckZhY2V0LnZpc2libGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRzdGFzaGVkOiBjdXN0b21IZWFkZXJGYWNldC5zdGFzaGVkLFxuXHRcdGZsZXhTZXR0aW5nczogY3VzdG9tSGVhZGVyRmFjZXQuZmxleFNldHRpbmdzLFxuXHRcdGFjdGlvbnM6IHt9XG5cdH07XG5cdHJldHVybiBzdWJTZWN0aW9uO1xufVxuXG4vLyBmdW5jdGlvbiBpc1RhcmdldEZvckNvbXBsaWFudChhbm5vdGF0aW9uUGF0aDogQW5ub3RhdGlvblBhdGgpIHtcbi8vIFx0cmV0dXJuIC8uKmNvbVxcLnNhcFxcLnZvY2FidWxhcmllc1xcLlVJXFwudjFcXC4oRmllbGRHcm91cHxJZGVudGlmaWNhdGlvbnxEYXRhUG9pbnR8U3RhdHVzSW5mbykuKi8udGVzdChhbm5vdGF0aW9uUGF0aC52YWx1ZSk7XG4vLyB9XG5jb25zdCBnZXRTdWJTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcbi8qKlxuICogQWRkcyBGb3JtIG1lbnUgYWN0aW9uIHRvIGFsbCBmb3JtIGFjdGlvbnMsIHJlbW92ZXMgZHVwbGljYXRlIGFjdGlvbnMgYW5kIGhpZGRlbiBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGZvcm0gbWVudSBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGFkZEZvcm1NZW51QWN0aW9ucyhcblx0YWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQmFzZUFjdGlvbltdIHwgQ29udmVydGVyQWN0aW9uW10ge1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRGb3JtSGlkZGVuQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpIHx8IFtdLFxuXHRcdGZvcm1BY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+ID0gZ2V0Rm9ybUFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRmb3JtQWxsQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0YWN0aW9ucyxcblx0XHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoZm9ybUFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaWRkZW5BY3Rpb25zKSxcblx0XHRcdHsgY29tbWFuZDogXCJvdmVyd3JpdGVcIiB9XG5cdFx0KTtcblx0cmV0dXJuIGZvcm1BbGxBY3Rpb25zID8gZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMocmVtb3ZlRHVwbGljYXRlQWN0aW9ucyhmb3JtQWxsQWN0aW9ucykpIDogYWN0aW9ucztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdGlvbiBmb3JtIGEgZmFjZXQuXG4gKlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGZhY2V0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0bGV0IGFjdGlvbnMgPSBuZXcgQXJyYXk8Q29udmVydGVyQWN0aW9uPigpO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maWx0ZXIoKHN1YkZhY2V0RGVmaW5pdGlvbikgPT4gaXNSZWZlcmVuY2VGYWNldChzdWJGYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW11cblx0XHRcdCkucmVkdWNlKFxuXHRcdFx0XHQoYWN0aW9uUmVkdWNlcjogQ29udmVydGVyQWN0aW9uW10sIHJlZmVyZW5jZUZhY2V0KSA9PlxuXHRcdFx0XHRcdGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKGFjdGlvblJlZHVjZXIsIHJlZmVyZW5jZUZhY2V0LCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0W11cblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFtdLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBhZGRGb3JtTWVudUFjdGlvbnMoYWN0aW9ucywgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgYnV0dG9uIHR5cGUgYmFzZWQgb24gQFVJLkVtcGhhc2l6ZWQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZW1waGFzaXplZCBFbXBoYXNpemVkIGFubm90YXRpb24gdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgYnV0dG9uIHR5cGUgb3IgcGF0aCBiYXNlZCBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBnZXRCdXR0b25UeXBlKGVtcGhhc2l6ZWQ6IEVtcGhhc2l6ZWQgfCB1bmRlZmluZWQpOiBCdXR0b25UeXBlIHtcblx0Ly8gRW1waGFzaXplZCBpcyBhIGJvb2xlYW4gc28gaWYgaXQncyBlcXVhbCB0byB0cnVlIHdlIHNob3cgdGhlIGJ1dHRvbiBhcyBHaG9zdCwgb3RoZXJ3aXNlIGFzIFRyYW5zcGFyZW50XG5cdGNvbnN0IGJ1dHRvblR5cGVDb25kaXRpb24gPSBlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZW1waGFzaXplZCksIHRydWUpO1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGJ1dHRvblR5cGVDb25kaXRpb24sIEJ1dHRvblR5cGUuR2hvc3QsIEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQpKSBhcyBCdXR0b25UeXBlO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN1YnNlY3Rpb24gYmFzZWQgb24gRmFjZXRUeXBlcy5cbiAqXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbGV2ZWxcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uXG4gKiBAcmV0dXJucyBBIHN1YnNlY3Rpb24gZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbihcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsZXZlbDogbnVtYmVyLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldFN1YlNlY3Rpb25JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSk7XG5cdGNvbnN0IG9IaWRkZW5Bbm5vdGF0aW9uOiBhbnkgPSBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdGNvbnN0IGlzVmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbCh0cnVlLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob0hpZGRlbkFubm90YXRpb24pKSkpO1xuXHRjb25zdCBpc0R5bmFtaWNFeHByZXNzaW9uID1cblx0XHRpc1Zpc2libGUgJiYgdHlwZW9mIGlzVmlzaWJsZSA9PT0gXCJzdHJpbmdcIiAmJiBpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpID09PSAwICYmIG9IaWRkZW5Bbm5vdGF0aW9uPy50eXBlICE9PSBcIlBhdGhcIjtcblx0Y29uc3QgaXNWaXNpYmxlRHluYW1pY0V4cHJlc3Npb24gPVxuXHRcdGlzVmlzaWJsZSAmJiBpc0R5bmFtaWNFeHByZXNzaW9uID8gaXNWaXNpYmxlLnN1YnN0cmluZyhpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpICsgMiwgaXNWaXNpYmxlLmxhc3RJbmRleE9mKFwifVwiKSkgOiBmYWxzZTtcblx0Y29uc3QgdGl0bGUgPSBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLkxhYmVsKSk7XG5cdGNvbnN0IHN1YlNlY3Rpb246IEJhc2VTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBnZXRTdWJTZWN0aW9uS2V5KGZhY2V0RGVmaW5pdGlvbiwgc3ViU2VjdGlvbklEKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdHZpc2libGU6IGlzVmlzaWJsZSxcblx0XHRpc1Zpc2liaWxpdHlEeW5hbWljOiBpc0R5bmFtaWNFeHByZXNzaW9uLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCB0YWJsZUNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCBpbmRleDogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXHRsZXQgdW5zdXBwb3J0ZWRUZXh0ID0gXCJcIjtcblx0bGV2ZWwrKztcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGNvbnN0IGZhY2V0cyA9IGZhY2V0RGVmaW5pdGlvbi5GYWNldHM7XG5cdFx0XHRpZiAoaGFzVGFibGUoZmFjZXRzKSkge1xuXHRcdFx0XHQvLyBpZiB3ZSBoYXZlIHRhYmxlcyBpbiBhIGNvbGxlY3Rpb24gZmFjZXQgdGhlbiB3ZSBjcmVhdGUgc2VwYXJhdGUgc3Vic2VjdGlvbiBmb3IgdGhlbVxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZhY2V0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICh0YXJnZXRUZXJtcy5pbmRleE9mKChmYWNldHNbaV0gYXMgYW55KS5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pID4gLTEpIHtcblx0XHRcdFx0XHRcdC8vY3JlYXRpbmcgc2VwYXJhdGUgYXJyYXkgZm9yIHRhYmxlc1xuXHRcdFx0XHRcdFx0dGFibGVDb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldHNbaV0sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgZmFjZXRzLmxlbmd0aCA9PT0gMSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdFx0XHRpbmRleC5wdXNoKGkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGxldCBpID0gaW5kZXgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHQvL3JlbW92ZSB0YWJsZSBmYWNldHMgZnJvbSBmYWNldCBkZWZpbml0aW9uXG5cdFx0XHRcdFx0ZmFjZXRzLnNwbGljZShpbmRleFtpXSwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGZhY2V0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uRmFjZXRzID0gZmFjZXRzO1xuXHRcdFx0XHRcdC8vY3JlYXRlIGEgZm9ybSBzdWJzZWN0aW9uIGZyb20gdGhlIHJlbWFpbmluZyBmYWNldHNcblx0XHRcdFx0XHRjb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldERlZmluaXRpb24sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGVudCA9IGNvbnRlbnQuY29uY2F0KHRhYmxlQ29udGVudCk7XG5cdFx0XHRcdGNvbnN0IG1peGVkU3ViU2VjdGlvbjogTWl4ZWRTdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTWl4ZWQsXG5cdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGNvbnRlbnRcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIG1peGVkU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBpc1Zpc2libGUsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb247XG5cdFx0XHR9XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdGlmICghZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0KSB7XG5cdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBVbmFibGUgdG8gZmluZCBhbm5vdGF0aW9uUGF0aCAke2ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWV9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0LnRlcm0pIHtcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtOlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdFx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSxcblx0XHRcdFx0XHRcdFx0Z2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlKGZhY2V0RGVmaW5pdGlvbiwgZmFjZXRzVG9DcmVhdGUsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdGlzSGVhZGVyU2VjdGlvblxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xUaXRsZSA9XG5cdFx0XHRcdFx0XHRcdChwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgYW55KT8uYW5ub3RhdGlvbj8udGl0bGUgfHwgKHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBhbnkpPy50aXRsZTtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3dUaXRsZSA9IGlzU3Vic2VjdGlvblRpdGxlU2hvd24oaGFzU2luZ2xlQ29udGVudCwgc3ViU2VjdGlvbi50aXRsZSwgY29udHJvbFRpdGxlKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRpdGxlVmlzaWJsZUV4cHJlc3Npb24gPSBpc1Zpc2libGUgJiYgdGl0bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgKHRpdGxlID8gaXNWaXNpYmxlIDogZmFsc2UpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbjogcHJlc2VudGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRzaG93VGl0bGU6IHNob3dUaXRsZSxcblx0XHRcdFx0XHRcdFx0dGl0bGVWaXNpYmxlOiBpc0R5bmFtaWNFeHByZXNzaW9uXG5cdFx0XHRcdFx0XHRcdFx0PyBgez0gKCR7aXNWaXNpYmxlRHluYW1pY0V4cHJlc3Npb259KSAmJiAoJyR7dGl0bGV9JyAhPT0ndW5kZWZpbmVkJykgJiYgKCR7c2hvd1RpdGxlfSA/IHRydWUgOiBmYWxzZSkgfWBcblx0XHRcdFx0XHRcdFx0XHQ6IHRpdGxlVmlzaWJsZUV4cHJlc3Npb25cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TdGF0dXNJbmZvOlxuXHRcdFx0XHRcdGNhc2UgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcy5Db250YWN0OlxuXHRcdFx0XHRcdFx0Ly8gQWxsIHRob3NlIGVsZW1lbnQgYmVsb25nIHRvIGEgZm9ybSBmYWNldFxuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9ucyA9IGdldEZhY2V0QWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRmb3JtRWxlbWVudFN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybSxcblx0XHRcdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybURlZmluaXRpb246IGNyZWF0ZUZvcm1EZWZpbml0aW9uKGZhY2V0RGVmaW5pdGlvbiwgaXNWaXNpYmxlLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zKSxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25zOiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHRleHQ6IHVuc3VwcG9ydGVkVGV4dFxuXHR9O1xuXHRyZXR1cm4gdW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xufVxuZnVuY3Rpb24gaXNTdWJzZWN0aW9uVGl0bGVTaG93bihcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhbixcblx0c3ViU2VjdGlvblRpdGxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Y29udHJvbFRpdGxlOiBzdHJpbmdcbik6IGJvb2xlYW4ge1xuXHRpZiAoaGFzU2luZ2xlQ29udGVudCAmJiBjb250cm9sVGl0bGUgPT09IHN1YlNlY3Rpb25UaXRsZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFxuXHRhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSxcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDb252ZXJ0ZXJBY3Rpb25bXSB7XG5cdGNvbnN0IHJlZmVyZW5jZVRhcmdldDogQW5ub3RhdGlvblRlcm08YW55PiA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldDtcblx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlO1xuXHRsZXQgbWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+ID0ge307XG5cdGxldCBkYXRhRmllbGRDb2xsZWN0aW9uOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10gPSBbXTtcblx0bGV0IFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXTogYW55ID0gdGFyZ2V0VmFsdWUuc3BsaXQoXCJAXCIpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPiAwKSB7XG5cdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cigwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKHJlZmVyZW5jZVRhcmdldCkge1xuXHRcdHN3aXRjaCAocmVmZXJlbmNlVGFyZ2V0LnRlcm0pIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cDpcblx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbiA9IChyZWZlcmVuY2VUYXJnZXQgYXMgRmllbGRHcm91cCkuRGF0YTtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24ocmVmZXJlbmNlVGFyZ2V0KS5hY3Rpb25zLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TdGF0dXNJbmZvOlxuXHRcdFx0XHRpZiAocmVmZXJlbmNlVGFyZ2V0LnF1YWxpZmllcikge1xuXHRcdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSByZWZlcmVuY2VUYXJnZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0YWN0aW9ucyA9IGRhdGFGaWVsZENvbGxlY3Rpb24ucmVkdWNlKChhY3Rpb25SZWR1Y2VyLCBkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uUkVRVUlSRVNDT05URVhUKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLklOTElORSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGRhdGFGaWVsZC5NYXBwaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhY3Rpb25SZWR1Y2VyLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdGlkOiBnZXRGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlPy52YWx1ZU9mKCkpLCB0cnVlKSlcblx0XHRcdFx0XHRcdFx0OiBcInRydWVcIixcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdHByZXNzOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGZuKFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVcIiwgW1xuXHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBjb21waWxlRXhwcmVzc2lvbih7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRhY3Rpb246IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbjogYW55ID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucztcblx0XHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdGFjdGlvblJlZHVjZXIucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0aWQ6IGdldEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdFx0YmluZGluZzogbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IGB7ICdwYXRoJyA6ICcke25hdmlnYXRpb25Qcm9wZXJ0eVBhdGh9J31gIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdHJlcXVpcmVzRGlhbG9nOiBpc0RpYWxvZyhkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdHByZXNzOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdGZuKFxuXHRcdFx0XHRcdFx0XHRcImludm9rZUFjdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogZm4oXCJnZXRCaW5kaW5nQ29udGV4dFwiLCBbXSwgcGF0aEluTW9kZWwoXCJcIiwgXCIkc291cmNlXCIpKSxcblx0XHRcdFx0XHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogKGRhdGFGaWVsZC5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwiSXNvbGF0ZWRcIikgYXMgT3BlcmF0aW9uR3JvdXBpbmdUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuTGFiZWwpLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kZWw6IGZuKFwiZ2V0TW9kZWxcIiwgW10sIHBhdGhJbk1vZGVsKFwiL1wiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbiAmJiBmb3JtTWFuaWZlc3RBY3Rpb25zQ29uZmlndXJhdGlvbltrZXldXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRyZWYoXCIuZWRpdEZsb3dcIilcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZhY2V0TmFtZTogZGF0YUZpZWxkLklubGluZSA/IGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgOiB1bmRlZmluZWRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhY3Rpb25SZWR1Y2VyO1xuXHR9LCBhY3Rpb25zKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpYWxvZyhhY3Rpb25EZWZpbml0aW9uOiBhbnkgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRpZiAoYWN0aW9uRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IGJDcml0aWNhbCA9IGFjdGlvbkRlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNBY3Rpb25Dcml0aWNhbDtcblx0XHRpZiAoYWN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCA+IDEgfHwgYkNyaXRpY2FsKSB7XG5cdFx0XHRyZXR1cm4gXCJEaWFsb2dcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFN1YlNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4ge1xuXHRjb25zdCBzdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U3ViU2VjdGlvbnMpLmZvckVhY2goXG5cdFx0KHN1YlNlY3Rpb25LZXkpID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHNpZGVDb250ZW50OiBTaWRlQ29udGVudERlZiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudFxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LnRlbXBsYXRlLFxuXHRcdFx0XHRpZDogZ2V0U2lkZUNvbnRlbnRJRChzdWJTZWN0aW9uS2V5KSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdGVxdWFsU3BsaXQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC5lcXVhbFNwbGl0XG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCBwb3NpdGlvbiA9IG1hbmlmZXN0U3ViU2VjdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGlzVmlzaWJsZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSA6IHRydWU7XG5cdGNvbnN0IGlzRHluYW1pY0V4cHJlc3Npb24gPSBpc1Zpc2libGUgJiYgdHlwZW9mIGlzVmlzaWJsZSA9PT0gXCJzdHJpbmdcIiAmJiBpc1Zpc2libGUuaW5kZXhPZihcIns9XCIpID09PSAwO1xuXHRjb25zdCBzdWJTZWN0aW9uRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGlkOiBtYW5pZmVzdFN1YlNlY3Rpb24uaWQgfHwgZ2V0Q3VzdG9tU3ViU2VjdGlvbklEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdGFjdGlvbnM6IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RTdWJTZWN0aW9uLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGtleTogc3ViU2VjdGlvbktleSxcblx0XHR0aXRsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnRpdGxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgOiB0cnVlLFxuXHRcdHNpZGVDb250ZW50OiBzaWRlQ29udGVudCxcblx0XHRpc1Zpc2liaWxpdHlEeW5hbWljOiBpc0R5bmFtaWNFeHByZXNzaW9uXG5cdH07XG5cdGlmIChtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUpIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdFx0KHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIHVua25vd24gYXMgWE1MRnJhZ21lbnRTdWJTZWN0aW9uKS50ZW1wbGF0ZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSB8fCBcIlwiO1xuXHR9IGVsc2Uge1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnR5cGUgPSBTdWJTZWN0aW9uVHlwZS5QbGFjZWhvbGRlcjtcblx0fVxuXHRyZXR1cm4gc3ViU2VjdGlvbkRlZmluaXRpb24gYXMgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIGNvbmRlbnNlZCBtb2RlIGNhbiBiZSBhcHBsaTNlZCBvbiB0aGUgdGFibGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnRGYWNldFxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHRydWVgIGZvciBjb21wbGlhbnQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChtYW5pZmVzdFdyYXBwZXIudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0Ly8gSWYgdGhlIE9QIHVzZSB0aGUgdGFiIGJhc2VkIHdlIGNoZWNrIGlmIHRoZSBmYWNldHMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgc2VjdGlvbiBhcmUgYWxsIG5vbiB2aXNpYmxlXG5cdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggJiYgZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoID4gMSkge1xuXHRcdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcywgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24uZXZlcnkoZnVuY3Rpb24gKHN1YkZhY2V0KSB7XG5cdFx0aWYgKHN1YkZhY2V0ICE9PSBjdXJyZW50RmFjZXQpIHtcblx0XHRcdGlmIChzdWJGYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVmRmFjZXQgPSBzdWJGYWNldDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQgfHxcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQuJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzdWJDb2xsZWN0aW9uRmFjZXQgPSBzdWJGYWNldCBhcyBDb2xsZWN0aW9uRmFjZXRUeXBlcztcblx0XHRcdFx0cmV0dXJuIHN1YkNvbGxlY3Rpb25GYWNldC5GYWNldHMuZXZlcnkoZnVuY3Rpb24gKGZhY2V0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3ViUmVmRmFjZXQgPSBmYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHN1YlJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xufVxuIl19
|