@openui5/sap.ui.integration 1.96.2 → 1.98.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/.reuse/dep5 +26 -31
- package/THIRDPARTY.txt +15 -21
- package/package.json +3 -3
- package/src/sap/ui/integration/.library +16 -22
- package/src/sap/ui/integration/ActionDefinition.js +2 -2
- package/src/sap/ui/integration/Designtime.js +2 -2
- package/src/sap/ui/integration/Extension.js +2 -2
- package/src/sap/ui/integration/Host.js +38 -2
- package/src/sap/ui/integration/bindingFeatures/DateRange.js +1 -1
- package/src/sap/ui/integration/cards/AdaptiveContent.js +16 -50
- package/src/sap/ui/integration/cards/AnalyticalContent.js +8 -9
- package/src/sap/ui/integration/cards/AnalyticalContentRenderer.js +1 -1
- package/src/sap/ui/integration/cards/AnalyticsCloudContent.js +5 -3
- package/src/sap/ui/integration/cards/AnalyticsCloudContentRenderer.js +1 -1
- package/src/sap/ui/integration/cards/BaseContent.js +56 -6
- package/src/sap/ui/integration/cards/BaseContentRenderer.js +2 -2
- package/src/sap/ui/integration/cards/BaseListContent.js +39 -69
- package/src/sap/ui/integration/cards/CalendarContent.js +16 -12
- package/src/sap/ui/integration/cards/CalendarContentRenderer.js +2 -1
- package/src/sap/ui/integration/cards/ComponentContent.js +3 -2
- package/src/sap/ui/integration/cards/ComponentContentRenderer.js +1 -1
- package/src/sap/ui/integration/cards/Footer.js +2 -2
- package/src/sap/ui/integration/cards/Header.js +3 -3
- package/src/sap/ui/integration/cards/ListContent.js +67 -23
- package/src/sap/ui/integration/cards/ListContentRenderer.js +1 -1
- package/src/sap/ui/integration/cards/NumericHeader.js +3 -3
- package/src/sap/ui/integration/cards/ObjectContent.js +353 -228
- package/src/sap/ui/integration/cards/ObjectContentRenderer.js +28 -0
- package/src/sap/ui/integration/cards/TableContent.js +6 -10
- package/src/sap/ui/integration/cards/TableContentRenderer.js +1 -1
- package/src/sap/ui/integration/cards/TimelineContent.js +10 -14
- package/src/sap/ui/integration/cards/TimelineContentRenderer.js +1 -1
- package/src/sap/ui/integration/cards/WebPageContent.js +6 -2
- package/src/sap/ui/integration/cards/WebPageContentRenderer.js +1 -1
- package/src/sap/ui/integration/cards/actions/BaseAction.js +89 -0
- package/src/sap/ui/integration/cards/actions/CardActions.js +472 -0
- package/src/sap/ui/integration/cards/actions/CustomAction.js +31 -0
- package/src/sap/ui/integration/cards/actions/DateChangeAction.js +20 -0
- package/src/sap/ui/integration/cards/actions/MonthChangeAction.js +20 -0
- package/src/sap/ui/integration/cards/actions/NavigationAction.js +63 -0
- package/src/sap/ui/integration/cards/actions/SubmitAction.js +89 -0
- package/src/sap/ui/integration/cards/adaptivecards/elements/UI5InputChoiceSet.js +10 -10
- package/src/sap/ui/integration/cards/adaptivecards/elements/UI5InputDate.js +3 -3
- package/src/sap/ui/integration/cards/adaptivecards/elements/UI5InputNumber.js +7 -12
- package/src/sap/ui/integration/cards/adaptivecards/elements/UI5InputText.js +2 -2
- package/src/sap/ui/integration/cards/adaptivecards/elements/UI5InputTime.js +2 -2
- package/src/sap/ui/integration/cards/adaptivecards/elements/UI5InputToggle.js +3 -3
- package/src/sap/ui/integration/cards/adaptivecards/elements/hostConfig.js +1 -1
- package/src/sap/ui/integration/cards/adaptivecards/overwrites/ActionRender.js +1 -1
- package/src/sap/ui/integration/cards/filters/BaseFilter.js +2 -2
- package/src/sap/ui/integration/cards/filters/DateRangeFilter.js +63 -58
- package/src/sap/ui/integration/cards/filters/FilterBar.js +91 -0
- package/src/sap/ui/integration/cards/filters/FilterBarFactory.js +34 -13
- package/src/sap/ui/integration/cards/filters/SearchFilter.js +95 -0
- package/src/sap/ui/integration/cards/filters/SelectFilter.js +34 -4
- package/src/sap/ui/integration/controls/ActionsStrip.js +3 -3
- package/src/sap/ui/integration/controls/ActionsToolbar.js +4 -5
- package/src/sap/ui/integration/controls/ActionsToolbarRenderer.js +1 -1
- package/src/sap/ui/integration/controls/ListContentItem.js +2 -2
- package/src/sap/ui/integration/controls/ListContentItemRenderer.js +1 -1
- package/src/sap/ui/integration/controls/Microchart.js +2 -2
- package/src/sap/ui/integration/controls/MicrochartLegend.js +2 -2
- package/src/sap/ui/integration/controls/MicrochartLegendRenderer.js +1 -1
- package/src/sap/ui/integration/customElements/CustomElementBase.js +1 -1
- package/src/sap/ui/integration/customElements/CustomElementCard.js +1 -1
- package/src/sap/ui/integration/customElements/CustomElementCardEditor.js +1 -1
- package/src/sap/ui/integration/customElements/CustomElementEditor.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/BaseEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/PropertyEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/PropertyEditors.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/i18n/i18n_en_US_sappsd.properties +15 -11
- package/src/sap/ui/integration/designtime/baseEditor/i18n/i18n_en_US_saprigi.properties +13 -19
- package/src/sap/ui/integration/designtime/baseEditor/i18n/i18n_en_US_saptrc.properties +16 -12
- package/src/sap/ui/integration/designtime/baseEditor/layout/Form.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/BasePropertyEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/PropertyEditorFactory.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/arrayEditor/ArrayEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/booleanEditor/BooleanEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/dateEditor/DateEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/dateTimeEditor/DateTimeEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/enumStringEditor/EnumStringEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/groupEditor/GroupEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/iconEditor/IconEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/iconEditor/IsInIconPool.validator.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/integerEditor/IntegerEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/jsonEditor/JsonEditor.fragment.xml +1 -0
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/jsonEditor/JsonEditor.js +7 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/listEditor/ListEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/mapEditor/MapEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/multiSelectEditor/MultiSelectEditor.fragment.xml +15 -0
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/multiSelectEditor/MultiSelectEditor.js +116 -0
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/numberEditor/NumberEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/selectEditor/SelectEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/separatorEditor/SeparatorEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/stringEditor/StringEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/propertyEditor/textAreaEditor/TextAreaEditor.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/util/BaseDefaultValidatorModules.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/util/StylesheetManager.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/util/binding/ObjectBinding.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/util/binding/resolveBinding.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/util/cleanupDesigntimeMetadata.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/util/createPromise.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/util/escapeParameter.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/util/findClosestInstance.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/util/hasTag.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/util/isTemplate.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/util/isValidBindingString.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/util/unset.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/IsBoolean.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/IsDate.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/IsInteger.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/IsNumber.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/IsPatternMatch.js +1 -1
- package/src/sap/ui/integration/designtime/baseEditor/validator/IsSelectedKey.js +18 -3
- package/src/sap/ui/integration/designtime/baseEditor/validator/IsStringList.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/IsUniqueKey.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/IsUniqueList.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/IsValidBinding.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/MaxLength.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/NotABinding.js +2 -2
- package/src/sap/ui/integration/designtime/baseEditor/validator/ValidatorRegistry.js +2 -2
- package/src/sap/ui/integration/designtime/cardEditor/BASEditor.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/CardEditor.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/PropertyEditor.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/PropertyEditors.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/config/AppConfig.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/config/HeaderConfig.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/config/ListCardConfig.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/config/ObjectCardConfig.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/config/TableCardConfig.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/config/generateActionConfig.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/config/generateDataConfig.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/config/index.js +13 -2
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n.properties +57 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_ar.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_bg.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_ca.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_cs.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_cy.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_da.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_de.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_el.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_en.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_en_GB.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_en_US_sappsd.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_en_US_saprigi.properties +0 -4
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_en_US_saptrc.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_es.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_es_MX.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_et.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_fi.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_fr.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_fr_CA.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_hi.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_hr.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_hu.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_id.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_it.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_iw.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_ja.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_kk.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_ko.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_lt.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_lv.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_ms.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_nl.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_no.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_pl.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_pt.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_pt_PT.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_ro.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_ru.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_sh.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_sk.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_sl.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_sv.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_th.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_tr.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_uk.properties +41 -1
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_vi.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_zh_CN.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/i18n/i18n_zh_TW.properties +40 -0
- package/src/sap/ui/integration/designtime/cardEditor/propertyEditor/complexMapEditor/ComplexMapEditor.js +62 -4
- package/src/sap/ui/integration/designtime/cardEditor/propertyEditor/destinationsEditor/DestinationsEditor.js +2 -2
- package/src/sap/ui/integration/designtime/cardEditor/propertyEditor/filtersEditor/FiltersEditor.js +218 -0
- package/src/sap/ui/integration/designtime/cardEditor/propertyEditor/iconEditor/IconEditor.js +2 -2
- package/src/sap/ui/integration/designtime/cardEditor/propertyEditor/parametersEditor/ParametersEditor.js +2 -2
- package/src/sap/ui/integration/designtime/cardEditor/util/CommonPatterns.js +1 -1
- package/src/sap/ui/integration/designtime/cardEditor/validator/IsPatternMatchList.js +1 -1
- package/src/sap/ui/integration/designtime/editor/CardEditor.js +53 -4
- package/src/sap/ui/integration/designtime/editor/CardPreview.js +31 -11
- package/src/sap/ui/integration/designtime/editor/css/CardPreview.css +18 -1
- package/src/sap/ui/integration/editor/Editor.js +219 -209
- package/src/sap/ui/integration/editor/EditorResourceBundles.js +43 -32
- package/src/sap/ui/integration/editor/Extension.js +2 -2
- package/src/sap/ui/integration/editor/Manifest.js +3 -3
- package/src/sap/ui/integration/editor/Merger.js +1 -19
- package/src/sap/ui/integration/editor/Settings.js +10 -6
- package/src/sap/ui/integration/editor/css/Editor.css +22 -0
- package/src/sap/ui/integration/editor/fields/BaseField.js +9 -12
- package/src/sap/ui/integration/editor/fields/BooleanField.js +4 -2
- package/src/sap/ui/integration/editor/fields/DateField.js +2 -2
- package/src/sap/ui/integration/editor/fields/DateTimeField.js +2 -2
- package/src/sap/ui/integration/editor/fields/DestinationField.js +2 -2
- package/src/sap/ui/integration/editor/fields/IntegerField.js +5 -2
- package/src/sap/ui/integration/editor/fields/ListField.js +274 -62
- package/src/sap/ui/integration/editor/fields/NumberField.js +2 -2
- package/src/sap/ui/integration/editor/fields/StringField.js +85 -53
- package/src/sap/ui/integration/editor/fields/viz/ColorSelect.js +10 -30
- package/src/sap/ui/integration/editor/fields/viz/IconSelect.js +2 -4
- package/src/sap/ui/integration/editor/fields/viz/ShapeSelect.js +2 -4
- package/src/sap/ui/integration/editor/languages.json +2 -2
- package/src/sap/ui/integration/formatters/DateTimeFormatter.js +1 -1
- package/src/sap/ui/integration/formatters/IconFormatter.js +1 -1
- package/src/sap/ui/integration/formatters/NumberFormatter.js +1 -1
- package/src/sap/ui/integration/formatters/TextFormatter.js +1 -1
- package/src/sap/ui/integration/library-bootstrap.js +1 -1
- package/src/sap/ui/integration/library.js +21 -4
- package/src/sap/ui/integration/messagebundle_ar.properties +4 -0
- package/src/sap/ui/integration/messagebundle_bg.properties +4 -0
- package/src/sap/ui/integration/messagebundle_ca.properties +4 -0
- package/src/sap/ui/integration/messagebundle_cs.properties +4 -0
- package/src/sap/ui/integration/messagebundle_cy.properties +4 -0
- package/src/sap/ui/integration/messagebundle_da.properties +4 -0
- package/src/sap/ui/integration/messagebundle_de.properties +4 -0
- package/src/sap/ui/integration/messagebundle_el.properties +4 -0
- package/src/sap/ui/integration/messagebundle_en.properties +4 -0
- package/src/sap/ui/integration/messagebundle_en_GB.properties +4 -0
- package/src/sap/ui/integration/messagebundle_en_US_sappsd.properties +4 -0
- package/src/sap/ui/integration/messagebundle_en_US_saprigi.properties +55 -81
- package/src/sap/ui/integration/messagebundle_en_US_saptrc.properties +4 -0
- package/src/sap/ui/integration/messagebundle_es.properties +4 -0
- package/src/sap/ui/integration/messagebundle_es_MX.properties +4 -0
- package/src/sap/ui/integration/messagebundle_et.properties +4 -0
- package/src/sap/ui/integration/messagebundle_fi.properties +4 -0
- package/src/sap/ui/integration/messagebundle_fr.properties +4 -0
- package/src/sap/ui/integration/messagebundle_fr_CA.properties +4 -0
- package/src/sap/ui/integration/messagebundle_hi.properties +4 -0
- package/src/sap/ui/integration/messagebundle_hr.properties +4 -0
- package/src/sap/ui/integration/messagebundle_hu.properties +4 -0
- package/src/sap/ui/integration/messagebundle_id.properties +4 -0
- package/src/sap/ui/integration/messagebundle_it.properties +4 -0
- package/src/sap/ui/integration/messagebundle_iw.properties +4 -0
- package/src/sap/ui/integration/messagebundle_ja.properties +4 -0
- package/src/sap/ui/integration/messagebundle_kk.properties +4 -0
- package/src/sap/ui/integration/messagebundle_ko.properties +4 -0
- package/src/sap/ui/integration/messagebundle_lt.properties +4 -0
- package/src/sap/ui/integration/messagebundle_lv.properties +4 -0
- package/src/sap/ui/integration/messagebundle_ms.properties +4 -0
- package/src/sap/ui/integration/messagebundle_nl.properties +4 -0
- package/src/sap/ui/integration/messagebundle_no.properties +4 -0
- package/src/sap/ui/integration/messagebundle_pl.properties +4 -0
- package/src/sap/ui/integration/messagebundle_pt.properties +4 -0
- package/src/sap/ui/integration/messagebundle_pt_PT.properties +4 -0
- package/src/sap/ui/integration/messagebundle_ro.properties +4 -0
- package/src/sap/ui/integration/messagebundle_ru.properties +4 -0
- package/src/sap/ui/integration/messagebundle_sh.properties +4 -0
- package/src/sap/ui/integration/messagebundle_sk.properties +4 -0
- package/src/sap/ui/integration/messagebundle_sl.properties +4 -0
- package/src/sap/ui/integration/messagebundle_sv.properties +4 -0
- package/src/sap/ui/integration/messagebundle_th.properties +4 -0
- package/src/sap/ui/integration/messagebundle_tr.properties +4 -0
- package/src/sap/ui/integration/messagebundle_uk.properties +4 -0
- package/src/sap/ui/integration/messagebundle_vi.properties +4 -0
- package/src/sap/ui/integration/messagebundle_zh_CN.properties +4 -0
- package/src/sap/ui/integration/messagebundle_zh_TW.properties +4 -0
- package/src/sap/ui/integration/model/ContextModel.js +3 -3
- package/src/sap/ui/integration/model/ObservableModel.js +2 -2
- package/src/sap/ui/integration/sap-ui-integration-config.js +1 -1
- package/src/sap/ui/integration/sap-ui-integration-define-nojQuery.js +1 -1
- package/src/sap/ui/integration/schemas/sap-card.json +195 -8
- package/src/sap/ui/integration/services/Data.js +1 -1
- package/src/sap/ui/integration/services/Navigation.js +1 -1
- package/src/sap/ui/integration/services/Service.js +1 -1
- package/src/sap/ui/integration/themes/base/CalendarContent.less +31 -4
- package/src/sap/ui/integration/themes/base/ObjectContent.less +57 -9
- package/src/sap/ui/integration/themes/base/library.source.less +1 -1
- package/src/sap/ui/integration/themes/sap_hcb/library.source.less +1 -1
- package/src/sap/ui/integration/thirdparty/adaptive-expressions.js +1 -0
- package/src/sap/ui/integration/thirdparty/adaptivecards-templating.js +660 -952
- package/src/sap/ui/integration/thirdparty/markdown-it.js +8340 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/bundle.esm.js +27 -102
- package/src/sap/ui/integration/thirdparty/webcomponents/bundle.esm.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ar-8f9ad94e.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ar-8f9ad94e.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ar-f6792d81.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ar-f6792d81.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_bg-39f4bd50.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_bg-39f4bd50.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_bg-884d46bd.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_bg-884d46bd.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ca-5b6cc3e2.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ca-5b6cc3e2.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ca-d12c1ceb.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ca-d12c1ceb.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_cs-307b7f69.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_cs-307b7f69.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_cs-c7ed5c29.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_cs-c7ed5c29.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_cy-0f578e7e.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_cy-0f578e7e.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_cy-9889d6f0.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_cy-9889d6f0.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_da-53593542.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_da-53593542.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_da-6bb7d77b.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_da-6bb7d77b.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_de-0376c479.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_de-0376c479.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_de-eb501c07.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_de-eb501c07.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_el-45d1c326.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_el-45d1c326.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_el-e1955d32.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_el-e1955d32.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en-3bc10a88.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en-3bc10a88.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en-e41c44ec.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en-e41c44ec.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_GB-963f5beb.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_GB-963f5beb.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_GB-a4723c29.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_GB-a4723c29.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_sappsd-10d3b264.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_sappsd-10d3b264.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_sappsd-9cf5ba75.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_sappsd-9cf5ba75.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_saprigi-00c865df.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_saprigi-00c865df.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_saprigi-8a51ede2.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_saprigi-8a51ede2.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_saptrc-ac48007a.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_saptrc-ac48007a.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_saptrc-ae1a6e4a.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_en_US_saptrc-ae1a6e4a.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_es-1fe90167.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_es-1fe90167.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_es-288d5c23.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_es-288d5c23.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_es_MX-4f1305df.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_es_MX-4f1305df.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_es_MX-b984b6dc.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_es_MX-b984b6dc.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_et-a0061a71.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_et-a0061a71.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_et-c96b504c.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_et-c96b504c.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fi-27edc9b8.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fi-27edc9b8.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fi-c943134b.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fi-c943134b.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fr-16c1c577.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fr-16c1c577.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fr-6265990a.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fr-6265990a.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fr_CA-60f6fce4.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fr_CA-60f6fce4.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fr_CA-c0eae649.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fr_CA-c0eae649.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hi-3c753818.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hi-3c753818.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hi-c4029409.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hi-c4029409.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hr-49952683.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hr-49952683.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hr-f5eadd90.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hr-f5eadd90.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hu-9eaeaf2e.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hu-9eaeaf2e.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hu-d57d2bfc.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hu-d57d2bfc.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_in-5f15c5a1.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_in-5f15c5a1.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_in-69efcc93.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_in-69efcc93.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_it-0b408aea.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_it-0b408aea.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_it-51d189db.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_it-51d189db.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_iw-6db571be.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_iw-6db571be.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_iw-71f66463.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_iw-71f66463.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ja-5b3dd502.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ja-5b3dd502.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ja-9c40042d.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ja-9c40042d.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_kk-b620a07a.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_kk-b620a07a.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_kk-c393c4a9.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_kk-c393c4a9.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ko-4be67a77.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ko-4be67a77.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ko-632e4f9f.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ko-632e4f9f.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_lt-56b41ac8.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_lt-56b41ac8.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_lt-daa86622.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_lt-daa86622.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_lv-54381557.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_lv-54381557.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_lv-c58db769.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_lv-c58db769.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ms-536227b5.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ms-536227b5.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ms-54fe878e.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ms-54fe878e.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_nl-56e48e33.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_nl-56e48e33.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_nl-71b1c190.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_nl-71b1c190.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_no-5ae816d9.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_no-5ae816d9.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_no-eecb1eec.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_no-eecb1eec.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pl-bd30a402.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pl-bd30a402.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pl-dd8107e1.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pl-dd8107e1.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pt-026877c7.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pt-026877c7.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pt-9e9f924f.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pt-9e9f924f.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pt_PT-2c6cce63.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pt_PT-2c6cce63.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pt_PT-a24258d4.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pt_PT-a24258d4.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ro-0dbe572d.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ro-0dbe572d.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ro-767b0e99.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ro-767b0e99.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ru-4291aa7d.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ru-4291aa7d.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ru-b3537542.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ru-b3537542.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sh-4047dcd1.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sh-4047dcd1.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sh-806e8ca0.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sh-806e8ca0.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sk-57daf6b1.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sk-57daf6b1.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sk-fd3049d8.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sk-fd3049d8.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sl-586b310b.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sl-586b310b.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sl-71a84189.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sl-71a84189.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sv-1796a5d2.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sv-1796a5d2.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sv-d6d000eb.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sv-d6d000eb.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_th-63398540.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_th-63398540.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_th-79715cf0.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_th-79715cf0.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_tr-c378e505.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_tr-c378e505.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_tr-f32e601b.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_tr-f32e601b.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_uk-70daf763.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_uk-70daf763.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_uk-99b5589a.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_uk-99b5589a.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_vi-3f36f453.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_vi-3f36f453.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_vi-c9a9277d.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_vi-c9a9277d.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_zh_CN-2420a6e9.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_zh_CN-2420a6e9.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_zh_CN-748178a2.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_zh_CN-748178a2.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_zh_TW-91e89b06.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_zh_TW-91e89b06.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_zh_TW-ffef9f6e.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_zh_TW-ffef9f6e.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-0c3377c5.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-0c3377c5.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-16ed5ab0.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-16ed5ab0.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-2b80e11c.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-2b80e11c.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-324b2fcc.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-324b2fcc.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-4809f843.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-4809f843.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-5338149e.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-5338149e.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-55dcf53d.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-55dcf53d.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-55e683ed.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-55e683ed.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-5bc2c0de.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-5bc2c0de.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-7bc1fa16.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-7bc1fa16.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-7f593c6e.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-7f593c6e.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-826107f5.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-826107f5.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-8b95ce95.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-8b95ce95.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-a003a2e2.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-a003a2e2.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-ab3e8649.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-ab3e8649.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-bfa33d93.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-bfa33d93.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-dec4feca.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-dec4feca.js.map +1 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-fb5a25ab.js +2 -0
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css-fb5a25ab.js.map +1 -0
- package/src/sap/ui/integration/util/BaseFactory.js +2 -2
- package/src/sap/ui/integration/util/BindingHelper.js +6 -4
- package/src/sap/ui/integration/util/BindingResolver.js +6 -5
- package/src/sap/ui/integration/util/CacheAndRequestDataProvider.js +1 -1
- package/src/sap/ui/integration/util/CardMerger.js +7 -18
- package/src/sap/ui/integration/util/CardObserver.js +2 -2
- package/src/sap/ui/integration/util/ContentFactory.js +5 -9
- package/src/sap/ui/integration/util/CsrfTokenHandler.js +296 -0
- package/src/sap/ui/integration/util/DataProvider.js +11 -2
- package/src/sap/ui/integration/util/DataProviderFactory.js +49 -12
- package/src/sap/ui/integration/util/Destinations.js +2 -2
- package/src/sap/ui/integration/util/ExtensionDataProvider.js +2 -2
- package/src/sap/ui/integration/util/HeaderFactory.js +3 -3
- package/src/sap/ui/integration/util/JSONBindingHelper.js +3 -3
- package/src/sap/ui/integration/util/LoadingProvider.js +2 -2
- package/src/sap/ui/integration/util/Manifest.js +4 -4
- package/src/sap/ui/integration/util/ManifestResolver.js +99 -0
- package/src/sap/ui/integration/util/ParameterMap.js +1 -1
- package/src/sap/ui/integration/util/RequestDataProvider.js +88 -50
- package/src/sap/ui/integration/util/ServiceDataProvider.js +2 -2
- package/src/sap/ui/integration/util/ServiceManager.js +2 -2
- package/src/sap/ui/integration/util/SkeletonCard.js +50 -0
- package/src/sap/ui/integration/util/Utils.js +74 -2
- package/src/sap/ui/integration/util/loadCardEditor.js +1 -1
- package/src/sap/ui/integration/widgets/Card.js +67 -20
- package/src/sap/ui/integration/widgets/CardRenderer.js +1 -7
- package/src/sap-ui-integration-card-editor.js +1 -1
- package/src/sap-ui-integration-editor.js +1 -1
- package/src/sap-ui-integration.js +1 -1
- package/ui5.yaml +288 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/Unicode-Data-Files-LICENSE.txt +0 -27
- package/src/sap/ui/integration/thirdparty/webcomponents/ar.43441c1da168c24d.json +0 -5906
- package/src/sap/ui/integration/thirdparty/webcomponents/ar_EG.2c9d7bc8c6cc480e.json +0 -5906
- package/src/sap/ui/integration/thirdparty/webcomponents/ar_SA.5a58dac7851f3491.json +0 -5906
- package/src/sap/ui/integration/thirdparty/webcomponents/bg.ed8d32010cf321a6.json +0 -4979
- package/src/sap/ui/integration/thirdparty/webcomponents/bundle.es5.js +0 -212
- package/src/sap/ui/integration/thirdparty/webcomponents/ca.e7ad42298985cd11.json +0 -4996
- package/src/sap/ui/integration/thirdparty/webcomponents/cs.9c679acdc4b03e38.json +0 -5498
- package/src/sap/ui/integration/thirdparty/webcomponents/da.ba9951ef39b201a6.json +0 -4888
- package/src/sap/ui/integration/thirdparty/webcomponents/de.6caccc36abcd1ecf.json +0 -4916
- package/src/sap/ui/integration/thirdparty/webcomponents/de_AT.0f4ffe37737725a0.json +0 -4917
- package/src/sap/ui/integration/thirdparty/webcomponents/de_CH.c148cbc7ceb1a7a5.json +0 -4915
- package/src/sap/ui/integration/thirdparty/webcomponents/el.11c4c67dcb9fadcc.json +0 -4883
- package/src/sap/ui/integration/thirdparty/webcomponents/el_CY.ed3bddd6e79dc343.json +0 -4883
- package/src/sap/ui/integration/thirdparty/webcomponents/en.c4465af466100b5b.json +0 -4970
- package/src/sap/ui/integration/thirdparty/webcomponents/en_AU.5cb9fccc9ce24663.json +0 -4962
- package/src/sap/ui/integration/thirdparty/webcomponents/en_GB.e31daeeb57c2f1d1.json +0 -4971
- package/src/sap/ui/integration/thirdparty/webcomponents/en_HK.0a22405bb092bec2.json +0 -4977
- package/src/sap/ui/integration/thirdparty/webcomponents/en_IE.6a062df10dabdb1c.json +0 -4971
- package/src/sap/ui/integration/thirdparty/webcomponents/en_IN.bfd20b07e9079267.json +0 -4972
- package/src/sap/ui/integration/thirdparty/webcomponents/en_NZ.18303e8298e4752a.json +0 -4971
- package/src/sap/ui/integration/thirdparty/webcomponents/en_PG.9f604c968f3ab77e.json +0 -4972
- package/src/sap/ui/integration/thirdparty/webcomponents/en_SG.cc59a6a409e1617e.json +0 -4973
- package/src/sap/ui/integration/thirdparty/webcomponents/en_ZA.198f9641a502d660.json +0 -4972
- package/src/sap/ui/integration/thirdparty/webcomponents/es.c10bf80f473caf30.json +0 -4912
- package/src/sap/ui/integration/thirdparty/webcomponents/es_AR.7708d7dd7a6d2a15.json +0 -4914
- package/src/sap/ui/integration/thirdparty/webcomponents/es_BO.4a1616d9f3425fba.json +0 -4913
- package/src/sap/ui/integration/thirdparty/webcomponents/es_CL.5637126713317a15.json +0 -4914
- package/src/sap/ui/integration/thirdparty/webcomponents/es_CO.c9436572ca8f4da8.json +0 -4913
- package/src/sap/ui/integration/thirdparty/webcomponents/es_MX.b4bce7dc951eb8f4.json +0 -4915
- package/src/sap/ui/integration/thirdparty/webcomponents/es_PE.65f448fde1f0de13.json +0 -4913
- package/src/sap/ui/integration/thirdparty/webcomponents/es_UY.9ec44031491e9b95.json +0 -4915
- package/src/sap/ui/integration/thirdparty/webcomponents/es_VE.152233c7f57ecdab.json +0 -4914
- package/src/sap/ui/integration/thirdparty/webcomponents/et.bbc93e8a17832e8f.json +0 -4967
- package/src/sap/ui/integration/thirdparty/webcomponents/fa.083b927b3586b3a3.json +0 -4883
- package/src/sap/ui/integration/thirdparty/webcomponents/fi.1b4c89f38783556e.json +0 -5008
- package/src/sap/ui/integration/thirdparty/webcomponents/fr.ddbb9df1e0bdb6ac.json +0 -4979
- package/src/sap/ui/integration/thirdparty/webcomponents/fr_BE.bf3609280b7b93ee.json +0 -4979
- package/src/sap/ui/integration/thirdparty/webcomponents/fr_CA.b64d0bcd23a5cd3e.json +0 -4973
- package/src/sap/ui/integration/thirdparty/webcomponents/fr_CH.349b221a02887244.json +0 -4997
- package/src/sap/ui/integration/thirdparty/webcomponents/fr_LU.ef7d7c8bb3328d28.json +0 -4979
- package/src/sap/ui/integration/thirdparty/webcomponents/he.d628e8bf13a8a2c8.json +0 -5378
- package/src/sap/ui/integration/thirdparty/webcomponents/hi.cc34df8229f656f5.json +0 -4829
- package/src/sap/ui/integration/thirdparty/webcomponents/hr.c920290f50173516.json +0 -4919
- package/src/sap/ui/integration/thirdparty/webcomponents/hu.2d9fa4a9163cd7c0.json +0 -4856
- package/src/sap/ui/integration/thirdparty/webcomponents/id.163fdd2a7dbd1dd3.json +0 -4658
- package/src/sap/ui/integration/thirdparty/webcomponents/it.b5acbefdd6794dfc.json +0 -4950
- package/src/sap/ui/integration/thirdparty/webcomponents/it_CH.ade4cbfb2e49424a.json +0 -4950
- package/src/sap/ui/integration/thirdparty/webcomponents/ja.d882fade5c3e04b5.json +0 -4830
- package/src/sap/ui/integration/thirdparty/webcomponents/kk.ab96b18c66676a99.json +0 -4725
- package/src/sap/ui/integration/thirdparty/webcomponents/ko.a0d63a1580dcbefd.json +0 -4738
- package/src/sap/ui/integration/thirdparty/webcomponents/lt.93bb00f91a74d613.json +0 -5481
- package/src/sap/ui/integration/thirdparty/webcomponents/lv.3c272216d7d4d61c.json +0 -5112
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ar.d20c665dc46a6f9b.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_bg.38428028ff3b1869.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ca.c46423cc94896604.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_cs.d9d68b2690954b4e.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_cy.facf33e921a1a902.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_da.1189e997523b89f6.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_de.1edf86f620dd657a.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_el.b0d02877b9366e9a.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_es.43fc364a8be37449.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_es_MX.ebf2828c83c4821a.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_et.8f9abcfab5eb10c2.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fi.6fc14fd0d16cc223.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fr.c686ab9036b91d78.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_fr_CA.fb1250c736f2ac8c.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hi.8b8cbc4fb282adf6.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hr.bb811aa76359724a.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_hu.18417ced7dce8cf7.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_in.e3c5681fc8917143.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_it.554f904c106ab069.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_iw.487febe0c5c504ff.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ja.68cf1fa9f03cd6c3.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_kk.36e63b8f9e1fd98f.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ko.fb000c7a35009d21.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_lt.6acd357e3eb3f54e.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_lv.3ffdda1a20bc15ec.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ms.218aa30a3e8f58fa.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_nl.f753744c7e08b3a5.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_no.385f0fc9f2e49ab5.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pl.6c42672479ad9687.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pt.ede162cbf79f7fca.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_pt_PT.dcaa871d6b8eec75.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ro.d3f32654c57588ea.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_ru.0ec083b64484a12d.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sh.98cd3e4299919a30.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sk.fddb8b9e7b70fc1d.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sl.c55d5f817482ea06.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_sv.6d855a11d20b4335.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_th.e791b9a81f16120c.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_tr.ce83741e39606b55.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_uk.e1ea822764025a5a.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_vi.7ee7339211750379.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_zh_CN.0cfd71faba640211.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/messagebundle_zh_TW.bc718e0187728a16.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/ms.e26b54937e5d1516.json +0 -4515
- package/src/sap/ui/integration/thirdparty/webcomponents/nb.a6e9993590a73989.json +0 -4977
- package/src/sap/ui/integration/thirdparty/webcomponents/nl.cac914c3529b7b01.json +0 -4884
- package/src/sap/ui/integration/thirdparty/webcomponents/nl_BE.a3ac6f9f99feba7b.json +0 -4884
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.34f9ef46a8f6a852.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.52d78e00faad9126.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.6c6e759e0d3534d0.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.8cc66e917327b7a4.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.966b2e43c0966351.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.97725b2cf4e77494.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.b1bf75f0b850363c.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.d164773ecb392b28.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.def3978aa5de7b11.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.dfd19a1252497415.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.e19065174fdd4592.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/parameters-bundle.css.e2ac94de83159e1e.json +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/pl.2cc1c94da23f8c37.json +0 -5176
- package/src/sap/ui/integration/thirdparty/webcomponents/pt.fc8dd9656bc363a4.json +0 -4805
- package/src/sap/ui/integration/thirdparty/webcomponents/pt_PT.be31b641eedfdb48.json +0 -4940
- package/src/sap/ui/integration/thirdparty/webcomponents/ro.fc6a48bc63cf435e.json +0 -5090
- package/src/sap/ui/integration/thirdparty/webcomponents/ru.77f0de46b3b490b1.json +0 -5407
- package/src/sap/ui/integration/thirdparty/webcomponents/ru_UA.4c4e0034fbd799c6.json +0 -5407
- package/src/sap/ui/integration/thirdparty/webcomponents/sk.0d62a8cca83c1dec.json +0 -5370
- package/src/sap/ui/integration/thirdparty/webcomponents/sl.7b303551cc238560.json +0 -5340
- package/src/sap/ui/integration/thirdparty/webcomponents/sr.7fb9ac6ed054ff7d.json +0 -5126
- package/src/sap/ui/integration/thirdparty/webcomponents/sv.6ea04dfd8d1c331b.json +0 -5011
- package/src/sap/ui/integration/thirdparty/webcomponents/th.8e8d734a66ed1c51.json +0 -4797
- package/src/sap/ui/integration/thirdparty/webcomponents/tr.dbb9aa836fc4e3f5.json +0 -4979
- package/src/sap/ui/integration/thirdparty/webcomponents/uk.4854089f0c12f77c.json +0 -5353
- package/src/sap/ui/integration/thirdparty/webcomponents/vi.e6ffbde0643d7d75.json +0 -4673
- package/src/sap/ui/integration/thirdparty/webcomponents/webcomponentsjs/bundles/webcomponents-ce.js +0 -73
- package/src/sap/ui/integration/thirdparty/webcomponents/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -336
- package/src/sap/ui/integration/thirdparty/webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -221
- package/src/sap/ui/integration/thirdparty/webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/webcomponentsjs/bundles/webcomponents-sd.js +0 -169
- package/src/sap/ui/integration/thirdparty/webcomponents/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
- package/src/sap/ui/integration/thirdparty/webcomponents/webcomponentsjs/webcomponents-loader.js +0 -185
- package/src/sap/ui/integration/thirdparty/webcomponents/zh_CN.6607a3e9e0901e53.json +0 -4632
- package/src/sap/ui/integration/thirdparty/webcomponents/zh_HK.1c2563d3e4dad56e.json +0 -4640
- package/src/sap/ui/integration/thirdparty/webcomponents/zh_SG.db7f1334eecf894d.json +0 -4640
- package/src/sap/ui/integration/thirdparty/webcomponents/zh_TW.a1d00dd87c58d8f0.json +0 -4728
- package/src/sap/ui/integration/util/CardActions.js +0 -551
|
@@ -1,749 +1,225 @@
|
|
|
1
1
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
|
-
if
|
|
3
|
-
module.exports = factory();
|
|
4
|
-
else if
|
|
5
|
-
sap.ui.define([], factory);
|
|
6
|
-
else if
|
|
7
|
-
exports["ACData"] = factory();
|
|
2
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
|
3
|
+
module.exports = factory(require("./adaptive-expressions"));
|
|
4
|
+
else if(typeof sap.ui.define === 'function')
|
|
5
|
+
sap.ui.define(["sap/ui/integration/thirdparty/adaptive-expressions"], factory);
|
|
6
|
+
else if(typeof exports === 'object')
|
|
7
|
+
exports["ACData"] = factory(require("./adaptive-expressions"));
|
|
8
8
|
else
|
|
9
|
-
root["ACData"] = factory();
|
|
10
|
-
})(
|
|
11
|
-
return /******/ (
|
|
12
|
-
/******/
|
|
13
|
-
/******/ var
|
|
14
|
-
/******/
|
|
15
|
-
/******/ // The require function
|
|
16
|
-
/******/ function __webpack_require__(moduleId) {
|
|
17
|
-
/******/
|
|
18
|
-
/******/ // Check if module is in cache
|
|
19
|
-
/******/ if (installedModules[moduleId]) {
|
|
20
|
-
/******/ return installedModules[moduleId].exports;
|
|
21
|
-
/******/ }
|
|
22
|
-
/******/ // Create a new module (and put it into the cache)
|
|
23
|
-
/******/ var module = installedModules[moduleId] = {
|
|
24
|
-
/******/ i: moduleId,
|
|
25
|
-
/******/ l: false,
|
|
26
|
-
/******/ exports: {}
|
|
27
|
-
/******/ };
|
|
28
|
-
/******/
|
|
29
|
-
/******/ // Execute the module function
|
|
30
|
-
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
31
|
-
/******/
|
|
32
|
-
/******/ // Flag the module as loaded
|
|
33
|
-
/******/ module.l = true;
|
|
34
|
-
/******/
|
|
35
|
-
/******/ // Return the exports of the module
|
|
36
|
-
/******/ return module.exports;
|
|
37
|
-
/******/ }
|
|
38
|
-
/******/
|
|
39
|
-
/******/
|
|
40
|
-
/******/ // expose the modules object (__webpack_modules__)
|
|
41
|
-
/******/ __webpack_require__.m = modules;
|
|
42
|
-
/******/
|
|
43
|
-
/******/ // expose the module cache
|
|
44
|
-
/******/ __webpack_require__.c = installedModules;
|
|
45
|
-
/******/
|
|
46
|
-
/******/ // define getter function for harmony exports
|
|
47
|
-
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
48
|
-
/******/ if (!__webpack_require__.o(exports, name)) {
|
|
49
|
-
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
50
|
-
/******/ }
|
|
51
|
-
/******/ };
|
|
52
|
-
/******/
|
|
53
|
-
/******/ // define __esModule on exports
|
|
54
|
-
/******/ __webpack_require__.r = function(exports) {
|
|
55
|
-
/******/ if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
56
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
57
|
-
/******/ }
|
|
58
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
59
|
-
/******/ };
|
|
60
|
-
/******/
|
|
61
|
-
/******/ // create a fake namespace object
|
|
62
|
-
/******/ // mode & 1: value is a module id, require it
|
|
63
|
-
/******/ // mode & 2: merge all properties of value into the ns
|
|
64
|
-
/******/ // mode & 4: return value when already ns object
|
|
65
|
-
/******/ // mode & 8|1: behave like require
|
|
66
|
-
/******/ __webpack_require__.t = function(value, mode) {
|
|
67
|
-
/******/ if (mode & 1) value = __webpack_require__(value);
|
|
68
|
-
/******/ if (mode & 8) return value;
|
|
69
|
-
/******/ if ((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
70
|
-
/******/ var ns = Object.create(null);
|
|
71
|
-
/******/ __webpack_require__.r(ns);
|
|
72
|
-
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
73
|
-
/******/ if (mode & 2 && typeof value != 'string') for (var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
74
|
-
/******/ return ns;
|
|
75
|
-
/******/ };
|
|
76
|
-
/******/
|
|
77
|
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
78
|
-
/******/ __webpack_require__.n = function(module) {
|
|
79
|
-
/******/ var getter = module && module.__esModule ?
|
|
80
|
-
/******/ function getDefault() { return module['default']; } :
|
|
81
|
-
/******/ function getModuleExports() { return module; };
|
|
82
|
-
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
83
|
-
/******/ return getter;
|
|
84
|
-
/******/ };
|
|
85
|
-
/******/
|
|
86
|
-
/******/ // Object.prototype.hasOwnProperty.call
|
|
87
|
-
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
88
|
-
/******/
|
|
89
|
-
/******/ // __webpack_public_path__
|
|
90
|
-
/******/ __webpack_require__.p = "";
|
|
91
|
-
/******/
|
|
92
|
-
/******/
|
|
93
|
-
/******/ // Load entry module and return exports
|
|
94
|
-
/******/ return __webpack_require__(__webpack_require__.s = "./src/adaptivecards-templating.ts");
|
|
95
|
-
/******/ })
|
|
96
|
-
/************************************************************************/
|
|
97
|
-
/******/ ({
|
|
9
|
+
root["ACData"] = factory(root["AEL"]);
|
|
10
|
+
})(this, function(__WEBPACK_EXTERNAL_MODULE_adaptive_expressions__) {
|
|
11
|
+
return /******/ (() => { // webpackBootstrap
|
|
12
|
+
/******/ "use strict";
|
|
13
|
+
/******/ var __webpack_modules__ = ({
|
|
98
14
|
|
|
99
15
|
/***/ "./src/adaptivecards-templating.ts":
|
|
100
16
|
/*!*****************************************!*\
|
|
101
17
|
!*** ./src/adaptivecards-templating.ts ***!
|
|
102
18
|
\*****************************************/
|
|
103
|
-
|
|
104
|
-
/***/ (function(module, exports, __webpack_require__) {
|
|
19
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
105
20
|
|
|
106
|
-
"use strict";
|
|
107
21
|
|
|
108
|
-
function
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
|
|
22
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
25
|
+
}) : (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
o[k2] = m[k];
|
|
28
|
+
}));
|
|
29
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
30
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
31
|
+
};
|
|
32
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
112
33
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
113
34
|
// Licensed under the MIT License.
|
|
114
|
-
|
|
115
|
-
|
|
35
|
+
__exportStar(__webpack_require__(/*! ./template-engine */ "./src/template-engine.ts"), exports);
|
|
36
|
+
__exportStar(__webpack_require__(/*! ./json-schema-card */ "./src/json-schema-card.ts"), exports);
|
|
116
37
|
|
|
117
38
|
|
|
118
39
|
/***/ }),
|
|
119
40
|
|
|
120
|
-
/***/ "./src/
|
|
121
|
-
|
|
122
|
-
!*** ./src/
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
/***/ (function(module, exports, __webpack_require__) {
|
|
41
|
+
/***/ "./src/json-schema-card.ts":
|
|
42
|
+
/*!*********************************!*\
|
|
43
|
+
!*** ./src/json-schema-card.ts ***!
|
|
44
|
+
\*********************************/
|
|
45
|
+
/***/ (function(__unused_webpack_module, exports) {
|
|
126
46
|
|
|
127
|
-
"use strict";
|
|
128
47
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
48
|
+
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
49
|
+
// Licensed under the MIT License.
|
|
50
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
51
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
52
|
+
if (ar || !(i in from)) {
|
|
53
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
54
|
+
ar[i] = from[i];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
58
|
+
};
|
|
59
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
60
|
+
exports.JSONSchemaCard = void 0;
|
|
61
|
+
// JSON Schema Card
|
|
62
|
+
// generates an Adaptive Card given a JSON schema
|
|
63
|
+
function JSONSchemaCard(schema) {
|
|
64
|
+
try {
|
|
65
|
+
return {
|
|
66
|
+
type: "AdaptiveCard",
|
|
67
|
+
body: [
|
|
68
|
+
JSONSchemaCardObject(schema, '', 0),
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
console.error(e);
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.JSONSchemaCard = JSONSchemaCard;
|
|
78
|
+
// JSON Schema Elements
|
|
79
|
+
function JSONSchemaCardElement(schema, path, depth) {
|
|
80
|
+
if (typeof (schema) === "boolean")
|
|
81
|
+
return null;
|
|
82
|
+
switch (schema.type) {
|
|
83
|
+
case "array":
|
|
84
|
+
if (Array.isArray(schema.items)) {
|
|
85
|
+
return JSONSchemaCardTuple(schema, path, depth);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
return JSONSchemaCardList(schema, path, depth);
|
|
89
|
+
}
|
|
90
|
+
case "object":
|
|
91
|
+
return JSONSchemaCardObject(schema, path, depth);
|
|
92
|
+
case "boolean":
|
|
93
|
+
return JSONSchemaCardBoolean(schema, path);
|
|
94
|
+
case "integer":
|
|
95
|
+
case "number":
|
|
96
|
+
return JSONSchemaCardNumber(schema, path);
|
|
97
|
+
case "string":
|
|
98
|
+
if (schema.enum) {
|
|
99
|
+
return JSONSchemaCardChoiceSet(schema, path);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
return JSONSchemaCardText(schema, path);
|
|
103
|
+
}
|
|
104
|
+
case "date-time":
|
|
105
|
+
case "time":
|
|
106
|
+
case "date":
|
|
107
|
+
return JSONSchemaCardTime(schema, path);
|
|
108
|
+
default:
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function encodeProperty(property) {
|
|
113
|
+
return encodeURIComponent(property).replace('.', '%2e');
|
|
114
|
+
}
|
|
115
|
+
function textSizeAtDepth(depth) {
|
|
116
|
+
switch (depth) {
|
|
117
|
+
case 0:
|
|
118
|
+
"large";
|
|
119
|
+
case 1:
|
|
120
|
+
"medium";
|
|
121
|
+
default:
|
|
122
|
+
"small";
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function JSONSchemaFieldTitle(schema, path, depth) {
|
|
126
|
+
return [
|
|
127
|
+
schema.title ? {
|
|
128
|
+
type: "TextBlock",
|
|
129
|
+
size: textSizeAtDepth(depth),
|
|
130
|
+
text: schema.title,
|
|
131
|
+
} : null,
|
|
132
|
+
schema.description ? {
|
|
133
|
+
type: "TextBlock",
|
|
134
|
+
size: textSizeAtDepth(depth + 1),
|
|
135
|
+
isSubtle: true,
|
|
136
|
+
wrap: true,
|
|
137
|
+
text: schema.description,
|
|
138
|
+
} : null,
|
|
139
|
+
];
|
|
140
|
+
}
|
|
141
|
+
function JSONSchemaCardTuple(schema, path, depth) {
|
|
142
|
+
var _a, _b;
|
|
143
|
+
if (!Array.isArray(schema.items))
|
|
144
|
+
return null;
|
|
145
|
+
return {
|
|
146
|
+
type: "Container",
|
|
147
|
+
items: __spreadArray(__spreadArray([], JSONSchemaFieldTitle(schema, path, depth), true), (_b = (_a = schema.items) === null || _a === void 0 ? void 0 : _a.map(function (item, idx) {
|
|
148
|
+
return JSONSchemaCardElement(item, path + "[" + idx + "]", depth + 1);
|
|
149
|
+
})) !== null && _b !== void 0 ? _b : [], true),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function JSONSchemaCardList(schema, path, depth) {
|
|
153
|
+
return {
|
|
154
|
+
type: "Container",
|
|
155
|
+
items: __spreadArray([], JSONSchemaFieldTitle(schema, path, depth), true),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function JSONSchemaCardObject(schema, path, depth) {
|
|
159
|
+
var _a, _b;
|
|
160
|
+
return {
|
|
161
|
+
type: "Container",
|
|
162
|
+
items: __spreadArray(__spreadArray([], JSONSchemaFieldTitle(schema, path, depth), true), (_b = (_a = schema.required) === null || _a === void 0 ? void 0 : _a.map(function (property) {
|
|
163
|
+
return JSONSchemaCardElement(schema.properties[property], path + "." + encodeProperty(property), depth + 1);
|
|
164
|
+
})) !== null && _b !== void 0 ? _b : [], true),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function JSONSchemaCardBoolean(schema, path) {
|
|
168
|
+
return {
|
|
169
|
+
type: "Input.Toggle",
|
|
170
|
+
id: path,
|
|
171
|
+
title: schema.title,
|
|
172
|
+
label: schema.description,
|
|
173
|
+
value: schema.default,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function JSONSchemaCardNumber(schema, path) {
|
|
177
|
+
var _a, _b;
|
|
178
|
+
return {
|
|
179
|
+
type: "Input.Number",
|
|
180
|
+
id: path,
|
|
181
|
+
title: schema.title,
|
|
182
|
+
placeholder: schema.description,
|
|
183
|
+
value: schema.default,
|
|
184
|
+
min: (_a = schema.exclusiveMinimum) !== null && _a !== void 0 ? _a : schema.minimum,
|
|
185
|
+
max: (_b = schema.exclusiveMaximum) !== null && _b !== void 0 ? _b : schema.maximum,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function JSONSchemaCardChoiceSet(schema, path) {
|
|
189
|
+
return {
|
|
190
|
+
type: "Input.ChoiceSet",
|
|
191
|
+
id: path,
|
|
192
|
+
title: schema.title,
|
|
193
|
+
choices: schema.enum.map(function (item) {
|
|
194
|
+
return {
|
|
195
|
+
title: item,
|
|
196
|
+
value: item,
|
|
197
|
+
};
|
|
198
|
+
}),
|
|
199
|
+
placeholder: schema.description,
|
|
200
|
+
value: schema.default,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
function JSONSchemaCardText(schema, path) {
|
|
204
|
+
return {
|
|
205
|
+
type: "Input.Text",
|
|
206
|
+
id: path,
|
|
207
|
+
title: schema.title,
|
|
208
|
+
placeholder: schema.description,
|
|
209
|
+
value: schema.default,
|
|
210
|
+
maxLength: schema.maxLength,
|
|
211
|
+
regex: schema.pattern,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function JSONSchemaCardTime(schema, path) {
|
|
215
|
+
return {
|
|
216
|
+
type: "Input.Time",
|
|
217
|
+
id: path,
|
|
218
|
+
title: schema.title,
|
|
219
|
+
placeholder: schema.description,
|
|
220
|
+
value: schema.default,
|
|
221
|
+
};
|
|
207
222
|
}
|
|
208
|
-
var EvaluationContext = /** @class */ (function () {
|
|
209
|
-
function EvaluationContext() {
|
|
210
|
-
this._functions = {};
|
|
211
|
-
this._stateStack = [];
|
|
212
|
-
}
|
|
213
|
-
EvaluationContext.init = function () {
|
|
214
|
-
EvaluationContext._builtInFunctions["substr"] = function (s, index, count) {
|
|
215
|
-
if (typeof s === "string" && typeof index === "number" && typeof count === "number") {
|
|
216
|
-
return (s.substr(index, count));
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
return "";
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
EvaluationContext._builtInFunctions["JSON.parse"] = function (input) {
|
|
223
|
-
return JSON.parse(input);
|
|
224
|
-
};
|
|
225
|
-
EvaluationContext._builtInFunctions["if"] = function (condition, ifTrue, ifFalse) {
|
|
226
|
-
return condition ? ifTrue : ifFalse;
|
|
227
|
-
};
|
|
228
|
-
EvaluationContext._builtInFunctions["toUpper"] = function (input) {
|
|
229
|
-
return typeof input === "string" ? input.toUpperCase() : input;
|
|
230
|
-
};
|
|
231
|
-
EvaluationContext._builtInFunctions["toLower"] = function (input) {
|
|
232
|
-
return typeof input === "string" ? input.toLowerCase() : input;
|
|
233
|
-
};
|
|
234
|
-
EvaluationContext._builtInFunctions["Date.format"] = function (input, format) {
|
|
235
|
-
var acceptedFormats = ["long", "short", "compact"];
|
|
236
|
-
var inputAsNumber;
|
|
237
|
-
if (typeof input === "string") {
|
|
238
|
-
inputAsNumber = Date.parse(input);
|
|
239
|
-
}
|
|
240
|
-
else if (typeof input === "number") {
|
|
241
|
-
inputAsNumber = input;
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
return input;
|
|
245
|
-
}
|
|
246
|
-
var date = new Date(inputAsNumber);
|
|
247
|
-
var effectiveFormat = "compact";
|
|
248
|
-
if (typeof format === "string") {
|
|
249
|
-
effectiveFormat = format.toLowerCase();
|
|
250
|
-
if (acceptedFormats.indexOf(effectiveFormat) < 0) {
|
|
251
|
-
effectiveFormat = "compact";
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
return effectiveFormat === "compact" ? date.toLocaleDateString() : date.toLocaleDateString(undefined, { day: "numeric", weekday: effectiveFormat, month: effectiveFormat, year: "numeric" });
|
|
255
|
-
};
|
|
256
|
-
EvaluationContext._builtInFunctions["Time.format"] = function (input) {
|
|
257
|
-
var inputAsNumber;
|
|
258
|
-
if (typeof input === "string") {
|
|
259
|
-
inputAsNumber = Date.parse(input);
|
|
260
|
-
}
|
|
261
|
-
else if (typeof input === "number") {
|
|
262
|
-
inputAsNumber = input;
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
return input;
|
|
266
|
-
}
|
|
267
|
-
var date = new Date(inputAsNumber);
|
|
268
|
-
return date.toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' });
|
|
269
|
-
};
|
|
270
|
-
};
|
|
271
|
-
EvaluationContext.prototype.registerFunction = function (name, callback) {
|
|
272
|
-
this._functions[name] = callback;
|
|
273
|
-
};
|
|
274
|
-
EvaluationContext.prototype.unregisterFunction = function (name) {
|
|
275
|
-
delete this._functions[name];
|
|
276
|
-
};
|
|
277
|
-
EvaluationContext.prototype.getFunction = function (name) {
|
|
278
|
-
var result = this._functions[name];
|
|
279
|
-
if (result == undefined) {
|
|
280
|
-
result = EvaluationContext._builtInFunctions[name];
|
|
281
|
-
}
|
|
282
|
-
return result;
|
|
283
|
-
};
|
|
284
|
-
EvaluationContext.prototype.isReservedField = function (name) {
|
|
285
|
-
return EvaluationContext._reservedFields.indexOf(name) >= 0;
|
|
286
|
-
};
|
|
287
|
-
EvaluationContext.prototype.saveState = function () {
|
|
288
|
-
this._stateStack.push({ $data: this.$data, $index: this.$index });
|
|
289
|
-
};
|
|
290
|
-
EvaluationContext.prototype.restoreLastState = function () {
|
|
291
|
-
if (this._stateStack.length == 0) {
|
|
292
|
-
throw new Error("There is no evaluation context state to restore.");
|
|
293
|
-
}
|
|
294
|
-
var savedContext = this._stateStack.pop();
|
|
295
|
-
this.$data = savedContext.$data;
|
|
296
|
-
this.$index = savedContext.$index;
|
|
297
|
-
};
|
|
298
|
-
Object.defineProperty(EvaluationContext.prototype, "currentDataContext", {
|
|
299
|
-
get: function () {
|
|
300
|
-
return this.$data != undefined ? this.$data : this.$root;
|
|
301
|
-
},
|
|
302
|
-
enumerable: true,
|
|
303
|
-
configurable: true
|
|
304
|
-
});
|
|
305
|
-
EvaluationContext._reservedFields = ["$data", "$root", "$index"];
|
|
306
|
-
EvaluationContext._builtInFunctions = {};
|
|
307
|
-
return EvaluationContext;
|
|
308
|
-
}());
|
|
309
|
-
exports.EvaluationContext = EvaluationContext;
|
|
310
|
-
EvaluationContext.init();
|
|
311
|
-
var EvaluationNode = /** @class */ (function () {
|
|
312
|
-
function EvaluationNode() {
|
|
313
|
-
}
|
|
314
|
-
return EvaluationNode;
|
|
315
|
-
}());
|
|
316
|
-
var ExpressionNode = /** @class */ (function (_super) {
|
|
317
|
-
__extends(ExpressionNode, _super);
|
|
318
|
-
function ExpressionNode() {
|
|
319
|
-
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
320
|
-
_this.nodes = [];
|
|
321
|
-
_this.allowNull = true;
|
|
322
|
-
return _this;
|
|
323
|
-
}
|
|
324
|
-
ExpressionNode.prototype.evaluate = function (context) {
|
|
325
|
-
var operatorPriorityGroups = [
|
|
326
|
-
["/", "*"],
|
|
327
|
-
["-", "+"],
|
|
328
|
-
["==", "!=", "<", "<=", ">", ">="]
|
|
329
|
-
];
|
|
330
|
-
var nodesCopy = this.nodes;
|
|
331
|
-
for (var _i = 0, operatorPriorityGroups_1 = operatorPriorityGroups; _i < operatorPriorityGroups_1.length; _i++) {
|
|
332
|
-
var priorityGroup = operatorPriorityGroups_1[_i];
|
|
333
|
-
var i = 0;
|
|
334
|
-
while (i < nodesCopy.length) {
|
|
335
|
-
var node = nodesCopy[i];
|
|
336
|
-
if (node instanceof OperatorNode && priorityGroup.indexOf(node.operator) >= 0) {
|
|
337
|
-
var left = ensureValueType(nodesCopy[i - 1].evaluate(context));
|
|
338
|
-
var right = ensureValueType(nodesCopy[i + 1].evaluate(context));
|
|
339
|
-
if (typeof left !== typeof right) {
|
|
340
|
-
throw new Error("Incompatible operands " + left + " and " + right + " for operator " + node.operator);
|
|
341
|
-
}
|
|
342
|
-
var result = void 0;
|
|
343
|
-
if (typeof left === "number" && typeof right === "number") {
|
|
344
|
-
switch (node.operator) {
|
|
345
|
-
case "/":
|
|
346
|
-
result = left / right;
|
|
347
|
-
break;
|
|
348
|
-
case "*":
|
|
349
|
-
result = left * right;
|
|
350
|
-
break;
|
|
351
|
-
case "-":
|
|
352
|
-
result = left - right;
|
|
353
|
-
break;
|
|
354
|
-
case "+":
|
|
355
|
-
result = left + right;
|
|
356
|
-
break;
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
if (typeof left === "string" && typeof right === "string") {
|
|
360
|
-
switch (node.operator) {
|
|
361
|
-
case "+":
|
|
362
|
-
result = left + right;
|
|
363
|
-
break;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
switch (node.operator) {
|
|
367
|
-
case "==":
|
|
368
|
-
result = left == right;
|
|
369
|
-
break;
|
|
370
|
-
case "!=":
|
|
371
|
-
result = left != right;
|
|
372
|
-
break;
|
|
373
|
-
case "<":
|
|
374
|
-
result = left < right;
|
|
375
|
-
break;
|
|
376
|
-
case "<=":
|
|
377
|
-
result = left <= right;
|
|
378
|
-
break;
|
|
379
|
-
case ">":
|
|
380
|
-
result = left > right;
|
|
381
|
-
break;
|
|
382
|
-
case ">=":
|
|
383
|
-
result = left >= right;
|
|
384
|
-
break;
|
|
385
|
-
default:
|
|
386
|
-
// This should never happen
|
|
387
|
-
}
|
|
388
|
-
nodesCopy.splice(i - 1, 3, new LiteralNode(result));
|
|
389
|
-
i--;
|
|
390
|
-
}
|
|
391
|
-
i++;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
}
|
|
395
|
-
return nodesCopy[0].evaluate(context);
|
|
396
|
-
};
|
|
397
|
-
return ExpressionNode;
|
|
398
|
-
}(EvaluationNode));
|
|
399
|
-
var IdentifierNode = /** @class */ (function (_super) {
|
|
400
|
-
__extends(IdentifierNode, _super);
|
|
401
|
-
function IdentifierNode() {
|
|
402
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
|
403
|
-
}
|
|
404
|
-
IdentifierNode.prototype.evaluate = function (context) {
|
|
405
|
-
return this.identifier;
|
|
406
|
-
};
|
|
407
|
-
return IdentifierNode;
|
|
408
|
-
}(EvaluationNode));
|
|
409
|
-
var IndexerNode = /** @class */ (function (_super) {
|
|
410
|
-
__extends(IndexerNode, _super);
|
|
411
|
-
function IndexerNode() {
|
|
412
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
|
413
|
-
}
|
|
414
|
-
IndexerNode.prototype.evaluate = function (context) {
|
|
415
|
-
return this.index.evaluate(context);
|
|
416
|
-
};
|
|
417
|
-
return IndexerNode;
|
|
418
|
-
}(EvaluationNode));
|
|
419
|
-
var FunctionCallNode = /** @class */ (function (_super) {
|
|
420
|
-
__extends(FunctionCallNode, _super);
|
|
421
|
-
function FunctionCallNode() {
|
|
422
|
-
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
423
|
-
_this.functionName = null;
|
|
424
|
-
_this.parameters = [];
|
|
425
|
-
return _this;
|
|
426
|
-
}
|
|
427
|
-
FunctionCallNode.prototype.evaluate = function (context) {
|
|
428
|
-
var callback = context.getFunction(this.functionName);
|
|
429
|
-
if (callback != undefined) {
|
|
430
|
-
var evaluatedParams = [];
|
|
431
|
-
for (var _i = 0, _a = this.parameters; _i < _a.length; _i++) {
|
|
432
|
-
var param = _a[_i];
|
|
433
|
-
evaluatedParams.push(param.evaluate(context));
|
|
434
|
-
}
|
|
435
|
-
return callback.apply(void 0, evaluatedParams);
|
|
436
|
-
}
|
|
437
|
-
throw new Error("Undefined function: " + this.functionName);
|
|
438
|
-
};
|
|
439
|
-
return FunctionCallNode;
|
|
440
|
-
}(EvaluationNode));
|
|
441
|
-
var LiteralNode = /** @class */ (function (_super) {
|
|
442
|
-
__extends(LiteralNode, _super);
|
|
443
|
-
function LiteralNode(value) {
|
|
444
|
-
var _this = _super.call(this) || this;
|
|
445
|
-
_this.value = value;
|
|
446
|
-
return _this;
|
|
447
|
-
}
|
|
448
|
-
LiteralNode.prototype.evaluate = function (context) {
|
|
449
|
-
return this.value;
|
|
450
|
-
};
|
|
451
|
-
return LiteralNode;
|
|
452
|
-
}(EvaluationNode));
|
|
453
|
-
var OperatorNode = /** @class */ (function (_super) {
|
|
454
|
-
__extends(OperatorNode, _super);
|
|
455
|
-
function OperatorNode(operator) {
|
|
456
|
-
var _this = _super.call(this) || this;
|
|
457
|
-
_this.operator = operator;
|
|
458
|
-
return _this;
|
|
459
|
-
}
|
|
460
|
-
OperatorNode.prototype.evaluate = function (context) {
|
|
461
|
-
throw new Error("An operator cannot be evaluated on its own.");
|
|
462
|
-
};
|
|
463
|
-
return OperatorNode;
|
|
464
|
-
}(EvaluationNode));
|
|
465
|
-
var PathNode = /** @class */ (function (_super) {
|
|
466
|
-
__extends(PathNode, _super);
|
|
467
|
-
function PathNode() {
|
|
468
|
-
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
469
|
-
_this.parts = [];
|
|
470
|
-
return _this;
|
|
471
|
-
}
|
|
472
|
-
PathNode.prototype.evaluate = function (context) {
|
|
473
|
-
var result = undefined;
|
|
474
|
-
var index = 0;
|
|
475
|
-
while (index < this.parts.length) {
|
|
476
|
-
var part = this.parts[index];
|
|
477
|
-
try {
|
|
478
|
-
if (part instanceof IdentifierNode && index == 0) {
|
|
479
|
-
switch (part.identifier) {
|
|
480
|
-
case "$root":
|
|
481
|
-
result = context.$root;
|
|
482
|
-
break;
|
|
483
|
-
case "$data":
|
|
484
|
-
result = context.currentDataContext;
|
|
485
|
-
break;
|
|
486
|
-
case "$index":
|
|
487
|
-
result = context.$index;
|
|
488
|
-
break;
|
|
489
|
-
default:
|
|
490
|
-
result = context.currentDataContext[part.identifier];
|
|
491
|
-
break;
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
else {
|
|
495
|
-
var partValue = part.evaluate(context);
|
|
496
|
-
if (index == 0) {
|
|
497
|
-
result = partValue;
|
|
498
|
-
}
|
|
499
|
-
else {
|
|
500
|
-
result = typeof partValue !== "boolean" ? result[partValue] : result[partValue.toString()];
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
catch (e) {
|
|
505
|
-
return undefined;
|
|
506
|
-
}
|
|
507
|
-
index++;
|
|
508
|
-
}
|
|
509
|
-
return result;
|
|
510
|
-
};
|
|
511
|
-
return PathNode;
|
|
512
|
-
}(EvaluationNode));
|
|
513
|
-
var ExpressionParser = /** @class */ (function () {
|
|
514
|
-
function ExpressionParser(tokens) {
|
|
515
|
-
this._index = 0;
|
|
516
|
-
this._tokens = tokens;
|
|
517
|
-
}
|
|
518
|
-
ExpressionParser.prototype.unexpectedToken = function () {
|
|
519
|
-
throw new Error("Unexpected token " + this.current.value + " at position " + this.current.originalPosition + ".");
|
|
520
|
-
};
|
|
521
|
-
ExpressionParser.prototype.unexpectedEoe = function () {
|
|
522
|
-
throw new Error("Unexpected end of expression.");
|
|
523
|
-
};
|
|
524
|
-
ExpressionParser.prototype.moveNext = function () {
|
|
525
|
-
this._index++;
|
|
526
|
-
};
|
|
527
|
-
ExpressionParser.prototype.parseToken = function () {
|
|
528
|
-
var expectedTokenTypes = [];
|
|
529
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
530
|
-
expectedTokenTypes[_i] = arguments[_i];
|
|
531
|
-
}
|
|
532
|
-
if (this.eoe) {
|
|
533
|
-
this.unexpectedEoe();
|
|
534
|
-
}
|
|
535
|
-
var currentToken = this.current;
|
|
536
|
-
if (expectedTokenTypes.indexOf(this.current.type) < 0) {
|
|
537
|
-
this.unexpectedToken();
|
|
538
|
-
}
|
|
539
|
-
this.moveNext();
|
|
540
|
-
return currentToken;
|
|
541
|
-
};
|
|
542
|
-
ExpressionParser.prototype.parseOptionalToken = function () {
|
|
543
|
-
var expectedTokenTypes = [];
|
|
544
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
545
|
-
expectedTokenTypes[_i] = arguments[_i];
|
|
546
|
-
}
|
|
547
|
-
if (this.eoe) {
|
|
548
|
-
this.unexpectedEoe();
|
|
549
|
-
}
|
|
550
|
-
else if (expectedTokenTypes.indexOf(this.current.type) < 0) {
|
|
551
|
-
return false;
|
|
552
|
-
}
|
|
553
|
-
else {
|
|
554
|
-
this.moveNext();
|
|
555
|
-
return true;
|
|
556
|
-
}
|
|
557
|
-
};
|
|
558
|
-
ExpressionParser.prototype.parseFunctionCall = function (functionName) {
|
|
559
|
-
var result = new FunctionCallNode();
|
|
560
|
-
result.functionName = functionName;
|
|
561
|
-
this.parseToken("(");
|
|
562
|
-
var firstParameter = this.parseExpression();
|
|
563
|
-
var moreParameters = false;
|
|
564
|
-
if (firstParameter) {
|
|
565
|
-
result.parameters.push(firstParameter);
|
|
566
|
-
do {
|
|
567
|
-
moreParameters = this.parseOptionalToken(",");
|
|
568
|
-
if (moreParameters) {
|
|
569
|
-
var parameter = this.parseExpression();
|
|
570
|
-
result.parameters.push(parameter);
|
|
571
|
-
}
|
|
572
|
-
} while (moreParameters);
|
|
573
|
-
}
|
|
574
|
-
this.parseToken(")");
|
|
575
|
-
return result;
|
|
576
|
-
};
|
|
577
|
-
ExpressionParser.prototype.parseIdentifier = function () {
|
|
578
|
-
var result = new IdentifierNode();
|
|
579
|
-
result.identifier = this.current.value;
|
|
580
|
-
this.moveNext();
|
|
581
|
-
return result;
|
|
582
|
-
};
|
|
583
|
-
ExpressionParser.prototype.parseIndexer = function () {
|
|
584
|
-
var result = new IndexerNode();
|
|
585
|
-
this.parseToken("[");
|
|
586
|
-
result.index = this.parseExpression();
|
|
587
|
-
this.parseToken("]");
|
|
588
|
-
return result;
|
|
589
|
-
};
|
|
590
|
-
ExpressionParser.prototype.parsePath = function () {
|
|
591
|
-
var result = new PathNode();
|
|
592
|
-
var expectedNextTokenTypes = ["identifier", "("];
|
|
593
|
-
while (!this.eoe) {
|
|
594
|
-
if (expectedNextTokenTypes.indexOf(this.current.type) < 0) {
|
|
595
|
-
return result;
|
|
596
|
-
}
|
|
597
|
-
switch (this.current.type) {
|
|
598
|
-
case "(":
|
|
599
|
-
if (result.parts.length == 0) {
|
|
600
|
-
this.moveNext();
|
|
601
|
-
result.parts.push(this.parseExpression());
|
|
602
|
-
this.parseToken(")");
|
|
603
|
-
}
|
|
604
|
-
else {
|
|
605
|
-
var functionName = "";
|
|
606
|
-
for (var _i = 0, _a = result.parts; _i < _a.length; _i++) {
|
|
607
|
-
var part = _a[_i];
|
|
608
|
-
if (!(part instanceof IdentifierNode)) {
|
|
609
|
-
this.unexpectedToken();
|
|
610
|
-
}
|
|
611
|
-
if (functionName != "") {
|
|
612
|
-
functionName += ".";
|
|
613
|
-
}
|
|
614
|
-
functionName += part.identifier;
|
|
615
|
-
}
|
|
616
|
-
result.parts = [];
|
|
617
|
-
result.parts.push(this.parseFunctionCall(functionName));
|
|
618
|
-
}
|
|
619
|
-
expectedNextTokenTypes = [".", "["];
|
|
620
|
-
break;
|
|
621
|
-
case "[":
|
|
622
|
-
result.parts.push(this.parseIndexer());
|
|
623
|
-
expectedNextTokenTypes = [".", "(", "["];
|
|
624
|
-
break;
|
|
625
|
-
case "identifier":
|
|
626
|
-
result.parts.push(this.parseIdentifier());
|
|
627
|
-
expectedNextTokenTypes = [".", "(", "["];
|
|
628
|
-
break;
|
|
629
|
-
case ".":
|
|
630
|
-
this.moveNext();
|
|
631
|
-
expectedNextTokenTypes = ["identifier"];
|
|
632
|
-
break;
|
|
633
|
-
default:
|
|
634
|
-
expectedNextTokenTypes = [];
|
|
635
|
-
break;
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
};
|
|
639
|
-
ExpressionParser.prototype.parseExpression = function () {
|
|
640
|
-
var result = new ExpressionNode();
|
|
641
|
-
var expectedNextTokenTypes = literals.concat("(", "+", "-");
|
|
642
|
-
while (!this.eoe) {
|
|
643
|
-
if (expectedNextTokenTypes.indexOf(this.current.type) < 0) {
|
|
644
|
-
if (result.nodes.length == 0) {
|
|
645
|
-
this.unexpectedToken();
|
|
646
|
-
}
|
|
647
|
-
return result;
|
|
648
|
-
}
|
|
649
|
-
switch (this.current.type) {
|
|
650
|
-
case "(":
|
|
651
|
-
case "identifier":
|
|
652
|
-
result.nodes.push(this.parsePath());
|
|
653
|
-
expectedNextTokenTypes = orderedOperators;
|
|
654
|
-
break;
|
|
655
|
-
case "string":
|
|
656
|
-
case "number":
|
|
657
|
-
case "boolean":
|
|
658
|
-
if (this.current.type == "string") {
|
|
659
|
-
result.nodes.push(new LiteralNode(this.current.value));
|
|
660
|
-
}
|
|
661
|
-
else if (this.current.type == "number") {
|
|
662
|
-
result.nodes.push(new LiteralNode(parseFloat(this.current.value)));
|
|
663
|
-
}
|
|
664
|
-
else {
|
|
665
|
-
result.nodes.push(new LiteralNode(this.current.value === "true"));
|
|
666
|
-
}
|
|
667
|
-
this.moveNext();
|
|
668
|
-
expectedNextTokenTypes = orderedOperators;
|
|
669
|
-
break;
|
|
670
|
-
case "-":
|
|
671
|
-
if (result.nodes.length == 0) {
|
|
672
|
-
result.nodes.push(new LiteralNode(-1));
|
|
673
|
-
result.nodes.push(new OperatorNode("*"));
|
|
674
|
-
expectedNextTokenTypes = ["identifier", "number", "("];
|
|
675
|
-
}
|
|
676
|
-
else {
|
|
677
|
-
result.nodes.push(new OperatorNode(this.current.type));
|
|
678
|
-
expectedNextTokenTypes = literals.concat("(");
|
|
679
|
-
}
|
|
680
|
-
this.moveNext();
|
|
681
|
-
break;
|
|
682
|
-
case "+":
|
|
683
|
-
if (result.nodes.length == 0) {
|
|
684
|
-
expectedNextTokenTypes = literals.concat("(");
|
|
685
|
-
}
|
|
686
|
-
else {
|
|
687
|
-
result.nodes.push(new OperatorNode(this.current.type));
|
|
688
|
-
expectedNextTokenTypes = literals.concat("(");
|
|
689
|
-
}
|
|
690
|
-
this.moveNext();
|
|
691
|
-
break;
|
|
692
|
-
case "*":
|
|
693
|
-
case "/":
|
|
694
|
-
case "==":
|
|
695
|
-
case "!=":
|
|
696
|
-
case "<":
|
|
697
|
-
case "<=":
|
|
698
|
-
case ">":
|
|
699
|
-
case ">=":
|
|
700
|
-
result.nodes.push(new OperatorNode(this.current.type));
|
|
701
|
-
this.moveNext();
|
|
702
|
-
expectedNextTokenTypes = literals.concat("(");
|
|
703
|
-
break;
|
|
704
|
-
default:
|
|
705
|
-
expectedNextTokenTypes = [];
|
|
706
|
-
break;
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
};
|
|
710
|
-
Object.defineProperty(ExpressionParser.prototype, "eoe", {
|
|
711
|
-
get: function () {
|
|
712
|
-
return this._index >= this._tokens.length;
|
|
713
|
-
},
|
|
714
|
-
enumerable: true,
|
|
715
|
-
configurable: true
|
|
716
|
-
});
|
|
717
|
-
Object.defineProperty(ExpressionParser.prototype, "current", {
|
|
718
|
-
get: function () {
|
|
719
|
-
return this._tokens[this._index];
|
|
720
|
-
},
|
|
721
|
-
enumerable: true,
|
|
722
|
-
configurable: true
|
|
723
|
-
});
|
|
724
|
-
ExpressionParser.parseBinding = function (bindingExpression) {
|
|
725
|
-
var parser = new ExpressionParser(Tokenizer.parse(bindingExpression));
|
|
726
|
-
parser.parseToken("{");
|
|
727
|
-
var allowNull = !parser.parseOptionalToken("?#");
|
|
728
|
-
var expression = parser.parseExpression();
|
|
729
|
-
parser.parseToken("}");
|
|
730
|
-
return new Binding(expression, allowNull);
|
|
731
|
-
};
|
|
732
|
-
return ExpressionParser;
|
|
733
|
-
}());
|
|
734
|
-
exports.ExpressionParser = ExpressionParser;
|
|
735
|
-
var Binding = /** @class */ (function () {
|
|
736
|
-
function Binding(expression, allowNull) {
|
|
737
|
-
if (allowNull === void 0) { allowNull = true; }
|
|
738
|
-
this.expression = expression;
|
|
739
|
-
this.allowNull = allowNull;
|
|
740
|
-
}
|
|
741
|
-
Binding.prototype.evaluate = function (context) {
|
|
742
|
-
return this.expression.evaluate(context);
|
|
743
|
-
};
|
|
744
|
-
return Binding;
|
|
745
|
-
}());
|
|
746
|
-
exports.Binding = Binding;
|
|
747
223
|
|
|
748
224
|
|
|
749
225
|
/***/ }),
|
|
@@ -752,240 +228,472 @@ exports.Binding = Binding;
|
|
|
752
228
|
/*!********************************!*\
|
|
753
229
|
!*** ./src/template-engine.ts ***!
|
|
754
230
|
\********************************/
|
|
755
|
-
|
|
756
|
-
/***/ (function(module, exports, __webpack_require__) {
|
|
231
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
757
232
|
|
|
758
|
-
"use strict";
|
|
759
233
|
|
|
760
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
234
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
235
|
+
exports.Template = exports.GlobalSettings = void 0;
|
|
761
236
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
762
237
|
// Licensed under the MIT License.
|
|
763
|
-
|
|
764
|
-
var
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
result._parts.push(part);
|
|
802
|
-
i = end + 1;
|
|
803
|
-
}
|
|
804
|
-
}
|
|
805
|
-
if (!expressionFound) {
|
|
806
|
-
result._parts.push(s.substr(i));
|
|
807
|
-
break;
|
|
808
|
-
}
|
|
809
|
-
} while (i < s.length);
|
|
810
|
-
if (result._parts.length == 1 && typeof result._parts[0] === "string") {
|
|
811
|
-
return result._parts[0];
|
|
812
|
-
}
|
|
813
|
-
else {
|
|
814
|
-
return result;
|
|
815
|
-
}
|
|
816
|
-
};
|
|
817
|
-
TemplatizedString.prototype.evalExpression = function (bindingExpression, context) {
|
|
818
|
-
var result = bindingExpression.evaluate(context);
|
|
819
|
-
if (result == undefined) {
|
|
820
|
-
this._shouldDropOwner = this._shouldDropOwner || !bindingExpression.allowNull;
|
|
821
|
-
}
|
|
822
|
-
return result;
|
|
823
|
-
};
|
|
824
|
-
TemplatizedString.prototype.internalEvaluate = function (context) {
|
|
825
|
-
if (this._parts.length == 0) {
|
|
826
|
-
return undefined;
|
|
827
|
-
}
|
|
828
|
-
else if (this._parts.length == 1) {
|
|
829
|
-
if (typeof this._parts[0] === "string") {
|
|
830
|
-
return this._parts[0];
|
|
831
|
-
}
|
|
832
|
-
else {
|
|
833
|
-
return this.evalExpression(this._parts[0], context);
|
|
834
|
-
}
|
|
835
|
-
}
|
|
836
|
-
else {
|
|
837
|
-
var s = "";
|
|
838
|
-
for (var _i = 0, _a = this._parts; _i < _a.length; _i++) {
|
|
839
|
-
var part = _a[_i];
|
|
840
|
-
if (typeof part === "string") {
|
|
841
|
-
s += part;
|
|
842
|
-
}
|
|
843
|
-
else {
|
|
844
|
-
s += this.evalExpression(part, context);
|
|
845
|
-
}
|
|
846
|
-
}
|
|
847
|
-
return s;
|
|
848
|
-
}
|
|
849
|
-
};
|
|
850
|
-
TemplatizedString.prototype.evaluate = function (context) {
|
|
851
|
-
this._shouldDropOwner = false;
|
|
852
|
-
return this.internalEvaluate(context);
|
|
853
|
-
};
|
|
854
|
-
Object.defineProperty(TemplatizedString.prototype, "shouldDropOwner", {
|
|
855
|
-
get: function () {
|
|
856
|
-
return this._shouldDropOwner;
|
|
857
|
-
},
|
|
858
|
-
enumerable: true,
|
|
859
|
-
configurable: true
|
|
860
|
-
});
|
|
861
|
-
return TemplatizedString;
|
|
238
|
+
|
|
239
|
+
var AEL = __webpack_require__(/*! adaptive-expressions */ "adaptive-expressions");
|
|
240
|
+
var EvaluationContext = /** @class */ (function () {
|
|
241
|
+
function EvaluationContext(context) {
|
|
242
|
+
this._stateStack = [];
|
|
243
|
+
if (context !== undefined) {
|
|
244
|
+
this.$root = context.$root;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
EvaluationContext.prototype.isReservedField = function (name) {
|
|
248
|
+
return EvaluationContext._reservedFields.indexOf(name) >= 0;
|
|
249
|
+
};
|
|
250
|
+
EvaluationContext.prototype.saveState = function () {
|
|
251
|
+
this._stateStack.push({
|
|
252
|
+
$data: this.$data,
|
|
253
|
+
$index: this.$index
|
|
254
|
+
});
|
|
255
|
+
};
|
|
256
|
+
EvaluationContext.prototype.restoreLastState = function () {
|
|
257
|
+
if (this._stateStack.length === 0) {
|
|
258
|
+
throw new Error("There is no evaluation context state to restore.");
|
|
259
|
+
}
|
|
260
|
+
var savedContext = this._stateStack.pop();
|
|
261
|
+
this.$data = savedContext.$data;
|
|
262
|
+
this.$index = savedContext.$index;
|
|
263
|
+
};
|
|
264
|
+
Object.defineProperty(EvaluationContext.prototype, "$data", {
|
|
265
|
+
get: function () {
|
|
266
|
+
return this._$data !== undefined ? this._$data : this.$root;
|
|
267
|
+
},
|
|
268
|
+
set: function (value) {
|
|
269
|
+
this._$data = value;
|
|
270
|
+
},
|
|
271
|
+
enumerable: false,
|
|
272
|
+
configurable: true
|
|
273
|
+
});
|
|
274
|
+
EvaluationContext._reservedFields = ["$data", "$when", "$root", "$index"];
|
|
275
|
+
return EvaluationContext;
|
|
862
276
|
}());
|
|
277
|
+
var TemplateObjectMemory = /** @class */ (function () {
|
|
278
|
+
function TemplateObjectMemory() {
|
|
279
|
+
this._memory = new AEL.SimpleObjectMemory(this);
|
|
280
|
+
}
|
|
281
|
+
TemplateObjectMemory.prototype.getValue = function (path) {
|
|
282
|
+
var actualPath = (path.length > 0 && path[0] !== "$") ? "$data." + path : path;
|
|
283
|
+
return this._memory.getValue(actualPath);
|
|
284
|
+
};
|
|
285
|
+
TemplateObjectMemory.prototype.setValue = function (path, input) {
|
|
286
|
+
this._memory.setValue(path, input);
|
|
287
|
+
};
|
|
288
|
+
TemplateObjectMemory.prototype.version = function () {
|
|
289
|
+
return this._memory.version();
|
|
290
|
+
};
|
|
291
|
+
return TemplateObjectMemory;
|
|
292
|
+
}());
|
|
293
|
+
/**
|
|
294
|
+
* Holds global settings that can be used to customize the way templates are expanded.
|
|
295
|
+
*/
|
|
296
|
+
var GlobalSettings = /** @class */ (function () {
|
|
297
|
+
function GlobalSettings() {
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Callback invoked when expression evaluation needs the value of a field in the source data object
|
|
301
|
+
* and that field is undefined or null. By default, expression evaluation will substitute an undefined
|
|
302
|
+
* field with its binding expression (e.g. `${field}`). This callback makes it possible to customize that
|
|
303
|
+
* behavior.
|
|
304
|
+
*
|
|
305
|
+
* **Example**
|
|
306
|
+
* Given this data object:
|
|
307
|
+
*
|
|
308
|
+
* ```json
|
|
309
|
+
* {
|
|
310
|
+
* firstName: "David"
|
|
311
|
+
* }
|
|
312
|
+
* ```
|
|
313
|
+
*
|
|
314
|
+
* The expression `${firstName} ${lastName}` will evaluate to "David ${lastName}" because the `lastName`
|
|
315
|
+
* field is undefined.
|
|
316
|
+
*
|
|
317
|
+
* Now let's set the callback:
|
|
318
|
+
* ```typescript
|
|
319
|
+
* GlobalSettings.getUndefinedFieldValueSubstitutionString = (path: string) => { return "<undefined value>"; }
|
|
320
|
+
* ```
|
|
321
|
+
*
|
|
322
|
+
* With that, the above expression will evaluate to "David <undefined value>"
|
|
323
|
+
*/
|
|
324
|
+
GlobalSettings.getUndefinedFieldValueSubstitutionString = undefined;
|
|
325
|
+
return GlobalSettings;
|
|
326
|
+
}());
|
|
327
|
+
exports.GlobalSettings = GlobalSettings;
|
|
328
|
+
/**
|
|
329
|
+
* Represents a template that can be bound to data.
|
|
330
|
+
*/
|
|
863
331
|
var Template = /** @class */ (function () {
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
332
|
+
/**
|
|
333
|
+
* Initializes a new Template instance based on the provided payload.
|
|
334
|
+
* Once created, the instance can be bound to different data objects
|
|
335
|
+
* in a loop.
|
|
336
|
+
*
|
|
337
|
+
* @param payload The template payload.
|
|
338
|
+
*/
|
|
339
|
+
function Template(payload) {
|
|
340
|
+
this._preparedPayload = Template.prepare(payload);
|
|
341
|
+
}
|
|
342
|
+
Template.prepare = function (node) {
|
|
343
|
+
if (typeof node === "string") {
|
|
344
|
+
return Template.parseInterpolatedString(node);
|
|
345
|
+
}
|
|
346
|
+
else if (typeof node === "object" && node !== null) {
|
|
347
|
+
if (Array.isArray(node)) {
|
|
348
|
+
var result = [];
|
|
349
|
+
for (var _i = 0, node_1 = node; _i < node_1.length; _i++) {
|
|
350
|
+
var item = node_1[_i];
|
|
351
|
+
result.push(Template.prepare(item));
|
|
352
|
+
}
|
|
353
|
+
return result;
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
var keys = Object.keys(node);
|
|
357
|
+
var result = {};
|
|
358
|
+
for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) {
|
|
359
|
+
var key = keys_1[_a];
|
|
360
|
+
result[key] = Template.prepare(node[key]);
|
|
361
|
+
}
|
|
362
|
+
return result;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
return node;
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
Template.internalTryEvaluateExpression = function (expression, context, allowSubstitutions) {
|
|
370
|
+
var memory = new TemplateObjectMemory();
|
|
371
|
+
memory.$root = context.$root;
|
|
372
|
+
memory.$data = context.$data;
|
|
373
|
+
memory.$index = context.$index;
|
|
374
|
+
var options = undefined;
|
|
375
|
+
if (allowSubstitutions) {
|
|
376
|
+
options = new AEL.Options();
|
|
377
|
+
options.nullSubstitution = function (path) {
|
|
378
|
+
var substitutionValue = undefined;
|
|
379
|
+
if (GlobalSettings.getUndefinedFieldValueSubstitutionString) {
|
|
380
|
+
substitutionValue = GlobalSettings.getUndefinedFieldValueSubstitutionString(path);
|
|
381
|
+
}
|
|
382
|
+
return substitutionValue ? substitutionValue : "${" + path + "}";
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
// The root of an expression coming from an interpolated string is of type Concat.
|
|
386
|
+
// In that case, and if the caller allows it, we're doing our own concatenation
|
|
387
|
+
// in order to catch each individual expression evaluation error and substitute in
|
|
388
|
+
// the final string
|
|
389
|
+
if (expression.type === AEL.ExpressionType.Concat && allowSubstitutions) {
|
|
390
|
+
var result = "";
|
|
391
|
+
for (var _i = 0, _a = expression.children; _i < _a.length; _i++) {
|
|
392
|
+
var childExpression = _a[_i];
|
|
393
|
+
var evaluationResult = void 0;
|
|
394
|
+
try {
|
|
395
|
+
evaluationResult = childExpression.tryEvaluate(memory, options);
|
|
396
|
+
}
|
|
397
|
+
catch (ex) {
|
|
398
|
+
// We'll swallow all exceptions here
|
|
399
|
+
evaluationResult = {
|
|
400
|
+
value: undefined,
|
|
401
|
+
error: ex
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
if (evaluationResult.error) {
|
|
405
|
+
evaluationResult.value = "${" + childExpression.toString() + "}";
|
|
406
|
+
}
|
|
407
|
+
result += evaluationResult.value.toString();
|
|
408
|
+
}
|
|
409
|
+
return { value: result, error: undefined };
|
|
410
|
+
}
|
|
411
|
+
return expression.tryEvaluate(memory, options);
|
|
412
|
+
};
|
|
413
|
+
/**
|
|
414
|
+
* Parses an interpolated string into an Expression object ready to evaluate.
|
|
415
|
+
*
|
|
416
|
+
* @param interpolatedString The interpolated string to parse. Example: "Hello ${name}"
|
|
417
|
+
* @returns An Expression object if the provided interpolated string contained at least one expression (e.g. "${expression}"); the original string otherwise.
|
|
418
|
+
*/
|
|
419
|
+
Template.parseInterpolatedString = function (interpolatedString) {
|
|
420
|
+
var lookup = function (type) {
|
|
421
|
+
var standardFunction = AEL.ExpressionFunctions.standardFunctions.get(type);
|
|
422
|
+
if (standardFunction) {
|
|
423
|
+
return standardFunction;
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
return new AEL.ExpressionEvaluator(type, function (expression, state, options) { throw new Error("Unknown function " + type); }, AEL.ReturnType.String);
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
// If there is at least one expression start marker, let's attempt to convert into an expression
|
|
430
|
+
if (interpolatedString.indexOf("${") >= 0) {
|
|
431
|
+
var parsedExpression = AEL.Expression.parse("`" + interpolatedString + "`", lookup);
|
|
432
|
+
if (parsedExpression.type === "concat") {
|
|
433
|
+
if (parsedExpression.children.length === 1 && !(parsedExpression.children[0] instanceof AEL.Constant)) {
|
|
434
|
+
// The concat contains a single child that isn't a constant, thus the original
|
|
435
|
+
// string was a single expression. When evaluated, we want it to produce the type
|
|
436
|
+
// of that single expression
|
|
437
|
+
return parsedExpression.children[0];
|
|
438
|
+
}
|
|
439
|
+
else if (parsedExpression.children.length === 2) {
|
|
440
|
+
var firstChild = parsedExpression.children[0];
|
|
441
|
+
if (firstChild instanceof AEL.Constant && firstChild.value === "" && !(parsedExpression.children[1] instanceof AEL.Constant)) {
|
|
442
|
+
// The concat contains 2 children, and the first one is an empty string constant and the second isn't a constant.
|
|
443
|
+
// From version 4.10.3, AEL always inserts an empty string constant in all concat expression. Thus the original
|
|
444
|
+
// string was a single expression in this case as well. When evaluated, we want it to produce the type
|
|
445
|
+
// of that single expression.
|
|
446
|
+
return parsedExpression.children[1];
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
// Otherwise, we want the expression to produce a string
|
|
450
|
+
return parsedExpression;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
// If the original string didn't contain any expression, return i as is
|
|
454
|
+
return interpolatedString;
|
|
455
|
+
};
|
|
456
|
+
/**
|
|
457
|
+
* Tries to evaluate the provided expression using the provided context.
|
|
458
|
+
*
|
|
459
|
+
* @param expression The expression to evaluate.
|
|
460
|
+
* @param context The context (data) used to evaluate the expression.
|
|
461
|
+
* @param allowSubstitutions Indicates if the expression evaluator should substitute undefined value with a default
|
|
462
|
+
* string or the value returned by the GlobalSettings.getUndefinedFieldValueSubstitutionString callback.
|
|
463
|
+
* @returns An object representing the result of the evaluation. If the evaluation succeeded, the value property
|
|
464
|
+
* contains the actual evaluation result, and the error property is undefined. If the evaluation fails, the error
|
|
465
|
+
* property contains a message detailing the error that occurred.
|
|
466
|
+
*/
|
|
467
|
+
Template.tryEvaluateExpression = function (expression, context, allowSubstitutions) {
|
|
468
|
+
return Template.internalTryEvaluateExpression(expression, new EvaluationContext(context), allowSubstitutions);
|
|
469
|
+
};
|
|
470
|
+
Template.prototype.expandSingleObject = function (node) {
|
|
471
|
+
var result = {};
|
|
472
|
+
var keys = Object.keys(node);
|
|
473
|
+
for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {
|
|
474
|
+
var key = keys_2[_i];
|
|
475
|
+
if (!this._context.isReservedField(key)) {
|
|
476
|
+
var value = this.internalExpand(node[key]);
|
|
477
|
+
if (value !== undefined) {
|
|
478
|
+
result[key] = value;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
return result;
|
|
483
|
+
};
|
|
484
|
+
Template.prototype.internalExpand = function (node) {
|
|
485
|
+
var result;
|
|
486
|
+
this._context.saveState();
|
|
487
|
+
if (Array.isArray(node)) {
|
|
488
|
+
var itemArray = [];
|
|
489
|
+
for (var _i = 0, node_2 = node; _i < node_2.length; _i++) {
|
|
490
|
+
var item = node_2[_i];
|
|
491
|
+
var expandedItem = this.internalExpand(item);
|
|
492
|
+
if (expandedItem !== null) {
|
|
493
|
+
if (Array.isArray(expandedItem)) {
|
|
494
|
+
itemArray = itemArray.concat(expandedItem);
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
itemArray.push(expandedItem);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
result = itemArray;
|
|
502
|
+
}
|
|
503
|
+
else if (node instanceof AEL.Expression) {
|
|
504
|
+
var evaluationResult = Template.internalTryEvaluateExpression(node, this._context, true);
|
|
505
|
+
if (!evaluationResult.error) {
|
|
506
|
+
result = evaluationResult.value;
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
throw new Error(evaluationResult.error);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
else if (typeof node === "object" && node !== null) {
|
|
513
|
+
var when = node["$when"];
|
|
514
|
+
var dataContext = node["$data"];
|
|
515
|
+
var dataContextIsArray = false;
|
|
516
|
+
var dataContexts = void 0;
|
|
517
|
+
if (dataContext === undefined) {
|
|
518
|
+
dataContexts = [undefined];
|
|
519
|
+
}
|
|
520
|
+
else {
|
|
521
|
+
if (dataContext instanceof AEL.Expression) {
|
|
522
|
+
var evaluationResult = Template.internalTryEvaluateExpression(dataContext, this._context, true);
|
|
523
|
+
if (!evaluationResult.error) {
|
|
524
|
+
dataContext = evaluationResult.value;
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
throw new Error(evaluationResult.error);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
if (Array.isArray(dataContext)) {
|
|
531
|
+
dataContexts = dataContext;
|
|
532
|
+
dataContextIsArray = true;
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
535
|
+
dataContexts = [dataContext];
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
result = [];
|
|
539
|
+
for (var i = 0; i < dataContexts.length; i++) {
|
|
540
|
+
if (dataContextIsArray) {
|
|
541
|
+
this._context.$index = i;
|
|
542
|
+
}
|
|
543
|
+
if (dataContexts[i] !== undefined) {
|
|
544
|
+
this._context.$data = dataContexts[i];
|
|
545
|
+
}
|
|
546
|
+
var dropObject = false;
|
|
547
|
+
if (when instanceof AEL.Expression) {
|
|
548
|
+
var evaluationResult = Template.internalTryEvaluateExpression(when, this._context, false);
|
|
549
|
+
var whenValue = false;
|
|
550
|
+
// If $when fails to evaluate or evaluates to anything but a boolean, consider it is false
|
|
551
|
+
if (!evaluationResult.error) {
|
|
552
|
+
whenValue = typeof evaluationResult.value === "boolean" && evaluationResult.value;
|
|
553
|
+
}
|
|
554
|
+
dropObject = !whenValue;
|
|
555
|
+
}
|
|
556
|
+
if (!dropObject) {
|
|
557
|
+
var expandedObject = this.expandSingleObject(node);
|
|
558
|
+
if (expandedObject !== null) {
|
|
559
|
+
result.push(expandedObject);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
if (result.length === 0) {
|
|
564
|
+
result = null;
|
|
565
|
+
}
|
|
566
|
+
else if (result.length === 1) {
|
|
567
|
+
result = result[0];
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
result = node;
|
|
572
|
+
}
|
|
573
|
+
this._context.restoreLastState();
|
|
574
|
+
return result;
|
|
575
|
+
};
|
|
576
|
+
/**
|
|
577
|
+
* Expands the template using the provided context. Template expansion involves
|
|
578
|
+
* evaluating the expressions used in the original template payload, as well as
|
|
579
|
+
* repeating (expanding) parts of that payload that are bound to arrays.
|
|
580
|
+
*
|
|
581
|
+
* Example:
|
|
582
|
+
*
|
|
583
|
+
* ```typescript
|
|
584
|
+
* let context = {
|
|
585
|
+
* $root: {
|
|
586
|
+
* firstName: "John",
|
|
587
|
+
* lastName: "Doe",
|
|
588
|
+
* children: [
|
|
589
|
+
* { fullName: "Jane Doe", age: 9 },
|
|
590
|
+
* { fullName: "Alex Doe", age: 12 }
|
|
591
|
+
* ]
|
|
592
|
+
* }
|
|
593
|
+
* }
|
|
594
|
+
*
|
|
595
|
+
* let templatePayload = {
|
|
596
|
+
* type: "AdaptiveCard",
|
|
597
|
+
* version: "1.2",
|
|
598
|
+
* body: [
|
|
599
|
+
* {
|
|
600
|
+
* type: "TextBlock",
|
|
601
|
+
* text: "${firstName} ${lastName}"
|
|
602
|
+
* },
|
|
603
|
+
* {
|
|
604
|
+
* type: "TextBlock",
|
|
605
|
+
* $data: "${children}",
|
|
606
|
+
* text: "${fullName} (${age})"
|
|
607
|
+
* }
|
|
608
|
+
* ]
|
|
609
|
+
* }
|
|
610
|
+
*
|
|
611
|
+
* let template = new Template(templatePayload);
|
|
612
|
+
*
|
|
613
|
+
* let expandedTemplate = template.expand(context);
|
|
614
|
+
* ```
|
|
615
|
+
*
|
|
616
|
+
* With the above code, the value of `expandedTemplate` will be
|
|
617
|
+
*
|
|
618
|
+
* ```json
|
|
619
|
+
* {
|
|
620
|
+
* type: "AdaptiveCard",
|
|
621
|
+
* version: "1.2",
|
|
622
|
+
* body: [
|
|
623
|
+
* {
|
|
624
|
+
* type: "TextBlock",
|
|
625
|
+
* text: "John Doe"
|
|
626
|
+
* },
|
|
627
|
+
* {
|
|
628
|
+
* type: "TextBlock",
|
|
629
|
+
* text: "Jane Doe (9)"
|
|
630
|
+
* },
|
|
631
|
+
* {
|
|
632
|
+
* type: "TextBlock",
|
|
633
|
+
* text: "Alex Doe (12)"
|
|
634
|
+
* }
|
|
635
|
+
* ]
|
|
636
|
+
* }
|
|
637
|
+
* ```
|
|
638
|
+
*
|
|
639
|
+
* @param context The context to bind the template to.
|
|
640
|
+
* @returns A value representing the expanded template. The type of that value
|
|
641
|
+
* is dependent on the type of the original template payload passed to the constructor.
|
|
642
|
+
*/
|
|
643
|
+
Template.prototype.expand = function (context) {
|
|
644
|
+
this._context = new EvaluationContext(context);
|
|
645
|
+
return this.internalExpand(this._preparedPayload);
|
|
646
|
+
};
|
|
647
|
+
return Template;
|
|
983
648
|
}());
|
|
984
649
|
exports.Template = Template;
|
|
650
|
+
/***/ }),
|
|
985
651
|
|
|
652
|
+
/***/ "adaptive-expressions":
|
|
653
|
+
/*!****************************************************************************************************!*\
|
|
654
|
+
!*** external {"commonjs2":"adaptive-expressions","commonjs":"adaptive-expressions","root":"AEL"} ***!
|
|
655
|
+
\****************************************************************************************************/
|
|
656
|
+
/***/ ((module) => {
|
|
657
|
+
|
|
658
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_adaptive_expressions__;
|
|
986
659
|
|
|
987
660
|
/***/ })
|
|
988
661
|
|
|
989
|
-
/******/
|
|
662
|
+
/******/ });
|
|
663
|
+
/************************************************************************/
|
|
664
|
+
/******/ // The module cache
|
|
665
|
+
/******/ var __webpack_module_cache__ = {};
|
|
666
|
+
/******/
|
|
667
|
+
/******/ // The require function
|
|
668
|
+
/******/ function __webpack_require__(moduleId) {
|
|
669
|
+
/******/ // Check if module is in cache
|
|
670
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
671
|
+
/******/ if (cachedModule !== undefined) {
|
|
672
|
+
/******/ return cachedModule.exports;
|
|
673
|
+
/******/ }
|
|
674
|
+
/******/ // Create a new module (and put it into the cache)
|
|
675
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
676
|
+
/******/ // no module.id needed
|
|
677
|
+
/******/ // no module.loaded needed
|
|
678
|
+
/******/ exports: {}
|
|
679
|
+
/******/ };
|
|
680
|
+
/******/
|
|
681
|
+
/******/ // Execute the module function
|
|
682
|
+
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
683
|
+
/******/
|
|
684
|
+
/******/ // Return the exports of the module
|
|
685
|
+
/******/ return module.exports;
|
|
686
|
+
/******/ }
|
|
687
|
+
/******/
|
|
688
|
+
/************************************************************************/
|
|
689
|
+
/******/
|
|
690
|
+
/******/ // startup
|
|
691
|
+
/******/ // Load entry module and return exports
|
|
692
|
+
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
693
|
+
/******/ var __webpack_exports__ = __webpack_require__("./src/adaptivecards-templating.ts");
|
|
694
|
+
/******/
|
|
695
|
+
/******/ return __webpack_exports__;
|
|
696
|
+
/******/ })()
|
|
697
|
+
;
|
|
990
698
|
});
|
|
991
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9BQ0RhdGEvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0FDRGF0YS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9BQ0RhdGEvLi9zcmMvYWRhcHRpdmVjYXJkcy10ZW1wbGF0aW5nLnRzIiwid2VicGFjazovL0FDRGF0YS8uL3NyYy9leHByZXNzaW9uLXBhcnNlci50cyIsIndlYnBhY2s6Ly9BQ0RhdGEvLi9zcmMvdGVtcGxhdGUtZW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsNERBQTREO0FBQzVELGtDQUFrQztBQUNsQyx1RkFBb0M7QUFDcEMsbUZBQWtDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDd0JsQyxJQUFNLGdCQUFnQixHQUFxQjtJQUN2QyxHQUFHO0lBQ0gsR0FBRztJQUNILEdBQUc7SUFDSCxHQUFHO0lBQ0gsSUFBSTtJQUNKLElBQUk7SUFDSixHQUFHO0lBQ0gsSUFBSTtJQUNKLEdBQUc7SUFDSCxJQUFJO0NBQ1AsQ0FBQztBQUVGLElBQU0sUUFBUSxHQUFxQjtJQUMvQixZQUFZO0lBQ1osUUFBUTtJQUNSLFFBQVE7SUFDUixTQUFTO0NBQ1osQ0FBQztBQWFGO0lBQUE7SUEwRUEsQ0FBQztJQXZFVSxjQUFJLEdBQVg7UUFDSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDaEIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDdEMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFDL0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFDbEMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFDL0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDaEMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDaEMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDaEMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDaEMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFDL0MsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFDaEQsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDaEMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFDL0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDaEMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFDL0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDaEMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDaEMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDakMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDakMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDakMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFDL0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDakMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFDL0IsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFDNUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFDNUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FDL0M7SUFDTCxDQUFDO0lBRU0sZUFBSyxHQUFaLFVBQWEsVUFBa0I7UUFDM0IsSUFBSSxNQUFNLEdBQVksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVWLE9BQU8sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFF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Q0FBQyxDQUFDO2lCQUMxQzthQUNKO2lCQUNJO2dCQUNELE1BQU0sR0FBRyxJQUFJLENBQUM7YUFDakI7U0FDSjthQUNJO1lBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNqQjtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUVqQyxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBUUQseUJBQU0sR0FBTixVQUFPLE9BQTBCO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBRXhCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNMLGVBQUM7QUFBRCxDQUFDO0FBcEpZLDRCQUFRIiwiZmlsZSI6ImFkYXB0aXZlY2FyZHMtdGVtcGxhdGluZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkFDRGF0YVwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJBQ0RhdGFcIl0gPSBmYWN0b3J5KCk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2FkYXB0aXZlY2FyZHMtdGVtcGxhdGluZy50c1wiKTtcbiIsIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbmV4cG9ydCAqIGZyb20gXCIuL2V4cHJlc3Npb24tcGFyc2VyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3RlbXBsYXRlLWVuZ2luZVwiOyIsIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbnR5cGUgVG9rZW5UeXBlID1cclxuICAgIFwie1wiIHxcclxuICAgIFwiPyNcIiB8XHJcbiAgICBcIn1cIiB8XHJcbiAgICBcIltcIiB8XHJcbiAgICBcIl1cIiB8XHJcbiAgICBcIihcIiB8XHJcbiAgICBcIilcIiB8XHJcbiAgICBcImlkZW50aWZpZXJcIiB8XHJcbiAgICBcIi5cIiB8XHJcbiAgICBcIixcIiB8XHJcbiAgICBcIitcIiB8XHJcbiAgICBcIi1cIiB8XHJcbiAgICBcIipcIiB8XHJcbiAgICBcIi9cIiB8XHJcbiAgICBcIj09XCIgfFxyXG4gICAgXCIhPVwiIHxcclxuICAgIFwiPFwiIHxcclxuICAgIFwiPD1cIiB8XHJcbiAgICBcIj5cIiB8XHJcbiAgICBcIj49XCIgfFxyXG4gICAgXCJzdHJpbmdcIiB8XHJcbiAgICBcIm51bWJlclwiIHxcclxuICAgIFwiYm9vbGVhblwiO1xyXG5cclxuY29uc3Qgb3JkZXJlZE9wZXJhdG9yczogQXJyYXk8VG9rZW5UeXBlPiA9IFtcclxuICAgIFwiL1wiLFxyXG4gICAgXCIqXCIsXHJcbiAgICBcIi1cIixcclxuICAgIFwiK1wiLFxyXG4gICAgXCI9PVwiLFxyXG4gICAgXCIhPVwiLFxyXG4gICAgXCI8XCIsXHJcbiAgICBcIjw9XCIsXHJcbiAgICBcIj5cIixcclxuICAgIFwiPj1cIlxyXG5dO1xyXG5cclxuY29uc3QgbGl0ZXJhbHM6IEFycmF5PFRva2VuVHlwZT4gPSBbXHJcbiAgICBcImlkZW50aWZpZXJcIixcclxuICAgIFwic3RyaW5nXCIsXHJcbiAgICBcIm51bWJlclwiLFxyXG4gICAgXCJib29sZWFuXCJcclxuXTtcclxuXHJcbmludGVyZmFjZSBUb2tlbml6ZXJSdWxlIHtcclxuICAgIHRva2VuVHlwZTogVG9rZW5UeXBlO1xyXG4gICAgcmVnRXg6IFJlZ0V4cDtcclxufVxyXG5cclxuaW50ZXJmYWNlIFRva2VuIHtcclxuICAgIHR5cGU6IFRva2VuVHlwZTtcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbiAgICBvcmlnaW5hbFBvc2l0aW9uOiBudW1iZXI7XHJcbn1cclxuXHJcbmNsYXNzIFRva2VuaXplciB7XHJcbiAgICBzdGF0aWMgcnVsZXM6IEFycmF5PFRva2VuaXplclJ1bGU+ID0gW107XHJcblxyXG4gICAgc3RhdGljIGluaXQoKSB7XHJcbiAgICAgICAgVG9rZW5pemVyLnJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiB1bmRlZmluZWQsIHJlZ0V4OiAvXlxccy8gfSxcclxuICAgICAgICAgICAgeyB0b2tlblR5cGU6IFwie1wiLCByZWdFeDogL157LyB9LFxyXG4gICAgICAgICAgICB7IHRva2VuVHlwZTogXCI/I1wiLCByZWdFeDogL15cXD8jLyB9LFxyXG4gICAgICAgICAgICB7IHRva2VuVHlwZTogXCJ9XCIsIHJlZ0V4OiAvXn0vIH0sXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiBcIltcIiwgcmVnRXg6IC9eXFxbLyB9LFxyXG4gICAgICAgICAgICB7IHRva2VuVHlwZTogXCJdXCIsIHJlZ0V4OiAvXlxcXS8gfSxcclxuICAgICAgICAgICAgeyB0b2tlblR5cGU6IFwiKFwiLCByZWdFeDogL15cXCgvIH0sXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiBcIilcIiwgcmVnRXg6IC9eXFwpLyB9LFxyXG4gICAgICAgICAgICB7IHRva2VuVHlwZTogXCJib29sZWFuXCIsIHJlZ0V4OiAvXnRydWV8XmZhbHNlLyB9LFxyXG4gICAgICAgICAgICB7IHRva2VuVHlwZTogXCJpZGVudGlmaWVyXCIsIHJlZ0V4OiAvXlskYS16X10rL2kgfSxcclxuICAgICAgICAgICAgeyB0b2tlblR5cGU6IFwiLlwiLCByZWdFeDogL15cXC4vIH0sXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiBcIixcIiwgcmVnRXg6IC9eLC8gfSxcclxuICAgICAgICAgICAgeyB0b2tlblR5cGU6IFwiK1wiLCByZWdFeDogL15cXCsvIH0sXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiBcIi1cIiwgcmVnRXg6IC9eLS8gfSxcclxuICAgICAgICAgICAgeyB0b2tlblR5cGU6IFwiKlwiLCByZWdFeDogL15cXCovIH0sXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiBcIi9cIiwgcmVnRXg6IC9eXFwvLyB9LFxyXG4gICAgICAgICAgICB7IHRva2VuVHlwZTogXCI9PVwiLCByZWdFeDogL149PS8gfSxcclxuICAgICAgICAgICAgeyB0b2tlblR5cGU6IFwiIT1cIiwgcmVnRXg6IC9eIT0vIH0sXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiBcIjw9XCIsIHJlZ0V4OiAvXjw9LyB9LFxyXG4gICAgICAgICAgICB7IHRva2VuVHlwZTogXCI8XCIsIHJlZ0V4OiAvXjwvIH0sXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiBcIj49XCIsIHJlZ0V4OiAvXj49LyB9LFxyXG4gICAgICAgICAgICB7IHRva2VuVHlwZTogXCI+XCIsIHJlZ0V4OiAvXj4vIH0sXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiBcInN0cmluZ1wiLCByZWdFeDogL15cIihbXlwiXSopXCIvIH0sXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiBcInN0cmluZ1wiLCByZWdFeDogL14nKFteJ10qKScvIH0sXHJcbiAgICAgICAgICAgIHsgdG9rZW5UeXBlOiBcIm51bWJlclwiLCByZWdFeDogL15cXGQqXFwuP1xcZCsvIH1cclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhcnNlKGV4cHJlc3Npb246IHN0cmluZyk6IFRva2VuW10ge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IFRva2VuW10gPSBbXTtcclxuICAgICAgICBsZXQgaSA9IDA7XHJcblxyXG4gICAgICAgIHdoaWxlIChpIDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IHN1YkV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cmluZyhpKTtcclxuICAgICAgICAgICAgbGV0IG1hdGNoRm91bmQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHJ1bGUgb2YgVG9rZW5pemVyLnJ1bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IHJ1bGUucmVnRXguZXhlYyhzdWJFeHByZXNzaW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSB0b2tlbml6ZXIgcnVsZSBtYXRjaGVkIG1vcmUgdGhhbiBvbmUgZ3JvdXAuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUudG9rZW5UeXBlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBydWxlLnRva2VuVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCA9PSAxID8gMCA6IDFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUG9zaXRpb246IGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaSArPSBtYXRjaGVzWzBdLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1hdGNoRm91bmQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIFwiICsgc3ViRXhwcmVzc2lvblswXSArIFwiIGF0IHBvc2l0aW9uIFwiICsgaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcblRva2VuaXplci5pbml0KCk7XHJcblxyXG50eXBlIExpdGVyYWxWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVWYWx1ZVR5cGUodmFsdWU6IGFueSk6IExpdGVyYWxWYWx1ZSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmFsdWUgdHlwZTogXCIgKyB0eXBlb2YgdmFsdWUpO1xyXG59XHJcblxyXG50eXBlIEZ1bmN0aW9uQ2FsbGJhY2sgPSAoLi4ucGFyYW1zOiBhbnlbXSkgPT4gYW55O1xyXG50eXBlIEZ1bmN0aW9uRGljdGlvbmFyeSA9IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb25DYWxsYmFjayB9O1xyXG5cclxuaW50ZXJmYWNlIEV2YWx1YXRpb25Db250ZXh0U3RhdGUge1xyXG4gICAgJGRhdGE6IGFueTtcclxuICAgICRpbmRleDogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXZhbHVhdGlvbkNvbnRleHQge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3Jlc2VydmVkRmllbGRzID0gW1wiJGRhdGFcIiwgXCIkcm9vdFwiLCBcIiRpbmRleFwiXTtcclxuICAgIHByaXZhdGUgc3RhdGljIF9idWlsdEluRnVuY3Rpb25zOiBGdW5jdGlvbkRpY3Rpb25hcnkgPSB7fVxyXG5cclxuICAgIHN0YXRpYyBpbml0KCkge1xyXG4gICAgICAgIEV2YWx1YXRpb25Db250ZXh0Ll9idWlsdEluRnVuY3Rpb25zW1wic3Vic3RyXCJdID0gKHMsIGluZGV4LCBjb3VudCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHMgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiICYmIHR5cGVvZiBjb3VudCA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChzLnN1YnN0cihpbmRleCwgY291bnQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBFdmFsdWF0aW9uQ29udGV4dC5fYnVpbHRJbkZ1bmN0aW9uc1tcIkpTT04ucGFyc2VcIl0gPSAoaW5wdXQpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoaW5wdXQpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgRXZhbHVhdGlvbkNvbnRleHQuX2J1aWx0SW5GdW5jdGlvbnNbXCJpZlwiXSA9IChjb25kaXRpb24sIGlmVHJ1ZSwgaWZGYWxzZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uID8gaWZUcnVlIDogaWZGYWxzZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIEV2YWx1YXRpb25Db250ZXh0Ll9idWlsdEluRnVuY3Rpb25zW1widG9VcHBlclwiXSA9IChpbnB1dCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiID8gaW5wdXQudG9VcHBlckNhc2UoKSA6IGlucHV0O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgRXZhbHVhdGlvbkNvbnRleHQuX2J1aWx0SW5GdW5jdGlvbnNbXCJ0b0xvd2VyXCJdID0gKGlucHV0KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIgPyBpbnB1dC50b0xvd2VyQ2FzZSgpIDogaW5wdXQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBFdmFsdWF0aW9uQ29udGV4dC5fYnVpbHRJbkZ1bmN0aW9uc1tcIkRhdGUuZm9ybWF0XCJdID0gKGlucHV0LCBmb3JtYXQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWNjZXB0ZWRGb3JtYXRzID0gWyBcImxvbmdcIiwgXCJzaG9ydFwiLCBcImNvbXBhY3RcIiBdO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlucHV0QXNOdW1iZXI6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0QXNOdW1iZXIgPSBEYXRlLnBhcnNlKGlucHV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0QXNOdW1iZXIgPSBpbnB1dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShpbnB1dEFzTnVtYmVyKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBlZmZlY3RpdmVGb3JtYXQ6IHN0cmluZyA9IFwiY29tcGFjdFwiO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUZvcm1hdCA9IGZvcm1hdC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhY2NlcHRlZEZvcm1hdHMuaW5kZXhPZihlZmZlY3RpdmVGb3JtYXQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUZvcm1hdCA9IFwiY29tcGFjdFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZWZmZWN0aXZlRm9ybWF0ID09PSBcImNvbXBhY3RcIiA/IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIHsgZGF5OiBcIm51bWVyaWNcIiwgd2Vla2RheTogZWZmZWN0aXZlRm9ybWF0LCBtb250aDogZWZmZWN0aXZlRm9ybWF0LCB5ZWFyOiBcIm51bWVyaWNcIiB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIEV2YWx1YXRpb25Db250ZXh0Ll9idWlsdEluRnVuY3Rpb25zW1wiVGltZS5mb3JtYXRcIl0gPSAoaW5wdXQpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlucHV0QXNOdW1iZXI6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0QXNOdW1iZXIgPSBEYXRlLnBhcnNlKGlucHV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0QXNOdW1iZXIgPSBpbnB1dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShpbnB1dEFzTnVtYmVyKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlVGltZVN0cmluZyh1bmRlZmluZWQsIHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2Z1bmN0aW9ucyA9IHt9O1xyXG4gICAgcHJpdmF0ZSBfc3RhdGVTdGFjazogRXZhbHVhdGlvbkNvbnRleHRTdGF0ZVtdID0gW107XHJcblxyXG4gICAgJHJvb3Q6IGFueTtcclxuICAgICRkYXRhOiBhbnk7XHJcbiAgICAkaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICByZWdpc3RlckZ1bmN0aW9uKG5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uQ2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLl9mdW5jdGlvbnNbbmFtZV0gPSBjYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICB1bnJlZ2lzdGVyRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX2Z1bmN0aW9uc1tuYW1lXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGdW5jdGlvbihuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbkNhbGxiYWNrIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5fZnVuY3Rpb25zW25hbWVdO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBFdmFsdWF0aW9uQ29udGV4dC5fYnVpbHRJbkZ1bmN0aW9uc1tuYW1lXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgaXNSZXNlcnZlZEZpZWxkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBFdmFsdWF0aW9uQ29udGV4dC5fcmVzZXJ2ZWRGaWVsZHMuaW5kZXhPZihuYW1lKSA+PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLl9zdGF0ZVN0YWNrLnB1c2goeyAkZGF0YTogdGhpcy4kZGF0YSwgJGluZGV4OiB0aGlzLiRpbmRleCB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXN0b3JlTGFzdFN0YXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZVN0YWNrLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGV2YWx1YXRpb24gY29udGV4dCBzdGF0ZSB0byByZXN0b3JlLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzYXZlZENvbnRleHQgPSB0aGlzLl9zdGF0ZVN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICB0aGlzLiRkYXRhID0gc2F2ZWRDb250ZXh0LiRkYXRhO1xyXG4gICAgICAgIHRoaXMuJGluZGV4ID0gc2F2ZWRDb250ZXh0LiRpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3VycmVudERhdGFDb250ZXh0KCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGRhdGEgIT0gdW5kZWZpbmVkID8gdGhpcy4kZGF0YSA6IHRoaXMuJHJvb3Q7XHJcbiAgICB9XHJcbn1cclxuXHJcbkV2YWx1YXRpb25Db250ZXh0LmluaXQoKTtcclxuXHJcbmFic3RyYWN0IGNsYXNzIEV2YWx1YXRpb25Ob2RlIHtcclxuICAgIGFic3RyYWN0IGV2YWx1YXRlKGNvbnRleHQ6IEV2YWx1YXRpb25Db250ZXh0KTogTGl0ZXJhbFZhbHVlO1xyXG59XHJcblxyXG5jbGFzcyBFeHByZXNzaW9uTm9kZSBleHRlbmRzIEV2YWx1YXRpb25Ob2RlIHtcclxuICAgIG5vZGVzOiBBcnJheTxFdmFsdWF0aW9uTm9kZT4gPSBbXTtcclxuICAgIGFsbG93TnVsbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgZXZhbHVhdGUoY29udGV4dDogRXZhbHVhdGlvbkNvbnRleHQpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IG9wZXJhdG9yUHJpb3JpdHlHcm91cHMgPSBbXHJcbiAgICAgICAgICAgIFtcIi9cIiwgXCIqXCJdLFxyXG4gICAgICAgICAgICBbXCItXCIsIFwiK1wiXSxcclxuICAgICAgICAgICAgW1wiPT1cIiwgXCIhPVwiLCBcIjxcIiwgXCI8PVwiLCBcIj5cIiwgXCI+PVwiXVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCBub2Rlc0NvcHkgPSB0aGlzLm5vZGVzO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBwcmlvcml0eUdyb3VwIG9mIG9wZXJhdG9yUHJpb3JpdHlHcm91cHMpIHtcclxuICAgICAgICAgICAgbGV0IGkgPSAwO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKGkgPCBub2Rlc0NvcHkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IG5vZGVzQ29weVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSAmJiBwcmlvcml0eUdyb3VwLmluZGV4T2Yobm9kZS5vcGVyYXRvcikgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBsZWZ0ID0gZW5zdXJlVmFsdWVUeXBlKG5vZGVzQ29weVtpIC0gMV0uZXZhbHVhdGUoY29udGV4dCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByaWdodCA9IGVuc3VyZVZhbHVlVHlwZShub2Rlc0NvcHlbaSArIDFdLmV2YWx1YXRlKGNvbnRleHQpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ICE9PSB0eXBlb2YgcmlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb21wYXRpYmxlIG9wZXJhbmRzIFwiICsgbGVmdCArIFwiIGFuZCBcIiArIHJpZ2h0ICsgXCIgZm9yIG9wZXJhdG9yIFwiICsgbm9kZS5vcGVyYXRvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0OiBMaXRlcmFsVmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgcmlnaHQgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wZXJhdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiL1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxlZnQgLyByaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCIqXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGVmdCAqIHJpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIi1cIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBsZWZ0IC0gcmlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiK1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxlZnQgKyByaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiByaWdodCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3BlcmF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCIrXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGVmdCArIHJpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3BlcmF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIj09XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBsZWZ0ID09IHJpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCIhPVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGVmdCAhPSByaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGVmdCA8IHJpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI8PVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGVmdCA8PSByaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPlwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGVmdCA+IHJpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI+PVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGVmdCA+PSByaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBub2Rlc0NvcHkuc3BsaWNlKGkgLSAxLCAzLCBuZXcgTGl0ZXJhbE5vZGUocmVzdWx0KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbm9kZXNDb3B5WzBdLmV2YWx1YXRlKGNvbnRleHQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBJZGVudGlmaWVyTm9kZSBleHRlbmRzIEV2YWx1YXRpb25Ob2RlIHtcclxuICAgIGlkZW50aWZpZXI6IHN0cmluZztcclxuXHJcbiAgICBldmFsdWF0ZShjb250ZXh0OiBFdmFsdWF0aW9uQ29udGV4dCk6IExpdGVyYWxWYWx1ZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWRlbnRpZmllcjtcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgSW5kZXhlck5vZGUgZXh0ZW5kcyBFdmFsdWF0aW9uTm9kZSB7XHJcbiAgICBpbmRleDogRXhwcmVzc2lvbk5vZGU7XHJcblxyXG4gICAgZXZhbHVhdGUoY29udGV4dDogRXZhbHVhdGlvbkNvbnRleHQpOiBMaXRlcmFsVmFsdWUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4LmV2YWx1YXRlKGNvbnRleHQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBGdW5jdGlvbkNhbGxOb2RlIGV4dGVuZHMgRXZhbHVhdGlvbk5vZGUge1xyXG4gICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcGFyYW1ldGVyczogQXJyYXk8RXhwcmVzc2lvbk5vZGU+ID0gW107XHJcblxyXG4gICAgZXZhbHVhdGUoY29udGV4dDogRXZhbHVhdGlvbkNvbnRleHQpOiBMaXRlcmFsVmFsdWUge1xyXG4gICAgICAgIGxldCBjYWxsYmFjayA9IGNvbnRleHQuZ2V0RnVuY3Rpb24odGhpcy5mdW5jdGlvbk5hbWUpO1xyXG5cclxuICAgICAgICBpZiAoY2FsbGJhY2sgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBldmFsdWF0ZWRQYXJhbXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHBhcmFtIG9mIHRoaXMucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgZXZhbHVhdGVkUGFyYW1zLnB1c2gocGFyYW0uZXZhbHVhdGUoY29udGV4dCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soLi4uZXZhbHVhdGVkUGFyYW1zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZGVmaW5lZCBmdW5jdGlvbjogXCIgKyB0aGlzLmZ1bmN0aW9uTmFtZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIExpdGVyYWxOb2RlIGV4dGVuZHMgRXZhbHVhdGlvbk5vZGUge1xyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgdmFsdWU6IExpdGVyYWxWYWx1ZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZXZhbHVhdGUoY29udGV4dDogRXZhbHVhdGlvbkNvbnRleHQpOiBMaXRlcmFsVmFsdWUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBPcGVyYXRvck5vZGUgZXh0ZW5kcyBFdmFsdWF0aW9uTm9kZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBvcGVyYXRvcjogVG9rZW5UeXBlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBldmFsdWF0ZShjb250ZXh0OiBFdmFsdWF0aW9uQ29udGV4dCk6IExpdGVyYWxWYWx1ZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gb3BlcmF0b3IgY2Fubm90IGJlIGV2YWx1YXRlZCBvbiBpdHMgb3duLlwiKTtcclxuICAgIH1cclxufVxyXG5cclxudHlwZSBQYXRoUGFydCA9IEV4cHJlc3Npb25Ob2RlIHwgSWRlbnRpZmllck5vZGUgfCBJbmRleGVyTm9kZSB8IEZ1bmN0aW9uQ2FsbE5vZGU7XHJcblxyXG5jbGFzcyBQYXRoTm9kZSBleHRlbmRzIEV2YWx1YXRpb25Ob2RlIHtcclxuICAgIHBhcnRzOiBQYXRoUGFydFtdID0gW107XHJcblxyXG4gICAgZXZhbHVhdGUoY29udGV4dDogRXZhbHVhdGlvbkNvbnRleHQpOiBMaXRlcmFsVmFsdWUge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IGFueSA9IHVuZGVmaW5lZDtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG5cclxuICAgICAgICB3aGlsZSAoaW5kZXggPCB0aGlzLnBhcnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgcGFydCA9IHRoaXMucGFydHNbaW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgSWRlbnRpZmllck5vZGUgJiYgaW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocGFydC5pZGVudGlmaWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCIkcm9vdFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udGV4dC4kcm9vdDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIiRkYXRhXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LmN1cnJlbnREYXRhQ29udGV4dDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIiRpbmRleFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udGV4dC4kaW5kZXg7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb250ZXh0LmN1cnJlbnREYXRhQ29udGV4dFtwYXJ0LmlkZW50aWZpZXJdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0VmFsdWUgPSBwYXJ0LmV2YWx1YXRlKGNvbnRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJ0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0eXBlb2YgcGFydFZhbHVlICE9PSBcImJvb2xlYW5cIiA/IHJlc3VsdFtwYXJ0VmFsdWVdIDogcmVzdWx0W3BhcnRWYWx1ZS50b1N0cmluZygpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblBhcnNlciB7XHJcbiAgICBwcml2YXRlIF9pbmRleDogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgX3Rva2VuczogVG9rZW5bXTtcclxuXHJcbiAgICBwcml2YXRlIHVuZXhwZWN0ZWRUb2tlbigpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHRva2VuIFwiICsgdGhpcy5jdXJyZW50LnZhbHVlICsgXCIgYXQgcG9zaXRpb24gXCIgKyB0aGlzLmN1cnJlbnQub3JpZ2luYWxQb3NpdGlvbiArIFwiLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuZXhwZWN0ZWRFb2UoKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbi5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb3ZlTmV4dCgpIHtcclxuICAgICAgICB0aGlzLl9pbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGFyc2VUb2tlbiguLi5leHBlY3RlZFRva2VuVHlwZXM6IFRva2VuVHlwZVtdKTogVG9rZW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmVvZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVuZXhwZWN0ZWRFb2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjdXJyZW50VG9rZW4gPSB0aGlzLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgIGlmIChleHBlY3RlZFRva2VuVHlwZXMuaW5kZXhPZih0aGlzLmN1cnJlbnQudHlwZSkgPCAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5leHBlY3RlZFRva2VuKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1vdmVOZXh0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50VG9rZW47XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwYXJzZU9wdGlvbmFsVG9rZW4oLi4uZXhwZWN0ZWRUb2tlblR5cGVzOiBUb2tlblR5cGVbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmVvZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVuZXhwZWN0ZWRFb2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXhwZWN0ZWRUb2tlblR5cGVzLmluZGV4T2YodGhpcy5jdXJyZW50LnR5cGUpIDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVOZXh0KCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwYXJzZUZ1bmN0aW9uQ2FsbChmdW5jdGlvbk5hbWU6IHN0cmluZyk6IEZ1bmN0aW9uQ2FsbE5vZGUge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgRnVuY3Rpb25DYWxsTm9kZSgpO1xyXG4gICAgICAgIHJlc3VsdC5mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7XHJcblxyXG4gICAgICAgIHRoaXMucGFyc2VUb2tlbihcIihcIik7XHJcblxyXG4gICAgICAgIGxldCBmaXJzdFBhcmFtZXRlciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XHJcbiAgICAgICAgbGV0IG1vcmVQYXJhbWV0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChmaXJzdFBhcmFtZXRlcikge1xyXG4gICAgICAgICAgICByZXN1bHQucGFyYW1ldGVycy5wdXNoKGZpcnN0UGFyYW1ldGVyKTtcclxuXHJcbiAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgIG1vcmVQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZU9wdGlvbmFsVG9rZW4oXCIsXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChtb3JlUGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUgKG1vcmVQYXJhbWV0ZXJzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGFyc2VUb2tlbihcIilcIik7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwYXJzZUlkZW50aWZpZXIoKTogSWRlbnRpZmllck5vZGUge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSWRlbnRpZmllck5vZGUoKTtcclxuXHJcbiAgICAgICAgcmVzdWx0LmlkZW50aWZpZXIgPSB0aGlzLmN1cnJlbnQudmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMubW92ZU5leHQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBhcnNlSW5kZXhlcigpOiBJbmRleGVyTm9kZSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBJbmRleGVyTm9kZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnBhcnNlVG9rZW4oXCJbXCIpO1xyXG5cclxuICAgICAgICByZXN1bHQuaW5kZXggPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xyXG5cclxuICAgICAgICB0aGlzLnBhcnNlVG9rZW4oXCJdXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGFyc2VQYXRoKCk6IFBhdGhOb2RlIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFBhdGhOb2RlKCk7XHJcblxyXG4gICAgICAgIGxldCBleHBlY3RlZE5leHRUb2tlblR5cGVzOiBUb2tlblR5cGVbXSA9IFtcImlkZW50aWZpZXJcIiwgXCIoXCJdO1xyXG5cclxuICAgICAgICB3aGlsZSAoIXRoaXMuZW9lKSB7XHJcbiAgICAgICAgICAgIGlmIChleHBlY3RlZE5leHRUb2tlblR5cGVzLmluZGV4T2YodGhpcy5jdXJyZW50LnR5cGUpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIihcIjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnBhcnRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucGFydHMucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlVG9rZW4oXCIpXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uTmFtZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHBhcnQgb2YgcmVzdWx0LnBhcnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXJ0IGluc3RhbmNlb2YgSWRlbnRpZmllck5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmV4cGVjdGVkVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25OYW1lICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUgKz0gXCIuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lICs9ICg8SWRlbnRpZmllck5vZGU+cGFydCkuaWRlbnRpZmllcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnBhcnRzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucGFydHMucHVzaCh0aGlzLnBhcnNlRnVuY3Rpb25DYWxsKGZ1bmN0aW9uTmFtZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWROZXh0VG9rZW5UeXBlcyA9IFtcIi5cIiwgXCJbXCJdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJbXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnBhcnRzLnB1c2godGhpcy5wYXJzZUluZGV4ZXIoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkTmV4dFRva2VuVHlwZXMgPSBbXCIuXCIsIFwiKFwiLCBcIltcIl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImlkZW50aWZpZXJcIjpcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucGFydHMucHVzaCh0aGlzLnBhcnNlSWRlbnRpZmllcigpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWROZXh0VG9rZW5UeXBlcyA9IFtcIi5cIiwgXCIoXCIsIFwiW1wiXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiLlwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWROZXh0VG9rZW5UeXBlcyA9IFtcImlkZW50aWZpZXJcIl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZE5leHRUb2tlblR5cGVzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGFyc2VFeHByZXNzaW9uKCk6IEV4cHJlc3Npb25Ob2RlIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBFeHByZXNzaW9uTm9kZSA9IG5ldyBFeHByZXNzaW9uTm9kZSgpO1xyXG5cclxuICAgICAgICBsZXQgZXhwZWN0ZWROZXh0VG9rZW5UeXBlczogVG9rZW5UeXBlW10gPSBsaXRlcmFscy5jb25jYXQoXCIoXCIsIFwiK1wiLCBcIi1cIik7XHJcblxyXG4gICAgICAgIHdoaWxlICghdGhpcy5lb2UpIHtcclxuICAgICAgICAgICAgaWYgKGV4cGVjdGVkTmV4dFRva2VuVHlwZXMuaW5kZXhPZih0aGlzLmN1cnJlbnQudHlwZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm5vZGVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmV4cGVjdGVkVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiKFwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcImlkZW50aWZpZXJcIjpcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQubm9kZXMucHVzaCh0aGlzLnBhcnNlUGF0aCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWROZXh0VG9rZW5UeXBlcyA9IG9yZGVyZWRPcGVyYXRvcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50LnR5cGUgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubm9kZXMucHVzaChuZXcgTGl0ZXJhbE5vZGUodGhpcy5jdXJyZW50LnZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudC50eXBlID09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm5vZGVzLnB1c2gobmV3IExpdGVyYWxOb2RlKHBhcnNlRmxvYXQodGhpcy5jdXJyZW50LnZhbHVlKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm5vZGVzLnB1c2gobmV3IExpdGVyYWxOb2RlKHRoaXMuY3VycmVudC52YWx1ZSA9PT0gXCJ0cnVlXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWROZXh0VG9rZW5UeXBlcyA9IG9yZGVyZWRPcGVyYXRvcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIi1cIjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm5vZGVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ub2Rlcy5wdXNoKG5ldyBMaXRlcmFsTm9kZSgtMSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubm9kZXMucHVzaChuZXcgT3BlcmF0b3JOb2RlKFwiKlwiKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZE5leHRUb2tlblR5cGVzID0gW1wiaWRlbnRpZmllclwiLCBcIm51bWJlclwiLCBcIihcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubm9kZXMucHVzaChuZXcgT3BlcmF0b3JOb2RlKHRoaXMuY3VycmVudC50eXBlKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZE5leHRUb2tlblR5cGVzID0gbGl0ZXJhbHMuY29uY2F0KFwiKFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiK1wiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubm9kZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWROZXh0VG9rZW5UeXBlcyA9IGxpdGVyYWxzLmNvbmNhdChcIihcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubm9kZXMucHVzaChuZXcgT3BlcmF0b3JOb2RlKHRoaXMuY3VycmVudC50eXBlKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZE5leHRUb2tlblR5cGVzID0gbGl0ZXJhbHMuY29uY2F0KFwiKFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZU5leHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiKlwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcIi9cIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCI9PVwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcIiE9XCI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiPFwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcIjw9XCI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiPlwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcIj49XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm5vZGVzLnB1c2gobmV3IE9wZXJhdG9yTm9kZSh0aGlzLmN1cnJlbnQudHlwZSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVOZXh0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkTmV4dFRva2VuVHlwZXMgPSBsaXRlcmFscy5jb25jYXQoXCIoXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWROZXh0VG9rZW5UeXBlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBlb2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4ID49IHRoaXMuX3Rva2Vucy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgY3VycmVudCgpOiBUb2tlbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2Vuc1t0aGlzLl9pbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhcnNlQmluZGluZyhiaW5kaW5nRXhwcmVzc2lvbjogc3RyaW5nKTogQmluZGluZyB7XHJcbiAgICAgICAgbGV0IHBhcnNlciA9IG5ldyBFeHByZXNzaW9uUGFyc2VyKFRva2VuaXplci5wYXJzZShiaW5kaW5nRXhwcmVzc2lvbikpO1xyXG4gICAgICAgIHBhcnNlci5wYXJzZVRva2VuKFwie1wiKTtcclxuXHJcbiAgICAgICAgbGV0IGFsbG93TnVsbCA9ICFwYXJzZXIucGFyc2VPcHRpb25hbFRva2VuKFwiPyNcIik7XHJcbiAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKCk7XHJcblxyXG4gICAgICAgIHBhcnNlci5wYXJzZVRva2VuKFwifVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nKGV4cHJlc3Npb24sIGFsbG93TnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IodG9rZW5zOiBUb2tlbltdKSB7XHJcbiAgICAgICAgdGhpcy5fdG9rZW5zID0gdG9rZW5zO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQmluZGluZyB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb246IEV2YWx1YXRpb25Ob2RlLCByZWFkb25seSBhbGxvd051bGw6IGJvb2xlYW4gPSB0cnVlKSB7fVxyXG5cclxuICAgIGV2YWx1YXRlKGNvbnRleHQ6IEV2YWx1YXRpb25Db250ZXh0KTogTGl0ZXJhbFZhbHVlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKGNvbnRleHQpO1xyXG4gICAgfVxyXG59IiwiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuaW1wb3J0IHsgQmluZGluZywgRXhwcmVzc2lvblBhcnNlciwgRXZhbHVhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi9leHByZXNzaW9uLXBhcnNlclwiO1xyXG5cclxuY2xhc3MgVGVtcGxhdGl6ZWRTdHJpbmcge1xyXG4gICAgcHJpdmF0ZSBfcGFydHM6IEFycmF5PHN0cmluZyB8IEJpbmRpbmc+ID0gW107XHJcblxyXG4gICAgc3RhdGljIHBhcnNlKHM6IHN0cmluZyk6IHN0cmluZyB8IFRlbXBsYXRpemVkU3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbXBsYXRpemVkU3RyaW5nKCk7XHJcbiAgICAgICAgbGV0IGkgPSAwO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uRm91bmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gaTtcclxuICAgICAgICAgICAgbGV0IGxvb3A7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICBsb29wID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSBzLmluZGV4T2YoXCJ7XCIsIHN0YXJ0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCArIDEgPCBzLmxlbmd0aCAmJiBzW3N0YXJ0ICsgMV0gPT0gXCJ7XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0gMjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZSAobG9vcCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVuZCA9IHMuaW5kZXhPZihcIn1cIiwgc3RhcnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlbmQgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Gb3VuZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA+IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Ll9wYXJ0cy5wdXNoKHMuc3Vic3RyaW5nKGksIHN0YXJ0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgYmluZG5nRXhwcmVzc2lvbiA9IHMuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFydDogc3RyaW5nIHwgQmluZGluZztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IEV4cHJlc3Npb25QYXJzZXIucGFyc2VCaW5kaW5nKGJpbmRuZ0V4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gYmluZG5nRXhwcmVzc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5fcGFydHMucHVzaChwYXJ0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaSA9IGVuZCArIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbkZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuX3BhcnRzLnB1c2gocy5zdWJzdHIoaSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSB3aGlsZSAoaSA8IHMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5fcGFydHMubGVuZ3RoID09IDEgJiYgdHlwZW9mIHJlc3VsdC5fcGFydHNbMF0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxzdHJpbmc+cmVzdWx0Ll9wYXJ0c1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3Nob3VsZERyb3BPd25lcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgZXZhbEV4cHJlc3Npb24oYmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmcsIGNvbnRleHQ6IEV2YWx1YXRpb25Db250ZXh0KTogYW55IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYmluZGluZ0V4cHJlc3Npb24uZXZhbHVhdGUoY29udGV4dCk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nob3VsZERyb3BPd25lciA9IHRoaXMuX3Nob3VsZERyb3BPd25lciB8fCAhYmluZGluZ0V4cHJlc3Npb24uYWxsb3dOdWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGludGVybmFsRXZhbHVhdGUoY29udGV4dDogRXZhbHVhdGlvbkNvbnRleHQpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXJ0cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9wYXJ0cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3BhcnRzWzBdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFydHNbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ldmFsRXhwcmVzc2lvbig8QmluZGluZz50aGlzLl9wYXJ0c1swXSwgY29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBzID0gXCJcIjtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHBhcnQgb2YgdGhpcy5fcGFydHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHMgKz0gcGFydDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHMgKz0gdGhpcy5ldmFsRXhwcmVzc2lvbig8QmluZGluZz5wYXJ0LCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV2YWx1YXRlKGNvbnRleHQ6IEV2YWx1YXRpb25Db250ZXh0KTogYW55IHtcclxuICAgICAgICB0aGlzLl9zaG91bGREcm9wT3duZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFdmFsdWF0ZShjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2hvdWxkRHJvcE93bmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaG91bGREcm9wT3duZXI7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZSB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBwcmVwYXJlKG5vZGU6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBUZW1wbGF0aXplZFN0cmluZy5wYXJzZShub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09IFwib2JqZWN0XCIgJiYgbm9kZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2Ygbm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFRlbXBsYXRlLnByZXBhcmUoaXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBUZW1wbGF0ZS5wcmVwYXJlKG5vZGVba2V5XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NvbnRleHQ6IEV2YWx1YXRpb25Db250ZXh0O1xyXG5cclxuICAgIHByaXZhdGUgZXhwYW5kU2luZ2xlT2JqZWN0KG5vZGU6IG9iamVjdCk6IGFueSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY29udGV4dC5pc1Jlc2VydmVkRmllbGQoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5pbnRlcm5hbEV4cGFuZChub2RlW2tleV0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW50ZXJuYWxFeHBhbmQobm9kZTogYW55KTogYW55IHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBhbnk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbnRleHQuc2F2ZVN0YXRlKCk7XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtQXJyYXk6IGFueVtdID0gW107XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIG5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBleHBhbmRlZEl0ZW0gPSB0aGlzLmludGVybmFsRXhwYW5kKGl0ZW0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChleHBhbmRlZEl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cGFuZGVkSXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUFycmF5ID0gaXRlbUFycmF5LmNvbmNhdChleHBhbmRlZEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUFycmF5LnB1c2goZXhwYW5kZWRJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGl0ZW1BcnJheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFRlbXBsYXRpemVkU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUuZXZhbHVhdGUodGhpcy5fY29udGV4dCk7XHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5zaG91bGREcm9wT3duZXIpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09IFwib2JqZWN0XCIgJiYgbm9kZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBkcm9wT2JqZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCB3aGVuID0gbm9kZVtcIiR3aGVuXCJdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHdoZW4gaW5zdGFuY2VvZiBUZW1wbGF0aXplZFN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHdoZW5WYWx1ZSA9IHdoZW4uZXZhbHVhdGUodGhpcy5fY29udGV4dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aGVuVmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcE9iamVjdCA9ICF3aGVuVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghZHJvcE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFDb250ZXh0ID0gbm9kZVtcIiRkYXRhXCJdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRhQ29udGV4dCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUNvbnRleHQgaW5zdGFuY2VvZiBUZW1wbGF0aXplZFN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhQ29udGV4dCA9IGRhdGFDb250ZXh0LmV2YWx1YXRlKHRoaXMuX2NvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YUNvbnRleHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQ29udGV4dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC4kZGF0YSA9IGRhdGFDb250ZXh0W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC4kaW5kZXggPSBpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHBhbmRlZE9iamVjdCA9IHRoaXMuZXhwYW5kU2luZ2xlT2JqZWN0KG5vZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRlZE9iamVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZXhwYW5kZWRPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LiRkYXRhID0gZGF0YUNvbnRleHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmV4cGFuZFNpbmdsZU9iamVjdChub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmV4cGFuZFNpbmdsZU9iamVjdChub2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9jb250ZXh0LnJlc3RvcmVMYXN0U3RhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcmVwYXJlZFBheWxvYWQ6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwYXlsb2FkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnByZXBhcmVkUGF5bG9hZCA9IFRlbXBsYXRlLnByZXBhcmUocGF5bG9hZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwYW5kKGNvbnRleHQ6IEV2YWx1YXRpb25Db250ZXh0KTogYW55IHtcclxuICAgICAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFeHBhbmQodGhpcy5wcmVwYXJlZFBheWxvYWQpO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==
|
|
699
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxFQUFFO2dCQUMxQixNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RCO1NBQ0o7YUFDSTtZQUNELE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDakI7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFakMsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQWFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrRUc7SUFDSCx5QkFBTSxHQUFOLFVBQU8sT0FBMkI7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9DLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0wsZUFBQztBQUFELENBbFhBLElBa1hDO0FBbFhZLDRCQUFROzs7Ozs7Ozs7OztBQzNIckIsa0U7Ozs7OztVQ0FBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7VUV0QkE7VUFDQTtVQUNBO1VBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9BQ0RhdGEvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0FDRGF0YS8uL3NyYy9hZGFwdGl2ZWNhcmRzLXRlbXBsYXRpbmcudHMiLCJ3ZWJwYWNrOi8vQUNEYXRhLy4vc3JjL2pzb24tc2NoZW1hLWNhcmQudHMiLCJ3ZWJwYWNrOi8vQUNEYXRhLy4vc3JjL3RlbXBsYXRlLWVuZ2luZS50cyIsIndlYnBhY2s6Ly9BQ0RhdGEvZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJhZGFwdGl2ZS1leHByZXNzaW9uc1wiLFwiY29tbW9uanNcIjpcImFkYXB0aXZlLWV4cHJlc3Npb25zXCIsXCJyb290XCI6XCJBRUxcIn0iLCJ3ZWJwYWNrOi8vQUNEYXRhL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0FDRGF0YS93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovL0FDRGF0YS93ZWJwYWNrL3N0YXJ0dXAiLCJ3ZWJwYWNrOi8vQUNEYXRhL3dlYnBhY2svYWZ0ZXItc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJhZGFwdGl2ZS1leHByZXNzaW9uc1wiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJBQ0RhdGFcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJhZGFwdGl2ZS1leHByZXNzaW9uc1wiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiQUNEYXRhXCJdID0gZmFjdG9yeShyb290W1wiQUVMXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfYWRhcHRpdmVfZXhwcmVzc2lvbnNfXykge1xucmV0dXJuICIsIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuZXhwb3J0ICogZnJvbSBcIi4vdGVtcGxhdGUtZW5naW5lXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9qc29uLXNjaGVtYS1jYXJkXCI7IiwiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7IElBZGFwdGl2ZUNhcmQsIElDYXJkRWxlbWVudCwgSUNob2ljZVNldElucHV0LCBJQ29udGFpbmVyLCBJTnVtYmVySW5wdXQsIElUZXh0SW5wdXQsIElUaW1lSW5wdXQsIElUb2dnbGVJbnB1dCB9IGZyb20gJ2FkYXB0aXZlY2FyZHMvc3JjL3NjaGVtYSc7XG5pbXBvcnQgeyBKU09OU2NoZW1hNywgSlNPTlNjaGVtYTdEZWZpbml0aW9uLCBKU09OU2NoZW1hN1R5cGUgfSBmcm9tICdqc29uLXNjaGVtYSc7XG5cblxuLy8gSlNPTiBTY2hlbWEgQ2FyZFxuLy8gZ2VuZXJhdGVzIGFuIEFkYXB0aXZlIENhcmQgZ2l2ZW4gYSBKU09OIHNjaGVtYVxuZXhwb3J0IGZ1bmN0aW9uIEpTT05TY2hlbWFDYXJkKHNjaGVtYTogSlNPTlNjaGVtYTcpOiBJQWRhcHRpdmVDYXJkIHwgdW5kZWZpbmVkIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogXCJBZGFwdGl2ZUNhcmRcIixcblx0XHRcdGJvZHk6IFtcblx0XHRcdFx0SlNPTlNjaGVtYUNhcmRPYmplY3Qoc2NoZW1hLCAnJywgMCksXG5cdFx0XHRdLFxuXHRcdH1cblx0fSBjYXRjaCAoZSkge1xuXHRcdGNvbnNvbGUuZXJyb3IoZSk7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG5cbi8vIEpTT04gU2NoZW1hIEVsZW1lbnRzXG5cbmZ1bmN0aW9uIEpTT05TY2hlbWFDYXJkRWxlbWVudChzY2hlbWE6IEpTT05TY2hlbWE3RGVmaW5pdGlvbiwgcGF0aDogc3RyaW5nLCBkZXB0aDogbnVtYmVyKTogSUNhcmRFbGVtZW50IHtcbiAgICBpZiAodHlwZW9mIChzY2hlbWEpID09PSBcImJvb2xlYW5cIikgcmV0dXJuIG51bGw7XG4gICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5pdGVtcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTlNjaGVtYUNhcmRUdXBsZShzY2hlbWEsIHBhdGgsIGRlcHRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT05TY2hlbWFDYXJkTGlzdChzY2hlbWEsIHBhdGgsIGRlcHRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgcmV0dXJuIEpTT05TY2hlbWFDYXJkT2JqZWN0KHNjaGVtYSwgcGF0aCwgZGVwdGgpO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIEpTT05TY2hlbWFDYXJkQm9vbGVhbihzY2hlbWEsIHBhdGgpXG4gICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIHJldHVybiBKU09OU2NoZW1hQ2FyZE51bWJlcihzY2hlbWEsIHBhdGgpXG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgIGlmIChzY2hlbWEuZW51bSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OU2NoZW1hQ2FyZENob2ljZVNldChzY2hlbWEsIHBhdGgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OU2NoZW1hQ2FyZFRleHQoc2NoZW1hLCBwYXRoKVxuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZGF0ZS10aW1lXCI6XG4gICAgICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICByZXR1cm4gSlNPTlNjaGVtYUNhcmRUaW1lKHNjaGVtYSwgcGF0aClcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlUHJvcGVydHkocHJvcGVydHk6IHN0cmluZykge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQocHJvcGVydHkpLnJlcGxhY2UoJy4nLCAnJTJlJylcbn1cblxuZnVuY3Rpb24gdGV4dFNpemVBdERlcHRoKGRlcHRoOiBudW1iZXIpIHtcbiAgICBzd2l0Y2ggKGRlcHRoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIFwibGFyZ2VcIlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBcIm1lZGl1bVwiXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBcInNtYWxsXCJcbiAgICB9XG59XG5cbmZ1bmN0aW9uIEpTT05TY2hlbWFGaWVsZFRpdGxlKHNjaGVtYTogSlNPTlNjaGVtYTcsIHBhdGg6IHN0cmluZywgZGVwdGg6IG51bWJlcik6IElDYXJkRWxlbWVudFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBzY2hlbWEudGl0bGUgPyB7XG4gICAgICAgICAgICB0eXBlOiBcIlRleHRCbG9ja1wiLFxuICAgICAgICAgICAgc2l6ZTogdGV4dFNpemVBdERlcHRoKGRlcHRoKSxcbiAgICAgICAgICAgIHRleHQ6IHNjaGVtYS50aXRsZSxcbiAgICAgICAgfSA6IG51bGwsXG4gICAgICAgIHNjaGVtYS5kZXNjcmlwdGlvbiA/IHtcbiAgICAgICAgICAgIHR5cGU6IFwiVGV4dEJsb2NrXCIsXG4gICAgICAgICAgICBzaXplOiB0ZXh0U2l6ZUF0RGVwdGgoZGVwdGggKyAxKSxcbiAgICAgICAgICAgIGlzU3VidGxlOiB0cnVlLFxuICAgICAgICAgICAgd3JhcDogdHJ1ZSxcbiAgICAgICAgICAgIHRleHQ6IHNjaGVtYS5kZXNjcmlwdGlvbixcbiAgICAgICAgfSA6IG51bGwsXG4gICAgXVxufVxuXG5mdW5jdGlvbiBKU09OU2NoZW1hQ2FyZFR1cGxlKHNjaGVtYTogSlNPTlNjaGVtYTcsIHBhdGg6IHN0cmluZywgZGVwdGg6IG51bWJlcik6IElDb250YWluZXIge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkNvbnRhaW5lclwiLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgLi4uSlNPTlNjaGVtYUZpZWxkVGl0bGUoc2NoZW1hLCBwYXRoLCBkZXB0aCksXG4gICAgICAgICAgICAuLi5zY2hlbWEuaXRlbXM/Lm1hcCgoaXRlbTogSlNPTlNjaGVtYTdEZWZpbml0aW9uLCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OU2NoZW1hQ2FyZEVsZW1lbnQoaXRlbSwgYCR7cGF0aH1bJHtpZHh9XWAsIGRlcHRoICsgMSlcbiAgICAgICAgICAgIH0pID8/IFtdLFxuICAgICAgICBdLFxuICAgIH1cbn1cblxuZnVuY3Rpb24gSlNPTlNjaGVtYUNhcmRMaXN0KHNjaGVtYTogSlNPTlNjaGVtYTcsIHBhdGg6IHN0cmluZywgZGVwdGg6IG51bWJlcik6IElDb250YWluZXIge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiQ29udGFpbmVyXCIsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAuLi5KU09OU2NoZW1hRmllbGRUaXRsZShzY2hlbWEsIHBhdGgsIGRlcHRoKSxcbiAgICAgICAgICAgIC8vIFRPRE8gbm90IGltcGxlbWVudGVkXG4gICAgICAgIF0sXG4gICAgfVxufVxuXG5mdW5jdGlvbiBKU09OU2NoZW1hQ2FyZE9iamVjdChzY2hlbWE6IEpTT05TY2hlbWE3LCBwYXRoOiBzdHJpbmcsIGRlcHRoOiBudW1iZXIpOiBJQ29udGFpbmVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkNvbnRhaW5lclwiLFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgLi4uSlNPTlNjaGVtYUZpZWxkVGl0bGUoc2NoZW1hLCBwYXRoLCBkZXB0aCksXG4gICAgICAgICAgICAuLi5zY2hlbWEucmVxdWlyZWQ/Lm1hcCgocHJvcGVydHk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OU2NoZW1hQ2FyZEVsZW1lbnQoc2NoZW1hLnByb3BlcnRpZXNbcHJvcGVydHldLCBgJHtwYXRofS4ke2VuY29kZVByb3BlcnR5KHByb3BlcnR5KX1gLCBkZXB0aCArIDEpXG4gICAgICAgICAgICB9KSA/PyBbXSxcbiAgICAgICAgXSxcbiAgICB9XG59XG5cbmZ1bmN0aW9uIEpTT05TY2hlbWFDYXJkQm9vbGVhbihzY2hlbWE6IEpTT05TY2hlbWE3LCBwYXRoOiBzdHJpbmcpOiBJVG9nZ2xlSW5wdXQge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiSW5wdXQuVG9nZ2xlXCIsXG4gICAgICAgIGlkOiBwYXRoLFxuICAgICAgICB0aXRsZTogc2NoZW1hLnRpdGxlLFxuICAgICAgICBsYWJlbDogc2NoZW1hLmRlc2NyaXB0aW9uLFxuICAgICAgICB2YWx1ZTogc2NoZW1hLmRlZmF1bHQgYXMgc3RyaW5nLFxuICAgIH1cbn1cblxuZnVuY3Rpb24gSlNPTlNjaGVtYUNhcmROdW1iZXIoc2NoZW1hOiBKU09OU2NoZW1hNywgcGF0aDogc3RyaW5nKTogSU51bWJlcklucHV0IHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIklucHV0Lk51bWJlclwiLFxuICAgICAgICBpZDogcGF0aCxcbiAgICAgICAgdGl0bGU6IHNjaGVtYS50aXRsZSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHNjaGVtYS5kZXNjcmlwdGlvbixcbiAgICAgICAgdmFsdWU6IHNjaGVtYS5kZWZhdWx0IGFzIHN0cmluZyxcbiAgICAgICAgbWluOiBzY2hlbWEuZXhjbHVzaXZlTWluaW11bSA/PyBzY2hlbWEubWluaW11bSxcbiAgICAgICAgbWF4OiBzY2hlbWEuZXhjbHVzaXZlTWF4aW11bSA/PyBzY2hlbWEubWF4aW11bSxcbiAgICB9XG59XG5cbmZ1bmN0aW9uIEpTT05TY2hlbWFDYXJkQ2hvaWNlU2V0KHNjaGVtYTogSlNPTlNjaGVtYTcsIHBhdGg6IHN0cmluZyk6IElDaG9pY2VTZXRJbnB1dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJJbnB1dC5DaG9pY2VTZXRcIixcbiAgICAgICAgaWQ6IHBhdGgsXG4gICAgICAgIHRpdGxlOiBzY2hlbWEudGl0bGUsXG4gICAgICAgIGNob2ljZXM6IHNjaGVtYS5lbnVtLm1hcCgoaXRlbTogSlNPTlNjaGVtYTdUeXBlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbSBhcyBzdHJpbmcsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBwbGFjZWhvbGRlcjogc2NoZW1hLmRlc2NyaXB0aW9uLFxuICAgICAgICB2YWx1ZTogc2NoZW1hLmRlZmF1bHQgYXMgc3RyaW5nLFxuICAgIH1cbn1cblxuZnVuY3Rpb24gSlNPTlNjaGVtYUNhcmRUZXh0KHNjaGVtYTogSlNPTlNjaGVtYTcsIHBhdGg6IHN0cmluZyk6IElUZXh0SW5wdXQge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiSW5wdXQuVGV4dFwiLFxuICAgICAgICBpZDogcGF0aCxcbiAgICAgICAgdGl0bGU6IHNjaGVtYS50aXRsZSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHNjaGVtYS5kZXNjcmlwdGlvbixcbiAgICAgICAgdmFsdWU6IHNjaGVtYS5kZWZhdWx0IGFzIHN0cmluZyxcbiAgICAgICAgbWF4TGVuZ3RoOiBzY2hlbWEubWF4TGVuZ3RoLFxuICAgICAgICByZWdleDogc2NoZW1hLnBhdHRlcm4sXG4gICAgfVxufVxuXG5mdW5jdGlvbiBKU09OU2NoZW1hQ2FyZFRpbWUoc2NoZW1hOiBKU09OU2NoZW1hNywgcGF0aDogc3RyaW5nKTogSVRpbWVJbnB1dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJJbnB1dC5UaW1lXCIsXG4gICAgICAgIGlkOiBwYXRoLFxuICAgICAgICB0aXRsZTogc2NoZW1hLnRpdGxlLFxuICAgICAgICBwbGFjZWhvbGRlcjogc2NoZW1hLmRlc2NyaXB0aW9uLFxuICAgICAgICB2YWx1ZTogc2NoZW1hLmRlZmF1bHQgYXMgc3RyaW5nLFxuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuaW1wb3J0ICogYXMgQUVMIGZyb20gXCJhZGFwdGl2ZS1leHByZXNzaW9uc1wiO1xuXG5jbGFzcyBFdmFsdWF0aW9uQ29udGV4dCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3Jlc2VydmVkRmllbGRzID0gW1wiJGRhdGFcIiwgXCIkd2hlblwiLCBcIiRyb290XCIsIFwiJGluZGV4XCJdO1xuXG4gICAgcHJpdmF0ZSBfc3RhdGVTdGFjazogQXJyYXk8eyAkZGF0YTogYW55LCAkaW5kZXg6IGFueSB9PiA9IFtdO1xuICAgIHByaXZhdGUgXyRkYXRhOiBhbnk7XG5cbiAgICAkcm9vdDogYW55O1xuICAgICRpbmRleDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dD86IElFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLiRyb290ID0gY29udGV4dC4kcm9vdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUmVzZXJ2ZWRGaWVsZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEV2YWx1YXRpb25Db250ZXh0Ll9yZXNlcnZlZEZpZWxkcy5pbmRleE9mKG5hbWUpID49IDA7XG4gICAgfVxuXG4gICAgc2F2ZVN0YXRlKCkge1xuICAgICAgICB0aGlzLl9zdGF0ZVN0YWNrLnB1c2goXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJGRhdGE6IHRoaXMuJGRhdGEsXG4gICAgICAgICAgICAgICAgJGluZGV4OiB0aGlzLiRpbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzdG9yZUxhc3RTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBldmFsdWF0aW9uIGNvbnRleHQgc3RhdGUgdG8gcmVzdG9yZS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2F2ZWRDb250ZXh0ID0gdGhpcy5fc3RhdGVTdGFjay5wb3AoKTtcblxuICAgICAgICB0aGlzLiRkYXRhID0gc2F2ZWRDb250ZXh0LiRkYXRhO1xuICAgICAgICB0aGlzLiRpbmRleCA9IHNhdmVkQ29udGV4dC4kaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0ICRkYXRhKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl8kZGF0YSAhPT0gdW5kZWZpbmVkID8gdGhpcy5fJGRhdGEgOiB0aGlzLiRyb290O1xuICAgIH1cblxuICAgIHNldCAkZGF0YSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuXyRkYXRhID0gdmFsdWU7XG4gICAgfVxufVxuXG5jbGFzcyBUZW1wbGF0ZU9iamVjdE1lbW9yeSBpbXBsZW1lbnRzIEFFTC5NZW1vcnlJbnRlcmZhY2Uge1xuICAgIHByaXZhdGUgX21lbW9yeTogQUVMLk1lbW9yeUludGVyZmFjZTtcblxuICAgICRyb290OiBhbnk7XG4gICAgJGRhdGE6IGFueTtcbiAgICAkaW5kZXg6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9tZW1vcnkgPSBuZXcgQUVMLlNpbXBsZU9iamVjdE1lbW9yeSh0aGlzKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZShwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBsZXQgYWN0dWFsUGF0aCA9IChwYXRoLmxlbmd0aCA+IDAgJiYgcGF0aFswXSAhPT0gXCIkXCIpID8gXCIkZGF0YS5cIiArIHBhdGggOiBwYXRoO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9tZW1vcnkuZ2V0VmFsdWUoYWN0dWFsUGF0aCk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUocGF0aDogc3RyaW5nLCBpbnB1dDogYW55KSB7XG4gICAgICAgIHRoaXMuX21lbW9yeS5zZXRWYWx1ZShwYXRoLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVtb3J5LnZlcnNpb24oKTtcbiAgICB9XG59XG5cbi8qKlxuICogSG9sZHMgZ2xvYmFsIHNldHRpbmdzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSB3YXkgdGVtcGxhdGVzIGFyZSBleHBhbmRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdsb2JhbFNldHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBpbnZva2VkIHdoZW4gZXhwcmVzc2lvbiBldmFsdWF0aW9uIG5lZWRzIHRoZSB2YWx1ZSBvZiBhIGZpZWxkIGluIHRoZSBzb3VyY2UgZGF0YSBvYmplY3RcbiAgICAgKiBhbmQgdGhhdCBmaWVsZCBpcyB1bmRlZmluZWQgb3IgbnVsbC4gQnkgZGVmYXVsdCwgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHdpbGwgc3Vic3RpdHV0ZSBhbiB1bmRlZmluZWRcbiAgICAgKiBmaWVsZCB3aXRoIGl0cyBiaW5kaW5nIGV4cHJlc3Npb24gKGUuZy4gYCR7ZmllbGR9YCkuIFRoaXMgY2FsbGJhY2sgbWFrZXMgaXQgcG9zc2libGUgdG8gY3VzdG9taXplIHRoYXRcbiAgICAgKiBiZWhhdmlvci5cbiAgICAgKiBcbiAgICAgKiAqKkV4YW1wbGUqKlxuICAgICAqIEdpdmVuIHRoaXMgZGF0YSBvYmplY3Q6XG4gICAgICogXG4gICAgICogYGBganNvblxuICAgICAqIHtcbiAgICAgKiAgICAgZmlyc3ROYW1lOiBcIkRhdmlkXCJcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogXG4gICAgICogVGhlIGV4cHJlc3Npb24gYCR7Zmlyc3ROYW1lfSAke2xhc3ROYW1lfWAgd2lsbCBldmFsdWF0ZSB0byBcIkRhdmlkICR7bGFzdE5hbWV9XCIgYmVjYXVzZSB0aGUgYGxhc3ROYW1lYFxuICAgICAqIGZpZWxkIGlzIHVuZGVmaW5lZC5cbiAgICAgKiBcbiAgICAgKiBOb3cgbGV0J3Mgc2V0IHRoZSBjYWxsYmFjazpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogR2xvYmFsU2V0dGluZ3MuZ2V0VW5kZWZpbmVkRmllbGRWYWx1ZVN1YnN0aXR1dGlvblN0cmluZyA9IChwYXRoOiBzdHJpbmcpID0+IHsgcmV0dXJuIFwiPHVuZGVmaW5lZCB2YWx1ZT5cIjsgfVxuICAgICAqIGBgYFxuICAgICAqIFxuICAgICAqIFdpdGggdGhhdCwgdGhlIGFib3ZlIGV4cHJlc3Npb24gd2lsbCBldmFsdWF0ZSB0byBcIkRhdmlkICZsdDt1bmRlZmluZWQgdmFsdWUmZ3Q7XCJcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VW5kZWZpbmVkRmllbGRWYWx1ZVN1YnN0aXR1dGlvblN0cmluZz86IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBIb2xkcyB0aGUgY29udGV4dCB1c2VkIHRvIGV4cGFuZCBhIHRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFdmFsdWF0aW9uQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogVGhlIHJvb3QgZGF0YSBvYmplY3QgdGhlIHRlbXBsYXRlIHdpbGwgYmluZCB0by4gRXhwcmVzc2lvbnMgdGhhdCByZWZlciB0byAkcm9vdCBpbiB0aGUgdGVtcGxhdGUgcGF5bG9hZFxuICAgICAqIG1hcCB0byB0aGlzIGZpZWxkLiBJbml0aWFsbHksICRkYXRhIGFsc28gbWFwcyB0byAkcm9vdC5cbiAgICAgKi9cbiAgICAkcm9vdDogYW55XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHRlbXBsYXRlIHRoYXQgY2FuIGJlIGJvdW5kIHRvIGRhdGEuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcHJlcGFyZShub2RlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBUZW1wbGF0ZS5wYXJzZUludGVycG9sYXRlZFN0cmluZyhub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygbm9kZSA9PT0gXCJvYmplY3RcIiAmJiBub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goVGVtcGxhdGUucHJlcGFyZShpdGVtKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBUZW1wbGF0ZS5wcmVwYXJlKG5vZGVba2V5XSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW50ZXJuYWxUcnlFdmFsdWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogQUVMLkV4cHJlc3Npb24sIGNvbnRleHQ6IEV2YWx1YXRpb25Db250ZXh0LCBhbGxvd1N1YnN0aXR1dGlvbnM6IGJvb2xlYW4pOiB7IHZhbHVlOiBhbnk7IGVycm9yOiBzdHJpbmcgfSB7XG4gICAgICAgIGxldCBtZW1vcnkgPSBuZXcgVGVtcGxhdGVPYmplY3RNZW1vcnkoKTtcbiAgICAgICAgbWVtb3J5LiRyb290ID0gY29udGV4dC4kcm9vdDtcbiAgICAgICAgbWVtb3J5LiRkYXRhID0gY29udGV4dC4kZGF0YTtcbiAgICAgICAgbWVtb3J5LiRpbmRleCA9IGNvbnRleHQuJGluZGV4O1xuXG4gICAgICAgIGxldCBvcHRpb25zOiBBRUwuT3B0aW9ucyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoYWxsb3dTdWJzdGl0dXRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gbmV3IEFFTC5PcHRpb25zKCk7XG4gICAgICAgICAgICBvcHRpb25zLm51bGxTdWJzdGl0dXRpb24gPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHN1YnN0aXR1dGlvblZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICBpZiAoR2xvYmFsU2V0dGluZ3MuZ2V0VW5kZWZpbmVkRmllbGRWYWx1ZVN1YnN0aXR1dGlvblN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25WYWx1ZSA9IEdsb2JhbFNldHRpbmdzLmdldFVuZGVmaW5lZEZpZWxkVmFsdWVTdWJzdGl0dXRpb25TdHJpbmcocGF0aCk7ICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGlvblZhbHVlID8gc3Vic3RpdHV0aW9uVmFsdWUgOiBcIiR7XCIgKyBwYXRoICsgXCJ9XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcm9vdCBvZiBhbiBleHByZXNzaW9uIGNvbWluZyBmcm9tIGFuIGludGVycG9sYXRlZCBzdHJpbmcgaXMgb2YgdHlwZSBDb25jYXQuXG4gICAgICAgIC8vIEluIHRoYXQgY2FzZSwgYW5kIGlmIHRoZSBjYWxsZXIgYWxsb3dzIGl0LCB3ZSdyZSBkb2luZyBvdXIgb3duIGNvbmNhdGVuYXRpb25cbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gY2F0Y2ggZWFjaCBpbmRpdmlkdWFsIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBlcnJvciBhbmQgc3Vic3RpdHV0ZSBpblxuICAgICAgICAvLyB0aGUgZmluYWwgc3RyaW5nXG4gICAgICAgIGlmIChleHByZXNzaW9uLnR5cGUgPT09IEFFTC5FeHByZXNzaW9uVHlwZS5Db25jYXQgJiYgYWxsb3dTdWJzdGl0dXRpb25zKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcblxuICAgICAgICAgICAgZm9yIChsZXQgY2hpbGRFeHByZXNzaW9uIG9mIGV4cHJlc3Npb24uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBsZXQgZXZhbHVhdGlvblJlc3VsdDogeyB2YWx1ZTogYW55OyBlcnJvcjogc3RyaW5nIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGlvblJlc3VsdCA9IGNoaWxkRXhwcmVzc2lvbi50cnlFdmFsdWF0ZShtZW1vcnksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UnbGwgc3dhbGxvdyBhbGwgZXhjZXB0aW9ucyBoZXJlXG4gICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb25SZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGV4XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGlvblJlc3VsdC52YWx1ZSA9IFwiJHtcIiArIGNoaWxkRXhwcmVzc2lvbi50b1N0cmluZygpICsgXCJ9XCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGV2YWx1YXRpb25SZXN1bHQudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHJlc3VsdCwgZXJyb3I6IHVuZGVmaW5lZCB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi50cnlFdmFsdWF0ZShtZW1vcnksIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhbiBpbnRlcnBvbGF0ZWQgc3RyaW5nIGludG8gYW4gRXhwcmVzc2lvbiBvYmplY3QgcmVhZHkgdG8gZXZhbHVhdGUuXG4gICAgICogXG4gICAgICogQHBhcmFtIGludGVycG9sYXRlZFN0cmluZyBUaGUgaW50ZXJwb2xhdGVkIHN0cmluZyB0byBwYXJzZS4gRXhhbXBsZTogXCJIZWxsbyAke25hbWV9XCJcbiAgICAgKiBAcmV0dXJucyBBbiBFeHByZXNzaW9uIG9iamVjdCBpZiB0aGUgcHJvdmlkZWQgaW50ZXJwb2xhdGVkIHN0cmluZyBjb250YWluZWQgYXQgbGVhc3Qgb25lIGV4cHJlc3Npb24gKGUuZy4gXCIke2V4cHJlc3Npb259XCIpOyB0aGUgb3JpZ2luYWwgc3RyaW5nIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHBhcnNlSW50ZXJwb2xhdGVkU3RyaW5nKGludGVycG9sYXRlZFN0cmluZzogc3RyaW5nKTogQUVMLkV4cHJlc3Npb24gfCBzdHJpbmcge1xuICAgICAgICBsZXQgbG9va3VwOiBBRUwuRXZhbHVhdG9yTG9va3VwID0gKHR5cGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IHN0YW5kYXJkRnVuY3Rpb24gPSBBRUwuRXhwcmVzc2lvbkZ1bmN0aW9ucy5zdGFuZGFyZEZ1bmN0aW9ucy5nZXQodHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChzdGFuZGFyZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkRnVuY3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFFTC5FeHByZXNzaW9uRXZhbHVhdG9yKFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAoZXhwcmVzc2lvbjogQUVMLkV4cHJlc3Npb24sIHN0YXRlOiBBRUwuTWVtb3J5SW50ZXJmYWNlLCBvcHRpb25zOiBBRUwuT3B0aW9ucykgPT4geyB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGZ1bmN0aW9uIFwiICsgdHlwZSk7IH0sXG4gICAgICAgICAgICAgICAgICAgIEFFTC5SZXR1cm5UeXBlLlN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZXhwcmVzc2lvbiBzdGFydCBtYXJrZXIsIGxldCdzIGF0dGVtcHQgdG8gY29udmVydCBpbnRvIGFuIGV4cHJlc3Npb25cbiAgICAgICAgaWYgKGludGVycG9sYXRlZFN0cmluZy5pbmRleE9mKFwiJHtcIikgPj0gMCkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZEV4cHJlc3Npb24gPSBBRUwuRXhwcmVzc2lvbi5wYXJzZShcImBcIiArIGludGVycG9sYXRlZFN0cmluZyArIFwiYFwiLCBsb29rdXApO1xuXG4gICAgICAgICAgICBpZiAocGFyc2VkRXhwcmVzc2lvbi50eXBlID09PSBcImNvbmNhdFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZEV4cHJlc3Npb24uY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmICEocGFyc2VkRXhwcmVzc2lvbi5jaGlsZHJlblswXSBpbnN0YW5jZW9mIEFFTC5Db25zdGFudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGNvbmNhdCBjb250YWlucyBhIHNpbmdsZSBjaGlsZCB0aGF0IGlzbid0IGEgY29uc3RhbnQsIHRodXMgdGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cmluZyB3YXMgYSBzaW5nbGUgZXhwcmVzc2lvbi4gV2hlbiBldmFsdWF0ZWQsIHdlIHdhbnQgaXQgdG8gcHJvZHVjZSB0aGUgdHlwZVxuICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGF0IHNpbmdsZSBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRFeHByZXNzaW9uLmNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJzZWRFeHByZXNzaW9uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3RDaGlsZCA9IHBhcnNlZEV4cHJlc3Npb24uY2hpbGRyZW5bMF07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgaW5zdGFuY2VvZiBBRUwuQ29uc3RhbnQgJiYgZmlyc3RDaGlsZC52YWx1ZSA9PT0gXCJcIiAmJiAhKHBhcnNlZEV4cHJlc3Npb24uY2hpbGRyZW5bMV0gaW5zdGFuY2VvZiBBRUwuQ29uc3RhbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgY29uY2F0IGNvbnRhaW5zIDIgY2hpbGRyZW4sIGFuZCB0aGUgZmlyc3Qgb25lIGlzIGFuIGVtcHR5IHN0cmluZyBjb25zdGFudCBhbmQgdGhlIHNlY29uZCBpc24ndCBhIGNvbnN0YW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDQuMTAuMywgQUVMIGFsd2F5cyBpbnNlcnRzIGFuIGVtcHR5IHN0cmluZyBjb25zdGFudCBpbiBhbGwgY29uY2F0IGV4cHJlc3Npb24uIFRodXMgdGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmcgd2FzIGEgc2luZ2xlIGV4cHJlc3Npb24gaW4gdGhpcyBjYXNlIGFzIHdlbGwuIFdoZW4gZXZhbHVhdGVkLCB3ZSB3YW50IGl0IHRvIHByb2R1Y2UgdGhlIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoYXQgc2luZ2xlIGV4cHJlc3Npb24uXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkRXhwcmVzc2lvbi5jaGlsZHJlblsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2Ugd2FudCB0aGUgZXhwcmVzc2lvbiB0byBwcm9kdWNlIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZEV4cHJlc3Npb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgb3JpZ2luYWwgc3RyaW5nIGRpZG4ndCBjb250YWluIGFueSBleHByZXNzaW9uLCByZXR1cm4gaSBhcyBpc1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGVkU3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWVzIHRvIGV2YWx1YXRlIHRoZSBwcm92aWRlZCBleHByZXNzaW9uIHVzaW5nIHRoZSBwcm92aWRlZCBjb250ZXh0LlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IChkYXRhKSB1c2VkIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uLlxuICAgICAqIEBwYXJhbSBhbGxvd1N1YnN0aXR1dGlvbnMgSW5kaWNhdGVzIGlmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRvciBzaG91bGQgc3Vic3RpdHV0ZSB1bmRlZmluZWQgdmFsdWUgd2l0aCBhIGRlZmF1bHRcbiAgICAgKiAgIHN0cmluZyBvciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIEdsb2JhbFNldHRpbmdzLmdldFVuZGVmaW5lZEZpZWxkVmFsdWVTdWJzdGl0dXRpb25TdHJpbmcgY2FsbGJhY2suXG4gICAgICogQHJldHVybnMgQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uLiBJZiB0aGUgZXZhbHVhdGlvbiBzdWNjZWVkZWQsIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAqICAgY29udGFpbnMgdGhlIGFjdHVhbCBldmFsdWF0aW9uIHJlc3VsdCwgYW5kIHRoZSBlcnJvciBwcm9wZXJ0eSBpcyB1bmRlZmluZWQuIElmIHRoZSBldmFsdWF0aW9uIGZhaWxzLCB0aGUgZXJyb3JcbiAgICAgKiAgIHByb3BlcnR5IGNvbnRhaW5zIGEgbWVzc2FnZSBkZXRhaWxpbmcgdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB0cnlFdmFsdWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogQUVMLkV4cHJlc3Npb24sIGNvbnRleHQ6IElFdmFsdWF0aW9uQ29udGV4dCwgYWxsb3dTdWJzdGl0dXRpb25zOiBib29sZWFuKTogeyB2YWx1ZTogYW55OyBlcnJvcjogc3RyaW5nIH0ge1xuICAgICAgICByZXR1cm4gVGVtcGxhdGUuaW50ZXJuYWxUcnlFdmFsdWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbmV3IEV2YWx1YXRpb25Db250ZXh0KGNvbnRleHQpLCBhbGxvd1N1YnN0aXR1dGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NvbnRleHQ6IEV2YWx1YXRpb25Db250ZXh0O1xuICAgIHByaXZhdGUgX3ByZXBhcmVkUGF5bG9hZDogYW55O1xuXG4gICAgcHJpdmF0ZSBleHBhbmRTaW5nbGVPYmplY3Qobm9kZTogb2JqZWN0KTogYW55IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xuXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NvbnRleHQuaXNSZXNlcnZlZEZpZWxkKGtleSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmludGVybmFsRXhwYW5kKG5vZGVba2V5XSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnRlcm5hbEV4cGFuZChub2RlOiBhbnkpOiBhbnkge1xuICAgICAgICBsZXQgcmVzdWx0OiBhbnk7XG5cbiAgICAgICAgdGhpcy5fY29udGV4dC5zYXZlU3RhdGUoKTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgICAgICAgbGV0IGl0ZW1BcnJheTogYW55W10gPSBbXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBub2RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4cGFuZGVkSXRlbSA9IHRoaXMuaW50ZXJuYWxFeHBhbmQoaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXhwYW5kZWRJdGVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cGFuZGVkSXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1BcnJheSA9IGl0ZW1BcnJheS5jb25jYXQoZXhwYW5kZWRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1BcnJheS5wdXNoKGV4cGFuZGVkSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IGl0ZW1BcnJheTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQUVMLkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGxldCBldmFsdWF0aW9uUmVzdWx0ID0gVGVtcGxhdGUuaW50ZXJuYWxUcnlFdmFsdWF0ZUV4cHJlc3Npb24obm9kZSwgdGhpcy5fY29udGV4dCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmICghZXZhbHVhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGV2YWx1YXRpb25SZXN1bHQudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXZhbHVhdGlvblJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09IFwib2JqZWN0XCIgJiYgbm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IHdoZW4gPSBub2RlW1wiJHdoZW5cIl07XG4gICAgICAgICAgICBsZXQgZGF0YUNvbnRleHQgPSBub2RlW1wiJGRhdGFcIl07XG4gICAgICAgICAgICBsZXQgZGF0YUNvbnRleHRJc0FycmF5OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGF0YUNvbnRleHRzOiBhbnlbXTtcblxuICAgICAgICAgICAgaWYgKGRhdGFDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkYXRhQ29udGV4dHMgPSBbIHVuZGVmaW5lZCBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFDb250ZXh0IGluc3RhbmNlb2YgQUVMLkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV2YWx1YXRpb25SZXN1bHQgPSBUZW1wbGF0ZS5pbnRlcm5hbFRyeUV2YWx1YXRlRXhwcmVzc2lvbihkYXRhQ29udGV4dCwgdGhpcy5fY29udGV4dCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFldmFsdWF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhQ29udGV4dCA9IGV2YWx1YXRpb25SZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXZhbHVhdGlvblJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhQ29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUNvbnRleHRzID0gZGF0YUNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFDb250ZXh0SXNBcnJheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRhQ29udGV4dHMgPSBbIGRhdGFDb250ZXh0IF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YUNvbnRleHRJc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQuJGluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGF0YUNvbnRleHRzW2ldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC4kZGF0YSA9IGRhdGFDb250ZXh0c1tpXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgZHJvcE9iamVjdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHdoZW4gaW5zdGFuY2VvZiBBRUwuRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXZhbHVhdGlvblJlc3VsdCA9IFRlbXBsYXRlLmludGVybmFsVHJ5RXZhbHVhdGVFeHByZXNzaW9uKHdoZW4sIHRoaXMuX2NvbnRleHQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdoZW5WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgJHdoZW4gZmFpbHMgdG8gZXZhbHVhdGUgb3IgZXZhbHVhdGVzIHRvIGFueXRoaW5nIGJ1dCBhIGJvb2xlYW4sIGNvbnNpZGVyIGl0IGlzIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZhbHVhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hlblZhbHVlID0gdHlwZW9mIGV2YWx1YXRpb25SZXN1bHQudmFsdWUgPT09IFwiYm9vbGVhblwiICYmIGV2YWx1YXRpb25SZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBkcm9wT2JqZWN0ID0gIXdoZW5WYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRyb3BPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4cGFuZGVkT2JqZWN0ID0gdGhpcy5leHBhbmRTaW5nbGVPYmplY3Qobm9kZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGFuZGVkT2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChleHBhbmRlZE9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29udGV4dC5yZXN0b3JlTGFzdFN0YXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBUZW1wbGF0ZSBpbnN0YW5jZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cbiAgICAgKiBPbmNlIGNyZWF0ZWQsIHRoZSBpbnN0YW5jZSBjYW4gYmUgYm91bmQgdG8gZGlmZmVyZW50IGRhdGEgb2JqZWN0c1xuICAgICAqIGluIGEgbG9vcC5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgdGVtcGxhdGUgcGF5bG9hZC4gIFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBheWxvYWQ6IGFueSkge1xuICAgICAgICB0aGlzLl9wcmVwYXJlZFBheWxvYWQgPSBUZW1wbGF0ZS5wcmVwYXJlKHBheWxvYWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgdGhlIHRlbXBsYXRlIHVzaW5nIHRoZSBwcm92aWRlZCBjb250ZXh0LiBUZW1wbGF0ZSBleHBhbnNpb24gaW52b2x2ZXNcbiAgICAgKiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyB1c2VkIGluIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZSBwYXlsb2FkLCBhcyB3ZWxsIGFzXG4gICAgICogcmVwZWF0aW5nIChleHBhbmRpbmcpIHBhcnRzIG9mIHRoYXQgcGF5bG9hZCB0aGF0IGFyZSBib3VuZCB0byBhcnJheXMuXG4gICAgICogXG4gICAgICogRXhhbXBsZTpcbiAgICAgKiBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbnRleHQgPSB7XG4gICAgICogICAgICRyb290OiB7XG4gICAgICogICAgICAgICBmaXJzdE5hbWU6IFwiSm9oblwiLFxuICAgICAqICAgICAgICAgbGFzdE5hbWU6IFwiRG9lXCIsXG4gICAgICogICAgICAgICBjaGlsZHJlbjogW1xuICAgICAqICAgICAgICAgICAgIHsgZnVsbE5hbWU6IFwiSmFuZSBEb2VcIiwgYWdlOiA5IH0sXG4gICAgICogICAgICAgICAgICAgeyBmdWxsTmFtZTogXCJBbGV4IERvZVwiLCBhZ2U6IDEyIH1cbiAgICAgKiAgICAgICAgIF1cbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKiBcbiAgICAgKiBsZXQgdGVtcGxhdGVQYXlsb2FkID0ge1xuICAgICAqICAgICB0eXBlOiBcIkFkYXB0aXZlQ2FyZFwiLFxuICAgICAqICAgICB2ZXJzaW9uOiBcIjEuMlwiLFxuICAgICAqICAgICBib2R5OiBbXG4gICAgICogICAgICAgICB7XG4gICAgICogICAgICAgICAgICAgdHlwZTogXCJUZXh0QmxvY2tcIixcbiAgICAgKiAgICAgICAgICAgICB0ZXh0OiBcIiR7Zmlyc3ROYW1lfSAke2xhc3ROYW1lfVwiXG4gICAgICogICAgICAgICB9LFxuICAgICAqICAgICAgICAge1xuICAgICAqICAgICAgICAgICAgIHR5cGU6IFwiVGV4dEJsb2NrXCIsXG4gICAgICogICAgICAgICAgICAgJGRhdGE6IFwiJHtjaGlsZHJlbn1cIixcbiAgICAgKiAgICAgICAgICAgICB0ZXh0OiBcIiR7ZnVsbE5hbWV9ICgke2FnZX0pXCJcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgXVxuICAgICAqIH1cbiAgICAgKiBcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUodGVtcGxhdGVQYXlsb2FkKTtcbiAgICAgKiBcbiAgICAgKiBsZXQgZXhwYW5kZWRUZW1wbGF0ZSA9IHRlbXBsYXRlLmV4cGFuZChjb250ZXh0KTtcbiAgICAgKiBgYGBcbiAgICAgKiBcbiAgICAgKiBXaXRoIHRoZSBhYm92ZSBjb2RlLCB0aGUgdmFsdWUgb2YgYGV4cGFuZGVkVGVtcGxhdGVgIHdpbGwgYmVcbiAgICAgKiBcbiAgICAgKiBgYGBqc29uXG4gICAgICoge1xuICAgICAqICAgICB0eXBlOiBcIkFkYXB0aXZlQ2FyZFwiLFxuICAgICAqICAgICB2ZXJzaW9uOiBcIjEuMlwiLFxuICAgICAqICAgICBib2R5OiBbXG4gICAgICogICAgICAgICB7XG4gICAgICogICAgICAgICAgICAgdHlwZTogXCJUZXh0QmxvY2tcIixcbiAgICAgKiAgICAgICAgICAgICB0ZXh0OiBcIkpvaG4gRG9lXCJcbiAgICAgKiAgICAgICAgIH0sXG4gICAgICogICAgICAgICB7XG4gICAgICogICAgICAgICAgICAgdHlwZTogXCJUZXh0QmxvY2tcIixcbiAgICAgKiAgICAgICAgICAgICB0ZXh0OiBcIkphbmUgRG9lICg5KVwiXG4gICAgICogICAgICAgICB9LFxuICAgICAqICAgICAgICAge1xuICAgICAqICAgICAgICAgICAgIHR5cGU6IFwiVGV4dEJsb2NrXCIsXG4gICAgICogICAgICAgICAgICAgdGV4dDogXCJBbGV4IERvZSAoMTIpXCJcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgXVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiaW5kIHRoZSB0ZW1wbGF0ZSB0by5cbiAgICAgKiBAcmV0dXJucyBBIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgZXhwYW5kZWQgdGVtcGxhdGUuIFRoZSB0eXBlIG9mIHRoYXQgdmFsdWVcbiAgICAgKiAgIGlzIGRlcGVuZGVudCBvbiB0aGUgdHlwZSBvZiB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgcGF5bG9hZCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqL1xuICAgIGV4cGFuZChjb250ZXh0OiBJRXZhbHVhdGlvbkNvbnRleHQpOiBhbnkge1xuICAgICAgICB0aGlzLl9jb250ZXh0ID0gbmV3IEV2YWx1YXRpb25Db250ZXh0KGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsRXhwYW5kKHRoaXMuX3ByZXBhcmVkUGF5bG9hZCk7XG4gICAgfVxufSIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9hZGFwdGl2ZV9leHByZXNzaW9uc19fOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9hZGFwdGl2ZWNhcmRzLXRlbXBsYXRpbmcudHNcIik7XG4iLCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
|