@sapui5/sap.fe.core 1.102.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 +62 -26
- package/src/sap/fe/core/AppComponent.ts +56 -40
- package/src/sap/fe/core/AppStateHandler.js +10 -10
- package/src/sap/fe/core/AppStateHandler.ts +9 -9
- 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 +236 -109
- package/src/sap/fe/core/CommonUtils.ts +252 -136
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +8 -8
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
- 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/controllerextensions/EditFlow.js +129 -118
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
- 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 +31 -26
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
- 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 +8 -8
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
- 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 +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +22 -22
- package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -6
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +2 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +14 -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 +50 -32
- package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
- 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 +54 -34
- package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
- 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 +25 -27
- package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
- 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 +174 -183
- package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
- 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 +73 -72
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +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 +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +14 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +281 -254
- package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +49 -35
- package/src/sap/fe/core/messagebundle_ar.properties +13 -5
- package/src/sap/fe/core/messagebundle_bg.properties +13 -5
- package/src/sap/fe/core/messagebundle_ca.properties +13 -5
- package/src/sap/fe/core/messagebundle_cs.properties +13 -5
- package/src/sap/fe/core/messagebundle_cy.properties +14 -6
- package/src/sap/fe/core/messagebundle_da.properties +13 -5
- package/src/sap/fe/core/messagebundle_de.properties +15 -7
- package/src/sap/fe/core/messagebundle_el.properties +14 -6
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
- package/src/sap/fe/core/messagebundle_es.properties +13 -5
- package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
- package/src/sap/fe/core/messagebundle_et.properties +13 -5
- package/src/sap/fe/core/messagebundle_fi.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
- package/src/sap/fe/core/messagebundle_hi.properties +14 -6
- package/src/sap/fe/core/messagebundle_hr.properties +14 -6
- package/src/sap/fe/core/messagebundle_hu.properties +13 -5
- package/src/sap/fe/core/messagebundle_id.properties +13 -5
- package/src/sap/fe/core/messagebundle_it.properties +33 -25
- package/src/sap/fe/core/messagebundle_iw.properties +13 -5
- package/src/sap/fe/core/messagebundle_ja.properties +14 -6
- package/src/sap/fe/core/messagebundle_kk.properties +13 -5
- package/src/sap/fe/core/messagebundle_ko.properties +13 -5
- package/src/sap/fe/core/messagebundle_lt.properties +13 -5
- package/src/sap/fe/core/messagebundle_lv.properties +14 -6
- package/src/sap/fe/core/messagebundle_ms.properties +13 -5
- package/src/sap/fe/core/messagebundle_nl.properties +13 -5
- package/src/sap/fe/core/messagebundle_no.properties +13 -5
- package/src/sap/fe/core/messagebundle_pl.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
- package/src/sap/fe/core/messagebundle_ro.properties +13 -5
- package/src/sap/fe/core/messagebundle_ru.properties +13 -5
- package/src/sap/fe/core/messagebundle_sh.properties +13 -5
- package/src/sap/fe/core/messagebundle_sk.properties +13 -5
- package/src/sap/fe/core/messagebundle_sl.properties +17 -9
- package/src/sap/fe/core/messagebundle_sv.properties +14 -6
- package/src/sap/fe/core/messagebundle_th.properties +13 -5
- package/src/sap/fe/core/messagebundle_tr.properties +13 -5
- package/src/sap/fe/core/messagebundle_uk.properties +13 -5
- package/src/sap/fe/core/messagebundle_vi.properties +13 -5
- package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
- package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
- 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 +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +10 -9
- package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +148 -93
- package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineUI5Class } from "sap/fe/core/helpers/ClassSupport";
|
|
2
2
|
import BaseObject from "sap/ui/base/Object";
|
|
3
3
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
4
|
-
import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
4
|
+
import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
5
5
|
|
|
6
6
|
@defineUI5Class("sap.fe.core.TemplateModel")
|
|
7
7
|
class TemplateModel extends BaseObject {
|
|
@@ -57,4 +57,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/ui/model/json/JS
|
|
|
57
57
|
|
|
58
58
|
return AttributeModel;
|
|
59
59
|
}, false);
|
|
60
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkF0dHJpYnV0ZU1vZGVsLnRzIl0sIm5hbWVzIjpbIkF0dHJpYnV0ZU1vZGVsIiwib05vZGUiLCJvUHJvcHMiLCJidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiIsIiQkdmFsdWVBc1Byb21pc2UiLCJfZ2V0T2JqZWN0Iiwic1BhdGgiLCJ1bmRlZmluZWQiLCJvVmFsdWUiLCJPYmplY3RQYXRoIiwiZ2V0IiwicmVwbGFjZSIsImhhc093blByb3BlcnR5IiwiaW5kZXhPZiIsIkxvZyIsImVycm9yIiwibmFtZSIsImdldEF0dHJpYnV0ZSIsIkpTT05Nb2RlbCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztNQUdNQSxjOzs7QUFDTCw0QkFDa0JDLEtBRGxCLEVBRWtCQyxNQUZsQixFQUdrQkMsdUJBSGxCLEVBSUU7QUFBQTs7QUFDRDtBQURDLFlBSGdCRixLQUdoQixHQUhnQkEsS0FHaEI7QUFBQSxZQUZnQkMsTUFFaEIsR0FGZ0JBLE1BRWhCO0FBQUEsWUFEZ0JDLHVCQUNoQixHQURnQkEsdUJBQ2hCO0FBRUQsb0NBQWNDLGdCQUFkLEdBQWlDLElBQWpDO0FBRkM7QUFHRDs7OztXQUNEQyxVLEdBQUEsb0JBQVdDLEtBQVgsRUFBeUM7QUFDeEMsVUFBSSxDQUFDQSxLQUFLLEtBQUtDLFNBQVYsSUFBdUJELEtBQUssS0FBSyxFQUFsQyxLQUF5QyxLQUFLSixNQUFsRCxFQUEwRDtBQUN6RCxlQUFPLEtBQUtBLE1BQVo7QUFDQSxPQUh1QyxDQUl4Qzs7O0FBQ0EsVUFBTU0sTUFBTSxHQUFHQyxVQUFVLENBQUNDLEdBQVgsQ0FBZUosS0FBSyxDQUFDSyxPQUFOLENBQWMsS0FBZCxFQUFxQixHQUFyQixDQUFmLEVBQTBDLEtBQUtULE1BQS9DLENBQWY7O0FBQ0EsVUFBSU0sTUFBTSxLQUFLRCxTQUFmLEVBQTBCO0FBQ3pCLGVBQU9DLE1BQVA7QUFDQSxPQVJ1QyxDQVN4Qzs7O0FBQ0EsVUFBSSxLQUFLTixNQUFMLElBQWUsS0FBS0EsTUFBTCxDQUFZVSxjQUFaLENBQTJCTixLQUEzQixDQUFuQixFQUFzRDtBQUNyRCxlQUFPLEtBQUtKLE1BQUwsQ0FBWUksS0FBWixDQUFQO0FBQ0E7O0FBQ0QsVUFBSUEsS0FBSyxDQUFDTyxPQUFOLENBQWMsR0FBZCxNQUF1QixDQUFDLENBQXhCLElBQTZCUCxLQUFLLENBQUNPLE9BQU4sQ0FBYyxHQUFkLE1BQXVCLENBQUMsQ0FBekQsRUFBNEQ7QUFDM0Q7QUFDQUMsUUFBQUEsR0FBRyxDQUFDQyxLQUFKLDRCQUE4QlQsS0FBOUIsZ0NBQXlELEtBQUtILHVCQUFMLENBQTZCYSxJQUF0RixHQUYyRCxDQUczRDtBQUNBOztBQUNELGFBQU8sS0FBS2YsS0FBTCxDQUFXZ0IsWUFBWCxDQUF3QlgsS0FBeEIsQ0FBUDtBQUNBLEs7OztJQTVCMkJZLFM7O1NBK0JkbEIsYyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5jbGFzcyBBdHRyaWJ1dGVNb2RlbCBleHRlbmRzIEpTT05Nb2RlbCB7XG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb05vZGU6IEVsZW1lbnQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvUHJvcHM6IGFueSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uOiBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblxuXHQpIHtcblx0XHRzdXBlcigpO1xuXHRcdCh0aGlzIGFzIGFueSkuJCR2YWx1ZUFzUHJvbWlzZSA9IHRydWU7XG5cdH1cblx0X2dldE9iamVjdChzUGF0aDogYW55IC8qb0NvbnRleHQ6IGFueSovKSB7XG5cdFx0aWYgKChzUGF0aCA9PT0gdW5kZWZpbmVkIHx8IHNQYXRoID09PSBcIlwiKSAmJiB0aGlzLm9Qcm9wcykge1xuXHRcdFx0cmV0dXJuIHRoaXMub1Byb3BzO1xuXHRcdH1cblx0XHQvLyBqdXN0IHJldHVybiB0aGUgYXR0cmlidXRlIC0gd2UgY2FuJ3QgdmFsaWRhdGUgdGhlbSBhbmQgd2UgZG9uJ3Qgc3VwcG9ydCBhZ2dyZWdhdGlvbnMgZm9yIG5vd1xuXHRcdGNvbnN0IG9WYWx1ZSA9IE9iamVjdFBhdGguZ2V0KHNQYXRoLnJlcGxhY2UoL1xcLy9nLCBcIi5cIiksIHRoaXMub1Byb3BzKTtcblx0XHRpZiAob1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBvVmFsdWU7XG5cdFx0fVxuXHRcdC8vIERlYWwgd2l0aCB1bmRlZmluZWQgcHJvcGVydGllc1xuXHRcdGlmICh0aGlzLm9Qcm9wcyAmJiB0aGlzLm9Qcm9wcy5oYXNPd25Qcm9wZXJ0eShzUGF0aCkpIHtcblx0XHRcdHJldHVybiB0aGlzLm9Qcm9wc1tzUGF0aF07XG5cdFx0fVxuXHRcdGlmIChzUGF0aC5pbmRleE9mKFwiOlwiKSA9PT0gLTEgJiYgc1BhdGguaW5kZXhPZihcIi9cIikgPT09IC0xKSB7XG5cdFx0XHQvLyBHbG92ZXMgYXJlIG9mZiwgaWYgeW91IGhhdmUgdGhpcyBlcnJvciB5b3UgZm9yZ290IHRvIGRlZmluZSB5b3VyIHByb3BlcnR5IG9uIHlvdXIgbWV0YWRhdGEgYnV0IGFyZSBzdGlsbCB1c2luZyBpdCBpbiB0aGUgdW5kZXJseWluZyBjb2RlXG5cdFx0XHRMb2cuZXJyb3IoYE1pc3NpbmcgcHJvcGVydHkgJHtzUGF0aH0gb24gbWFjcm8gbWV0YWRhdGEgJHt0aGlzLmJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWV9YCk7XG5cdFx0XHQvL3Rocm93IG5ldyBFcnJvcihgTWlzc2luZyBwcm9wZXJ0eSAke3NQYXRofSBvbiBtYWNybyBtZXRhZGF0YSAke3RoaXMuYnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZX1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub05vZGUuZ2V0QXR0cmlidXRlKHNQYXRoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdHRyaWJ1dGVNb2RlbDtcbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
2
|
import ObjectPath from "sap/base/util/ObjectPath";
|
|
3
|
-
import { BuildingBlockDefinition } from "sap/fe/core/buildingBlocks/BuildingBlock";
|
|
3
|
+
import type { BuildingBlockDefinition } from "sap/fe/core/buildingBlocks/BuildingBlock";
|
|
4
4
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
5
5
|
|
|
6
6
|
class AttributeModel extends JSONModel {
|
|
@@ -117,13 +117,13 @@ function _forTo(array, body, check) {
|
|
|
117
117
|
return pact;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/core/buildingBlocks/AttributeModel", "sap/fe/core/helpers/
|
|
120
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/core/buildingBlocks/AttributeModel", "sap/fe/core/helpers/BindingToolkit", "sap/fe/macros/ResourceModel", "sap/ui/base/BindingParser", "sap/ui/core/util/XMLPreprocessor", "./TraceInfo"], function (Log, uid, AttributeModel, BindingToolkit, ResourceModel, BindingParser, XMLPreprocessor, TraceInfo) {
|
|
121
121
|
"use strict";
|
|
122
122
|
|
|
123
123
|
var _templateObject, _templateObject2, _templateObject3;
|
|
124
124
|
|
|
125
125
|
var _exports = {};
|
|
126
|
-
var
|
|
126
|
+
var compileExpression = BindingToolkit.compileExpression;
|
|
127
127
|
|
|
128
128
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function () {}; return { s: F, n: function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (e) { throw e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function () { it = it.call(o); }, n: function () { var step = it.next(); normalCompletion = step.done; return step; }, e: function (e) { didErr = true; err = e; }, f: function () { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
129
129
|
|
|
@@ -336,7 +336,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/core/buildingBlocks/
|
|
|
336
336
|
|
|
337
337
|
if (sAggregationName !== "customData" && sAggregationName !== "dependents") {
|
|
338
338
|
var sSlotName = oMetadata.aggregations[sAggregationName] && oMetadata.aggregations[sAggregationName].slot || sAggregationName;
|
|
339
|
-
var oTargetElement = oMacroElement.querySelector("slot[name='"
|
|
339
|
+
var oTargetElement = oMacroElement.querySelector("slot[name='".concat(sSlotName, "']"));
|
|
340
340
|
|
|
341
341
|
if (oTargetElement) {
|
|
342
342
|
oTargetElement.replaceWith.apply(oTargetElement, _toConsumableArray(oNewChild.children));
|
|
@@ -611,7 +611,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/core/buildingBlocks/
|
|
|
611
611
|
|
|
612
612
|
if (!oNode.hasAttribute(sKey)) {
|
|
613
613
|
if (oPropertySettings.required && !oPropertySettings.hasOwnProperty("defaultValue")) {
|
|
614
|
-
throw new Error(sName
|
|
614
|
+
throw new Error("".concat(sName, ": ") + "Required property '".concat(sKey, "' is missing"));
|
|
615
615
|
}
|
|
616
616
|
} else {
|
|
617
617
|
delete oAttributeNames[sKey];
|
|
@@ -705,7 +705,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/core/buildingBlocks/
|
|
|
705
705
|
if (!oMetadataContext) {
|
|
706
706
|
if (sAttributeValue.startsWith("uid--")) {
|
|
707
707
|
var oData = myStore[sAttributeValue];
|
|
708
|
-
var sContextPath = "/"
|
|
708
|
+
var sContextPath = "/".concat(sAttributeValue);
|
|
709
709
|
oSettings.models.converterContext.setProperty(sContextPath, oData);
|
|
710
710
|
oMetadataContext = {
|
|
711
711
|
model: "converterContext",
|
|
@@ -768,7 +768,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/core/buildingBlocks/
|
|
|
768
768
|
var sContextPath = oCtx.path;
|
|
769
769
|
|
|
770
770
|
if (oCtx.model != null) {
|
|
771
|
-
sContextPath = oCtx.model
|
|
771
|
+
sContextPath = "".concat(oCtx.model, ">").concat(sContextPath);
|
|
772
772
|
}
|
|
773
773
|
|
|
774
774
|
var mSetting = oVisitor.getSettings();
|
|
@@ -902,7 +902,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/core/buildingBlocks/
|
|
|
902
902
|
if (Array.isArray(values[i])) {
|
|
903
903
|
outStr += values[i].flat(5).join("").trim();
|
|
904
904
|
} else if ((_values$i = values[i]) !== null && _values$i !== void 0 && _values$i._type) {
|
|
905
|
-
var compiledExpression =
|
|
905
|
+
var compiledExpression = compileExpression(values[i]);
|
|
906
906
|
outStr += compiledExpression !== undefined ? escapeXMLAttributeValue(compiledExpression) : undefined;
|
|
907
907
|
} else if ((_values$i2 = values[i]) !== null && _values$i2 !== void 0 && _values$i2.getTemplate) {
|
|
908
908
|
outStr += values[i].getTemplate();
|
|
@@ -932,4 +932,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/core/buildingBlocks/
|
|
|
932
932
|
_exports.xml = xml;
|
|
933
933
|
return _exports;
|
|
934
934
|
}, false);
|
|
935
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2tSdW50aW1lLnRzIl0sIm5hbWVzIjpbInBhY3QiLCJzdGF0ZSIsInZhbHVlIiwicyIsInYiLCJvIiwiYmluZCIsInRoZW4iLCJvYnNlcnZlciIsInByb3RvdHlwZSIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImNhbGxiYWNrIiwiZSIsIl90aGlzIiwidGhlbmFibGUiLCJhcnJheSIsImJvZHkiLCJjaGVjayIsImkiLCJyZWplY3QiLCJfY3ljbGUiLCJsZW5ndGgiLCJyZWNvdmVyIiwicHJvY2Vzc0J1aWxkaW5nQmxvY2siLCJidWlsZGluZ0JMb2NrRGVmaW5pdGlvbiIsIm9Ob2RlIiwib1Zpc2l0b3IiLCJpc1B1YmxpYyIsInNGcmFnbWVudE5hbWUiLCJmcmFnbWVudCIsIm5hbWVzcGFjZSIsIm5hbWUiLCJzTmFtZSIsIm1Db250ZXh0cyIsIm9NZXRhZGF0YUNvbnRleHRzIiwib1NldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJtb2RlbHMiLCJnZXRSZXNvdXJjZUJ1bmRsZSIsIm9SZXNvdXJjZUJ1bmRsZSIsIlJlc291cmNlTW9kZWwiLCJzZXRBcHBsaWNhdGlvbkkxOG5CdW5kbGUiLCJjYXRjaCIsImVycm9yIiwiTG9nIiwib01ldGFkYXRhIiwicHJlcGFyZU1ldGFkYXRhIiwibWV0YWRhdGEiLCJpc09wZW4iLCJwcm9jZXNzUHJvcGVydGllcyIsIm1NaXNzaW5nQ29udGV4dCIsInByb3BlcnR5VmFsdWVzIiwiaW5pdGlhbEtleXMiLCJPYmplY3QiLCJrZXlzIiwicHJvY2Vzc0NoaWxkcmVuIiwib0FnZ3JlZ2F0aW9ucyIsIm9QcmV2aW91c01hY3JvSW5mbyIsIm9JbnN0YW5jZSIsIm9Db250cm9sQ29uZmlnIiwidmlld0RhdGEiLCJnZXRQcm9wZXJ0eSIsInByb2Nlc3NlZFByb3BlcnR5VmFsdWVzIiwiaXNWMU1hY3JvRGVmIiwiY3JlYXRlIiwiY2FsbCIsIm1ldGFkYXRhQ29udGV4dHMiLCJmb3JFYWNoIiwic01ldGFkYXRhTmFtZSIsImNvbXB1dGVkIiwic0NvbnRleHROYW1lIiwiaGFzT3duUHJvcGVydHkiLCJhcGlWZXJzaW9uIiwicHJvcE5hbWUiLCJvRGF0YSIsImlzQSIsImdldE1vZGVsIiwiZ2V0T2JqZWN0IiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwib0F0dHJpYnV0ZXNNb2RlbCIsIkF0dHJpYnV0ZU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJUcmFjZUluZm8iLCJpc1RyYWNlSW5mb0FjdGl2ZSIsIm9UcmFjZUluZm8iLCJ0cmFjZU1hY3JvQ2FsbHMiLCJtYWNyb0luZm8iLCJ2YWxpZGF0ZU1hY3JvU2lnbmF0dXJlIiwib0NvbnRleHRWaXNpdG9yIiwid2l0aCIsInVuZGVmaW5lZCIsIm9QYXJlbnQiLCJwYXJlbnROb2RlIiwiaUNoaWxkSW5kZXgiLCJvUHJvbWlzZSIsIkFycmF5IiwiZnJvbSIsImNoaWxkcmVuIiwiaW5kZXhPZiIsImdldFRlbXBsYXRlIiwib1RlbXBsYXRlIiwiYWRkRGVmYXVsdE5hbWVzcGFjZSIsImhhc0Vycm9yIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJwYXJzZVhNTFN0cmluZyIsIml0ZXIiLCJkb2N1bWVudCIsImNyZWF0ZU5vZGVJdGVyYXRvciIsIk5vZGVGaWx0ZXIiLCJTSE9XX1RFWFQiLCJ0ZXh0bm9kZSIsIm5leHROb2RlIiwidGV4dENvbnRlbnQiLCJ0cmltIiwibG9jYWxOYW1lIiwiaXNUcmFjZU1vZGUiLCJvRXJyb3JUZXh0IiwiY3JlYXRlRXJyb3JYTUwiLCJvdXRlckhUTUwiLCJyZXBsYWNlV2l0aCIsInZpc2l0Tm9kZSIsInJlbW92ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiaW5zZXJ0RnJhZ21lbnQiLCJvTWFjcm9FbGVtZW50Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsIm9BZ2dyZWdhdGlvbkVsZW1lbnQiLCJvTmV3Q2hpbGQiLCJjcmVhdGVFbGVtZW50TlMiLCJuYW1lc3BhY2VVUkkiLCJvRWxlbWVudENoaWxkIiwib05leHRDaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsImFwcGVuZENoaWxkIiwic1Nsb3ROYW1lIiwiYWdncmVnYXRpb25zIiwic2xvdCIsIm9UYXJnZXRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsIm9SZW1haW5pbmdTbG90cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJvU2xvdEVsZW1lbnQiLCJ0cmFjZURldGFpbHMiLCJpbml0aWFsUHJvcGVydGllcyIsInJlc29sdmVkUHJvcGVydGllcyIsIm1pc3NpbmdDb250ZXh0cyIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5VmFsdWUiLCJwYXRoIiwiZ2V0UGF0aCIsImluY2x1ZGVzIiwiZXJyb3JBbnkiLCJvRXJyb3IiLCJzdGFjayIsInZpc2l0Q2hpbGROb2RlcyIsIm9GaXJzdEVsZW1lbnRDaGlsZCIsInNDaGlsZE5hbWUiLCJwcm9wZXJ0aWVzIiwiYXR0cmlidXRlcyIsImF0dHJpYnV0ZUluZGV4IiwiYURlZmluaXRpb25Db250ZXh0c0tleXMiLCJzb3J0IiwiYSIsImIiLCJzQXR0cmlidXRlTmFtZSIsImJEb05vdFJlc29sdmUiLCJvRGVmaW5pdGlvbkNvbnRleHRzIiwiaGFzQXR0cmlidXRlIiwib01ldGFkYXRhQ29udGV4dCIsIl9nZXRNZXRhZGF0YUNvbnRleHQiLCJhZGRTaW5nbGVDb250ZXh0IiwiYmluZGluZ0NvbnRleHRzIiwiY3VycmVudENvbnRleHRQYXRoIiwib0RlZmluaXRpb25Qcm9wZXJ0aWVzIiwiY29udGV4dFBhdGgiLCJhRGVmaW5pdGlvblByb3BlcnRpZXNLZXlzIiwiaiIsInNLZXlWYWx1ZSIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJ2aXNpdEF0dHJpYnV0ZSIsImdldE5hbWVkSXRlbSIsInZWYWx1ZSIsImdldEF0dHJpYnV0ZSIsIkxPR0dFUl9TQ09QRSIsIkRPTVBhcnNlckluc3RhbmNlIiwiRE9NUGFyc2VyIiwiYnVpbGRpbmdCbG9ja0RlZmluaXRpb24iLCJ2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0Iiwib0NvbnRleHRTZXR0aW5ncyIsInNLZXkiLCJvQ29udGV4dCIsIm9Db250ZXh0T2JqZWN0IiwicmVxdWlyZWQiLCJFcnJvciIsIiRraW5kIiwiJFR5cGUiLCJhTWV0YWRhdGFDb250ZXh0S2V5cyIsImFQcm9wZXJ0aWVzIiwib0F0dHJpYnV0ZU5hbWVzIiwiaUtleSIsIm9Qcm9wZXJ0eVNldHRpbmdzIiwic3RhcnRzV2l0aCIsIndhcm5pbmciLCJidWlsZGluZ0Jsb2NrTWV0YWRhdGEiLCJvUHJvcGVydGllcyIsInNQcm9wZXJ0eU5hbWUiLCJldmVudHMiLCJzRXZlbnROYW1lIiwic0F0dHJpYnV0ZVZhbHVlIiwic01ldGFQYXRoIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJteVN0b3JlIiwic0NvbnRleHRQYXRoIiwiY29udmVydGVyQ29udGV4dCIsInNldFByb3BlcnR5IiwibW9kZWwiLCJlbmRzV2l0aCIsImVudGl0eVNldCIsImdldENvbnRleHQiLCJvQ3R4IiwibVNldHRpbmciLCJleCIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsIlhNTFByZXByb2Nlc3NvciIsInBsdWdJbiIsInhtbFRhZyIsInB1YmxpY05hbWVzcGFjZSIsImVycm9yTWVzc2FnZXMiLCJ4bWxGcmFnbWVudCIsImFkZGl0aW9uYWxEYXRhIiwiZXJyb3JMYWJlbHMiLCJtYXAiLCJlcnJvck1lc3NhZ2UiLCJ4bWwiLCJlc2NhcGVYTUwiLCJhZGRpdGlvbmFsVGV4dCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdG9yZVZhbHVlIiwidmFsdWVzIiwicHJvcGVydHlVSUQiLCJ1aWQiLCJ4bWxTdHJpbmciLCJhZGREZWZhdWx0TmFtZXNwYWNlcyIsInhtbERvY3VtZW50IiwicGFyc2VGcm9tU3RyaW5nIiwib3V0cHV0Iiwic3RyIiwicmVwbGFjZSIsImVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlIiwidmFsIiwic3RyaW5ncyIsIm91dFN0ciIsImlzQXJyYXkiLCJmbGF0Iiwiam9pbiIsIl90eXBlIiwiY29tcGlsZWRFeHByZXNzaW9uIiwiY29tcGlsZUJpbmRpbmciLCJwcm9wZXJ0eVVJZCIsInhtbFJlc3VsdCIsImlubmVyVGV4dCIsImlubmVySFRNTCIsInNwbGl0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOztBQXFDTyxpQkFBaUJBLElBQWpCLEVBQXVCQyxLQUF2QixFQUE4QkMsS0FBOUIsRUFBcUM7QUFDM0MsTUFBSSxDQUFDRixJQUFJLENBQUNHLENBQVYsRUFBYTtBQUNaLFFBQUlELEtBQUssaUJBQVQsRUFBNEI7QUFDM0IsVUFBSUEsS0FBSyxDQUFDQyxDQUFWLEVBQWE7QUFDWixZQUFJRixLQUFLLEdBQUcsQ0FBWixFQUFlO0FBQ2RBLFVBQUFBLEtBQUssR0FBR0MsS0FBSyxDQUFDQyxDQUFkO0FBQ0E7O0FBQ0RELFFBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDRSxDQUFkO0FBQ0EsT0FMRCxNQUtPO0FBQ05GLFFBQUFBLEtBQUssQ0FBQ0csQ0FBTixHQUFVLFFBQVFDLElBQVIsQ0FBYSxJQUFiLEVBQW1CTixJQUFuQixFQUF5QkMsS0FBekIsQ0FBVjtBQUNBO0FBQ0E7QUFDRDs7QUFDRCxRQUFJQyxLQUFLLElBQUlBLEtBQUssQ0FBQ0ssSUFBbkIsRUFBeUI7QUFDeEJMLE1BQUFBLEtBQUssQ0FBQ0ssSUFBTixDQUFXLFFBQVFELElBQVIsQ0FBYSxJQUFiLEVBQW1CTixJQUFuQixFQUF5QkMsS0FBekIsQ0FBWCxFQUE0QyxRQUFRSyxJQUFSLENBQWEsSUFBYixFQUFtQk4sSUFBbkIsRUFBeUIsQ0FBekIsQ0FBNUM7QUFDQTtBQUNBOztBQUNEQSxJQUFBQSxJQUFJLENBQUNHLENBQUwsR0FBU0YsS0FBVDtBQUNBRCxJQUFBQSxJQUFJLENBQUNJLENBQUwsR0FBU0YsS0FBVDtBQUNBLFFBQU1NLFFBQVEsR0FBR1IsSUFBSSxDQUFDSyxDQUF0Qjs7QUFDQSxRQUFJRyxRQUFKLEVBQWM7QUFDYkEsTUFBQUEsUUFBUSxDQUFDUixJQUFELENBQVI7QUFDQTtBQUNEO0FBQ0Q7O0FBOURNLElBQU0sUUFBUSxhQUFjLFlBQVc7QUFDN0MsbUJBQWlCLENBQUU7O0FBQ25CLFFBQU1TLFNBQU4sQ0FBZ0JGLElBQWhCLEdBQXVCLFVBQVNHLFdBQVQsRUFBc0JDLFVBQXRCLEVBQWtDO0FBQ3hELFFBQU1DLE1BQU0sR0FBRyxXQUFmO0FBQ0EsUUFBTVgsS0FBSyxHQUFHLEtBQUtFLENBQW5COztBQUNBLFFBQUlGLEtBQUosRUFBVztBQUNWLFVBQU1ZLFFBQVEsR0FBR1osS0FBSyxHQUFHLENBQVIsR0FBWVMsV0FBWixHQUEwQkMsVUFBM0M7O0FBQ0EsVUFBSUUsUUFBSixFQUFjO0FBQ2IsWUFBSTtBQUNILGtCQUFRRCxNQUFSLEVBQWdCLENBQWhCLEVBQW1CQyxRQUFRLENBQUMsS0FBS1QsQ0FBTixDQUEzQjtBQUNBLFNBRkQsQ0FFRSxPQUFPVSxDQUFQLEVBQVU7QUFDWCxrQkFBUUYsTUFBUixFQUFnQixDQUFoQixFQUFtQkUsQ0FBbkI7QUFDQTs7QUFDRCxlQUFPRixNQUFQO0FBQ0EsT0FQRCxNQU9PO0FBQ04sZUFBTyxJQUFQO0FBQ0E7QUFDRDs7QUFDRCxTQUFLUCxDQUFMLEdBQVMsVUFBU1UsS0FBVCxFQUFnQjtBQUN4QixVQUFJO0FBQ0gsWUFBTWIsS0FBSyxHQUFHYSxLQUFLLENBQUNYLENBQXBCOztBQUNBLFlBQUlXLEtBQUssQ0FBQ1osQ0FBTixHQUFVLENBQWQsRUFBaUI7QUFDaEIsa0JBQVFTLE1BQVIsRUFBZ0IsQ0FBaEIsRUFBbUJGLFdBQVcsR0FBR0EsV0FBVyxDQUFDUixLQUFELENBQWQsR0FBd0JBLEtBQXREO0FBQ0EsU0FGRCxNQUVPLElBQUlTLFVBQUosRUFBZ0I7QUFDdEIsa0JBQVFDLE1BQVIsRUFBZ0IsQ0FBaEIsRUFBbUJELFVBQVUsQ0FBQ1QsS0FBRCxDQUE3QjtBQUNBLFNBRk0sTUFFQTtBQUNOLGtCQUFRVSxNQUFSLEVBQWdCLENBQWhCLEVBQW1CVixLQUFuQjtBQUNBO0FBQ0QsT0FURCxDQVNFLE9BQU9ZLENBQVAsRUFBVTtBQUNYLGdCQUFRRixNQUFSLEVBQWdCLENBQWhCLEVBQW1CRSxDQUFuQjtBQUNBO0FBQ0QsS0FiRDs7QUFjQSxXQUFPRixNQUFQO0FBQ0EsR0EvQkQ7O0FBZ0NBO0FBQ0EsQ0FuQ2lDLEVBQTNCOztBQWdFQSx3QkFBd0JJLFFBQXhCLEVBQWtDO0FBQ3hDLFNBQU9BLFFBQVEsaUJBQVIsSUFBNkJBLFFBQVEsQ0FBQ2IsQ0FBVCxHQUFhLENBQWpEO0FBQ0E7O0FBK0NNLGdCQUFnQmMsS0FBaEIsRUFBdUJDLElBQXZCLEVBQTZCQyxLQUE3QixFQUFvQztBQUMxQyxNQUFJQyxDQUFDLEdBQUcsQ0FBQyxDQUFUO0FBQUEsTUFBWXBCLElBQVo7QUFBQSxNQUFrQnFCLE1BQWxCOztBQUNBLFdBQVNDLE1BQVQsQ0FBZ0JWLE1BQWhCLEVBQXdCO0FBQ3ZCLFFBQUk7QUFDSCxhQUFPLEVBQUVRLENBQUYsR0FBTUgsS0FBSyxDQUFDTSxNQUFaLEtBQXVCLENBQUNKLEtBQUQsSUFBVSxDQUFDQSxLQUFLLEVBQXZDLENBQVAsRUFBbUQ7QUFDbERQLFFBQUFBLE1BQU0sR0FBR00sSUFBSSxDQUFDRSxDQUFELENBQWI7O0FBQ0EsWUFBSVIsTUFBTSxJQUFJQSxNQUFNLENBQUNMLElBQXJCLEVBQTJCO0FBQzFCLGNBQUksZUFBZUssTUFBZixDQUFKLEVBQTRCO0FBQzNCQSxZQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ1IsQ0FBaEI7QUFDQSxXQUZELE1BRU87QUFDTlEsWUFBQUEsTUFBTSxDQUFDTCxJQUFQLENBQVllLE1BQVosRUFBb0JELE1BQU0sS0FBS0EsTUFBTSxHQUFHLFFBQVFmLElBQVIsQ0FBYSxJQUFiLEVBQW1CTixJQUFJLEdBQUcsV0FBMUIsRUFBdUMsQ0FBdkMsQ0FBZCxDQUExQjtBQUNBO0FBQ0E7QUFDRDtBQUNEOztBQUNELFVBQUlBLElBQUosRUFBVTtBQUNULGdCQUFRQSxJQUFSLEVBQWMsQ0FBZCxFQUFpQlksTUFBakI7QUFDQSxPQUZELE1BRU87QUFDTlosUUFBQUEsSUFBSSxHQUFHWSxNQUFQO0FBQ0E7QUFDRCxLQWpCRCxDQWlCRSxPQUFPRSxDQUFQLEVBQVU7QUFDWCxjQUFRZCxJQUFJLEtBQUtBLElBQUksR0FBRyxXQUFaLENBQVosRUFBc0MsQ0FBdEMsRUFBeUNjLENBQXpDO0FBQ0E7QUFDRDs7QUFDRFEsRUFBQUEsTUFBTTs7QUFDTixTQUFPdEIsSUFBUDtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzYU0sa0JBQWdCa0IsSUFBaEIsRUFBc0JNLE9BQXRCLEVBQStCO0FBQ3JDLFFBQUk7QUFDSCxVQUFJWixNQUFNLEdBQUdNLElBQUksRUFBakI7QUFDQSxLQUZELENBRUUsT0FBTUosQ0FBTixFQUFTO0FBQ1YsYUFBT1UsT0FBTyxDQUFDVixDQUFELENBQWQ7QUFDQTs7QUFDRCxRQUFJRixNQUFNLElBQUlBLE1BQU0sQ0FBQ0wsSUFBckIsRUFBMkI7QUFDMUIsYUFBT0ssTUFBTSxDQUFDTCxJQUFQLENBQVksS0FBSyxDQUFqQixFQUFvQmlCLE9BQXBCLENBQVA7QUFDQTs7QUFDRCxXQUFPWixNQUFQO0FBQ0E7Ozs7TUEvSmNhLG9CLGFBQ2RDLHVCLEVBQ0FDLEssRUFDQUMsUTtRQUNBQyxRLHVFQUFXLEs7O1FBQ1Y7QUFDRCxVQUFNQyxhQUFhLEdBQUdKLHVCQUF1QixDQUFDSyxRQUF4QixjQUF1Q0wsdUJBQXVCLENBQUNNLFNBQS9ELGNBQTRFTix1QkFBdUIsQ0FBQ08sSUFBcEcsQ0FBdEI7QUFFQSxVQUFNQyxLQUFLLEdBQUcsTUFBZDtBQUVBLFVBQU1DLFNBQWMsR0FBRyxFQUF2QjtBQUNBLFVBQU1DLGlCQUFzQixHQUFHLEVBQS9CO0FBQ0EsVUFBTUMsU0FBUyxHQUFHVCxRQUFRLENBQUNVLFdBQVQsRUFBbEIsQ0FQQyxDQVFEOztBQUNBLFVBQUlELFNBQVMsQ0FBQ0UsTUFBVixDQUFpQixhQUFqQixDQUFKLEVBQXFDO0FBQ3BDRixRQUFBQSxTQUFTLENBQUNFLE1BQVYsQ0FBaUIsYUFBakIsRUFDRUMsaUJBREYsR0FFRWpDLElBRkYsQ0FFTyxVQUFVa0MsZUFBVixFQUFnQztBQUNyQ0MsVUFBQUEsYUFBYSxDQUFDQyx3QkFBZCxDQUF1Q0YsZUFBdkM7QUFDQSxTQUpGLEVBS0VHLEtBTEYsQ0FLUSxVQUFVQyxLQUFWLEVBQXNCO0FBQzVCQyxVQUFBQSxHQUFHLENBQUNELEtBQUosQ0FBVUEsS0FBVjtBQUNBLFNBUEY7QUFRQTs7QUFDRCxVQUFNRSxTQUFTLEdBQUdDLGVBQWUsQ0FBQ3RCLHVCQUF1QixDQUFDdUIsUUFBekIsRUFBbUN2Qix1QkFBdUIsQ0FBQ3dCLE1BQTNELENBQWpDLENBbkJDLENBcUJEOztBQUNBLFVBQUksQ0FBQ2IsU0FBUyxDQUFDUCxhQUFELENBQWQsRUFBK0I7QUFDOUJPLFFBQUFBLFNBQVMsQ0FBQ1AsYUFBRCxDQUFULEdBQTJCLEVBQTNCO0FBQ0EsT0F4QkEsQ0EwQkQ7OztBQTFCQyw2QkEyQmlEcUIsaUJBQWlCLENBQ2xFSixTQURrRSxFQUVsRVYsU0FGa0UsRUFHbEVWLEtBSGtFLEVBSWxFRSxRQUprRSxFQUtsRUQsUUFMa0UsRUFNbEVPLFNBTmtFLEVBT2xFQyxpQkFQa0UsQ0EzQmxFO0FBQUEsWUEyQk9nQixlQTNCUCxRQTJCT0EsZUEzQlA7QUFBQSxZQTJCd0JDLGNBM0J4QixRQTJCd0JBLGNBM0J4QjtBQW9DRCxZQUFNQyxXQUFXLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSCxjQUFaLENBQXBCOztBQXBDQyx3Q0FxQ0c7QUFDSDtBQURHLGlDQUV5QkksZUFBZSxDQUFDOUIsS0FBRCxFQUFRQyxRQUFSLEVBQWtCbUIsU0FBbEIsRUFBNkJsQixRQUE3QixFQUF1Q3dCLGNBQXZDLENBRnhDLGlCQUVHSyxhQUZIO0FBQUE7QUFBQSxrQkEwS0NDLGtCQTFLRDtBQTJLRjtBQUNBdEIsZ0JBQUFBLFNBQVMsQ0FBQyxZQUFELENBQVQsR0FBMEJzQixrQkFBMUI7QUE1S0U7QUE4S0YsdUJBQU90QixTQUFTLENBQUMsWUFBRCxDQUFoQjtBQTlLRTtBQUFBOztBQUdILGdCQUFJdUIsU0FBSjtBQUNBLGdCQUFJQyxjQUFjLEdBQUcsRUFBckI7O0FBRUEsZ0JBQUl4QixTQUFTLENBQUNFLE1BQVYsQ0FBaUJ1QixRQUFyQixFQUErQjtBQUM5QjtBQUNBRCxjQUFBQSxjQUFjLEdBQUd4QixTQUFTLENBQUNFLE1BQVYsQ0FBaUJ1QixRQUFqQixDQUEwQkMsV0FBMUIsQ0FBc0MsdUJBQXRDLENBQWpCO0FBQ0E7O0FBQ0QsZ0JBQUlDLHVCQUF1QixHQUFHWCxjQUE5Qjs7QUFDQSxnQkFBSVksWUFBWSxDQUFDdkMsdUJBQUQsQ0FBWixJQUF5Q0EsdUJBQXVCLENBQUN3QyxNQUFyRSxFQUE2RTtBQUM1RUYsY0FBQUEsdUJBQXVCLEdBQUd0Qyx1QkFBdUIsQ0FBQ3dDLE1BQXhCLENBQStCQyxJQUEvQixDQUN6QnpDLHVCQUR5QixFQUV6QjJCLGNBRnlCLEVBR3pCUSxjQUh5QixFQUl6QnhCLFNBSnlCLEVBS3pCcUIsYUFMeUIsRUFNekI3QixRQU55QixDQUExQjtBQVFBMEIsY0FBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlULFNBQVMsQ0FBQ3FCLGdCQUF0QixFQUF3Q0MsT0FBeEMsQ0FBZ0QsVUFBVUMsYUFBVixFQUFpQztBQUNoRixvQkFBSXZCLFNBQVMsQ0FBQ3FCLGdCQUFWLENBQTJCRSxhQUEzQixFQUEwQ0MsUUFBOUMsRUFBd0Q7QUFDdkRwQyxrQkFBQUEsU0FBUyxDQUFDbUMsYUFBRCxDQUFULEdBQTJCTix1QkFBdUIsQ0FBQ00sYUFBRCxDQUFsRDtBQUNBO0FBQ0QsZUFKRDtBQUtBZixjQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWUosZUFBWixFQUE2QmlCLE9BQTdCLENBQXFDLFVBQVVHLFlBQVYsRUFBZ0M7QUFDcEUsb0JBQUlSLHVCQUF1QixDQUFDUyxjQUF4QixDQUF1Q0QsWUFBdkMsQ0FBSixFQUEwRDtBQUN6RHJDLGtCQUFBQSxTQUFTLENBQUNxQyxZQUFELENBQVQsR0FBMEJSLHVCQUF1QixDQUFDUSxZQUFELENBQWpEO0FBQ0E7QUFDRCxlQUpEO0FBS0EsYUFuQkQsTUFtQk8sSUFBSTlDLHVCQUF1QixDQUFDZ0QsVUFBeEIsS0FBdUMsQ0FBM0MsRUFBOEM7QUFDcERuQixjQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWUgsY0FBWixFQUE0QmdCLE9BQTVCLENBQW9DLFVBQUNNLFFBQUQsRUFBYztBQUNqRCxvQkFBTUMsS0FBSyxHQUFHdkIsY0FBYyxDQUFDc0IsUUFBRCxDQUE1Qjs7QUFDQSxvQkFDQ0MsS0FBSyxJQUNMQSxLQUFLLENBQUNDLEdBRE4sSUFFQUQsS0FBSyxDQUFDQyxHQUFOLENBQVUsc0JBQVYsQ0FGQSxJQUdBLENBQUNELEtBQUssQ0FBQ0UsUUFBTixHQUFpQkQsR0FBakIsQ0FBcUIsc0NBQXJCLENBSkYsRUFLRTtBQUNEeEIsa0JBQUFBLGNBQWMsQ0FBQ3NCLFFBQUQsQ0FBZCxHQUEyQkMsS0FBSyxDQUFDRyxTQUFOLEVBQTNCO0FBQ0E7QUFDRCxlQVZEO0FBV0Esa0JBQU1DLGtCQUFrQixHQUFHdEQsdUJBQTNCO0FBQ0FrQyxjQUFBQSxTQUFTLEdBQUcsSUFBSW9CLGtCQUFKLENBQXVCM0I7QUFBZTtBQUF0QyxlQUFaO0FBQ0E7O0FBQ0QsZ0JBQU00QixnQkFBMkIsR0FBRyxJQUFJQyxjQUFKLENBQW1CdkQsS0FBbkIsRUFBMEJxQyx1QkFBMUIsRUFBbUR0Qyx1QkFBbkQsQ0FBcEM7QUFDQVMsWUFBQUEsU0FBUyxDQUFDRCxLQUFELENBQVQsR0FBbUIrQyxnQkFBZ0IsQ0FBQ0Usb0JBQWpCLENBQXNDLEdBQXRDLENBQW5CO0FBRUEsZ0JBQUl4QixrQkFBSixDQWhERyxDQWtESDs7QUFDQSxnQkFBSXlCLFNBQVMsQ0FBQ0MsaUJBQVYsRUFBSixFQUFtQztBQUNsQyxrQkFBTUMsVUFBVSxHQUFHRixTQUFTLENBQUNHLGVBQVYsQ0FBMEJ6RCxhQUExQixFQUF5Q2lCLFNBQXpDLEVBQW9EWixTQUFwRCxFQUErRFIsS0FBL0QsRUFBc0VDLFFBQXRFLENBQW5COztBQUNBLGtCQUFJMEQsVUFBSixFQUFnQjtBQUNmM0IsZ0JBQUFBLGtCQUFrQixHQUFHdEIsU0FBUyxDQUFDLFlBQUQsQ0FBOUI7QUFDQUEsZ0JBQUFBLFNBQVMsQ0FBQyxZQUFELENBQVQsR0FBMEJpRCxVQUFVLENBQUNFLFNBQXJDO0FBQ0E7QUFDRDs7QUFDREMsWUFBQUEsc0JBQXNCLENBQUMzRCxhQUFELEVBQWdCaUIsU0FBaEIsRUFBMkJaLFNBQTNCLEVBQXNDUixLQUF0QyxDQUF0QjtBQUVBLGdCQUFNK0QsZUFBZSxHQUFHOUQsUUFBUSxDQUFDK0QsSUFBVCxDQUN2QnhELFNBRHVCLEVBRXZCVCx1QkFBdUIsQ0FBQ3dCLE1BQXhCLEtBQW1DMEMsU0FBbkMsR0FBK0MsQ0FBQ2xFLHVCQUF1QixDQUFDd0IsTUFBeEUsR0FBaUYsSUFGMUQsQ0FBeEI7QUFJQSxnQkFBTTJDLE9BQU8sR0FBR2xFLEtBQUssQ0FBQ21FLFVBQXRCO0FBRUEsZ0JBQUlDLFdBQUo7QUFDQSxnQkFBSUMsUUFBSjs7QUFuRUc7QUFBQSxrQkFvRUNILE9BcEVEO0FBcUVGRSxnQkFBQUEsV0FBVyxHQUFHRSxLQUFLLENBQUNDLElBQU4sQ0FBV0wsT0FBTyxDQUFDTSxRQUFuQixFQUE2QkMsT0FBN0IsQ0FBcUN6RSxLQUFyQyxDQUFkOztBQUVBLG9CQUNFc0MsWUFBWSxDQUFDdkMsdUJBQUQsQ0FBWixJQUF5Q0EsdUJBQXVCLENBQUMyRSxXQUFsRSxJQUNBM0UsdUJBQXVCLENBQUNnRCxVQUF4QixLQUF1QyxDQUZ4QyxFQUdFO0FBQ0Qsc0JBQUk0QixTQUFKO0FBQ0Esc0JBQUlDLG1CQUFtQixHQUFHLEtBQTFCOztBQUNBLHNCQUFJN0UsdUJBQXVCLENBQUNnRCxVQUF4QixLQUF1QyxDQUEzQyxFQUE4QztBQUM3QzRCLG9CQUFBQSxTQUFTLEdBQUcxQyxTQUFTLENBQUN5QyxXQUFWLEVBQVo7QUFDQUUsb0JBQUFBLG1CQUFtQixHQUFHLElBQXRCO0FBQ0EsbUJBSEQsTUFHTyxJQUFJN0UsdUJBQXVCLENBQUMyRSxXQUE1QixFQUF5QztBQUMvQ0Msb0JBQUFBLFNBQVMsR0FBRzVFLHVCQUF1QixDQUFDMkUsV0FBeEIsQ0FBb0NyQyx1QkFBcEMsQ0FBWjtBQUNBOztBQUVELHNCQUFJd0MsUUFBUSxHQUFHLEVBQWY7O0FBQ0Esc0JBQUlGLFNBQUosRUFBZTtBQUNkLHdCQUFJLENBQUNBLFNBQVMsQ0FBQ0csaUJBQWYsRUFBa0M7QUFDakNILHNCQUFBQSxTQUFTLEdBQUdJLGNBQWMsQ0FBQ0osU0FBRCxFQUFZQyxtQkFBWixDQUExQixDQURpQyxDQUVqQzs7QUFDQSwwQkFBTUksSUFBSSxHQUFHQyxRQUFRLENBQUNDLGtCQUFULENBQTRCUCxTQUE1QixFQUF1Q1EsVUFBVSxDQUFDQyxTQUFsRCxDQUFiO0FBQ0EsMEJBQUlDLFFBQVEsR0FBR0wsSUFBSSxDQUFDTSxRQUFMLEVBQWY7O0FBQ0EsNkJBQU9ELFFBQVAsRUFBaUI7QUFDaEIsNEJBQUlBLFFBQVEsQ0FBQ0UsV0FBVCxJQUF3QkYsUUFBUSxDQUFDRSxXQUFULENBQXFCQyxJQUFyQixHQUE0QjVGLE1BQTVCLEdBQXFDLENBQWpFLEVBQW9FO0FBQ25FaUYsMEJBQUFBLFFBQVEsR0FBR1EsUUFBUSxDQUFDRSxXQUFwQjtBQUNBOztBQUNERix3QkFBQUEsUUFBUSxHQUFHTCxJQUFJLENBQUNNLFFBQUwsRUFBWDtBQUNBO0FBQ0Q7O0FBRUQsd0JBQUlYLFNBQVMsQ0FBQ2MsU0FBVixLQUF3QixhQUE1QixFQUEyQztBQUMxQztBQUNBO0FBQ0F0RSxzQkFBQUEsR0FBRyxDQUFDRCxLQUFKLGlEQUFtRG5CLHVCQUF1QixDQUFDTyxJQUEzRTs7QUFDQSwwQkFBSTtBQUFBOztBQUNIb0Ysd0JBQUFBLFdBQVcsR0FBRyxJQUFkO0FBQ0FmLHdCQUFBQSxTQUFTLEdBQUcsY0FBQTFDLFNBQVMsVUFBVCx3Q0FBV3lDLFdBQVgsR0FDVHpDLFNBQVMsQ0FBQ3lDLFdBQVYsRUFEUyxHQUVSM0UsdUJBQUQsQ0FBaUMyRSxXQUFqQyxDQUE2Q3JDLHVCQUE3QyxDQUZIO0FBR0FzQyx3QkFBQUEsU0FBUyxHQUFHSSxjQUFjLENBQUNKLFNBQUQsRUFBWSxJQUFaLENBQTFCO0FBQ0EsdUJBTkQsU0FNVTtBQUNUZSx3QkFBQUEsV0FBVyxHQUFHLEtBQWQ7QUFDQTtBQUNELHFCQWJELE1BYU8sSUFBSWIsUUFBUSxDQUFDakYsTUFBVCxHQUFrQixDQUF0QixFQUF5QjtBQUMvQjtBQUNBdUIsc0JBQUFBLEdBQUcsQ0FBQ0QsS0FBSixpREFBbURuQix1QkFBdUIsQ0FBQ08sSUFBM0U7QUFDQSwwQkFBTXFGLFVBQVUsR0FBR0MsY0FBYyxDQUNoQyxpREFDMEM3Rix1QkFBdUIsQ0FBQ08sSUFEbEUsaURBRXdDdUUsUUFGeEMsRUFEZ0MsRUFLaENGLFNBQVMsQ0FBQ2tCLFNBTHNCLENBQWpDO0FBT0FsQixzQkFBQUEsU0FBUyxHQUFHSSxjQUFjLENBQUNZLFVBQUQsRUFBYSxJQUFiLENBQTFCO0FBQ0E7O0FBQ0QzRixvQkFBQUEsS0FBSyxDQUFDOEYsV0FBTixDQUFrQm5CLFNBQWxCO0FBQ0EzRSxvQkFBQUEsS0FBSyxHQUFHa0UsT0FBTyxDQUFDTSxRQUFSLENBQWlCSixXQUFqQixDQUFSO0FBQ0FDLG9CQUFBQSxRQUFRLEdBQUdOLGVBQWUsQ0FBQ2dDLFNBQWhCLENBQTBCL0YsS0FBMUIsQ0FBWDtBQUNBLG1CQTFDRCxNQTBDTztBQUNOQSxvQkFBQUEsS0FBSyxDQUFDZ0csTUFBTjtBQUNBM0Isb0JBQUFBLFFBQVEsR0FBRzRCLE9BQU8sQ0FBQ0MsT0FBUixFQUFYO0FBQ0E7QUFDRCxpQkE1REQsTUE0RE87QUFDTjdCLGtCQUFBQSxRQUFRLEdBQUdOLGVBQWUsQ0FBQ29DLGNBQWhCLENBQStCaEcsYUFBL0IsRUFBOENILEtBQTlDLENBQVg7QUFDQTs7QUFySUMsdUNBdUlJcUUsUUF2SUo7QUF3SUYsc0JBQU0rQixhQUFhLEdBQUdsQyxPQUFPLENBQUNNLFFBQVIsQ0FBaUJKLFdBQWpCLENBQXRCOztBQUVBLHNCQUFJeEMsTUFBTSxDQUFDQyxJQUFQLENBQVlFLGFBQVosRUFBMkJuQyxNQUEzQixHQUFvQyxDQUF4QyxFQUEyQztBQUMxQ2dDLG9CQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWUUsYUFBWixFQUEyQlcsT0FBM0IsQ0FBbUMsVUFBVTJELGdCQUFWLEVBQW9DO0FBQ3RFLDBCQUFNQyxtQkFBbUIsR0FBR3ZFLGFBQWEsQ0FBQ3NFLGdCQUFELENBQXpDOztBQUNBLDBCQUFJRCxhQUFhLEtBQUssSUFBbEIsSUFBMEJBLGFBQWEsS0FBS25DLFNBQWhELEVBQTJEO0FBQzFELDRCQUFNc0MsU0FBUyxHQUFHdEIsUUFBUSxDQUFDdUIsZUFBVCxDQUF5QkosYUFBYSxDQUFDSyxZQUF2QyxFQUFxREosZ0JBQXJELENBQWxCO0FBQ0EsNEJBQUlLLGFBQWEsR0FBR0osbUJBQW1CLENBQUN4QixpQkFBeEM7O0FBQ0EsK0JBQU80QixhQUFQLEVBQXNCO0FBQ3JCLDhCQUFNQyxVQUFVLEdBQUdELGFBQWEsQ0FBQ0Usa0JBQWpDO0FBQ0FMLDBCQUFBQSxTQUFTLENBQUNNLFdBQVYsQ0FBc0JILGFBQXRCO0FBQ0FBLDBCQUFBQSxhQUFhLEdBQUdDLFVBQWhCO0FBQ0E7O0FBQ0QsNEJBQUlOLGdCQUFnQixLQUFLLFlBQXJCLElBQXFDQSxnQkFBZ0IsS0FBSyxZQUE5RCxFQUE0RTtBQUMzRSw4QkFBTVMsU0FBUyxHQUNiMUYsU0FBUyxDQUFDMkYsWUFBVixDQUF1QlYsZ0JBQXZCLEtBQTRDakYsU0FBUyxDQUFDMkYsWUFBVixDQUF1QlYsZ0JBQXZCLEVBQXlDVyxJQUF0RixJQUNBWCxnQkFGRDtBQUdBLDhCQUFNWSxjQUFjLEdBQUdiLGFBQWEsQ0FBQ2MsYUFBZCxDQUE0QixnQkFBZ0JKLFNBQWhCLEdBQTRCLElBQXhELENBQXZCOztBQUNBLDhCQUFJRyxjQUFKLEVBQW9CO0FBQ25CQSw0QkFBQUEsY0FBYyxDQUFDbkIsV0FBZixPQUFBbUIsY0FBYyxxQkFBaUJWLFNBQVMsQ0FBQy9CLFFBQTNCLEVBQWQ7QUFDQTtBQUNELHlCQVJELE1BUU87QUFDTjRCLDBCQUFBQSxhQUFhLENBQUNTLFdBQWQsQ0FBMEJOLFNBQTFCO0FBQ0E7QUFDRDtBQUNELHFCQXRCRDtBQXVCQTs7QUFsS0Msc0JBbUtFSCxhQW5LRjtBQW9LRCx3QkFBTWUsZUFBZSxHQUFHZixhQUFhLENBQUNnQixnQkFBZCxDQUErQixNQUEvQixDQUF4QjtBQUNBRCxvQkFBQUEsZUFBZSxDQUFDekUsT0FBaEIsQ0FBd0IsVUFBVTJFLFlBQVYsRUFBNkI7QUFDcERBLHNCQUFBQSxZQUFZLENBQUNyQixNQUFiO0FBQ0EscUJBRkQ7QUFyS0M7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQWdMSCxTQXJOQSxZQXFOUTdHLENBck5SLEVBcU5XO0FBQ1g7QUFDQSxjQUFNbUksWUFBWSxHQUFHO0FBQ3BCQyxZQUFBQSxpQkFBaUIsRUFBRSxFQURDO0FBRXBCQyxZQUFBQSxrQkFBa0IsRUFBRSxFQUZBO0FBR3BCQyxZQUFBQSxlQUFlLEVBQUVoRztBQUhHLFdBQXJCOztBQUZXLHFEQU9nQkUsV0FQaEI7QUFBQTs7QUFBQTtBQU9YLGdFQUF3QztBQUFBLGtCQUE3QitGLGFBQTZCO0FBQ3ZDLGtCQUFNQyxjQUFhLEdBQUdqRyxjQUFjLENBQUNnRyxhQUFELENBQXBDOztBQUNBLGtCQUFJQyxjQUFhLElBQUlBLGNBQWEsQ0FBQ3pFLEdBQS9CLElBQXNDeUUsY0FBYSxDQUFDekUsR0FBZCxDQUFrQixzQkFBbEIsQ0FBMUMsRUFBcUY7QUFDcEZvRSxnQkFBQUEsWUFBWSxDQUFDQyxpQkFBYixDQUErQkcsYUFBL0IsSUFBK0M7QUFDOUNFLGtCQUFBQSxJQUFJLEVBQUVELGNBQWEsQ0FBQ0UsT0FBZCxFQUR3QztBQUU5Q3RKLGtCQUFBQSxLQUFLLEVBQUVvSixjQUFhLENBQUN2RSxTQUFkO0FBRnVDLGlCQUEvQztBQUlBLGVBTEQsTUFLTztBQUNOa0UsZ0JBQUFBLFlBQVksQ0FBQ0MsaUJBQWIsQ0FBK0JHLGFBQS9CLElBQStDQyxjQUEvQztBQUNBO0FBQ0Q7QUFqQlU7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFrQlgsZUFBSyxJQUFNRCxZQUFYLElBQTJCaEcsY0FBM0IsRUFBMkM7QUFDMUMsZ0JBQU1pRyxhQUFhLEdBQUdqRyxjQUFjLENBQUNnRyxZQUFELENBQXBDOztBQUNBLGdCQUFJLENBQUMvRixXQUFXLENBQUNtRyxRQUFaLENBQXFCSixZQUFyQixDQUFMLEVBQXlDO0FBQ3hDLGtCQUFJQyxhQUFhLElBQUlBLGFBQWEsQ0FBQ3pFLEdBQS9CLElBQXNDeUUsYUFBYSxDQUFDekUsR0FBZCxDQUFrQixzQkFBbEIsQ0FBMUMsRUFBcUY7QUFDcEZvRSxnQkFBQUEsWUFBWSxDQUFDRSxrQkFBYixDQUFnQ0UsWUFBaEMsSUFBZ0Q7QUFDL0NFLGtCQUFBQSxJQUFJLEVBQUVELGFBQWEsQ0FBQ0UsT0FBZCxFQUR5QztBQUUvQ3RKLGtCQUFBQSxLQUFLLEVBQUVvSixhQUFhLENBQUN2RSxTQUFkO0FBRndDLGlCQUFoRDtBQUlBLGVBTEQsTUFLTztBQUNOa0UsZ0JBQUFBLFlBQVksQ0FBQ0Usa0JBQWIsQ0FBZ0NFLFlBQWhDLElBQWdEQyxhQUFoRDtBQUNBO0FBQ0Q7QUFDRDs7QUFDRCxjQUFNSSxRQUFRLEdBQUc1SSxDQUFqQjtBQUNBZ0MsVUFBQUEsR0FBRyxDQUFDRCxLQUFKLENBQVU2RyxRQUFWLEVBQW9CQSxRQUFwQjtBQUNBLGNBQU1DLE1BQU0sR0FBR3BDLGNBQWMsQ0FDNUIsaURBQTBDN0YsdUJBQXVCLENBQUNPLElBQWxFLEdBQTBFeUgsUUFBUSxDQUFDRSxLQUFuRixDQUQ0QixFQUU1QmpJLEtBQUssQ0FBQzZGLFNBRnNCLEVBRzVCeUIsWUFINEIsQ0FBN0I7QUFLQSxjQUFNM0MsU0FBUyxHQUFHSSxjQUFjLENBQUNpRCxNQUFELEVBQVMsSUFBVCxDQUFoQztBQUNBaEksVUFBQUEsS0FBSyxDQUFDOEYsV0FBTixDQUFrQm5CLFNBQWxCO0FBQ0EsU0E3UEE7O0FBQUE7QUFBQTtBQThQRCxLOzs7OztNQXJTYzdDLGUsYUFDZDlCLEssRUFDQUMsUSxFQUNBbUIsUyxFQUNBbEIsUSxFQUNBd0IsYztRQUNDO0FBQ0QsVUFBTUssYUFBa0IsR0FBRyxFQUEzQjs7QUFEQztBQUFBLFlBRUcvQixLQUFLLENBQUM4RSxpQkFBTixLQUE0QixJQUYvQjtBQUdBO0FBSEEsaUNBSU03RSxRQUFRLENBQUNpSSxlQUFULENBQXlCbEksS0FBekIsQ0FKTjtBQUtBLGdCQUFJbUksa0JBQWtDLEdBQUduSSxLQUFLLENBQUM4RSxpQkFBL0M7O0FBQ0EsbUJBQU9xRCxrQkFBa0IsS0FBSyxJQUE5QixFQUFvQztBQUNuQyxrQkFBTUMsVUFBVSxHQUFHRCxrQkFBa0IsQ0FBQzFDLFNBQXRDOztBQUNBLGtCQUNDN0QsTUFBTSxDQUFDQyxJQUFQLENBQVlULFNBQVMsQ0FBQzJGLFlBQXRCLEVBQW9DdEMsT0FBcEMsQ0FBNEMyRCxVQUE1QyxNQUE0RCxDQUFDLENBQTdELEtBQ0MsQ0FBQ2xJLFFBQUQsSUFBYWtCLFNBQVMsQ0FBQzJGLFlBQVYsQ0FBdUJxQixVQUF2QixFQUFtQ2xJLFFBRGpELENBREQsRUFHRTtBQUNENkIsZ0JBQUFBLGFBQWEsQ0FBQ29HLGtCQUFrQixDQUFDMUMsU0FBcEIsQ0FBYixHQUE4QzBDLGtCQUE5QztBQUNBLGVBTEQsTUFLTyxJQUFJdkcsTUFBTSxDQUFDQyxJQUFQLENBQVlULFNBQVMsQ0FBQ2lILFVBQXRCLEVBQWtDNUQsT0FBbEMsQ0FBMEMyRCxVQUExQyxNQUEwRCxDQUFDLENBQS9ELEVBQWtFO0FBQ3hFO0FBQ0ExRyxnQkFBQUEsY0FBYyxDQUFDMEcsVUFBRCxDQUFkLEdBQTZCLEVBQTdCOztBQUNBLGdEQUE2QnhHLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZc0csa0JBQWtCLENBQUNHLFVBQS9CLENBQTdCLGtDQUF5RTtBQUFwRSxzQkFBTUMsY0FBYyxtQkFBcEI7QUFDSjdHLGtCQUFBQSxjQUFjLENBQUMwRyxVQUFELENBQWQsQ0FBMkJELGtCQUFrQixDQUFDRyxVQUFuQixDQUE4QkMsY0FBOUIsRUFBcUQ5QyxTQUFoRixJQUNDMEMsa0JBQWtCLENBQUNHLFVBQW5CLENBQThCQyxjQUE5QixFQUFxRGhLLEtBRHREO0FBRUE7QUFDRDs7QUFFRDRKLGNBQUFBLGtCQUFrQixHQUFHQSxrQkFBa0IsQ0FBQ3ZCLGtCQUF4QztBQUNBO0FBdkJEO0FBQUE7QUFBQTs7QUFBQTtBQXlCRCxlQUFPN0UsYUFBUDtBQXpCQyxXQXlCTUEsYUF6Qk47QUEwQkQsSzs7Ozs7TUE5RmNQLGlCLGFBQ2RKLFMsRUFDQVYsUyxFQUNBVixLLEVBQ0FFLFEsRUFDQUQsUSxFQUNBTyxTLEVBQ0FDLGlCO1FBQ0M7QUFBQTtBQTJCRDtBQUNBK0gsUUFBQUEsdUJBQXVCLEdBQUdBLHVCQUF1QixDQUFDQyxJQUF4QixDQUE2QixVQUFVQyxDQUFWLEVBQXFCQyxDQUFyQixFQUFnQztBQUN0RixpQkFBT0QsQ0FBQyxHQUFHQyxDQUFKLEdBQVEsQ0FBUixHQUFZLENBQUMsQ0FBcEI7QUFDQSxTQUZ5QixDQUExQjs7QUE1QkMsb0RBK0I0QkgsdUJBL0I1QjtBQUFBOztBQUFBO0FBK0JELGlFQUFzRDtBQUFBLGdCQUEzQ0ksY0FBMkM7QUFDckQsZ0JBQU1DLGFBQWEsR0FBRzNJLFFBQVEsSUFBSSxDQUFDNEksbUJBQW1CLENBQUNGLGNBQUQsQ0FBbkIsQ0FBb0MxSSxRQUFqRCxJQUE2REYsS0FBSyxDQUFDK0ksWUFBTixDQUFtQkgsY0FBbkIsQ0FBbkY7O0FBQ0EsZ0JBQU1JLGdCQUFnQixHQUFHQyxtQkFBbUIsQ0FBQ3ZJLFNBQUQsRUFBWVYsS0FBWixFQUFtQjRJLGNBQW5CLEVBQW1DM0ksUUFBbkMsRUFBNkM0SSxhQUE3QyxFQUE0RHpILFNBQVMsQ0FBQ0csTUFBdEUsQ0FBNUM7O0FBQ0EsZ0JBQUl5SCxnQkFBSixFQUFzQjtBQUNyQkEsY0FBQUEsZ0JBQWdCLENBQUMxSSxJQUFqQixHQUF3QnNJLGNBQXhCO0FBQ0FNLGNBQUFBLGdCQUFnQixDQUFDMUksU0FBRCxFQUFZUCxRQUFaLEVBQXNCK0ksZ0JBQXRCLEVBQXdDdkksaUJBQXhDLENBQWhCOztBQUNBLGtCQUNFbUksY0FBYyxLQUFLLFdBQW5CLElBQWtDLENBQUNsSSxTQUFTLENBQUN5SSxlQUFWLENBQTBCckcsY0FBMUIsQ0FBeUM4RixjQUF6QyxDQUFwQyxJQUNDQSxjQUFjLEtBQUssYUFBbkIsSUFBb0MsQ0FBQ2xJLFNBQVMsQ0FBQ3lJLGVBQVYsQ0FBMEJyRyxjQUExQixDQUF5QzhGLGNBQXpDLENBRnZDLEVBR0U7QUFDRGxJLGdCQUFBQSxTQUFTLENBQUN5SSxlQUFWLENBQTBCUCxjQUExQixJQUE0Q3BJLFNBQVMsQ0FBQ29JLGNBQUQsQ0FBckQ7QUFDQTs7QUFDRCxrQkFBSUEsY0FBYyxLQUFLLGFBQXZCLEVBQXNDO0FBQ3JDbEksZ0JBQUFBLFNBQVMsQ0FBQzBJLGtCQUFWLEdBQStCNUksU0FBUyxDQUFDb0ksY0FBRCxDQUF4QztBQUNBOztBQUNEbEgsY0FBQUEsY0FBYyxDQUFDa0gsY0FBRCxDQUFkLEdBQWlDcEksU0FBUyxDQUFDb0ksY0FBRCxDQUExQztBQUNBLGFBYkQsTUFhTztBQUNObkgsY0FBQUEsZUFBZSxDQUFDbUgsY0FBRCxDQUFmLEdBQWtDLElBQWxDO0FBQ0E7QUFDRDtBQWxEQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQW1ERCxlQUFPO0FBQUVuSCxVQUFBQSxlQUFlLEVBQWZBLGVBQUY7QUFBbUJDLFVBQUFBLGNBQWMsRUFBRUE7QUFBbkMsU0FBUDtBQW5EQzs7QUFDRCxVQUFNRCxlQUFvQixHQUFHLEVBQTdCO0FBQ0EsVUFBTTRILHFCQUFxQixHQUFHakksU0FBUyxDQUFDaUgsVUFBeEM7QUFDQSxVQUFNUyxtQkFBbUIsR0FBRzFILFNBQVMsQ0FBQ3FCLGdCQUF0QztBQUNBL0IsTUFBQUEsU0FBUyxDQUFDMEksa0JBQVYsR0FBK0IxSSxTQUFTLENBQUN5SSxlQUFWLENBQTBCRyxXQUF6RCxDQUpDLENBTUQ7O0FBQ0EsVUFBTUMseUJBQXlCLEdBQUczSCxNQUFNLENBQUNDLElBQVAsQ0FBWXdILHFCQUFaLENBQWxDO0FBQ0EsVUFBSWIsdUJBQXVCLEdBQUc1RyxNQUFNLENBQUNDLElBQVAsQ0FBWWlILG1CQUFaLENBQTlCO0FBQ0EsVUFBTXBILGNBQW1DLEdBQUcsRUFBNUM7O0FBVEMsMkJBVW1CNkgseUJBVm5CLFlBVVFDLENBVlIsRUFVMEQ7QUFDMUQsWUFBTUMsU0FBUyxHQUFHRix5QkFBeUIsQ0FBQ0MsQ0FBRCxDQUEzQzs7QUFDQSxZQUFJSCxxQkFBcUIsQ0FBQ0ksU0FBRCxDQUFyQixDQUFpQ0MsSUFBakMsS0FBMEMsUUFBOUMsRUFBd0Q7QUFDdkRoSSxVQUFBQSxjQUFjLENBQUMrSCxTQUFELENBQWQsR0FBNEIsRUFBNUIsQ0FEdUQsQ0FDdkI7QUFDaEMsU0FGRCxNQUVPO0FBQ04vSCxVQUFBQSxjQUFjLENBQUMrSCxTQUFELENBQWQsR0FBNEJKLHFCQUFxQixDQUFDSSxTQUFELENBQXJCLENBQWlDRSxZQUE3RDtBQUNBOztBQU55RDtBQUFBLGNBT3REM0osS0FBSyxDQUFDK0ksWUFBTixDQUFtQlUsU0FBbkIsS0FBaUN2SixRQUFqQyxJQUE2QyxDQUFDbUoscUJBQXFCLENBQUNJLFNBQUQsQ0FBckIsQ0FBaUN2SixRQVB6QjtBQVF6RGlCLFlBQUFBLEdBQUcsQ0FBQ0QsS0FBSixvQkFBc0J1SSxTQUF0QjtBQVJ5RDtBQUFBO0FBQUEsa0JBUy9DekosS0FBSyxDQUFDK0ksWUFBTixDQUFtQlUsU0FBbkIsQ0FUK0M7QUFBQSx1Q0FVbkR4SixRQUFRLENBQUMySixjQUFULENBQXdCNUosS0FBeEIsRUFBK0JBLEtBQUssQ0FBQ3NJLFVBQU4sQ0FBaUJ1QixZQUFqQixDQUE4QkosU0FBOUIsQ0FBL0IsQ0FWbUQ7QUFXekQsc0JBQU1LLE1BQU0sR0FBRzlKLEtBQUssQ0FBQytKLFlBQU4sQ0FBbUJOLFNBQW5CLENBQWY7O0FBWHlELHNCQVlyREssTUFBTSxLQUFLN0YsU0FaMEM7QUFheER2QyxvQkFBQUEsY0FBYyxDQUFDK0gsU0FBRCxDQUFkLEdBQTRCSyxNQUE1QjtBQWJ3RDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnQjFELE9BMUJBOztBQUFBO0FBb0RELEs7Ozs7O0FBcldELE1BQU1FLFlBQVksR0FBRyxpREFBckI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxJQUFJQyxTQUFKLEVBQTFCO0FBQ0EsTUFBSXhFLFdBQVcsR0FBRyxLQUFsQjs7QUFvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBU3BELFlBQVQsQ0FBc0I2SCx1QkFBdEIsRUFBOEg7QUFDN0gsV0FBT0EsdUJBQXVCLENBQUNwSCxVQUF4QixLQUF1Q2tCLFNBQXZDLElBQW9Ea0csdUJBQXVCLENBQUNwSCxVQUF4QixLQUF1QyxDQUFsRztBQUNBOztBQUNELFdBQVNxSCw0QkFBVCxDQUNDN0osS0FERCxFQUVDQyxTQUZELEVBR0M2SixnQkFIRCxFQUlDQyxJQUpELEVBS0U7QUFDRCxRQUFNQyxRQUFRLEdBQUcvSixTQUFTLENBQUM4SixJQUFELENBQTFCO0FBQ0EsUUFBTUUsY0FBYyxHQUFHRCxRQUFILGFBQUdBLFFBQUgsdUJBQUdBLFFBQVEsQ0FBRW5ILFNBQVYsRUFBdkI7O0FBRUEsUUFBSWlILGdCQUFnQixDQUFDSSxRQUFqQixLQUE4QixDQUFDRixRQUFELElBQWFDLGNBQWMsS0FBSyxJQUE5RCxDQUFKLEVBQXlFO0FBQ3hFLFlBQU0sSUFBSUUsS0FBSixXQUFhbkssS0FBYix5Q0FBaUQrSixJQUFqRCxrQkFBTjtBQUNBLEtBRkQsTUFFTyxJQUFJRSxjQUFKLEVBQW9CO0FBQzFCO0FBQ0E7QUFDQSxVQUFJQSxjQUFjLENBQUMxSCxjQUFmLENBQThCLE9BQTlCLEtBQTBDdUgsZ0JBQWdCLENBQUNNLEtBQS9ELEVBQXNFO0FBQ3JFO0FBQ0EsWUFBSU4sZ0JBQWdCLENBQUNNLEtBQWpCLENBQXVCbEcsT0FBdkIsQ0FBK0IrRixjQUFjLENBQUMsT0FBRCxDQUE3QyxNQUE0RCxDQUFDLENBQWpFLEVBQW9FO0FBQ25FLGdCQUFNLElBQUlFLEtBQUosV0FDRm5LLEtBREUsZ0JBQ1MrSixJQURULGdDQUNtQ0QsZ0JBQWdCLENBQUMsT0FBRCxDQURuRCx1QkFFSkcsY0FBYyxDQUFDRyxLQUZYLGdCQUdDSixRQUFRLENBQUMxQyxPQUFULEVBSEQsRUFBTjtBQUtBO0FBQ0QsT0FURCxNQVNPLElBQUkyQyxjQUFjLENBQUMxSCxjQUFmLENBQThCLE9BQTlCLEtBQTBDdUgsZ0JBQWdCLENBQUNPLEtBQS9ELEVBQXNFO0FBQzVFO0FBQ0EsWUFBSVAsZ0JBQWdCLENBQUNPLEtBQWpCLENBQXVCbkcsT0FBdkIsQ0FBK0IrRixjQUFjLENBQUMsT0FBRCxDQUE3QyxNQUE0RCxDQUFDLENBQWpFLEVBQW9FO0FBQ25FLGdCQUFNLElBQUlFLEtBQUosV0FDRm5LLEtBREUsZ0JBQ1MrSixJQURULGdDQUNtQ0QsZ0JBQWdCLENBQUMsT0FBRCxDQURuRCx1QkFFSkcsY0FBYyxDQUFDSSxLQUZYLGdCQUdDTCxRQUFRLENBQUMxQyxPQUFULEVBSEQsRUFBTjtBQUtBO0FBQ0Q7QUFDRDtBQUNEOztBQUNNLFdBQVMvRCxzQkFBVCxDQUFnQ3ZELEtBQWhDLEVBQTRDYSxTQUE1QyxFQUE0RFosU0FBNUQsRUFBNEVSLEtBQTVFLEVBQXdGO0FBQzlGLFFBQU02SyxvQkFBb0IsR0FBSXpKLFNBQVMsQ0FBQ3FCLGdCQUFWLElBQThCYixNQUFNLENBQUNDLElBQVAsQ0FBWVQsU0FBUyxDQUFDcUIsZ0JBQXRCLENBQS9CLElBQTJFLEVBQXhHO0FBQUEsUUFDQ3FJLFdBQVcsR0FBSTFKLFNBQVMsQ0FBQ2lILFVBQVYsSUFBd0J6RyxNQUFNLENBQUNDLElBQVAsQ0FBWVQsU0FBUyxDQUFDaUgsVUFBdEIsQ0FBekIsSUFBK0QsRUFEOUU7QUFBQSxRQUVDMEMsZUFBb0IsR0FBRyxFQUZ4QixDQUQ4RixDQUs5Rjs7QUFDQW5KLElBQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZN0IsS0FBSyxDQUFDc0ksVUFBbEIsRUFBOEI1RixPQUE5QixDQUFzQyxVQUFVc0ksSUFBVixFQUF3QjtBQUM3RCxVQUFNVixJQUFJLEdBQUd0SyxLQUFLLENBQUNzSSxVQUFOLENBQWlCMEMsSUFBakIsRUFBdUIxSyxJQUFwQztBQUNBeUssTUFBQUEsZUFBZSxDQUFDVCxJQUFELENBQWYsR0FBd0IsSUFBeEI7QUFDQSxLQUhELEVBTjhGLENBVzlGOztBQUNBTyxJQUFBQSxvQkFBb0IsQ0FBQ25JLE9BQXJCLENBQTZCLFVBQVU0SCxJQUFWLEVBQXFCO0FBQ2pELFVBQU1ELGdCQUFnQixHQUFHakosU0FBUyxDQUFDcUIsZ0JBQVYsQ0FBMkI2SCxJQUEzQixDQUF6QjtBQUVBRixNQUFBQSw0QkFBNEIsQ0FBQzdKLEtBQUQsRUFBUUMsU0FBUixFQUFtQjZKLGdCQUFuQixFQUFxQ0MsSUFBckMsQ0FBNUI7QUFDQSxhQUFPUyxlQUFlLENBQUNULElBQUQsQ0FBdEI7QUFDQSxLQUxELEVBWjhGLENBa0I5Rjs7QUFDQVEsSUFBQUEsV0FBVyxDQUFDcEksT0FBWixDQUFvQixVQUFVNEgsSUFBVixFQUFxQjtBQUN4QyxVQUFNVyxpQkFBaUIsR0FBRzdKLFNBQVMsQ0FBQ2lILFVBQVYsQ0FBcUJpQyxJQUFyQixDQUExQjs7QUFDQSxVQUFJLENBQUN0SyxLQUFLLENBQUMrSSxZQUFOLENBQW1CdUIsSUFBbkIsQ0FBTCxFQUErQjtBQUM5QixZQUFJVyxpQkFBaUIsQ0FBQ1IsUUFBbEIsSUFBOEIsQ0FBQ1EsaUJBQWlCLENBQUNuSSxjQUFsQixDQUFpQyxjQUFqQyxDQUFuQyxFQUFxRjtBQUNwRixnQkFBTSxJQUFJNEgsS0FBSixDQUFVbkssS0FBSyxHQUFHLElBQVIsR0FBZSxxQkFBZixHQUF1QytKLElBQXZDLEdBQThDLGNBQXhELENBQU47QUFDQTtBQUNELE9BSkQsTUFJTztBQUNOLGVBQU9TLGVBQWUsQ0FBQ1QsSUFBRCxDQUF0QjtBQUNBO0FBQ0QsS0FURCxFQW5COEYsQ0E4QjlGOztBQUNBMUksSUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlrSixlQUFaLEVBQTZCckksT0FBN0IsQ0FBcUMsVUFBVTRILElBQVYsRUFBd0I7QUFDNUQ7QUFDQSxVQUFJQSxJQUFJLENBQUM3RixPQUFMLENBQWEsR0FBYixJQUFvQixDQUFwQixJQUF5QixDQUFDNkYsSUFBSSxDQUFDWSxVQUFMLENBQWdCLE9BQWhCLENBQTlCLEVBQXdEO0FBQ3ZEL0osUUFBQUEsR0FBRyxDQUFDZ0ssT0FBSixnQ0FBb0M1SyxLQUFwQyxlQUE4QytKLElBQTlDLEdBQXNEckcsU0FBdEQsRUFBaUUrRixZQUFqRTtBQUNBO0FBQ0QsS0FMRDtBQU1BO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ0EsV0FBUzNJLGVBQVQsQ0FBeUIrSixxQkFBekIsRUFBdUg7QUFBQSxRQUEvQzdKLE1BQStDLHVFQUF0QyxLQUFzQzs7QUFDdEgsUUFBSTZKLHFCQUFKLEVBQTJCO0FBQzFCLFVBQU1DLFdBQWdCLEdBQUcsRUFBekI7QUFDQSxVQUFNdEosYUFBa0IsR0FBRztBQUMxQixzQkFBYztBQUNiMkgsVUFBQUEsSUFBSSxFQUFFO0FBRE8sU0FEWTtBQUkxQixzQkFBYztBQUNiQSxVQUFBQSxJQUFJLEVBQUU7QUFETztBQUpZLE9BQTNCO0FBUUEsVUFBTWpKLGlCQUFrRSxHQUFHLEVBQTNFO0FBRUFtQixNQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWXVKLHFCQUFxQixDQUFDL0MsVUFBbEMsRUFBOEMzRixPQUE5QyxDQUFzRCxVQUFVNEksYUFBVixFQUFpQztBQUN0RixZQUFJRixxQkFBcUIsQ0FBQy9DLFVBQXRCLENBQWlDaUQsYUFBakMsRUFBZ0Q1QixJQUFoRCxLQUF5RCxzQkFBN0QsRUFBcUY7QUFDcEYyQixVQUFBQSxXQUFXLENBQUNDLGFBQUQsQ0FBWCxHQUE2QkYscUJBQXFCLENBQUMvQyxVQUF0QixDQUFpQ2lELGFBQWpDLENBQTdCO0FBQ0EsU0FGRCxNQUVPO0FBQ043SyxVQUFBQSxpQkFBaUIsQ0FBQzZLLGFBQUQsQ0FBakIsR0FBbUNGLHFCQUFxQixDQUFDL0MsVUFBdEIsQ0FBaUNpRCxhQUFqQyxDQUFuQztBQUNBO0FBQ0QsT0FORCxFQVowQixDQW1CMUI7O0FBQ0EsVUFBSUYscUJBQXFCLENBQUNHLE1BQTFCLEVBQWtDO0FBQ2pDM0osUUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVl1SixxQkFBcUIsQ0FBQ0csTUFBbEMsRUFBMEM3SSxPQUExQyxDQUFrRCxVQUFVOEksVUFBVixFQUE4QjtBQUMvRUgsVUFBQUEsV0FBVyxDQUFDRyxVQUFELENBQVgsR0FBMEJKLHFCQUFxQixDQUFDRyxNQUF0QixDQUE2QkMsVUFBN0IsQ0FBMUI7QUFDQSxTQUZEO0FBR0E7O0FBQ0QsVUFBSUoscUJBQXFCLENBQUNyRSxZQUExQixFQUF3QztBQUN2Q25GLFFBQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZdUoscUJBQXFCLENBQUNyRSxZQUFsQyxFQUFnRHJFLE9BQWhELENBQXdELFVBQVU0SSxhQUFWLEVBQWlDO0FBQ3hGdkosVUFBQUEsYUFBYSxDQUFDdUosYUFBRCxDQUFiLEdBQStCRixxQkFBcUIsQ0FBQ3JFLFlBQXRCLENBQW1DdUUsYUFBbkMsQ0FBL0I7QUFDQSxTQUZEO0FBR0E7O0FBQ0QsYUFBTztBQUNOakQsUUFBQUEsVUFBVSxFQUFFZ0QsV0FETjtBQUVOdEUsUUFBQUEsWUFBWSxFQUFFaEYsYUFGUjtBQUdOVSxRQUFBQSxnQkFBZ0IsRUFBRWhDLGlCQUhaO0FBSU5jLFFBQUFBLE1BQU0sRUFBRUE7QUFKRixPQUFQO0FBTUEsS0FwQ0QsTUFvQ087QUFDTixhQUFPO0FBQ05rQixRQUFBQSxnQkFBZ0IsRUFBRSxFQURaO0FBRU5zRSxRQUFBQSxZQUFZLEVBQUU7QUFDYix3QkFBYztBQUNiMkMsWUFBQUEsSUFBSSxFQUFFO0FBRE8sV0FERDtBQUliLHdCQUFjO0FBQ2JBLFlBQUFBLElBQUksRUFBRTtBQURPO0FBSkQsU0FGUjtBQVVOckIsUUFBQUEsVUFBVSxFQUFFLEVBVk47QUFXTjlHLFFBQUFBLE1BQU0sRUFBRUE7QUFYRixPQUFQO0FBYUE7QUFDRDs7QUFFRCxXQUFTMEgsbUJBQVQsQ0FDQ3ZJLFNBREQsRUFFQ1YsS0FGRCxFQUdDNEksY0FIRCxFQUlDM0ksUUFKRCxFQUtDNEksYUFMRCxFQU1DdEgsTUFORCxFQU9FO0FBQ0QsUUFBSXlILGdCQUFKOztBQUNBLFFBQUksQ0FBQ0gsYUFBRCxJQUFrQjdJLEtBQUssQ0FBQytJLFlBQU4sQ0FBbUJILGNBQW5CLENBQXRCLEVBQTBEO0FBQ3pELFVBQU02QyxlQUFlLEdBQUd6TCxLQUFLLENBQUMrSixZQUFOLENBQW1CbkIsY0FBbkIsQ0FBeEI7QUFDQSxVQUFJOEMsU0FBSixDQUZ5RCxDQUd6RDs7QUFDQTFDLE1BQUFBLGdCQUFnQixHQUFHMkMsYUFBYSxDQUFDQyxhQUFkLENBQTRCSCxlQUE1QixDQUFuQjs7QUFDQSxVQUFJLENBQUN6QyxnQkFBTCxFQUF1QjtBQUN0QixZQUFJeUMsZUFBZSxDQUFDUCxVQUFoQixDQUEyQixPQUEzQixDQUFKLEVBQXlDO0FBQ3hDLGNBQU1qSSxLQUFLLEdBQUc0SSxPQUFPLENBQUNKLGVBQUQsQ0FBckI7QUFDQSxjQUFNSyxZQUFZLEdBQUcsTUFBTUwsZUFBM0I7QUFDQS9LLFVBQUFBLFNBQVMsQ0FBQ0UsTUFBVixDQUFpQm1MLGdCQUFqQixDQUFrQ0MsV0FBbEMsQ0FBOENGLFlBQTlDLEVBQTREN0ksS0FBNUQ7QUFDQStGLFVBQUFBLGdCQUFnQixHQUFHO0FBQ2xCaUQsWUFBQUEsS0FBSyxFQUFFLGtCQURXO0FBRWxCckUsWUFBQUEsSUFBSSxFQUFFa0U7QUFGWSxXQUFuQjtBQUlBLFNBUkQsTUFRTyxJQUFLbEQsY0FBYyxLQUFLLFVBQW5CLElBQWlDbEksU0FBUyxDQUFDMEksa0JBQTVDLElBQW1FUixjQUFjLEtBQUssYUFBMUYsRUFBeUc7QUFDL0csY0FBSTZDLGVBQWUsSUFBSUEsZUFBZSxDQUFDUCxVQUFoQixDQUEyQixHQUEzQixDQUF2QixFQUF3RDtBQUN2RDtBQUNBUSxZQUFBQSxTQUFTLEdBQUdELGVBQVo7QUFDQSxXQUhELE1BR087QUFDTixnQkFBSUssYUFBWSxHQUFHcEwsU0FBUyxDQUFDMEksa0JBQVYsQ0FBNkJ2QixPQUE3QixFQUFuQjs7QUFDQSxnQkFBSSxDQUFDaUUsYUFBWSxDQUFDSSxRQUFiLENBQXNCLEdBQXRCLENBQUwsRUFBaUM7QUFDaENKLGNBQUFBLGFBQVksSUFBSSxHQUFoQjtBQUNBOztBQUNESixZQUFBQSxTQUFTLEdBQUdJLGFBQVksR0FBR0wsZUFBM0I7QUFDQTs7QUFDRHpDLFVBQUFBLGdCQUFnQixHQUFHO0FBQ2xCaUQsWUFBQUEsS0FBSyxFQUFFLFdBRFc7QUFFbEJyRSxZQUFBQSxJQUFJLEVBQUU4RDtBQUZZLFdBQW5CO0FBSUEsU0FmTSxNQWVBO0FBQ04xQyxVQUFBQSxnQkFBZ0IsR0FBRztBQUNsQmlELFlBQUFBLEtBQUssRUFBRSxXQURXO0FBRWxCckUsWUFBQUEsSUFBSSxFQUFFbEgsU0FBUyxDQUFDeUksZUFBVixDQUEwQmdELFNBQTFCLEdBQ0h6TCxTQUFTLENBQUN5SSxlQUFWLENBQTBCZ0QsU0FBMUIsQ0FBb0N0RSxPQUFwQyxDQUE0QzRELGVBQTVDLENBREcsR0FFSEE7QUFKZSxXQUFuQjtBQU1BO0FBQ0Q7QUFDRCxLQXRDRCxNQXNDTyxJQUFJL0ssU0FBUyxDQUFDeUksZUFBVixDQUEwQnJHLGNBQTFCLENBQXlDOEYsY0FBekMsQ0FBSixFQUE4RDtBQUNwRUksTUFBQUEsZ0JBQWdCLEdBQUc7QUFDbEJpRCxRQUFBQSxLQUFLLEVBQUVyRCxjQURXO0FBRWxCaEIsUUFBQUEsSUFBSSxFQUFFO0FBRlksT0FBbkI7QUFJQSxLQUxNLE1BS0EsSUFBSXJHLE1BQUosRUFBWTtBQUNsQixVQUFJO0FBQ0gsWUFBSXRCLFFBQVEsQ0FBQ21NLFVBQVQsV0FBdUJ4RCxjQUF2QixPQUFKLEVBQStDO0FBQzlDSSxVQUFBQSxnQkFBZ0IsR0FBRztBQUNsQmlELFlBQUFBLEtBQUssRUFBRXJELGNBRFc7QUFFbEJoQixZQUFBQSxJQUFJLEVBQUU7QUFGWSxXQUFuQjtBQUlBO0FBQ0QsT0FQRCxDQU9FLE9BQU96SSxDQUFQLEVBQVU7QUFDWDZKLFFBQUFBLGdCQUFnQixHQUFHL0UsU0FBbkI7QUFDQTtBQUNEOztBQUNELFdBQU8rRSxnQkFBUDtBQUNBOztBQXNXRCxXQUFTRSxnQkFBVCxDQUEwQjFJLFNBQTFCLEVBQTBDUCxRQUExQyxFQUF5RG9NLElBQXpELEVBQW9FNUwsaUJBQXBFLEVBQTRGO0FBQzNGLFFBQU02SixJQUFJLEdBQUcrQixJQUFJLENBQUMvTCxJQUFMLElBQWErTCxJQUFJLENBQUNKLEtBQWxCLElBQTJCaEksU0FBeEM7O0FBRUEsUUFBSXhELGlCQUFpQixDQUFDNkosSUFBRCxDQUFyQixFQUE2QjtBQUM1QixhQUQ0QixDQUNwQjtBQUNSOztBQUNELFFBQUk7QUFDSCxVQUFJd0IsWUFBWSxHQUFHTyxJQUFJLENBQUN6RSxJQUF4Qjs7QUFDQSxVQUFJeUUsSUFBSSxDQUFDSixLQUFMLElBQWMsSUFBbEIsRUFBd0I7QUFDdkJILFFBQUFBLFlBQVksR0FBR08sSUFBSSxDQUFDSixLQUFMLEdBQWEsR0FBYixHQUFtQkgsWUFBbEM7QUFDQTs7QUFDRCxVQUFNUSxRQUFRLEdBQUdyTSxRQUFRLENBQUNVLFdBQVQsRUFBakI7O0FBQ0EsVUFBSSxDQUFDMkwsUUFBUSxDQUFDbkQsZUFBVCxDQUF5QmtELElBQUksQ0FBQ0osS0FBOUIsQ0FBRCxJQUF5Q0ssUUFBUSxDQUFDMUwsTUFBVCxDQUFnQnlMLElBQUksQ0FBQ0osS0FBckIsQ0FBN0MsRUFBMEU7QUFDekV6TCxRQUFBQSxTQUFTLENBQUM4SixJQUFELENBQVQsR0FBa0JnQyxRQUFRLENBQUMxTCxNQUFULENBQWdCeUwsSUFBSSxDQUFDSixLQUFyQixFQUE0QkcsVUFBNUIsQ0FBdUNDLElBQUksQ0FBQ3pFLElBQTVDLENBQWxCLENBRHlFLENBQ0o7QUFDckUsT0FGRCxNQUVPO0FBQ05wSCxRQUFBQSxTQUFTLENBQUM4SixJQUFELENBQVQsR0FBa0JySyxRQUFRLENBQUNtTSxVQUFULENBQW9CTixZQUFwQixDQUFsQixDQURNLENBQytDO0FBQ3JEOztBQUVEckwsTUFBQUEsaUJBQWlCLENBQUM2SixJQUFELENBQWpCLEdBQTBCOUosU0FBUyxDQUFDOEosSUFBRCxDQUFuQyxDQVpHLENBWXdDO0FBQzNDLEtBYkQsQ0FhRSxPQUFPaUMsRUFBUCxFQUFXLENBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxXQUFTQyxxQkFBVCxDQUErQnJDLHVCQUEvQixFQUF1RjtBQUM3RnNDLElBQUFBLGVBQWUsQ0FBQ0MsTUFBaEIsQ0FDQyxVQUFDMU0sS0FBRCxFQUFpQkMsUUFBakI7QUFBQSxhQUF5Q0gsb0JBQW9CLENBQUNxSyx1QkFBRCxFQUEwQm5LLEtBQTFCLEVBQWlDQyxRQUFqQyxDQUE3RDtBQUFBLEtBREQsRUFFQ2tLLHVCQUF1QixDQUFDOUosU0FGekIsRUFHQzhKLHVCQUF1QixDQUFDd0MsTUFBeEIsSUFBa0N4Qyx1QkFBdUIsQ0FBQzdKLElBSDNEOztBQUtBLFFBQUk2Six1QkFBdUIsQ0FBQ3lDLGVBQTVCLEVBQTZDO0FBQzVDSCxNQUFBQSxlQUFlLENBQUNDLE1BQWhCLENBQ0MsVUFBQzFNLEtBQUQsRUFBaUJDLFFBQWpCO0FBQUEsZUFBeUNILG9CQUFvQixDQUFDcUssdUJBQUQsRUFBMEJuSyxLQUExQixFQUFpQ0MsUUFBakMsRUFBMkMsSUFBM0MsQ0FBN0Q7QUFBQSxPQURELEVBRUNrSyx1QkFBdUIsQ0FBQ3lDLGVBRnpCLEVBR0N6Qyx1QkFBdUIsQ0FBQ3dDLE1BQXhCLElBQWtDeEMsdUJBQXVCLENBQUM3SixJQUgzRDtBQUtBO0FBQ0Q7Ozs7QUFFRCxXQUFTc0YsY0FBVCxDQUF3QmlILGFBQXhCLEVBQWlEQyxXQUFqRCxFQUFzRUMsY0FBdEUsRUFBdUc7QUFDdEcsUUFBTUMsV0FBVyxHQUFHSCxhQUFhLENBQUNJLEdBQWQsQ0FBa0IsVUFBQ0MsWUFBRDtBQUFBLGFBQWtCQyxHQUFsQiw4RkFBdUNDLFNBQVMsQ0FBQ0YsWUFBRCxDQUFoRDtBQUFBLEtBQWxCLENBQXBCO0FBQ0EsUUFBSUcsY0FBYyxHQUFHLEVBQXJCOztBQUNBLFFBQUlOLGNBQUosRUFBb0I7QUFDbkJNLE1BQUFBLGNBQWMsR0FBR0YsR0FBSCwrT0FFNEJDLFNBQVMsQ0FBQ0UsSUFBSSxDQUFDQyxTQUFMLENBQWVSLGNBQWYsRUFBK0IsSUFBL0IsRUFBcUMsQ0FBckMsQ0FBRCxDQUZyQyxDQUFkO0FBSUE7O0FBQ0QsV0FBT0ksR0FBUCxnYUFDS0gsV0FETCxFQUswQ0ksU0FBUyxDQUFDTixXQUFELENBTG5ELEVBT01PLGNBUE47QUFVQTs7QUFFRCxNQUFNeEIsT0FBNEIsR0FBRyxFQUFyQzs7QUFDQSxXQUFTMkIsVUFBVCxDQUFvQkMsTUFBcEIsRUFBaUM7QUFDaEMsUUFBTUMsV0FBVyxrQkFBV0MsR0FBRyxFQUFkLENBQWpCO0FBQ0E5QixJQUFBQSxPQUFPLENBQUM2QixXQUFELENBQVAsR0FBdUJELE1BQXZCO0FBQ0EsV0FBT0MsV0FBUDtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVMzSSxjQUFULENBQXdCNkksU0FBeEIsRUFBa0Y7QUFBQSxRQUF2Q0Msb0JBQXVDLHVFQUFoQixLQUFnQjs7QUFDakYsUUFBSUEsb0JBQUosRUFBMEI7QUFDekJELE1BQUFBLFNBQVMsZ1NBSWlGQSxTQUpqRixnQkFBVDtBQUtBOztBQUNELFFBQU1FLFdBQVcsR0FBRzdELGlCQUFpQixDQUFDOEQsZUFBbEIsQ0FBa0NILFNBQWxDLEVBQTZDLFVBQTdDLENBQXBCO0FBQ0EsUUFBSUksTUFBTSxHQUFHRixXQUFXLENBQUNoSixpQkFBekI7O0FBQ0EsV0FBTyxZQUFBa0osTUFBTSxVQUFOLDBDQUFRdkksU0FBUixNQUFzQixVQUE3QixFQUF5QztBQUFBOztBQUN4Q3VJLE1BQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDbEosaUJBQWhCO0FBQ0E7O0FBQ0QsV0FBT2tKLE1BQVA7QUFDQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBU1osU0FBVCxDQUFtQmEsR0FBbkIsRUFBd0M7QUFDdkMsV0FBT0EsR0FBRyxDQUNSQyxPQURLLENBQ0csSUFESCxFQUNTLE9BRFQsRUFFTEEsT0FGSyxDQUVHLElBRkgsRUFFUyxNQUZULEVBR0xBLE9BSEssQ0FHRyxLQUhILEVBR1UsT0FIVixFQUlMQSxPQUpLLENBSUcsS0FKSCxFQUlVLEtBSlYsRUFLTEEsT0FMSyxDQUtHLElBTEgsRUFLUyxNQUxULEVBTUxBLE9BTkssQ0FNRyxJQU5ILEVBTVMsUUFOVCxFQU9MQSxPQVBLLENBT0csSUFQSCxFQU9TLFFBUFQsQ0FBUDtBQVFBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTQyx1QkFBVCxDQUFpQ0MsR0FBakMsRUFBc0Q7QUFDckQsV0FBT0EsR0FBRyxDQUFDRixPQUFKLENBQVksSUFBWixFQUFrQixPQUFsQixFQUEyQkEsT0FBM0IsQ0FBbUMsSUFBbkMsRUFBeUMsTUFBekMsQ0FBUDtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLE1BQU1mLEdBQUcsR0FBRyxVQUFDa0IsT0FBRCxFQUFxRDtBQUN2RSxRQUFJQyxNQUFNLEdBQUcsRUFBYjtBQUNBLFFBQUk3TyxDQUFKOztBQUZ1RSxzQ0FBbEJnTyxNQUFrQjtBQUFsQkEsTUFBQUEsTUFBa0I7QUFBQTs7QUFHdkUsU0FBS2hPLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR2dPLE1BQU0sQ0FBQzdOLE1BQXZCLEVBQStCSCxDQUFDLEVBQWhDLEVBQW9DO0FBQUE7O0FBQ25DNk8sTUFBQUEsTUFBTSxJQUFJRCxPQUFPLENBQUM1TyxDQUFELENBQWpCLENBRG1DLENBRW5DOztBQUNBLFVBQUk2RSxLQUFLLENBQUNpSyxPQUFOLENBQWNkLE1BQU0sQ0FBQ2hPLENBQUQsQ0FBcEIsQ0FBSixFQUE4QjtBQUM3QjZPLFFBQUFBLE1BQU0sSUFBSWIsTUFBTSxDQUFDaE8sQ0FBRCxDQUFOLENBQVUrTyxJQUFWLENBQWUsQ0FBZixFQUFrQkMsSUFBbEIsQ0FBdUIsRUFBdkIsRUFBMkJqSixJQUEzQixFQUFWO0FBQ0EsT0FGRCxNQUVPLGlCQUFJaUksTUFBTSxDQUFDaE8sQ0FBRCxDQUFWLHNDQUFJLFVBQVdpUCxLQUFmLEVBQXNCO0FBQzVCLFlBQU1DLGtCQUFrQixHQUFHQyxjQUFjLENBQUNuQixNQUFNLENBQUNoTyxDQUFELENBQVAsQ0FBekM7QUFDQTZPLFFBQUFBLE1BQU0sSUFBSUssa0JBQWtCLEtBQUsxSyxTQUF2QixHQUFtQ2tLLHVCQUF1QixDQUFDUSxrQkFBRCxDQUExRCxHQUFpRjFLLFNBQTNGO0FBQ0EsT0FITSxNQUdBLGtCQUFJd0osTUFBTSxDQUFDaE8sQ0FBRCxDQUFWLHVDQUFJLFdBQVdpRixXQUFmLEVBQTRCO0FBQ2xDNEosUUFBQUEsTUFBTSxJQUFJYixNQUFNLENBQUNoTyxDQUFELENBQU4sQ0FBVWlGLFdBQVYsRUFBVjtBQUNBLE9BRk0sTUFFQSxJQUFJLE9BQU8rSSxNQUFNLENBQUNoTyxDQUFELENBQWIsS0FBcUIsUUFBekIsRUFBbUM7QUFDekMsWUFBTW9QLFdBQVcsR0FBR3JCLFVBQVUsQ0FBQ0MsTUFBTSxDQUFDaE8sQ0FBRCxDQUFQLENBQTlCO0FBQ0E2TyxRQUFBQSxNQUFNLGNBQU9PLFdBQVAsQ0FBTjtBQUNBLE9BSE0sTUFHQTtBQUNOUCxRQUFBQSxNQUFNLElBQUliLE1BQU0sQ0FBQ2hPLENBQUQsQ0FBaEI7QUFDQTtBQUNEOztBQUNENk8sSUFBQUEsTUFBTSxJQUFJRCxPQUFPLENBQUM1TyxDQUFELENBQWpCO0FBQ0E2TyxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQzlJLElBQVAsRUFBVDs7QUFDQSxRQUFJRSxXQUFKLEVBQWlCO0FBQ2hCLFVBQU1vSixTQUFTLEdBQUcvSixjQUFjLENBQUN1SixNQUFELEVBQVMsSUFBVCxDQUFoQzs7QUFDQSxVQUFJUSxTQUFTLElBQUksQ0FBQUEsU0FBUyxTQUFULElBQUFBLFNBQVMsV0FBVCxZQUFBQSxTQUFTLENBQUVySixTQUFYLE1BQXlCLGFBQTFDLEVBQXlEO0FBQ3hELFlBQU15SCxZQUFZLEdBQUk0QixTQUFELENBQW1CQyxTQUFuQixJQUFpQ0QsU0FBRCxDQUFtQkUsU0FBeEU7QUFDQSxlQUFPcEosY0FBYyxDQUFDLENBQUNzSCxZQUFZLENBQUMrQixLQUFiLENBQW1CLElBQW5CLEVBQXlCLENBQXpCLENBQUQsQ0FBRCxFQUFnQ1gsTUFBaEMsQ0FBckI7QUFDQTtBQUNEOztBQUNELFdBQU9BLE1BQVA7QUFDQSxHQTlCTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IEF0dHJpYnV0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9BdHRyaWJ1dGVNb2RlbFwiO1xuaW1wb3J0IHtcblx0QnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbixcblx0QnVpbGRpbmdCbG9ja0Jhc2UsXG5cdEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLFxuXHRCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYxLFxuXHRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uLFxuXHRCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgeyBjb21waWxlQmluZGluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgVHJhY2VJbmZvIGZyb20gXCIuL1RyYWNlSW5mb1wiO1xuXG5jb25zdCBMT0dHRVJfU0NPUEUgPSBcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLkJ1aWxkaW5nQmxvY2tSdW50aW1lXCI7XG5jb25zdCBET01QYXJzZXJJbnN0YW5jZSA9IG5ldyBET01QYXJzZXIoKTtcbmxldCBpc1RyYWNlTW9kZSA9IGZhbHNlO1xuXG50eXBlIFJlc29sdmVkQnVpbGRpbmdCbG9ja01ldGFkYXRhID0ge1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uPjtcblx0YWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uPjtcblx0bWV0YWRhdGFDb250ZXh0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24+O1xuXHRpc09wZW46IGJvb2xlYW47XG59O1xuXG50eXBlIElDYWxsYmFjayA9IHtcblx0Z2V0U2V0dGluZ3MoKTogYW55O1xuXHQvKipcblx0ICogVmlzaXRzIHRoZSBnaXZlbiBub2RlIGFuZCBlaXRoZXIgcHJvY2Vzc2VzIGEgdGVtcGxhdGUgaW5zdHJ1Y3Rpb24sIGNhbGxzXG5cdCAqIGEgdmlzaXRvciwgb3Igc2ltcGx5IGNhbGxzIGJvdGgge0BsaW5rXG5cdCAqIHNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yLklDYWxsYmFjay52aXNpdEF0dHJpYnV0ZXMgdmlzaXRBdHRyaWJ1dGVzfVxuXHQgKiBhbmQge0BsaW5rIHNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yLklDYWxsYmFjay52aXNpdENoaWxkTm9kZXNcblx0ICogdmlzaXRDaGlsZE5vZGVzfS5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBvTm9kZVxuXHQgKiAgIFRoZSBYTUwgRE9NIG5vZGVcblx0ICogQHJldHVybnMge3NhcC51aS5iYXNlLlN5bmNQcm9taXNlfVxuXHQgKiAgIEEgdGhlbmFibGUgd2hpY2ggcmVzb2x2ZXMgd2l0aCA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IGFzIHNvb24gYXMgdmlzaXRpbmdcblx0ICogICBpcyBkb25lLCBvciBpcyByZWplY3RlZCB3aXRoIGEgY29ycmVzcG9uZGluZyBlcnJvciBpZiB2aXNpdGluZyBmYWlsc1xuXHQgKiovXG5cdHZpc2l0Tm9kZShvTm9kZTogTm9kZSk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIEluc2VydHMgdGhlIGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gcGxhY2Ugb2YgdGhlIGdpdmVuIGVsZW1lbnQuIExvYWRzIHRoZVxuXHQgKiBmcmFnbWVudCwgdGFrZXMgY2FyZSBvZiBjYWNoaW5nIChmb3IgdGhlIGN1cnJlbnQgcHJlLXByb2Nlc3NvciBydW4pIGFuZCB2aXNpdHMgdGhlXG5cdCAqIGZyYWdtZW50J3MgY29udGVudCBvbmNlIGl0IGhhcyBiZWVuIGltcG9ydGVkIGludG8gdGhlIGVsZW1lbnQncyBvd25lciBkb2N1bWVudCBhbmRcblx0ICogcHV0IGludG8gcGxhY2UuIExvYWRpbmcgb2YgZnJhZ21lbnRzIGlzIGFzeW5jaHJvbm91cyBpZiB0aGUgdGVtcGxhdGUgdmlldyBpc1xuXHQgKiBhc3luY2hyb25vdXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRnJhZ21lbnROYW1lXG5cdCAqICAgdGhlIGZyYWdtZW50J3MgcmVzb2x2ZWQgbmFtZVxuXHQgKiBAcGFyYW0ge0VsZW1lbnR9IG9FbGVtZW50XG5cdCAqICAgdGhlIFhNTCBET00gZWxlbWVudCwgZS5nLiA8c2FwLnVpLmNvcmU6RnJhZ21lbnQ+IG9yIDxjb3JlOkV4dGVuc2lvblBvaW50PlxuXHQgKiBAcGFyYW0ge3NhcC51aS5jb3JlLnV0aWwuX3dpdGh9IG9XaXRoQ29udHJvbFxuXHQgKiAgIHRoZSBwYXJlbnQncyBcIndpdGhcIiBjb250cm9sXG5cdCAqIEByZXR1cm5zIHtzYXAudWkuYmFzZS5TeW5jUHJvbWlzZX1cblx0ICogQSBzeW5jIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IGFzIHNvb24gYXMgdGhlIGZyYWdtZW50XG5cdCAqICAgaGFzIGJlZW4gaW5zZXJ0ZWQsIG9yIGlzIHJlamVjdGVkIHdpdGggYSBjb3JyZXNwb25kaW5nIGVycm9yIGlmIGxvYWRpbmcgb3IgdmlzaXRpbmdcblx0ICogICBmYWlscy5cblx0ICovXG5cdGluc2VydEZyYWdtZW50KHNGcmFnbWVudDogc3RyaW5nLCBvRWxlbWVudDogRWxlbWVudCwgb1dpdGg/OiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xuXHR2aXNpdEF0dHJpYnV0ZShvTm9kZTogRWxlbWVudCwgb0F0dHJpYnV0ZTogQXR0cik6IFByb21pc2U8dm9pZD47XG5cdHZpc2l0Q2hpbGROb2RlcyhvTm9kZTogTm9kZSk6IFByb21pc2U8dm9pZD47XG5cdC8qKlxuXHQgKiBJbnRlcnByZXRzIHRoZSBnaXZlbiBYTUwgRE9NIGF0dHJpYnV0ZSB2YWx1ZSBhcyBhIGJpbmRpbmcgYW5kIHJldHVybnMgdGhlXG5cdCAqIHJlc3VsdGluZyB2YWx1ZS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNWYWx1ZVxuXHQgKiAgIEFuIFhNTCBET00gYXR0cmlidXRlIHZhbHVlXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gW29FbGVtZW50XVxuXHQgKiAgIFRoZSBYTUwgRE9NIGVsZW1lbnQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBiZWxvbmdzIHRvIChuZWVkZWQgb25seSBmb3Jcblx0ICogICB3YXJuaW5ncyB3aGljaCBhcmUgbG9nZ2VkIHRvIHRoZSBjb25zb2xlKVxuXHQgKiBAcmV0dXJucyB7c2FwLnVpLmJhc2UuU3luY1Byb21pc2V8bnVsbH1cblx0ICogICBBIHRoZW5hYmxlIHdoaWNoIHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdGluZyB2YWx1ZSwgb3IgaXMgcmVqZWN0ZWQgd2l0aCBhXG5cdCAqICAgY29ycmVzcG9uZGluZyBlcnJvciAoZm9yIGV4YW1wbGUsIGFuIGVycm9yIHRocm93biBieSBhIGZvcm1hdHRlcikgb3Jcblx0ICogICA8Y29kZT5udWxsPC9jb2RlPiBpbiBjYXNlIHRoZSBiaW5kaW5nIGlzIG5vdCByZWFkeSAoYmVjYXVzZSBpdCByZWZlcnMgdG8gYVxuXHQgKiAgIG1vZGVsIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUpIChzaW5jZSAxLjU3LjApXG5cdCAqL1xuXHRnZXRSZXN1bHQoc1ZhbHVlOiBzdHJpbmcsIGVsZW1lbnQ/OiBFbGVtZW50KTogUHJvbWlzZTxhbnk+IHwgbnVsbDtcblx0Z2V0Q29udGV4dChzUGF0aDogc3RyaW5nKTogQ29udGV4dDtcblx0LyoqXG5cdCAqIFJldHVybnMgYSBjYWxsYmFjayBpbnRlcmZhY2UgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBtYXAgb2YgdmFyaWFibGVzIHdoaWNoXG5cdCAqIG92ZXJyaWRlIGN1cnJlbnRseSBrbm93biB2YXJpYWJsZXMgb2YgdGhlIHNhbWUgbmFtZSBpbiA8Y29kZT50aGlzPC9jb2RlPlxuXHQgKiBwYXJlbnQgaW50ZXJmYWNlIG9yIHJlcGxhY2UgdGhlbSBhbHRvZ2V0aGVyLiBFYWNoIHZhcmlhYmxlIG5hbWUgYmVjb21lcyBhXG5cdCAqIG5hbWVkIG1vZGVsIHdpdGggYSBjb3JyZXNwb25kaW5nIG9iamVjdCBiaW5kaW5nIGFuZCBjYW4gYmUgdXNlZCBpbnNpZGUgdGhlXG5cdCAqIFhNTCB0ZW1wbGF0ZSBpbiB0aGUgdXN1YWwgd2F5LCB0aGF0IGlzLCB3aXRoIGEgYmluZGluZyBleHByZXNzaW9uIGxpa2Vcblx0ICogPGNvZGU+XCJ7dmFyPnNvbWUvcmVsYXRpdmUvcGF0aH1cIjwvY29kZT4gKHNlZSBleGFtcGxlKS5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IFttVmFyaWFibGVzPXt9XVxuXHQgKiAgIE1hcCBmcm9tIHZhcmlhYmxlIG5hbWUgKHN0cmluZykgdG8gdmFsdWUgKHtAbGluayBzYXAudWkubW9kZWwuQ29udGV4dH0pXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JSZXBsYWNlXVxuXHQgKiAgIFdoZXRoZXIgb25seSB0aGUgZ2l2ZW4gdmFyaWFibGVzIGFyZSBrbm93biBpbiB0aGUgbmV3IGNhbGxiYWNrIGludGVyZmFjZVxuXHQgKiAgIGluc3RhbmNlLCBubyBpbmhlcml0ZWQgb25lc1xuXHQgKiBAcmV0dXJucyB7c2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3IuSUNhbGxiYWNrfVxuXHQgKiAgIEEgY2FsbGJhY2sgaW50ZXJmYWNlIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBtVmFyaWFibGVzXG5cdCAqIEBwYXJhbSBiUmVwbGFjZVxuXHQgKi9cblx0XCJ3aXRoXCIobVZhcmlhYmxlcz86IGFueSwgYlJlcGxhY2U/OiBib29sZWFuKTogSUNhbGxiYWNrO1xufTtcblxuLyoqXG4gKiBUeXBlZ3VhcmQgZm9yIGNoZWNraW5nIGlmIGEgYnVpbGRpbmcgYmxvY2sgdXNlIEFQSSAxLlxuICpcbiAqIEBwYXJhbSBidWlsZGluZ0Jsb2NrRGVmaW5pdGlvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2luZyBBUEkgMS5cbiAqL1xuZnVuY3Rpb24gaXNWMU1hY3JvRGVmKGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uOiBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbik6IGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uIGlzIEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uVjEge1xuXHRyZXR1cm4gYnVpbGRpbmdCbG9ja0RlZmluaXRpb24uYXBpVmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmFwaVZlcnNpb24gPT09IDE7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0KFxuXHRzTmFtZTogc3RyaW5nLFxuXHRtQ29udGV4dHM6IGFueSxcblx0b0NvbnRleHRTZXR0aW5nczogQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24sXG5cdHNLZXk6IHN0cmluZ1xuKSB7XG5cdGNvbnN0IG9Db250ZXh0ID0gbUNvbnRleHRzW3NLZXldO1xuXHRjb25zdCBvQ29udGV4dE9iamVjdCA9IG9Db250ZXh0Py5nZXRPYmplY3QoKTtcblxuXHRpZiAob0NvbnRleHRTZXR0aW5ncy5yZXF1aXJlZCAmJiAoIW9Db250ZXh0IHx8IG9Db250ZXh0T2JqZWN0ID09PSBudWxsKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgJHtzTmFtZX06IFJlcXVpcmVkIG1ldGFkYXRhQ29udGV4dCAnJHtzS2V5fScgaXMgbWlzc2luZ2ApO1xuXHR9IGVsc2UgaWYgKG9Db250ZXh0T2JqZWN0KSB7XG5cdFx0Ly8gSWYgY29udGV4dCBvYmplY3QgaGFzICRraW5kIHByb3BlcnR5LCAkVHlwZSBzaG91bGQgbm90IGJlIGNoZWNrZWRcblx0XHQvLyBUaGVyZWZvcmUgcmVtb3ZlIGZyb20gY29udGV4dCBzZXR0aW5nc1xuXHRcdGlmIChvQ29udGV4dE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcIiRraW5kXCIpICYmIG9Db250ZXh0U2V0dGluZ3MuJGtpbmQpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSAka2luZCBpcyBwYXJ0IG9mIHRoZSBhbGxvd2VkIG9uZXNcblx0XHRcdGlmIChvQ29udGV4dFNldHRpbmdzLiRraW5kLmluZGV4T2Yob0NvbnRleHRPYmplY3RbXCIka2luZFwiXSkgPT09IC0xKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgJHtzTmFtZX06ICcke3NLZXl9JyBtdXN0IGJlICcka2luZCcgJyR7b0NvbnRleHRTZXR0aW5nc1tcIiRraW5kXCJdfScgYnV0IGlzICcke1xuXHRcdFx0XHRcdFx0b0NvbnRleHRPYmplY3QuJGtpbmRcblx0XHRcdFx0XHR9JzogJHtvQ29udGV4dC5nZXRQYXRoKCl9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAob0NvbnRleHRPYmplY3QuaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSAmJiBvQ29udGV4dFNldHRpbmdzLiRUeXBlKSB7XG5cdFx0XHQvLyBDaGVjayBvbmx5ICRUeXBlXG5cdFx0XHRpZiAob0NvbnRleHRTZXR0aW5ncy4kVHlwZS5pbmRleE9mKG9Db250ZXh0T2JqZWN0W1wiJFR5cGVcIl0pID09PSAtMSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YCR7c05hbWV9OiAnJHtzS2V5fScgbXVzdCBiZSAnJFR5cGUnICcke29Db250ZXh0U2V0dGluZ3NbXCIkVHlwZVwiXX0nIGJ1dCBpcyAnJHtcblx0XHRcdFx0XHRcdG9Db250ZXh0T2JqZWN0LiRUeXBlXG5cdFx0XHRcdFx0fSc6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU1hY3JvU2lnbmF0dXJlKHNOYW1lOiBhbnksIG9NZXRhZGF0YTogYW55LCBtQ29udGV4dHM6IGFueSwgb05vZGU6IGFueSkge1xuXHRjb25zdCBhTWV0YWRhdGFDb250ZXh0S2V5cyA9IChvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cyAmJiBPYmplY3Qua2V5cyhvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cykpIHx8IFtdLFxuXHRcdGFQcm9wZXJ0aWVzID0gKG9NZXRhZGF0YS5wcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9NZXRhZGF0YS5wcm9wZXJ0aWVzKSkgfHwgW10sXG5cdFx0b0F0dHJpYnV0ZU5hbWVzOiBhbnkgPSB7fTtcblxuXHQvLyBjb2xsZWN0IGFsbCBhdHRyaWJ1dGVzIHRvIGZpbmQgdW5jaGVja2VkIHByb3BlcnRpZXNcblx0T2JqZWN0LmtleXMob05vZGUuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoaUtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgc0tleSA9IG9Ob2RlLmF0dHJpYnV0ZXNbaUtleV0ubmFtZTtcblx0XHRvQXR0cmlidXRlTmFtZXNbc0tleV0gPSB0cnVlO1xuXHR9KTtcblxuXHQvL0NoZWNrIG1ldGFkYXRhQ29udGV4dHNcblx0YU1ldGFkYXRhQ29udGV4dEtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0Y29uc3Qgb0NvbnRleHRTZXR0aW5ncyA9IG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzW3NLZXldO1xuXG5cdFx0dmFsaWRhdGVNYWNyb01ldGFkYXRhQ29udGV4dChzTmFtZSwgbUNvbnRleHRzLCBvQ29udGV4dFNldHRpbmdzLCBzS2V5KTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZU5hbWVzW3NLZXldO1xuXHR9KTtcblx0Ly9DaGVjayBwcm9wZXJ0aWVzXG5cdGFQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eVNldHRpbmdzID0gb01ldGFkYXRhLnByb3BlcnRpZXNbc0tleV07XG5cdFx0aWYgKCFvTm9kZS5oYXNBdHRyaWJ1dGUoc0tleSkpIHtcblx0XHRcdGlmIChvUHJvcGVydHlTZXR0aW5ncy5yZXF1aXJlZCAmJiAhb1Byb3BlcnR5U2V0dGluZ3MuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKHNOYW1lICsgXCI6IFwiICsgXCJSZXF1aXJlZCBwcm9wZXJ0eSAnXCIgKyBzS2V5ICsgXCInIGlzIG1pc3NpbmdcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlTmFtZXNbc0tleV07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBVbmNoZWNrZWQgcHJvcGVydGllc1xuXHRPYmplY3Qua2V5cyhvQXR0cmlidXRlTmFtZXMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdC8vIG5vIGNoZWNrIGZvciBwcm9wZXJ0aWVzIHdoaWNoIHN0YXJ0IHdpdGggdW5kZXJzY29yZSBcIl9cIiBvciBjb250YWluIGEgY29sb24gXCI6XCIgKGRpZmZlcmVudCBuYW1lc3BhY2UpLCBlLmcuIHhtbG5zOnRyYWNlLCB0cmFjZTptYWNyb0lELCB1bml0dGVzdDppZFxuXHRcdGlmIChzS2V5LmluZGV4T2YoXCI6XCIpIDwgMCAmJiAhc0tleS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdExvZy53YXJuaW5nKGBVbmNoZWNrZWQgcGFyYW1ldGVyOiAke3NOYW1lfTogJHtzS2V5fWAsIHVuZGVmaW5lZCwgTE9HR0VSX1NDT1BFKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB0aGUgbWV0YWRhdGEgZm9yIHRoZSBidWlsZGluZyBibG9jayBhcmUgcHJvcGVybHkgZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0gYnVpbGRpbmdCbG9ja01ldGFkYXRhIFRoZSBtZXRhZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBpbnB1dFxuICogQHBhcmFtIGlzT3BlbiBXaGV0aGVyIHRoZSBidWlsZGluZyBibG9jayBpcyBvcGVuIG9yIG5vdFxuICogQHJldHVybnMgQSBzZXQgb2YgY29tcGxldGVkIG1ldGFkYXRhIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmdcbiAqL1xuZnVuY3Rpb24gcHJlcGFyZU1ldGFkYXRhKGJ1aWxkaW5nQmxvY2tNZXRhZGF0YT86IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSwgaXNPcGVuID0gZmFsc2UpOiBSZXNvbHZlZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdGlmIChidWlsZGluZ0Jsb2NrTWV0YWRhdGEpIHtcblx0XHRjb25zdCBvUHJvcGVydGllczogYW55ID0ge307XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0aW9uczogYW55ID0ge1xuXHRcdFx0XCJkZXBlbmRlbnRzXCI6IHtcblx0XHRcdFx0dHlwZTogXCJzYXAudWkuY29yZS5FbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHRcImN1c3RvbURhdGFcIjoge1xuXHRcdFx0XHR0eXBlOiBcInNhcC51aS5jb3JlLkVsZW1lbnRcIlxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3Qgb01ldGFkYXRhQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24+ID0ge307XG5cblx0XHRPYmplY3Qua2V5cyhidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllcykuZm9yRWFjaChmdW5jdGlvbiAoc1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0XHRpZiAoYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXNbc1Byb3BlcnR5TmFtZV0udHlwZSAhPT0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiKSB7XG5cdFx0XHRcdG9Qcm9wZXJ0aWVzW3NQcm9wZXJ0eU5hbWVdID0gYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXNbc1Byb3BlcnR5TmFtZV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvTWV0YWRhdGFDb250ZXh0c1tzUHJvcGVydHlOYW1lXSA9IGJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5wcm9wZXJ0aWVzW3NQcm9wZXJ0eU5hbWVdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIE1lcmdlIGV2ZW50cyBpbnRvIHByb3BlcnRpZXMgYXMgdGhleSBhcmUgaGFuZGxlZCBpZGVudGljYWxseVxuXHRcdGlmIChidWlsZGluZ0Jsb2NrTWV0YWRhdGEuZXZlbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhidWlsZGluZ0Jsb2NrTWV0YWRhdGEuZXZlbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzRXZlbnROYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0b1Byb3BlcnRpZXNbc0V2ZW50TmFtZV0gPSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEuZXZlbnRzW3NFdmVudE5hbWVdO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChidWlsZGluZ0Jsb2NrTWV0YWRhdGEuYWdncmVnYXRpb25zKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhidWlsZGluZ0Jsb2NrTWV0YWRhdGEuYWdncmVnYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tzUHJvcGVydHlOYW1lXSA9IGJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5hZ2dyZWdhdGlvbnNbc1Byb3BlcnR5TmFtZV07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByb3BlcnRpZXM6IG9Qcm9wZXJ0aWVzLFxuXHRcdFx0YWdncmVnYXRpb25zOiBvQWdncmVnYXRpb25zLFxuXHRcdFx0bWV0YWRhdGFDb250ZXh0czogb01ldGFkYXRhQ29udGV4dHMsXG5cdFx0XHRpc09wZW46IGlzT3BlblxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1ldGFkYXRhQ29udGV4dHM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7XG5cdFx0XHRcdFwiZGVwZW5kZW50c1wiOiB7XG5cdFx0XHRcdFx0dHlwZTogXCJzYXAudWkuY29yZS5FbGVtZW50XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjdXN0b21EYXRhXCI6IHtcblx0XHRcdFx0XHR0eXBlOiBcInNhcC51aS5jb3JlLkVsZW1lbnRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRpc09wZW46IGlzT3BlblxuXHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gX2dldE1ldGFkYXRhQ29udGV4dChcblx0b1NldHRpbmdzOiBhbnksXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRzQXR0cmlidXRlTmFtZTogc3RyaW5nLFxuXHRvVmlzaXRvcjogSUNhbGxiYWNrLFxuXHRiRG9Ob3RSZXNvbHZlOiBib29sZWFuLFxuXHRpc09wZW46IGJvb2xlYW5cbikge1xuXHRsZXQgb01ldGFkYXRhQ29udGV4dDtcblx0aWYgKCFiRG9Ob3RSZXNvbHZlICYmIG9Ob2RlLmhhc0F0dHJpYnV0ZShzQXR0cmlidXRlTmFtZSkpIHtcblx0XHRjb25zdCBzQXR0cmlidXRlVmFsdWUgPSBvTm9kZS5nZXRBdHRyaWJ1dGUoc0F0dHJpYnV0ZU5hbWUpIGFzIHN0cmluZztcblx0XHRsZXQgc01ldGFQYXRoO1xuXHRcdC8vIG9WaXNpdG9yLmdldFJlc3VsdChzQXR0cmlidXRlVmFsdWUsIG9Ob2RlKTtcblx0XHRvTWV0YWRhdGFDb250ZXh0ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdFx0aWYgKCFvTWV0YWRhdGFDb250ZXh0KSB7XG5cdFx0XHRpZiAoc0F0dHJpYnV0ZVZhbHVlLnN0YXJ0c1dpdGgoXCJ1aWQtLVwiKSkge1xuXHRcdFx0XHRjb25zdCBvRGF0YSA9IG15U3RvcmVbc0F0dHJpYnV0ZVZhbHVlXTtcblx0XHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gXCIvXCIgKyBzQXR0cmlidXRlVmFsdWU7XG5cdFx0XHRcdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dC5zZXRQcm9wZXJ0eShzQ29udGV4dFBhdGgsIG9EYXRhKTtcblx0XHRcdFx0b01ldGFkYXRhQ29udGV4dCA9IHtcblx0XHRcdFx0XHRtb2RlbDogXCJjb252ZXJ0ZXJDb250ZXh0XCIsXG5cdFx0XHRcdFx0cGF0aDogc0NvbnRleHRQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2UgaWYgKChzQXR0cmlidXRlTmFtZSA9PT0gXCJtZXRhUGF0aFwiICYmIG9TZXR0aW5ncy5jdXJyZW50Q29udGV4dFBhdGgpIHx8IHNBdHRyaWJ1dGVOYW1lID09PSBcImNvbnRleHRQYXRoXCIpIHtcblx0XHRcdFx0aWYgKHNBdHRyaWJ1dGVWYWx1ZSAmJiBzQXR0cmlidXRlVmFsdWUuc3RhcnRzV2l0aChcIi9cIikpIHtcblx0XHRcdFx0XHQvLyBhYnNvbHV0ZSBwYXRoIC0gd2UganVzdCB1c2UgdGhpcyBvbmVcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBzQXR0cmlidXRlVmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5jdXJyZW50Q29udGV4dFBhdGguZ2V0UGF0aCgpO1xuXHRcdFx0XHRcdGlmICghc0NvbnRleHRQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0XHRcdFx0c0NvbnRleHRQYXRoICs9IFwiL1wiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzTWV0YVBhdGggPSBzQ29udGV4dFBhdGggKyBzQXR0cmlidXRlVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0b01ldGFkYXRhQ29udGV4dCA9IHtcblx0XHRcdFx0XHRtb2RlbDogXCJtZXRhTW9kZWxcIixcblx0XHRcdFx0XHRwYXRoOiBzTWV0YVBhdGhcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRcdFx0bW9kZWw6IFwibWV0YU1vZGVsXCIsXG5cdFx0XHRcdFx0cGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5lbnRpdHlTZXRcblx0XHRcdFx0XHRcdD8gb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5lbnRpdHlTZXQuZ2V0UGF0aChzQXR0cmlidXRlVmFsdWUpXG5cdFx0XHRcdFx0XHQ6IHNBdHRyaWJ1dGVWYWx1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmhhc093blByb3BlcnR5KHNBdHRyaWJ1dGVOYW1lKSkge1xuXHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRtb2RlbDogc0F0dHJpYnV0ZU5hbWUsXG5cdFx0XHRwYXRoOiBcIlwiXG5cdFx0fTtcblx0fSBlbHNlIGlmIChpc09wZW4pIHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKG9WaXNpdG9yLmdldENvbnRleHQoYCR7c0F0dHJpYnV0ZU5hbWV9PmApKSB7XG5cdFx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRcdFx0bW9kZWw6IHNBdHRyaWJ1dGVOYW1lLFxuXHRcdFx0XHRcdHBhdGg6IFwiXCJcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRvTWV0YWRhdGFDb250ZXh0ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb01ldGFkYXRhQ29udGV4dDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXMoXG5cdG9NZXRhZGF0YTogUmVzb2x2ZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdG9TZXR0aW5nczogYW55LFxuXHRvTm9kZTogRWxlbWVudCxcblx0aXNQdWJsaWM6IGJvb2xlYW4sXG5cdG9WaXNpdG9yOiBJQ2FsbGJhY2ssXG5cdG1Db250ZXh0czogYW55LFxuXHRvTWV0YWRhdGFDb250ZXh0czogYW55XG4pIHtcblx0Y29uc3QgbU1pc3NpbmdDb250ZXh0OiBhbnkgPSB7fTtcblx0Y29uc3Qgb0RlZmluaXRpb25Qcm9wZXJ0aWVzID0gb01ldGFkYXRhLnByb3BlcnRpZXM7XG5cdGNvbnN0IG9EZWZpbml0aW9uQ29udGV4dHMgPSBvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cztcblx0b1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuY29udGV4dFBhdGg7XG5cblx0Ly8gUmV0cmlldmUgcHJvcGVydGllcyB2YWx1ZXNcblx0Y29uc3QgYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5cyA9IE9iamVjdC5rZXlzKG9EZWZpbml0aW9uUHJvcGVydGllcyk7XG5cdGxldCBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cyA9IE9iamVjdC5rZXlzKG9EZWZpbml0aW9uQ29udGV4dHMpO1xuXHRjb25zdCBwcm9wZXJ0eVZhbHVlczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRmb3IgKGxldCBqID0gMDsgaiA8IGFEZWZpbml0aW9uUHJvcGVydGllc0tleXMubGVuZ3RoOyBqKyspIHtcblx0XHRjb25zdCBzS2V5VmFsdWUgPSBhRGVmaW5pdGlvblByb3BlcnRpZXNLZXlzW2pdO1xuXHRcdGlmIChvRGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS50eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID0ge307IC8vIFRvIGF2b2lkIHZhbGVzIGJlaW5nIHJldXNlZCBhY2Nyb3NzIG1hY3Jvc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID0gb0RlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0XHRpZiAob05vZGUuaGFzQXR0cmlidXRlKHNLZXlWYWx1ZSkgJiYgaXNQdWJsaWMgJiYgIW9EZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmlzUHVibGljKSB7XG5cdFx0XHRMb2cuZXJyb3IoYFByb3BlcnR5ICR7c0tleVZhbHVlfSB3YXMgaWdub3JlZCBhcyBpdCBpcyBub3QgaW50ZW5kZWQgZm9yIHB1YmxpYyB1c2FnZWApO1xuXHRcdH0gZWxzZSBpZiAob05vZGUuaGFzQXR0cmlidXRlKHNLZXlWYWx1ZSkpIHtcblx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0QXR0cmlidXRlKG9Ob2RlLCBvTm9kZS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShzS2V5VmFsdWUpIGFzIEF0dHIpO1xuXHRcdFx0Y29uc3QgdlZhbHVlID0gb05vZGUuZ2V0QXR0cmlidXRlKHNLZXlWYWx1ZSk7XG5cdFx0XHRpZiAodlZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0tleVZhbHVlXSA9IHZWYWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gU29ydCBrZXlzIHRvIGJlIHN1cmUgY29udGV4dFBhdGggaXMgYmVmb3JlIG1ldGFQYXRoICggeWVzIEknbSBkZXNwZXJhdGUgKVxuXHRhRGVmaW5pdGlvbkNvbnRleHRzS2V5cyA9IGFEZWZpbml0aW9uQ29udGV4dHNLZXlzLnNvcnQoZnVuY3Rpb24gKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGEgPiBiID8gMSA6IC0xO1xuXHR9KTtcblx0Zm9yIChjb25zdCBzQXR0cmlidXRlTmFtZSBvZiBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cykge1xuXHRcdGNvbnN0IGJEb05vdFJlc29sdmUgPSBpc1B1YmxpYyAmJiAhb0RlZmluaXRpb25Db250ZXh0c1tzQXR0cmlidXRlTmFtZV0uaXNQdWJsaWMgJiYgb05vZGUuaGFzQXR0cmlidXRlKHNBdHRyaWJ1dGVOYW1lKTtcblx0XHRjb25zdCBvTWV0YWRhdGFDb250ZXh0ID0gX2dldE1ldGFkYXRhQ29udGV4dChvU2V0dGluZ3MsIG9Ob2RlLCBzQXR0cmlidXRlTmFtZSwgb1Zpc2l0b3IsIGJEb05vdFJlc29sdmUsIG9NZXRhZGF0YS5pc09wZW4pO1xuXHRcdGlmIChvTWV0YWRhdGFDb250ZXh0KSB7XG5cdFx0XHRvTWV0YWRhdGFDb250ZXh0Lm5hbWUgPSBzQXR0cmlidXRlTmFtZTtcblx0XHRcdGFkZFNpbmdsZUNvbnRleHQobUNvbnRleHRzLCBvVmlzaXRvciwgb01ldGFkYXRhQ29udGV4dCwgb01ldGFkYXRhQ29udGV4dHMpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoc0F0dHJpYnV0ZU5hbWUgPT09IFwiZW50aXR5U2V0XCIgJiYgIW9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuaGFzT3duUHJvcGVydHkoc0F0dHJpYnV0ZU5hbWUpKSB8fFxuXHRcdFx0XHQoc0F0dHJpYnV0ZU5hbWUgPT09IFwiY29udGV4dFBhdGhcIiAmJiAhb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5oYXNPd25Qcm9wZXJ0eShzQXR0cmlidXRlTmFtZSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0b1NldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzQXR0cmlidXRlTmFtZV0gPSBtQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNBdHRyaWJ1dGVOYW1lID09PSBcImNvbnRleHRQYXRoXCIpIHtcblx0XHRcdFx0b1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCA9IG1Db250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eVZhbHVlc1tzQXR0cmlidXRlTmFtZV0gPSBtQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtTWlzc2luZ0NvbnRleHRbc0F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHsgbU1pc3NpbmdDb250ZXh0LCBwcm9wZXJ0eVZhbHVlczogcHJvcGVydHlWYWx1ZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0NoaWxkcmVuKFxuXHRvTm9kZTogRWxlbWVudCxcblx0b1Zpc2l0b3I6IElDYWxsYmFjayxcblx0b01ldGFkYXRhOiBSZXNvbHZlZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0aXNQdWJsaWM6IGJvb2xlYW4sXG5cdHByb3BlcnR5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4pIHtcblx0Y29uc3Qgb0FnZ3JlZ2F0aW9uczogYW55ID0ge307XG5cdGlmIChvTm9kZS5maXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCkge1xuXHRcdC8vIElmIHRoZXJlIGFyZSBhZ2dyZWdhdGlvbiB3ZSBuZWVkIHRvIHZpc2l0IHRoZSBjaGlsZE5vZGVzIGZpcnN0IGFuZCBmb3JlbW9zdFxuXHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0Q2hpbGROb2RlcyhvTm9kZSk7XG5cdFx0bGV0IG9GaXJzdEVsZW1lbnRDaGlsZDogRWxlbWVudCB8IG51bGwgPSBvTm9kZS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHR3aGlsZSAob0ZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBzQ2hpbGROYW1lID0gb0ZpcnN0RWxlbWVudENoaWxkLmxvY2FsTmFtZTtcblx0XHRcdGlmIChcblx0XHRcdFx0T2JqZWN0LmtleXMob01ldGFkYXRhLmFnZ3JlZ2F0aW9ucykuaW5kZXhPZihzQ2hpbGROYW1lKSAhPT0gLTEgJiZcblx0XHRcdFx0KCFpc1B1YmxpYyB8fCBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NDaGlsZE5hbWVdLmlzUHVibGljKVxuXHRcdFx0KSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbnNbb0ZpcnN0RWxlbWVudENoaWxkLmxvY2FsTmFtZV0gPSBvRmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHR9IGVsc2UgaWYgKE9iamVjdC5rZXlzKG9NZXRhZGF0YS5wcm9wZXJ0aWVzKS5pbmRleE9mKHNDaGlsZE5hbWUpICE9PSAtMSkge1xuXHRcdFx0XHQvLyBPYmplY3QgVHlwZSBwcm9wZXJ0aWVzXG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NDaGlsZE5hbWVdID0ge307XG5cdFx0XHRcdGZvciAoY29uc3QgYXR0cmlidXRlSW5kZXggb2YgT2JqZWN0LmtleXMob0ZpcnN0RWxlbWVudENoaWxkLmF0dHJpYnV0ZXMpKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0NoaWxkTmFtZV1bb0ZpcnN0RWxlbWVudENoaWxkLmF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXggYXMgYW55XS5sb2NhbE5hbWVdID1cblx0XHRcdFx0XHRcdG9GaXJzdEVsZW1lbnRDaGlsZC5hdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4IGFzIGFueV0udmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9BZ2dyZWdhdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NCdWlsZGluZ0Jsb2NrKFxuXHRidWlsZGluZ0JMb2NrRGVmaW5pdGlvbjogQnVpbGRpbmdCbG9ja0RlZmluaXRpb24sXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRvVmlzaXRvcjogSUNhbGxiYWNrLFxuXHRpc1B1YmxpYyA9IGZhbHNlXG4pIHtcblx0Y29uc3Qgc0ZyYWdtZW50TmFtZSA9IGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmZyYWdtZW50IHx8IGAke2J1aWxkaW5nQkxvY2tEZWZpbml0aW9uLm5hbWVzcGFjZX0uJHtidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5uYW1lfWA7XG5cblx0Y29uc3Qgc05hbWUgPSBcInRoaXNcIjtcblxuXHRjb25zdCBtQ29udGV4dHM6IGFueSA9IHt9O1xuXHRjb25zdCBvTWV0YWRhdGFDb250ZXh0czogYW55ID0ge307XG5cdGNvbnN0IG9TZXR0aW5ncyA9IG9WaXNpdG9yLmdldFNldHRpbmdzKCk7XG5cdC8vIFRPRE8gMDAwMSBNb3ZlIHRoaXMgZWxzZXdoZXJlIHRoaXMgaXMgd2VpcmQgOilcblx0aWYgKG9TZXR0aW5ncy5tb2RlbHNbXCJzYXAuZmUuaTE4blwiXSkge1xuXHRcdG9TZXR0aW5ncy5tb2RlbHNbXCJzYXAuZmUuaTE4blwiXVxuXHRcdFx0LmdldFJlc291cmNlQnVuZGxlKClcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IGFueSkge1xuXHRcdFx0XHRSZXNvdXJjZU1vZGVsLnNldEFwcGxpY2F0aW9uSTE4bkJ1bmRsZShvUmVzb3VyY2VCdW5kbGUpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblx0Y29uc3Qgb01ldGFkYXRhID0gcHJlcGFyZU1ldGFkYXRhKGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLm1ldGFkYXRhLCBidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5pc09wZW4pO1xuXG5cdC8vSW5qZWN0IHN0b3JhZ2UgZm9yIG1hY3Jvc1xuXHRpZiAoIW9TZXR0aW5nc1tzRnJhZ21lbnROYW1lXSkge1xuXHRcdG9TZXR0aW5nc1tzRnJhZ21lbnROYW1lXSA9IHt9O1xuXHR9XG5cblx0Ly8gRmlyc3Qgb2YgYWxsIHdlIG5lZWQgdG8gdmlzaXQgdGhlIGF0dHJpYnV0ZXNcblx0Y29uc3QgeyBtTWlzc2luZ0NvbnRleHQsIHByb3BlcnR5VmFsdWVzIH0gPSBhd2FpdCBwcm9jZXNzUHJvcGVydGllcyhcblx0XHRvTWV0YWRhdGEsXG5cdFx0b1NldHRpbmdzLFxuXHRcdG9Ob2RlLFxuXHRcdGlzUHVibGljLFxuXHRcdG9WaXNpdG9yLFxuXHRcdG1Db250ZXh0cyxcblx0XHRvTWV0YWRhdGFDb250ZXh0c1xuXHQpO1xuXHRjb25zdCBpbml0aWFsS2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnR5VmFsdWVzKTtcblx0dHJ5IHtcblx0XHQvLyBBZ2dyZWdhdGlvbiBhbmQgY29tcGxleCB0eXBlIHN1cHBvcnRcblx0XHRjb25zdCBvQWdncmVnYXRpb25zID0gYXdhaXQgcHJvY2Vzc0NoaWxkcmVuKG9Ob2RlLCBvVmlzaXRvciwgb01ldGFkYXRhLCBpc1B1YmxpYywgcHJvcGVydHlWYWx1ZXMpO1xuXHRcdGxldCBvSW5zdGFuY2U6IGFueTtcblx0XHRsZXQgb0NvbnRyb2xDb25maWcgPSB7fTtcblxuXHRcdGlmIChvU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhKSB7XG5cdFx0XHQvLyBPbmx5IHVzZWQgaW4gdGhlIEZpZWxkIG1hY3JvIGFuZCBldmVuIHRoZW4gbWF5YmUgbm90IHJlYWxseSB1c2VmdWxcblx0XHRcdG9Db250cm9sQ29uZmlnID0gb1NldHRpbmdzLm1vZGVscy52aWV3RGF0YS5nZXRQcm9wZXJ0eShcIi9jb250cm9sQ29uZmlndXJhdGlvblwiKTtcblx0XHR9XG5cdFx0bGV0IHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzID0gcHJvcGVydHlWYWx1ZXM7XG5cdFx0aWYgKGlzVjFNYWNyb0RlZihidWlsZGluZ0JMb2NrRGVmaW5pdGlvbikgJiYgYnVpbGRpbmdCTG9ja0RlZmluaXRpb24uY3JlYXRlKSB7XG5cdFx0XHRwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcyA9IGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmNyZWF0ZS5jYWxsKFxuXHRcdFx0XHRidWlsZGluZ0JMb2NrRGVmaW5pdGlvbixcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXMsXG5cdFx0XHRcdG9Db250cm9sQ29uZmlnLFxuXHRcdFx0XHRvU2V0dGluZ3MsXG5cdFx0XHRcdG9BZ2dyZWdhdGlvbnMsXG5cdFx0XHRcdGlzUHVibGljXG5cdFx0XHQpO1xuXHRcdFx0T2JqZWN0LmtleXMob01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNNZXRhZGF0YU5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRpZiAob01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHNbc01ldGFkYXRhTmFtZV0uY29tcHV0ZWQpIHtcblx0XHRcdFx0XHRtQ29udGV4dHNbc01ldGFkYXRhTmFtZV0gPSBwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlc1tzTWV0YWRhdGFOYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRPYmplY3Qua2V5cyhtTWlzc2luZ0NvbnRleHQpLmZvckVhY2goZnVuY3Rpb24gKHNDb250ZXh0TmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcy5oYXNPd25Qcm9wZXJ0eShzQ29udGV4dE5hbWUpKSB7XG5cdFx0XHRcdFx0bUNvbnRleHRzW3NDb250ZXh0TmFtZV0gPSBwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlc1tzQ29udGV4dE5hbWVdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmFwaVZlcnNpb24gPT09IDIpIHtcblx0XHRcdE9iamVjdC5rZXlzKHByb3BlcnR5VmFsdWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvRGF0YSA9IHByb3BlcnR5VmFsdWVzW3Byb3BOYW1lXTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9EYXRhICYmXG5cdFx0XHRcdFx0b0RhdGEuaXNBICYmXG5cdFx0XHRcdFx0b0RhdGEuaXNBKFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIikgJiZcblx0XHRcdFx0XHQhb0RhdGEuZ2V0TW9kZWwoKS5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbcHJvcE5hbWVdID0gb0RhdGEuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgQnVpbGRpbmdCbG9ja0NsYXNzID0gYnVpbGRpbmdCTG9ja0RlZmluaXRpb24gYXMgdHlwZW9mIEJ1aWxkaW5nQmxvY2tCYXNlO1xuXHRcdFx0b0luc3RhbmNlID0gbmV3IEJ1aWxkaW5nQmxvY2tDbGFzcyhwcm9wZXJ0eVZhbHVlcyAvKiwgb0NvbnRyb2xDb25maWcsIG9TZXR0aW5ncywgb0FnZ3JlZ2F0aW9ucywgaXNQdWJsaWMqLyk7XG5cdFx0fVxuXHRcdGNvbnN0IG9BdHRyaWJ1dGVzTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBBdHRyaWJ1dGVNb2RlbChvTm9kZSwgcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMsIGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uKTtcblx0XHRtQ29udGV4dHNbc05hbWVdID0gb0F0dHJpYnV0ZXNNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cblx0XHRsZXQgb1ByZXZpb3VzTWFjcm9JbmZvOiBhbnk7XG5cblx0XHQvLyBLZWVwIHRyYWNrXG5cdFx0aWYgKFRyYWNlSW5mby5pc1RyYWNlSW5mb0FjdGl2ZSgpKSB7XG5cdFx0XHRjb25zdCBvVHJhY2VJbmZvID0gVHJhY2VJbmZvLnRyYWNlTWFjcm9DYWxscyhzRnJhZ21lbnROYW1lLCBvTWV0YWRhdGEsIG1Db250ZXh0cywgb05vZGUsIG9WaXNpdG9yKTtcblx0XHRcdGlmIChvVHJhY2VJbmZvKSB7XG5cdFx0XHRcdG9QcmV2aW91c01hY3JvSW5mbyA9IG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl07XG5cdFx0XHRcdG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl0gPSBvVHJhY2VJbmZvLm1hY3JvSW5mbztcblx0XHRcdH1cblx0XHR9XG5cdFx0dmFsaWRhdGVNYWNyb1NpZ25hdHVyZShzRnJhZ21lbnROYW1lLCBvTWV0YWRhdGEsIG1Db250ZXh0cywgb05vZGUpO1xuXG5cdFx0Y29uc3Qgb0NvbnRleHRWaXNpdG9yID0gb1Zpc2l0b3Iud2l0aChcblx0XHRcdG1Db250ZXh0cyxcblx0XHRcdGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmlzT3BlbiAhPT0gdW5kZWZpbmVkID8gIWJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmlzT3BlbiA6IHRydWVcblx0XHQpO1xuXHRcdGNvbnN0IG9QYXJlbnQgPSBvTm9kZS5wYXJlbnROb2RlO1xuXG5cdFx0bGV0IGlDaGlsZEluZGV4OiBudW1iZXI7XG5cdFx0bGV0IG9Qcm9taXNlO1xuXHRcdGlmIChvUGFyZW50KSB7XG5cdFx0XHRpQ2hpbGRJbmRleCA9IEFycmF5LmZyb20ob1BhcmVudC5jaGlsZHJlbikuaW5kZXhPZihvTm9kZSk7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0KGlzVjFNYWNyb0RlZihidWlsZGluZ0JMb2NrRGVmaW5pdGlvbikgJiYgYnVpbGRpbmdCTG9ja0RlZmluaXRpb24uZ2V0VGVtcGxhdGUpIHx8XG5cdFx0XHRcdGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmFwaVZlcnNpb24gPT09IDJcblx0XHRcdCkge1xuXHRcdFx0XHRsZXQgb1RlbXBsYXRlO1xuXHRcdFx0XHRsZXQgYWRkRGVmYXVsdE5hbWVzcGFjZSA9IGZhbHNlO1xuXHRcdFx0XHRpZiAoYnVpbGRpbmdCTG9ja0RlZmluaXRpb24uYXBpVmVyc2lvbiA9PT0gMikge1xuXHRcdFx0XHRcdG9UZW1wbGF0ZSA9IG9JbnN0YW5jZS5nZXRUZW1wbGF0ZSgpO1xuXHRcdFx0XHRcdGFkZERlZmF1bHROYW1lc3BhY2UgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmdldFRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0b1RlbXBsYXRlID0gYnVpbGRpbmdCTG9ja0RlZmluaXRpb24uZ2V0VGVtcGxhdGUocHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGhhc0Vycm9yID0gXCJcIjtcblx0XHRcdFx0aWYgKG9UZW1wbGF0ZSkge1xuXHRcdFx0XHRcdGlmICghb1RlbXBsYXRlLmZpcnN0RWxlbWVudENoaWxkKSB7XG5cdFx0XHRcdFx0XHRvVGVtcGxhdGUgPSBwYXJzZVhNTFN0cmluZyhvVGVtcGxhdGUsIGFkZERlZmF1bHROYW1lc3BhY2UpO1xuXHRcdFx0XHRcdFx0Ly8gRm9yIHNhZmV0eSBwdXJwb3NlIHdlIHRyeSB0byBkZXRlY3QgdHJhaWxpbmcgdGV4dCBpbiBiZXR3ZWVuIFhNTCBUYWdzXG5cdFx0XHRcdFx0XHRjb25zdCBpdGVyID0gZG9jdW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yKG9UZW1wbGF0ZSwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuXHRcdFx0XHRcdFx0bGV0IHRleHRub2RlID0gaXRlci5uZXh0Tm9kZSgpO1xuXHRcdFx0XHRcdFx0d2hpbGUgKHRleHRub2RlKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh0ZXh0bm9kZS50ZXh0Q29udGVudCAmJiB0ZXh0bm9kZS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGhhc0Vycm9yID0gdGV4dG5vZGUudGV4dENvbnRlbnQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGV4dG5vZGUgPSBpdGVyLm5leHROb2RlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG9UZW1wbGF0ZS5sb2NhbE5hbWUgPT09IFwicGFyc2VyZXJyb3JcIikge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSBwYXJzZWVycm9yIHdoaWxlIHByb2Nlc3NpbmcgdGhlIFhNTCBpdCBtZWFucyB0aGUgWE1MIGl0c2VsZiBpcyBtYWxmb3JtZWQsIGFzIHN1Y2ggd2UgcmVydW4gdGhlIHRlbXBsYXRlIHByb2Nlc3Ncblx0XHRcdFx0XHRcdC8vIFNldHRpbmcgaXNUcmFjZU1vZGUgdHJ1ZSB3aWxsIG1ha2UgaXQgc28gdGhhdCBlYWNoIHhtbGAgZXhwcmVzc2lvbiBpcyBjaGVja2VkIGZvciB2YWxpZGl0eSBmcm9tIFhNTCBwZXJzcGVjdGl2ZSBhbmQgaWYgYW4gZXJyb3IgaXMgZm91bmQgaXQncyByZXR1cm5lZCBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgZnJhZ21lbnRcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke2J1aWxkaW5nQkxvY2tEZWZpbml0aW9uLm5hbWV9YCk7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRpc1RyYWNlTW9kZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdG9UZW1wbGF0ZSA9IG9JbnN0YW5jZT8uZ2V0VGVtcGxhdGVcblx0XHRcdFx0XHRcdFx0XHQ/IG9JbnN0YW5jZS5nZXRUZW1wbGF0ZSgpXG5cdFx0XHRcdFx0XHRcdFx0OiAoYnVpbGRpbmdCTG9ja0RlZmluaXRpb24gYXMgYW55KS5nZXRUZW1wbGF0ZShwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcyk7XG5cdFx0XHRcdFx0XHRcdG9UZW1wbGF0ZSA9IHBhcnNlWE1MU3RyaW5nKG9UZW1wbGF0ZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0XHRpc1RyYWNlTW9kZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaGFzRXJyb3IubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgdHJhaWxpbmcgdGV4dCB3ZSBjcmVhdGUgYSBzdGFuZGFyZCBlcnJvciBhbmQgZGlzcGxheSBpdC5cblx0XHRcdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke2J1aWxkaW5nQkxvY2tEZWZpbml0aW9uLm5hbWV9YCk7XG5cdFx0XHRcdFx0XHRjb25zdCBvRXJyb3JUZXh0ID0gY3JlYXRlRXJyb3JYTUwoXG5cdFx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0XHRgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke2J1aWxkaW5nQkxvY2tEZWZpbml0aW9uLm5hbWV9YCxcblx0XHRcdFx0XHRcdFx0XHRgVHJhaWxpbmcgdGV4dCB3YXMgZm91bmQgaW4gdGhlIFhNTDogJHtoYXNFcnJvcn1gXG5cdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdG9UZW1wbGF0ZS5vdXRlckhUTUxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRvVGVtcGxhdGUgPSBwYXJzZVhNTFN0cmluZyhvRXJyb3JUZXh0LCB0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b05vZGUucmVwbGFjZVdpdGgob1RlbXBsYXRlKTtcblx0XHRcdFx0XHRvTm9kZSA9IG9QYXJlbnQuY2hpbGRyZW5baUNoaWxkSW5kZXhdO1xuXHRcdFx0XHRcdG9Qcm9taXNlID0gb0NvbnRleHRWaXNpdG9yLnZpc2l0Tm9kZShvTm9kZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b05vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0b1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1Byb21pc2UgPSBvQ29udGV4dFZpc2l0b3IuaW5zZXJ0RnJhZ21lbnQoc0ZyYWdtZW50TmFtZSwgb05vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRhd2FpdCBvUHJvbWlzZTtcblx0XHRcdGNvbnN0IG9NYWNyb0VsZW1lbnQgPSBvUGFyZW50LmNoaWxkcmVuW2lDaGlsZEluZGV4XTtcblxuXHRcdFx0aWYgKE9iamVjdC5rZXlzKG9BZ2dyZWdhdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0T2JqZWN0LmtleXMob0FnZ3JlZ2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0FnZ3JlZ2F0aW9uRWxlbWVudCA9IG9BZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHRcdFx0aWYgKG9NYWNyb0VsZW1lbnQgIT09IG51bGwgJiYgb01hY3JvRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTmV3Q2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMob01hY3JvRWxlbWVudC5uYW1lc3BhY2VVUkksIHNBZ2dyZWdhdGlvbk5hbWUpO1xuXHRcdFx0XHRcdFx0bGV0IG9FbGVtZW50Q2hpbGQgPSBvQWdncmVnYXRpb25FbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHRcdFx0d2hpbGUgKG9FbGVtZW50Q2hpbGQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb05leHRDaGlsZCA9IG9FbGVtZW50Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRcdFx0XHRvTmV3Q2hpbGQuYXBwZW5kQ2hpbGQob0VsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0XHRcdG9FbGVtZW50Q2hpbGQgPSBvTmV4dENoaWxkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWUgIT09IFwiY3VzdG9tRGF0YVwiICYmIHNBZ2dyZWdhdGlvbk5hbWUgIT09IFwiZGVwZW5kZW50c1wiKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNTbG90TmFtZSA9XG5cdFx0XHRcdFx0XHRcdFx0KG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV0gJiYgb01ldGFkYXRhLmFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5zbG90KSB8fFxuXHRcdFx0XHRcdFx0XHRcdHNBZ2dyZWdhdGlvbk5hbWU7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRFbGVtZW50ID0gb01hY3JvRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwic2xvdFtuYW1lPSdcIiArIHNTbG90TmFtZSArIFwiJ11cIikgYXMgRWxlbWVudDtcblx0XHRcdFx0XHRcdFx0aWYgKG9UYXJnZXRFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0b1RhcmdldEVsZW1lbnQucmVwbGFjZVdpdGgoLi4uKG9OZXdDaGlsZC5jaGlsZHJlbiBhcyBhbnkpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b01hY3JvRWxlbWVudC5hcHBlbmRDaGlsZChvTmV3Q2hpbGQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01hY3JvRWxlbWVudCkge1xuXHRcdFx0XHRjb25zdCBvUmVtYWluaW5nU2xvdHMgPSBvTWFjcm9FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO1xuXHRcdFx0XHRvUmVtYWluaW5nU2xvdHMuZm9yRWFjaChmdW5jdGlvbiAob1Nsb3RFbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0XHRvU2xvdEVsZW1lbnQucmVtb3ZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAob1ByZXZpb3VzTWFjcm9JbmZvKSB7XG5cdFx0XHQvL3Jlc3RvcmUgbWFjcm8gaW5mbyBpZiBhdmFpbGFibGVcblx0XHRcdG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl0gPSBvUHJldmlvdXNNYWNyb0luZm87XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlbGV0ZSBvU2V0dGluZ3NbXCJfbWFjcm9JbmZvXCJdO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgYSBnZW5lcmljIGVycm9yICh1c3VhbGx5IGNvZGUgZXJyb3IpLCB3ZSByZXRyaWV2ZSB0aGUgY3VycmVudCBjb250ZXh0IGluZm9ybWF0aW9uIGFuZCBjcmVhdGUgYSBkZWRpY2F0ZWQgZXJyb3IgbWVzc2FnZVxuXHRcdGNvbnN0IHRyYWNlRGV0YWlscyA9IHtcblx0XHRcdGluaXRpYWxQcm9wZXJ0aWVzOiB7fSBhcyBhbnksXG5cdFx0XHRyZXNvbHZlZFByb3BlcnRpZXM6IHt9IGFzIGFueSxcblx0XHRcdG1pc3NpbmdDb250ZXh0czogbU1pc3NpbmdDb250ZXh0XG5cdFx0fTtcblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBpbml0aWFsS2V5cykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAmJiBwcm9wZXJ0eVZhbHVlLmlzQSAmJiBwcm9wZXJ0eVZhbHVlLmlzQShcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpKSB7XG5cdFx0XHRcdHRyYWNlRGV0YWlscy5pbml0aWFsUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0ge1xuXHRcdFx0XHRcdHBhdGg6IHByb3BlcnR5VmFsdWUuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLmdldE9iamVjdCgpXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmFjZURldGFpbHMuaW5pdGlhbFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5VmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIHByb3BlcnR5VmFsdWVzKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmICghaW5pdGlhbEtleXMuaW5jbHVkZXMocHJvcGVydHlOYW1lKSkge1xuXHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAmJiBwcm9wZXJ0eVZhbHVlLmlzQSAmJiBwcm9wZXJ0eVZhbHVlLmlzQShcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0dHJhY2VEZXRhaWxzLnJlc29sdmVkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0ge1xuXHRcdFx0XHRcdFx0cGF0aDogcHJvcGVydHlWYWx1ZS5nZXRQYXRoKCksXG5cdFx0XHRcdFx0XHR2YWx1ZTogcHJvcGVydHlWYWx1ZS5nZXRPYmplY3QoKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHJhY2VEZXRhaWxzLnJlc29sdmVkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBlcnJvckFueSA9IGUgYXMgYW55O1xuXHRcdExvZy5lcnJvcihlcnJvckFueSwgZXJyb3JBbnkpO1xuXHRcdGNvbnN0IG9FcnJvciA9IGNyZWF0ZUVycm9yWE1MKFxuXHRcdFx0W2BFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGJ1aWxkaW5nIGJsb2NrICR7YnVpbGRpbmdCTG9ja0RlZmluaXRpb24ubmFtZX1gLCBlcnJvckFueS5zdGFja10sXG5cdFx0XHRvTm9kZS5vdXRlckhUTUwsXG5cdFx0XHR0cmFjZURldGFpbHNcblx0XHQpO1xuXHRcdGNvbnN0IG9UZW1wbGF0ZSA9IHBhcnNlWE1MU3RyaW5nKG9FcnJvciwgdHJ1ZSk7XG5cdFx0b05vZGUucmVwbGFjZVdpdGgob1RlbXBsYXRlIGFzIGFueSk7XG5cdH1cbn1cbmZ1bmN0aW9uIGFkZFNpbmdsZUNvbnRleHQobUNvbnRleHRzOiBhbnksIG9WaXNpdG9yOiBhbnksIG9DdHg6IGFueSwgb01ldGFkYXRhQ29udGV4dHM6IGFueSkge1xuXHRjb25zdCBzS2V5ID0gb0N0eC5uYW1lIHx8IG9DdHgubW9kZWwgfHwgdW5kZWZpbmVkO1xuXG5cdGlmIChvTWV0YWRhdGFDb250ZXh0c1tzS2V5XSkge1xuXHRcdHJldHVybjsgLy8gZG8gbm90IGFkZCB0d2ljZVxuXHR9XG5cdHRyeSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9DdHgucGF0aDtcblx0XHRpZiAob0N0eC5tb2RlbCAhPSBudWxsKSB7XG5cdFx0XHRzQ29udGV4dFBhdGggPSBvQ3R4Lm1vZGVsICsgXCI+XCIgKyBzQ29udGV4dFBhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IG1TZXR0aW5nID0gb1Zpc2l0b3IuZ2V0U2V0dGluZ3MoKTtcblx0XHRpZiAoIW1TZXR0aW5nLmJpbmRpbmdDb250ZXh0c1tvQ3R4Lm1vZGVsXSAmJiBtU2V0dGluZy5tb2RlbHNbb0N0eC5tb2RlbF0pIHtcblx0XHRcdG1Db250ZXh0c1tzS2V5XSA9IG1TZXR0aW5nLm1vZGVsc1tvQ3R4Lm1vZGVsXS5nZXRDb250ZXh0KG9DdHgucGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtQ29udGV4dHNbc0tleV0gPSBvVmlzaXRvci5nZXRDb250ZXh0KHNDb250ZXh0UGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH1cblxuXHRcdG9NZXRhZGF0YUNvbnRleHRzW3NLZXldID0gbUNvbnRleHRzW3NLZXldOyAvLyBtYWtlIGl0IGF2YWlsYWJsZSBpbnNpZGUgbWV0YWRhdGFDb250ZXh0cyBKU09OIG9iamVjdFxuXHR9IGNhdGNoIChleCkge1xuXHRcdC8vY29uc29sZS5lcnJvcihleCk7XG5cdFx0Ly8gaWdub3JlIHRoZSBjb250ZXh0IGFzIHRoaXMgY2FuIG9ubHkgYmUgdGhlIGNhc2UgaWYgdGhlIG1vZGVsIGlzIG5vdCByZWFkeSwgaS5lLiBub3QgYSBwcmVwcm9jZXNzaW5nIG1vZGVsIGJ1dCBtYXliZSBhIG1vZGVsIGZvclxuXHRcdC8vIHByb3ZpZGluZyBhZnRlcndhcmRzXG5cdFx0Ly8gVE9ETyAwMDAyIG5vdCB5ZXQgaW1wbGVtZW50ZWRcblx0XHQvL21Db250ZXh0c1tcIl8kZXJyb3JcIl0ub01vZGVsLnNldFByb3BlcnR5KFwiL1wiICsgc0tleSwgZXgpO1xuXHR9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBidWlsZGluZyBibG9jayBkZWZpbml0aW9uIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSB4bWwgdGVtcGxhdGUgcHJvY2Vzc29yLlxuICpcbiAqIEBwYXJhbSBidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiBUaGUgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrKGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uOiBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbik6IHZvaWQge1xuXHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKFxuXHRcdChvTm9kZTogRWxlbWVudCwgb1Zpc2l0b3I6IElDYWxsYmFjaykgPT4gcHJvY2Vzc0J1aWxkaW5nQmxvY2soYnVpbGRpbmdCbG9ja0RlZmluaXRpb24sIG9Ob2RlLCBvVmlzaXRvciksXG5cdFx0YnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZXNwYWNlLFxuXHRcdGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLnhtbFRhZyB8fCBidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lXG5cdCk7XG5cdGlmIChidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKFxuXHRcdFx0KG9Ob2RlOiBFbGVtZW50LCBvVmlzaXRvcjogSUNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiwgb05vZGUsIG9WaXNpdG9yLCB0cnVlKSxcblx0XHRcdGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLnB1YmxpY05hbWVzcGFjZSxcblx0XHRcdGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLnhtbFRhZyB8fCBidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclhNTChlcnJvck1lc3NhZ2VzOiBzdHJpbmdbXSwgeG1sRnJhZ21lbnQ6IHN0cmluZywgYWRkaXRpb25hbERhdGE/OiBvYmplY3QpOiBzdHJpbmcge1xuXHRjb25zdCBlcnJvckxhYmVscyA9IGVycm9yTWVzc2FnZXMubWFwKChlcnJvck1lc3NhZ2UpID0+IHhtbGA8bTpMYWJlbCB0ZXh0PVwiJHtlc2NhcGVYTUwoZXJyb3JNZXNzYWdlKX1cIi8+YCk7XG5cdGxldCBhZGRpdGlvbmFsVGV4dCA9IFwiXCI7XG5cdGlmIChhZGRpdGlvbmFsRGF0YSkge1xuXHRcdGFkZGl0aW9uYWxUZXh0ID0geG1sYDxtOlZCb3g+XG5cdFx0XHRcdFx0XHQ8bTpMYWJlbCB0ZXh0PVwiVHJhY2UgSW5mb1wiLz5cblx0XHRcdFx0XHRcdDxjb2RlOkNvZGVFZGl0b3IgdHlwZT1cImpzb25cIiB2YWx1ZT1cIiR7ZXNjYXBlWE1MKEpTT04uc3RyaW5naWZ5KGFkZGl0aW9uYWxEYXRhLCBudWxsLCA0KSl9XCIgaGVpZ2h0PVwiMzAwcHhcIiB3aWR0aD1cIjEwMHZoXCIvPlxuXHRcdFx0XHRcdDwvbTpWQm94PmA7XG5cdH1cblx0cmV0dXJuIHhtbGA8bTpWQm94IHhtbG5zOm09XCJzYXAubVwiIHhtbG5zOmNvZGU9XCJzYXAudWkuY29kZWVkaXRvclwiPlxuXHRcdFx0XHQke2Vycm9yTGFiZWxzfVxuXHRcdFx0XHQ8bTpIQm94PlxuXHRcdFx0XHRcdDxtOlZCb3g+XG5cdFx0XHRcdFx0XHQ8bTpMYWJlbCB0ZXh0PVwiSG93IHRoZSBidWlsZGluZyBibG9jayB3YXMgY2FsbGVkXCIvPlxuXHRcdFx0XHRcdFx0PGNvZGU6Q29kZUVkaXRvciB0eXBlPVwieG1sXCIgdmFsdWU9XCIke2VzY2FwZVhNTCh4bWxGcmFnbWVudCl9XCIgaGVpZ2h0PVwiMzAwcHhcIiB3aWR0aD1cIjEwMHZoXCIvPlxuXHRcdFx0XHRcdDwvbTpWQm94PlxuXHRcdFx0XHRcdCR7YWRkaXRpb25hbFRleHR9XG5cdFx0XHRcdDwvbTpIQm94PlxuXHRcdFx0PC9tOlZCb3g+YDtcbn1cblxuY29uc3QgbXlTdG9yZTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuZnVuY3Rpb24gc3RvcmVWYWx1ZSh2YWx1ZXM6IGFueSkge1xuXHRjb25zdCBwcm9wZXJ0eVVJRCA9IGB1aWQtLSR7dWlkKCl9YDtcblx0bXlTdG9yZVtwcm9wZXJ0eVVJRF0gPSB2YWx1ZXM7XG5cdHJldHVybiBwcm9wZXJ0eVVJRDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhbiBYTUwgc3RyaW5nIGFuZCByZXR1cm4gdGhlIGFzc29jaWF0ZWQgZG9jdW1lbnQuXG4gKlxuICogQHBhcmFtIHhtbFN0cmluZyBUaGUgeG1sIHN0cmluZ1xuICogQHBhcmFtIGFkZERlZmF1bHROYW1lc3BhY2VzIFdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBhZGQgZGVmYXVsdCBuYW1lc3BhY2VcbiAqIEByZXR1cm5zIFRoZSBYTUwgZG9jdW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlWE1MU3RyaW5nKHhtbFN0cmluZzogc3RyaW5nLCBhZGREZWZhdWx0TmFtZXNwYWNlcyA9IGZhbHNlKTogRWxlbWVudCB7XG5cdGlmIChhZGREZWZhdWx0TmFtZXNwYWNlcykge1xuXHRcdHhtbFN0cmluZyA9IGA8dGVtcGxhdGVcblx0XHRcdFx0XHRcdHhtbG5zOnRlbXBsYXRlPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIlxuXHRcdFx0XHRcdFx0eG1sbnM6bT1cInNhcC5tXCJcblx0XHRcdFx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHRcdFx0XHR4bWxuczpjdXN0b21EYXRhPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiPiR7eG1sU3RyaW5nfTwvdGVtcGxhdGU+YDtcblx0fVxuXHRjb25zdCB4bWxEb2N1bWVudCA9IERPTVBhcnNlckluc3RhbmNlLnBhcnNlRnJvbVN0cmluZyh4bWxTdHJpbmcsIFwidGV4dC94bWxcIik7XG5cdGxldCBvdXRwdXQgPSB4bWxEb2N1bWVudC5maXJzdEVsZW1lbnRDaGlsZDtcblx0d2hpbGUgKG91dHB1dD8ubG9jYWxOYW1lID09PSBcInRlbXBsYXRlXCIpIHtcblx0XHRvdXRwdXQgPSBvdXRwdXQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdH1cblx0cmV0dXJuIG91dHB1dCBhcyBFbGVtZW50O1xufVxuXG4vKipcbiAqIEVzY2FwZSBhbiBYTUwgc3RyaW5nIHRvIGluY2x1ZGUgaXQgaW4gYW4gWE1MIGZyYWdtZW50LlxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyB0byBlc2NhcGVcbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlWE1MKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHN0clxuXHRcdC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcblx0XHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcblx0XHQucmVwbGFjZSgvXFxuL2csIFwiJiMxMDtcIilcblx0XHQucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIilcblx0XHQucmVwbGFjZSgvPi9nLCBcIiZndDtcIilcblx0XHQucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcblx0XHQucmVwbGFjZSgvJy9nLCBcIiZhcG9zO1wiKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYW4gWE1MIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gdmFsIFRoZSBhdHRyaWJ1dGUgdmFsdWUgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSh2YWw6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiB2YWwucmVwbGFjZSgvJi9nLCBcIiZhbXA7XCIpLnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGVtcGxhdGUgbGl0ZXJhbCB3aGlsZSBoYW5kbGluZyBzcGVjaWFsIG9iamVjdCBjYXNlLlxuICpcbiAqIEBwYXJhbSBzdHJpbmdzIFRoZSBzdHJpbmcgcGFydHMgb2YgdGhlIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBkb2N1bWVudCByZXByZXNlbnRpbmcgdGhlIHN0cmluZyB0aGF0IHdhcyB1c2VkLlxuICovXG5leHBvcnQgY29uc3QgeG1sID0gKHN0cmluZ3M6IFRlbXBsYXRlU3RyaW5nc0FycmF5LCAuLi52YWx1ZXM6IGFueVtdKSA9PiB7XG5cdGxldCBvdXRTdHIgPSBcIlwiO1xuXHRsZXQgaTtcblx0Zm9yIChpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHRcdG91dFN0ciArPSBzdHJpbmdzW2ldO1xuXHRcdC8vIEhhbmRsZSB0aGUgZGlmZmVyZW50IGNhc2Ugb2Ygb2JqZWN0LCBpZiBpdCdzIGFuIGFycmF5IHdlIGpvaW4gdGhlbSwgaWYgaXQncyBhIGJpbmRpbmcgZXhwcmVzc2lvbiAoZGV0ZXJtaW5lZCBieSBfdHlwZSkgdGhlbiB3ZSBjb21waWxlIGl0LlxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlc1tpXSkpIHtcblx0XHRcdG91dFN0ciArPSB2YWx1ZXNbaV0uZmxhdCg1KS5qb2luKFwiXCIpLnRyaW0oKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlc1tpXT8uX3R5cGUpIHtcblx0XHRcdGNvbnN0IGNvbXBpbGVkRXhwcmVzc2lvbiA9IGNvbXBpbGVCaW5kaW5nKHZhbHVlc1tpXSk7XG5cdFx0XHRvdXRTdHIgKz0gY29tcGlsZWRFeHByZXNzaW9uICE9PSB1bmRlZmluZWQgPyBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShjb21waWxlZEV4cHJlc3Npb24pIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAodmFsdWVzW2ldPy5nZXRUZW1wbGF0ZSkge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlc1tpXS5nZXRUZW1wbGF0ZSgpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlc1tpXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlVSWQgPSBzdG9yZVZhbHVlKHZhbHVlc1tpXSk7XG5cdFx0XHRvdXRTdHIgKz0gYCR7cHJvcGVydHlVSWR9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlc1tpXTtcblx0XHR9XG5cdH1cblx0b3V0U3RyICs9IHN0cmluZ3NbaV07XG5cdG91dFN0ciA9IG91dFN0ci50cmltKCk7XG5cdGlmIChpc1RyYWNlTW9kZSkge1xuXHRcdGNvbnN0IHhtbFJlc3VsdCA9IHBhcnNlWE1MU3RyaW5nKG91dFN0ciwgdHJ1ZSk7XG5cdFx0aWYgKHhtbFJlc3VsdCAmJiB4bWxSZXN1bHQ/LmxvY2FsTmFtZSA9PT0gXCJwYXJzZXJlcnJvclwiKSB7XG5cdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSAoeG1sUmVzdWx0IGFzIGFueSkuaW5uZXJUZXh0IHx8ICh4bWxSZXN1bHQgYXMgYW55KS5pbm5lckhUTUw7XG5cdFx0XHRyZXR1cm4gY3JlYXRlRXJyb3JYTUwoW2Vycm9yTWVzc2FnZS5zcGxpdChcIlxcblwiKVswXV0sIG91dFN0cik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXRTdHI7XG59O1xuIl19
|
|
935
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2tSdW50aW1lLnRzIl0sIm5hbWVzIjpbInBhY3QiLCJzdGF0ZSIsInZhbHVlIiwicyIsInYiLCJvIiwiYmluZCIsInRoZW4iLCJvYnNlcnZlciIsInByb3RvdHlwZSIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImNhbGxiYWNrIiwiZSIsIl90aGlzIiwidGhlbmFibGUiLCJhcnJheSIsImJvZHkiLCJjaGVjayIsImkiLCJyZWplY3QiLCJfY3ljbGUiLCJsZW5ndGgiLCJyZWNvdmVyIiwicHJvY2Vzc0J1aWxkaW5nQmxvY2siLCJidWlsZGluZ0JMb2NrRGVmaW5pdGlvbiIsIm9Ob2RlIiwib1Zpc2l0b3IiLCJpc1B1YmxpYyIsInNGcmFnbWVudE5hbWUiLCJmcmFnbWVudCIsIm5hbWVzcGFjZSIsIm5hbWUiLCJzTmFtZSIsIm1Db250ZXh0cyIsIm9NZXRhZGF0YUNvbnRleHRzIiwib1NldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJtb2RlbHMiLCJnZXRSZXNvdXJjZUJ1bmRsZSIsIm9SZXNvdXJjZUJ1bmRsZSIsIlJlc291cmNlTW9kZWwiLCJzZXRBcHBsaWNhdGlvbkkxOG5CdW5kbGUiLCJjYXRjaCIsImVycm9yIiwiTG9nIiwib01ldGFkYXRhIiwicHJlcGFyZU1ldGFkYXRhIiwibWV0YWRhdGEiLCJpc09wZW4iLCJwcm9jZXNzUHJvcGVydGllcyIsIm1NaXNzaW5nQ29udGV4dCIsInByb3BlcnR5VmFsdWVzIiwiaW5pdGlhbEtleXMiLCJPYmplY3QiLCJrZXlzIiwicHJvY2Vzc0NoaWxkcmVuIiwib0FnZ3JlZ2F0aW9ucyIsIm9QcmV2aW91c01hY3JvSW5mbyIsIm9JbnN0YW5jZSIsIm9Db250cm9sQ29uZmlnIiwidmlld0RhdGEiLCJnZXRQcm9wZXJ0eSIsInByb2Nlc3NlZFByb3BlcnR5VmFsdWVzIiwiaXNWMU1hY3JvRGVmIiwiY3JlYXRlIiwiY2FsbCIsIm1ldGFkYXRhQ29udGV4dHMiLCJmb3JFYWNoIiwic01ldGFkYXRhTmFtZSIsImNvbXB1dGVkIiwic0NvbnRleHROYW1lIiwiaGFzT3duUHJvcGVydHkiLCJhcGlWZXJzaW9uIiwicHJvcE5hbWUiLCJvRGF0YSIsImlzQSIsImdldE1vZGVsIiwiZ2V0T2JqZWN0IiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwib0F0dHJpYnV0ZXNNb2RlbCIsIkF0dHJpYnV0ZU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJUcmFjZUluZm8iLCJpc1RyYWNlSW5mb0FjdGl2ZSIsIm9UcmFjZUluZm8iLCJ0cmFjZU1hY3JvQ2FsbHMiLCJtYWNyb0luZm8iLCJ2YWxpZGF0ZU1hY3JvU2lnbmF0dXJlIiwib0NvbnRleHRWaXNpdG9yIiwid2l0aCIsInVuZGVmaW5lZCIsIm9QYXJlbnQiLCJwYXJlbnROb2RlIiwiaUNoaWxkSW5kZXgiLCJvUHJvbWlzZSIsIkFycmF5IiwiZnJvbSIsImNoaWxkcmVuIiwiaW5kZXhPZiIsImdldFRlbXBsYXRlIiwib1RlbXBsYXRlIiwiYWRkRGVmYXVsdE5hbWVzcGFjZSIsImhhc0Vycm9yIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJwYXJzZVhNTFN0cmluZyIsIml0ZXIiLCJkb2N1bWVudCIsImNyZWF0ZU5vZGVJdGVyYXRvciIsIk5vZGVGaWx0ZXIiLCJTSE9XX1RFWFQiLCJ0ZXh0bm9kZSIsIm5leHROb2RlIiwidGV4dENvbnRlbnQiLCJ0cmltIiwibG9jYWxOYW1lIiwiaXNUcmFjZU1vZGUiLCJvRXJyb3JUZXh0IiwiY3JlYXRlRXJyb3JYTUwiLCJvdXRlckhUTUwiLCJyZXBsYWNlV2l0aCIsInZpc2l0Tm9kZSIsInJlbW92ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiaW5zZXJ0RnJhZ21lbnQiLCJvTWFjcm9FbGVtZW50Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsIm9BZ2dyZWdhdGlvbkVsZW1lbnQiLCJvTmV3Q2hpbGQiLCJjcmVhdGVFbGVtZW50TlMiLCJuYW1lc3BhY2VVUkkiLCJvRWxlbWVudENoaWxkIiwib05leHRDaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsImFwcGVuZENoaWxkIiwic1Nsb3ROYW1lIiwiYWdncmVnYXRpb25zIiwic2xvdCIsIm9UYXJnZXRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsIm9SZW1haW5pbmdTbG90cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJvU2xvdEVsZW1lbnQiLCJ0cmFjZURldGFpbHMiLCJpbml0aWFsUHJvcGVydGllcyIsInJlc29sdmVkUHJvcGVydGllcyIsIm1pc3NpbmdDb250ZXh0cyIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5VmFsdWUiLCJwYXRoIiwiZ2V0UGF0aCIsImluY2x1ZGVzIiwiZXJyb3JBbnkiLCJvRXJyb3IiLCJzdGFjayIsInZpc2l0Q2hpbGROb2RlcyIsIm9GaXJzdEVsZW1lbnRDaGlsZCIsInNDaGlsZE5hbWUiLCJwcm9wZXJ0aWVzIiwiYXR0cmlidXRlcyIsImF0dHJpYnV0ZUluZGV4IiwiYURlZmluaXRpb25Db250ZXh0c0tleXMiLCJzb3J0IiwiYSIsImIiLCJzQXR0cmlidXRlTmFtZSIsImJEb05vdFJlc29sdmUiLCJvRGVmaW5pdGlvbkNvbnRleHRzIiwiaGFzQXR0cmlidXRlIiwib01ldGFkYXRhQ29udGV4dCIsIl9nZXRNZXRhZGF0YUNvbnRleHQiLCJhZGRTaW5nbGVDb250ZXh0IiwiYmluZGluZ0NvbnRleHRzIiwiY3VycmVudENvbnRleHRQYXRoIiwib0RlZmluaXRpb25Qcm9wZXJ0aWVzIiwiY29udGV4dFBhdGgiLCJhRGVmaW5pdGlvblByb3BlcnRpZXNLZXlzIiwiaiIsInNLZXlWYWx1ZSIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJ2aXNpdEF0dHJpYnV0ZSIsImdldE5hbWVkSXRlbSIsInZWYWx1ZSIsImdldEF0dHJpYnV0ZSIsIkxPR0dFUl9TQ09QRSIsIkRPTVBhcnNlckluc3RhbmNlIiwiRE9NUGFyc2VyIiwiYnVpbGRpbmdCbG9ja0RlZmluaXRpb24iLCJ2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0Iiwib0NvbnRleHRTZXR0aW5ncyIsInNLZXkiLCJvQ29udGV4dCIsIm9Db250ZXh0T2JqZWN0IiwicmVxdWlyZWQiLCJFcnJvciIsIiRraW5kIiwiJFR5cGUiLCJhTWV0YWRhdGFDb250ZXh0S2V5cyIsImFQcm9wZXJ0aWVzIiwib0F0dHJpYnV0ZU5hbWVzIiwiaUtleSIsIm9Qcm9wZXJ0eVNldHRpbmdzIiwic3RhcnRzV2l0aCIsIndhcm5pbmciLCJidWlsZGluZ0Jsb2NrTWV0YWRhdGEiLCJvUHJvcGVydGllcyIsInNQcm9wZXJ0eU5hbWUiLCJldmVudHMiLCJzRXZlbnROYW1lIiwic0F0dHJpYnV0ZVZhbHVlIiwic01ldGFQYXRoIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJteVN0b3JlIiwic0NvbnRleHRQYXRoIiwiY29udmVydGVyQ29udGV4dCIsInNldFByb3BlcnR5IiwibW9kZWwiLCJlbmRzV2l0aCIsImVudGl0eVNldCIsImdldENvbnRleHQiLCJvQ3R4IiwibVNldHRpbmciLCJleCIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsIlhNTFByZXByb2Nlc3NvciIsInBsdWdJbiIsInhtbFRhZyIsInB1YmxpY05hbWVzcGFjZSIsImVycm9yTWVzc2FnZXMiLCJ4bWxGcmFnbWVudCIsImFkZGl0aW9uYWxEYXRhIiwiZXJyb3JMYWJlbHMiLCJtYXAiLCJlcnJvck1lc3NhZ2UiLCJ4bWwiLCJlc2NhcGVYTUwiLCJhZGRpdGlvbmFsVGV4dCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdG9yZVZhbHVlIiwidmFsdWVzIiwicHJvcGVydHlVSUQiLCJ1aWQiLCJ4bWxTdHJpbmciLCJhZGREZWZhdWx0TmFtZXNwYWNlcyIsInhtbERvY3VtZW50IiwicGFyc2VGcm9tU3RyaW5nIiwib3V0cHV0Iiwic3RyIiwicmVwbGFjZSIsImVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlIiwidmFsIiwic3RyaW5ncyIsIm91dFN0ciIsImlzQXJyYXkiLCJmbGF0Iiwiam9pbiIsIl90eXBlIiwiY29tcGlsZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9wZXJ0eVVJZCIsInhtbFJlc3VsdCIsImlubmVyVGV4dCIsImlubmVySFRNTCIsInNwbGl0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOztBQXFDTyxpQkFBaUJBLElBQWpCLEVBQXVCQyxLQUF2QixFQUE4QkMsS0FBOUIsRUFBcUM7QUFDM0MsTUFBSSxDQUFDRixJQUFJLENBQUNHLENBQVYsRUFBYTtBQUNaLFFBQUlELEtBQUssaUJBQVQsRUFBNEI7QUFDM0IsVUFBSUEsS0FBSyxDQUFDQyxDQUFWLEVBQWE7QUFDWixZQUFJRixLQUFLLEdBQUcsQ0FBWixFQUFlO0FBQ2RBLFVBQUFBLEtBQUssR0FBR0MsS0FBSyxDQUFDQyxDQUFkO0FBQ0E7O0FBQ0RELFFBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDRSxDQUFkO0FBQ0EsT0FMRCxNQUtPO0FBQ05GLFFBQUFBLEtBQUssQ0FBQ0csQ0FBTixHQUFVLFFBQVFDLElBQVIsQ0FBYSxJQUFiLEVBQW1CTixJQUFuQixFQUF5QkMsS0FBekIsQ0FBVjtBQUNBO0FBQ0E7QUFDRDs7QUFDRCxRQUFJQyxLQUFLLElBQUlBLEtBQUssQ0FBQ0ssSUFBbkIsRUFBeUI7QUFDeEJMLE1BQUFBLEtBQUssQ0FBQ0ssSUFBTixDQUFXLFFBQVFELElBQVIsQ0FBYSxJQUFiLEVBQW1CTixJQUFuQixFQUF5QkMsS0FBekIsQ0FBWCxFQUE0QyxRQUFRSyxJQUFSLENBQWEsSUFBYixFQUFtQk4sSUFBbkIsRUFBeUIsQ0FBekIsQ0FBNUM7QUFDQTtBQUNBOztBQUNEQSxJQUFBQSxJQUFJLENBQUNHLENBQUwsR0FBU0YsS0FBVDtBQUNBRCxJQUFBQSxJQUFJLENBQUNJLENBQUwsR0FBU0YsS0FBVDtBQUNBLFFBQU1NLFFBQVEsR0FBR1IsSUFBSSxDQUFDSyxDQUF0Qjs7QUFDQSxRQUFJRyxRQUFKLEVBQWM7QUFDYkEsTUFBQUEsUUFBUSxDQUFDUixJQUFELENBQVI7QUFDQTtBQUNEO0FBQ0Q7O0FBOURNLElBQU0sUUFBUSxhQUFjLFlBQVc7QUFDN0MsbUJB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QUFELENBQWIsS0FBcUIsUUFBekIsRUFBbUM7QUFDekMsWUFBTW9QLFdBQVcsR0FBR3JCLFVBQVUsQ0FBQ0MsTUFBTSxDQUFDaE8sQ0FBRCxDQUFQLENBQTlCO0FBQ0E2TyxRQUFBQSxNQUFNLGNBQU9PLFdBQVAsQ0FBTjtBQUNBLE9BSE0sTUFHQTtBQUNOUCxRQUFBQSxNQUFNLElBQUliLE1BQU0sQ0FBQ2hPLENBQUQsQ0FBaEI7QUFDQTtBQUNEOztBQUNENk8sSUFBQUEsTUFBTSxJQUFJRCxPQUFPLENBQUM1TyxDQUFELENBQWpCO0FBQ0E2TyxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQzlJLElBQVAsRUFBVDs7QUFDQSxRQUFJRSxXQUFKLEVBQWlCO0FBQ2hCLFVBQU1vSixTQUFTLEdBQUcvSixjQUFjLENBQUN1SixNQUFELEVBQVMsSUFBVCxDQUFoQzs7QUFDQSxVQUFJUSxTQUFTLElBQUksQ0FBQUEsU0FBUyxTQUFULElBQUFBLFNBQVMsV0FBVCxZQUFBQSxTQUFTLENBQUVySixTQUFYLE1BQXlCLGFBQTFDLEVBQXlEO0FBQ3hELFlBQU15SCxZQUFZLEdBQUk0QixTQUFELENBQW1CQyxTQUFuQixJQUFpQ0QsU0FBRCxDQUFtQkUsU0FBeEU7QUFDQSxlQUFPcEosY0FBYyxDQUFDLENBQUNzSCxZQUFZLENBQUMrQixLQUFiLENBQW1CLElBQW5CLEVBQXlCLENBQXpCLENBQUQsQ0FBRCxFQUFnQ1gsTUFBaEMsQ0FBckI7QUFDQTtBQUNEOztBQUNELFdBQU9BLE1BQVA7QUFDQSxHQTlCTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IEF0dHJpYnV0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9BdHRyaWJ1dGVNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uLFxuXHRCdWlsZGluZ0Jsb2NrQmFzZSxcblx0QnVpbGRpbmdCbG9ja0RlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uVjEsXG5cdEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0QnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvbWFjcm9zL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgVHJhY2VJbmZvIGZyb20gXCIuL1RyYWNlSW5mb1wiO1xuXG5jb25zdCBMT0dHRVJfU0NPUEUgPSBcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLkJ1aWxkaW5nQmxvY2tSdW50aW1lXCI7XG5jb25zdCBET01QYXJzZXJJbnN0YW5jZSA9IG5ldyBET01QYXJzZXIoKTtcbmxldCBpc1RyYWNlTW9kZSA9IGZhbHNlO1xuXG50eXBlIFJlc29sdmVkQnVpbGRpbmdCbG9ja01ldGFkYXRhID0ge1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uPjtcblx0YWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uPjtcblx0bWV0YWRhdGFDb250ZXh0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24+O1xuXHRpc09wZW46IGJvb2xlYW47XG59O1xuXG50eXBlIElDYWxsYmFjayA9IHtcblx0Z2V0U2V0dGluZ3MoKTogYW55O1xuXHQvKipcblx0ICogVmlzaXRzIHRoZSBnaXZlbiBub2RlIGFuZCBlaXRoZXIgcHJvY2Vzc2VzIGEgdGVtcGxhdGUgaW5zdHJ1Y3Rpb24sIGNhbGxzXG5cdCAqIGEgdmlzaXRvciwgb3Igc2ltcGx5IGNhbGxzIGJvdGgge0BsaW5rXG5cdCAqIHNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yLklDYWxsYmFjay52aXNpdEF0dHJpYnV0ZXMgdmlzaXRBdHRyaWJ1dGVzfVxuXHQgKiBhbmQge0BsaW5rIHNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yLklDYWxsYmFjay52aXNpdENoaWxkTm9kZXNcblx0ICogdmlzaXRDaGlsZE5vZGVzfS5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBvTm9kZVxuXHQgKiAgIFRoZSBYTUwgRE9NIG5vZGVcblx0ICogQHJldHVybnMge3NhcC51aS5iYXNlLlN5bmNQcm9taXNlfVxuXHQgKiAgIEEgdGhlbmFibGUgd2hpY2ggcmVzb2x2ZXMgd2l0aCA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IGFzIHNvb24gYXMgdmlzaXRpbmdcblx0ICogICBpcyBkb25lLCBvciBpcyByZWplY3RlZCB3aXRoIGEgY29ycmVzcG9uZGluZyBlcnJvciBpZiB2aXNpdGluZyBmYWlsc1xuXHQgKi9cblx0dmlzaXROb2RlKG9Ob2RlOiBOb2RlKTogUHJvbWlzZTx2b2lkPjtcblxuXHQvKipcblx0ICogSW5zZXJ0cyB0aGUgZnJhZ21lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiBwbGFjZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC4gTG9hZHMgdGhlXG5cdCAqIGZyYWdtZW50LCB0YWtlcyBjYXJlIG9mIGNhY2hpbmcgKGZvciB0aGUgY3VycmVudCBwcmUtcHJvY2Vzc29yIHJ1bikgYW5kIHZpc2l0cyB0aGVcblx0ICogZnJhZ21lbnQncyBjb250ZW50IG9uY2UgaXQgaGFzIGJlZW4gaW1wb3J0ZWQgaW50byB0aGUgZWxlbWVudCdzIG93bmVyIGRvY3VtZW50IGFuZFxuXHQgKiBwdXQgaW50byBwbGFjZS4gTG9hZGluZyBvZiBmcmFnbWVudHMgaXMgYXN5bmNocm9ub3VzIGlmIHRoZSB0ZW1wbGF0ZSB2aWV3IGlzXG5cdCAqIGFzeW5jaHJvbm91cy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGcmFnbWVudE5hbWVcblx0ICogICB0aGUgZnJhZ21lbnQncyByZXNvbHZlZCBuYW1lXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gb0VsZW1lbnRcblx0ICogICB0aGUgWE1MIERPTSBlbGVtZW50LCBlLmcuIDxzYXAudWkuY29yZTpGcmFnbWVudD4gb3IgPGNvcmU6RXh0ZW5zaW9uUG9pbnQ+XG5cdCAqIEBwYXJhbSB7c2FwLnVpLmNvcmUudXRpbC5fd2l0aH0gb1dpdGhDb250cm9sXG5cdCAqICAgdGhlIHBhcmVudCdzIFwid2l0aFwiIGNvbnRyb2xcblx0ICogQHJldHVybnMge3NhcC51aS5iYXNlLlN5bmNQcm9taXNlfVxuXHQgKiBBIHN5bmMgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gYXMgc29vbiBhcyB0aGUgZnJhZ21lbnRcblx0ICogICBoYXMgYmVlbiBpbnNlcnRlZCwgb3IgaXMgcmVqZWN0ZWQgd2l0aCBhIGNvcnJlc3BvbmRpbmcgZXJyb3IgaWYgbG9hZGluZyBvciB2aXNpdGluZ1xuXHQgKiAgIGZhaWxzLlxuXHQgKi9cblx0aW5zZXJ0RnJhZ21lbnQoc0ZyYWdtZW50OiBzdHJpbmcsIG9FbGVtZW50OiBFbGVtZW50LCBvV2l0aD86IGFueSk6IFByb21pc2U8dm9pZD47XG5cdHZpc2l0QXR0cmlidXRlKG9Ob2RlOiBFbGVtZW50LCBvQXR0cmlidXRlOiBBdHRyKTogUHJvbWlzZTx2b2lkPjtcblx0dmlzaXRDaGlsZE5vZGVzKG9Ob2RlOiBOb2RlKTogUHJvbWlzZTx2b2lkPjtcblx0LyoqXG5cdCAqIEludGVycHJldHMgdGhlIGdpdmVuIFhNTCBET00gYXR0cmlidXRlIHZhbHVlIGFzIGEgYmluZGluZyBhbmQgcmV0dXJucyB0aGVcblx0ICogcmVzdWx0aW5nIHZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1ZhbHVlXG5cdCAqICAgQW4gWE1MIERPTSBhdHRyaWJ1dGUgdmFsdWVcblx0ICogQHBhcmFtIHtFbGVtZW50fSBbb0VsZW1lbnRdXG5cdCAqICAgVGhlIFhNTCBET00gZWxlbWVudCB0aGUgYXR0cmlidXRlIHZhbHVlIGJlbG9uZ3MgdG8gKG5lZWRlZCBvbmx5IGZvclxuXHQgKiAgIHdhcm5pbmdzIHdoaWNoIGFyZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGUpXG5cdCAqIEByZXR1cm5zIHtzYXAudWkuYmFzZS5TeW5jUHJvbWlzZXxudWxsfVxuXHQgKiAgIEEgdGhlbmFibGUgd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0aW5nIHZhbHVlLCBvciBpcyByZWplY3RlZCB3aXRoIGFcblx0ICogICBjb3JyZXNwb25kaW5nIGVycm9yIChmb3IgZXhhbXBsZSwgYW4gZXJyb3IgdGhyb3duIGJ5IGEgZm9ybWF0dGVyKSBvclxuXHQgKiAgIDxjb2RlPm51bGw8L2NvZGU+IGluIGNhc2UgdGhlIGJpbmRpbmcgaXMgbm90IHJlYWR5IChiZWNhdXNlIGl0IHJlZmVycyB0byBhXG5cdCAqICAgbW9kZWwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSkgKHNpbmNlIDEuNTcuMClcblx0ICovXG5cdGdldFJlc3VsdChzVmFsdWU6IHN0cmluZywgZWxlbWVudD86IEVsZW1lbnQpOiBQcm9taXNlPGFueT4gfCBudWxsO1xuXHRnZXRDb250ZXh0KHNQYXRoOiBzdHJpbmcpOiBDb250ZXh0O1xuXHQvKipcblx0ICogUmV0dXJucyBhIGNhbGxiYWNrIGludGVyZmFjZSBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIG1hcCBvZiB2YXJpYWJsZXMgd2hpY2hcblx0ICogb3ZlcnJpZGUgY3VycmVudGx5IGtub3duIHZhcmlhYmxlcyBvZiB0aGUgc2FtZSBuYW1lIGluIDxjb2RlPnRoaXM8L2NvZGU+XG5cdCAqIHBhcmVudCBpbnRlcmZhY2Ugb3IgcmVwbGFjZSB0aGVtIGFsdG9nZXRoZXIuIEVhY2ggdmFyaWFibGUgbmFtZSBiZWNvbWVzIGFcblx0ICogbmFtZWQgbW9kZWwgd2l0aCBhIGNvcnJlc3BvbmRpbmcgb2JqZWN0IGJpbmRpbmcgYW5kIGNhbiBiZSB1c2VkIGluc2lkZSB0aGVcblx0ICogWE1MIHRlbXBsYXRlIGluIHRoZSB1c3VhbCB3YXksIHRoYXQgaXMsIHdpdGggYSBiaW5kaW5nIGV4cHJlc3Npb24gbGlrZVxuXHQgKiA8Y29kZT5cInt2YXI+c29tZS9yZWxhdGl2ZS9wYXRofVwiPC9jb2RlPiAoc2VlIGV4YW1wbGUpLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gW21WYXJpYWJsZXM9e31dXG5cdCAqICAgTWFwIGZyb20gdmFyaWFibGUgbmFtZSAoc3RyaW5nKSB0byB2YWx1ZSAoe0BsaW5rIHNhcC51aS5tb2RlbC5Db250ZXh0fSlcblx0ICogQHBhcmFtIHtib29sZWFufSBbYlJlcGxhY2VdXG5cdCAqICAgV2hldGhlciBvbmx5IHRoZSBnaXZlbiB2YXJpYWJsZXMgYXJlIGtub3duIGluIHRoZSBuZXcgY2FsbGJhY2sgaW50ZXJmYWNlXG5cdCAqICAgaW5zdGFuY2UsIG5vIGluaGVyaXRlZCBvbmVzXG5cdCAqIEByZXR1cm5zIHtzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3Nvci5JQ2FsbGJhY2t9XG5cdCAqICAgQSBjYWxsYmFjayBpbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG1WYXJpYWJsZXNcblx0ICogQHBhcmFtIGJSZXBsYWNlXG5cdCAqL1xuXHRcIndpdGhcIihtVmFyaWFibGVzPzogYW55LCBiUmVwbGFjZT86IGJvb2xlYW4pOiBJQ2FsbGJhY2s7XG59O1xuXG4vKipcbiAqIFR5cGVndWFyZCBmb3IgY2hlY2tpbmcgaWYgYSBidWlsZGluZyBibG9jayB1c2UgQVBJIDEuXG4gKlxuICogQHBhcmFtIGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIHVzaW5nIEFQSSAxLlxuICovXG5mdW5jdGlvbiBpc1YxTWFjcm9EZWYoYnVpbGRpbmdCbG9ja0RlZmluaXRpb246IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uKTogYnVpbGRpbmdCbG9ja0RlZmluaXRpb24gaXMgQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMSB7XG5cdHJldHVybiBidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5hcGlWZXJzaW9uID09PSB1bmRlZmluZWQgfHwgYnVpbGRpbmdCbG9ja0RlZmluaXRpb24uYXBpVmVyc2lvbiA9PT0gMTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlTWFjcm9NZXRhZGF0YUNvbnRleHQoXG5cdHNOYW1lOiBzdHJpbmcsXG5cdG1Db250ZXh0czogYW55LFxuXHRvQ29udGV4dFNldHRpbmdzOiBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbixcblx0c0tleTogc3RyaW5nXG4pIHtcblx0Y29uc3Qgb0NvbnRleHQgPSBtQ29udGV4dHNbc0tleV07XG5cdGNvbnN0IG9Db250ZXh0T2JqZWN0ID0gb0NvbnRleHQ/LmdldE9iamVjdCgpO1xuXG5cdGlmIChvQ29udGV4dFNldHRpbmdzLnJlcXVpcmVkICYmICghb0NvbnRleHQgfHwgb0NvbnRleHRPYmplY3QgPT09IG51bGwpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGAke3NOYW1lfTogUmVxdWlyZWQgbWV0YWRhdGFDb250ZXh0ICcke3NLZXl9JyBpcyBtaXNzaW5nYCk7XG5cdH0gZWxzZSBpZiAob0NvbnRleHRPYmplY3QpIHtcblx0XHQvLyBJZiBjb250ZXh0IG9iamVjdCBoYXMgJGtpbmQgcHJvcGVydHksICRUeXBlIHNob3VsZCBub3QgYmUgY2hlY2tlZFxuXHRcdC8vIFRoZXJlZm9yZSByZW1vdmUgZnJvbSBjb250ZXh0IHNldHRpbmdzXG5cdFx0aWYgKG9Db250ZXh0T2JqZWN0Lmhhc093blByb3BlcnR5KFwiJGtpbmRcIikgJiYgb0NvbnRleHRTZXR0aW5ncy4ka2luZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlICRraW5kIGlzIHBhcnQgb2YgdGhlIGFsbG93ZWQgb25lc1xuXHRcdFx0aWYgKG9Db250ZXh0U2V0dGluZ3MuJGtpbmQuaW5kZXhPZihvQ29udGV4dE9iamVjdFtcIiRraW5kXCJdKSA9PT0gLTEpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGAke3NOYW1lfTogJyR7c0tleX0nIG11c3QgYmUgJyRraW5kJyAnJHtvQ29udGV4dFNldHRpbmdzW1wiJGtpbmRcIl19JyBidXQgaXMgJyR7XG5cdFx0XHRcdFx0XHRvQ29udGV4dE9iamVjdC4ka2luZFxuXHRcdFx0XHRcdH0nOiAke29Db250ZXh0LmdldFBhdGgoKX1gXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChvQ29udGV4dE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpICYmIG9Db250ZXh0U2V0dGluZ3MuJFR5cGUpIHtcblx0XHRcdC8vIENoZWNrIG9ubHkgJFR5cGVcblx0XHRcdGlmIChvQ29udGV4dFNldHRpbmdzLiRUeXBlLmluZGV4T2Yob0NvbnRleHRPYmplY3RbXCIkVHlwZVwiXSkgPT09IC0xKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgJHtzTmFtZX06ICcke3NLZXl9JyBtdXN0IGJlICckVHlwZScgJyR7b0NvbnRleHRTZXR0aW5nc1tcIiRUeXBlXCJdfScgYnV0IGlzICcke1xuXHRcdFx0XHRcdFx0b0NvbnRleHRPYmplY3QuJFR5cGVcblx0XHRcdFx0XHR9JzogJHtvQ29udGV4dC5nZXRQYXRoKCl9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTWFjcm9TaWduYXR1cmUoc05hbWU6IGFueSwgb01ldGFkYXRhOiBhbnksIG1Db250ZXh0czogYW55LCBvTm9kZTogYW55KSB7XG5cdGNvbnN0IGFNZXRhZGF0YUNvbnRleHRLZXlzID0gKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzICYmIE9iamVjdC5rZXlzKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzKSkgfHwgW10sXG5cdFx0YVByb3BlcnRpZXMgPSAob01ldGFkYXRhLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMob01ldGFkYXRhLnByb3BlcnRpZXMpKSB8fCBbXSxcblx0XHRvQXR0cmlidXRlTmFtZXM6IGFueSA9IHt9O1xuXG5cdC8vIGNvbGxlY3QgYWxsIGF0dHJpYnV0ZXMgdG8gZmluZCB1bmNoZWNrZWQgcHJvcGVydGllc1xuXHRPYmplY3Qua2V5cyhvTm9kZS5hdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChpS2V5OiBzdHJpbmcpIHtcblx0XHRjb25zdCBzS2V5ID0gb05vZGUuYXR0cmlidXRlc1tpS2V5XS5uYW1lO1xuXHRcdG9BdHRyaWJ1dGVOYW1lc1tzS2V5XSA9IHRydWU7XG5cdH0pO1xuXG5cdC8vQ2hlY2sgbWV0YWRhdGFDb250ZXh0c1xuXHRhTWV0YWRhdGFDb250ZXh0S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRjb25zdCBvQ29udGV4dFNldHRpbmdzID0gb01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHNbc0tleV07XG5cblx0XHR2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0KHNOYW1lLCBtQ29udGV4dHMsIG9Db250ZXh0U2V0dGluZ3MsIHNLZXkpO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlTmFtZXNbc0tleV07XG5cdH0pO1xuXHQvL0NoZWNrIHByb3BlcnRpZXNcblx0YVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5U2V0dGluZ3MgPSBvTWV0YWRhdGEucHJvcGVydGllc1tzS2V5XTtcblx0XHRpZiAoIW9Ob2RlLmhhc0F0dHJpYnV0ZShzS2V5KSkge1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eVNldHRpbmdzLnJlcXVpcmVkICYmICFvUHJvcGVydHlTZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYCR7c05hbWV9OiBgICsgYFJlcXVpcmVkIHByb3BlcnR5ICcke3NLZXl9JyBpcyBtaXNzaW5nYCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlTmFtZXNbc0tleV07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBVbmNoZWNrZWQgcHJvcGVydGllc1xuXHRPYmplY3Qua2V5cyhvQXR0cmlidXRlTmFtZXMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdC8vIG5vIGNoZWNrIGZvciBwcm9wZXJ0aWVzIHdoaWNoIHN0YXJ0IHdpdGggdW5kZXJzY29yZSBcIl9cIiBvciBjb250YWluIGEgY29sb24gXCI6XCIgKGRpZmZlcmVudCBuYW1lc3BhY2UpLCBlLmcuIHhtbG5zOnRyYWNlLCB0cmFjZTptYWNyb0lELCB1bml0dGVzdDppZFxuXHRcdGlmIChzS2V5LmluZGV4T2YoXCI6XCIpIDwgMCAmJiAhc0tleS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdExvZy53YXJuaW5nKGBVbmNoZWNrZWQgcGFyYW1ldGVyOiAke3NOYW1lfTogJHtzS2V5fWAsIHVuZGVmaW5lZCwgTE9HR0VSX1NDT1BFKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB0aGUgbWV0YWRhdGEgZm9yIHRoZSBidWlsZGluZyBibG9jayBhcmUgcHJvcGVybHkgZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0gYnVpbGRpbmdCbG9ja01ldGFkYXRhIFRoZSBtZXRhZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBpbnB1dFxuICogQHBhcmFtIGlzT3BlbiBXaGV0aGVyIHRoZSBidWlsZGluZyBibG9jayBpcyBvcGVuIG9yIG5vdFxuICogQHJldHVybnMgQSBzZXQgb2YgY29tcGxldGVkIG1ldGFkYXRhIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmdcbiAqL1xuZnVuY3Rpb24gcHJlcGFyZU1ldGFkYXRhKGJ1aWxkaW5nQmxvY2tNZXRhZGF0YT86IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSwgaXNPcGVuID0gZmFsc2UpOiBSZXNvbHZlZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdGlmIChidWlsZGluZ0Jsb2NrTWV0YWRhdGEpIHtcblx0XHRjb25zdCBvUHJvcGVydGllczogYW55ID0ge307XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0aW9uczogYW55ID0ge1xuXHRcdFx0XCJkZXBlbmRlbnRzXCI6IHtcblx0XHRcdFx0dHlwZTogXCJzYXAudWkuY29yZS5FbGVtZW50XCJcblx0XHRcdH0sXG5cdFx0XHRcImN1c3RvbURhdGFcIjoge1xuXHRcdFx0XHR0eXBlOiBcInNhcC51aS5jb3JlLkVsZW1lbnRcIlxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3Qgb01ldGFkYXRhQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24+ID0ge307XG5cblx0XHRPYmplY3Qua2V5cyhidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllcykuZm9yRWFjaChmdW5jdGlvbiAoc1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0XHRpZiAoYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXNbc1Byb3BlcnR5TmFtZV0udHlwZSAhPT0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiKSB7XG5cdFx0XHRcdG9Qcm9wZXJ0aWVzW3NQcm9wZXJ0eU5hbWVdID0gYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXNbc1Byb3BlcnR5TmFtZV07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvTWV0YWRhdGFDb250ZXh0c1tzUHJvcGVydHlOYW1lXSA9IGJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5wcm9wZXJ0aWVzW3NQcm9wZXJ0eU5hbWVdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIE1lcmdlIGV2ZW50cyBpbnRvIHByb3BlcnRpZXMgYXMgdGhleSBhcmUgaGFuZGxlZCBpZGVudGljYWxseVxuXHRcdGlmIChidWlsZGluZ0Jsb2NrTWV0YWRhdGEuZXZlbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhidWlsZGluZ0Jsb2NrTWV0YWRhdGEuZXZlbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzRXZlbnROYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0b1Byb3BlcnRpZXNbc0V2ZW50TmFtZV0gPSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEuZXZlbnRzW3NFdmVudE5hbWVdO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChidWlsZGluZ0Jsb2NrTWV0YWRhdGEuYWdncmVnYXRpb25zKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhidWlsZGluZ0Jsb2NrTWV0YWRhdGEuYWdncmVnYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tzUHJvcGVydHlOYW1lXSA9IGJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5hZ2dyZWdhdGlvbnNbc1Byb3BlcnR5TmFtZV07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByb3BlcnRpZXM6IG9Qcm9wZXJ0aWVzLFxuXHRcdFx0YWdncmVnYXRpb25zOiBvQWdncmVnYXRpb25zLFxuXHRcdFx0bWV0YWRhdGFDb250ZXh0czogb01ldGFkYXRhQ29udGV4dHMsXG5cdFx0XHRpc09wZW46IGlzT3BlblxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1ldGFkYXRhQ29udGV4dHM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7XG5cdFx0XHRcdFwiZGVwZW5kZW50c1wiOiB7XG5cdFx0XHRcdFx0dHlwZTogXCJzYXAudWkuY29yZS5FbGVtZW50XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjdXN0b21EYXRhXCI6IHtcblx0XHRcdFx0XHR0eXBlOiBcInNhcC51aS5jb3JlLkVsZW1lbnRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRpc09wZW46IGlzT3BlblxuXHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gX2dldE1ldGFkYXRhQ29udGV4dChcblx0b1NldHRpbmdzOiBhbnksXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRzQXR0cmlidXRlTmFtZTogc3RyaW5nLFxuXHRvVmlzaXRvcjogSUNhbGxiYWNrLFxuXHRiRG9Ob3RSZXNvbHZlOiBib29sZWFuLFxuXHRpc09wZW46IGJvb2xlYW5cbikge1xuXHRsZXQgb01ldGFkYXRhQ29udGV4dDtcblx0aWYgKCFiRG9Ob3RSZXNvbHZlICYmIG9Ob2RlLmhhc0F0dHJpYnV0ZShzQXR0cmlidXRlTmFtZSkpIHtcblx0XHRjb25zdCBzQXR0cmlidXRlVmFsdWUgPSBvTm9kZS5nZXRBdHRyaWJ1dGUoc0F0dHJpYnV0ZU5hbWUpIGFzIHN0cmluZztcblx0XHRsZXQgc01ldGFQYXRoO1xuXHRcdC8vIG9WaXNpdG9yLmdldFJlc3VsdChzQXR0cmlidXRlVmFsdWUsIG9Ob2RlKTtcblx0XHRvTWV0YWRhdGFDb250ZXh0ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdFx0aWYgKCFvTWV0YWRhdGFDb250ZXh0KSB7XG5cdFx0XHRpZiAoc0F0dHJpYnV0ZVZhbHVlLnN0YXJ0c1dpdGgoXCJ1aWQtLVwiKSkge1xuXHRcdFx0XHRjb25zdCBvRGF0YSA9IG15U3RvcmVbc0F0dHJpYnV0ZVZhbHVlXTtcblx0XHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gYC8ke3NBdHRyaWJ1dGVWYWx1ZX1gO1xuXHRcdFx0XHRvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuc2V0UHJvcGVydHkoc0NvbnRleHRQYXRoLCBvRGF0YSk7XG5cdFx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRcdFx0bW9kZWw6IFwiY29udmVydGVyQ29udGV4dFwiLFxuXHRcdFx0XHRcdHBhdGg6IHNDb250ZXh0UGF0aFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIGlmICgoc0F0dHJpYnV0ZU5hbWUgPT09IFwibWV0YVBhdGhcIiAmJiBvU2V0dGluZ3MuY3VycmVudENvbnRleHRQYXRoKSB8fCBzQXR0cmlidXRlTmFtZSA9PT0gXCJjb250ZXh0UGF0aFwiKSB7XG5cdFx0XHRcdGlmIChzQXR0cmlidXRlVmFsdWUgJiYgc0F0dHJpYnV0ZVZhbHVlLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRcdFx0Ly8gYWJzb2x1dGUgcGF0aCAtIHdlIGp1c3QgdXNlIHRoaXMgb25lXG5cdFx0XHRcdFx0c01ldGFQYXRoID0gc0F0dHJpYnV0ZVZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxldCBzQ29udGV4dFBhdGggPSBvU2V0dGluZ3MuY3VycmVudENvbnRleHRQYXRoLmdldFBhdGgoKTtcblx0XHRcdFx0XHRpZiAoIXNDb250ZXh0UGF0aC5lbmRzV2l0aChcIi9cIikpIHtcblx0XHRcdFx0XHRcdHNDb250ZXh0UGF0aCArPSBcIi9cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gc0NvbnRleHRQYXRoICsgc0F0dHJpYnV0ZVZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRcdFx0bW9kZWw6IFwibWV0YU1vZGVsXCIsXG5cdFx0XHRcdFx0cGF0aDogc01ldGFQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvTWV0YWRhdGFDb250ZXh0ID0ge1xuXHRcdFx0XHRcdG1vZGVsOiBcIm1ldGFNb2RlbFwiLFxuXHRcdFx0XHRcdHBhdGg6IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuZW50aXR5U2V0XG5cdFx0XHRcdFx0XHQ/IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuZW50aXR5U2V0LmdldFBhdGgoc0F0dHJpYnV0ZVZhbHVlKVxuXHRcdFx0XHRcdFx0OiBzQXR0cmlidXRlVmFsdWVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAob1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5oYXNPd25Qcm9wZXJ0eShzQXR0cmlidXRlTmFtZSkpIHtcblx0XHRvTWV0YWRhdGFDb250ZXh0ID0ge1xuXHRcdFx0bW9kZWw6IHNBdHRyaWJ1dGVOYW1lLFxuXHRcdFx0cGF0aDogXCJcIlxuXHRcdH07XG5cdH0gZWxzZSBpZiAoaXNPcGVuKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChvVmlzaXRvci5nZXRDb250ZXh0KGAke3NBdHRyaWJ1dGVOYW1lfT5gKSkge1xuXHRcdFx0XHRvTWV0YWRhdGFDb250ZXh0ID0ge1xuXHRcdFx0XHRcdG1vZGVsOiBzQXR0cmlidXRlTmFtZSxcblx0XHRcdFx0XHRwYXRoOiBcIlwiXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0b01ldGFkYXRhQ29udGV4dCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9NZXRhZGF0YUNvbnRleHQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKFxuXHRvTWV0YWRhdGE6IFJlc29sdmVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRvU2V0dGluZ3M6IGFueSxcblx0b05vZGU6IEVsZW1lbnQsXG5cdGlzUHVibGljOiBib29sZWFuLFxuXHRvVmlzaXRvcjogSUNhbGxiYWNrLFxuXHRtQ29udGV4dHM6IGFueSxcblx0b01ldGFkYXRhQ29udGV4dHM6IGFueVxuKSB7XG5cdGNvbnN0IG1NaXNzaW5nQ29udGV4dDogYW55ID0ge307XG5cdGNvbnN0IG9EZWZpbml0aW9uUHJvcGVydGllcyA9IG9NZXRhZGF0YS5wcm9wZXJ0aWVzO1xuXHRjb25zdCBvRGVmaW5pdGlvbkNvbnRleHRzID0gb01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHM7XG5cdG9TZXR0aW5ncy5jdXJyZW50Q29udGV4dFBhdGggPSBvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmNvbnRleHRQYXRoO1xuXG5cdC8vIFJldHJpZXZlIHByb3BlcnRpZXMgdmFsdWVzXG5cdGNvbnN0IGFEZWZpbml0aW9uUHJvcGVydGllc0tleXMgPSBPYmplY3Qua2V5cyhvRGVmaW5pdGlvblByb3BlcnRpZXMpO1xuXHRsZXQgYURlZmluaXRpb25Db250ZXh0c0tleXMgPSBPYmplY3Qua2V5cyhvRGVmaW5pdGlvbkNvbnRleHRzKTtcblx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0Zm9yIChsZXQgaiA9IDA7IGogPCBhRGVmaW5pdGlvblByb3BlcnRpZXNLZXlzLmxlbmd0aDsgaisrKSB7XG5cdFx0Y29uc3Qgc0tleVZhbHVlID0gYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5c1tqXTtcblx0XHRpZiAob0RlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0udHlwZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0cHJvcGVydHlWYWx1ZXNbc0tleVZhbHVlXSA9IHt9OyAvLyBUbyBhdm9pZCB2YWxlcyBiZWluZyByZXVzZWQgYWNjcm9zcyBtYWNyb3Ncblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcGVydHlWYWx1ZXNbc0tleVZhbHVlXSA9IG9EZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdFx0aWYgKG9Ob2RlLmhhc0F0dHJpYnV0ZShzS2V5VmFsdWUpICYmIGlzUHVibGljICYmICFvRGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS5pc1B1YmxpYykge1xuXHRcdFx0TG9nLmVycm9yKGBQcm9wZXJ0eSAke3NLZXlWYWx1ZX0gd2FzIGlnbm9yZWQgYXMgaXQgaXMgbm90IGludGVuZGVkIGZvciBwdWJsaWMgdXNhZ2VgKTtcblx0XHR9IGVsc2UgaWYgKG9Ob2RlLmhhc0F0dHJpYnV0ZShzS2V5VmFsdWUpKSB7XG5cdFx0XHRhd2FpdCBvVmlzaXRvci52aXNpdEF0dHJpYnV0ZShvTm9kZSwgb05vZGUuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oc0tleVZhbHVlKSBhcyBBdHRyKTtcblx0XHRcdGNvbnN0IHZWYWx1ZSA9IG9Ob2RlLmdldEF0dHJpYnV0ZShzS2V5VmFsdWUpO1xuXHRcdFx0aWYgKHZWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NLZXlWYWx1ZV0gPSB2VmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIFNvcnQga2V5cyB0byBiZSBzdXJlIGNvbnRleHRQYXRoIGlzIGJlZm9yZSBtZXRhUGF0aCAoIHllcyBJJ20gZGVzcGVyYXRlIClcblx0YURlZmluaXRpb25Db250ZXh0c0tleXMgPSBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cy5zb3J0KGZ1bmN0aW9uIChhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuXHRcdHJldHVybiBhID4gYiA/IDEgOiAtMTtcblx0fSk7XG5cdGZvciAoY29uc3Qgc0F0dHJpYnV0ZU5hbWUgb2YgYURlZmluaXRpb25Db250ZXh0c0tleXMpIHtcblx0XHRjb25zdCBiRG9Ob3RSZXNvbHZlID0gaXNQdWJsaWMgJiYgIW9EZWZpbml0aW9uQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdLmlzUHVibGljICYmIG9Ob2RlLmhhc0F0dHJpYnV0ZShzQXR0cmlidXRlTmFtZSk7XG5cdFx0Y29uc3Qgb01ldGFkYXRhQ29udGV4dCA9IF9nZXRNZXRhZGF0YUNvbnRleHQob1NldHRpbmdzLCBvTm9kZSwgc0F0dHJpYnV0ZU5hbWUsIG9WaXNpdG9yLCBiRG9Ob3RSZXNvbHZlLCBvTWV0YWRhdGEuaXNPcGVuKTtcblx0XHRpZiAob01ldGFkYXRhQ29udGV4dCkge1xuXHRcdFx0b01ldGFkYXRhQ29udGV4dC5uYW1lID0gc0F0dHJpYnV0ZU5hbWU7XG5cdFx0XHRhZGRTaW5nbGVDb250ZXh0KG1Db250ZXh0cywgb1Zpc2l0b3IsIG9NZXRhZGF0YUNvbnRleHQsIG9NZXRhZGF0YUNvbnRleHRzKTtcblx0XHRcdGlmIChcblx0XHRcdFx0KHNBdHRyaWJ1dGVOYW1lID09PSBcImVudGl0eVNldFwiICYmICFvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmhhc093blByb3BlcnR5KHNBdHRyaWJ1dGVOYW1lKSkgfHxcblx0XHRcdFx0KHNBdHRyaWJ1dGVOYW1lID09PSBcImNvbnRleHRQYXRoXCIgJiYgIW9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuaGFzT3duUHJvcGVydHkoc0F0dHJpYnV0ZU5hbWUpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdID0gbUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRcdH1cblx0XHRcdGlmIChzQXR0cmlidXRlTmFtZSA9PT0gXCJjb250ZXh0UGF0aFwiKSB7XG5cdFx0XHRcdG9TZXR0aW5ncy5jdXJyZW50Q29udGV4dFBhdGggPSBtQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydHlWYWx1ZXNbc0F0dHJpYnV0ZU5hbWVdID0gbUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bU1pc3NpbmdDb250ZXh0W3NBdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7IG1NaXNzaW5nQ29udGV4dCwgcHJvcGVydHlWYWx1ZXM6IHByb3BlcnR5VmFsdWVzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NDaGlsZHJlbihcblx0b05vZGU6IEVsZW1lbnQsXG5cdG9WaXNpdG9yOiBJQ2FsbGJhY2ssXG5cdG9NZXRhZGF0YTogUmVzb2x2ZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdGlzUHVibGljOiBib29sZWFuLFxuXHRwcm9wZXJ0eVZhbHVlczogUmVjb3JkPHN0cmluZywgYW55PlxuKSB7XG5cdGNvbnN0IG9BZ2dyZWdhdGlvbnM6IGFueSA9IHt9O1xuXHRpZiAob05vZGUuZmlyc3RFbGVtZW50Q2hpbGQgIT09IG51bGwpIHtcblx0XHQvLyBJZiB0aGVyZSBhcmUgYWdncmVnYXRpb24gd2UgbmVlZCB0byB2aXNpdCB0aGUgY2hpbGROb2RlcyBmaXJzdCBhbmQgZm9yZW1vc3Rcblx0XHRhd2FpdCBvVmlzaXRvci52aXNpdENoaWxkTm9kZXMob05vZGUpO1xuXHRcdGxldCBvRmlyc3RFbGVtZW50Q2hpbGQ6IEVsZW1lbnQgfCBudWxsID0gb05vZGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0d2hpbGUgKG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3Qgc0NoaWxkTmFtZSA9IG9GaXJzdEVsZW1lbnRDaGlsZC5sb2NhbE5hbWU7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdE9iamVjdC5rZXlzKG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnMpLmluZGV4T2Yoc0NoaWxkTmFtZSkgIT09IC0xICYmXG5cdFx0XHRcdCghaXNQdWJsaWMgfHwgb01ldGFkYXRhLmFnZ3JlZ2F0aW9uc1tzQ2hpbGROYW1lXS5pc1B1YmxpYylcblx0XHRcdCkge1xuXHRcdFx0XHRvQWdncmVnYXRpb25zW29GaXJzdEVsZW1lbnRDaGlsZC5sb2NhbE5hbWVdID0gb0ZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhvTWV0YWRhdGEucHJvcGVydGllcykuaW5kZXhPZihzQ2hpbGROYW1lKSAhPT0gLTEpIHtcblx0XHRcdFx0Ly8gT2JqZWN0IFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1tzQ2hpbGROYW1lXSA9IHt9O1xuXHRcdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZUluZGV4IG9mIE9iamVjdC5rZXlzKG9GaXJzdEVsZW1lbnRDaGlsZC5hdHRyaWJ1dGVzKSkge1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NDaGlsZE5hbWVdW29GaXJzdEVsZW1lbnRDaGlsZC5hdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4IGFzIGFueV0ubG9jYWxOYW1lXSA9XG5cdFx0XHRcdFx0XHRvRmlyc3RFbGVtZW50Q2hpbGQuYXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleCBhcyBhbnldLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG9GaXJzdEVsZW1lbnRDaGlsZCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQWdncmVnYXRpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzQnVpbGRpbmdCbG9jayhcblx0YnVpbGRpbmdCTG9ja0RlZmluaXRpb246IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLFxuXHRvTm9kZTogRWxlbWVudCxcblx0b1Zpc2l0b3I6IElDYWxsYmFjayxcblx0aXNQdWJsaWMgPSBmYWxzZVxuKSB7XG5cdGNvbnN0IHNGcmFnbWVudE5hbWUgPSBidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5mcmFnbWVudCB8fCBgJHtidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5uYW1lc3BhY2V9LiR7YnVpbGRpbmdCTG9ja0RlZmluaXRpb24ubmFtZX1gO1xuXG5cdGNvbnN0IHNOYW1lID0gXCJ0aGlzXCI7XG5cblx0Y29uc3QgbUNvbnRleHRzOiBhbnkgPSB7fTtcblx0Y29uc3Qgb01ldGFkYXRhQ29udGV4dHM6IGFueSA9IHt9O1xuXHRjb25zdCBvU2V0dGluZ3MgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXHQvLyBUT0RPIDAwMDEgTW92ZSB0aGlzIGVsc2V3aGVyZSB0aGlzIGlzIHdlaXJkIDopXG5cdGlmIChvU2V0dGluZ3MubW9kZWxzW1wic2FwLmZlLmkxOG5cIl0pIHtcblx0XHRvU2V0dGluZ3MubW9kZWxzW1wic2FwLmZlLmkxOG5cIl1cblx0XHRcdC5nZXRSZXNvdXJjZUJ1bmRsZSgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlOiBhbnkpIHtcblx0XHRcdFx0UmVzb3VyY2VNb2RlbC5zZXRBcHBsaWNhdGlvbkkxOG5CdW5kbGUob1Jlc291cmNlQnVuZGxlKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9NZXRhZGF0YSA9IHByZXBhcmVNZXRhZGF0YShidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5tZXRhZGF0YSwgYnVpbGRpbmdCTG9ja0RlZmluaXRpb24uaXNPcGVuKTtcblxuXHQvL0luamVjdCBzdG9yYWdlIGZvciBtYWNyb3Ncblx0aWYgKCFvU2V0dGluZ3Nbc0ZyYWdtZW50TmFtZV0pIHtcblx0XHRvU2V0dGluZ3Nbc0ZyYWdtZW50TmFtZV0gPSB7fTtcblx0fVxuXG5cdC8vIEZpcnN0IG9mIGFsbCB3ZSBuZWVkIHRvIHZpc2l0IHRoZSBhdHRyaWJ1dGVzXG5cdGNvbnN0IHsgbU1pc3NpbmdDb250ZXh0LCBwcm9wZXJ0eVZhbHVlcyB9ID0gYXdhaXQgcHJvY2Vzc1Byb3BlcnRpZXMoXG5cdFx0b01ldGFkYXRhLFxuXHRcdG9TZXR0aW5ncyxcblx0XHRvTm9kZSxcblx0XHRpc1B1YmxpYyxcblx0XHRvVmlzaXRvcixcblx0XHRtQ29udGV4dHMsXG5cdFx0b01ldGFkYXRhQ29udGV4dHNcblx0KTtcblx0Y29uc3QgaW5pdGlhbEtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbHVlcyk7XG5cdHRyeSB7XG5cdFx0Ly8gQWdncmVnYXRpb24gYW5kIGNvbXBsZXggdHlwZSBzdXBwb3J0XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0aW9ucyA9IGF3YWl0IHByb2Nlc3NDaGlsZHJlbihvTm9kZSwgb1Zpc2l0b3IsIG9NZXRhZGF0YSwgaXNQdWJsaWMsIHByb3BlcnR5VmFsdWVzKTtcblx0XHRsZXQgb0luc3RhbmNlOiBhbnk7XG5cdFx0bGV0IG9Db250cm9sQ29uZmlnID0ge307XG5cblx0XHRpZiAob1NldHRpbmdzLm1vZGVscy52aWV3RGF0YSkge1xuXHRcdFx0Ly8gT25seSB1c2VkIGluIHRoZSBGaWVsZCBtYWNybyBhbmQgZXZlbiB0aGVuIG1heWJlIG5vdCByZWFsbHkgdXNlZnVsXG5cdFx0XHRvQ29udHJvbENvbmZpZyA9IG9TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEuZ2V0UHJvcGVydHkoXCIvY29udHJvbENvbmZpZ3VyYXRpb25cIik7XG5cdFx0fVxuXHRcdGxldCBwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdGlmIChpc1YxTWFjcm9EZWYoYnVpbGRpbmdCTG9ja0RlZmluaXRpb24pICYmIGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmNyZWF0ZSkge1xuXHRcdFx0cHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMgPSBidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5jcmVhdGUuY2FsbChcblx0XHRcdFx0YnVpbGRpbmdCTG9ja0RlZmluaXRpb24sXG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzLFxuXHRcdFx0XHRvQ29udHJvbENvbmZpZyxcblx0XHRcdFx0b1NldHRpbmdzLFxuXHRcdFx0XHRvQWdncmVnYXRpb25zLFxuXHRcdFx0XHRpc1B1YmxpY1xuXHRcdFx0KTtcblx0XHRcdE9iamVjdC5rZXlzKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzTWV0YWRhdGFOYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzW3NNZXRhZGF0YU5hbWVdLmNvbXB1dGVkKSB7XG5cdFx0XHRcdFx0bUNvbnRleHRzW3NNZXRhZGF0YU5hbWVdID0gcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXNbc01ldGFkYXRhTmFtZV07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0T2JqZWN0LmtleXMobU1pc3NpbmdDb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uIChzQ29udGV4dE5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRpZiAocHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMuaGFzT3duUHJvcGVydHkoc0NvbnRleHROYW1lKSkge1xuXHRcdFx0XHRcdG1Db250ZXh0c1tzQ29udGV4dE5hbWVdID0gcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXNbc0NvbnRleHROYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5hcGlWZXJzaW9uID09PSAyKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbHVlcykuZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0RhdGEgPSBwcm9wZXJ0eVZhbHVlc1twcm9wTmFtZV07XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvRGF0YSAmJlxuXHRcdFx0XHRcdG9EYXRhLmlzQSAmJlxuXHRcdFx0XHRcdG9EYXRhLmlzQShcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpICYmXG5cdFx0XHRcdFx0IW9EYXRhLmdldE1vZGVsKCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3Byb3BOYW1lXSA9IG9EYXRhLmdldE9iamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IEJ1aWxkaW5nQmxvY2tDbGFzcyA9IGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uIGFzIHR5cGVvZiBCdWlsZGluZ0Jsb2NrQmFzZTtcblx0XHRcdG9JbnN0YW5jZSA9IG5ldyBCdWlsZGluZ0Jsb2NrQ2xhc3MocHJvcGVydHlWYWx1ZXMgLyosIG9Db250cm9sQ29uZmlnLCBvU2V0dGluZ3MsIG9BZ2dyZWdhdGlvbnMsIGlzUHVibGljKi8pO1xuXHRcdH1cblx0XHRjb25zdCBvQXR0cmlidXRlc01vZGVsOiBKU09OTW9kZWwgPSBuZXcgQXR0cmlidXRlTW9kZWwob05vZGUsIHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzLCBidWlsZGluZ0JMb2NrRGVmaW5pdGlvbik7XG5cdFx0bUNvbnRleHRzW3NOYW1lXSA9IG9BdHRyaWJ1dGVzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXG5cdFx0bGV0IG9QcmV2aW91c01hY3JvSW5mbzogYW55O1xuXG5cdFx0Ly8gS2VlcCB0cmFja1xuXHRcdGlmIChUcmFjZUluZm8uaXNUcmFjZUluZm9BY3RpdmUoKSkge1xuXHRcdFx0Y29uc3Qgb1RyYWNlSW5mbyA9IFRyYWNlSW5mby50cmFjZU1hY3JvQ2FsbHMoc0ZyYWdtZW50TmFtZSwgb01ldGFkYXRhLCBtQ29udGV4dHMsIG9Ob2RlLCBvVmlzaXRvcik7XG5cdFx0XHRpZiAob1RyYWNlSW5mbykge1xuXHRcdFx0XHRvUHJldmlvdXNNYWNyb0luZm8gPSBvU2V0dGluZ3NbXCJfbWFjcm9JbmZvXCJdO1xuXHRcdFx0XHRvU2V0dGluZ3NbXCJfbWFjcm9JbmZvXCJdID0gb1RyYWNlSW5mby5tYWNyb0luZm87XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHZhbGlkYXRlTWFjcm9TaWduYXR1cmUoc0ZyYWdtZW50TmFtZSwgb01ldGFkYXRhLCBtQ29udGV4dHMsIG9Ob2RlKTtcblxuXHRcdGNvbnN0IG9Db250ZXh0VmlzaXRvciA9IG9WaXNpdG9yLndpdGgoXG5cdFx0XHRtQ29udGV4dHMsXG5cdFx0XHRidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5pc09wZW4gIT09IHVuZGVmaW5lZCA/ICFidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5pc09wZW4gOiB0cnVlXG5cdFx0KTtcblx0XHRjb25zdCBvUGFyZW50ID0gb05vZGUucGFyZW50Tm9kZTtcblxuXHRcdGxldCBpQ2hpbGRJbmRleDogbnVtYmVyO1xuXHRcdGxldCBvUHJvbWlzZTtcblx0XHRpZiAob1BhcmVudCkge1xuXHRcdFx0aUNoaWxkSW5kZXggPSBBcnJheS5mcm9tKG9QYXJlbnQuY2hpbGRyZW4pLmluZGV4T2Yob05vZGUpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdChpc1YxTWFjcm9EZWYoYnVpbGRpbmdCTG9ja0RlZmluaXRpb24pICYmIGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmdldFRlbXBsYXRlKSB8fFxuXHRcdFx0XHRidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5hcGlWZXJzaW9uID09PSAyXG5cdFx0XHQpIHtcblx0XHRcdFx0bGV0IG9UZW1wbGF0ZTtcblx0XHRcdFx0bGV0IGFkZERlZmF1bHROYW1lc3BhY2UgPSBmYWxzZTtcblx0XHRcdFx0aWYgKGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmFwaVZlcnNpb24gPT09IDIpIHtcblx0XHRcdFx0XHRvVGVtcGxhdGUgPSBvSW5zdGFuY2UuZ2V0VGVtcGxhdGUoKTtcblx0XHRcdFx0XHRhZGREZWZhdWx0TmFtZXNwYWNlID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5nZXRUZW1wbGF0ZSkge1xuXHRcdFx0XHRcdG9UZW1wbGF0ZSA9IGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uLmdldFRlbXBsYXRlKHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBoYXNFcnJvciA9IFwiXCI7XG5cdFx0XHRcdGlmIChvVGVtcGxhdGUpIHtcblx0XHRcdFx0XHRpZiAoIW9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCkge1xuXHRcdFx0XHRcdFx0b1RlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob1RlbXBsYXRlLCBhZGREZWZhdWx0TmFtZXNwYWNlKTtcblx0XHRcdFx0XHRcdC8vIEZvciBzYWZldHkgcHVycG9zZSB3ZSB0cnkgdG8gZGV0ZWN0IHRyYWlsaW5nIHRleHQgaW4gYmV0d2VlbiBYTUwgVGFnc1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihvVGVtcGxhdGUsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcblx0XHRcdFx0XHRcdGxldCB0ZXh0bm9kZSA9IGl0ZXIubmV4dE5vZGUoKTtcblx0XHRcdFx0XHRcdHdoaWxlICh0ZXh0bm9kZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGV4dG5vZGUudGV4dENvbnRlbnQgJiYgdGV4dG5vZGUudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRoYXNFcnJvciA9IHRleHRub2RlLnRleHRDb250ZW50O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRleHRub2RlID0gaXRlci5uZXh0Tm9kZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChvVGVtcGxhdGUubG9jYWxOYW1lID09PSBcInBhcnNlcmVycm9yXCIpIHtcblx0XHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIGEgcGFyc2VlcnJvciB3aGlsZSBwcm9jZXNzaW5nIHRoZSBYTUwgaXQgbWVhbnMgdGhlIFhNTCBpdHNlbGYgaXMgbWFsZm9ybWVkLCBhcyBzdWNoIHdlIHJlcnVuIHRoZSB0ZW1wbGF0ZSBwcm9jZXNzXG5cdFx0XHRcdFx0XHQvLyBTZXR0aW5nIGlzVHJhY2VNb2RlIHRydWUgd2lsbCBtYWtlIGl0IHNvIHRoYXQgZWFjaCB4bWxgIGV4cHJlc3Npb24gaXMgY2hlY2tlZCBmb3IgdmFsaWRpdHkgZnJvbSBYTUwgcGVyc3BlY3RpdmUgYW5kIGlmIGFuIGVycm9yIGlzIGZvdW5kIGl0J3MgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGZyYWdtZW50XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgYnVpbGRpbmcgYmxvY2sgJHtidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5uYW1lfWApO1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0aXNUcmFjZU1vZGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRvVGVtcGxhdGUgPSBvSW5zdGFuY2U/LmdldFRlbXBsYXRlXG5cdFx0XHRcdFx0XHRcdFx0PyBvSW5zdGFuY2UuZ2V0VGVtcGxhdGUoKVxuXHRcdFx0XHRcdFx0XHRcdDogKGJ1aWxkaW5nQkxvY2tEZWZpbml0aW9uIGFzIGFueSkuZ2V0VGVtcGxhdGUocHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMpO1xuXHRcdFx0XHRcdFx0XHRvVGVtcGxhdGUgPSBwYXJzZVhNTFN0cmluZyhvVGVtcGxhdGUsIHRydWUpO1xuXHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0aXNUcmFjZU1vZGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKGhhc0Vycm9yLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIHRyYWlsaW5nIHRleHQgd2UgY3JlYXRlIGEgc3RhbmRhcmQgZXJyb3IgYW5kIGRpc3BsYXkgaXQuXG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgYnVpbGRpbmcgYmxvY2sgJHtidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5uYW1lfWApO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0Vycm9yVGV4dCA9IGNyZWF0ZUVycm9yWE1MKFxuXHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0YEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgYnVpbGRpbmcgYmxvY2sgJHtidWlsZGluZ0JMb2NrRGVmaW5pdGlvbi5uYW1lfWAsXG5cdFx0XHRcdFx0XHRcdFx0YFRyYWlsaW5nIHRleHQgd2FzIGZvdW5kIGluIHRoZSBYTUw6ICR7aGFzRXJyb3J9YFxuXHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRvVGVtcGxhdGUub3V0ZXJIVE1MXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0b1RlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob0Vycm9yVGV4dCwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9Ob2RlLnJlcGxhY2VXaXRoKG9UZW1wbGF0ZSk7XG5cdFx0XHRcdFx0b05vZGUgPSBvUGFyZW50LmNoaWxkcmVuW2lDaGlsZEluZGV4XTtcblx0XHRcdFx0XHRvUHJvbWlzZSA9IG9Db250ZXh0VmlzaXRvci52aXNpdE5vZGUob05vZGUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9Ob2RlLnJlbW92ZSgpO1xuXHRcdFx0XHRcdG9Qcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Qcm9taXNlID0gb0NvbnRleHRWaXNpdG9yLmluc2VydEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9Ob2RlKTtcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgb1Byb21pc2U7XG5cdFx0XHRjb25zdCBvTWFjcm9FbGVtZW50ID0gb1BhcmVudC5jaGlsZHJlbltpQ2hpbGRJbmRleF07XG5cblx0XHRcdGlmIChPYmplY3Qua2V5cyhvQWdncmVnYXRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdE9iamVjdC5rZXlzKG9BZ2dyZWdhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHNBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRcdGNvbnN0IG9BZ2dyZWdhdGlvbkVsZW1lbnQgPSBvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0XHRcdGlmIChvTWFjcm9FbGVtZW50ICE9PSBudWxsICYmIG9NYWNyb0VsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb05ld0NoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG9NYWNyb0VsZW1lbnQubmFtZXNwYWNlVVJJLCBzQWdncmVnYXRpb25OYW1lKTtcblx0XHRcdFx0XHRcdGxldCBvRWxlbWVudENoaWxkID0gb0FnZ3JlZ2F0aW9uRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0XHRcdHdoaWxlIChvRWxlbWVudENoaWxkKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXh0Q2hpbGQgPSBvRWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdFx0XHRcdFx0b05ld0NoaWxkLmFwcGVuZENoaWxkKG9FbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdFx0XHRvRWxlbWVudENoaWxkID0gb05leHRDaGlsZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lICE9PSBcImN1c3RvbURhdGFcIiAmJiBzQWdncmVnYXRpb25OYW1lICE9PSBcImRlcGVuZGVudHNcIikge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzU2xvdE5hbWUgPVxuXHRcdFx0XHRcdFx0XHRcdChvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdICYmIG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV0uc2xvdCkgfHxcblx0XHRcdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0RWxlbWVudCA9IG9NYWNyb0VsZW1lbnQucXVlcnlTZWxlY3Rvcihgc2xvdFtuYW1lPScke3NTbG90TmFtZX0nXWApIGFzIEVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdGlmIChvVGFyZ2V0RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRFbGVtZW50LnJlcGxhY2VXaXRoKC4uLihvTmV3Q2hpbGQuY2hpbGRyZW4gYXMgYW55KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG9NYWNyb0VsZW1lbnQuYXBwZW5kQ2hpbGQob05ld0NoaWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9NYWNyb0VsZW1lbnQpIHtcblx0XHRcdFx0Y29uc3Qgb1JlbWFpbmluZ1Nsb3RzID0gb01hY3JvRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic2xvdFwiKTtcblx0XHRcdFx0b1JlbWFpbmluZ1Nsb3RzLmZvckVhY2goZnVuY3Rpb24gKG9TbG90RWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0b1Nsb3RFbGVtZW50LnJlbW92ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG9QcmV2aW91c01hY3JvSW5mbykge1xuXHRcdFx0Ly9yZXN0b3JlIG1hY3JvIGluZm8gaWYgYXZhaWxhYmxlXG5cdFx0XHRvU2V0dGluZ3NbXCJfbWFjcm9JbmZvXCJdID0gb1ByZXZpb3VzTWFjcm9JbmZvO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxldGUgb1NldHRpbmdzW1wiX21hY3JvSW5mb1wiXTtcblx0XHR9XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIGEgZ2VuZXJpYyBlcnJvciAodXN1YWxseSBjb2RlIGVycm9yKSwgd2UgcmV0cmlldmUgdGhlIGN1cnJlbnQgY29udGV4dCBpbmZvcm1hdGlvbiBhbmQgY3JlYXRlIGEgZGVkaWNhdGVkIGVycm9yIG1lc3NhZ2Vcblx0XHRjb25zdCB0cmFjZURldGFpbHMgPSB7XG5cdFx0XHRpbml0aWFsUHJvcGVydGllczoge30gYXMgYW55LFxuXHRcdFx0cmVzb2x2ZWRQcm9wZXJ0aWVzOiB7fSBhcyBhbnksXG5cdFx0XHRtaXNzaW5nQ29udGV4dHM6IG1NaXNzaW5nQ29udGV4dFxuXHRcdH07XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgaW5pdGlhbEtleXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgcHJvcGVydHlWYWx1ZS5pc0EgJiYgcHJvcGVydHlWYWx1ZS5pc0EoXCJzYXAudWkubW9kZWwuQ29udGV4dFwiKSkge1xuXHRcdFx0XHR0cmFjZURldGFpbHMuaW5pdGlhbFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHtcblx0XHRcdFx0XHRwYXRoOiBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKSxcblx0XHRcdFx0XHR2YWx1ZTogcHJvcGVydHlWYWx1ZS5nZXRPYmplY3QoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJhY2VEZXRhaWxzLmluaXRpYWxQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0eVZhbHVlcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRpZiAoIWluaXRpYWxLZXlzLmluY2x1ZGVzKHByb3BlcnR5TmFtZSkpIHtcblx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgcHJvcGVydHlWYWx1ZS5pc0EgJiYgcHJvcGVydHlWYWx1ZS5pc0EoXCJzYXAudWkubW9kZWwuQ29udGV4dFwiKSkge1xuXHRcdFx0XHRcdHRyYWNlRGV0YWlscy5yZXNvbHZlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHtcblx0XHRcdFx0XHRcdHBhdGg6IHByb3BlcnR5VmFsdWUuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHByb3BlcnR5VmFsdWUuZ2V0T2JqZWN0KClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRyYWNlRGV0YWlscy5yZXNvbHZlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgZXJyb3JBbnkgPSBlIGFzIGFueTtcblx0XHRMb2cuZXJyb3IoZXJyb3JBbnksIGVycm9yQW55KTtcblx0XHRjb25zdCBvRXJyb3IgPSBjcmVhdGVFcnJvclhNTChcblx0XHRcdFtgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke2J1aWxkaW5nQkxvY2tEZWZpbml0aW9uLm5hbWV9YCwgZXJyb3JBbnkuc3RhY2tdLFxuXHRcdFx0b05vZGUub3V0ZXJIVE1MLFxuXHRcdFx0dHJhY2VEZXRhaWxzXG5cdFx0KTtcblx0XHRjb25zdCBvVGVtcGxhdGUgPSBwYXJzZVhNTFN0cmluZyhvRXJyb3IsIHRydWUpO1xuXHRcdG9Ob2RlLnJlcGxhY2VXaXRoKG9UZW1wbGF0ZSBhcyBhbnkpO1xuXHR9XG59XG5mdW5jdGlvbiBhZGRTaW5nbGVDb250ZXh0KG1Db250ZXh0czogYW55LCBvVmlzaXRvcjogYW55LCBvQ3R4OiBhbnksIG9NZXRhZGF0YUNvbnRleHRzOiBhbnkpIHtcblx0Y29uc3Qgc0tleSA9IG9DdHgubmFtZSB8fCBvQ3R4Lm1vZGVsIHx8IHVuZGVmaW5lZDtcblxuXHRpZiAob01ldGFkYXRhQ29udGV4dHNbc0tleV0pIHtcblx0XHRyZXR1cm47IC8vIGRvIG5vdCBhZGQgdHdpY2Vcblx0fVxuXHR0cnkge1xuXHRcdGxldCBzQ29udGV4dFBhdGggPSBvQ3R4LnBhdGg7XG5cdFx0aWYgKG9DdHgubW9kZWwgIT0gbnVsbCkge1xuXHRcdFx0c0NvbnRleHRQYXRoID0gYCR7b0N0eC5tb2RlbH0+JHtzQ29udGV4dFBhdGh9YDtcblx0XHR9XG5cdFx0Y29uc3QgbVNldHRpbmcgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXHRcdGlmICghbVNldHRpbmcuYmluZGluZ0NvbnRleHRzW29DdHgubW9kZWxdICYmIG1TZXR0aW5nLm1vZGVsc1tvQ3R4Lm1vZGVsXSkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWxdLmdldENvbnRleHQob0N0eC5wYXRoKTsgLy8gYWRkIHRoZSBjb250ZXh0IHRvIHRoZSB2aXNpdG9yXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1Db250ZXh0c1tzS2V5XSA9IG9WaXNpdG9yLmdldENvbnRleHQoc0NvbnRleHRQYXRoKTsgLy8gYWRkIHRoZSBjb250ZXh0IHRvIHRoZSB2aXNpdG9yXG5cdFx0fVxuXG5cdFx0b01ldGFkYXRhQ29udGV4dHNbc0tleV0gPSBtQ29udGV4dHNbc0tleV07IC8vIG1ha2UgaXQgYXZhaWxhYmxlIGluc2lkZSBtZXRhZGF0YUNvbnRleHRzIEpTT04gb2JqZWN0XG5cdH0gY2F0Y2ggKGV4KSB7XG5cdFx0Ly9jb25zb2xlLmVycm9yKGV4KTtcblx0XHQvLyBpZ25vcmUgdGhlIGNvbnRleHQgYXMgdGhpcyBjYW4gb25seSBiZSB0aGUgY2FzZSBpZiB0aGUgbW9kZWwgaXMgbm90IHJlYWR5LCBpLmUuIG5vdCBhIHByZXByb2Nlc3NpbmcgbW9kZWwgYnV0IG1heWJlIGEgbW9kZWwgZm9yXG5cdFx0Ly8gcHJvdmlkaW5nIGFmdGVyd2FyZHNcblx0XHQvLyBUT0RPIDAwMDIgbm90IHlldCBpbXBsZW1lbnRlZFxuXHRcdC8vbUNvbnRleHRzW1wiXyRlcnJvclwiXS5vTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBzS2V5LCBleCk7XG5cdH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGJ1aWxkaW5nIGJsb2NrIGRlZmluaXRpb24gdG8gYmUgdXNlZCBpbnNpZGUgdGhlIHhtbCB0ZW1wbGF0ZSBwcm9jZXNzb3IuXG4gKlxuICogQHBhcmFtIGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uIFRoZSBidWlsZGluZyBibG9jayBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckJ1aWxkaW5nQmxvY2soYnVpbGRpbmdCbG9ja0RlZmluaXRpb246IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uKTogdm9pZCB7XG5cdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0KG9Ob2RlOiBFbGVtZW50LCBvVmlzaXRvcjogSUNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiwgb05vZGUsIG9WaXNpdG9yKSxcblx0XHRidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lc3BhY2UsXG5cdFx0YnVpbGRpbmdCbG9ja0RlZmluaXRpb24ueG1sVGFnIHx8IGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWVcblx0KTtcblx0aWYgKGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLnB1YmxpY05hbWVzcGFjZSkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHQob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJQ2FsbGJhY2spID0+IHByb2Nlc3NCdWlsZGluZ0Jsb2NrKGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLCBvTm9kZSwgb1Zpc2l0b3IsIHRydWUpLFxuXHRcdFx0YnVpbGRpbmdCbG9ja0RlZmluaXRpb24ucHVibGljTmFtZXNwYWNlLFxuXHRcdFx0YnVpbGRpbmdCbG9ja0RlZmluaXRpb24ueG1sVGFnIHx8IGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWVcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yWE1MKGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdLCB4bWxGcmFnbWVudDogc3RyaW5nLCBhZGRpdGlvbmFsRGF0YT86IG9iamVjdCk6IHN0cmluZyB7XG5cdGNvbnN0IGVycm9yTGFiZWxzID0gZXJyb3JNZXNzYWdlcy5tYXAoKGVycm9yTWVzc2FnZSkgPT4geG1sYDxtOkxhYmVsIHRleHQ9XCIke2VzY2FwZVhNTChlcnJvck1lc3NhZ2UpfVwiLz5gKTtcblx0bGV0IGFkZGl0aW9uYWxUZXh0ID0gXCJcIjtcblx0aWYgKGFkZGl0aW9uYWxEYXRhKSB7XG5cdFx0YWRkaXRpb25hbFRleHQgPSB4bWxgPG06VkJveD5cblx0XHRcdFx0XHRcdDxtOkxhYmVsIHRleHQ9XCJUcmFjZSBJbmZvXCIvPlxuXHRcdFx0XHRcdFx0PGNvZGU6Q29kZUVkaXRvciB0eXBlPVwianNvblwiIHZhbHVlPVwiJHtlc2NhcGVYTUwoSlNPTi5zdHJpbmdpZnkoYWRkaXRpb25hbERhdGEsIG51bGwsIDQpKX1cIiBoZWlnaHQ9XCIzMDBweFwiIHdpZHRoPVwiMTAwdmhcIi8+XG5cdFx0XHRcdFx0PC9tOlZCb3g+YDtcblx0fVxuXHRyZXR1cm4geG1sYDxtOlZCb3ggeG1sbnM6bT1cInNhcC5tXCIgeG1sbnM6Y29kZT1cInNhcC51aS5jb2RlZWRpdG9yXCI+XG5cdFx0XHRcdCR7ZXJyb3JMYWJlbHN9XG5cdFx0XHRcdDxtOkhCb3g+XG5cdFx0XHRcdFx0PG06VkJveD5cblx0XHRcdFx0XHRcdDxtOkxhYmVsIHRleHQ9XCJIb3cgdGhlIGJ1aWxkaW5nIGJsb2NrIHdhcyBjYWxsZWRcIi8+XG5cdFx0XHRcdFx0XHQ8Y29kZTpDb2RlRWRpdG9yIHR5cGU9XCJ4bWxcIiB2YWx1ZT1cIiR7ZXNjYXBlWE1MKHhtbEZyYWdtZW50KX1cIiBoZWlnaHQ9XCIzMDBweFwiIHdpZHRoPVwiMTAwdmhcIi8+XG5cdFx0XHRcdFx0PC9tOlZCb3g+XG5cdFx0XHRcdFx0JHthZGRpdGlvbmFsVGV4dH1cblx0XHRcdFx0PC9tOkhCb3g+XG5cdFx0XHQ8L206VkJveD5gO1xufVxuXG5jb25zdCBteVN0b3JlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5mdW5jdGlvbiBzdG9yZVZhbHVlKHZhbHVlczogYW55KSB7XG5cdGNvbnN0IHByb3BlcnR5VUlEID0gYHVpZC0tJHt1aWQoKX1gO1xuXHRteVN0b3JlW3Byb3BlcnR5VUlEXSA9IHZhbHVlcztcblx0cmV0dXJuIHByb3BlcnR5VUlEO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIFhNTCBzdHJpbmcgYW5kIHJldHVybiB0aGUgYXNzb2NpYXRlZCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0geG1sU3RyaW5nIFRoZSB4bWwgc3RyaW5nXG4gKiBAcGFyYW0gYWRkRGVmYXVsdE5hbWVzcGFjZXMgV2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGFkZCBkZWZhdWx0IG5hbWVzcGFjZVxuICogQHJldHVybnMgVGhlIFhNTCBkb2N1bWVudC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VYTUxTdHJpbmcoeG1sU3RyaW5nOiBzdHJpbmcsIGFkZERlZmF1bHROYW1lc3BhY2VzID0gZmFsc2UpOiBFbGVtZW50IHtcblx0aWYgKGFkZERlZmF1bHROYW1lc3BhY2VzKSB7XG5cdFx0eG1sU3RyaW5nID0gYDx0ZW1wbGF0ZVxuXHRcdFx0XHRcdFx0eG1sbnM6dGVtcGxhdGU9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUudGVtcGxhdGUvMVwiXG5cdFx0XHRcdFx0XHR4bWxuczptPVwic2FwLm1cIlxuXHRcdFx0XHRcdFx0eG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCJcblx0XHRcdFx0XHRcdHhtbG5zOmN1c3RvbURhdGE9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCI+JHt4bWxTdHJpbmd9PC90ZW1wbGF0ZT5gO1xuXHR9XG5cdGNvbnN0IHhtbERvY3VtZW50ID0gRE9NUGFyc2VySW5zdGFuY2UucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0bGV0IG91dHB1dCA9IHhtbERvY3VtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHR3aGlsZSAob3V0cHV0Py5sb2NhbE5hbWUgPT09IFwidGVtcGxhdGVcIikge1xuXHRcdG91dHB1dCA9IG91dHB1dC5maXJzdEVsZW1lbnRDaGlsZDtcblx0fVxuXHRyZXR1cm4gb3V0cHV0IGFzIEVsZW1lbnQ7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuIFhNTCBzdHJpbmcgdG8gaW5jbHVkZSBpdCBpbiBhbiBYTUwgZnJhZ21lbnQuXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGVzY2FwZVxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlc2NhcGVYTUwoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gc3RyXG5cdFx0LnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuXHRcdC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKVxuXHRcdC5yZXBsYWNlKC9cXG4vZywgXCImIzEwO1wiKVxuXHRcdC5yZXBsYWNlKC9cXHsvZywgXCJcXFxce1wiKVxuXHRcdC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKVxuXHRcdC5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKVxuXHRcdC5yZXBsYWNlKC8nL2csIFwiJmFwb3M7XCIpO1xufVxuXG4vKipcbiAqIEVzY2FwZSBhbiBYTUwgYXR0cmlidXRlIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB2YWwgVGhlIGF0dHJpYnV0ZSB2YWx1ZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHZhbC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLCBcIiZsdDtcIik7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZW1wbGF0ZSBsaXRlcmFsIHdoaWxlIGhhbmRsaW5nIHNwZWNpYWwgb2JqZWN0IGNhc2UuXG4gKlxuICogQHBhcmFtIHN0cmluZ3MgVGhlIHN0cmluZyBwYXJ0cyBvZiB0aGUgdGVtcGxhdGUgbGl0ZXJhbFxuICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIHBhcnQgb2YgdGhlIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGRvY3VtZW50IHJlcHJlc2VudGluZyB0aGUgc3RyaW5nIHRoYXQgd2FzIHVzZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB4bWwgPSAoc3RyaW5nczogVGVtcGxhdGVTdHJpbmdzQXJyYXksIC4uLnZhbHVlczogYW55W10pID0+IHtcblx0bGV0IG91dFN0ciA9IFwiXCI7XG5cdGxldCBpO1xuXHRmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b3V0U3RyICs9IHN0cmluZ3NbaV07XG5cdFx0Ly8gSGFuZGxlIHRoZSBkaWZmZXJlbnQgY2FzZSBvZiBvYmplY3QsIGlmIGl0J3MgYW4gYXJyYXkgd2Ugam9pbiB0aGVtLCBpZiBpdCdzIGEgYmluZGluZyBleHByZXNzaW9uIChkZXRlcm1pbmVkIGJ5IF90eXBlKSB0aGVuIHdlIGNvbXBpbGUgaXQuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWVzW2ldKSkge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlc1tpXS5mbGF0KDUpLmpvaW4oXCJcIikudHJpbSgpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWVzW2ldPy5fdHlwZSkge1xuXHRcdFx0Y29uc3QgY29tcGlsZWRFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWVzW2ldKTtcblx0XHRcdG91dFN0ciArPSBjb21waWxlZEV4cHJlc3Npb24gIT09IHVuZGVmaW5lZCA/IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKGNvbXBpbGVkRXhwcmVzc2lvbikgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZXNbaV0/LmdldFRlbXBsYXRlKSB7XG5cdFx0XHRvdXRTdHIgKz0gdmFsdWVzW2ldLmdldFRlbXBsYXRlKCk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWVzW2ldID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVVJZCA9IHN0b3JlVmFsdWUodmFsdWVzW2ldKTtcblx0XHRcdG91dFN0ciArPSBgJHtwcm9wZXJ0eVVJZH1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRTdHIgKz0gdmFsdWVzW2ldO1xuXHRcdH1cblx0fVxuXHRvdXRTdHIgKz0gc3RyaW5nc1tpXTtcblx0b3V0U3RyID0gb3V0U3RyLnRyaW0oKTtcblx0aWYgKGlzVHJhY2VNb2RlKSB7XG5cdFx0Y29uc3QgeG1sUmVzdWx0ID0gcGFyc2VYTUxTdHJpbmcob3V0U3RyLCB0cnVlKTtcblx0XHRpZiAoeG1sUmVzdWx0ICYmIHhtbFJlc3VsdD8ubG9jYWxOYW1lID09PSBcInBhcnNlcmVycm9yXCIpIHtcblx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9ICh4bWxSZXN1bHQgYXMgYW55KS5pbm5lclRleHQgfHwgKHhtbFJlc3VsdCBhcyBhbnkpLmlubmVySFRNTDtcblx0XHRcdHJldHVybiBjcmVhdGVFcnJvclhNTChbZXJyb3JNZXNzYWdlLnNwbGl0KFwiXFxuXCIpWzBdXSwgb3V0U3RyKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG91dFN0cjtcbn07XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
2
|
import uid from "sap/base/util/uid";
|
|
3
3
|
import AttributeModel from "sap/fe/core/buildingBlocks/AttributeModel";
|
|
4
|
-
import {
|
|
4
|
+
import type {
|
|
5
5
|
BuildingBlockAggregationDefinition,
|
|
6
6
|
BuildingBlockBase,
|
|
7
7
|
BuildingBlockDefinition,
|
|
@@ -10,12 +10,12 @@ import {
|
|
|
10
10
|
BuildingBlockMetadataContextDefinition,
|
|
11
11
|
BuildingBlockPropertyDefinition
|
|
12
12
|
} from "sap/fe/core/buildingBlocks/BuildingBlock";
|
|
13
|
-
import {
|
|
13
|
+
import { compileExpression } from "sap/fe/core/helpers/BindingToolkit";
|
|
14
14
|
import ResourceModel from "sap/fe/macros/ResourceModel";
|
|
15
15
|
import BindingParser from "sap/ui/base/BindingParser";
|
|
16
16
|
import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
|
|
17
|
-
import Context from "sap/ui/model/Context";
|
|
18
|
-
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
17
|
+
import type Context from "sap/ui/model/Context";
|
|
18
|
+
import type JSONModel from "sap/ui/model/json/JSONModel";
|
|
19
19
|
import TraceInfo from "./TraceInfo";
|
|
20
20
|
|
|
21
21
|
const LOGGER_SCOPE = "sap.fe.core.buildingBlocks.BuildingBlockRuntime";
|
|
@@ -43,7 +43,7 @@ type ICallback = {
|
|
|
43
43
|
* @returns {sap.ui.base.SyncPromise}
|
|
44
44
|
* A thenable which resolves with <code>undefined</code> as soon as visiting
|
|
45
45
|
* is done, or is rejected with a corresponding error if visiting fails
|
|
46
|
-
|
|
46
|
+
*/
|
|
47
47
|
visitNode(oNode: Node): Promise<void>;
|
|
48
48
|
|
|
49
49
|
/**
|
|
@@ -70,6 +70,7 @@ type ICallback = {
|
|
|
70
70
|
/**
|
|
71
71
|
* Interprets the given XML DOM attribute value as a binding and returns the
|
|
72
72
|
* resulting value.
|
|
73
|
+
*
|
|
73
74
|
* @param {string} sValue
|
|
74
75
|
* An XML DOM attribute value
|
|
75
76
|
* @param {Element} [oElement]
|
|
@@ -171,7 +172,7 @@ export function validateMacroSignature(sName: any, oMetadata: any, mContexts: an
|
|
|
171
172
|
const oPropertySettings = oMetadata.properties[sKey];
|
|
172
173
|
if (!oNode.hasAttribute(sKey)) {
|
|
173
174
|
if (oPropertySettings.required && !oPropertySettings.hasOwnProperty("defaultValue")) {
|
|
174
|
-
throw new Error(sName
|
|
175
|
+
throw new Error(`${sName}: ` + `Required property '${sKey}' is missing`);
|
|
175
176
|
}
|
|
176
177
|
} else {
|
|
177
178
|
delete oAttributeNames[sKey];
|
|
@@ -265,7 +266,7 @@ function _getMetadataContext(
|
|
|
265
266
|
if (!oMetadataContext) {
|
|
266
267
|
if (sAttributeValue.startsWith("uid--")) {
|
|
267
268
|
const oData = myStore[sAttributeValue];
|
|
268
|
-
const sContextPath =
|
|
269
|
+
const sContextPath = `/${sAttributeValue}`;
|
|
269
270
|
oSettings.models.converterContext.setProperty(sContextPath, oData);
|
|
270
271
|
oMetadataContext = {
|
|
271
272
|
model: "converterContext",
|
|
@@ -606,7 +607,7 @@ async function processBuildingBlock(
|
|
|
606
607
|
const sSlotName =
|
|
607
608
|
(oMetadata.aggregations[sAggregationName] && oMetadata.aggregations[sAggregationName].slot) ||
|
|
608
609
|
sAggregationName;
|
|
609
|
-
const oTargetElement = oMacroElement.querySelector(
|
|
610
|
+
const oTargetElement = oMacroElement.querySelector(`slot[name='${sSlotName}']`) as Element;
|
|
610
611
|
if (oTargetElement) {
|
|
611
612
|
oTargetElement.replaceWith(...(oNewChild.children as any));
|
|
612
613
|
}
|
|
@@ -680,7 +681,7 @@ function addSingleContext(mContexts: any, oVisitor: any, oCtx: any, oMetadataCon
|
|
|
680
681
|
try {
|
|
681
682
|
let sContextPath = oCtx.path;
|
|
682
683
|
if (oCtx.model != null) {
|
|
683
|
-
sContextPath = oCtx.model
|
|
684
|
+
sContextPath = `${oCtx.model}>${sContextPath}`;
|
|
684
685
|
}
|
|
685
686
|
const mSetting = oVisitor.getSettings();
|
|
686
687
|
if (!mSetting.bindingContexts[oCtx.model] && mSetting.models[oCtx.model]) {
|
|
@@ -813,7 +814,7 @@ export const xml = (strings: TemplateStringsArray, ...values: any[]) => {
|
|
|
813
814
|
if (Array.isArray(values[i])) {
|
|
814
815
|
outStr += values[i].flat(5).join("").trim();
|
|
815
816
|
} else if (values[i]?._type) {
|
|
816
|
-
const compiledExpression =
|
|
817
|
+
const compiledExpression = compileExpression(values[i]);
|
|
817
818
|
outStr += compiledExpression !== undefined ? escapeXMLAttributeValue(compiledExpression) : undefined;
|
|
818
819
|
} else if (values[i]?.getTemplate) {
|
|
819
820
|
outStr += values[i].getTemplate();
|