@norwegian/core-components 5.18.0 → 5.18.2
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/esm2020/lib/components/accordion/accordion.component.mjs +148 -0
- package/esm2020/lib/components/accordion/accordion.module.mjs +20 -0
- package/esm2020/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.mjs +610 -0
- package/esm2020/lib/components/airport-select/airport-select.component.mjs +438 -0
- package/esm2020/lib/components/airport-select/airport-select.module.mjs +42 -0
- package/esm2020/lib/components/airport-select/services/airport-select-dropdown.service.mjs +35 -0
- package/esm2020/lib/components/airport-select/services/airport-select.service.mjs +38 -0
- package/esm2020/lib/components/autocomplete/autocomplete.component.mjs +287 -0
- package/esm2020/lib/components/autocomplete/autocomplete.module.mjs +43 -0
- package/esm2020/lib/components/backdrop/backdrop.component.mjs +56 -0
- package/esm2020/lib/components/backdrop/backdrop.module.mjs +24 -0
- package/esm2020/lib/components/box/box.component.mjs +68 -0
- package/esm2020/lib/components/box/box.module.mjs +19 -0
- package/esm2020/lib/components/button/button.component.mjs +167 -0
- package/esm2020/lib/components/button/button.module.mjs +20 -0
- package/esm2020/lib/components/checkbox/checkbox.component.mjs +148 -0
- package/esm2020/lib/components/checkbox/checkbox.module.mjs +20 -0
- package/esm2020/lib/components/chip/chip.component.mjs +53 -0
- package/esm2020/lib/components/chip/chip.module.mjs +24 -0
- package/esm2020/lib/components/container/container.component.mjs +50 -0
- package/esm2020/lib/components/container/container.module.mjs +19 -0
- package/esm2020/lib/components/continue/continue.component.mjs +194 -0
- package/esm2020/lib/components/continue/continue.module.mjs +34 -0
- package/esm2020/lib/components/cover/cover.component.mjs +75 -0
- package/esm2020/lib/components/cover/cover.module.mjs +21 -0
- package/esm2020/lib/components/datepicker/calendar/calendar.component.mjs +583 -0
- package/esm2020/lib/components/datepicker/datepicker.component.mjs +550 -0
- package/esm2020/lib/components/datepicker/datepicker.module.mjs +55 -0
- package/esm2020/lib/components/datepicker/services/calendar.service.mjs +213 -0
- package/esm2020/lib/components/datepicker-combo/datepicker-combo.component.mjs +355 -0
- package/esm2020/lib/components/datepicker-combo/datepicker-combo.module.mjs +31 -0
- package/esm2020/lib/components/divider/divider.component.mjs +61 -0
- package/esm2020/lib/components/divider/divider.module.mjs +20 -0
- package/esm2020/lib/components/dropdown/dropdown.component.mjs +169 -0
- package/esm2020/lib/components/dropdown/dropdown.module.mjs +32 -0
- package/esm2020/lib/components/filter/filter.component.mjs +1253 -0
- package/esm2020/lib/components/filter/filter.module.mjs +73 -0
- package/esm2020/lib/components/grid/col/col.component.mjs +49 -0
- package/esm2020/lib/components/grid/grid.component.mjs +72 -0
- package/esm2020/lib/components/grid/grid.module.mjs +20 -0
- package/esm2020/lib/components/icon/icon.component.mjs +44 -0
- package/esm2020/lib/components/icon/icon.module.mjs +24 -0
- package/esm2020/lib/components/icon-list/icon-list.component.mjs +50 -0
- package/esm2020/lib/components/icon-list/icon-list.module.mjs +20 -0
- package/esm2020/lib/components/info/info.component.mjs +106 -0
- package/esm2020/lib/components/info/info.module.mjs +36 -0
- package/esm2020/lib/components/input/input.component.mjs +179 -0
- package/esm2020/lib/components/input/input.module.mjs +21 -0
- package/esm2020/lib/components/journey/journey.component.mjs +126 -0
- package/esm2020/lib/components/journey/journey.module.mjs +28 -0
- package/esm2020/lib/components/journey-availability/journey-availability.component.mjs +126 -0
- package/esm2020/lib/components/journey-availability/journey-availability.module.mjs +39 -0
- package/esm2020/lib/components/journey-availability-list/journey-availability-list.component.mjs +185 -0
- package/{esm2015/lib/components/journey-availability-list/journey-availability-list.module.js → esm2020/lib/components/journey-availability-list/journey-availability-list.module.mjs} +27 -14
- package/esm2020/lib/components/journey-selection/journey-selection.component.mjs +112 -0
- package/esm2020/lib/components/journey-selection/journey-selection.module.mjs +35 -0
- package/esm2020/lib/components/journey-stopover/journey-stopover.component.mjs +125 -0
- package/esm2020/lib/components/journey-stopover/journey-stopover.module.mjs +28 -0
- package/esm2020/lib/components/list/list-item/list-item.component.mjs +52 -0
- package/esm2020/lib/components/list/list.component.mjs +78 -0
- package/esm2020/lib/components/list/list.module.mjs +20 -0
- package/esm2020/lib/components/modal/modal.component.mjs +141 -0
- package/esm2020/lib/components/modal/modal.module.mjs +38 -0
- package/esm2020/lib/components/number-field/number-field.component.mjs +135 -0
- package/esm2020/lib/components/number-field/number-field.module.mjs +39 -0
- package/esm2020/lib/components/page-footer/page-footer.component.mjs +54 -0
- package/esm2020/lib/components/page-footer/page-footer.module.mjs +21 -0
- package/esm2020/lib/components/page-header/hamburger/hamburger.component.mjs +22 -0
- package/esm2020/lib/components/page-header/page-header.component.mjs +142 -0
- package/esm2020/lib/components/page-header/page-header.module.mjs +23 -0
- package/esm2020/lib/components/page-header/search/search.component.mjs +49 -0
- package/{esm2015/lib/components/passenger-select/models/passengers.model.js → esm2020/lib/components/passenger-select/models/passengers.model.mjs} +1 -1
- package/esm2020/lib/components/passenger-select/passenger-select.component.mjs +225 -0
- package/esm2020/lib/components/passenger-select/passenger-select.module.mjs +28 -0
- package/esm2020/lib/components/phone-number/phone-number.component.mjs +148 -0
- package/esm2020/lib/components/phone-number/phone-number.module.mjs +44 -0
- package/esm2020/lib/components/premium-toggle/premium-toggle.component.mjs +69 -0
- package/esm2020/lib/components/premium-toggle/premium-toggle.module.mjs +28 -0
- package/esm2020/lib/components/radio/radio.component.mjs +98 -0
- package/esm2020/lib/components/radio/radio.module.mjs +20 -0
- package/esm2020/lib/components/select/optgroup/optgroup.component.mjs +29 -0
- package/esm2020/lib/components/select/option/option.component.mjs +26 -0
- package/esm2020/lib/components/select/select.component.mjs +354 -0
- package/esm2020/lib/components/select/select.module.mjs +30 -0
- package/esm2020/lib/components/simple-list/simple-list.component.mjs +48 -0
- package/esm2020/lib/components/simple-list/simple-list.module.mjs +19 -0
- package/esm2020/lib/components/slide-toggle/slide-toggle.component.mjs +111 -0
- package/esm2020/lib/components/slide-toggle/slide-toggle.module.mjs +31 -0
- package/esm2020/lib/components/slider/slider.component.mjs +501 -0
- package/esm2020/lib/components/slider/slider.module.mjs +28 -0
- package/esm2020/lib/components/sort/sort.component.mjs +93 -0
- package/esm2020/lib/components/sort/sort.module.mjs +36 -0
- package/esm2020/lib/components/spinner/spinner.component.mjs +112 -0
- package/esm2020/lib/components/spinner/spinner.module.mjs +19 -0
- package/esm2020/lib/components/subsidy-discount/subsidy-discount.component.mjs +110 -0
- package/esm2020/lib/components/subsidy-discount/subsidy-discount.module.mjs +36 -0
- package/esm2020/lib/components/suggestions/suggestions.component.mjs +43 -0
- package/esm2020/lib/components/suggestions/suggestions.module.mjs +28 -0
- package/esm2020/lib/components/tab-group/tab/tab.component.mjs +131 -0
- package/esm2020/lib/components/tab-group/tab-group.component.mjs +87 -0
- package/esm2020/lib/components/tab-group/tab-group.module.mjs +29 -0
- package/esm2020/lib/components/table/column/column.component.mjs +16 -0
- package/esm2020/lib/components/table/column-group/column-group.component.mjs +30 -0
- package/esm2020/lib/components/table/services/table.service.mjs +21 -0
- package/esm2020/lib/components/table/table-body/table-body.component.mjs +23 -0
- package/esm2020/lib/components/table/table-foot/table-foot.component.mjs +23 -0
- package/esm2020/lib/components/table/table-head/table-head.component.mjs +23 -0
- package/esm2020/lib/components/table/table-row/table-data/table-data.component.mjs +15 -0
- package/esm2020/lib/components/table/table-row/table-header/table-header.component.mjs +15 -0
- package/esm2020/lib/components/table/table-row/table-row.component.mjs +23 -0
- package/esm2020/lib/components/table/table.component.mjs +29 -0
- package/esm2020/lib/components/table/table.module.mjs +68 -0
- package/esm2020/lib/components/textarea/textarea.component.mjs +93 -0
- package/esm2020/lib/components/textarea/textarea.module.mjs +31 -0
- package/esm2020/lib/components/toggle/toggle.component.mjs +103 -0
- package/esm2020/lib/components/toggle/toggle.module.mjs +35 -0
- package/esm2020/lib/components/trip-summary/trip-summary.component.mjs +170 -0
- package/esm2020/lib/components/trip-summary/trip-summary.module.mjs +36 -0
- package/esm2020/lib/components/weather-icon/weather-icon.component.mjs +60 -0
- package/esm2020/lib/components/weather-icon/weather-icon.module.mjs +19 -0
- package/esm2020/lib/core/base/nas-component.base.mjs +47 -0
- package/esm2020/lib/core/directives/nas-class/nas-class.directive.mjs +80 -0
- package/esm2020/lib/core/directives/nas-class/nas-class.module.mjs +22 -0
- package/{esm2015/lib/core/extensions/html-element.extension.js → esm2020/lib/core/extensions/html-element.extension.mjs} +1 -1
- package/esm2020/lib/core/services/abandoned-basket/abandoned-basket.service.mjs +58 -0
- package/esm2020/lib/core/services/animate-helper/animate-helper.service.mjs +49 -0
- package/esm2020/lib/core/services/bem-helper/bem-helper.service.mjs +44 -0
- package/esm2020/lib/core/services/date/date-helper.service.mjs +199 -0
- package/esm2020/lib/core/services/device/device-helper.service.mjs +46 -0
- package/esm2020/lib/core/services/geolocation/geolocation.service.mjs +63 -0
- package/esm2020/lib/core/services/language/language-helper.service.mjs +129 -0
- package/esm2020/lib/core/services/sort/sort.service.mjs +22 -0
- package/esm2020/lib/core/services/viewport/viewport.service.mjs +32 -0
- package/esm2020/lib/services/get-position.service.mjs +23 -0
- package/esm2020/norwegian-core-components.mjs +5 -0
- package/fesm2015/norwegian-core-components.mjs +11843 -0
- package/fesm2015/norwegian-core-components.mjs.map +1 -0
- package/fesm2020/norwegian-core-components.mjs +11829 -0
- package/fesm2020/norwegian-core-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/accordion/accordion.component.d.ts +3 -0
- package/lib/components/accordion/accordion.module.d.ts +8 -0
- package/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.d.ts +5 -2
- package/lib/components/airport-select/airport-select.component.d.ts +5 -2
- package/lib/components/airport-select/airport-select.module.d.ts +11 -0
- package/lib/components/airport-select/services/airport-select-dropdown.service.d.ts +3 -0
- package/lib/components/airport-select/services/airport-select.service.d.ts +3 -0
- package/lib/components/autocomplete/autocomplete.component.d.ts +5 -2
- package/lib/components/autocomplete/autocomplete.module.d.ts +11 -0
- package/lib/components/backdrop/backdrop.component.d.ts +3 -0
- package/lib/components/backdrop/backdrop.module.d.ts +7 -0
- package/lib/components/box/box.component.d.ts +3 -4
- package/lib/components/box/box.module.d.ts +7 -0
- package/lib/components/button/button.component.d.ts +3 -0
- package/lib/components/button/button.module.d.ts +8 -0
- package/lib/components/checkbox/checkbox.component.d.ts +5 -2
- package/lib/components/checkbox/checkbox.module.d.ts +8 -0
- package/lib/components/chip/chip.component.d.ts +3 -0
- package/lib/components/chip/chip.module.d.ts +7 -0
- package/lib/components/container/container.component.d.ts +3 -4
- package/lib/components/container/container.module.d.ts +7 -0
- package/lib/components/continue/continue.component.d.ts +3 -0
- package/lib/components/continue/continue.module.d.ts +9 -0
- package/lib/components/cover/cover.component.d.ts +3 -0
- package/lib/components/cover/cover.module.d.ts +9 -0
- package/lib/components/datepicker/calendar/calendar.component.d.ts +5 -2
- package/lib/components/datepicker/datepicker.component.d.ts +5 -2
- package/lib/components/datepicker/datepicker.module.d.ts +14 -0
- package/lib/components/datepicker/services/calendar.service.d.ts +3 -0
- package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +3 -0
- package/lib/components/datepicker-combo/datepicker-combo.module.d.ts +8 -0
- package/lib/components/divider/divider.component.d.ts +3 -4
- package/lib/components/divider/divider.module.d.ts +8 -0
- package/lib/components/dropdown/dropdown.component.d.ts +3 -0
- package/lib/components/dropdown/dropdown.module.d.ts +9 -0
- package/lib/components/filter/filter.component.d.ts +5 -2
- package/lib/components/filter/filter.module.d.ts +18 -0
- package/lib/components/grid/col/col.component.d.ts +4 -1
- package/lib/components/grid/grid.component.d.ts +3 -4
- package/lib/components/grid/grid.module.d.ts +8 -0
- package/lib/components/icon/icon.component.d.ts +3 -4
- package/lib/components/icon/icon.module.d.ts +7 -0
- package/lib/components/icon-list/icon-list.component.d.ts +3 -0
- package/lib/components/icon-list/icon-list.module.d.ts +8 -0
- package/lib/components/info/info.component.d.ts +3 -0
- package/lib/components/info/info.module.d.ts +10 -0
- package/lib/components/input/input.component.d.ts +5 -2
- package/lib/components/input/input.module.d.ts +9 -0
- package/lib/components/journey/journey.component.d.ts +3 -0
- package/lib/components/journey/journey.module.d.ts +8 -0
- package/lib/components/journey-availability/journey-availability.component.d.ts +3 -0
- package/lib/components/journey-availability/journey-availability.module.d.ts +10 -0
- package/lib/components/journey-availability-list/journey-availability-list.component.d.ts +3 -0
- package/lib/components/journey-availability-list/journey-availability-list.module.d.ts +10 -0
- package/lib/components/journey-selection/journey-selection.component.d.ts +3 -0
- package/lib/components/journey-selection/journey-selection.module.d.ts +9 -0
- package/lib/components/journey-stopover/journey-stopover.component.d.ts +3 -0
- package/lib/components/journey-stopover/journey-stopover.module.d.ts +8 -0
- package/lib/components/list/list-item/list-item.component.d.ts +3 -0
- package/lib/components/list/list.component.d.ts +4 -1
- package/lib/components/list/list.module.d.ts +8 -0
- package/lib/components/modal/modal.component.d.ts +3 -0
- package/lib/components/modal/modal.module.d.ts +10 -0
- package/lib/components/number-field/number-field.component.d.ts +5 -2
- package/lib/components/number-field/number-field.module.d.ts +10 -0
- package/lib/components/page-footer/page-footer.component.d.ts +3 -0
- package/lib/components/page-footer/page-footer.module.d.ts +9 -0
- package/lib/components/page-header/hamburger/hamburger.component.d.ts +3 -0
- package/lib/components/page-header/page-header.component.d.ts +3 -0
- package/lib/components/page-header/page-header.module.d.ts +11 -0
- package/lib/components/page-header/search/search.component.d.ts +3 -0
- package/lib/components/passenger-select/models/passengers.model.d.ts +2 -2
- package/lib/components/passenger-select/passenger-select.component.d.ts +5 -2
- package/lib/components/passenger-select/passenger-select.module.d.ts +8 -0
- package/lib/components/phone-number/phone-number.component.d.ts +5 -2
- package/lib/components/phone-number/phone-number.module.d.ts +11 -0
- package/lib/components/premium-toggle/premium-toggle.component.d.ts +3 -0
- package/lib/components/premium-toggle/premium-toggle.module.d.ts +8 -0
- package/lib/components/radio/radio.component.d.ts +5 -2
- package/lib/components/radio/radio.module.d.ts +8 -0
- package/lib/components/select/optgroup/optgroup.component.d.ts +3 -0
- package/lib/components/select/option/option.component.d.ts +3 -0
- package/lib/components/select/select.component.d.ts +6 -3
- package/lib/components/select/select.module.d.ts +10 -0
- package/lib/components/simple-list/simple-list.component.d.ts +4 -1
- package/lib/components/simple-list/simple-list.module.d.ts +7 -0
- package/lib/components/slide-toggle/slide-toggle.component.d.ts +5 -2
- package/lib/components/slide-toggle/slide-toggle.module.d.ts +8 -0
- package/lib/components/slider/slider.component.d.ts +5 -2
- package/lib/components/slider/slider.module.d.ts +8 -0
- package/lib/components/sort/sort.component.d.ts +3 -0
- package/lib/components/sort/sort.module.d.ts +10 -0
- package/lib/components/spinner/spinner.component.d.ts +11 -4
- package/lib/components/spinner/spinner.module.d.ts +7 -0
- package/lib/components/subsidy-discount/subsidy-discount.component.d.ts +3 -0
- package/lib/components/subsidy-discount/subsidy-discount.module.d.ts +10 -0
- package/lib/components/suggestions/suggestions.component.d.ts +3 -0
- package/lib/components/suggestions/suggestions.module.d.ts +8 -0
- package/lib/components/tab-group/tab/tab.component.d.ts +3 -0
- package/lib/components/tab-group/tab-group.component.d.ts +3 -0
- package/lib/components/tab-group/tab-group.module.d.ts +9 -0
- package/lib/components/table/column/column.component.d.ts +3 -0
- package/lib/components/table/column-group/column-group.component.d.ts +3 -0
- package/lib/components/table/services/table.service.d.ts +3 -0
- package/lib/components/table/table-body/table-body.component.d.ts +3 -0
- package/lib/components/table/table-foot/table-foot.component.d.ts +3 -0
- package/lib/components/table/table-head/table-head.component.d.ts +3 -0
- package/lib/components/table/table-row/table-data/table-data.component.d.ts +3 -0
- package/lib/components/table/table-row/table-header/table-header.component.d.ts +3 -0
- package/lib/components/table/table-row/table-row.component.d.ts +3 -0
- package/lib/components/table/table.component.d.ts +3 -0
- package/lib/components/table/table.module.d.ts +15 -0
- package/lib/components/textarea/textarea.component.d.ts +5 -2
- package/lib/components/textarea/textarea.module.d.ts +8 -0
- package/lib/components/toggle/toggle.component.d.ts +6 -3
- package/lib/components/toggle/toggle.module.d.ts +9 -0
- package/lib/components/trip-summary/trip-summary.component.d.ts +3 -0
- package/lib/components/trip-summary/trip-summary.module.d.ts +10 -0
- package/lib/components/weather-icon/weather-icon.component.d.ts +3 -0
- package/lib/components/weather-icon/weather-icon.module.d.ts +7 -0
- package/lib/core/directives/nas-class/nas-class.directive.d.ts +3 -0
- package/lib/core/directives/nas-class/nas-class.module.d.ts +6 -0
- package/lib/core/services/abandoned-basket/abandoned-basket.service.d.ts +3 -0
- package/lib/core/services/animate-helper/animate-helper.service.d.ts +3 -0
- package/lib/core/services/bem-helper/bem-helper.service.d.ts +3 -0
- package/lib/core/services/date/date-helper.service.d.ts +3 -0
- package/lib/core/services/device/device-helper.service.d.ts +3 -0
- package/lib/core/services/geolocation/geolocation.service.d.ts +3 -0
- package/lib/core/services/language/language-helper.service.d.ts +3 -0
- package/lib/core/services/sort/sort.service.d.ts +3 -0
- package/lib/core/services/viewport/viewport.service.d.ts +3 -0
- package/lib/services/get-position.service.d.ts +3 -0
- package/package.json +21 -9
- package/bundles/norwegian-core-components.umd.js +0 -12174
- package/bundles/norwegian-core-components.umd.js.map +0 -1
- package/esm2015/lib/components/accordion/accordion.component.js +0 -130
- package/esm2015/lib/components/accordion/accordion.module.js +0 -15
- package/esm2015/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.js +0 -583
- package/esm2015/lib/components/airport-select/airport-select.component.js +0 -400
- package/esm2015/lib/components/airport-select/airport-select.module.js +0 -27
- package/esm2015/lib/components/airport-select/services/airport-select-dropdown.service.js +0 -34
- package/esm2015/lib/components/airport-select/services/airport-select.service.js +0 -37
- package/esm2015/lib/components/autocomplete/autocomplete.component.js +0 -265
- package/esm2015/lib/components/autocomplete/autocomplete.module.js +0 -26
- package/esm2015/lib/components/backdrop/backdrop.component.js +0 -54
- package/esm2015/lib/components/backdrop/backdrop.module.js +0 -17
- package/esm2015/lib/components/box/box.component.js +0 -61
- package/esm2015/lib/components/box/box.module.js +0 -14
- package/esm2015/lib/components/button/button.component.js +0 -140
- package/esm2015/lib/components/button/button.module.js +0 -15
- package/esm2015/lib/components/checkbox/checkbox.component.js +0 -127
- package/esm2015/lib/components/checkbox/checkbox.module.js +0 -15
- package/esm2015/lib/components/chip/chip.component.js +0 -50
- package/esm2015/lib/components/chip/chip.module.js +0 -17
- package/esm2015/lib/components/container/container.component.js +0 -47
- package/esm2015/lib/components/container/container.module.js +0 -14
- package/esm2015/lib/components/continue/continue.component.js +0 -173
- package/esm2015/lib/components/continue/continue.module.js +0 -23
- package/esm2015/lib/components/cover/cover.component.js +0 -61
- package/esm2015/lib/components/cover/cover.module.js +0 -16
- package/esm2015/lib/components/datepicker/calendar/calendar.component.js +0 -560
- package/esm2015/lib/components/datepicker/datepicker.component.js +0 -515
- package/esm2015/lib/components/datepicker/datepicker.module.js +0 -34
- package/esm2015/lib/components/datepicker/services/calendar.service.js +0 -217
- package/esm2015/lib/components/datepicker-combo/datepicker-combo.component.js +0 -317
- package/esm2015/lib/components/datepicker-combo/datepicker-combo.module.js +0 -22
- package/esm2015/lib/components/divider/divider.component.js +0 -53
- package/esm2015/lib/components/divider/divider.module.js +0 -15
- package/esm2015/lib/components/dropdown/dropdown.component.js +0 -150
- package/esm2015/lib/components/dropdown/dropdown.module.js +0 -21
- package/esm2015/lib/components/filter/filter.component.js +0 -1122
- package/esm2015/lib/components/filter/filter.module.js +0 -44
- package/esm2015/lib/components/grid/col/col.component.js +0 -49
- package/esm2015/lib/components/grid/grid.component.js +0 -63
- package/esm2015/lib/components/grid/grid.module.js +0 -15
- package/esm2015/lib/components/icon/icon.component.js +0 -42
- package/esm2015/lib/components/icon/icon.module.js +0 -17
- package/esm2015/lib/components/icon-list/icon-list.component.js +0 -46
- package/esm2015/lib/components/icon-list/icon-list.module.js +0 -15
- package/esm2015/lib/components/info/info.component.js +0 -94
- package/esm2015/lib/components/info/info.module.js +0 -23
- package/esm2015/lib/components/input/input.component.js +0 -148
- package/esm2015/lib/components/input/input.module.js +0 -16
- package/esm2015/lib/components/journey/journey.component.js +0 -122
- package/esm2015/lib/components/journey/journey.module.js +0 -19
- package/esm2015/lib/components/journey-availability/journey-availability.component.js +0 -125
- package/esm2015/lib/components/journey-availability/journey-availability.module.js +0 -26
- package/esm2015/lib/components/journey-availability-list/journey-availability-list.component.js +0 -175
- package/esm2015/lib/components/journey-selection/journey-selection.component.js +0 -110
- package/esm2015/lib/components/journey-selection/journey-selection.module.js +0 -24
- package/esm2015/lib/components/journey-stopover/journey-stopover.component.js +0 -121
- package/esm2015/lib/components/journey-stopover/journey-stopover.module.js +0 -19
- package/esm2015/lib/components/list/list-item/list-item.component.js +0 -56
- package/esm2015/lib/components/list/list.component.js +0 -75
- package/esm2015/lib/components/list/list.module.js +0 -15
- package/esm2015/lib/components/modal/modal.component.js +0 -131
- package/esm2015/lib/components/modal/modal.module.js +0 -25
- package/esm2015/lib/components/number-field/number-field.component.js +0 -118
- package/esm2015/lib/components/number-field/number-field.module.js +0 -24
- package/esm2015/lib/components/page-footer/page-footer.component.js +0 -49
- package/esm2015/lib/components/page-footer/page-footer.module.js +0 -16
- package/esm2015/lib/components/page-header/hamburger/hamburger.component.js +0 -24
- package/esm2015/lib/components/page-header/page-header.component.js +0 -126
- package/esm2015/lib/components/page-header/page-header.module.js +0 -18
- package/esm2015/lib/components/page-header/search/search.component.js +0 -47
- package/esm2015/lib/components/passenger-select/passenger-select.component.js +0 -207
- package/esm2015/lib/components/passenger-select/passenger-select.module.js +0 -19
- package/esm2015/lib/components/phone-number/phone-number.component.js +0 -115
- package/esm2015/lib/components/phone-number/phone-number.module.js +0 -27
- package/esm2015/lib/components/premium-toggle/premium-toggle.component.js +0 -66
- package/esm2015/lib/components/premium-toggle/premium-toggle.module.js +0 -19
- package/esm2015/lib/components/radio/radio.component.js +0 -79
- package/esm2015/lib/components/radio/radio.module.js +0 -15
- package/esm2015/lib/components/select/optgroup/optgroup.component.js +0 -31
- package/esm2015/lib/components/select/option/option.component.js +0 -29
- package/esm2015/lib/components/select/select.component.js +0 -325
- package/esm2015/lib/components/select/select.module.js +0 -21
- package/esm2015/lib/components/simple-list/simple-list.component.js +0 -42
- package/esm2015/lib/components/simple-list/simple-list.module.js +0 -14
- package/esm2015/lib/components/slide-toggle/slide-toggle.component.js +0 -105
- package/esm2015/lib/components/slide-toggle/slide-toggle.module.js +0 -20
- package/esm2015/lib/components/slider/slider.component.js +0 -475
- package/esm2015/lib/components/slider/slider.module.js +0 -19
- package/esm2015/lib/components/sort/sort.component.js +0 -87
- package/esm2015/lib/components/sort/sort.module.js +0 -23
- package/esm2015/lib/components/spinner/spinner.component.js +0 -84
- package/esm2015/lib/components/spinner/spinner.module.js +0 -14
- package/esm2015/lib/components/subsidy-discount/subsidy-discount.component.js +0 -101
- package/esm2015/lib/components/subsidy-discount/subsidy-discount.module.js +0 -23
- package/esm2015/lib/components/suggestions/suggestions.component.js +0 -40
- package/esm2015/lib/components/suggestions/suggestions.module.js +0 -19
- package/esm2015/lib/components/tab-group/tab/tab.component.js +0 -123
- package/esm2015/lib/components/tab-group/tab-group.component.js +0 -85
- package/esm2015/lib/components/tab-group/tab-group.module.js +0 -20
- package/esm2015/lib/components/table/column/column.component.js +0 -17
- package/esm2015/lib/components/table/column-group/column-group.component.js +0 -34
- package/esm2015/lib/components/table/services/table.service.js +0 -20
- package/esm2015/lib/components/table/table-body/table-body.component.js +0 -27
- package/esm2015/lib/components/table/table-foot/table-foot.component.js +0 -27
- package/esm2015/lib/components/table/table-head/table-head.component.js +0 -27
- package/esm2015/lib/components/table/table-row/table-data/table-data.component.js +0 -15
- package/esm2015/lib/components/table/table-row/table-header/table-header.component.js +0 -15
- package/esm2015/lib/components/table/table-row/table-row.component.js +0 -27
- package/esm2015/lib/components/table/table.component.js +0 -29
- package/esm2015/lib/components/table/table.module.js +0 -45
- package/esm2015/lib/components/textarea/textarea.component.js +0 -73
- package/esm2015/lib/components/textarea/textarea.module.js +0 -20
- package/esm2015/lib/components/toggle/toggle.component.js +0 -86
- package/esm2015/lib/components/toggle/toggle.module.js +0 -22
- package/esm2015/lib/components/trip-summary/trip-summary.component.js +0 -152
- package/esm2015/lib/components/trip-summary/trip-summary.module.js +0 -23
- package/esm2015/lib/components/weather-icon/weather-icon.component.js +0 -56
- package/esm2015/lib/components/weather-icon/weather-icon.module.js +0 -14
- package/esm2015/lib/core/base/nas-component.base.js +0 -48
- package/esm2015/lib/core/directives/nas-class/nas-class.directive.js +0 -75
- package/esm2015/lib/core/directives/nas-class/nas-class.module.js +0 -17
- package/esm2015/lib/core/services/abandoned-basket/abandoned-basket.service.js +0 -55
- package/esm2015/lib/core/services/animate-helper/animate-helper.service.js +0 -47
- package/esm2015/lib/core/services/bem-helper/bem-helper.service.js +0 -41
- package/esm2015/lib/core/services/date/date-helper.service.js +0 -196
- package/esm2015/lib/core/services/device/device-helper.service.js +0 -43
- package/esm2015/lib/core/services/geolocation/geolocation.service.js +0 -60
- package/esm2015/lib/core/services/language/language-helper.service.js +0 -162
- package/esm2015/lib/core/services/sort/sort.service.js +0 -19
- package/esm2015/lib/core/services/viewport/viewport.service.js +0 -29
- package/esm2015/lib/services/get-position.service.js +0 -21
- package/esm2015/norwegian-core-components.js +0 -12
- package/fesm2015/norwegian-core-components.js +0 -10835
- package/fesm2015/norwegian-core-components.js.map +0 -1
- package/norwegian-core-components.d.ts +0 -11
- package/norwegian-core-components.metadata.json +0 -1
- /package/{esm2015/lib/components/accordion/index.js → esm2020/lib/components/accordion/index.mjs} +0 -0
- /package/{esm2015/lib/components/airport-select/index.js → esm2020/lib/components/airport-select/index.mjs} +0 -0
- /package/{esm2015/lib/components/airport-select/models/airport.model.js → esm2020/lib/components/airport-select/models/airport.model.mjs} +0 -0
- /package/{esm2015/lib/components/airport-select/models/results-labels.model.js → esm2020/lib/components/airport-select/models/results-labels.model.mjs} +0 -0
- /package/{esm2015/lib/components/autocomplete/index.js → esm2020/lib/components/autocomplete/index.mjs} +0 -0
- /package/{esm2015/lib/components/autocomplete/models/autocomplete.model.js → esm2020/lib/components/autocomplete/models/autocomplete.model.mjs} +0 -0
- /package/{esm2015/lib/components/backdrop/index.js → esm2020/lib/components/backdrop/index.mjs} +0 -0
- /package/{esm2015/lib/components/box/index.js → esm2020/lib/components/box/index.mjs} +0 -0
- /package/{esm2015/lib/components/button/index.js → esm2020/lib/components/button/index.mjs} +0 -0
- /package/{esm2015/lib/components/checkbox/index.js → esm2020/lib/components/checkbox/index.mjs} +0 -0
- /package/{esm2015/lib/components/chip/index.js → esm2020/lib/components/chip/index.mjs} +0 -0
- /package/{esm2015/lib/components/container/index.js → esm2020/lib/components/container/index.mjs} +0 -0
- /package/{esm2015/lib/components/continue/index.js → esm2020/lib/components/continue/index.mjs} +0 -0
- /package/{esm2015/lib/components/cover/index.js → esm2020/lib/components/cover/index.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/calendar/calendar-date.model.js → esm2020/lib/components/datepicker/calendar/calendar-date.model.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/calendar/enums/week-start.enum.js → esm2020/lib/components/datepicker/calendar/enums/week-start.enum.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/calendar/models/day.model.js → esm2020/lib/components/datepicker/calendar/models/day.model.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/calendar/models/select-option.model.js → esm2020/lib/components/datepicker/calendar/models/select-option.model.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/calendar/models/week.model.js → esm2020/lib/components/datepicker/calendar/models/week.model.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/index.js → esm2020/lib/components/datepicker/index.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker-combo/index.js → esm2020/lib/components/datepicker-combo/index.mjs} +0 -0
- /package/{esm2015/lib/components/divider/index.js → esm2020/lib/components/divider/index.mjs} +0 -0
- /package/{esm2015/lib/components/dropdown/index.js → esm2020/lib/components/dropdown/index.mjs} +0 -0
- /package/{esm2015/lib/components/filter/enums/trip-type.enum.js → esm2020/lib/components/filter/enums/trip-type.enum.mjs} +0 -0
- /package/{esm2015/lib/components/filter/index.js → esm2020/lib/components/filter/index.mjs} +0 -0
- /package/{esm2015/lib/components/grid/index.js → esm2020/lib/components/grid/index.mjs} +0 -0
- /package/{esm2015/lib/components/icon/index.js → esm2020/lib/components/icon/index.mjs} +0 -0
- /package/{esm2015/lib/components/icon-list/icon-list.model.js → esm2020/lib/components/icon-list/icon-list.model.mjs} +0 -0
- /package/{esm2015/lib/components/icon-list/index.js → esm2020/lib/components/icon-list/index.mjs} +0 -0
- /package/{esm2015/lib/components/index.js → esm2020/lib/components/index.mjs} +0 -0
- /package/{esm2015/lib/components/info/index.js → esm2020/lib/components/info/index.mjs} +0 -0
- /package/{esm2015/lib/components/info/models/info.model.js → esm2020/lib/components/info/models/info.model.mjs} +0 -0
- /package/{esm2015/lib/components/input/index.js → esm2020/lib/components/input/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey/index.js → esm2020/lib/components/journey/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey/models/journey-flight.model.js → esm2020/lib/components/journey/models/journey-flight.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey/models/journey.model.js → esm2020/lib/components/journey/models/journey.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey-availability/index.js → esm2020/lib/components/journey-availability/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey-availability-list/enums/availability-sort-option.enum.js → esm2020/lib/components/journey-availability-list/enums/availability-sort-option.enum.mjs} +0 -0
- /package/{esm2015/lib/components/journey-availability-list/index.js → esm2020/lib/components/journey-availability-list/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey-selection/index.js → esm2020/lib/components/journey-selection/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey-selection/models/journey-selection-collapsed.model.js → esm2020/lib/components/journey-selection/models/journey-selection-collapsed.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey-selection/models/journey-selection-common.model.js → esm2020/lib/components/journey-selection/models/journey-selection-common.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey-selection/models/journey-selection-expanded.model.js → esm2020/lib/components/journey-selection/models/journey-selection-expanded.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey-selection/models/journey-selection.model.js → esm2020/lib/components/journey-selection/models/journey-selection.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey-stopover/index.js → esm2020/lib/components/journey-stopover/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey-stopover/models/stopover-time.model.js → esm2020/lib/components/journey-stopover/models/stopover-time.model.mjs} +0 -0
- /package/{esm2015/lib/components/list/index.js → esm2020/lib/components/list/index.mjs} +0 -0
- /package/{esm2015/lib/components/modal/index.js → esm2020/lib/components/modal/index.mjs} +0 -0
- /package/{esm2015/lib/components/number-field/index.js → esm2020/lib/components/number-field/index.mjs} +0 -0
- /package/{esm2015/lib/components/page-footer/index.js → esm2020/lib/components/page-footer/index.mjs} +0 -0
- /package/{esm2015/lib/components/page-header/index.js → esm2020/lib/components/page-header/index.mjs} +0 -0
- /package/{esm2015/lib/components/passenger-select/enums/passenger-type.enum.js → esm2020/lib/components/passenger-select/enums/passenger-type.enum.mjs} +0 -0
- /package/{esm2015/lib/components/passenger-select/index.js → esm2020/lib/components/passenger-select/index.mjs} +0 -0
- /package/{esm2015/lib/components/phone-number/index.js → esm2020/lib/components/phone-number/index.mjs} +0 -0
- /package/{esm2015/lib/components/premium-toggle/index.js → esm2020/lib/components/premium-toggle/index.mjs} +0 -0
- /package/{esm2015/lib/components/radio/index.js → esm2020/lib/components/radio/index.mjs} +0 -0
- /package/{esm2015/lib/components/select/index.js → esm2020/lib/components/select/index.mjs} +0 -0
- /package/{esm2015/lib/components/select/models/select-option.model.js → esm2020/lib/components/select/models/select-option.model.mjs} +0 -0
- /package/{esm2015/lib/components/simple-list/index.js → esm2020/lib/components/simple-list/index.mjs} +0 -0
- /package/{esm2015/lib/components/slide-toggle/index.js → esm2020/lib/components/slide-toggle/index.mjs} +0 -0
- /package/{esm2015/lib/components/slider/index.js → esm2020/lib/components/slider/index.mjs} +0 -0
- /package/{esm2015/lib/components/sort/index.js → esm2020/lib/components/sort/index.mjs} +0 -0
- /package/{esm2015/lib/components/spinner/index.js → esm2020/lib/components/spinner/index.mjs} +0 -0
- /package/{esm2015/lib/components/subsidy-discount/index.js → esm2020/lib/components/subsidy-discount/index.mjs} +0 -0
- /package/{esm2015/lib/components/subsidy-discount/models/subsidy-discount.model.js → esm2020/lib/components/subsidy-discount/models/subsidy-discount.model.mjs} +0 -0
- /package/{esm2015/lib/components/suggestions/index.js → esm2020/lib/components/suggestions/index.mjs} +0 -0
- /package/{esm2015/lib/components/tab-group/index.js → esm2020/lib/components/tab-group/index.mjs} +0 -0
- /package/{esm2015/lib/components/table/index.js → esm2020/lib/components/table/index.mjs} +0 -0
- /package/{esm2015/lib/components/textarea/index.js → esm2020/lib/components/textarea/index.mjs} +0 -0
- /package/{esm2015/lib/components/toggle/index.js → esm2020/lib/components/toggle/index.mjs} +0 -0
- /package/{esm2015/lib/components/toggle/models/options.model.js → esm2020/lib/components/toggle/models/options.model.mjs} +0 -0
- /package/{esm2015/lib/components/trip-summary/index.js → esm2020/lib/components/trip-summary/index.mjs} +0 -0
- /package/{esm2015/lib/components/weather-icon/index.js → esm2020/lib/components/weather-icon/index.mjs} +0 -0
- /package/{esm2015/lib/core/decorators/debounce.decorator.js → esm2020/lib/core/decorators/debounce.decorator.mjs} +0 -0
- /package/{esm2015/lib/core/directives/index.js → esm2020/lib/core/directives/index.mjs} +0 -0
- /package/{esm2015/lib/core/index.js → esm2020/lib/core/index.mjs} +0 -0
- /package/{esm2015/lib/core/models/abandoned-basket-item.model.js → esm2020/lib/core/models/abandoned-basket-item.model.mjs} +0 -0
- /package/{esm2015/lib/core/models/animate.model.js → esm2020/lib/core/models/animate.model.mjs} +0 -0
- /package/{esm2015/lib/core/models/class.model.js → esm2020/lib/core/models/class.model.mjs} +0 -0
- /package/{esm2015/lib/core/models/index.js → esm2020/lib/core/models/index.mjs} +0 -0
- /package/{esm2015/lib/core/models/link.model.js → esm2020/lib/core/models/link.model.mjs} +0 -0
- /package/{esm2015/lib/core/models/position.model.js → esm2020/lib/core/models/position.model.mjs} +0 -0
- /package/{esm2015/lib/core/models/utc-date.model.js → esm2020/lib/core/models/utc-date.model.mjs} +0 -0
- /package/{esm2015/lib/core/services/date/date-compare.enum.js → esm2020/lib/core/services/date/date-compare.enum.mjs} +0 -0
- /package/{esm2015/lib/core/services/geolocation/geolocation-state.enum.js → esm2020/lib/core/services/geolocation/geolocation-state.enum.mjs} +0 -0
- /package/{esm2015/lib/core/services/index.js → esm2020/lib/core/services/index.mjs} +0 -0
- /package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
- /package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
- /package/{esm2015/lib/shared/index.js → esm2020/lib/shared/index.mjs} +0 -0
- /package/{esm2015/lib/shared/models/flight-details.js → esm2020/lib/shared/models/flight-details.mjs} +0 -0
- /package/{esm2015/lib/shared/models/index.js → esm2020/lib/shared/models/index.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-availability-sort.model.js → esm2020/lib/shared/models/journey-availability-sort.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-availability.model.js → esm2020/lib/shared/models/journey-availability.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-details.model.js → esm2020/lib/shared/models/journey-details.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-duration.model.js → esm2020/lib/shared/models/journey-duration.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-stopover.model.js → esm2020/lib/shared/models/journey-stopover.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-transit-info.model.js → esm2020/lib/shared/models/journey-transit-info.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/operating-carrier.model.js → esm2020/lib/shared/models/operating-carrier.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/sort-option.model.js → esm2020/lib/shared/models/sort-option.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/sort.model.js → esm2020/lib/shared/models/sort.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/trip-item-details.model.js → esm2020/lib/shared/models/trip-item-details.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/trip-summary-details.model.js → esm2020/lib/shared/models/trip-summary-details.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/trip-summary.model.js → esm2020/lib/shared/models/trip-summary.model.mjs} +0 -0
- /package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
|
@@ -0,0 +1,1253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Norwegian Air Shuttle. All Rights Reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
6
|
+
import { BehaviorSubject } from 'rxjs';
|
|
7
|
+
import { TripType } from './enums/trip-type.enum';
|
|
8
|
+
import { NasComponentBase } from '../../core/base/nas-component.base';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../../core/services/device/device-helper.service";
|
|
11
|
+
import * as i2 from "../../core/services/sort/sort.service";
|
|
12
|
+
import * as i3 from "../../core/services/abandoned-basket/abandoned-basket.service";
|
|
13
|
+
import * as i4 from "../../core/services/date/date-helper.service";
|
|
14
|
+
import * as i5 from "@angular/common";
|
|
15
|
+
import * as i6 from "../../core/directives/nas-class/nas-class.directive";
|
|
16
|
+
import * as i7 from "../airport-select/airport-select.component";
|
|
17
|
+
import * as i8 from "../dropdown/dropdown.component";
|
|
18
|
+
import * as i9 from "../passenger-select/passenger-select.component";
|
|
19
|
+
import * as i10 from "../accordion/accordion.component";
|
|
20
|
+
import * as i11 from "../icon/icon.component";
|
|
21
|
+
import * as i12 from "../datepicker-combo/datepicker-combo.component";
|
|
22
|
+
import * as i13 from "../subsidy-discount/subsidy-discount.component";
|
|
23
|
+
import * as i14 from "../suggestions/suggestions.component";
|
|
24
|
+
/**
|
|
25
|
+
* @description
|
|
26
|
+
* Norwegian Filter Component | Functional
|
|
27
|
+
*/
|
|
28
|
+
export class FilterComponent extends NasComponentBase {
|
|
29
|
+
get outboundOpen() {
|
|
30
|
+
return this.outboundOpenValue;
|
|
31
|
+
}
|
|
32
|
+
set outboundOpen(value) {
|
|
33
|
+
if (this.outboundOpenValue === value) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (value) {
|
|
37
|
+
this.closeDropdowns();
|
|
38
|
+
if (this.airportSelect) {
|
|
39
|
+
this.airportSelect.originOpen = false;
|
|
40
|
+
this.airportSelect.destinationOpen = false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
this.outboundOpenValue = value;
|
|
44
|
+
this.outboundOpenChange.emit(value);
|
|
45
|
+
}
|
|
46
|
+
get inboundOpen() {
|
|
47
|
+
return this.inboundOpenValue;
|
|
48
|
+
}
|
|
49
|
+
set inboundOpen(value) {
|
|
50
|
+
if (this.inboundOpenValue === value) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (value) {
|
|
54
|
+
this.closeDropdowns();
|
|
55
|
+
if (this.airportSelect) {
|
|
56
|
+
this.airportSelect.originOpen = false;
|
|
57
|
+
this.airportSelect.destinationOpen = false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
clearTimeout(this.inboundOpenTimeout);
|
|
61
|
+
this.inboundOpenTimeout = setTimeout(() => {
|
|
62
|
+
this.inboundOpenValue = value;
|
|
63
|
+
});
|
|
64
|
+
this.inboundOpenChange.emit(value);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @description
|
|
68
|
+
* An array of different passenger types that will be displayed.
|
|
69
|
+
*/
|
|
70
|
+
get passengers() {
|
|
71
|
+
return this.passengersValue;
|
|
72
|
+
}
|
|
73
|
+
set passengers(value) {
|
|
74
|
+
if (!value) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.passengersValue = value;
|
|
78
|
+
this.passengersChange.emit(value);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* @description
|
|
82
|
+
* Indicates if the edit search of accordion should be expended on mobile screen sizes.
|
|
83
|
+
*/
|
|
84
|
+
get expandedAccordionMobile() {
|
|
85
|
+
return this.expandedAccordionMobileValue;
|
|
86
|
+
}
|
|
87
|
+
set expandedAccordionMobile(value) {
|
|
88
|
+
if (value === this.expandedAccordionMobileValue) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this.expandedAccordionMobileValue = value;
|
|
92
|
+
}
|
|
93
|
+
get closestAirports() {
|
|
94
|
+
return this.closestAirportsValue;
|
|
95
|
+
}
|
|
96
|
+
set closestAirports(airports) {
|
|
97
|
+
if (!airports || airports.length < 1) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
this.closestAirportsValue = airports;
|
|
101
|
+
if (this.exists(this.overrideOrigin)) {
|
|
102
|
+
this.originAirportCode = airports[0].code;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* @required
|
|
107
|
+
* @description
|
|
108
|
+
* All airports that will be populated into the dropdown lists.
|
|
109
|
+
* If displayLatestSearches is true, it will try to get the latest searches from the abandoned basket.
|
|
110
|
+
*/
|
|
111
|
+
get airports() {
|
|
112
|
+
return this.airportsValue;
|
|
113
|
+
}
|
|
114
|
+
set airports(airports) {
|
|
115
|
+
this.airportsValue = airports;
|
|
116
|
+
if (this.exists(this.displayLatestSearches)) {
|
|
117
|
+
const abandonedBasket = this.abandonedBasketService.getAll();
|
|
118
|
+
this.setLatestSearches(abandonedBasket, this.airports);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* @description
|
|
123
|
+
* Sets and gets the selected trip type.
|
|
124
|
+
*/
|
|
125
|
+
get tripType() {
|
|
126
|
+
return this.tripTypeValue;
|
|
127
|
+
}
|
|
128
|
+
set tripType(tripType) {
|
|
129
|
+
if (tripType === this.tripTypeValue) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
this.tripTypeValue = tripType;
|
|
133
|
+
this.tripTypeChange.emit(this.tripType);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* @description
|
|
137
|
+
* Sets and gets whether the selected transit type is direct only or not.
|
|
138
|
+
*/
|
|
139
|
+
get directOnly() {
|
|
140
|
+
return this.directOnlyValue;
|
|
141
|
+
}
|
|
142
|
+
set directOnly(directOnly) {
|
|
143
|
+
if (directOnly === this.directOnlyValue) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
this.directOnlyValue = directOnly;
|
|
147
|
+
this.directOnlyChange.emit(this.directOnly);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* @description
|
|
151
|
+
* Selected datefor outbound calendar.
|
|
152
|
+
*/
|
|
153
|
+
get outboundSelectedDate() {
|
|
154
|
+
return this.outboundSelectedDateValue;
|
|
155
|
+
}
|
|
156
|
+
set outboundSelectedDate(date) {
|
|
157
|
+
if (!date) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
setTimeout(() => {
|
|
161
|
+
this.outboundSelectedDateValue = date;
|
|
162
|
+
this.outboundSelectedDateChange.emit(date);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* @description
|
|
167
|
+
* Selected datefor inbound calendar.
|
|
168
|
+
*/
|
|
169
|
+
get inboundSelectedDate() {
|
|
170
|
+
return this.inboundSelectedDateValue;
|
|
171
|
+
}
|
|
172
|
+
set inboundSelectedDate(date) {
|
|
173
|
+
if (!date) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
setTimeout(() => {
|
|
177
|
+
this.inboundSelectedDateValue = date;
|
|
178
|
+
this.inboundSelectedDateChange.emit(date);
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
get inboundSelectedMonth() {
|
|
182
|
+
return this.inboundSelectedMonthValue;
|
|
183
|
+
}
|
|
184
|
+
set inboundSelectedMonth(month) {
|
|
185
|
+
if (this.dateService.isSameMonth(month, this.inboundSelectedMonthValue)) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
setTimeout(() => {
|
|
189
|
+
this.inboundMonthChange.emit(month);
|
|
190
|
+
this.inboundSelectedMonthValue = month;
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
constructor(deviceHelper, sortService, abandonedBasketService, dateService, elementRef, changeDetector) {
|
|
194
|
+
super('nas-filter');
|
|
195
|
+
this.deviceHelper = deviceHelper;
|
|
196
|
+
this.sortService = sortService;
|
|
197
|
+
this.abandonedBasketService = abandonedBasketService;
|
|
198
|
+
this.dateService = dateService;
|
|
199
|
+
this.elementRef = elementRef;
|
|
200
|
+
this.changeDetector = changeDetector;
|
|
201
|
+
this.displaySummary = true;
|
|
202
|
+
this.containerWidth = new BehaviorSubject(0);
|
|
203
|
+
this.maximize = false;
|
|
204
|
+
this.isNasGroupValid = false;
|
|
205
|
+
/**
|
|
206
|
+
* @description
|
|
207
|
+
* A separator for the filter summary that is dispayed if minimizeOnMobile is true.
|
|
208
|
+
*
|
|
209
|
+
* ### Example
|
|
210
|
+
* 1 traveller, round trip and direct/transit
|
|
211
|
+
*/
|
|
212
|
+
this.defaultSummarySeparator = '';
|
|
213
|
+
/**
|
|
214
|
+
* A separator for the filter summary is are dispayed if minimizeOnMobile is true.
|
|
215
|
+
*
|
|
216
|
+
* ### Example
|
|
217
|
+
* 1 traveller, round trip and direct/transit
|
|
218
|
+
*/
|
|
219
|
+
this.lastSummarySeparator = '';
|
|
220
|
+
/**
|
|
221
|
+
* @description
|
|
222
|
+
* A placeholder that will appear on the origin airport input field.
|
|
223
|
+
*/
|
|
224
|
+
this.placeholderOrigin = '';
|
|
225
|
+
/**
|
|
226
|
+
* @description
|
|
227
|
+
* A placeholder that will appear on the destination airport input field.
|
|
228
|
+
*/
|
|
229
|
+
this.placeholderDestination = '';
|
|
230
|
+
/**
|
|
231
|
+
* @description
|
|
232
|
+
* An event that is fired every time the origin dropdown selector opens or closes.
|
|
233
|
+
*/
|
|
234
|
+
this.originOpenChange = new EventEmitter();
|
|
235
|
+
/**
|
|
236
|
+
* @description
|
|
237
|
+
* An event that is fired every time the origin dropdown selector opens or closes.
|
|
238
|
+
*/
|
|
239
|
+
this.destinationOpenChange = new EventEmitter();
|
|
240
|
+
/**
|
|
241
|
+
* @description
|
|
242
|
+
* An event that is fired every time the passenger select dropdown opens or closes.
|
|
243
|
+
*/
|
|
244
|
+
this.passengerSelectOpenChange = new EventEmitter();
|
|
245
|
+
/**
|
|
246
|
+
* @description
|
|
247
|
+
* An event that is fired every time the selected origin airport changes.
|
|
248
|
+
*/
|
|
249
|
+
this.originChange = new EventEmitter();
|
|
250
|
+
/**
|
|
251
|
+
* @description
|
|
252
|
+
* An event that is fired every time the selected destination airport changes.
|
|
253
|
+
*/
|
|
254
|
+
this.destinationChange = new EventEmitter();
|
|
255
|
+
/**
|
|
256
|
+
* @description
|
|
257
|
+
* An event that is fired every time a passenger selection change is performed.
|
|
258
|
+
*/
|
|
259
|
+
this.passengersChange = new EventEmitter();
|
|
260
|
+
/**
|
|
261
|
+
* @description
|
|
262
|
+
* Sets and gets the selected trip type.
|
|
263
|
+
*/
|
|
264
|
+
this.tripTypeChange = new EventEmitter();
|
|
265
|
+
/**
|
|
266
|
+
* @description
|
|
267
|
+
* Sets and gets whether the selected transit type is direct only or not.
|
|
268
|
+
*/
|
|
269
|
+
this.directOnlyChange = new EventEmitter();
|
|
270
|
+
/**
|
|
271
|
+
* @description
|
|
272
|
+
* The display format of the date when user has selected the date and it is being shown in the input box for the date picker.
|
|
273
|
+
* Please look at the angular Date pipe for valid formats and variations.
|
|
274
|
+
*/
|
|
275
|
+
this.dateDisplayFormat = 'EEEE d, MMMM yyyy';
|
|
276
|
+
/**
|
|
277
|
+
* @description
|
|
278
|
+
* The time display format.
|
|
279
|
+
*/
|
|
280
|
+
this.timeDisplayFormat = 'HH:mm';
|
|
281
|
+
/**
|
|
282
|
+
* @description
|
|
283
|
+
* A locale code for the locale format rules to use. When not supplied, uses the value of LOCALE_ID, which is en-US by default.
|
|
284
|
+
* This requires that registerLocaleData is called with the respective locale.
|
|
285
|
+
*/
|
|
286
|
+
this.locale = 'en-GB';
|
|
287
|
+
/**
|
|
288
|
+
* @description
|
|
289
|
+
* Will display the destination input, set this to false to remove it. It's true by default.
|
|
290
|
+
*/
|
|
291
|
+
this.enableDestinationSelect = true;
|
|
292
|
+
/**
|
|
293
|
+
* @description
|
|
294
|
+
* Will display passenger select, set this to false to remove it. It's true by default.
|
|
295
|
+
*/
|
|
296
|
+
this.enablePassengersSelect = true;
|
|
297
|
+
/**
|
|
298
|
+
* @description
|
|
299
|
+
* Will display the trip switch, set this to false to remove it. It's true by default.
|
|
300
|
+
*/
|
|
301
|
+
this.enableTripSwitch = true;
|
|
302
|
+
/**
|
|
303
|
+
* @description
|
|
304
|
+
* Will display the transit switch, set this to false to remove it. It's true by default.
|
|
305
|
+
*/
|
|
306
|
+
this.enableTransitSwitch = true;
|
|
307
|
+
/**
|
|
308
|
+
* @description
|
|
309
|
+
* When selected datehas been changed on the outbound calendar.
|
|
310
|
+
*/
|
|
311
|
+
this.outboundSelectedDateChange = new EventEmitter();
|
|
312
|
+
/**
|
|
313
|
+
* @description
|
|
314
|
+
* When selected datehas been changed on the inbound calendar.
|
|
315
|
+
*/
|
|
316
|
+
this.inboundSelectedDateChange = new EventEmitter();
|
|
317
|
+
/**
|
|
318
|
+
* @description
|
|
319
|
+
* Outbound datepicker is open or closed.
|
|
320
|
+
*/
|
|
321
|
+
this.outboundOpenChange = new EventEmitter();
|
|
322
|
+
/**
|
|
323
|
+
* @description
|
|
324
|
+
* Inbound datepicker is open or closed.
|
|
325
|
+
*/
|
|
326
|
+
this.inboundOpenChange = new EventEmitter();
|
|
327
|
+
/**
|
|
328
|
+
* @description
|
|
329
|
+
* Outbound calendar changes month.
|
|
330
|
+
*/
|
|
331
|
+
this.outboundMonthChange = new EventEmitter();
|
|
332
|
+
/**
|
|
333
|
+
* @description
|
|
334
|
+
* Inbound calendar changes month.
|
|
335
|
+
*/
|
|
336
|
+
this.inboundMonthChange = new EventEmitter();
|
|
337
|
+
/**
|
|
338
|
+
* @description
|
|
339
|
+
* When a user has actively changed the date.
|
|
340
|
+
*/
|
|
341
|
+
this.focusOnNextChange = new EventEmitter();
|
|
342
|
+
/**
|
|
343
|
+
* @description
|
|
344
|
+
* The geolocation of the user. Will be emitted if 'enableSuggestions' is true.
|
|
345
|
+
*/
|
|
346
|
+
this.positionChange = new EventEmitter();
|
|
347
|
+
/**
|
|
348
|
+
* @description
|
|
349
|
+
* An even that is fired every time the info button on the subsidy discount is clicked.
|
|
350
|
+
*/
|
|
351
|
+
this.subsidyDiscountInfoClick = new EventEmitter();
|
|
352
|
+
this.outboundOpenValue = false;
|
|
353
|
+
this.inboundOpenValue = false;
|
|
354
|
+
this.passengersValue = new Array();
|
|
355
|
+
this.nativeElement = elementRef.nativeElement;
|
|
356
|
+
}
|
|
357
|
+
ngOnInit() {
|
|
358
|
+
if (!this.nasFormGroup) {
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
this.nasFormGroup.statusChanges.subscribe(x => {
|
|
362
|
+
setTimeout(() => {
|
|
363
|
+
this.isNasGroupValid = (/true/i).test(x);
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
if (this.nasFormControlNameDirectOnly) {
|
|
367
|
+
const directOnlyControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
|
|
368
|
+
if (directOnlyControl) {
|
|
369
|
+
this.directOnly = directOnlyControl.value;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
if (this.nasFormControlNameTripType) {
|
|
373
|
+
const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameTripType);
|
|
374
|
+
if (tripTypeControl) {
|
|
375
|
+
this.tripType = tripTypeControl.value;
|
|
376
|
+
this.inboundDisabled = tripTypeControl.value === TripType.oneWay;
|
|
377
|
+
if (this.nasFormControlNameInbound) {
|
|
378
|
+
const inboundControl = this.nasFormGroup.get(this.nasFormControlNameInbound);
|
|
379
|
+
if (inboundControl && this.inboundDisabled) {
|
|
380
|
+
inboundControl.disable();
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
tripTypeControl.valueChanges.subscribe((value) => {
|
|
384
|
+
this.inboundDisabled = value === TripType.oneWay;
|
|
385
|
+
this.tripType = value;
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
if (this.nasFormControlNameDirectOnly) {
|
|
390
|
+
const directOnlyControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
|
|
391
|
+
if (directOnlyControl) {
|
|
392
|
+
directOnlyControl.valueChanges.subscribe((value) => {
|
|
393
|
+
this.directOnly = value;
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
ngAfterViewChecked() {
|
|
399
|
+
this.containerWidth.next(this.container.nativeElement.offsetWidth);
|
|
400
|
+
window.onresize = () => {
|
|
401
|
+
this.containerWidth.next(this.container.nativeElement.offsetWidth);
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
onSubsidyDiscountInfoClick() {
|
|
405
|
+
this.subsidyDiscountInfoClick.emit();
|
|
406
|
+
}
|
|
407
|
+
onSubsidyDiscountSelectChange(model) {
|
|
408
|
+
if (!this.nasFormGroup || !this.nasFormControlNameSubsidyDiscount) {
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
const subsidyDiscountControl = this.nasFormGroup.get(this.nasFormControlNameSubsidyDiscount);
|
|
412
|
+
subsidyDiscountControl.patchValue(model);
|
|
413
|
+
}
|
|
414
|
+
getClosestAirports(position) {
|
|
415
|
+
this.positionChange.emit(position);
|
|
416
|
+
}
|
|
417
|
+
getFilterClass(element, modifiersInput) {
|
|
418
|
+
let modifiers = modifiersInput || new Array();
|
|
419
|
+
if (typeof modifiersInput === 'string' || modifiersInput instanceof String) {
|
|
420
|
+
modifiers = [modifiersInput];
|
|
421
|
+
}
|
|
422
|
+
const widths = [];
|
|
423
|
+
if (this.deviceHelper.isWidthTablet(this.containerWidth.getValue())) {
|
|
424
|
+
widths.push('md');
|
|
425
|
+
}
|
|
426
|
+
if (this.deviceHelper.isWidthDesktop(this.containerWidth.getValue())) {
|
|
427
|
+
widths.push('lg');
|
|
428
|
+
}
|
|
429
|
+
modifiers = [...modifiers, ...widths];
|
|
430
|
+
return this.getClass(element, modifiers);
|
|
431
|
+
}
|
|
432
|
+
getAirportSelectClass() {
|
|
433
|
+
return this.getClass('airport-select', [
|
|
434
|
+
this.deviceHelper.isWidthDesktop(this.containerWidth.getValue()) && 'lg',
|
|
435
|
+
this.deviceHelper.isWidthTablet(this.containerWidth.getValue()) && 'md',
|
|
436
|
+
this.exists(this.enableDatepickers) && 'no-border'
|
|
437
|
+
]);
|
|
438
|
+
}
|
|
439
|
+
getSuggestions() {
|
|
440
|
+
const suggestions = Array.from(new Set([
|
|
441
|
+
...this.latestSearchesOrigin ? this.latestSearchesOrigin.filter(x => x.code !== this.originAirportCode) : [],
|
|
442
|
+
...this.closestAirports ? this.closestAirports.filter(x => x.code !== this.originAirportCode) : []
|
|
443
|
+
]));
|
|
444
|
+
return suggestions.slice(0, 3);
|
|
445
|
+
}
|
|
446
|
+
getDatePickersClass() {
|
|
447
|
+
return this.getFilterClass('date-combo', [
|
|
448
|
+
this.exists(this.minimize) && 'minimized',
|
|
449
|
+
this.containerWidth.getValue() > 500 && 'side-by-side'
|
|
450
|
+
]);
|
|
451
|
+
}
|
|
452
|
+
getTravelDetailsClass(element, modifiersInput) {
|
|
453
|
+
let modifiers = modifiersInput || new Array();
|
|
454
|
+
if (typeof modifiersInput === 'string' || modifiersInput instanceof String) {
|
|
455
|
+
modifiers = [modifiersInput];
|
|
456
|
+
}
|
|
457
|
+
const widths = [
|
|
458
|
+
this.deviceHelper.isWidthTablet(this.containerWidth.getValue()) && 'md',
|
|
459
|
+
this.deviceHelper.isWidthDesktop(this.containerWidth.getValue()) && 'lg'
|
|
460
|
+
];
|
|
461
|
+
modifiers = [...modifiers, ...widths];
|
|
462
|
+
const travelDetailsBase = new NasComponentBase('travel-details');
|
|
463
|
+
return travelDetailsBase.getClass(element, modifiers);
|
|
464
|
+
}
|
|
465
|
+
onInboundMonthChange(month) {
|
|
466
|
+
this.inboundMonthChange.emit(month);
|
|
467
|
+
}
|
|
468
|
+
onOutboundMonthChange(month) {
|
|
469
|
+
this.outboundMonthChange.emit(month);
|
|
470
|
+
}
|
|
471
|
+
onPassengersSelectFocusOnPrevious() {
|
|
472
|
+
if (this.isMobileDisplay()) {
|
|
473
|
+
this.onTransitSwitchOpen(true);
|
|
474
|
+
this.focusAsync(this.transitSwitch.toggleElement);
|
|
475
|
+
}
|
|
476
|
+
else if (this.isTabletDisplay()) {
|
|
477
|
+
this.selectPreviousControl();
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
passengerKeyDown(event) {
|
|
481
|
+
switch (event.key) {
|
|
482
|
+
case 'Tab':
|
|
483
|
+
if (event.shiftKey) {
|
|
484
|
+
if (this.isMobileDisplay() || this.isTabletDisplay()) {
|
|
485
|
+
break;
|
|
486
|
+
}
|
|
487
|
+
this.focusOnAirportSelectBackwards();
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
if (this.isMobileDisplay()) {
|
|
491
|
+
if (this.subsidyDiscounts && this.subsidyDiscounts.length > 0) {
|
|
492
|
+
this.subsidyDiscount.infoButton.button.nativeElement.focus();
|
|
493
|
+
}
|
|
494
|
+
else {
|
|
495
|
+
this.focusOnNextChange.emit();
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
break;
|
|
499
|
+
case 'Enter':
|
|
500
|
+
if (event.shiftKey || this.isMobileDisplay()) {
|
|
501
|
+
break;
|
|
502
|
+
}
|
|
503
|
+
if (document.activeElement === this.passengerSelectDropdown.toggleElement.nativeElement) {
|
|
504
|
+
if (this.passengerSelectDropdown.open) {
|
|
505
|
+
this.onTripSwitchOpen(true);
|
|
506
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
this.onPassengerSelectOpen(true);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
break;
|
|
513
|
+
case 'Escape':
|
|
514
|
+
this.onPassengerSelectOpen(false);
|
|
515
|
+
event.preventDefault();
|
|
516
|
+
this.setFocusOnNativeElement(this.passengerSelectDropdown.toggleElement);
|
|
517
|
+
break;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
onTripSwitchKeyDown(event) {
|
|
521
|
+
switch (event.key) {
|
|
522
|
+
case 'ArrowRight':
|
|
523
|
+
if (document.activeElement === this.tripTypeRoundTrip.nativeElement) {
|
|
524
|
+
this.tripTypeOneway.nativeElement.focus();
|
|
525
|
+
}
|
|
526
|
+
break;
|
|
527
|
+
case 'ArrowLeft':
|
|
528
|
+
if (document.activeElement === this.tripTypeOneway.nativeElement) {
|
|
529
|
+
this.tripTypeRoundTrip.nativeElement.focus();
|
|
530
|
+
}
|
|
531
|
+
break;
|
|
532
|
+
case 'Tab':
|
|
533
|
+
case 'Enter':
|
|
534
|
+
if (event.shiftKey) {
|
|
535
|
+
event.preventDefault();
|
|
536
|
+
if (this.isMobileDisplay() || !this.passengerSelectDropdown) {
|
|
537
|
+
this.selectPreviousControl();
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
this.onPassengerSelectOpen(true);
|
|
541
|
+
this.focusAsync(this.passengerSelectDropdown.toggleElement);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
if (event.key === 'Tab') {
|
|
546
|
+
this.onTransitSwitchOpen(true);
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
if (this.tripSwitch.open) {
|
|
550
|
+
this.onTransitSwitchOpen(true);
|
|
551
|
+
this.focusAsync(this.transitSwitch.toggleElement);
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
this.onTripSwitchOpen(true);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
break;
|
|
559
|
+
case 'Escape':
|
|
560
|
+
this.onTripSwitchOpen(false);
|
|
561
|
+
this.setFocusOnNativeElement(this.tripSwitch.toggleElement);
|
|
562
|
+
break;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
transitKeyDown(event) {
|
|
566
|
+
switch (event.key) {
|
|
567
|
+
case 'ArrowRight':
|
|
568
|
+
if (document.activeElement === this.transitTypeTransit.nativeElement) {
|
|
569
|
+
this.transitTypeDirectOnly.nativeElement.focus();
|
|
570
|
+
}
|
|
571
|
+
break;
|
|
572
|
+
case 'ArrowLeft':
|
|
573
|
+
if (document.activeElement === this.transitTypeDirectOnly.nativeElement) {
|
|
574
|
+
this.transitTypeTransit.nativeElement.focus();
|
|
575
|
+
}
|
|
576
|
+
break;
|
|
577
|
+
case 'Tab':
|
|
578
|
+
case 'Enter':
|
|
579
|
+
if (event.shiftKey) {
|
|
580
|
+
event.preventDefault();
|
|
581
|
+
this.onTripSwitchOpen(true);
|
|
582
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
583
|
+
}
|
|
584
|
+
else {
|
|
585
|
+
if (this.isMobileDisplay()) {
|
|
586
|
+
this.onPassengerSelectOpen(true);
|
|
587
|
+
this.focusAsync(this.passengerSelectDropdown.toggleElement);
|
|
588
|
+
}
|
|
589
|
+
else {
|
|
590
|
+
this.onTransitSwitchOpen(!this.transitSwitch.open);
|
|
591
|
+
if (this.subsidyDiscounts && this.subsidyDiscounts.length > 0) {
|
|
592
|
+
this.subsidyDiscount.infoButton.button.nativeElement.focus();
|
|
593
|
+
}
|
|
594
|
+
else {
|
|
595
|
+
this.focusOnNextChange.emit();
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
if (event.key === 'Tab') {
|
|
599
|
+
event.preventDefault();
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
break;
|
|
603
|
+
case 'Escape':
|
|
604
|
+
this.onTransitSwitchOpen(false);
|
|
605
|
+
event.preventDefault();
|
|
606
|
+
this.setFocusOnNativeElement(this.transitSwitch.toggleElement);
|
|
607
|
+
break;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
onSubsidyDiscountInfoButtonKeydown(event) {
|
|
611
|
+
switch (event.key) {
|
|
612
|
+
case 'Tab':
|
|
613
|
+
if (event.shiftKey) {
|
|
614
|
+
if (this.isMobileDisplay()) {
|
|
615
|
+
this.focusAsync(this.passengerSelectDropdown.toggleElement);
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
this.focusAsync(this.transitSwitch.toggleElement);
|
|
619
|
+
}
|
|
620
|
+
event.preventDefault();
|
|
621
|
+
}
|
|
622
|
+
break;
|
|
623
|
+
default:
|
|
624
|
+
break;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
onPassengersSelectFocusOnNext() {
|
|
628
|
+
if (this.isMobileDisplay()) {
|
|
629
|
+
this.passengerSelectDropdown.toggle();
|
|
630
|
+
}
|
|
631
|
+
else {
|
|
632
|
+
this.onTripSwitchOpen(true);
|
|
633
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
focusAsync(refElement) {
|
|
637
|
+
clearTimeout(this.focusAsyncTimout);
|
|
638
|
+
this.focusAsyncTimout = setTimeout(() => this.setFocusOnNativeElement(refElement));
|
|
639
|
+
}
|
|
640
|
+
onDatepickerFocusOnPrevious(event) {
|
|
641
|
+
event.preventDefault();
|
|
642
|
+
this.focusOnAirportSelectBackwards();
|
|
643
|
+
}
|
|
644
|
+
selectPreviousControl() {
|
|
645
|
+
if (this.datepickerCombo) {
|
|
646
|
+
if (this.datepickerCombo.outboundOnly) {
|
|
647
|
+
this.outboundOpen = true;
|
|
648
|
+
}
|
|
649
|
+
else {
|
|
650
|
+
this.inboundOpen = true;
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
else if (this.airportSelect) {
|
|
654
|
+
if (this.exists(this.airportSelect.combo)) {
|
|
655
|
+
this.airportSelect.onDestinationOpen(true);
|
|
656
|
+
if (this.airportSelect.airportSelectDropdownDestination) {
|
|
657
|
+
this.focusAsync(this.airportSelect.airportSelectDropdownDestination.input);
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
else {
|
|
661
|
+
this.airportSelect.onOriginOpen(true);
|
|
662
|
+
if (this.airportSelect.airportSelectDropdownOrigin) {
|
|
663
|
+
this.focusAsync(this.airportSelect.airportSelectDropdownOrigin.input);
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
onFocusOnNextChange(event) {
|
|
669
|
+
if (this.isMobileDisplay() && this.tripSwitch) {
|
|
670
|
+
this.onTripSwitchOpen(true);
|
|
671
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
672
|
+
}
|
|
673
|
+
else if (this.isTabletDisplay()) {
|
|
674
|
+
if (this.passengerSelectDropdown) {
|
|
675
|
+
event.preventDefault();
|
|
676
|
+
setTimeout(() => {
|
|
677
|
+
this.onPassengerSelectOpen(true);
|
|
678
|
+
this.setFocusOnNativeElement(this.passengerSelectDropdown.toggleElement);
|
|
679
|
+
});
|
|
680
|
+
}
|
|
681
|
+
else if (this.tripSwitch) {
|
|
682
|
+
this.onTripSwitchOpen(true);
|
|
683
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
isMobileDisplay() {
|
|
688
|
+
return this.deviceHelper.isWidthMobile(this.containerWidth.getValue());
|
|
689
|
+
}
|
|
690
|
+
isTabletDisplay() {
|
|
691
|
+
return this.deviceHelper.isWidthTablet(this.containerWidth.getValue());
|
|
692
|
+
}
|
|
693
|
+
onOriginOpen(open) {
|
|
694
|
+
if (this.passengerSelectDropdown) {
|
|
695
|
+
this.passengerSelectDropdown.open = false;
|
|
696
|
+
}
|
|
697
|
+
if (this.tripSwitch) {
|
|
698
|
+
this.tripSwitch.open = false;
|
|
699
|
+
}
|
|
700
|
+
if (this.transitSwitch) {
|
|
701
|
+
this.transitSwitch.open = false;
|
|
702
|
+
}
|
|
703
|
+
if (this.datepickerCombo) {
|
|
704
|
+
this.datepickerCombo.inboundOpen = false;
|
|
705
|
+
this.datepickerCombo.outboundOpen = false;
|
|
706
|
+
}
|
|
707
|
+
if (this.airportSelect && !this.airportSelect.originOpen) {
|
|
708
|
+
this.updateMaximize();
|
|
709
|
+
}
|
|
710
|
+
this.originOpenChange.emit(open);
|
|
711
|
+
this.changeDetector.detectChanges();
|
|
712
|
+
}
|
|
713
|
+
validateAirportValues() {
|
|
714
|
+
if (!this.airportSelect) {
|
|
715
|
+
return false;
|
|
716
|
+
}
|
|
717
|
+
const originSnapshot = this.airportSelect.origin;
|
|
718
|
+
const destinationSnapshot = this.airportSelect.destination;
|
|
719
|
+
if ((originSnapshot && destinationSnapshot && originSnapshot.code && originSnapshot.code.length
|
|
720
|
+
&& destinationSnapshot.code && destinationSnapshot.code.length)) {
|
|
721
|
+
return true;
|
|
722
|
+
}
|
|
723
|
+
return false;
|
|
724
|
+
}
|
|
725
|
+
updateMaximize() {
|
|
726
|
+
setTimeout(() => {
|
|
727
|
+
this.maximize = this.validateAirportValues();
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
onDestinationOpen(open) {
|
|
731
|
+
if (this.passengerSelectDropdown) {
|
|
732
|
+
this.passengerSelectDropdown.open = false;
|
|
733
|
+
}
|
|
734
|
+
if (this.tripSwitch) {
|
|
735
|
+
this.tripSwitch.open = false;
|
|
736
|
+
}
|
|
737
|
+
if (this.transitSwitch) {
|
|
738
|
+
this.transitSwitch.open = false;
|
|
739
|
+
}
|
|
740
|
+
if (this.datepickerCombo) {
|
|
741
|
+
this.datepickerCombo.inboundOpen = false;
|
|
742
|
+
this.datepickerCombo.outboundOpen = false;
|
|
743
|
+
}
|
|
744
|
+
if (this.airportSelect && !this.airportSelect.destinationOpen) {
|
|
745
|
+
this.updateMaximize();
|
|
746
|
+
}
|
|
747
|
+
this.destinationOpenChange.emit(open);
|
|
748
|
+
}
|
|
749
|
+
onPassengerSelectOpen(open) {
|
|
750
|
+
if (this.airportSelect) {
|
|
751
|
+
this.airportSelect.originOpen = false;
|
|
752
|
+
this.airportSelect.destinationOpen = false;
|
|
753
|
+
}
|
|
754
|
+
if (this.tripSwitch) {
|
|
755
|
+
this.tripSwitch.open = false;
|
|
756
|
+
}
|
|
757
|
+
if (this.transitSwitch) {
|
|
758
|
+
this.transitSwitch.open = false;
|
|
759
|
+
}
|
|
760
|
+
if (this.datepickerCombo) {
|
|
761
|
+
if (this.datepickerCombo.inboundOpen) {
|
|
762
|
+
this.datepickerCombo.inboundOpen = false;
|
|
763
|
+
}
|
|
764
|
+
if (this.datepickerCombo.outboundOpen) {
|
|
765
|
+
this.datepickerCombo.outboundOpen = false;
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
this.passengerSelectDropdown.open = open;
|
|
769
|
+
this.passengerSelectOpenChange.emit(open);
|
|
770
|
+
if (open) {
|
|
771
|
+
setTimeout(() => {
|
|
772
|
+
if (this.passengerSelect.numberFields.first) {
|
|
773
|
+
this.passengerSelect.numberFields.first.input.nativeElement.focus();
|
|
774
|
+
}
|
|
775
|
+
}, 300);
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
onTripSwitchOpen(open) {
|
|
779
|
+
clearTimeout(this.tripSwitchFocusTimeout);
|
|
780
|
+
if (this.passengerSelectDropdown) {
|
|
781
|
+
setTimeout(() => {
|
|
782
|
+
this.passengerSelectDropdown.open = false;
|
|
783
|
+
});
|
|
784
|
+
}
|
|
785
|
+
if (this.transitSwitch) {
|
|
786
|
+
this.transitSwitch.open = false;
|
|
787
|
+
}
|
|
788
|
+
if (this.airportSelect) {
|
|
789
|
+
this.airportSelect.originOpen = false;
|
|
790
|
+
this.airportSelect.destinationOpen = false;
|
|
791
|
+
}
|
|
792
|
+
if (this.datepickerCombo) {
|
|
793
|
+
this.datepickerCombo.inboundOpen = false;
|
|
794
|
+
this.datepickerCombo.outboundOpen = false;
|
|
795
|
+
}
|
|
796
|
+
this.tripSwitch.open = open;
|
|
797
|
+
if (open) {
|
|
798
|
+
this.tripSwitchFocusTimeout = setTimeout(() => {
|
|
799
|
+
this.tripTypeRoundTrip.nativeElement.focus();
|
|
800
|
+
}, 200);
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
onTransitSwitchOpen(open) {
|
|
804
|
+
clearTimeout(this.transitSwitchFocusTimeout);
|
|
805
|
+
if (this.passengerSelectDropdown) {
|
|
806
|
+
this.passengerSelectDropdown.open = false;
|
|
807
|
+
}
|
|
808
|
+
if (this.tripSwitch) {
|
|
809
|
+
this.tripSwitch.open = false;
|
|
810
|
+
}
|
|
811
|
+
if (this.airportSelect) {
|
|
812
|
+
this.airportSelect.originOpen = false;
|
|
813
|
+
this.airportSelect.destinationOpen = false;
|
|
814
|
+
}
|
|
815
|
+
if (this.datepickerCombo) {
|
|
816
|
+
this.datepickerCombo.inboundOpen = false;
|
|
817
|
+
this.datepickerCombo.outboundOpen = false;
|
|
818
|
+
}
|
|
819
|
+
if (this.transitSwitch) {
|
|
820
|
+
this.transitSwitch.open = open;
|
|
821
|
+
}
|
|
822
|
+
if (open) {
|
|
823
|
+
this.transitSwitchFocusTimeout = setTimeout(() => {
|
|
824
|
+
this.transitTypeTransit.nativeElement.focus();
|
|
825
|
+
}, 200);
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
onOriginChange(airport) {
|
|
829
|
+
this.originChange.emit(airport);
|
|
830
|
+
}
|
|
831
|
+
setSelectedOriginAirport(airport) {
|
|
832
|
+
if (!airport) {
|
|
833
|
+
return;
|
|
834
|
+
}
|
|
835
|
+
this.onOriginChange(airport);
|
|
836
|
+
if (this.originAirportCode === airport.code) {
|
|
837
|
+
return;
|
|
838
|
+
}
|
|
839
|
+
this.originAirportCode = airport.code;
|
|
840
|
+
this.changeDetector.detectChanges();
|
|
841
|
+
}
|
|
842
|
+
onDestinationChange(airport) {
|
|
843
|
+
this.destinationChange.emit(airport);
|
|
844
|
+
}
|
|
845
|
+
setFocusOnPassengerSelect(event) {
|
|
846
|
+
this.minimize = false;
|
|
847
|
+
if (this.isMobileDisplay()) {
|
|
848
|
+
if (this.datepickerCombo) {
|
|
849
|
+
event.preventDefault();
|
|
850
|
+
this.outboundOpen = true;
|
|
851
|
+
this.focusAsync(this.datepickerCombo.datepickerOutbound.input);
|
|
852
|
+
}
|
|
853
|
+
else if (this.tripSwitch) {
|
|
854
|
+
event.preventDefault();
|
|
855
|
+
this.onTripSwitchOpen(true);
|
|
856
|
+
this.focusAsync(this.tripSwitch.toggleElement);
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
else if (this.isTabletDisplay() && this.datepickerCombo) {
|
|
860
|
+
setTimeout(() => {
|
|
861
|
+
this.outboundOpen = true;
|
|
862
|
+
});
|
|
863
|
+
}
|
|
864
|
+
else {
|
|
865
|
+
if (this.passengerSelectDropdown) {
|
|
866
|
+
this.onPassengerSelectOpen(true);
|
|
867
|
+
const currentElementRef = this.passengerSelectDropdown.toggleElement;
|
|
868
|
+
setTimeout(() => this.setFocusOnNativeElement(currentElementRef));
|
|
869
|
+
}
|
|
870
|
+
else if (this.tripSwitch) {
|
|
871
|
+
this.onTripSwitchOpen(true);
|
|
872
|
+
this.tripSwitch.toggleElement.nativeElement.focus();
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
setFocusOnNativeElement(element) {
|
|
877
|
+
element.nativeElement.focus();
|
|
878
|
+
}
|
|
879
|
+
onTripTypeChange(tripType) {
|
|
880
|
+
setTimeout(() => {
|
|
881
|
+
this.tripSwitch.open = false;
|
|
882
|
+
});
|
|
883
|
+
this.tripType = tripType;
|
|
884
|
+
if (this.nasFormGroup && this.nasFormControlNameTripType) {
|
|
885
|
+
const tripSwitchControl = this.nasFormGroup.get(this.nasFormControlNameTripType);
|
|
886
|
+
tripSwitchControl.patchValue(tripType);
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
onTransitChange(directOnly) {
|
|
890
|
+
setTimeout(() => {
|
|
891
|
+
this.transitSwitch.open = false;
|
|
892
|
+
});
|
|
893
|
+
this.directOnly = directOnly;
|
|
894
|
+
if (this.nasFormGroup && this.nasFormControlNameDirectOnly) {
|
|
895
|
+
const tripTypeControl = this.nasFormGroup.get(this.nasFormControlNameDirectOnly);
|
|
896
|
+
tripTypeControl.patchValue(directOnly);
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
getTravelDetailsTripSwitchIconClass(modifiers) {
|
|
900
|
+
const iconMediumBase = new NasComponentBase('icon-medium');
|
|
901
|
+
return [
|
|
902
|
+
iconMediumBase.getClass('', modifiers),
|
|
903
|
+
this.getTravelDetailsClass('icon')
|
|
904
|
+
];
|
|
905
|
+
}
|
|
906
|
+
getTripSwitchLabel() {
|
|
907
|
+
return this.tripType === TripType.twoWayReturn ? this.tripSwitchRoundTripLabel : this.tripSwitchOneWayLabel;
|
|
908
|
+
}
|
|
909
|
+
getTransitLabel() {
|
|
910
|
+
return this.directOnly ? this.directOnlyLabel : this.directTransitLabel;
|
|
911
|
+
}
|
|
912
|
+
onAccordionToggleChange(expanded) {
|
|
913
|
+
this.displaySummary = !expanded;
|
|
914
|
+
}
|
|
915
|
+
getSummary() {
|
|
916
|
+
return `${this.passengerSelectLabel}${this.defaultSummarySeparator}` +
|
|
917
|
+
`${this.getTripSwitchLabel().toLowerCase()}${this.lastSummarySeparator}${this.getTransitLabel().toLowerCase()}`;
|
|
918
|
+
}
|
|
919
|
+
shouldMaximize() {
|
|
920
|
+
if (!this.exists(this.minimize)) {
|
|
921
|
+
return true;
|
|
922
|
+
}
|
|
923
|
+
else if (this.airportSelect
|
|
924
|
+
&& this.enableDestinationSelect
|
|
925
|
+
&& this.airportSelect.origin
|
|
926
|
+
&& this.airportSelect.origin.code
|
|
927
|
+
&& this.airportSelect.destination
|
|
928
|
+
&& this.airportSelect.destination.code) {
|
|
929
|
+
return true;
|
|
930
|
+
}
|
|
931
|
+
else if (this.airportSelect
|
|
932
|
+
&& !this.enableDestinationSelect
|
|
933
|
+
&& this.airportSelect.origin
|
|
934
|
+
&& this.airportSelect.origin.code) {
|
|
935
|
+
return true;
|
|
936
|
+
}
|
|
937
|
+
else if (this.airportSelect && (this.airportSelect.originOpen || this.airportSelect.destinationOpen)) {
|
|
938
|
+
return this.maximize;
|
|
939
|
+
}
|
|
940
|
+
else if (this.exists(this.minimize)) {
|
|
941
|
+
if (this.maximize) {
|
|
942
|
+
if (this.nasFormGroup) {
|
|
943
|
+
return this.isNasGroupValid;
|
|
944
|
+
}
|
|
945
|
+
return true;
|
|
946
|
+
}
|
|
947
|
+
else {
|
|
948
|
+
return false;
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
focusOnAirportSelectBackwards() {
|
|
953
|
+
if (this.exists(this.airportSelect.combo)) {
|
|
954
|
+
this.airportSelect.onDestinationOpen(true);
|
|
955
|
+
setTimeout(() => {
|
|
956
|
+
this.airportSelect.airportSelectDropdownDestination.input.nativeElement.focus();
|
|
957
|
+
}, 100);
|
|
958
|
+
}
|
|
959
|
+
else {
|
|
960
|
+
this.airportSelect.onOriginOpen(true);
|
|
961
|
+
this.focusAsync(this.airportSelect.airportSelectDropdownOrigin.input);
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
setLatestSearches(abandonedBasket, airports) {
|
|
965
|
+
if (!abandonedBasket || !airports) {
|
|
966
|
+
return;
|
|
967
|
+
}
|
|
968
|
+
const unique = new Array();
|
|
969
|
+
for (const item of abandonedBasket) {
|
|
970
|
+
if (!unique.some(x => x.destinationCode === item.destinationCode)) {
|
|
971
|
+
unique.push(item);
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
const originCodes = unique.map(x => x.originCode);
|
|
975
|
+
const destinationCodes = unique.map(x => x.destinationCode);
|
|
976
|
+
const latestSearchesOrigin = airports.filter(airport => unique.some(x => x.originCode.toLowerCase() === airport.code.toLowerCase()));
|
|
977
|
+
const latestSearchesDestination = airports.filter(airport => unique.some(x => x.destinationCode.toLowerCase() === airport.code.toLowerCase()));
|
|
978
|
+
const code = 'code';
|
|
979
|
+
this.latestSearchesOrigin = this.sortService.sortByObject(latestSearchesOrigin, originCodes, code).slice(0, 3);
|
|
980
|
+
if (this.latestSearchesOrigin && this.latestSearchesOrigin.length > 0 && this.exists(this.overrideOrigin)) {
|
|
981
|
+
this.originAirportCode = this.latestSearchesOrigin[0].code;
|
|
982
|
+
}
|
|
983
|
+
this.latestSearchesDestination = this.sortService.sortByObject(latestSearchesDestination, destinationCodes, code).slice(0, 3);
|
|
984
|
+
}
|
|
985
|
+
closeDropdowns() {
|
|
986
|
+
if (this.passengerSelectDropdown) {
|
|
987
|
+
this.passengerSelectDropdown.open = false;
|
|
988
|
+
}
|
|
989
|
+
if (this.tripSwitch) {
|
|
990
|
+
this.tripSwitch.open = false;
|
|
991
|
+
}
|
|
992
|
+
if (this.transitSwitch) {
|
|
993
|
+
this.transitSwitch.open = false;
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
FilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FilterComponent, deps: [{ token: i1.DeviceHelper }, { token: i2.SortService }, { token: i3.AbandonedBasketService }, { token: i4.DateHelper }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
998
|
+
FilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FilterComponent, selector: "nas-filter", inputs: { airportRelations: "airportRelations", ariaLabelClear: "ariaLabelClear", ariaLabelSubtract: "ariaLabelSubtract", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelAdd: "ariaLabelAdd", allowedOriginAirports: "allowedOriginAirports", allowedDestinationAirports: "allowedDestinationAirports", displayLatestSearches: "displayLatestSearches", useSwitch: "useSwitch", displayClosestAirports: "displayClosestAirports", originAirportCode: "originAirportCode", destinationAirportCode: "destinationAirportCode", passengerSelectLabel: "passengerSelectLabel", maxPaxCount: "maxPaxCount", passengers: "passengers", minAdultCount: "minAdultCount", tripSwitchRoundTripLabel: "tripSwitchRoundTripLabel", tripSwitchOneWayLabel: "tripSwitchOneWayLabel", directOnlyLabel: "directOnlyLabel", directTransitLabel: "directTransitLabel", minimizeOnMobile: "minimizeOnMobile", expandedAccordionMobile: "expandedAccordionMobile", defaultSummarySeparator: "defaultSummarySeparator", lastSummarySeparator: "lastSummarySeparator", passengerSelectTitle: "passengerSelectTitle", passengerSelectAdultsLabel: "passengerSelectAdultsLabel", passengerSelectChildrenLabel: "passengerSelectChildrenLabel", passengerSelectInfantsLabel: "passengerSelectInfantsLabel", groupBookingLabel: "groupBookingLabel", allAirportsLabel: "allAirportsLabel", latestSearchesLabel: "latestSearchesLabel", closestAirportsLabel: "closestAirportsLabel", selectOriginFirstLabel: "selectOriginFirstLabel", labelOrigin: "labelOrigin", placeholderOrigin: "placeholderOrigin", labelDestination: "labelDestination", geolocationLabel: "geolocationLabel", geolocationBlockedLabel: "geolocationBlockedLabel", placeholderDestination: "placeholderDestination", keepSelection: "keepSelection", editSearchTitle: "editSearchTitle", nasFormGroup: "nasFormGroup", nasFormControlNameOrigin: "nasFormControlNameOrigin", nasFormControlNameDestination: "nasFormControlNameDestination", nasFormControlNameTripType: "nasFormControlNameTripType", nasFormControlNameDirectOnly: "nasFormControlNameDirectOnly", nasFormControlNameOutbound: "nasFormControlNameOutbound", nasFormControlNameInbound: "nasFormControlNameInbound", nasFormControlGroupBooking: "nasFormControlGroupBooking", nasFormControlNameSubsidyDiscount: "nasFormControlNameSubsidyDiscount", overrideOrigin: "overrideOrigin", enableSuggestions: "enableSuggestions", closestAirports: "closestAirports", minimize: "minimize", airports: "airports", tripType: "tripType", directOnly: "directOnly", groupBookingLimit: "groupBookingLimit", subsidyDiscounts: "subsidyDiscounts", selectedSubsidyDiscount: "selectedSubsidyDiscount", subsidyDiscountLabel: "subsidyDiscountLabel", ariaLabelPreviousMonth: "ariaLabelPreviousMonth", ariaLabelNextMonth: "ariaLabelNextMonth", noAvailableFlightsLabel: "noAvailableFlightsLabel", availableFlightsLabel: "availableFlightsLabel", disablePastSelection: "disablePastSelection", outboundLabel: "outboundLabel", inboundLabel: "inboundLabel", availability: "availability", outboundAvailableDates: "outboundAvailableDates", inboundAvailableDates: "inboundAvailableDates", times: "times", dateDisplayFormat: "dateDisplayFormat", timeDisplayFormat: "timeDisplayFormat", locale: "locale", compact: "compact", outboundDisabled: "outboundDisabled", inboundDisabled: "inboundDisabled", enableDatepickers: "enableDatepickers", minimizingLabel: "minimizingLabel", maximizingLabel: "maximizingLabel", directOnlyMobileLabel: "directOnlyMobileLabel", orLabel: "orLabel", invalidDestinationText: "invalidDestinationText", outboundSelectedDate: "outboundSelectedDate", inboundSelectedDate: "inboundSelectedDate", enableDestinationSelect: "enableDestinationSelect", enablePassengersSelect: "enablePassengersSelect", enableTripSwitch: "enableTripSwitch", enableTransitSwitch: "enableTransitSwitch" }, outputs: { originOpenChange: "originOpenChange", destinationOpenChange: "destinationOpenChange", passengerSelectOpenChange: "passengerSelectOpenChange", originChange: "originChange", destinationChange: "destinationChange", passengersChange: "passengersChange", tripTypeChange: "tripTypeChange", directOnlyChange: "directOnlyChange", outboundSelectedDateChange: "outboundSelectedDateChange", inboundSelectedDateChange: "inboundSelectedDateChange", outboundOpenChange: "outboundOpenChange", inboundOpenChange: "inboundOpenChange", outboundMonthChange: "outboundMonthChange", inboundMonthChange: "inboundMonthChange", focusOnNextChange: "focusOnNextChange", positionChange: "positionChange", subsidyDiscountInfoClick: "subsidyDiscountInfoClick" }, viewQueries: [{ propertyName: "passengerSelectDropdown", first: true, predicate: ["passengerSelectDropdown"], descendants: true }, { propertyName: "passengerSelect", first: true, predicate: ["passengerSelect"], descendants: true }, { propertyName: "tripSwitch", first: true, predicate: ["tripSwitch"], descendants: true }, { propertyName: "transitSwitch", first: true, predicate: ["transitSwitch"], descendants: true }, { propertyName: "airportSelect", first: true, predicate: ["airportSelect"], descendants: true }, { propertyName: "datepickerCombo", first: true, predicate: ["datepickerCombo"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "tripTypeOneway", first: true, predicate: ["tripTypeOneway"], descendants: true }, { propertyName: "tripTypeRoundTrip", first: true, predicate: ["tripTypeRoundTrip"], descendants: true }, { propertyName: "transitTypeDirectOnly", first: true, predicate: ["transitTypeDirectOnly"], descendants: true }, { propertyName: "transitTypeTransit", first: true, predicate: ["transitTypeTransit"], descendants: true }, { propertyName: "subsidyDiscount", first: true, predicate: ["subsidyDiscount"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\"\n simple\n containerOnToggle\n transparent\n [expanded]=\"expandedAccordionMobile\"\n [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\"\n *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}</div>\n\n<ng-template #filterTemplate>\n <div #container\n [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', maximize && 'maximize'])\">\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect)\"\n #airportSelect\n combo\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getAirportSelectClass()\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [placeholderDestination]=\"placeholderDestination\"\n [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && (!enableDestinationSelect)\"\n #airportSelect\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions)\"\n [nasClass]=\"getFilterClass('suggestions')\"\n [suggestions]=\"getSuggestions()\"\n [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div\n [nasClass]=\"!enableDestinationSelect ? getClass('origin-combined') :\n getTravelDetailsClass('', ['combined', exists(enableDatepickers) && 'no-border', exists(minimize) && 'minimized'])\">\n <ng-container *ngIf=\"enablePassengersSelect\">\n <nas-dropdown #passengerSelectDropdown\n *ngIf=\"passengers?.length > 0\"\n [nasClass]=\"getTravelDetailsClass('dropdown', 'passengers')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"passengerSelectLabel\"\n [labelStyle]=\"{'width': '102px'}\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onPassengerSelectOpen($event)\"\n (keydown)=\"passengerKeyDown($event)\">\n <nas-passenger-select #passengerSelect\n [ariaLabelAdd]=\"ariaLabelAdd\"\n [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\"\n [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\"\n [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\"\n [title]=\"passengerSelectTitle\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\"\n [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\"\n (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n </nas-dropdown>\n </ng-container>\n <ng-container *ngIf=\"enableTripSwitch\">\n <nas-dropdown *ngIf=\"tripSwitchOneWayLabel && tripSwitchRoundTripLabel\"\n #tripSwitch\n [nasClass]=\"getTravelDetailsClass('dropdown', 'trip-type')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"getTripSwitchLabel()\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onTripSwitchOpen($event)\"\n (keydown)=\"onTripSwitchKeyDown($event)\">\n <div [nasClass]=\"getTravelDetailsClass('actions')\">\n <button type=\"button\"\n #tripTypeRoundTrip\n [nasClass]=\"getTravelDetailsClass('action', tripType === 2 && 'active')\"\n (click)=\"onTripTypeChange(2)\">\n <nas-icon [type]=\"'medium'\"\n [icon]=\"tripType === 2 ? 'flight-return--light' : 'flight-return'\"></nas-icon>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{tripSwitchRoundTripLabel}}</span>\n </button>\n <button type=\"button\"\n #tripTypeOneway\n [nasClass]=\"getTravelDetailsClass('action', tripType === 1 && 'active')\"\n (click)=\"onTripTypeChange(1)\">\n <nas-icon [type]=\"'medium'\"\n [icon]=\"tripType === 1 ? 'flight-oneway--light' : 'flight-oneway'\"></nas-icon>\n <span [nasClass]=\"getTravelDetailsClass('title', ['small'])\">{{tripSwitchOneWayLabel}}</span>\n </button>\n </div>\n </nas-dropdown>\n </ng-container>\n <ng-container *ngIf=\"enableTransitSwitch\">\n <nas-dropdown *ngIf=\"directOnlyLabel && directTransitLabel\"\n #transitSwitch\n [nasClass]=\"getTravelDetailsClass('dropdown', 'transit-type')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"getTransitLabel()\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onTransitSwitchOpen($event)\"\n (keydown)=\"transitKeyDown($event)\">\n <div [nasClass]=\"getTravelDetailsClass('actions')\">\n <button type=\"button\"\n #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon')\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon-stop')\"></span>\n </span>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{directTransitLabel}}</span>\n </button>\n <button [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\"\n type=\"button\"\n #transitTypeDirectOnly\n (click)=\"onTransitChange(true)\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon')\"></span>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{directOnlyLabel}}</span>\n </button>\n </div>\n </nas-dropdown>\n </ng-container>\n </div>\n <div *ngIf=\"exists(enableDatepickers)\"\n [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo\n compact\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\"\n [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\"\n [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\"\n [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [times]=\"times\"\n [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\"\n [outboundOnly]=\"tripType === 1\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\"\n (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\"\n [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\"\n [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"subsidyDiscounts && subsidyDiscounts.length > 0\"\n [nasClass]=\"getFilterClass('subsidy-discount')\">\n <nas-subsidy-discount #subsidyDiscount\n [discounts]=\"subsidyDiscounts\"\n [selectedDiscount]=\"selectedSubsidyDiscount\"\n [label]=\"subsidyDiscountLabel\"\n (infoButtonClick)=\"onSubsidyDiscountInfoClick()\"\n (discountSelectChange)=\"onSubsidyDiscountSelectChange($event)\"\n (infoButtonKeydown)=\"onSubsidyDiscountInfoButtonKeydown($event)\"></nas-subsidy-discount>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter{background-color:#f1f1f1;position:relative;z-index:6}.nas-filter__title{margin-top:24px;font-size:28px;line-height:34px}@media screen and (min-width: 640px){.nas-filter__title{font-size:32px;line-height:38px}}.nas-filter__title--md{margin-top:60px}.nas-filter__filters{margin-top:12px;display:flex;flex-wrap:wrap;order:2}.nas-filter__filters .nas-filter__date-combo{order:2;flex:1;z-index:2}.nas-filter__filters--minimized .nas-filter__airport-select:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.nas-filter__filters--maximize .nas-filter__airport-select:after{display:none}.nas-filter__filters--md .nas-filter__date-combo{flex:0 0 100%}.nas-filter__filters--lg{display:flex;align-items:stretch}.nas-filter__filters--lg .nas-filter__date-combo{order:3;flex:0 0 100%;z-index:1}.nas-filter__filters--lg .nas-filter__suggestions{order:3}.nas-filter__filters--lg .nas-filter__filters--minimized .nas-filter__airport-select{margin-right:0;flex:0 1 100%}.nas-filter__filters--lg .nas-filter__filters--maximize .nas-filter__airport-select{margin-right:3px;flex:auto}.nas-filter__filters--lg.nas-filter__filters--maximize .nas-filter__date-combo{border-bottom:3px solid #c3c3c3}.nas-filter__suggestions{flex-basis:100%;position:relative;margin-top:3px}.nas-filter__suggestions:before{content:\"\";position:absolute;top:-3px;left:0px;width:100%;border-top:3px solid #c3c3c3}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__airport-select--lg{width:0;margin:0 3px 0 0;flex:1 1 auto}.nas-filter__toggler{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;font-size:18px;line-height:26px;color:#003251;margin-top:6px;z-index:1}.nas-filter__toggler .nas-filter__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter__toggler .nas-filter__direct-only{display:inline-block}.travel-details{position:relative;display:flex;margin:0;flex-wrap:wrap;z-index:1}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #f1f1f1}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:26px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:26px;margin:0}.travel-details__actions{display:flex}.travel-details__action{padding:12px;width:100%;background-color:#fff}.travel-details__action:hover,.travel-details__action:focus{background-color:#e3e3e3}.travel-details__action--active,.travel-details__action--active:hover,.travel-details__action--active:focus{color:#fff;background-color:#003251}.travel-details__action:focus{outline:none;box-shadow:inset 0 0 2px #c3c3c3,inset 0 0 2px 3px #3b99fc;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__dropdown--md.travel-details__dropdown--trip-type{order:2;flex:1;margin-right:3px}.travel-details__dropdown--md.travel-details__dropdown--transit-type{order:3;flex:1}.travel-details__dropdown--md.travel-details__dropdown--passengers{order:1;flex:1;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--trip-type{order:2;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--transit-type{order:3;flex:1 1 auto}.travel-details__dropdown--lg.travel-details__dropdown--passengers{order:1;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg:focus{outline:none}.travel-details__dropdown--lg:after{display:none}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}.travel-details--combined{order:3;flex:0 0 100%}.travel-details--combined.travel-details--md:after{content:\"\";position:absolute;bottom:-6px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--md .travel-details__dropdown{margin:0 3px 0 0}.travel-details--combined.travel-details--md .travel-details__dropdown:last-child{margin:0}.travel-details--combined.travel-details--md .dropdown__toggle{height:calc(100% - 3px);margin:0;padding-left:16px;padding-right:16px}.travel-details--combined.travel-details--lg{order:2;flex:0 0 auto;margin:0 0 0 -3px;padding-left:3px;z-index:2}.travel-details--combined.travel-details--lg:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--lg .dropdown__toggle{height:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle{padding:20px!important;width:100%;height:100%}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle:hover:after{display:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle nas-icon{float:right}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle:focus{outline:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown{width:100%}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown:focus{outline:none}@media (min-width: 640px){::ng-deep .nas-filter__filters .travel-details__dropdown:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-filter__date-combo--side-by-side .nas-datepicker-combo__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter__filters .nas-airport-select__input-line{border-top:none!important}::ng-deep .nas-filter__filters .nas-airport-select-combo__separator{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter__filters .nas-datepicker-combo__separator{display:none}::ng-deep .nas-filter__filters--lg .nas-dropdown__toggle{display:flex}::ng-deep .nas-filter__filters--lg .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:3px solid #c3c3c3}::ng-deep .nas-filter__filters--lg .nas-airport-select__input-line{border-top:3px solid #c3c3c3!important}::ng-deep .nas-filter__filters--lg .nas-datepicker-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter__filters--lg .nas-airport-select-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter__rotate{transform:rotate(180deg)}::ng-deep .nas-filter__rotate-enter,::ng-deep .nas-filter__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__input-line{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select-combo__separator{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results-wrapper{margin-top:0}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results{top:-3px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__icon{bottom:18px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select:after{display:none}::ng-deep .nas-filter__airport-select .nas-airport-select__input-line{display:none}::ng-deep .nas-filter__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter__origin-combined{border-bottom:3px solid #c3c3c3;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter__origin-combined{display:flex;flex:none}::ng-deep .nas-filter__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter__subsidy-discount{order:3}::ng-deep .nas-filter__subsidy-discount .nas-subsidy-discount{margin-top:16px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i7.AirportSelectComponent, selector: "nas-airport-select", inputs: ["airports", "airportRelations", "latestSearchesOrigin", "latestSearchesDestination", "closestAirports", "allowedOriginAiports", "allowedDestinationAirports", "displayLatestSearches", "displayClosestAirports", "combo", "useSwitch", "allAirportsLabel", "latestSearchesLabel", "closestAirportsLabel", "geolocationLabel", "geolocationBlockedLabel", "selectOriginFirstLabel", "invalidDestinationText", "labelOrigin", "placeholderOrigin", "labelDestination", "placeholderDestination", "keepSelection", "nasFormControlNameOrigin", "nasFormControlNameDestination", "nasFormGroup", "originAirportCode", "destinationAirportCode", "ariaLabelClear", "ariaLabelBackdrop"], outputs: ["originChange", "originOpenChange", "destinationChange", "destinationOpenChange", "focusOnNext", "positionChange"] }, { kind: "component", type: i8.DropdownComponent, selector: "nas-dropdown", inputs: ["open", "id", "ariaLabelBackdrop", "cssClass", "inline", "label", "stretched", "labelStyle"], outputs: ["openChange"] }, { kind: "component", type: i9.PassengerSelectComponent, selector: "nas-passenger-select", inputs: ["passengers", "maxPaxCount", "minAdultCount", "groupBookingLimit", "title", "adultsLabel", "childrenLabel", "infantsLabel", "groupBookingLabel", "nasFormGroup", "nasFormControlGroupBooking", "ariaLabelSubtract", "ariaLabelAdd"], outputs: ["passengersChange", "focusOnNext", "focusOnPrevious"] }, { kind: "component", type: i10.AccordionComponent, selector: "nas-accordion", inputs: ["expanded", "title", "subheader", "icon", "simple", "spaced", "small", "inverted", "containerOnToggle", "nopadding", "transparent", "approve", "primary", "info", "subheaderPositive", "subheaderNegative", "cssClass", "cssStyle"], outputs: ["toggleChange"] }, { kind: "component", type: i11.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "component", type: i12.DatepickerComboComponent, selector: "nas-datepicker-combo", inputs: ["ariaLabelBackdrop", "outboundOpen", "inboundOpen", "noAvailableFlightsLabel", "availableFlightsLabel", "disablePastSelection", "outboundDisabled", "inboundDisabled", "outboundOnly", "outboundLabel", "inboundLabel", "availability", "outboundAvailableDates", "inboundAvailableDates", "times", "dateDisplayFormat", "timeDisplayFormat", "locale", "compact", "nasFormGroup", "nasFormControlNameOutbound", "nasFormControlNameInbound", "outboundSelectedDate", "inboundSelectedDate", "disableBackdrop", "outboundSelectedTime", "inboundSelectedTime", "ariaLabelPreviousMonth", "ariaLabelNextMonth", "inboundLowerLimitDateOffset"], outputs: ["outboundSelectedDateChange", "inboundSelectedDateChange", "outboundOpenChange", "inboundOpenChange", "outboundMonthChange", "inboundMonthChange", "focusOnNextChange", "focusOnPreviousChange"] }, { kind: "component", type: i13.SubsidyDiscountComponent, selector: "nas-subsidy-discount", inputs: ["label", "icon", "selectedDiscount", "discounts"], outputs: ["infoButtonClick", "infoButtonKeydown", "discountSelectChange"] }, { kind: "component", type: i14.SuggestionsComponent, selector: "nas-suggestions", inputs: ["suggestions", "orLabel"], outputs: ["airportSelect"] }] });
|
|
999
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FilterComponent, decorators: [{
|
|
1000
|
+
type: Component,
|
|
1001
|
+
args: [{ selector: 'nas-filter', template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\"\n simple\n containerOnToggle\n transparent\n [expanded]=\"expandedAccordionMobile\"\n [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\"\n *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}</div>\n\n<ng-template #filterTemplate>\n <div #container\n [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', maximize && 'maximize'])\">\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect)\"\n #airportSelect\n combo\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getAirportSelectClass()\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [placeholderDestination]=\"placeholderDestination\"\n [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && (!enableDestinationSelect)\"\n #airportSelect\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions)\"\n [nasClass]=\"getFilterClass('suggestions')\"\n [suggestions]=\"getSuggestions()\"\n [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div\n [nasClass]=\"!enableDestinationSelect ? getClass('origin-combined') :\n getTravelDetailsClass('', ['combined', exists(enableDatepickers) && 'no-border', exists(minimize) && 'minimized'])\">\n <ng-container *ngIf=\"enablePassengersSelect\">\n <nas-dropdown #passengerSelectDropdown\n *ngIf=\"passengers?.length > 0\"\n [nasClass]=\"getTravelDetailsClass('dropdown', 'passengers')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"passengerSelectLabel\"\n [labelStyle]=\"{'width': '102px'}\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onPassengerSelectOpen($event)\"\n (keydown)=\"passengerKeyDown($event)\">\n <nas-passenger-select #passengerSelect\n [ariaLabelAdd]=\"ariaLabelAdd\"\n [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\"\n [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\"\n [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\"\n [title]=\"passengerSelectTitle\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\"\n [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\"\n (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n </nas-dropdown>\n </ng-container>\n <ng-container *ngIf=\"enableTripSwitch\">\n <nas-dropdown *ngIf=\"tripSwitchOneWayLabel && tripSwitchRoundTripLabel\"\n #tripSwitch\n [nasClass]=\"getTravelDetailsClass('dropdown', 'trip-type')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"getTripSwitchLabel()\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onTripSwitchOpen($event)\"\n (keydown)=\"onTripSwitchKeyDown($event)\">\n <div [nasClass]=\"getTravelDetailsClass('actions')\">\n <button type=\"button\"\n #tripTypeRoundTrip\n [nasClass]=\"getTravelDetailsClass('action', tripType === 2 && 'active')\"\n (click)=\"onTripTypeChange(2)\">\n <nas-icon [type]=\"'medium'\"\n [icon]=\"tripType === 2 ? 'flight-return--light' : 'flight-return'\"></nas-icon>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{tripSwitchRoundTripLabel}}</span>\n </button>\n <button type=\"button\"\n #tripTypeOneway\n [nasClass]=\"getTravelDetailsClass('action', tripType === 1 && 'active')\"\n (click)=\"onTripTypeChange(1)\">\n <nas-icon [type]=\"'medium'\"\n [icon]=\"tripType === 1 ? 'flight-oneway--light' : 'flight-oneway'\"></nas-icon>\n <span [nasClass]=\"getTravelDetailsClass('title', ['small'])\">{{tripSwitchOneWayLabel}}</span>\n </button>\n </div>\n </nas-dropdown>\n </ng-container>\n <ng-container *ngIf=\"enableTransitSwitch\">\n <nas-dropdown *ngIf=\"directOnlyLabel && directTransitLabel\"\n #transitSwitch\n [nasClass]=\"getTravelDetailsClass('dropdown', 'transit-type')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"getTransitLabel()\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onTransitSwitchOpen($event)\"\n (keydown)=\"transitKeyDown($event)\">\n <div [nasClass]=\"getTravelDetailsClass('actions')\">\n <button type=\"button\"\n #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon')\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon-stop')\"></span>\n </span>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{directTransitLabel}}</span>\n </button>\n <button [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\"\n type=\"button\"\n #transitTypeDirectOnly\n (click)=\"onTransitChange(true)\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon')\"></span>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{directOnlyLabel}}</span>\n </button>\n </div>\n </nas-dropdown>\n </ng-container>\n </div>\n <div *ngIf=\"exists(enableDatepickers)\"\n [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo\n compact\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\"\n [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\"\n [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\"\n [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [times]=\"times\"\n [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\"\n [outboundOnly]=\"tripType === 1\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\"\n (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\"\n [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\"\n [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"subsidyDiscounts && subsidyDiscounts.length > 0\"\n [nasClass]=\"getFilterClass('subsidy-discount')\">\n <nas-subsidy-discount #subsidyDiscount\n [discounts]=\"subsidyDiscounts\"\n [selectedDiscount]=\"selectedSubsidyDiscount\"\n [label]=\"subsidyDiscountLabel\"\n (infoButtonClick)=\"onSubsidyDiscountInfoClick()\"\n (discountSelectChange)=\"onSubsidyDiscountSelectChange($event)\"\n (infoButtonKeydown)=\"onSubsidyDiscountInfoButtonKeydown($event)\"></nas-subsidy-discount>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter{background-color:#f1f1f1;position:relative;z-index:6}.nas-filter__title{margin-top:24px;font-size:28px;line-height:34px}@media screen and (min-width: 640px){.nas-filter__title{font-size:32px;line-height:38px}}.nas-filter__title--md{margin-top:60px}.nas-filter__filters{margin-top:12px;display:flex;flex-wrap:wrap;order:2}.nas-filter__filters .nas-filter__date-combo{order:2;flex:1;z-index:2}.nas-filter__filters--minimized .nas-filter__airport-select:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.nas-filter__filters--maximize .nas-filter__airport-select:after{display:none}.nas-filter__filters--md .nas-filter__date-combo{flex:0 0 100%}.nas-filter__filters--lg{display:flex;align-items:stretch}.nas-filter__filters--lg .nas-filter__date-combo{order:3;flex:0 0 100%;z-index:1}.nas-filter__filters--lg .nas-filter__suggestions{order:3}.nas-filter__filters--lg .nas-filter__filters--minimized .nas-filter__airport-select{margin-right:0;flex:0 1 100%}.nas-filter__filters--lg .nas-filter__filters--maximize .nas-filter__airport-select{margin-right:3px;flex:auto}.nas-filter__filters--lg.nas-filter__filters--maximize .nas-filter__date-combo{border-bottom:3px solid #c3c3c3}.nas-filter__suggestions{flex-basis:100%;position:relative;margin-top:3px}.nas-filter__suggestions:before{content:\"\";position:absolute;top:-3px;left:0px;width:100%;border-top:3px solid #c3c3c3}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__airport-select--lg{width:0;margin:0 3px 0 0;flex:1 1 auto}.nas-filter__toggler{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;font-size:18px;line-height:26px;color:#003251;margin-top:6px;z-index:1}.nas-filter__toggler .nas-filter__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter__toggler .nas-filter__direct-only{display:inline-block}.travel-details{position:relative;display:flex;margin:0;flex-wrap:wrap;z-index:1}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #f1f1f1}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:26px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:26px;margin:0}.travel-details__actions{display:flex}.travel-details__action{padding:12px;width:100%;background-color:#fff}.travel-details__action:hover,.travel-details__action:focus{background-color:#e3e3e3}.travel-details__action--active,.travel-details__action--active:hover,.travel-details__action--active:focus{color:#fff;background-color:#003251}.travel-details__action:focus{outline:none;box-shadow:inset 0 0 2px #c3c3c3,inset 0 0 2px 3px #3b99fc;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__dropdown--md.travel-details__dropdown--trip-type{order:2;flex:1;margin-right:3px}.travel-details__dropdown--md.travel-details__dropdown--transit-type{order:3;flex:1}.travel-details__dropdown--md.travel-details__dropdown--passengers{order:1;flex:1;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--trip-type{order:2;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--transit-type{order:3;flex:1 1 auto}.travel-details__dropdown--lg.travel-details__dropdown--passengers{order:1;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg:focus{outline:none}.travel-details__dropdown--lg:after{display:none}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}.travel-details--combined{order:3;flex:0 0 100%}.travel-details--combined.travel-details--md:after{content:\"\";position:absolute;bottom:-6px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--md .travel-details__dropdown{margin:0 3px 0 0}.travel-details--combined.travel-details--md .travel-details__dropdown:last-child{margin:0}.travel-details--combined.travel-details--md .dropdown__toggle{height:calc(100% - 3px);margin:0;padding-left:16px;padding-right:16px}.travel-details--combined.travel-details--lg{order:2;flex:0 0 auto;margin:0 0 0 -3px;padding-left:3px;z-index:2}.travel-details--combined.travel-details--lg:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--lg .dropdown__toggle{height:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle{padding:20px!important;width:100%;height:100%}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle:hover:after{display:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle nas-icon{float:right}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle:focus{outline:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown{width:100%}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown:focus{outline:none}@media (min-width: 640px){::ng-deep .nas-filter__filters .travel-details__dropdown:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-filter__date-combo--side-by-side .nas-datepicker-combo__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter__filters .nas-airport-select__input-line{border-top:none!important}::ng-deep .nas-filter__filters .nas-airport-select-combo__separator{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter__filters .nas-datepicker-combo__separator{display:none}::ng-deep .nas-filter__filters--lg .nas-dropdown__toggle{display:flex}::ng-deep .nas-filter__filters--lg .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:3px solid #c3c3c3}::ng-deep .nas-filter__filters--lg .nas-airport-select__input-line{border-top:3px solid #c3c3c3!important}::ng-deep .nas-filter__filters--lg .nas-datepicker-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter__filters--lg .nas-airport-select-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter__rotate{transform:rotate(180deg)}::ng-deep .nas-filter__rotate-enter,::ng-deep .nas-filter__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__input-line{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select-combo__separator{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results-wrapper{margin-top:0}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results{top:-3px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__icon{bottom:18px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select:after{display:none}::ng-deep .nas-filter__airport-select .nas-airport-select__input-line{display:none}::ng-deep .nas-filter__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter__origin-combined{border-bottom:3px solid #c3c3c3;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter__origin-combined{display:flex;flex:none}::ng-deep .nas-filter__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter__subsidy-discount{order:3}::ng-deep .nas-filter__subsidy-discount .nas-subsidy-discount{margin-top:16px}\n"] }]
|
|
1002
|
+
}], ctorParameters: function () { return [{ type: i1.DeviceHelper }, { type: i2.SortService }, { type: i3.AbandonedBasketService }, { type: i4.DateHelper }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { passengerSelectDropdown: [{
|
|
1003
|
+
type: ViewChild,
|
|
1004
|
+
args: ['passengerSelectDropdown']
|
|
1005
|
+
}], passengerSelect: [{
|
|
1006
|
+
type: ViewChild,
|
|
1007
|
+
args: ['passengerSelect']
|
|
1008
|
+
}], tripSwitch: [{
|
|
1009
|
+
type: ViewChild,
|
|
1010
|
+
args: ['tripSwitch']
|
|
1011
|
+
}], transitSwitch: [{
|
|
1012
|
+
type: ViewChild,
|
|
1013
|
+
args: ['transitSwitch']
|
|
1014
|
+
}], airportSelect: [{
|
|
1015
|
+
type: ViewChild,
|
|
1016
|
+
args: ['airportSelect']
|
|
1017
|
+
}], datepickerCombo: [{
|
|
1018
|
+
type: ViewChild,
|
|
1019
|
+
args: ['datepickerCombo']
|
|
1020
|
+
}], container: [{
|
|
1021
|
+
type: ViewChild,
|
|
1022
|
+
args: ['container']
|
|
1023
|
+
}], tripTypeOneway: [{
|
|
1024
|
+
type: ViewChild,
|
|
1025
|
+
args: ['tripTypeOneway']
|
|
1026
|
+
}], tripTypeRoundTrip: [{
|
|
1027
|
+
type: ViewChild,
|
|
1028
|
+
args: ['tripTypeRoundTrip']
|
|
1029
|
+
}], transitTypeDirectOnly: [{
|
|
1030
|
+
type: ViewChild,
|
|
1031
|
+
args: ['transitTypeDirectOnly']
|
|
1032
|
+
}], transitTypeTransit: [{
|
|
1033
|
+
type: ViewChild,
|
|
1034
|
+
args: ['transitTypeTransit']
|
|
1035
|
+
}], subsidyDiscount: [{
|
|
1036
|
+
type: ViewChild,
|
|
1037
|
+
args: ['subsidyDiscount']
|
|
1038
|
+
}], airportRelations: [{
|
|
1039
|
+
type: Input
|
|
1040
|
+
}], ariaLabelClear: [{
|
|
1041
|
+
type: Input
|
|
1042
|
+
}], ariaLabelSubtract: [{
|
|
1043
|
+
type: Input
|
|
1044
|
+
}], ariaLabelBackdrop: [{
|
|
1045
|
+
type: Input
|
|
1046
|
+
}], ariaLabelAdd: [{
|
|
1047
|
+
type: Input
|
|
1048
|
+
}], allowedOriginAirports: [{
|
|
1049
|
+
type: Input
|
|
1050
|
+
}], allowedDestinationAirports: [{
|
|
1051
|
+
type: Input
|
|
1052
|
+
}], displayLatestSearches: [{
|
|
1053
|
+
type: Input
|
|
1054
|
+
}], useSwitch: [{
|
|
1055
|
+
type: Input
|
|
1056
|
+
}], displayClosestAirports: [{
|
|
1057
|
+
type: Input
|
|
1058
|
+
}], originAirportCode: [{
|
|
1059
|
+
type: Input
|
|
1060
|
+
}], destinationAirportCode: [{
|
|
1061
|
+
type: Input
|
|
1062
|
+
}], passengerSelectLabel: [{
|
|
1063
|
+
type: Input
|
|
1064
|
+
}], maxPaxCount: [{
|
|
1065
|
+
type: Input
|
|
1066
|
+
}], passengers: [{
|
|
1067
|
+
type: Input
|
|
1068
|
+
}], minAdultCount: [{
|
|
1069
|
+
type: Input
|
|
1070
|
+
}], tripSwitchRoundTripLabel: [{
|
|
1071
|
+
type: Input
|
|
1072
|
+
}], tripSwitchOneWayLabel: [{
|
|
1073
|
+
type: Input
|
|
1074
|
+
}], directOnlyLabel: [{
|
|
1075
|
+
type: Input
|
|
1076
|
+
}], directTransitLabel: [{
|
|
1077
|
+
type: Input
|
|
1078
|
+
}], minimizeOnMobile: [{
|
|
1079
|
+
type: Input
|
|
1080
|
+
}], expandedAccordionMobile: [{
|
|
1081
|
+
type: Input
|
|
1082
|
+
}], defaultSummarySeparator: [{
|
|
1083
|
+
type: Input
|
|
1084
|
+
}], lastSummarySeparator: [{
|
|
1085
|
+
type: Input
|
|
1086
|
+
}], passengerSelectTitle: [{
|
|
1087
|
+
type: Input
|
|
1088
|
+
}], passengerSelectAdultsLabel: [{
|
|
1089
|
+
type: Input
|
|
1090
|
+
}], passengerSelectChildrenLabel: [{
|
|
1091
|
+
type: Input
|
|
1092
|
+
}], passengerSelectInfantsLabel: [{
|
|
1093
|
+
type: Input
|
|
1094
|
+
}], groupBookingLabel: [{
|
|
1095
|
+
type: Input
|
|
1096
|
+
}], allAirportsLabel: [{
|
|
1097
|
+
type: Input
|
|
1098
|
+
}], latestSearchesLabel: [{
|
|
1099
|
+
type: Input
|
|
1100
|
+
}], closestAirportsLabel: [{
|
|
1101
|
+
type: Input
|
|
1102
|
+
}], selectOriginFirstLabel: [{
|
|
1103
|
+
type: Input
|
|
1104
|
+
}], labelOrigin: [{
|
|
1105
|
+
type: Input
|
|
1106
|
+
}], placeholderOrigin: [{
|
|
1107
|
+
type: Input
|
|
1108
|
+
}], labelDestination: [{
|
|
1109
|
+
type: Input
|
|
1110
|
+
}], geolocationLabel: [{
|
|
1111
|
+
type: Input
|
|
1112
|
+
}], geolocationBlockedLabel: [{
|
|
1113
|
+
type: Input
|
|
1114
|
+
}], placeholderDestination: [{
|
|
1115
|
+
type: Input
|
|
1116
|
+
}], keepSelection: [{
|
|
1117
|
+
type: Input
|
|
1118
|
+
}], editSearchTitle: [{
|
|
1119
|
+
type: Input
|
|
1120
|
+
}], nasFormGroup: [{
|
|
1121
|
+
type: Input
|
|
1122
|
+
}], nasFormControlNameOrigin: [{
|
|
1123
|
+
type: Input
|
|
1124
|
+
}], nasFormControlNameDestination: [{
|
|
1125
|
+
type: Input
|
|
1126
|
+
}], nasFormControlNameTripType: [{
|
|
1127
|
+
type: Input
|
|
1128
|
+
}], nasFormControlNameDirectOnly: [{
|
|
1129
|
+
type: Input
|
|
1130
|
+
}], nasFormControlNameOutbound: [{
|
|
1131
|
+
type: Input
|
|
1132
|
+
}], nasFormControlNameInbound: [{
|
|
1133
|
+
type: Input
|
|
1134
|
+
}], nasFormControlGroupBooking: [{
|
|
1135
|
+
type: Input
|
|
1136
|
+
}], nasFormControlNameSubsidyDiscount: [{
|
|
1137
|
+
type: Input
|
|
1138
|
+
}], overrideOrigin: [{
|
|
1139
|
+
type: Input
|
|
1140
|
+
}], enableSuggestions: [{
|
|
1141
|
+
type: Input
|
|
1142
|
+
}], closestAirports: [{
|
|
1143
|
+
type: Input
|
|
1144
|
+
}], minimize: [{
|
|
1145
|
+
type: Input
|
|
1146
|
+
}], airports: [{
|
|
1147
|
+
type: Input
|
|
1148
|
+
}], tripType: [{
|
|
1149
|
+
type: Input
|
|
1150
|
+
}], directOnly: [{
|
|
1151
|
+
type: Input
|
|
1152
|
+
}], groupBookingLimit: [{
|
|
1153
|
+
type: Input
|
|
1154
|
+
}], subsidyDiscounts: [{
|
|
1155
|
+
type: Input
|
|
1156
|
+
}], selectedSubsidyDiscount: [{
|
|
1157
|
+
type: Input
|
|
1158
|
+
}], subsidyDiscountLabel: [{
|
|
1159
|
+
type: Input
|
|
1160
|
+
}], ariaLabelPreviousMonth: [{
|
|
1161
|
+
type: Input
|
|
1162
|
+
}], ariaLabelNextMonth: [{
|
|
1163
|
+
type: Input
|
|
1164
|
+
}], originOpenChange: [{
|
|
1165
|
+
type: Output
|
|
1166
|
+
}], destinationOpenChange: [{
|
|
1167
|
+
type: Output
|
|
1168
|
+
}], passengerSelectOpenChange: [{
|
|
1169
|
+
type: Output
|
|
1170
|
+
}], originChange: [{
|
|
1171
|
+
type: Output
|
|
1172
|
+
}], destinationChange: [{
|
|
1173
|
+
type: Output
|
|
1174
|
+
}], passengersChange: [{
|
|
1175
|
+
type: Output
|
|
1176
|
+
}], tripTypeChange: [{
|
|
1177
|
+
type: Output
|
|
1178
|
+
}], directOnlyChange: [{
|
|
1179
|
+
type: Output
|
|
1180
|
+
}], noAvailableFlightsLabel: [{
|
|
1181
|
+
type: Input
|
|
1182
|
+
}], availableFlightsLabel: [{
|
|
1183
|
+
type: Input
|
|
1184
|
+
}], disablePastSelection: [{
|
|
1185
|
+
type: Input
|
|
1186
|
+
}], outboundLabel: [{
|
|
1187
|
+
type: Input
|
|
1188
|
+
}], inboundLabel: [{
|
|
1189
|
+
type: Input
|
|
1190
|
+
}], availability: [{
|
|
1191
|
+
type: Input
|
|
1192
|
+
}], outboundAvailableDates: [{
|
|
1193
|
+
type: Input
|
|
1194
|
+
}], inboundAvailableDates: [{
|
|
1195
|
+
type: Input
|
|
1196
|
+
}], times: [{
|
|
1197
|
+
type: Input
|
|
1198
|
+
}], dateDisplayFormat: [{
|
|
1199
|
+
type: Input
|
|
1200
|
+
}], timeDisplayFormat: [{
|
|
1201
|
+
type: Input
|
|
1202
|
+
}], locale: [{
|
|
1203
|
+
type: Input
|
|
1204
|
+
}], compact: [{
|
|
1205
|
+
type: Input
|
|
1206
|
+
}], outboundDisabled: [{
|
|
1207
|
+
type: Input
|
|
1208
|
+
}], inboundDisabled: [{
|
|
1209
|
+
type: Input
|
|
1210
|
+
}], enableDatepickers: [{
|
|
1211
|
+
type: Input
|
|
1212
|
+
}], minimizingLabel: [{
|
|
1213
|
+
type: Input
|
|
1214
|
+
}], maximizingLabel: [{
|
|
1215
|
+
type: Input
|
|
1216
|
+
}], directOnlyMobileLabel: [{
|
|
1217
|
+
type: Input
|
|
1218
|
+
}], orLabel: [{
|
|
1219
|
+
type: Input
|
|
1220
|
+
}], invalidDestinationText: [{
|
|
1221
|
+
type: Input
|
|
1222
|
+
}], outboundSelectedDate: [{
|
|
1223
|
+
type: Input
|
|
1224
|
+
}], inboundSelectedDate: [{
|
|
1225
|
+
type: Input
|
|
1226
|
+
}], enableDestinationSelect: [{
|
|
1227
|
+
type: Input
|
|
1228
|
+
}], enablePassengersSelect: [{
|
|
1229
|
+
type: Input
|
|
1230
|
+
}], enableTripSwitch: [{
|
|
1231
|
+
type: Input
|
|
1232
|
+
}], enableTransitSwitch: [{
|
|
1233
|
+
type: Input
|
|
1234
|
+
}], outboundSelectedDateChange: [{
|
|
1235
|
+
type: Output
|
|
1236
|
+
}], inboundSelectedDateChange: [{
|
|
1237
|
+
type: Output
|
|
1238
|
+
}], outboundOpenChange: [{
|
|
1239
|
+
type: Output
|
|
1240
|
+
}], inboundOpenChange: [{
|
|
1241
|
+
type: Output
|
|
1242
|
+
}], outboundMonthChange: [{
|
|
1243
|
+
type: Output
|
|
1244
|
+
}], inboundMonthChange: [{
|
|
1245
|
+
type: Output
|
|
1246
|
+
}], focusOnNextChange: [{
|
|
1247
|
+
type: Output
|
|
1248
|
+
}], positionChange: [{
|
|
1249
|
+
type: Output
|
|
1250
|
+
}], subsidyDiscountInfoClick: [{
|
|
1251
|
+
type: Output
|
|
1252
|
+
}] } });
|
|
1253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBRVYsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQnRFOzs7R0FHRztBQU1ILE1BQU0sT0FBTyxlQUFnQixTQUFRLGdCQUFnQjtJQXVCbkQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLEtBQWM7UUFDN0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFO1lBQ3BDLE9BQU87U0FDUjtRQUVELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXRCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7YUFDNUM7U0FDRjtRQUVELElBQUks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QUE5QixLQUFLO2dCQU9GLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFvQkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQW1CSSx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBTUUsc0JBQXNCO3NCQUE5QixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFNRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBTUksMEJBQTBCO3NCQUFuQyxNQUFNO2dCQU1HLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFPRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQU1HLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFNRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQU1HLGNBQWM7c0JBQXZCLE1BQU07Z0JBTUcsd0JBQXdCO3NCQUFqQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJpcFR5cGUgfSBmcm9tICcuL2VudW1zL3RyaXAtdHlwZS5lbnVtJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL2FiYW5kb25lZC1iYXNrZXQtaXRlbS5tb2RlbCc7XG5pbXBvcnQgeyBDbGFzc01vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvY2xhc3MubW9kZWwnO1xuaW1wb3J0IHsgVXRjRGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3V0Yy1kYXRlLm1vZGVsJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2FiYW5kb25lZC1iYXNrZXQvYWJhbmRvbmVkLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RhdGUvZGF0ZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZXZpY2VIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RldmljZS9kZXZpY2UtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3NvcnQvc29ydC5zZXJ2aWNlJztcbmltcG9ydCB7IEFpcnBvcnRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9haXJwb3J0LXNlbGVjdC9haXJwb3J0LXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWlycG9ydE1vZGVsIH0gZnJvbSAnLi4vYWlycG9ydC1zZWxlY3QvbW9kZWxzL2FpcnBvcnQubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlckNvbWJvQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZXBpY2tlci1jb21iby9kYXRlcGlja2VyLWNvbWJvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzZW5nZXJzTW9kZWwgfSBmcm9tICcuLi9wYXNzZW5nZXItc2VsZWN0L21vZGVscy9wYXNzZW5nZXJzLm1vZGVsJztcbmltcG9ydCB7IFN1YnNpZHlEaXNjb3VudE1vZGVsIH0gZnJvbSAnLi4vc3Vic2lkeS1kaXNjb3VudC9tb2RlbHMvc3Vic2lkeS1kaXNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBQYXNzZW5nZXJTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9wYXNzZW5nZXItc2VsZWN0L3Bhc3Nlbmdlci1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNpZHlEaXNjb3VudENvbXBvbmVudCB9IGZyb20gJy4uL3N1YnNpZHktZGlzY291bnQvc3Vic2lkeS1kaXNjb3VudC5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogTm9yd2VnaWFuIEZpbHRlciBDb21wb25lbnQgfCBGdW5jdGlvbmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIEBWaWV3Q2hpbGQoJ3Bhc3NlbmdlclNlbGVjdERyb3Bkb3duJykgcGFzc2VuZ2VyU2VsZWN0RHJvcGRvd246IERyb3Bkb3duQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdwYXNzZW5nZXJTZWxlY3QnKSBwYXNzZW5nZXJTZWxlY3Q6IFBhc3NlbmdlclNlbGVjdENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndHJpcFN3aXRjaCcpIHRyaXBTd2l0Y2g6IERyb3Bkb3duQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd0cmFuc2l0U3dpdGNoJykgdHJhbnNpdFN3aXRjaDogRHJvcGRvd25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2FpcnBvcnRTZWxlY3QnKSBhaXJwb3J0U2VsZWN0OiBBaXJwb3J0U2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyQ29tYm8nKSBkYXRlcGlja2VyQ29tYm86IERhdGVwaWNrZXJDb21ib0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZU9uZXdheScpIHRyaXBUeXBlT25ld2F5OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZVJvdW5kVHJpcCcpIHRyaXBUeXBlUm91bmRUcmlwOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmFuc2l0VHlwZURpcmVjdE9ubHknKSB0cmFuc2l0VHlwZURpcmVjdE9ubHk6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRUeXBlVHJhbnNpdCcpIHRyYW5zaXRUeXBlVHJhbnNpdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3Vic2lkeURpc2NvdW50Jykgc3Vic2lkeURpc2NvdW50OiBTdWJzaWR5RGlzY291bnRDb21wb25lbnQ7XG5cbiAgbGF0ZXN0U2VhcmNoZXNPcmlnaW46IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb246IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGRpc3BsYXlTdW1tYXJ5ID0gdHJ1ZTtcbiAgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGluYm91bmRMb3dlckxpbWl0RGF0ZTogVXRjRGF0ZTtcbiAgY29udGFpbmVyV2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIG1heGltaXplID0gZmFsc2U7XG4gIGlzTmFzR3JvdXBWYWxpZCA9IGZhbHNlO1xuXG4gIGdldCBvdXRib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3V0Ym91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm91dGJvdW5kT3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3ducygpO1xuXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dGJvdW5kT3BlblZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vdXRib3VuZE9wZW5DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaW5ib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5ib3VuZE9wZW5WYWx1ZTtcbiAgfVxuICBzZXQgaW5ib3VuZE9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pbmJvdW5kT3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3ducygpO1xuXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbmJvdW5kT3BlblRpbWVvdXQpO1xuXG4gICAgdGhpcy5pbmJvdW5kT3BlblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5ib3VuZE9wZW5WYWx1ZSA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5pbmJvdW5kT3BlbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5ib3VuZE9wZW5UaW1lb3V0OiBhbnk7XG5cbiAgLyoqXG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSByZWNvcmQgY29udGFpbmluZyBrZXlzIHdpdGggYWxsIGFpcnBvcnQgY29kZXMgd2l0aCBjb3JyZXNwb25kaW5nIGFycmF5IG9mIGFpcnBvcnQgY29kZXMgY29ubmVjdGVkIHRvIHRoZSBrZXkuXG4gICAqL1xuICBASW5wdXQoKSBhaXJwb3J0UmVsYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxzdHJpbmc+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgJ2FyaWEtbGFiZWwnIG9uIHRoZSBjbGVhciBidXR0b24gaW5zaWRlIHRoZSBhaXJwb3J0IHNlbGVjdCBpbnB1dHMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxDbGVhcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIHN1YnRyYWN0IGJ1dHRvbnMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxTdWJ0cmFjdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyAnYXJpYS1sYWJlbCcgdG8gdGhlIGJhY2tkcm9wcy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbEJhY2tkcm9wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgYWRkIGJ1dHRvbnMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxBZGQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGlzdCBvZiBhaXJwb3J0cyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yaWdpbiBkcm9wZG93bi5cbiAgICogSWYgbm90IGluY2x1ZGVkLCBhbGwgYWlycG9ydHMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd2VkT3JpZ2luQWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBhcnJheSBvZiBhaXJwb3J0cyB0aGF0IGFyZSByZXN0cmljdGVkIGZvciBkZXN0aW5hdGlvbiBhaXJwb3J0cy4gSXQgd2lsbCBkZWZhdWx0IHRvIGFpcnBvcnRzIGlmIG5vdCBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGFpcnBvcnRzIHRoYXQgdGhlIHVzZXIgYWxscmVhZHkgaGFzIHNlYXJoIGZvciBzaG91bGQgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlzcGxheUxhdGVzdFNlYXJjaGVzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzcGxheSBzd2l0Y2ggVUkgdG8gaW50ZXJjaGFuZ2Ugb3JpZ2luIGFuZCBkZXN0aW5hdGlvbiBhaXJwb3J0LlxuICAgKi9cbiAgQElucHV0KCkgdXNlU3dpdGNoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGFpcnBvcnRzIHRoYXQgYXJlIGNsb3NlIHRvIHRoZSB1c2VyIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGFpcnBvcnQgY29kZSBvZiB0aGUgb3JpZ2luIGFpcnBvcnQuIEl0IHdpbGwgc2V0IHRoZSBzZWxlY3RlZCBvcmlnaW4gYWlycG9ydCBiYXNlZCBvbiB0aGlzIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KCkgb3JpZ2luQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBhaXJwb3J0IGNvZGUgb2YgdGhlIGRlc3RpbmF0aW9uIGFpcnBvcnQuIEl0IHdpbGwgc2V0IHRoZSBzZWxlY3RlZCBkZXN0aW5hdGlvbiBhaXJwb3J0IGJhc2VkIG9uIHRoaXMgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKSBkZXN0aW5hdGlvbkFpcnBvcnRDb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgdG90YWwgbWF4aW11bSBhbW91bnQgb2YgcGFzc2VuZ2VycyBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIG1heFBheENvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBhcnJheSBvZiBkaWZmZXJlbnQgcGFzc2VuZ2VyIHR5cGVzIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgcGFzc2VuZ2VycygpOiBBcnJheTxQYXNzZW5nZXJzTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5wYXNzZW5nZXJzVmFsdWU7XG4gIH1cbiAgc2V0IHBhc3NlbmdlcnModmFsdWU6IEFycmF5PFBhc3NlbmdlcnNNb2RlbD4pIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYXNzZW5nZXJzVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnBhc3NlbmdlcnNDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBtaW5pbXVtIGFtb3VudCBvZiBhZHVsdHMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBtaW5BZHVsdENvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciByb3VuZCB0cmlwIHNlbGVjdGlvbiBpbiB0aGUgdHJpcCBzd2l0Y2ggZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSB0cmlwU3dpdGNoUm91bmRUcmlwTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIG9uZSB3YXkgc2VsZWN0aW9uIGluIHRoZSB0cmlwIHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHRyaXBTd2l0Y2hPbmVXYXlMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgZGlyZWN0IG9ubHkgc2VsZWN0aW9uIGluIHRoZSB0cmFuc2l0IHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdE9ubHlMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgYm90aCBkaXJlY3QgYW5kIHRyYW5zaXQgc2VsZWN0aW9uIGluIHRoZSB0cmFuc2l0IHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdFRyYW5zaXRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhdGVzIGlmIHRoZSBmaWx0ZXIgc2hvdWxkIGJlIG1pbmltaXplZCBvbiBtb2JpbGUgc2NyZWVuIHNpemVzLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemVPbk1vYmlsZT86IGJvb2xlYW47XG5cbiAvKipcbiAqIEBkZXNjcmlwdGlvblxuICogSW5kaWNhdGVzIGlmIHRoZSBlZGl0IHNlYXJjaCBvZiBhY2NvcmRpb24gc2hvdWxkIGJlIGV4cGVuZGVkIG9uIG1vYmlsZSBzY3JlZW4gc2l6ZXMuXG4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlKCkge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWU7XG4gIH1cbiAgc2V0IGV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLmV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBzZXBhcmF0b3IgZm9yIHRoZSBmaWx0ZXIgc3VtbWFyeSB0aGF0IGlzIGRpc3BheWVkIGlmIG1pbmltaXplT25Nb2JpbGUgaXMgdHJ1ZS5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICogMSB0cmF2ZWxsZXIsIHJvdW5kIHRyaXAgYW5kIGRpcmVjdC90cmFuc2l0XG4gICAqL1xuICBASW5wdXQoKSBkZWZhdWx0U3VtbWFyeVNlcGFyYXRvciA9ICcnO1xuXG4gIC8qKlxuICAgKiBBIHNlcGFyYXRvciBmb3IgdGhlIGZpbHRlciBzdW1tYXJ5IGlzIGFyZSBkaXNwYXllZCBpZiBtaW5pbWl6ZU9uTW9iaWxlIGlzIHRydWUuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqIDEgdHJhdmVsbGVyLCByb3VuZCB0cmlwIGFuZCBkaXJlY3QvdHJhbnNpdFxuICAgKi9cbiAgQElucHV0KCkgbGFzdFN1bW1hcnlTZXBhcmF0b3IgPSAnJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgdGl0bGUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0VGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIHRoZSBhZHVsdHMgcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RBZHVsdHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGNoaWxkcmVuIHBhc3NlbmdlciB0eXBlIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0Q2hpbGRyZW5MYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGluZmFudHMgcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RJbmZhbnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciB3aGVuIHRvdGFsIG51bWJlciBvZiBzZWxlY3RlZCBwYXNzZW5nZXJzIGV4Y2VlZHMgdGhlIGdyb3VwIGJvb2tpbmcgbGltaXRcbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwQm9va2luZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIGFsbCBhaXJwb3J0cyBpbiB0aGUgYWlycG9ydCBzZWxlY3QgZHJvcCBkb3duIGxpc3RzLlxuICAgKi9cbiAgQElucHV0KCkgYWxsQWlycG9ydHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgbGF0ZXN0IHNlYXJjaGVzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBsYXRlc3RTZWFyY2hlc0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBjbG9zZXN0IGFpcnBvcnRzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBjbG9zZXN0QWlycG9ydHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBkZXN0aW5hdGlvbiBpbnB1dCBmaWVsZCBpbiB0aGUgYWlycG9ydCBzZWxlY3QsIGlmIHRoZVxuICAgKiB1c2VyIHRyaWVzIHRvIHNlbGVjdCBhIGRlc3RpbmF0aW9uIGFpcnBvcnQgd2l0aG91dCBzZWxlY3RpbmcgYW4gb3JpZ2luIGFpcnBvcnQuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RPcmlnaW5GaXJzdExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgb3JpZ2luIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbE9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBwbGFjZWhvbGRlciB0aGF0IHdpbGwgYXBwZWFyIG9uIHRoZSBvcmlnaW4gYWlycG9ydCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyT3JpZ2luID0gJyc7XG5cbiAgLyoqXG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgZGVzdGluYXRpb24gYWlycG9ydCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsRGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbiBteSBsb2NhdGlvbiBpbiB0aGUgZHJvcCBkb3duIGxpc3QgaW4gYWlycG9ydCBzZWxlY3QuXG4gICAqL1xuICBASW5wdXQoKSBnZW9sb2NhdGlvbkxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgaW4gbXkgbG9jYXRpb24sIGluIHRoZSBkcm9wIGRvd24gbGlzdCBpbiBhaXJwb3J0IHNlbGVjdCBpZiB1c2VyIGhhcyBkZW5pZWQgZ2VvbG9jYXRpb24uXG4gICAqL1xuICBASW5wdXQoKSBnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBwbGFjZWhvbGRlciB0aGF0IHdpbGwgYXBwZWFyIG9uIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJEZXN0aW5hdGlvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0aGF0IHdpbGwgYWxsb3cgYWx3YXlzIGtlZXBpbmcgdGhlIHNlbGVjdGVkIGFpcnBvcnQuXG4gICAqIFRoZSBsYXN0IHNlbGVjdGVkIGFpcnBvcnQgd2lsbCBiZSBzaG93biBvbmNlIHVzZXIgY2xlYXJzIHRoZSBzZWxlY3Rpb24gYW5kIGJsdXIuXG4gICAqL1xuICBASW5wdXQoKSBrZWVwU2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSB0aXRsZSB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gZWRpdCBzZWFyY2ggYWNjb3JkaW9uLlxuICAgKi9cbiAgQElucHV0KCkgZWRpdFNlYXJjaFRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzIHRoZSBwYXJlbnQncyBmb3JtIGdyb3VwLlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCBpcyByZXF1aWVyZWQgdG8gYmUgZmlsbGVkIGlmIG5hc0Zvcm1Db250cm9sTmFtZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZU9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVPdXRib3VuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xHcm91cEJvb2tpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZVN1YnNpZHlEaXNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTWFrZSBsYXRlc3Qgc2VhcmNoZXMgYW5kIGdlb2xvY2F0aW9uIG92ZXJyaWRlIGRlZmF1bHQgdmFsdWUgaW4gdGhlIG9yaWdpbiBhaXJwb3J0IHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KCkgb3ZlcnJpZGVPcmlnaW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyB3aWxsIG1ha2UgdGhlIGZpbHRlciBkaXNwbGF5IHN1Z2dlc3RlZCBhaXJwb3J0cyBiYXNlZCBvbiBnZW9sb2NhdGlvbiBhbmQgbGF0ZXN0IHNlYXJjaGVzLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlU3VnZ2VzdGlvbnM/OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjbG9zZXN0QWlycG9ydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdEFpcnBvcnRzVmFsdWU7XG4gIH1cbiAgc2V0IGNsb3Nlc3RBaXJwb3J0cyhhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPikge1xuICAgIGlmICghYWlycG9ydHMgfHwgYWlycG9ydHMubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VzdEFpcnBvcnRzVmFsdWUgPSBhaXJwb3J0cztcblxuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLm92ZXJyaWRlT3JpZ2luKSkge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnRzWzBdLmNvZGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBvbmx5IGRpc3BsYXkgYWlycG9ydCBzZWxlY3Rpb24uIFdoZW4gYSBjaXR5IHBhaXIgaXMgc2VsZWN0ZWQsIHRoZSByZXN0IG9mIHRoZSBmaWx0ZXIgd2lsbCBiZSB2aXNpYmxlLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFsbCBhaXJwb3J0cyB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkIGludG8gdGhlIGRyb3Bkb3duIGxpc3RzLlxuICAgKiBJZiBkaXNwbGF5TGF0ZXN0U2VhcmNoZXMgaXMgdHJ1ZSwgaXQgd2lsbCB0cnkgdG8gZ2V0IHRoZSBsYXRlc3Qgc2VhcmNoZXMgZnJvbSB0aGUgYWJhbmRvbmVkIGJhc2tldC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhaXJwb3J0cygpIHtcbiAgICByZXR1cm4gdGhpcy5haXJwb3J0c1ZhbHVlO1xuICB9XG4gIHNldCBhaXJwb3J0cyhhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPikge1xuICAgIHRoaXMuYWlycG9ydHNWYWx1ZSA9IGFpcnBvcnRzO1xuXG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUxhdGVzdFNlYXJjaGVzKSkge1xuICAgICAgY29uc3QgYWJhbmRvbmVkQmFza2V0ID0gdGhpcy5hYmFuZG9uZWRCYXNrZXRTZXJ2aWNlLmdldEFsbCgpO1xuICAgICAgdGhpcy5zZXRMYXRlc3RTZWFyY2hlcyhhYmFuZG9uZWRCYXNrZXQsIHRoaXMuYWlycG9ydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB0aGUgc2VsZWN0ZWQgdHJpcCB0eXBlLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHRyaXBUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnRyaXBUeXBlVmFsdWU7XG4gIH1cbiAgc2V0IHRyaXBUeXBlKHRyaXBUeXBlOiBUcmlwVHlwZSkge1xuICAgIGlmICh0cmlwVHlwZSA9PT0gdGhpcy50cmlwVHlwZVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmlwVHlwZVZhbHVlID0gdHJpcFR5cGU7XG4gICAgdGhpcy50cmlwVHlwZUNoYW5nZS5lbWl0KHRoaXMudHJpcFR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHdoZXRoZXIgdGhlIHNlbGVjdGVkIHRyYW5zaXQgdHlwZSBpcyBkaXJlY3Qgb25seSBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlyZWN0T25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXJlY3RPbmx5VmFsdWU7XG4gIH1cbiAgc2V0IGRpcmVjdE9ubHkoZGlyZWN0T25seTogYm9vbGVhbikge1xuICAgIGlmIChkaXJlY3RPbmx5ID09PSB0aGlzLmRpcmVjdE9ubHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlyZWN0T25seVZhbHVlID0gZGlyZWN0T25seTtcbiAgICB0aGlzLmRpcmVjdE9ubHlDaGFuZ2UuZW1pdCh0aGlzLmRpcmVjdE9ubHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgbGltaXQgZm9yIHdoZW4gdGhlIHRvdGFsIGFtb3VudCBvZiBwYXNzZW5nZXJzIGV4Y2VlZHMgdG8gYmUgYSBncm91cCBib29raW5nLlxuICAgKi9cbiAgQElucHV0KCkgZ3JvdXBCb29raW5nTGltaXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFN1YnNpZHkgZGlzY291bnRzXG4gICAqL1xuICBASW5wdXQoKSBzdWJzaWR5RGlzY291bnRzOiBBcnJheTxTdWJzaWR5RGlzY291bnRNb2RlbD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBzdWJzaWR5IGRpc2NvdW50XG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZFN1YnNpZHlEaXNjb3VudDogU3Vic2lkeURpc2NvdW50TW9kZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTdWJzaWR5IGRpc2NvdW50IGxhYmVsXG4gICAqL1xuICBASW5wdXQoKSBzdWJzaWR5RGlzY291bnRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIHByZXZpb3VzIG1vbnRoIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxQcmV2aW91c01vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgbmV4dCBtb250aCBidXR0b24gaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsTmV4dE1vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbiBkcm9wZG93biBzZWxlY3RvciBvcGVucyBvciBjbG9zZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgb3JpZ2luT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgKiBAZGVzY3JpcHRpb25cbiAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbiBkcm9wZG93biBzZWxlY3RvciBvcGVucyBvciBjbG9zZXMuXG4gICovXG4gIEBPdXRwdXQoKSBkZXN0aW5hdGlvbk9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24gb3BlbnMgb3IgY2xvc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIHBhc3NlbmdlclNlbGVjdE9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGVkIG9yaWdpbiBhaXJwb3J0IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgb3JpZ2luQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgLyoqXG4gICogQGRlc2NyaXB0aW9uXG4gICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBzZWxlY3RlZCBkZXN0aW5hdGlvbiBhaXJwb3J0IGNoYW5nZXMuXG4gICovXG4gIEBPdXRwdXQoKSBkZXN0aW5hdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWlycG9ydE1vZGVsPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIGEgcGFzc2VuZ2VyIHNlbGVjdGlvbiBjaGFuZ2UgaXMgcGVyZm9ybWVkLlxuICAgKi9cbiAgQE91dHB1dCgpIHBhc3NlbmdlcnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFBhc3NlbmdlcnNNb2RlbD4+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHRoZSBzZWxlY3RlZCB0cmlwIHR5cGUuXG4gICAqL1xuICBAT3V0cHV0KCkgdHJpcFR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRyaXBUeXBlPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB3aGV0aGVyIHRoZSBzZWxlY3RlZCB0cmFuc2l0IHR5cGUgaXMgZGlyZWN0IG9ubHkgb3Igbm90LlxuICAgKi9cbiAgQE91dHB1dCgpIGRpcmVjdE9ubHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3Igbm8gYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBub0F2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlRmxpZ2h0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNhYmxlIHBvc3NpYmlsaXR5IHRvIHNlbGVjdCBkYXRlcyBpbiB0aGUgcGFzdC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVQYXN0U2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG91dGJvdW5kIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgaW5ib3VuZCBkYXRlcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgaW5ib3VuZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBkYXRlcGlja2VycyBpbiBhdmFpbGFiaWxpdHkgbW9kZSB3aGVyZSBhdmFpbGFibGUgZGF0ZXMgY2FuIGJlIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmlsaXR5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQXZhaWxhYmxlIGRhdGVzIGZvciBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIG91dGJvdW5kQXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQXZhaWxhYmxlIGRhdGVzIGZvciBpbmJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgaW5ib3VuZEF2YWlsYWJsZURhdGVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIElmIHNldCwgRW5hYmxlcyB0aGUgdGltZSBkcm9wZG93biBzZWxlY3RvciBhbG9uZ3NpZGUgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIHRpbWVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBkaXNwbGF5IGZvcm1hdCBvZiB0aGUgZGF0ZSB3aGVuIHVzZXIgaGFzIHNlbGVjdGVkIHRoZSBkYXRlIGFuZCBpdCBpcyBiZWluZyBzaG93biBpbiB0aGUgaW5wdXQgYm94IGZvciB0aGUgZGF0ZSBwaWNrZXIuXG4gICAqIFBsZWFzZSBsb29rIGF0IHRoZSBhbmd1bGFyIERhdGUgcGlwZSBmb3IgdmFsaWQgZm9ybWF0cyBhbmQgdmFyaWF0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGVEaXNwbGF5Rm9ybWF0ID0gJ0VFRUUgZCwgTU1NTSB5eXl5JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSB0aW1lIGRpc3BsYXkgZm9ybWF0LlxuICAgKi9cbiAgQElucHV0KCkgdGltZURpc3BsYXlGb3JtYXQgPSAnSEg6bW0nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsb2NhbGUgY29kZSBmb3IgdGhlIGxvY2FsZSBmb3JtYXQgcnVsZXMgdG8gdXNlLiBXaGVuIG5vdCBzdXBwbGllZCwgdXNlcyB0aGUgdmFsdWUgb2YgTE9DQUxFX0lELCB3aGljaCBpcyBlbi1VUyBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHJlcXVpcmVzIHRoYXQgcmVnaXN0ZXJMb2NhbGVEYXRhIGlzIGNhbGxlZCB3aXRoIHRoZSByZXNwZWN0aXZlIGxvY2FsZS5cbiAgICovXG4gIEBJbnB1dCgpIGxvY2FsZSA9ICdlbi1HQic7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIG1vZGlmaWVyIHRvIHJlbW92ZSB0aGUgcGFkZGluZyBhbmQgbWFyZ2lucyBhcm91bmQgdGhlIGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBjb21wYWN0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3Qgb3V0Ym91bmQgZGF0ZXMuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZERpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgaW5ib3VuZCBkYXRlcy5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmREaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNob3cvQWRkIGRhdGUgcGlja2VyIGNvbWJvIGludG8gdGhlIGZpbHRlciBpZiBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZURhdGVwaWNrZXJzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xlIGljb24gZm9yIG1pbmltaXppbmcgZmlsdGVyLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemluZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIHRoZSB0b2dnbGUgaWNvbiBmb3IgbWF4aW1pemluZyBmaWx0ZXIuXG4gICAqL1xuICBASW5wdXQoKSBtYXhpbWl6aW5nTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgdGhlIHRvZ2dsaW5nIHRyYW5zaXQgdHlwZSB3aGVuIGZpbHRlciBpcyBtaW5pbWl6ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXJlY3RPbmx5TW9iaWxlTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciAnb3InIGluIHRoZSBzdWdnZXN0aW9uZWQgYWlycG9ydHMuXG4gICAqL1xuICBASW5wdXQoKSBvckxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHRleHQgdGhhdCBhcHBlYXJzIGluIHRoZSBkZXN0aW5hdGlvbnMgZHJvcGRvd24gbGlzdCB3aGVuIG9yaWdpbiBhaXJwb3J0IGlzIG5vdCBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBpbnZhbGlkRGVzdGluYXRpb25UZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIG91dGJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub3V0Ym91bmRTZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNlbGVjdGVkIGRhdGVmb3IgaW5ib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBpbmJvdW5kU2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRTZWxlY3RlZERhdGVWYWx1ZTtcbiAgfVxuICBzZXQgaW5ib3VuZFNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluYm91bmRTZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICB0aGlzLmluYm91bmRTZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSBkZXN0aW5hdGlvbiBpbnB1dCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gICBASW5wdXQoKSBlbmFibGVEZXN0aW5hdGlvblNlbGVjdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgcGFzc2VuZ2VyIHNlbGVjdCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVBhc3NlbmdlcnNTZWxlY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSB0cmlwIHN3aXRjaCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVRyaXBTd2l0Y2ggPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSB0cmFuc2l0IHN3aXRjaCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVRyYW5zaXRTd2l0Y2ggPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBzZWxlY3RlZCBkYXRlaGFzIGJlZW4gY2hhbmdlZCBvbiB0aGUgb3V0Ym91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBAT3V0cHV0KCkgb3V0Ym91bmRTZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIHNlbGVjdGVkIGRhdGVoYXMgYmVlbiBjaGFuZ2VkIG9uIHRoZSBpbmJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRTZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE91dGJvdW5kIGRhdGVwaWNrZXIgaXMgb3BlbiBvciBjbG9zZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb3V0Ym91bmRPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5ib3VuZCBkYXRlcGlja2VyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgY2FsZW5kYXIgY2hhbmdlcyBtb250aC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5ib3VuZCBjYWxlbmRhciBjaGFuZ2VzIG1vbnRoLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRNb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGdlb2xvY2F0aW9uIG9mIHRoZSB1c2VyLiBXaWxsIGJlIGVtaXR0ZWQgaWYgJ2VuYWJsZVN1Z2dlc3Rpb25zJyBpcyB0cnVlLlxuICAgKi9cbiAgQE91dHB1dCgpIHBvc2l0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9sb2NhdGlvblBvc2l0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbiB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIGluZm8gYnV0dG9uIG9uIHRoZSBzdWJzaWR5IGRpc2NvdW50IGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgc3Vic2lkeURpc2NvdW50SW5mb0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGdldCBpbmJvdW5kU2VsZWN0ZWRNb250aCgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlO1xuICB9XG4gIHNldCBpbmJvdW5kU2VsZWN0ZWRNb250aChtb250aDogVXRjRGF0ZSkge1xuICAgIGlmICh0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKG1vbnRoLCB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluYm91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgICAgIHRoaXMuaW5ib3VuZFNlbGVjdGVkTW9udGhWYWx1ZSA9IG1vbnRoO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGluYm91bmRTZWxlY3RlZERhdGVWYWx1ZTogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBpbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGFpcnBvcnRzVmFsdWU6IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIHByaXZhdGUgdHJpcFR5cGVWYWx1ZTogVHJpcFR5cGU7XG4gIHByaXZhdGUgZGlyZWN0T25seVZhbHVlOiBib29sZWFuO1xuICBwcml2YXRlIGV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgY2xvc2VzdEFpcnBvcnRzVmFsdWU6IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIHByaXZhdGUgb3V0Ym91bmRPcGVuVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbmJvdW5kT3BlblZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcGFzc2VuZ2Vyc1ZhbHVlID0gbmV3IEFycmF5PFBhc3NlbmdlcnNNb2RlbD4oKTtcbiAgcHJpdmF0ZSBmb2N1c0FzeW5jVGltb3V0OiBhbnk7XG4gIHByaXZhdGUgdHJhbnNpdFN3aXRjaEZvY3VzVGltZW91dDogYW55O1xuICBwcml2YXRlIHRyaXBTd2l0Y2hGb2N1c1RpbWVvdXQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGV2aWNlSGVscGVyOiBEZXZpY2VIZWxwZXIsXG4gICAgcHJpdmF0ZSBzb3J0U2VydmljZTogU29ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhYmFuZG9uZWRCYXNrZXRTZXJ2aWNlOiBBYmFuZG9uZWRCYXNrZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVNlcnZpY2U6IERhdGVIZWxwZXIsXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcignbmFzLWZpbHRlcicpO1xuICAgIHRoaXMubmF0aXZlRWxlbWVudCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5uYXNGb3JtR3JvdXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm5hc0Zvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTmFzR3JvdXBWYWxpZCA9ICgvdHJ1ZS9pKS50ZXN0KHgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICBjb25zdCBkaXJlY3RPbmx5Q29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpO1xuXG4gICAgICBpZiAoZGlyZWN0T25seUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5kaXJlY3RPbmx5ID0gZGlyZWN0T25seUNvbnRyb2wudmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGUpIHtcbiAgICAgIGNvbnN0IHRyaXBUeXBlQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlKTtcblxuICAgICAgaWYgKHRyaXBUeXBlQ29udHJvbCkge1xuICAgICAgICB0aGlzLnRyaXBUeXBlID0gdHJpcFR5cGVDb250cm9sLnZhbHVlO1xuICAgICAgICB0aGlzLmluYm91bmREaXNhYmxlZCA9IHRyaXBUeXBlQ29udHJvbC52YWx1ZSA9PT0gVHJpcFR5cGUub25lV2F5O1xuXG4gICAgICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmQpIHtcbiAgICAgICAgICBjb25zdCBpbmJvdW5kQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmQpO1xuXG4gICAgICAgICAgaWYgKGluYm91bmRDb250cm9sICYmIHRoaXMuaW5ib3VuZERpc2FibGVkKSB7XG4gICAgICAgICAgICBpbmJvdW5kQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJpcFR5cGVDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBUcmlwVHlwZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5ib3VuZERpc2FibGVkID0gdmFsdWUgPT09IFRyaXBUeXBlLm9uZVdheTtcbiAgICAgICAgICB0aGlzLnRyaXBUeXBlID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgIGNvbnN0IGRpcmVjdE9ubHlDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seSk7XG4gICAgICBpZiAoZGlyZWN0T25seUNvbnRyb2wpIHtcbiAgICAgICAgZGlyZWN0T25seUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICB0aGlzLmRpcmVjdE9ubHkgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuXG4gICAgdGhpcy5jb250YWluZXJXaWR0aC5uZXh0KCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5vZmZzZXRXaWR0aCk7XG5cbiAgICB3aW5kb3cub25yZXNpemUgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lcldpZHRoLm5leHQoKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoKTtcbiAgICB9O1xuICB9XG5cbiAgb25TdWJzaWR5RGlzY291bnRJbmZvQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzaWR5RGlzY291bnRJbmZvQ2xpY2suZW1pdCgpO1xuICB9XG5cbiAgb25TdWJzaWR5RGlzY291bnRTZWxlY3RDaGFuZ2UobW9kZWw6IFN1YnNpZHlEaXNjb3VudE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm5hc0Zvcm1Hcm91cCB8fCAhdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVTdWJzaWR5RGlzY291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzaWR5RGlzY291bnRDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lU3Vic2lkeURpc2NvdW50KTtcbiAgICBzdWJzaWR5RGlzY291bnRDb250cm9sLnBhdGNoVmFsdWUobW9kZWwpO1xuICB9XG5cbiAgZ2V0Q2xvc2VzdEFpcnBvcnRzKHBvc2l0aW9uOiBHZW9sb2NhdGlvblBvc2l0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5wb3NpdGlvbkNoYW5nZS5lbWl0KHBvc2l0aW9uKTtcbiAgfVxuXG4gIGdldEZpbHRlckNsYXNzKGVsZW1lbnQ/OiBzdHJpbmcsIG1vZGlmaWVyc0lucHV0PzogYW55KTogQ2xhc3NNb2RlbCB7XG4gICAgbGV0IG1vZGlmaWVycyA9IG1vZGlmaWVyc0lucHV0IHx8IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBpZiAodHlwZW9mIG1vZGlmaWVyc0lucHV0ID09PSAnc3RyaW5nJyB8fCBtb2RpZmllcnNJbnB1dCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgbW9kaWZpZXJzID0gW21vZGlmaWVyc0lucHV0XTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aHMgPSBbXTtcblxuICAgIGlmICh0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkpIHtcbiAgICAgIHdpZHRocy5wdXNoKCdtZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoRGVza3RvcCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpKSB7XG4gICAgICB3aWR0aHMucHVzaCgnbGcnKTtcbiAgICB9XG5cbiAgICBtb2RpZmllcnMgPSBbLi4ubW9kaWZpZXJzLCAuLi53aWR0aHNdO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoZWxlbWVudCwgbW9kaWZpZXJzKTtcbiAgfVxuXG4gIGdldEFpcnBvcnRTZWxlY3RDbGFzcygpOiBDbGFzc01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzcyhcbiAgICAgICdhaXJwb3J0LXNlbGVjdCcsXG4gICAgICBbXG4gICAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJyxcbiAgICAgICAgdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aFRhYmxldCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpICYmICdtZCcsXG4gICAgICAgIHRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpICYmICduby1ib3JkZXInXG4gICAgICBdKTtcbiAgfVxuXG4gIGdldFN1Z2dlc3Rpb25zKCk6IEFycmF5PEFpcnBvcnRNb2RlbD4ge1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuZnJvbShuZXcgU2V0KFtcbiAgICAgIC4uLnRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4gPyB0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luLmZpbHRlcih4ID0+IHguY29kZSAhPT0gdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSkgOiBbXSxcbiAgICAgIC4uLnRoaXMuY2xvc2VzdEFpcnBvcnRzID8gdGhpcy5jbG9zZXN0QWlycG9ydHMuZmlsdGVyKHggPT4geC5jb2RlICE9PSB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlKSA6IFtdXG4gICAgXSkpO1xuXG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgZ2V0RGF0ZVBpY2tlcnNDbGFzcygpOiBDbGFzc01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJDbGFzcygnZGF0ZS1jb21ibycsIFtcbiAgICAgIHRoaXMuZXhpc3RzKHRoaXMubWluaW1pemUpICYmICdtaW5pbWl6ZWQnLFxuICAgICAgdGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpID4gNTAwICYmICdzaWRlLWJ5LXNpZGUnXG4gICAgXSk7XG4gIH1cblxuICBnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoZWxlbWVudD86IHN0cmluZywgbW9kaWZpZXJzSW5wdXQ/OiBhbnkpOiBDbGFzc01vZGVsIHtcbiAgICBsZXQgbW9kaWZpZXJzID0gbW9kaWZpZXJzSW5wdXQgfHwgbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGlmICh0eXBlb2YgbW9kaWZpZXJzSW5wdXQgPT09ICdzdHJpbmcnIHx8IG1vZGlmaWVyc0lucHV0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBtb2RpZmllcnMgPSBbbW9kaWZpZXJzSW5wdXRdO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRocyA9IFtcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbWQnLFxuICAgICAgdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aERlc2t0b3AodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbGcnXG4gICAgXTtcblxuICAgIG1vZGlmaWVycyA9IFsuLi5tb2RpZmllcnMsIC4uLndpZHRoc107XG5cbiAgICBjb25zdCB0cmF2ZWxEZXRhaWxzQmFzZSA9IG5ldyBOYXNDb21wb25lbnRCYXNlKCd0cmF2ZWwtZGV0YWlscycpO1xuICAgIHJldHVybiB0cmF2ZWxEZXRhaWxzQmFzZS5nZXRDbGFzcyhlbGVtZW50LCBtb2RpZmllcnMpO1xuICB9XG5cbiAgb25JbmJvdW5kTW9udGhDaGFuZ2UobW9udGg6IFV0Y0RhdGUpOiB2b2lkIHtcbiB0aGlzLmluYm91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbn1cbiAgb25PdXRib3VuZE1vbnRoQ2hhbmdlKG1vbnRoOiBVdGNEYXRlKTogdm9pZCB7XG4gdGhpcy5vdXRib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xufVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMudHJhbnNpdFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXREaXNwbGF5KCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0UHJldmlvdXNDb250cm9sKCk7XG4gICAgfVxuICB9XG5cbiAgcGFzc2VuZ2VyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSB8fCB0aGlzLmlzVGFibGV0RGlzcGxheSgpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgICAgIGlmICh0aGlzLnN1YnNpZHlEaXNjb3VudHMgJiYgdGhpcy5zdWJzaWR5RGlzY291bnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2lkeURpc2NvdW50LmluZm9CdXR0b24uYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgfHwgdGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKGZhbHNlKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblRyaXBTd2l0Y2hLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50cmlwVHlwZVJvdW5kVHJpcC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlwVHlwZU9uZXdheS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50cmlwVHlwZU9uZXdheS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlwVHlwZVJvdW5kVHJpcC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkgfHwgIXRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJldmlvdXNDb250cm9sKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gub3Blbikge1xuICAgICAgICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyYW5zaXRTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4oZmFsc2UpO1xuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNpdEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyYW5zaXRUeXBlVHJhbnNpdC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0VHlwZURpcmVjdE9ubHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJhbnNpdFR5cGVEaXJlY3RPbmx5Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRUeXBlVHJhbnNpdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgICB0aGlzLmZvY3VzQXN5bmMoPGFueT50aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25UcmFuc2l0U3dpdGNoT3BlbighdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzaWR5RGlzY291bnRzICYmIHRoaXMuc3Vic2lkeURpc2NvdW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3Vic2lkeURpc2NvdW50LmluZm9CdXR0b24uYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKGZhbHNlKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyYW5zaXRTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uU3Vic2lkeURpc2NvdW50SW5mb0J1dHRvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy50cmFuc2l0U3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25OZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICB0aGlzLmZvY3VzQXN5bmMoPGFueT50aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNBc3luYyhyZWZFbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNBc3luY1RpbW91dCk7XG5cbiAgICB0aGlzLmZvY3VzQXN5bmNUaW1vdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQocmVmRWxlbWVudCkpO1xuICB9XG5cbiAgb25EYXRlcGlja2VyRm9jdXNPblByZXZpb3VzKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLmZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk7XG4gIH1cblxuICBzZWxlY3RQcmV2aW91c0NvbnRyb2woKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPbmx5KSB7XG4gICAgICAgIHRoaXMub3V0Ym91bmRPcGVuID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5ib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICBpZiAodGhpcy5leGlzdHModGhpcy5haXJwb3J0U2VsZWN0LmNvbWJvKSkge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25EZXN0aW5hdGlvbk9wZW4odHJ1ZSk7XG4gICAgICAgIGlmICgoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duRGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKCg8YW55PnRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25EZXN0aW5hdGlvbikuaW5wdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25PcmlnaW5PcGVuKHRydWUpO1xuICAgICAgICBpZiAoKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbikpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbikuaW5wdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBvbkZvY3VzT25OZXh0Q2hhbmdlKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpICYmIHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgdGhpcy5vblRyaXBTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXREaXNwbGF5KCkpIHtcbiAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi50b2dnbGVFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNNb2JpbGVEaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoTW9iaWxlKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBpc1RhYmxldERpc3BsYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIG9uT3JpZ2luT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24ub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAhdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG5cbiAgICB0aGlzLm9yaWdpbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdmFsaWRhdGVBaXJwb3J0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uO1xuICAgIGlmICgob3JpZ2luU25hcHNob3QgJiYgZGVzdGluYXRpb25TbmFwc2hvdCAmJiBvcmlnaW5TbmFwc2hvdC5jb2RlICYmIG9yaWdpblNuYXBzaG90LmNvZGUubGVuZ3RoXG4gICAgICAmJiBkZXN0aW5hdGlvblNuYXBzaG90LmNvZGUgJiYgZGVzdGluYXRpb25TbmFwc2hvdC5jb2RlLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB1cGRhdGVNYXhpbWl6ZSgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubWF4aW1pemUgPSB0aGlzLnZhbGlkYXRlQWlycG9ydFZhbHVlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgb25EZXN0aW5hdGlvbk9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG4gICAgdGhpcy5kZXN0aW5hdGlvbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2VyU2VsZWN0T3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3Blbikge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3Blbikge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBvcGVuO1xuICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0T3BlbkNoYW5nZS5lbWl0KG9wZW4pO1xuXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3QubnVtYmVyRmllbGRzLmZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3QubnVtYmVyRmllbGRzLmZpcnN0LmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH1cblxuICBvblRyaXBTd2l0Y2hPcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50cmlwU3dpdGNoRm9jdXNUaW1lb3V0KTtcblxuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi5vcGVuID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IG9wZW47XG5cbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy50cmlwU3dpdGNoRm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpcFR5cGVSb3VuZFRyaXAubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBvblRyYW5zaXRTd2l0Y2hPcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50cmFuc2l0U3dpdGNoRm9jdXNUaW1lb3V0KTtcblxuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBvcGVuO1xuICAgIH1cblxuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2hGb2N1c1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2l0VHlwZVRyYW5zaXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBvbk9yaWdpbkNoYW5nZShhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLm9yaWdpbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIGlmICghYWlycG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25PcmlnaW5DaGFuZ2UoYWlycG9ydCk7XG5cbiAgICBpZiAodGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9PT0gYWlycG9ydC5jb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRGVzdGluYXRpb25DaGFuZ2UoYWlycG9ydDogQWlycG9ydE1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0Rm9jdXNPblBhc3NlbmdlclNlbGVjdChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMubWluaW1pemUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5kYXRlcGlja2VyQ29tYm8uZGF0ZXBpY2tlck91dGJvdW5kKS5pbnB1dCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXREaXNwbGF5KCkgJiYgdGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm91dGJvdW5kT3BlbiA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcblxuICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3Blbih0cnVlKTtcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRSZWYgPSB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQ7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudChjdXJyZW50RWxlbWVudFJlZikpO1xuXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuXG4gICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgdGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQoZWxlbWVudDogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25UcmlwVHlwZUNoYW5nZSh0cmlwVHlwZTogVHJpcFR5cGUpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyaXBUeXBlID0gdHJpcFR5cGU7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgY29uc3QgdHJpcFN3aXRjaENvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSk7XG4gICAgICB0cmlwU3dpdGNoQ29udHJvbC5wYXRjaFZhbHVlKHRyaXBUeXBlKTtcbiAgICB9XG4gIH1cblxuICBvblRyYW5zaXRDaGFuZ2UoZGlyZWN0T25seTogYm9vbGVhbik6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGlyZWN0T25seSA9IGRpcmVjdE9ubHk7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICBjb25zdCB0cmlwVHlwZUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KTtcbiAgICAgIHRyaXBUeXBlQ29udHJvbC5wYXRjaFZhbHVlKGRpcmVjdE9ubHkpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRyYXZlbERldGFpbHNUcmlwU3dpdGNoSWNvbkNsYXNzKG1vZGlmaWVycz86IGFueSk6IEFycmF5PENsYXNzTW9kZWw+IHtcbiAgICBjb25zdCBpY29uTWVkaXVtQmFzZSA9IG5ldyBOYXNDb21wb25lbnRCYXNlKCdpY29uLW1lZGl1bScpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIGljb25NZWRpdW1CYXNlLmdldENsYXNzKCcnLCBtb2RpZmllcnMpLFxuICAgICAgdGhpcy5nZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2ljb24nKVxuICAgIF07XG4gIH1cblxuICBnZXRUcmlwU3dpdGNoTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmlwVHlwZSA9PT0gVHJpcFR5cGUudHdvV2F5UmV0dXJuID8gdGhpcy50cmlwU3dpdGNoUm91bmRUcmlwTGFiZWwgOiB0aGlzLnRyaXBTd2l0Y2hPbmVXYXlMYWJlbDtcbiAgfVxuXG4gIGdldFRyYW5zaXRMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdE9ubHkgPyB0aGlzLmRpcmVjdE9ubHlMYWJlbCA6IHRoaXMuZGlyZWN0VHJhbnNpdExhYmVsO1xuICB9XG5cbiAgb25BY2NvcmRpb25Ub2dnbGVDaGFuZ2UoZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlTdW1tYXJ5ID0gIWV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0U3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnBhc3NlbmdlclNlbGVjdExhYmVsfSR7dGhpcy5kZWZhdWx0U3VtbWFyeVNlcGFyYXRvcn1gICtcbiAgICAgIGAke3RoaXMuZ2V0VHJpcFN3aXRjaExhYmVsKCkudG9Mb3dlckNhc2UoKX0ke3RoaXMubGFzdFN1bW1hcnlTZXBhcmF0b3J9JHt0aGlzLmdldFRyYW5zaXRMYWJlbCgpLnRvTG93ZXJDYXNlKCl9YDtcbiAgfVxuXG4gIHNob3VsZE1heGltaXplKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5leGlzdHModGhpcy5taW5pbWl6ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5haXJwb3J0U2VsZWN0XG4gICAgICAmJiB0aGlzLmVuYWJsZURlc3RpbmF0aW9uU2VsZWN0XG4gICAgICAmJiB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luXG4gICAgICAmJiB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luLmNvZGVcbiAgICAgICYmIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvblxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uLmNvZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5haXJwb3J0U2VsZWN0XG4gICAgICAmJiAhdGhpcy5lbmFibGVEZXN0aW5hdGlvblNlbGVjdFxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpblxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbi5jb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAodGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gfHwgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbikpIHtcbiAgICAgIHJldHVybiB0aGlzLm1heGltaXplO1xuICAgIH0gZWxzZSBpZiAodGhpcy5leGlzdHModGhpcy5taW5pbWl6ZSkpIHtcbiAgICAgIGlmICh0aGlzLm1heGltaXplKSB7XG4gICAgICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzTmFzR3JvdXBWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmFpcnBvcnRTZWxlY3QuY29tYm8pKSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25EZXN0aW5hdGlvbk9wZW4odHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDEwMCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9uT3JpZ2luT3Blbih0cnVlKTtcbiAgICAgIHRoaXMuZm9jdXNBc3luYygoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duT3JpZ2luKS5pbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMYXRlc3RTZWFyY2hlcyhhYmFuZG9uZWRCYXNrZXQ6IEFycmF5PEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbD4sIGFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+KTogdm9pZCB7XG4gICAgaWYgKCFhYmFuZG9uZWRCYXNrZXQgfHwgIWFpcnBvcnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdW5pcXVlID0gbmV3IEFycmF5PEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbD4oKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhYmFuZG9uZWRCYXNrZXQpIHtcbiAgICAgIGlmICghdW5pcXVlLnNvbWUoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZSA9PT0gaXRlbS5kZXN0aW5hdGlvbkNvZGUpKSB7XG4gICAgICAgIHVuaXF1ZS5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbkNvZGVzID0gdW5pcXVlLm1hcCh4ID0+IHgub3JpZ2luQ29kZSk7XG4gICAgY29uc3QgZGVzdGluYXRpb25Db2RlcyA9IHVuaXF1ZS5tYXAoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZSk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc09yaWdpbiA9IGFpcnBvcnRzLmZpbHRlcihhaXJwb3J0ID0+IHVuaXF1ZS5zb21lKHggPT4geC5vcmlnaW5Db2RlLnRvTG93ZXJDYXNlKCkgPT09IGFpcnBvcnQuY29kZS50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uID0gYWlycG9ydHMuZmlsdGVyKGFpcnBvcnQgPT4gdW5pcXVlLnNvbWUoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZS50b0xvd2VyQ2FzZSgpID09PSBhaXJwb3J0LmNvZGUudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgY29uc3QgY29kZSA9ICdjb2RlJztcbiAgICB0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luID0gdGhpcy5zb3J0U2VydmljZS5zb3J0QnlPYmplY3QobGF0ZXN0U2VhcmNoZXNPcmlnaW4sIG9yaWdpbkNvZGVzLCBjb2RlKS5zbGljZSgwLCAzKTtcblxuICAgIGlmICh0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luICYmIHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4ubGVuZ3RoID4gMCAmJiB0aGlzLmV4aXN0cyh0aGlzLm92ZXJyaWRlT3JpZ2luKSkge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW5bMF0uY29kZTtcbiAgICB9XG5cbiAgICB0aGlzLmxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnRCeU9iamVjdChsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbkNvZGVzLCBjb2RlKS5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEcm9wZG93bnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24ub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuYXMtYWNjb3JkaW9uICpuZ0lmPVwiZGV2aWNlSGVscGVyPy5pc01vYmlsZSgpICYmIGV4aXN0cyhtaW5pbWl6ZU9uTW9iaWxlKTsgZWxzZSBmaWx0ZXJUZW1wbGF0ZVwiXG4gIHNpbXBsZVxuICBjb250YWluZXJPblRvZ2dsZVxuICB0cmFuc3BhcmVudFxuICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVcIlxuICBbdGl0bGVdPVwiZWRpdFNlYXJjaFRpdGxlXCJcbiAgKHRvZ2dsZUNoYW5nZSk9XCJvbkFjY29yZGlvblRvZ2dsZUNoYW5nZSgkZXZlbnQpXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9uYXMtYWNjb3JkaW9uPlxuPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiXG4gICpuZ0lmPVwiZGV2aWNlSGVscGVyPy5pc01vYmlsZSgpICYmIGV4aXN0cyhtaW5pbWl6ZU9uTW9iaWxlKSAmJiBkaXNwbGF5U3VtbWFyeVwiPnt7Z2V0U3VtbWFyeSgpfX08L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZT5cbiAgPGRpdiAjY29udGFpbmVyXG4gICAgW25hc0NsYXNzXT1cImdldENvbnRhaW5lckNsYXNzKClcIj5cbiAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRGaWx0ZXJDbGFzcygnZmlsdGVycycsIFtleGlzdHMobWluaW1pemUpICYmICdtaW5pbWl6ZWQnLCBtYXhpbWl6ZSAmJiAnbWF4aW1pemUnXSlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhaXJwb3J0cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bmFzLWFpcnBvcnQtc2VsZWN0ICpuZ0lmPVwiYWlycG9ydHMgJiYgYWlycG9ydFJlbGF0aW9ucyAmJiAoZW5hYmxlRGVzdGluYXRpb25TZWxlY3QpXCJcbiAgICAgICAgICAjYWlycG9ydFNlbGVjdFxuICAgICAgICAgIGNvbWJvXG4gICAgICAgICAgW2FyaWFMYWJlbENsZWFyXT1cImFyaWFMYWJlbENsZWFyXCJcbiAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luXT1cIm5hc0Zvcm1Db250cm9sTmFtZU9yaWdpblwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uXT1cIm5hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uXCJcbiAgICAgICAgICBbdXNlU3dpdGNoXT1cInVzZVN3aXRjaFwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEFpcnBvcnRTZWxlY3RDbGFzcygpXCJcbiAgICAgICAgICBbYWlycG9ydHNdPVwiYWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkT3JpZ2luQWlwb3J0c109XCJhbGxvd2VkT3JpZ2luQWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0c109XCJhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0c1wiXG4gICAgICAgICAgW2FpcnBvcnRSZWxhdGlvbnNdPVwiYWlycG9ydFJlbGF0aW9uc1wiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzT3JpZ2luXT1cImxhdGVzdFNlYXJjaGVzT3JpZ2luXCJcbiAgICAgICAgICBbbGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbl09XCJsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uXCJcbiAgICAgICAgICBbZGlzcGxheUxhdGVzdFNlYXJjaGVzXT1cImRpc3BsYXlMYXRlc3RTZWFyY2hlc1wiXG4gICAgICAgICAgW2Rpc3BsYXlDbG9zZXN0QWlycG9ydHNdPVwiZGlzcGxheUNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW29yaWdpbkFpcnBvcnRDb2RlXT1cIm9yaWdpbkFpcnBvcnRDb2RlXCJcbiAgICAgICAgICBbZGVzdGluYXRpb25BaXJwb3J0Q29kZV09XCJkZXN0aW5hdGlvbkFpcnBvcnRDb2RlXCJcbiAgICAgICAgICBbYWxsQWlycG9ydHNMYWJlbF09XCJhbGxBaXJwb3J0c0xhYmVsXCJcbiAgICAgICAgICBbbGF0ZXN0U2VhcmNoZXNMYWJlbF09XCJsYXRlc3RTZWFyY2hlc0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzTGFiZWxdPVwiY2xvc2VzdEFpcnBvcnRzTGFiZWxcIlxuICAgICAgICAgIFtjbG9zZXN0QWlycG9ydHNdPVwiY2xvc2VzdEFpcnBvcnRzXCJcbiAgICAgICAgICBbc2VsZWN0T3JpZ2luRmlyc3RMYWJlbF09XCJzZWxlY3RPcmlnaW5GaXJzdExhYmVsXCJcbiAgICAgICAgICBbbGFiZWxPcmlnaW5dPVwibGFiZWxPcmlnaW5cIlxuICAgICAgICAgIFtwbGFjZWhvbGRlck9yaWdpbl09XCJwbGFjZWhvbGRlck9yaWdpblwiXG4gICAgICAgICAgW2xhYmVsRGVzdGluYXRpb25dPVwibGFiZWxEZXN0aW5hdGlvblwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uTGFiZWxdPVwiZ2VvbG9jYXRpb25MYWJlbFwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uQmxvY2tlZExhYmVsXT1cImdlb2xvY2F0aW9uQmxvY2tlZExhYmVsXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJEZXN0aW5hdGlvbl09XCJwbGFjZWhvbGRlckRlc3RpbmF0aW9uXCJcbiAgICAgICAgICBba2VlcFNlbGVjdGlvbl09XCJrZWVwU2VsZWN0aW9uXCJcbiAgICAgICAgICBbaW52YWxpZERlc3RpbmF0aW9uVGV4dF09XCJpbnZhbGlkRGVzdGluYXRpb25UZXh0XCJcbiAgICAgICAgICAob3JpZ2luQ2hhbmdlKT1cInNldFNlbGVjdGVkT3JpZ2luQWlycG9ydCgkZXZlbnQpXCJcbiAgICAgICAgICAoZGVzdGluYXRpb25DaGFuZ2UpPVwib25EZXN0aW5hdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAoZm9jdXNPbk5leHQpPVwic2V0Rm9jdXNPblBhc3NlbmdlclNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAob3JpZ2luT3BlbkNoYW5nZSk9XCJvbk9yaWdpbk9wZW4oJGV2ZW50KVwiXG4gICAgICAgICAgKGRlc3RpbmF0aW9uT3BlbkNoYW5nZSk9XCJvbkRlc3RpbmF0aW9uT3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAocG9zaXRpb25DaGFuZ2UpPVwiZ2V0Q2xvc2VzdEFpcnBvcnRzKCRldmVudClcIj48L25hcy1haXJwb3J0LXNlbGVjdD5cbiAgICAgICAgPG5hcy1haXJwb3J0LXNlbGVjdCAqbmdJZj1cImFpcnBvcnRzICYmICghZW5hYmxlRGVzdGluYXRpb25TZWxlY3QpXCJcbiAgICAgICAgICAjYWlycG9ydFNlbGVjdFxuICAgICAgICAgIFthcmlhTGFiZWxDbGVhcl09XCJhcmlhTGFiZWxDbGVhclwiXG4gICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU9yaWdpbl09XCJuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW5cIlxuICAgICAgICAgIFt1c2VTd2l0Y2hdPVwidXNlU3dpdGNoXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2FpcnBvcnQtb3JpZ2luLXNlbGVjdCcpXCJcbiAgICAgICAgICBbYWlycG9ydHNdPVwiYWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkT3JpZ2luQWlwb3J0c109XCJhbGxvd2VkT3JpZ2luQWlycG9ydHNcIlxuICAgICAgICAgIFthaXJwb3J0UmVsYXRpb25zXT1cImFpcnBvcnRSZWxhdGlvbnNcIlxuICAgICAgICAgIFtsYXRlc3RTZWFyY2hlc09yaWdpbl09XCJsYXRlc3RTZWFyY2hlc09yaWdpblwiXG4gICAgICAgICAgW2Rpc3BsYXlMYXRlc3RTZWFyY2hlc109XCJkaXNwbGF5TGF0ZXN0U2VhcmNoZXNcIlxuICAgICAgICAgIFtkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXT1cImRpc3BsYXlDbG9zZXN0QWlycG9ydHNcIlxuICAgICAgICAgIFtvcmlnaW5BaXJwb3J0Q29kZV09XCJvcmlnaW5BaXJwb3J0Q29kZVwiXG4gICAgICAgICAgW2FsbEFpcnBvcnRzTGFiZWxdPVwiYWxsQWlycG9ydHNMYWJlbFwiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzTGFiZWxdPVwibGF0ZXN0U2VhcmNoZXNMYWJlbFwiXG4gICAgICAgICAgW2Nsb3Nlc3RBaXJwb3J0c0xhYmVsXT1cImNsb3Nlc3RBaXJwb3J0c0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzXT1cImNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW3NlbGVjdE9yaWdpbkZpcnN0TGFiZWxdPVwic2VsZWN0T3JpZ2luRmlyc3RMYWJlbFwiXG4gICAgICAgICAgW2xhYmVsT3JpZ2luXT1cImxhYmVsT3JpZ2luXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJPcmlnaW5dPVwicGxhY2Vob2xkZXJPcmlnaW5cIlxuICAgICAgICAgIFtnZW9sb2NhdGlvbkxhYmVsXT1cImdlb2xvY2F0aW9uTGFiZWxcIlxuICAgICAgICAgIFtnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbF09XCJnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbFwiXG4gICAgICAgICAgW2tlZXBTZWxlY3Rpb25dPVwia2VlcFNlbGVjdGlvblwiXG4gICAgICAgICAgKG9yaWdpbkNoYW5nZSk9XCJzZXRTZWxlY3RlZE9yaWdpbkFpcnBvcnQoJGV2ZW50KVwiXG4gICAgICAgICAgKGZvY3VzT25OZXh0KT1cInNldEZvY3VzT25QYXNzZW5nZXJTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgKG9yaWdpbk9wZW5DaGFuZ2UpPVwib25PcmlnaW5PcGVuKCRldmVudClcIlxuICAgICAgICAgIChwb3NpdGlvbkNoYW5nZSk9XCJnZXRDbG9zZXN0QWlycG9ydHMoJGV2ZW50KVwiPjwvbmFzLWFpcnBvcnQtc2VsZWN0PlxuICAgICAgICA8bmFzLXN1Z2dlc3Rpb25zICpuZ0lmPVwiKGNsb3Nlc3RBaXJwb3J0cyB8fCBsYXRlc3RTZWFyY2hlc09yaWdpbikgJiYgZXhpc3RzKGVuYWJsZVN1Z2dlc3Rpb25zKVwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEZpbHRlckNsYXNzKCdzdWdnZXN0aW9ucycpXCJcbiAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiZ2V0U3VnZ2VzdGlvbnMoKVwiXG4gICAgICAgICAgW29yTGFiZWxdPVwib3JMYWJlbFwiXG4gICAgICAgICAgKGFpcnBvcnRTZWxlY3QpPVwic2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KCRldmVudClcIj48L25hcy1zdWdnZXN0aW9ucz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZE1heGltaXplKClcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuYXNDbGFzc109XCIhZW5hYmxlRGVzdGluYXRpb25TZWxlY3QgPyBnZXRDbGFzcygnb3JpZ2luLWNvbWJpbmVkJykgOlxuICAgICAgICAgIGdldFRyYXZlbERldGFpbHNDbGFzcygnJywgWydjb21iaW5lZCcsIGV4aXN0cyhlbmFibGVEYXRlcGlja2VycykgJiYgJ25vLWJvcmRlcicsIGV4aXN0cyhtaW5pbWl6ZSkgJiYgJ21pbmltaXplZCddKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbmFibGVQYXNzZW5nZXJzU2VsZWN0XCI+XG4gICAgICAgICAgICA8bmFzLWRyb3Bkb3duICNwYXNzZW5nZXJTZWxlY3REcm9wZG93blxuICAgICAgICAgICAgICAqbmdJZj1cInBhc3NlbmdlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicsICdwYXNzZW5nZXJzJylcIlxuICAgICAgICAgICAgICBbY3NzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cInBhc3NlbmdlclNlbGVjdExhYmVsXCJcbiAgICAgICAgICAgICAgW2xhYmVsU3R5bGVdPVwieyd3aWR0aCc6ICcxMDJweCd9XCJcbiAgICAgICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgKG9wZW5DaGFuZ2UpPVwib25QYXNzZW5nZXJTZWxlY3RPcGVuKCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJwYXNzZW5nZXJLZXlEb3duKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG5hcy1wYXNzZW5nZXItc2VsZWN0ICNwYXNzZW5nZXJTZWxlY3RcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsQWRkXT1cImFyaWFMYWJlbEFkZFwiXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbFN1YnRyYWN0XT1cImFyaWFMYWJlbFN1YnRyYWN0XCJcbiAgICAgICAgICAgICAgICBbYWR1bHRzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0QWR1bHRzTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtjaGlsZHJlbkxhYmVsXT1cInBhc3NlbmdlclNlbGVjdENoaWxkcmVuTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtpbmZhbnRzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0SW5mYW50c0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbbWF4UGF4Q291bnRdPVwibWF4UGF4Q291bnRcIlxuICAgICAgICAgICAgICAgIFttaW5BZHVsdENvdW50XT1cIm1pbkFkdWx0Q291bnRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJwYXNzZW5nZXJTZWxlY3RUaXRsZVwiXG4gICAgICAgICAgICAgICAgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgICAgICAgIFtuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZ109XCJuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZ1wiXG4gICAgICAgICAgICAgICAgW2dyb3VwQm9va2luZ0xhYmVsXT1cImdyb3VwQm9va2luZ0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbZ3JvdXBCb29raW5nTGltaXRdPVwiZ3JvdXBCb29raW5nTGltaXRcIlxuICAgICAgICAgICAgICAgIChmb2N1c09uTmV4dCk9XCJvblBhc3NlbmdlcnNTZWxlY3RGb2N1c09uTmV4dCgpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXNPblByZXZpb3VzKT1cIm9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpXCJcbiAgICAgICAgICAgICAgICBbKHBhc3NlbmdlcnMpXT1cInBhc3NlbmdlcnNcIj48L25hcy1wYXNzZW5nZXItc2VsZWN0PlxuICAgICAgICAgICAgPC9uYXMtZHJvcGRvd24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZVRyaXBTd2l0Y2hcIj5cbiAgICAgICAgICAgIDxuYXMtZHJvcGRvd24gKm5nSWY9XCJ0cmlwU3dpdGNoT25lV2F5TGFiZWwgJiYgdHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsXCJcbiAgICAgICAgICAgICAgI3RyaXBTd2l0Y2hcbiAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnZHJvcGRvd24nLCAndHJpcC10eXBlJylcIlxuICAgICAgICAgICAgICBbY3NzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImdldFRyaXBTd2l0Y2hMYWJlbCgpXCJcbiAgICAgICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgKG9wZW5DaGFuZ2UpPVwib25UcmlwU3dpdGNoT3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25UcmlwU3dpdGNoS2V5RG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9ucycpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICN0cmlwVHlwZVJvdW5kVHJpcFxuICAgICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgdHJpcFR5cGUgPT09IDIgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyaXBUeXBlQ2hhbmdlKDIpXCI+XG4gICAgICAgICAgICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ21lZGl1bSdcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJ0cmlwVHlwZSA9PT0gMiA/ICdmbGlnaHQtcmV0dXJuLS1saWdodCcgOiAnZmxpZ2h0LXJldHVybidcIj48L25hcy1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndGl0bGUnLCAnc21hbGwnKVwiPnt7dHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICN0cmlwVHlwZU9uZXdheVxuICAgICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgdHJpcFR5cGUgPT09IDEgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyaXBUeXBlQ2hhbmdlKDEpXCI+XG4gICAgICAgICAgICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ21lZGl1bSdcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJ0cmlwVHlwZSA9PT0gMSA/ICdmbGlnaHQtb25ld2F5LS1saWdodCcgOiAnZmxpZ2h0LW9uZXdheSdcIj48L25hcy1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndGl0bGUnLCBbJ3NtYWxsJ10pXCI+e3t0cmlwU3dpdGNoT25lV2F5TGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25hcy1kcm9wZG93bj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlVHJhbnNpdFN3aXRjaFwiPlxuICAgICAgICAgICAgPG5hcy1kcm9wZG93biAqbmdJZj1cImRpcmVjdE9ubHlMYWJlbCAmJiBkaXJlY3RUcmFuc2l0TGFiZWxcIlxuICAgICAgICAgICAgICAjdHJhbnNpdFN3aXRjaFxuICAgICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicsICd0cmFuc2l0LXR5cGUnKVwiXG4gICAgICAgICAgICAgIFtjc3NDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2Ryb3Bkb3duJylcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZ2V0VHJhbnNpdExhYmVsKClcIlxuICAgICAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgICAgICAob3BlbkNoYW5nZSk9XCJvblRyYW5zaXRTd2l0Y2hPcGVuKCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJ0cmFuc2l0S2V5RG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9ucycpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICN0cmFuc2l0VHlwZVRyYW5zaXRcbiAgICAgICAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2FjdGlvbicsICFkaXJlY3RPbmx5ICYmICdhY3RpdmUnKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UcmFuc2l0Q2hhbmdlKGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndHJhbnNpdC1pY29uJylcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndHJhbnNpdC1pY29uLXN0b3AnKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ3RpdGxlJywgJ3NtYWxsJylcIj57e2RpcmVjdFRyYW5zaXRMYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgZGlyZWN0T25seSAmJiAnYWN0aXZlJylcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAjdHJhbnNpdFR5cGVEaXJlY3RPbmx5XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UcmFuc2l0Q2hhbmdlKHRydWUpXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCd0cmFuc2l0LWljb24nKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ3RpdGxlJywgJ3NtYWxsJylcIj57e2RpcmVjdE9ubHlMYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmFzLWRyb3Bkb3duPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImV4aXN0cyhlbmFibGVEYXRlcGlja2VycylcIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXREYXRlUGlja2Vyc0NsYXNzKClcIj5cbiAgICAgICAgICA8bmFzLWRhdGVwaWNrZXItY29tYm8gI2RhdGVwaWNrZXJDb21ib1xuICAgICAgICAgICAgY29tcGFjdFxuICAgICAgICAgICAgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kXT1cIm5hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kXCJcbiAgICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kXT1cIm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmRcIlxuICAgICAgICAgICAgW2F2YWlsYWJpbGl0eV09XCJhdmFpbGFiaWxpdHlcIlxuICAgICAgICAgICAgW2F2YWlsYWJsZUZsaWdodHNMYWJlbF09XCJhdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICAgICAgW2RhdGVEaXNwbGF5Rm9ybWF0XT1cImRhdGVEaXNwbGF5Rm9ybWF0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlUGFzdFNlbGVjdGlvbl09XCJkaXNhYmxlUGFzdFNlbGVjdGlvblwiXG4gICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICBbbm9BdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwibm9BdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICAgICAgW2luYm91bmRBdmFpbGFibGVEYXRlc109XCJpbmJvdW5kQXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgICAgICAgW2luYm91bmRMYWJlbF09XCJpbmJvdW5kTGFiZWxcIlxuICAgICAgICAgICAgW25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cIm5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgICAgICAgIFtvdXRib3VuZEF2YWlsYWJsZURhdGVzXT1cIm91dGJvdW5kQXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgICAgICAgW291dGJvdW5kTGFiZWxdPVwib3V0Ym91bmRMYWJlbFwiXG4gICAgICAgICAgICBbdGltZURpc3BsYXlGb3JtYXRdPVwidGltZURpc3BsYXlGb3JtYXRcIlxuICAgICAgICAgICAgW3RpbWVzXT1cInRpbWVzXCJcbiAgICAgICAgICAgIFtvdXRib3VuZERpc2FibGVkXT1cIm91dGJvdW5kRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2luYm91bmREaXNhYmxlZF09XCJpbmJvdW5kRGlzYWJsZWRcIlxuICAgICAgICAgICAgW291dGJvdW5kT25seV09XCJ0cmlwVHlwZSA9PT0gMVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbFByZXZpb3VzTW9udGhdPVwiYXJpYUxhYmVsUHJldmlvdXNNb250aFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsTmV4dE1vbnRoXT1cImFyaWFMYWJlbE5leHRNb250aFwiXG4gICAgICAgICAgICAoZm9jdXNPbk5leHRDaGFuZ2UpPVwib25Gb2N1c09uTmV4dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1c09uUHJldmlvdXNDaGFuZ2UpPVwib25EYXRlcGlja2VyRm9jdXNPblByZXZpb3VzKCRldmVudClcIlxuICAgICAgICAgICAgKGluYm91bmRNb250aENoYW5nZSk9XCJvbkluYm91bmRNb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvdXRib3VuZE1vbnRoQ2hhbmdlKT1cIm9uT3V0Ym91bmRNb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFsob3V0Ym91bmRPcGVuKV09XCJvdXRib3VuZE9wZW5cIlxuICAgICAgICAgICAgWyhpbmJvdW5kT3BlbildPVwiaW5ib3VuZE9wZW5cIlxuICAgICAgICAgICAgWyhpbmJvdW5kU2VsZWN0ZWREYXRlKV09XCJpbmJvdW5kU2VsZWN0ZWREYXRlXCJcbiAgICAgICAgICAgIFsob3V0Ym91bmRTZWxlY3RlZERhdGUpXT1cIm91dGJvdW5kU2VsZWN0ZWREYXRlXCI+XG4gICAgICAgICAgPC9uYXMtZGF0ZXBpY2tlci1jb21ibz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzdWJzaWR5RGlzY291bnRzICYmIHN1YnNpZHlEaXNjb3VudHMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEZpbHRlckNsYXNzKCdzdWJzaWR5LWRpc2NvdW50JylcIj5cbiAgICAgICAgICA8bmFzLXN1YnNpZHktZGlzY291bnQgI3N1YnNpZHlEaXNjb3VudFxuICAgICAgICAgICAgW2Rpc2NvdW50c109XCJzdWJzaWR5RGlzY291bnRzXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZERpc2NvdW50XT1cInNlbGVjdGVkU3Vic2lkeURpc2NvdW50XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJzdWJzaWR5RGlzY291bnRMYWJlbFwiXG4gICAgICAgICAgICAoaW5mb0J1dHRvbkNsaWNrKT1cIm9uU3Vic2lkeURpc2NvdW50SW5mb0NsaWNrKClcIlxuICAgICAgICAgICAgKGRpc2NvdW50U2VsZWN0Q2hhbmdlKT1cIm9uU3Vic2lkeURpc2NvdW50U2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKGluZm9CdXR0b25LZXlkb3duKT1cIm9uU3Vic2lkeURpc2NvdW50SW5mb0J1dHRvbktleWRvd24oJGV2ZW50KVwiPjwvbmFzLXN1YnNpZHktZGlzY291bnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|