@carto/kepler.gl 0.0.73 → 0.0.75-alpha.deckv9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/action-wrapper.js +20 -48
- package/dist/actions/actions.js +10 -19
- package/dist/actions/identity-actions.js +8 -17
- package/dist/actions/index.js +7 -24
- package/dist/actions/map-state-actions.js +10 -19
- package/dist/actions/map-style-actions.js +20 -35
- package/dist/actions/provider-actions.js +26 -42
- package/dist/actions/ui-state-actions.js +42 -70
- package/dist/actions/vis-state-actions.js +102 -162
- package/dist/cloud-providers/index.js +8 -8
- package/dist/cloud-providers/provider.js +55 -94
- package/dist/components/bottom-widget.js +47 -48
- package/dist/components/common/action-panel.js +39 -38
- package/dist/components/common/animation-control/animation-control.js +40 -38
- package/dist/components/common/animation-control/animation-controller.js +47 -70
- package/dist/components/common/animation-control/animation-speed-slider.js +28 -38
- package/dist/components/common/animation-control/floating-time-display.js +56 -67
- package/dist/components/common/animation-control/playback-controls.js +64 -80
- package/dist/components/common/animation-control/speed-control.js +26 -24
- package/dist/components/common/checkbox.js +31 -52
- package/dist/components/common/color-legend.js +40 -72
- package/dist/components/common/data-table/button.js +29 -22
- package/dist/components/common/data-table/canvas.js +21 -10
- package/dist/components/common/data-table/cell-size.js +54 -58
- package/dist/components/common/data-table/grid.js +30 -31
- package/dist/components/common/data-table/index.js +91 -133
- package/dist/components/common/data-table/option-dropdown.js +29 -33
- package/dist/components/common/dataset-label.js +21 -13
- package/dist/components/common/error-boundary.js +25 -30
- package/dist/components/common/field-selector.js +35 -69
- package/dist/components/common/field-token.js +21 -16
- package/dist/components/common/file-uploader/file-drop.js +40 -55
- package/dist/components/common/file-uploader/file-upload-progress.js +32 -30
- package/dist/components/common/file-uploader/file-upload.js +52 -91
- package/dist/components/common/file-uploader/upload-button.js +31 -42
- package/dist/components/common/histogram-plot.js +32 -27
- package/dist/components/common/icons/add.js +27 -27
- package/dist/components/common/icons/anchor_window.js +3 -9
- package/dist/components/common/icons/arrow-down-alt.js +27 -27
- package/dist/components/common/icons/arrow-down-solid .js +27 -27
- package/dist/components/common/icons/arrow-down.js +27 -27
- package/dist/components/common/icons/arrow-left.js +27 -27
- package/dist/components/common/icons/arrow-right.js +27 -27
- package/dist/components/common/icons/arrow-up-alt.js +27 -27
- package/dist/components/common/icons/arrow-up-solid.js +27 -27
- package/dist/components/common/icons/arrow-up.js +27 -27
- package/dist/components/common/icons/base.js +38 -42
- package/dist/components/common/icons/bug.js +27 -27
- package/dist/components/common/icons/cancel.js +27 -27
- package/dist/components/common/icons/checkmark.js +27 -28
- package/dist/components/common/icons/chevron-right.js +27 -27
- package/dist/components/common/icons/clipboard.js +27 -27
- package/dist/components/common/icons/clock.js +27 -27
- package/dist/components/common/icons/close.js +27 -27
- package/dist/components/common/icons/code-alt.js +27 -28
- package/dist/components/common/icons/copy.js +27 -28
- package/dist/components/common/icons/crosshairs.js +27 -28
- package/dist/components/common/icons/cube-3d.js +27 -27
- package/dist/components/common/icons/cursor-click.js +27 -27
- package/dist/components/common/icons/data-table.js +27 -27
- package/dist/components/common/icons/db.js +27 -27
- package/dist/components/common/icons/delete.js +27 -27
- package/dist/components/common/icons/docs.js +27 -27
- package/dist/components/common/icons/drag-n-drop.js +27 -27
- package/dist/components/common/icons/draw-polygon.js +27 -27
- package/dist/components/common/icons/email.js +27 -27
- package/dist/components/common/icons/expand.js +27 -27
- package/dist/components/common/icons/eye-seen.js +27 -27
- package/dist/components/common/icons/eye-unseen.js +27 -27
- package/dist/components/common/icons/file-type.js +23 -16
- package/dist/components/common/icons/file.js +27 -27
- package/dist/components/common/icons/files.js +24 -26
- package/dist/components/common/icons/filter-funnel.js +27 -27
- package/dist/components/common/icons/free-window.js +3 -9
- package/dist/components/common/icons/gear.js +27 -27
- package/dist/components/common/icons/hash.js +27 -27
- package/dist/components/common/icons/histogram.js +24 -25
- package/dist/components/common/icons/index.js +63 -138
- package/dist/components/common/icons/info.js +27 -28
- package/dist/components/common/icons/layers.js +27 -27
- package/dist/components/common/icons/left-arrow.js +27 -28
- package/dist/components/common/icons/legend.js +27 -27
- package/dist/components/common/icons/line-chart.js +27 -27
- package/dist/components/common/icons/login.js +27 -27
- package/dist/components/common/icons/logout.js +27 -27
- package/dist/components/common/icons/map-icon.js +27 -28
- package/dist/components/common/icons/map.js +27 -28
- package/dist/components/common/icons/messages.js +27 -27
- package/dist/components/common/icons/minus.js +27 -27
- package/dist/components/common/icons/pause.js +27 -27
- package/dist/components/common/icons/picture.js +24 -26
- package/dist/components/common/icons/pin.js +27 -27
- package/dist/components/common/icons/play.js +27 -27
- package/dist/components/common/icons/polygon.js +27 -27
- package/dist/components/common/icons/rectangle.js +27 -27
- package/dist/components/common/icons/reduce.js +27 -27
- package/dist/components/common/icons/reset.js +27 -27
- package/dist/components/common/icons/rocket.js +27 -27
- package/dist/components/common/icons/save.js +27 -27
- package/dist/components/common/icons/save2.js +27 -27
- package/dist/components/common/icons/search.js +27 -27
- package/dist/components/common/icons/settings.js +27 -27
- package/dist/components/common/icons/share.js +27 -27
- package/dist/components/common/icons/split.js +27 -27
- package/dist/components/common/icons/square-select.js +27 -27
- package/dist/components/common/icons/swap-horizontal.js +27 -28
- package/dist/components/common/icons/table.js +27 -27
- package/dist/components/common/icons/trash.js +27 -27
- package/dist/components/common/icons/upload.js +27 -27
- package/dist/components/common/icons/vert-dots.js +27 -27
- package/dist/components/common/icons/vert-three-dots.js +27 -27
- package/dist/components/common/icons/warning.js +27 -28
- package/dist/components/common/image-preview.js +36 -29
- package/dist/components/common/info-helper.js +26 -25
- package/dist/components/common/item-selector/accessor.js +3 -5
- package/dist/components/common/item-selector/chickleted-input.js +41 -43
- package/dist/components/common/item-selector/dropdown-list.js +44 -74
- package/dist/components/common/item-selector/item-selector-submenu.js +29 -38
- package/dist/components/common/item-selector/item-selector.js +36 -84
- package/dist/components/common/item-selector/typeahead.js +37 -83
- package/dist/components/common/line-chart.js +39 -36
- package/dist/components/common/loading-spinner.js +33 -25
- package/dist/components/common/logo.js +24 -22
- package/dist/components/common/map-layer-selector.js +23 -16
- package/dist/components/common/modal.js +36 -61
- package/dist/components/common/portaled.js +56 -97
- package/dist/components/common/progress-bar.js +29 -20
- package/dist/components/common/range-brush.js +63 -104
- package/dist/components/common/range-plot.js +47 -52
- package/dist/components/common/range-slider.js +52 -78
- package/dist/components/common/slider/mouse-event.js +11 -37
- package/dist/components/common/slider/slider-bar-handle.js +31 -39
- package/dist/components/common/slider/slider-handle.js +35 -44
- package/dist/components/common/slider/slider.js +55 -82
- package/dist/components/common/styled-components.js +64 -169
- package/dist/components/common/switch.js +22 -16
- package/dist/components/common/time-range-slider-time-title.js +24 -19
- package/dist/components/common/time-range-slider.js +41 -38
- package/dist/components/common/time-slider-marker.js +36 -41
- package/dist/components/common/toolbar-item.js +22 -16
- package/dist/components/common/toolbar.js +21 -10
- package/dist/components/common/vertical-toolbar.js +21 -10
- package/dist/components/container.js +49 -70
- package/dist/components/context.js +6 -10
- package/dist/components/editor/constants.js +6 -8
- package/dist/components/editor/editor.js +40 -72
- package/dist/components/editor/feature-action-panel.js +35 -43
- package/dist/components/editor/feature-styles.js +35 -40
- package/dist/components/editor/handle-style.js +35 -37
- package/dist/components/filters/components.js +21 -10
- package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +14 -25
- package/dist/components/filters/filter-panels/multi-select-filter-panel.js +14 -21
- package/dist/components/filters/filter-panels/new-filter-panel.js +13 -23
- package/dist/components/filters/filter-panels/polygon-filter-panel.js +13 -25
- package/dist/components/filters/filter-panels/range-filter-panel.js +14 -21
- package/dist/components/filters/filter-panels/single-select-filter-panel.js +14 -21
- package/dist/components/filters/filter-panels/time-range-filter-panel.js +14 -23
- package/dist/components/filters/index.js +11 -17
- package/dist/components/filters/multi-select-filter.js +3 -9
- package/dist/components/filters/polygon-filter.js +8 -18
- package/dist/components/filters/range-filter.js +3 -8
- package/dist/components/filters/single-select-filter.js +3 -9
- package/dist/components/filters/time-range-filter.js +7 -18
- package/dist/components/filters/time-widget.js +41 -51
- package/dist/components/geocoder/geocoder.js +95 -128
- package/dist/components/geocoder-panel.js +37 -62
- package/dist/components/index.js +356 -498
- package/dist/components/injector.js +42 -58
- package/dist/components/kepler-gl.js +65 -158
- package/dist/components/map/coordinate-info.js +4 -13
- package/dist/components/map/layer-hover-info.js +40 -48
- package/dist/components/map/layer-selector-panel.js +17 -30
- package/dist/components/map/locale-panel.js +13 -27
- package/dist/components/map/map-control-panel.js +27 -24
- package/dist/components/map/map-control-toolbar.js +21 -11
- package/dist/components/map/map-control-tooltip.js +4 -11
- package/dist/components/map/map-control.js +26 -27
- package/dist/components/map/map-draw-panel.js +12 -29
- package/dist/components/map/map-legend-panel.js +17 -34
- package/dist/components/map/map-legend.js +52 -70
- package/dist/components/map/map-popover.js +41 -57
- package/dist/components/map/split-map-button.js +13 -25
- package/dist/components/map/toggle-3d-button.js +10 -21
- package/dist/components/map-container.js +98 -145
- package/dist/components/maps-layout.js +24 -26
- package/dist/components/modal-container.js +60 -112
- package/dist/components/modals/add-map-style-modal.js +37 -67
- package/dist/components/modals/cloud-tile.js +36 -36
- package/dist/components/modals/data-table-modal.js +51 -81
- package/dist/components/modals/delete-data-modal.js +24 -20
- package/dist/components/modals/error-display.js +3 -10
- package/dist/components/modals/export-data-modal.js +37 -54
- package/dist/components/modals/export-image-modal.js +31 -28
- package/dist/components/modals/export-map-modal/components.js +27 -27
- package/dist/components/modals/export-map-modal/export-html-map.js +27 -27
- package/dist/components/modals/export-map-modal/export-json-map.js +22 -22
- package/dist/components/modals/export-map-modal/export-map-modal.js +20 -40
- package/dist/components/modals/image-modal-container.js +9 -16
- package/dist/components/modals/load-data-modal.js +29 -33
- package/dist/components/modals/load-storage-map.js +42 -77
- package/dist/components/modals/loading-dialog.js +24 -18
- package/dist/components/modals/modal-dialog.js +3 -7
- package/dist/components/modals/modal-tabs.js +29 -29
- package/dist/components/modals/overwrite-map-modal.js +29 -28
- package/dist/components/modals/provider-modal-container.js +27 -27
- package/dist/components/modals/save-map-modal.js +43 -48
- package/dist/components/modals/share-map-modal.js +42 -53
- package/dist/components/modals/status-panel.js +24 -25
- package/dist/components/modals/storage-map-viewer.js +30 -43
- package/dist/components/notification-panel/notification-item.js +33 -47
- package/dist/components/notification-panel.js +30 -36
- package/dist/components/performance.js +11 -36
- package/dist/components/plot-container.js +42 -72
- package/dist/components/side-panel/cloud-storage-dropdown.js +4 -10
- package/dist/components/side-panel/common/dataset-info.js +20 -13
- package/dist/components/side-panel/common/dataset-tag.js +21 -12
- package/dist/components/side-panel/common/dataset-title.js +37 -52
- package/dist/components/side-panel/common/source-data-catalog.js +26 -22
- package/dist/components/side-panel/common/source-data-selector.js +34 -40
- package/dist/components/side-panel/custom-panel.js +5 -9
- package/dist/components/side-panel/filter-manager.js +18 -29
- package/dist/components/side-panel/filter-panel/filter-panel-header.js +30 -30
- package/dist/components/side-panel/filter-panel/filter-panel.js +36 -55
- package/dist/components/side-panel/interaction-manager.js +5 -12
- package/dist/components/side-panel/interaction-panel/brush-config.js +23 -19
- package/dist/components/side-panel/interaction-panel/interaction-panel.js +36 -59
- package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +34 -74
- package/dist/components/side-panel/interaction-panel/tooltip-config.js +28 -40
- package/dist/components/side-panel/layer-manager.js +51 -82
- package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +3 -10
- package/dist/components/side-panel/layer-panel/color-palette.js +27 -23
- package/dist/components/side-panel/layer-panel/color-range-selector.js +52 -98
- package/dist/components/side-panel/layer-panel/color-selector.js +36 -67
- package/dist/components/side-panel/layer-panel/column-selector.js +26 -25
- package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +2 -6
- package/dist/components/side-panel/layer-panel/custom-palette.js +37 -71
- package/dist/components/side-panel/layer-panel/custom-picker.js +32 -45
- package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +8 -16
- package/dist/components/side-panel/layer-panel/hex-column-config.js +12 -34
- package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +2 -10
- package/dist/components/side-panel/layer-panel/layer-column-config.js +31 -27
- package/dist/components/side-panel/layer-panel/layer-config-group.js +46 -80
- package/dist/components/side-panel/layer-panel/layer-configurator.js +162 -250
- package/dist/components/side-panel/layer-panel/layer-panel-header.js +52 -66
- package/dist/components/side-panel/layer-panel/layer-panel.js +33 -54
- package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +28 -22
- package/dist/components/side-panel/layer-panel/layer-type-list-item.js +22 -18
- package/dist/components/side-panel/layer-panel/layer-type-selector.js +29 -32
- package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +35 -40
- package/dist/components/side-panel/layer-panel/single-color-palette.js +32 -42
- package/dist/components/side-panel/layer-panel/text-label-panel.js +31 -42
- package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +39 -52
- package/dist/components/side-panel/layer-panel/vis-config-slider.js +10 -19
- package/dist/components/side-panel/layer-panel/vis-config-switch.js +28 -29
- package/dist/components/side-panel/map-manager.js +32 -46
- package/dist/components/side-panel/map-style-panel/map-layer-selector.js +28 -31
- package/dist/components/side-panel/map-style-panel/map-style-selector.js +26 -24
- package/dist/components/side-panel/panel-dropdown.js +28 -35
- package/dist/components/side-panel/panel-header-action.js +38 -43
- package/dist/components/side-panel/panel-header.js +54 -92
- package/dist/components/side-panel/panel-tab.js +24 -20
- package/dist/components/side-panel/panel-title.js +21 -10
- package/dist/components/side-panel/panel-toggle.js +26 -23
- package/dist/components/side-panel/side-bar.js +37 -53
- package/dist/components/side-panel.js +56 -65
- package/dist/connect/keplergl-connect.js +5 -14
- package/dist/connect/with-local-selector.js +33 -38
- package/dist/constants/action-types.js +5 -6
- package/dist/constants/color-palette.js +12 -23
- package/dist/constants/color-ranges.js +32 -31
- package/dist/constants/custom-color-ranges.js +9 -14
- package/dist/constants/default-settings.js +154 -239
- package/dist/constants/index.js +95 -103
- package/dist/constants/keyevent.js +3 -7
- package/dist/constants/tooltip.js +7 -10
- package/dist/constants/user-feedbacks.js +5 -6
- package/dist/constants/user-guides.js +12 -20
- package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +29 -32
- package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +10 -43
- package/dist/deckgl-layers/cluster-layer/cluster-layer.js +54 -75
- package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +29 -32
- package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +29 -30
- package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +29 -30
- package/dist/deckgl-layers/layer-utils/cluster-utils.js +10 -21
- package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +75 -132
- package/dist/deckgl-layers/layer-utils/shader-utils.js +1 -5
- package/dist/deckgl-layers/line-layer/line-layer.js +27 -34
- package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +26 -30
- package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +33 -39
- package/dist/index.js +4 -23
- package/dist/layers/aggregation-layer.js +63 -97
- package/dist/layers/arc-layer/arc-layer-icon.js +27 -27
- package/dist/layers/arc-layer/arc-layer.js +48 -73
- package/dist/layers/base-layer.js +257 -406
- package/dist/layers/cluster-layer/cluster-layer-icon.js +27 -27
- package/dist/layers/cluster-layer/cluster-layer.js +33 -44
- package/dist/layers/default-layer-icon.js +27 -27
- package/dist/layers/geojson-layer/geojson-layer-icon.js +27 -27
- package/dist/layers/geojson-layer/geojson-layer.js +54 -87
- package/dist/layers/geojson-layer/geojson-utils.js +35 -47
- package/dist/layers/grid-layer/grid-layer-icon.js +27 -27
- package/dist/layers/grid-layer/grid-layer.js +30 -41
- package/dist/layers/grid-layer/grid-utils.js +6 -9
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +27 -27
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +48 -80
- package/dist/layers/h3-hexagon-layer/h3-utils.js +10 -21
- package/dist/layers/heatmap-layer/heatmap-layer-icon.js +27 -27
- package/dist/layers/heatmap-layer/heatmap-layer.js +45 -72
- package/dist/layers/hexagon-layer/hexagon-layer-icon.js +27 -27
- package/dist/layers/hexagon-layer/hexagon-layer.js +30 -42
- package/dist/layers/hexagon-layer/hexagon-utils.js +3 -15
- package/dist/layers/icon-layer/icon-info-modal.js +23 -26
- package/dist/layers/icon-layer/icon-layer-icon.js +27 -27
- package/dist/layers/icon-layer/icon-layer.js +59 -97
- package/dist/layers/index.js +38 -39
- package/dist/layers/layer-factory.js +38 -42
- package/dist/layers/layer-text-label.js +7 -17
- package/dist/layers/layer-update.js +3 -14
- package/dist/layers/line-layer/line-layer-icon.js +27 -27
- package/dist/layers/line-layer/line-layer.js +46 -66
- package/dist/layers/mapbox-utils.js +38 -51
- package/dist/layers/mapboxgl-layer.js +43 -58
- package/dist/layers/point-layer/point-layer-icon.js +27 -27
- package/dist/layers/point-layer/point-layer.js +57 -90
- package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +41 -73
- package/dist/layers/s2-geometry-layer/s2-layer-icon.js +27 -27
- package/dist/layers/s2-geometry-layer/s2-utils.js +5 -11
- package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +21 -15
- package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +27 -27
- package/dist/layers/scenegraph-layer/scenegraph-layer.js +52 -75
- package/dist/layers/trip-layer/trip-info-modal.js +21 -16
- package/dist/layers/trip-layer/trip-layer-icon.js +27 -27
- package/dist/layers/trip-layer/trip-layer.js +51 -93
- package/dist/layers/trip-layer/trip-utils.js +16 -39
- package/dist/layers/types.js +3 -6
- package/dist/localization/en.js +22 -11
- package/dist/localization/formatted-message.js +5 -10
- package/dist/localization/index.js +7 -13
- package/dist/localization/locales.js +7 -12
- package/dist/middleware/index.js +2 -5
- package/dist/processors/data-processor.js +113 -177
- package/dist/processors/file-handler.js +200 -276
- package/dist/processors/index.js +33 -35
- package/dist/reducers/combined-updaters.js +35 -46
- package/dist/reducers/composer-helpers.js +28 -27
- package/dist/reducers/composers.js +25 -12
- package/dist/reducers/core.js +13 -46
- package/dist/reducers/index.js +24 -38
- package/dist/reducers/map-state-updaters.js +53 -65
- package/dist/reducers/map-state.js +31 -26
- package/dist/reducers/map-style-updaters.js +92 -136
- package/dist/reducers/map-style.js +31 -26
- package/dist/reducers/provider-state-updaters.js +92 -167
- package/dist/reducers/provider-state.js +32 -25
- package/dist/reducers/root.js +44 -50
- package/dist/reducers/ui-state-updaters.js +102 -202
- package/dist/reducers/ui-state.js +32 -26
- package/dist/reducers/vis-state-merger.js +102 -166
- package/dist/reducers/vis-state-selectors.js +5 -10
- package/dist/reducers/vis-state-updaters.js +386 -663
- package/dist/reducers/vis-state.js +32 -25
- package/dist/schemas/dataset-schema.js +36 -56
- package/dist/schemas/index.js +38 -45
- package/dist/schemas/map-state-schema.js +28 -24
- package/dist/schemas/map-style-schema.js +34 -48
- package/dist/schemas/schema-manager.js +44 -62
- package/dist/schemas/schema-utils.js +11 -15
- package/dist/schemas/schema.js +32 -27
- package/dist/schemas/versions.js +5 -9
- package/dist/schemas/vis-state-schema.js +109 -309
- package/dist/styles/base.js +367 -640
- package/dist/styles/index.js +1 -5
- package/dist/styles/media-breakpoints.js +21 -9
- package/dist/tasks/tasks.js +22 -50
- package/dist/templates/export-map-html.js +3 -6
- package/dist/utils/aggregate-utils.js +23 -27
- package/dist/utils/color-utils.js +36 -38
- package/dist/utils/custom-scales.js +1 -7
- package/dist/utils/data-scale-utils.js +11 -20
- package/dist/utils/data-utils.js +78 -137
- package/dist/utils/dataset-utils.js +71 -88
- package/dist/utils/dom-to-image.js +15 -93
- package/dist/utils/dom-utils.js +34 -116
- package/dist/utils/export-utils.js +65 -102
- package/dist/utils/filter-utils.js +170 -320
- package/dist/utils/gl-utils.js +39 -23
- package/dist/utils/gpu-filter-utils.js +46 -59
- package/dist/utils/index.js +68 -80
- package/dist/utils/interaction-utils.js +26 -50
- package/dist/utils/layer-utils.js +58 -63
- package/dist/utils/locale-utils.js +23 -21
- package/dist/utils/map-info-utils.js +2 -3
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +72 -71
- package/dist/utils/map-style-utils/mapbox-utils.js +3 -5
- package/dist/utils/mapbox-utils.js +2 -5
- package/dist/utils/notifications-utils.js +36 -35
- package/dist/utils/observe-dimensions.js +36 -41
- package/dist/utils/projection-utils.js +9 -20
- package/dist/utils/searcher-utils.js +1 -4
- package/dist/utils/split-map-utils.js +36 -32
- package/dist/utils/table-utils/data-container-utils.js +27 -23
- package/dist/utils/table-utils/data-row.js +2 -13
- package/dist/utils/table-utils/index.js +1 -2
- package/dist/utils/table-utils/indexed-data-container.js +65 -84
- package/dist/utils/table-utils/kepler-table.js +83 -126
- package/dist/utils/table-utils/row-data-container.js +62 -87
- package/dist/utils/utils.js +51 -69
- package/package.json +4 -3
- package/src/components/kepler-gl.d.ts +0 -1
- package/src/components/kepler-gl.js +0 -7
- package/src/components/map-container.js +0 -3
- package/src/components/modal-container.d.ts +0 -1
- package/src/components/modal-container.js +0 -2
- package/src/components/modals/add-map-style-modal.js +0 -3
- package/src/components/side-panel/layer-panel/layer-configurator.js +11 -9
- package/src/layers/base-layer.js +1 -1
- package/src/utils/gl-utils.js +16 -15
- package/CHANGELOG.md +0 -948
|
@@ -1,95 +1,77 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
6
|
-
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
exports
|
|
11
|
-
exports.LayerColorSelectorFactory = LayerColorSelectorFactory;
|
|
8
|
+
exports.AggregationTypeSelector = void 0;
|
|
12
9
|
exports.ArcLayerColorSelectorFactory = ArcLayerColorSelectorFactory;
|
|
13
|
-
exports.LayerColorRangeSelectorFactory = LayerColorRangeSelectorFactory;
|
|
14
10
|
exports.ChannelByValueSelectorFactory = ChannelByValueSelectorFactory;
|
|
15
|
-
exports.
|
|
16
|
-
|
|
11
|
+
exports.HowToButton = void 0;
|
|
12
|
+
exports.LayerColorRangeSelectorFactory = LayerColorRangeSelectorFactory;
|
|
13
|
+
exports.LayerColorSelectorFactory = LayerColorSelectorFactory;
|
|
14
|
+
exports["default"] = LayerConfiguratorFactory;
|
|
15
|
+
exports.getVisConfiguratorProps = exports.getLayerFields = exports.getLayerDataset = exports.getLayerConfiguratorProps = exports.getLayerChannelConfigProps = void 0;
|
|
17
16
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
18
|
-
|
|
19
17
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
20
|
-
|
|
21
18
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
22
|
-
|
|
23
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
24
|
-
|
|
25
19
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
26
|
-
|
|
27
20
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
28
|
-
|
|
21
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
29
22
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
30
|
-
|
|
31
23
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
32
|
-
|
|
33
24
|
var _react = _interopRequireWildcard(require("react"));
|
|
34
|
-
|
|
35
25
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
36
|
-
|
|
37
26
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
38
|
-
|
|
39
27
|
var _localization = require("../../../localization");
|
|
40
|
-
|
|
41
28
|
var _styledComponents2 = require("../../common/styled-components");
|
|
42
|
-
|
|
43
29
|
var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
|
|
44
|
-
|
|
45
30
|
var _visConfigByFieldSelector = _interopRequireDefault(require("./vis-config-by-field-selector"));
|
|
46
|
-
|
|
47
31
|
var _layerColumnConfig = _interopRequireDefault(require("./layer-column-config"));
|
|
48
|
-
|
|
49
32
|
var _layerTypeSelector = _interopRequireDefault(require("./layer-type-selector"));
|
|
50
|
-
|
|
51
33
|
var _layerVisibilityByZoom = _interopRequireDefault(require("./layer-visibility-by-zoom"));
|
|
52
|
-
|
|
53
34
|
var _dimensionScaleSelector = _interopRequireDefault(require("./dimension-scale-selector"));
|
|
54
|
-
|
|
55
35
|
var _sourceDataSelector = _interopRequireDefault(require("../common/source-data-selector"));
|
|
56
|
-
|
|
57
36
|
var _visConfigSwitch = _interopRequireDefault(require("./vis-config-switch"));
|
|
58
|
-
|
|
59
37
|
var _visConfigSlider = _interopRequireDefault(require("./vis-config-slider"));
|
|
60
|
-
|
|
61
38
|
var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
|
|
62
|
-
|
|
63
39
|
var _customMarkersConfigGroup = _interopRequireDefault(require("./custom-markers-config-group"));
|
|
64
|
-
|
|
65
40
|
var _textLabelPanel = _interopRequireDefault(require("./text-label-panel"));
|
|
66
|
-
|
|
67
41
|
var _utils = require("../../../utils/utils");
|
|
68
|
-
|
|
69
42
|
var _defaultSettings = require("../../../constants/default-settings");
|
|
70
|
-
|
|
71
43
|
var _types = require("../../../layers/types");
|
|
72
|
-
|
|
73
44
|
var _reactIntl = require("react-intl");
|
|
74
|
-
|
|
75
45
|
var _colorDimensionScaleSelector = _interopRequireDefault(require("./color-dimension-scale-selector"));
|
|
76
|
-
|
|
77
46
|
var _colorSelector = _interopRequireDefault(require("./color-selector"));
|
|
78
|
-
|
|
79
47
|
var _layerAggregationResolution = _interopRequireDefault(require("./layer-aggregation-resolution"));
|
|
80
|
-
|
|
81
48
|
var _colorRanges = require("../../../constants/color-ranges");
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
49
|
+
var _templateObject, _templateObject2, _templateObject3; // Copyright (c) 2022 Uber Technologies, Inc.
|
|
50
|
+
//
|
|
51
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
52
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
53
|
+
// in the Software without restriction, including without limitation the rights
|
|
54
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
55
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
56
|
+
// furnished to do so, subject to the following conditions:
|
|
57
|
+
//
|
|
58
|
+
// The above copyright notice and this permission notice shall be included in
|
|
59
|
+
// all copies or substantial portions of the Software.
|
|
60
|
+
//
|
|
61
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
62
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
63
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
64
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
65
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
66
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
67
|
+
// THE SOFTWARE.
|
|
68
|
+
/* eslint-disable complexity */
|
|
69
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
70
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
71
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
72
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
73
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
74
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
93
75
|
var StyledLayerConfigurator = _styledComponents["default"].div.attrs({
|
|
94
76
|
className: 'layer-panel__config'
|
|
95
77
|
})(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin-top: ", ";\n padding: ", ";\n border-left: ", " dashed\n ", ";\n"])), function (props) {
|
|
@@ -101,24 +83,16 @@ var StyledLayerConfigurator = _styledComponents["default"].div.attrs({
|
|
|
101
83
|
}, function (props) {
|
|
102
84
|
return props.theme.layerConfiguratorBorderColor;
|
|
103
85
|
});
|
|
104
|
-
|
|
105
86
|
var StyledLayerVisualConfigurator = _styledComponents["default"].div.attrs({
|
|
106
87
|
className: 'layer-panel__config__visualC-config'
|
|
107
88
|
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
|
|
108
|
-
|
|
109
|
-
var getLayerFields = function getLayerFields(datasets, layer) {
|
|
89
|
+
var getLayerFields = exports.getLayerFields = function getLayerFields(datasets, layer) {
|
|
110
90
|
return layer.config && datasets[layer.config.dataId] ? datasets[layer.config.dataId].fields : [];
|
|
111
91
|
};
|
|
112
|
-
|
|
113
|
-
exports.getLayerFields = getLayerFields;
|
|
114
|
-
|
|
115
|
-
var getLayerDataset = function getLayerDataset(datasets, layer) {
|
|
92
|
+
var getLayerDataset = exports.getLayerDataset = function getLayerDataset(datasets, layer) {
|
|
116
93
|
return layer.config && datasets[layer.config.dataId] ? datasets[layer.config.dataId] : null;
|
|
117
94
|
};
|
|
118
|
-
|
|
119
|
-
exports.getLayerDataset = getLayerDataset;
|
|
120
|
-
|
|
121
|
-
var getLayerConfiguratorProps = function getLayerConfiguratorProps(props) {
|
|
95
|
+
var getLayerConfiguratorProps = exports.getLayerConfiguratorProps = function getLayerConfiguratorProps(props) {
|
|
122
96
|
return {
|
|
123
97
|
layer: props.layer,
|
|
124
98
|
disabled: Boolean(props.disabled),
|
|
@@ -127,10 +101,7 @@ var getLayerConfiguratorProps = function getLayerConfiguratorProps(props) {
|
|
|
127
101
|
setColorUI: props.updateLayerColorUI
|
|
128
102
|
};
|
|
129
103
|
};
|
|
130
|
-
|
|
131
|
-
exports.getLayerConfiguratorProps = getLayerConfiguratorProps;
|
|
132
|
-
|
|
133
|
-
var getVisConfiguratorProps = function getVisConfiguratorProps(props) {
|
|
104
|
+
var getVisConfiguratorProps = exports.getVisConfiguratorProps = function getVisConfiguratorProps(props) {
|
|
134
105
|
return {
|
|
135
106
|
layer: props.layer,
|
|
136
107
|
fields: getLayerFields(props.datasets, props.layer),
|
|
@@ -138,10 +109,7 @@ var getVisConfiguratorProps = function getVisConfiguratorProps(props) {
|
|
|
138
109
|
setColorUI: props.updateLayerColorUI
|
|
139
110
|
};
|
|
140
111
|
};
|
|
141
|
-
|
|
142
|
-
exports.getVisConfiguratorProps = getVisConfiguratorProps;
|
|
143
|
-
|
|
144
|
-
var getLayerChannelConfigProps = function getLayerChannelConfigProps(props) {
|
|
112
|
+
var getLayerChannelConfigProps = exports.getLayerChannelConfigProps = function getLayerChannelConfigProps(props) {
|
|
145
113
|
return {
|
|
146
114
|
layer: props.layer,
|
|
147
115
|
fields: getLayerFields(props.datasets, props.layer),
|
|
@@ -149,21 +117,14 @@ var getLayerChannelConfigProps = function getLayerChannelConfigProps(props) {
|
|
|
149
117
|
onChangeVisConfig: props.updateLayerVisConfig
|
|
150
118
|
};
|
|
151
119
|
};
|
|
152
|
-
|
|
153
|
-
exports.getLayerChannelConfigProps = getLayerChannelConfigProps;
|
|
154
120
|
LayerConfiguratorFactory.deps = [_sourceDataSelector["default"], _visConfigSlider["default"], _textLabelPanel["default"], _layerConfigGroup["default"], ChannelByValueSelectorFactory, _layerColumnConfig["default"], _layerTypeSelector["default"], _visConfigSwitch["default"], AggrScaleSelectorFactory, _layerVisibilityByZoom["default"], _layerAggregationResolution["default"], LayerColorSelectorFactory, LayerColorRangeSelectorFactory, ArcLayerColorSelectorFactory, _customMarkersConfigGroup["default"]];
|
|
155
|
-
|
|
156
121
|
function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabelPanel, LayerConfigGroup, ChannelByValueSelector, LayerColumnConfig, LayerTypeSelector, VisConfigSwitch, AggrScaleSelector, LayerVisibilityByZoom, LayerAggregationResolution, LayerColorSelector, LayerColorRangeSelector, ArcLayerColorSelector, CustomMarkersConfigGroup) {
|
|
157
122
|
var LayerConfigurator = /*#__PURE__*/function (_Component) {
|
|
158
123
|
(0, _inherits2["default"])(LayerConfigurator, _Component);
|
|
159
|
-
|
|
160
|
-
var _super = _createSuper(LayerConfigurator);
|
|
161
|
-
|
|
162
124
|
function LayerConfigurator() {
|
|
163
125
|
(0, _classCallCheck2["default"])(this, LayerConfigurator);
|
|
164
|
-
return
|
|
126
|
+
return _callSuper(this, LayerConfigurator, arguments);
|
|
165
127
|
}
|
|
166
|
-
|
|
167
128
|
(0, _createClass2["default"])(LayerConfigurator, [{
|
|
168
129
|
key: "_renderPointLayerConfig",
|
|
169
130
|
value: function _renderPointLayerConfig(props) {
|
|
@@ -178,9 +139,9 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
178
139
|
key: "_renderScatterplotLayerConfig",
|
|
179
140
|
value: function _renderScatterplotLayerConfig(_ref) {
|
|
180
141
|
var layer = _ref.layer,
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
142
|
+
visConfiguratorProps = _ref.visConfiguratorProps,
|
|
143
|
+
layerChannelConfigProps = _ref.layerChannelConfigProps,
|
|
144
|
+
layerConfiguratorProps = _ref.layerConfiguratorProps;
|
|
184
145
|
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled || {
|
|
185
146
|
label: 'layer.color'
|
|
186
147
|
}, visConfiguratorProps, {
|
|
@@ -226,9 +187,9 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
226
187
|
key: "_renderClusterLayerConfig",
|
|
227
188
|
value: function _renderClusterLayerConfig(_ref2) {
|
|
228
189
|
var layer = _ref2.layer,
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
190
|
+
visConfiguratorProps = _ref2.visConfiguratorProps,
|
|
191
|
+
layerConfiguratorProps = _ref2.layerConfiguratorProps,
|
|
192
|
+
layerChannelConfigProps = _ref2.layerChannelConfigProps;
|
|
232
193
|
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
233
194
|
label: 'layer.color',
|
|
234
195
|
collapsible: true
|
|
@@ -248,9 +209,9 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
248
209
|
key: "_renderHeatmapLayerConfig",
|
|
249
210
|
value: function _renderHeatmapLayerConfig(_ref3) {
|
|
250
211
|
var layer = _ref3.layer,
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
212
|
+
visConfiguratorProps = _ref3.visConfiguratorProps,
|
|
213
|
+
layerConfiguratorProps = _ref3.layerConfiguratorProps,
|
|
214
|
+
layerChannelConfigProps = _ref3.layerChannelConfigProps;
|
|
254
215
|
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
255
216
|
label: 'layer.color',
|
|
256
217
|
collapsible: true
|
|
@@ -278,9 +239,9 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
278
239
|
key: "_renderAggregationLayerConfig",
|
|
279
240
|
value: function _renderAggregationLayerConfig(_ref4) {
|
|
280
241
|
var layer = _ref4.layer,
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
242
|
+
visConfiguratorProps = _ref4.visConfiguratorProps,
|
|
243
|
+
layerConfiguratorProps = _ref4.layerConfiguratorProps,
|
|
244
|
+
layerChannelConfigProps = _ref4.layerChannelConfigProps;
|
|
284
245
|
var config = layer.config;
|
|
285
246
|
var enable3d = config.visConfig.enable3d;
|
|
286
247
|
var elevationByDescription = 'layer.elevationByDescription';
|
|
@@ -315,15 +276,16 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
315
276
|
})), layer.visConfigSettings.sizeAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, {
|
|
316
277
|
channel: layer.visualChannels.size
|
|
317
278
|
})) : null, layer.visConfigSettings.elevationPercentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationPercentile, visConfiguratorProps)) : null)) : null);
|
|
318
|
-
}
|
|
279
|
+
}
|
|
319
280
|
|
|
281
|
+
// TODO: Shan move these into layer class
|
|
320
282
|
}, {
|
|
321
283
|
key: "_renderHexagonIdLayerConfig",
|
|
322
284
|
value: function _renderHexagonIdLayerConfig(_ref5) {
|
|
323
285
|
var layer = _ref5.layer,
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
286
|
+
visConfiguratorProps = _ref5.visConfiguratorProps,
|
|
287
|
+
layerConfiguratorProps = _ref5.layerConfiguratorProps,
|
|
288
|
+
layerChannelConfigProps = _ref5.layerChannelConfigProps;
|
|
327
289
|
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
328
290
|
label: 'layer.color',
|
|
329
291
|
collapsible: true
|
|
@@ -355,9 +317,9 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
355
317
|
key: "_renderLineLayerConfig",
|
|
356
318
|
value: function _renderLineLayerConfig(_ref6) {
|
|
357
319
|
var layer = _ref6.layer,
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
320
|
+
visConfiguratorProps = _ref6.visConfiguratorProps,
|
|
321
|
+
layerConfiguratorProps = _ref6.layerConfiguratorProps,
|
|
322
|
+
layerChannelConfigProps = _ref6.layerChannelConfigProps;
|
|
361
323
|
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
362
324
|
label: 'layer.color',
|
|
363
325
|
collapsible: true
|
|
@@ -387,11 +349,11 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
387
349
|
key: "_renderTripLayerConfig",
|
|
388
350
|
value: function _renderTripLayerConfig(_ref7) {
|
|
389
351
|
var layer = _ref7.layer,
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
352
|
+
visConfiguratorProps = _ref7.visConfiguratorProps,
|
|
353
|
+
layerConfiguratorProps = _ref7.layerConfiguratorProps,
|
|
354
|
+
layerChannelConfigProps = _ref7.layerChannelConfigProps;
|
|
393
355
|
var _layer$meta$featureTy = layer.meta.featureTypes,
|
|
394
|
-
|
|
356
|
+
featureTypes = _layer$meta$featureTy === void 0 ? {} : _layer$meta$featureTy;
|
|
395
357
|
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
396
358
|
label: 'layer.color',
|
|
397
359
|
collapsible: true
|
|
@@ -417,12 +379,12 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
417
379
|
key: "_renderGeojsonLayerConfig",
|
|
418
380
|
value: function _renderGeojsonLayerConfig(_ref8) {
|
|
419
381
|
var layer = _ref8.layer,
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
382
|
+
visConfiguratorProps = _ref8.visConfiguratorProps,
|
|
383
|
+
layerConfiguratorProps = _ref8.layerConfiguratorProps,
|
|
384
|
+
layerChannelConfigProps = _ref8.layerChannelConfigProps;
|
|
423
385
|
var _layer$meta$featureTy2 = layer.meta.featureTypes,
|
|
424
|
-
|
|
425
|
-
|
|
386
|
+
featureTypes = _layer$meta$featureTy2 === void 0 ? {} : _layer$meta$featureTy2,
|
|
387
|
+
visConfig = layer.config.visConfig;
|
|
426
388
|
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, featureTypes.polygon || featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
|
|
427
389
|
label: "layer.fillColor",
|
|
428
390
|
collapsible: true
|
|
@@ -471,7 +433,7 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
471
433
|
key: "_render3DLayerConfig",
|
|
472
434
|
value: function _render3DLayerConfig(_ref9) {
|
|
473
435
|
var layer = _ref9.layer,
|
|
474
|
-
|
|
436
|
+
visConfiguratorProps = _ref9.visConfiguratorProps;
|
|
475
437
|
return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
476
438
|
label: 'layer.3DModel',
|
|
477
439
|
collapsible: true
|
|
@@ -503,9 +465,9 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
503
465
|
key: "_renderS2LayerConfig",
|
|
504
466
|
value: function _renderS2LayerConfig(_ref10) {
|
|
505
467
|
var layer = _ref10.layer,
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
468
|
+
visConfiguratorProps = _ref10.visConfiguratorProps,
|
|
469
|
+
layerConfiguratorProps = _ref10.layerConfiguratorProps,
|
|
470
|
+
layerChannelConfigProps = _ref10.layerChannelConfigProps;
|
|
509
471
|
var visConfig = layer.config.visConfig;
|
|
510
472
|
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
|
|
511
473
|
label: "layer.fillColor",
|
|
@@ -546,20 +508,17 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
546
508
|
key: "render",
|
|
547
509
|
value: function render() {
|
|
548
510
|
var _this = this;
|
|
549
|
-
|
|
550
511
|
var _this$props = this.props,
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
512
|
+
layer = _this$props.layer,
|
|
513
|
+
datasets = _this$props.datasets,
|
|
514
|
+
updateLayerConfig = _this$props.updateLayerConfig,
|
|
515
|
+
layerTypeOptions = _this$props.layerTypeOptions,
|
|
516
|
+
updateLayerType = _this$props.updateLayerType;
|
|
557
517
|
var _ref11 = layer.config.dataId ? datasets[layer.config.dataId] : {},
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
518
|
+
_ref11$fields = _ref11.fields,
|
|
519
|
+
fields = _ref11$fields === void 0 ? [] : _ref11$fields,
|
|
520
|
+
_ref11$fieldPairs = _ref11.fieldPairs,
|
|
521
|
+
fieldPairs = _ref11$fieldPairs === void 0 ? undefined : _ref11$fieldPairs;
|
|
563
522
|
var config = layer.config;
|
|
564
523
|
var visConfiguratorProps = getVisConfiguratorProps(this.props);
|
|
565
524
|
var layerConfiguratorProps = getLayerConfiguratorProps(this.props);
|
|
@@ -616,7 +575,6 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
616
575
|
}]);
|
|
617
576
|
return LayerConfigurator;
|
|
618
577
|
}(_react.Component);
|
|
619
|
-
|
|
620
578
|
(0, _defineProperty2["default"])(LayerConfigurator, "propTypes", {
|
|
621
579
|
layer: _propTypes["default"].object.isRequired,
|
|
622
580
|
datasets: _propTypes["default"].object.isRequired,
|
|
@@ -634,10 +592,8 @@ function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabel
|
|
|
634
592
|
* Componentize config component into pure functional components
|
|
635
593
|
*/
|
|
636
594
|
|
|
637
|
-
|
|
638
595
|
var StyledHowToButton = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n right: 12px;\n top: -4px;\n"])));
|
|
639
|
-
|
|
640
|
-
var HowToButton = function HowToButton(_ref12) {
|
|
596
|
+
var HowToButton = exports.HowToButton = function HowToButton(_ref12) {
|
|
641
597
|
var onClick = _ref12.onClick;
|
|
642
598
|
return /*#__PURE__*/_react["default"].createElement(StyledHowToButton, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, {
|
|
643
599
|
link: true,
|
|
@@ -647,32 +603,25 @@ var HowToButton = function HowToButton(_ref12) {
|
|
|
647
603
|
id: 'layerConfiguration.howTo'
|
|
648
604
|
})));
|
|
649
605
|
};
|
|
650
|
-
|
|
651
|
-
exports.HowToButton = HowToButton;
|
|
652
606
|
LayerColorSelectorFactory.deps = [_colorSelector["default"]];
|
|
653
|
-
|
|
654
607
|
function LayerColorSelectorFactory(ColorSelector) {
|
|
655
608
|
var LayerColorSelector = /*#__PURE__*/function (_Component2) {
|
|
656
609
|
(0, _inherits2["default"])(LayerColorSelector, _Component2);
|
|
657
|
-
|
|
658
|
-
var _super2 = _createSuper(LayerColorSelector);
|
|
659
|
-
|
|
660
610
|
function LayerColorSelector() {
|
|
661
611
|
(0, _classCallCheck2["default"])(this, LayerColorSelector);
|
|
662
|
-
return
|
|
612
|
+
return _callSuper(this, LayerColorSelector, arguments);
|
|
663
613
|
}
|
|
664
|
-
|
|
665
614
|
(0, _createClass2["default"])(LayerColorSelector, [{
|
|
666
615
|
key: "render",
|
|
667
616
|
value: function render() {
|
|
668
617
|
var _this$props2 = this.props,
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
618
|
+
layer = _this$props2.layer,
|
|
619
|
+
onChange = _this$props2.onChange,
|
|
620
|
+
selectedColor = _this$props2.selectedColor,
|
|
621
|
+
_this$props2$property = _this$props2.property,
|
|
622
|
+
property = _this$props2$property === void 0 ? 'color' : _this$props2$property,
|
|
623
|
+
_setColorUI = _this$props2.setColorUI,
|
|
624
|
+
fields = _this$props2.fields;
|
|
676
625
|
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
677
626
|
id: "layer.color"
|
|
678
627
|
})), /*#__PURE__*/_react["default"].createElement(ColorSelector, {
|
|
@@ -692,34 +641,27 @@ function LayerColorSelectorFactory(ColorSelector) {
|
|
|
692
641
|
}]);
|
|
693
642
|
return LayerColorSelector;
|
|
694
643
|
}(_react.Component);
|
|
695
|
-
|
|
696
644
|
return LayerColorSelector;
|
|
697
645
|
}
|
|
698
|
-
|
|
699
646
|
ArcLayerColorSelectorFactory.deps = [_colorSelector["default"]];
|
|
700
|
-
|
|
701
647
|
function ArcLayerColorSelectorFactory(ColorSelector) {
|
|
702
648
|
var ArcLayerColorSelector = /*#__PURE__*/function (_Component3) {
|
|
703
649
|
(0, _inherits2["default"])(ArcLayerColorSelector, _Component3);
|
|
704
|
-
|
|
705
|
-
var _super3 = _createSuper(ArcLayerColorSelector);
|
|
706
|
-
|
|
707
650
|
function ArcLayerColorSelector() {
|
|
708
651
|
(0, _classCallCheck2["default"])(this, ArcLayerColorSelector);
|
|
709
|
-
return
|
|
652
|
+
return _callSuper(this, ArcLayerColorSelector, arguments);
|
|
710
653
|
}
|
|
711
|
-
|
|
712
654
|
(0, _createClass2["default"])(ArcLayerColorSelector, [{
|
|
713
655
|
key: "render",
|
|
714
656
|
value: function render() {
|
|
715
657
|
var _this$props3 = this.props,
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
658
|
+
layer = _this$props3.layer,
|
|
659
|
+
onChangeConfig = _this$props3.onChangeConfig,
|
|
660
|
+
onChangeVisConfig = _this$props3.onChangeVisConfig,
|
|
661
|
+
_this$props3$property = _this$props3.property,
|
|
662
|
+
property = _this$props3$property === void 0 ? 'color' : _this$props3$property,
|
|
663
|
+
_setColorUI2 = _this$props3.setColorUI,
|
|
664
|
+
fields = _this$props3.fields;
|
|
723
665
|
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
724
666
|
id: "layer.colorRange"
|
|
725
667
|
})), /*#__PURE__*/_react["default"].createElement(ColorSelector, {
|
|
@@ -750,31 +692,24 @@ function ArcLayerColorSelectorFactory(ColorSelector) {
|
|
|
750
692
|
}]);
|
|
751
693
|
return ArcLayerColorSelector;
|
|
752
694
|
}(_react.Component);
|
|
753
|
-
|
|
754
695
|
return ArcLayerColorSelector;
|
|
755
696
|
}
|
|
756
|
-
|
|
757
697
|
LayerColorRangeSelectorFactory.deps = [_colorSelector["default"]];
|
|
758
|
-
|
|
759
698
|
function LayerColorRangeSelectorFactory(ColorSelector) {
|
|
760
699
|
var LayerColorRangeSelector = /*#__PURE__*/function (_Component4) {
|
|
761
700
|
(0, _inherits2["default"])(LayerColorRangeSelector, _Component4);
|
|
762
|
-
|
|
763
|
-
var _super4 = _createSuper(LayerColorRangeSelector);
|
|
764
|
-
|
|
765
701
|
function LayerColorRangeSelector() {
|
|
766
702
|
(0, _classCallCheck2["default"])(this, LayerColorRangeSelector);
|
|
767
|
-
return
|
|
703
|
+
return _callSuper(this, LayerColorRangeSelector, arguments);
|
|
768
704
|
}
|
|
769
|
-
|
|
770
705
|
(0, _createClass2["default"])(LayerColorRangeSelector, [{
|
|
771
706
|
key: "__renderHeatmapColorSelectorComponent",
|
|
772
707
|
value: function __renderHeatmapColorSelectorComponent() {
|
|
773
708
|
var property = 'colorRange';
|
|
774
709
|
var _this$props4 = this.props,
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
710
|
+
layer = _this$props4.layer,
|
|
711
|
+
onChange = _this$props4.onChange,
|
|
712
|
+
_setColorUI3 = _this$props4.setColorUI;
|
|
778
713
|
return /*#__PURE__*/_react["default"].createElement(ColorSelector, {
|
|
779
714
|
colorSets: [{
|
|
780
715
|
selectedColor: layer.config.visConfig[property],
|
|
@@ -795,38 +730,38 @@ function LayerColorRangeSelectorFactory(ColorSelector) {
|
|
|
795
730
|
key: "__renderDefaultColorSelectorComponent",
|
|
796
731
|
value: function __renderDefaultColorSelectorComponent() {
|
|
797
732
|
var _this$props5 = this.props,
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
733
|
+
layer = _this$props5.layer,
|
|
734
|
+
onChange = _this$props5.onChange,
|
|
735
|
+
_this$props5$channel = _this$props5.channel,
|
|
736
|
+
channel = _this$props5$channel === void 0 ? 'color' : _this$props5$channel,
|
|
737
|
+
_setColorUI4 = _this$props5.setColorUI,
|
|
738
|
+
fields = _this$props5.fields,
|
|
739
|
+
_this$props5$handleCu = _this$props5.handleCustomOnSelectHexColumn,
|
|
740
|
+
handleCustomOnSelectHexColumn = _this$props5$handleCu === void 0 ? function () {
|
|
741
|
+
return null;
|
|
742
|
+
} : _this$props5$handleCu;
|
|
808
743
|
var _layer$visualChannels = layer.visualChannels[channel],
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
744
|
+
property = _layer$visualChannels.range,
|
|
745
|
+
field = _layer$visualChannels.field,
|
|
746
|
+
scale = _layer$visualChannels.scale;
|
|
812
747
|
return /*#__PURE__*/_react["default"].createElement(ColorSelector, {
|
|
813
748
|
fields: fields,
|
|
814
749
|
colorSets: [{
|
|
815
750
|
selectedColor: layer.config.visConfig[property],
|
|
816
751
|
isRange: true,
|
|
817
752
|
setColor: function setColor(colorRange) {
|
|
818
|
-
var _layer$updateLayerCon;
|
|
819
|
-
|
|
820
753
|
var colorMap = layer.config.visConfig[property].colorMap;
|
|
821
|
-
var colorRangeUpdated = colorMap ? layer.updateColorMap(property, colorMap, colorRange) : colorRange;
|
|
754
|
+
var colorRangeUpdated = colorMap ? layer.updateColorMap(property, colorMap, colorRange) : colorRange;
|
|
755
|
+
// Ensure that scale changes from identity to ordinal
|
|
822
756
|
// Validate scale to ensure that it changes from `identity` to the correct one.
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
757
|
+
if (layer.isColoredByColorColumn(property)) {
|
|
758
|
+
layer.updateLayerConfig((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, field, _objectSpread(_objectSpread({}, layer.config[field]), {}, {
|
|
759
|
+
colorColumn: null,
|
|
760
|
+
colorColumnIdx: null
|
|
761
|
+
})), scale, _defaultSettings.SCALE_TYPES.ordinal));
|
|
762
|
+
layer.validateScale(channel);
|
|
763
|
+
}
|
|
764
|
+
// ---------------------------------------
|
|
830
765
|
onChange((0, _defineProperty2["default"])({}, property, colorRangeUpdated));
|
|
831
766
|
}
|
|
832
767
|
}],
|
|
@@ -835,14 +770,12 @@ function LayerColorRangeSelectorFactory(ColorSelector) {
|
|
|
835
770
|
return _setColorUI4(property, newConfig);
|
|
836
771
|
},
|
|
837
772
|
onSelectHexColorColumn: function onSelectHexColorColumn(colorColumn) {
|
|
838
|
-
var _layer$updateLayerCon2;
|
|
839
|
-
|
|
840
773
|
// It's defined in CN: see workspace-www/src/features/builder/ui/KeplerGl/SidePanel/LayerPanel/LayerColorRangeSelector.tsx
|
|
841
774
|
handleCustomOnSelectHexColumn(layer, colorColumn);
|
|
842
|
-
layer.updateLayerConfig((
|
|
775
|
+
layer.updateLayerConfig((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, field, _objectSpread(_objectSpread({}, layer.config[field]), {}, {
|
|
843
776
|
colorColumn: colorColumn === null || colorColumn === void 0 ? void 0 : colorColumn.name,
|
|
844
777
|
colorColumnIdx: colorColumn === null || colorColumn === void 0 ? void 0 : colorColumn.fieldIdx
|
|
845
|
-
})),
|
|
778
|
+
})), scale, _defaultSettings.SCALE_TYPES.identity));
|
|
846
779
|
onChange((0, _defineProperty2["default"])({}, property, _colorRanges.hexColorCustomPalette));
|
|
847
780
|
}
|
|
848
781
|
});
|
|
@@ -851,13 +784,10 @@ function LayerColorRangeSelectorFactory(ColorSelector) {
|
|
|
851
784
|
key: "render",
|
|
852
785
|
value: function render() {
|
|
853
786
|
var layer = this.props.layer;
|
|
854
|
-
|
|
855
787
|
var renderColorSelectorComponent = this.__renderDefaultColorSelectorComponent.bind(this);
|
|
856
|
-
|
|
857
788
|
if (layer.type === _types.LAYER_TYPES.heatmap) {
|
|
858
789
|
renderColorSelectorComponent = this.__renderHeatmapColorSelectorComponent.bind(this);
|
|
859
790
|
}
|
|
860
|
-
|
|
861
791
|
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
862
792
|
id: "layer.colorRange"
|
|
863
793
|
})), renderColorSelectorComponent());
|
|
@@ -865,32 +795,29 @@ function LayerColorRangeSelectorFactory(ColorSelector) {
|
|
|
865
795
|
}]);
|
|
866
796
|
return LayerColorRangeSelector;
|
|
867
797
|
}(_react.Component);
|
|
868
|
-
|
|
869
798
|
return LayerColorRangeSelector;
|
|
870
799
|
}
|
|
871
|
-
|
|
872
800
|
ChannelByValueSelectorFactory.deps = [_visConfigByFieldSelector["default"]];
|
|
873
|
-
|
|
874
801
|
function ChannelByValueSelectorFactory(VisConfigByFieldSelector) {
|
|
875
802
|
var ChannelByValueSelector = function ChannelByValueSelector(_ref13) {
|
|
876
803
|
var layer = _ref13.layer,
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
804
|
+
channel = _ref13.channel,
|
|
805
|
+
onChange = _ref13.onChange,
|
|
806
|
+
onChangeVisConfig = _ref13.onChangeVisConfig,
|
|
807
|
+
fields = _ref13.fields,
|
|
808
|
+
fieldsAggregated = _ref13.fieldsAggregated,
|
|
809
|
+
description = _ref13.description,
|
|
810
|
+
isLoading = _ref13.isLoading;
|
|
884
811
|
var channelScaleType = channel.channelScaleType,
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
812
|
+
domain = channel.domain,
|
|
813
|
+
field = channel.field,
|
|
814
|
+
aggregation = channel.aggregation,
|
|
815
|
+
key = channel.key,
|
|
816
|
+
property = channel.property,
|
|
817
|
+
range = channel.range,
|
|
818
|
+
scale = channel.scale,
|
|
819
|
+
defaultMeasure = channel.defaultMeasure,
|
|
820
|
+
supportedFieldTypes = channel.supportedFieldTypes;
|
|
894
821
|
var channelSupportedFieldTypes = supportedFieldTypes || _defaultSettings.CHANNEL_SCALE_SUPPORTED_FIELDS[channelScaleType];
|
|
895
822
|
var supportedFields = fields.filter(function (_ref14) {
|
|
896
823
|
var type = _ref14.type;
|
|
@@ -925,13 +852,11 @@ function ChannelByValueSelectorFactory(VisConfigByFieldSelector) {
|
|
|
925
852
|
colorMap: undefined
|
|
926
853
|
})));
|
|
927
854
|
}
|
|
928
|
-
|
|
929
855
|
if (!val) {
|
|
930
856
|
// Clean everything and comeback to default behaviour
|
|
931
857
|
onChange((0, _defineProperty2["default"])({}, field, null), key);
|
|
932
858
|
onChangeVisConfig((0, _defineProperty2["default"])({}, range, _colorRanges.DEFAULT_COLOR_RANGE));
|
|
933
859
|
}
|
|
934
|
-
|
|
935
860
|
onChange(_objectSpread((0, _defineProperty2["default"])({}, field, val), fieldsAggregated && {
|
|
936
861
|
visConfig: _objectSpread(_objectSpread({}, layer.config.visConfig), {}, (0, _defineProperty2["default"])({}, aggregation, val === null || val === void 0 ? void 0 : val.selectedAggregator))
|
|
937
862
|
}), key);
|
|
@@ -949,41 +874,33 @@ function ChannelByValueSelectorFactory(VisConfigByFieldSelector) {
|
|
|
949
874
|
isLoading: isLoading
|
|
950
875
|
});
|
|
951
876
|
};
|
|
952
|
-
|
|
953
877
|
return ChannelByValueSelector;
|
|
954
878
|
}
|
|
955
|
-
|
|
956
879
|
AggrScaleSelectorFactory.deps = [_colorDimensionScaleSelector["default"]];
|
|
957
|
-
|
|
958
880
|
function AggrScaleSelectorFactory(ColorDimensionScaleSelector) {
|
|
959
881
|
var AggrScaleSelector = /*#__PURE__*/function (_Component5) {
|
|
960
882
|
(0, _inherits2["default"])(AggrScaleSelector, _Component5);
|
|
961
|
-
|
|
962
|
-
var _super5 = _createSuper(AggrScaleSelector);
|
|
963
|
-
|
|
964
883
|
function AggrScaleSelector() {
|
|
965
884
|
(0, _classCallCheck2["default"])(this, AggrScaleSelector);
|
|
966
|
-
return
|
|
885
|
+
return _callSuper(this, AggrScaleSelector, arguments);
|
|
967
886
|
}
|
|
968
|
-
|
|
969
887
|
(0, _createClass2["default"])(AggrScaleSelector, [{
|
|
970
888
|
key: "render",
|
|
971
889
|
value: function render() {
|
|
972
890
|
var _this$props6 = this.props,
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
891
|
+
channel = _this$props6.channel,
|
|
892
|
+
layer = _this$props6.layer,
|
|
893
|
+
onChange = _this$props6.onChange,
|
|
894
|
+
onChangeVisConfig = _this$props6.onChangeVisConfig;
|
|
977
895
|
var scale = channel.scale,
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
896
|
+
key = channel.key,
|
|
897
|
+
channelScaleType = channel.channelScaleType,
|
|
898
|
+
domain = channel.domain,
|
|
899
|
+
range = channel.range;
|
|
982
900
|
var scaleOptions = layer.getScaleOptions(key);
|
|
983
901
|
var visRange = layer.config.visConfig[range];
|
|
984
902
|
var showScaleCustomizable = channelScaleType === _defaultSettings.CHANNEL_SCALES.colorAggr && Array.isArray(scaleOptions) && scaleOptions.length > 0;
|
|
985
903
|
var showScale = Array.isArray(scaleOptions) && scaleOptions.length > 1;
|
|
986
|
-
|
|
987
904
|
if (showScaleCustomizable) {
|
|
988
905
|
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(ColorDimensionScaleSelector, {
|
|
989
906
|
label: "".concat(key, " Scale"),
|
|
@@ -1002,7 +919,6 @@ function AggrScaleSelectorFactory(ColorDimensionScaleSelector) {
|
|
|
1002
919
|
}
|
|
1003
920
|
}));
|
|
1004
921
|
}
|
|
1005
|
-
|
|
1006
922
|
if (showScale) {
|
|
1007
923
|
return /*#__PURE__*/_react["default"].createElement(_dimensionScaleSelector["default"], {
|
|
1008
924
|
label: "".concat(key, " Scale"),
|
|
@@ -1013,26 +929,24 @@ function AggrScaleSelectorFactory(ColorDimensionScaleSelector) {
|
|
|
1013
929
|
}
|
|
1014
930
|
});
|
|
1015
931
|
}
|
|
1016
|
-
|
|
1017
932
|
return null;
|
|
1018
933
|
}
|
|
1019
934
|
}]);
|
|
1020
935
|
return AggrScaleSelector;
|
|
1021
936
|
}(_react.Component);
|
|
1022
|
-
|
|
1023
937
|
return (0, _reactIntl.injectIntl)(AggrScaleSelector);
|
|
1024
938
|
}
|
|
1025
|
-
|
|
1026
|
-
var AggregationTypeSelector = function AggregationTypeSelector(_ref15) {
|
|
939
|
+
var AggregationTypeSelector = exports.AggregationTypeSelector = function AggregationTypeSelector(_ref15) {
|
|
1027
940
|
var layer = _ref15.layer,
|
|
1028
|
-
|
|
1029
|
-
|
|
941
|
+
channel = _ref15.channel,
|
|
942
|
+
_onChange9 = _ref15.onChange;
|
|
1030
943
|
var field = channel.field,
|
|
1031
|
-
|
|
1032
|
-
|
|
944
|
+
aggregation = channel.aggregation,
|
|
945
|
+
key = channel.key;
|
|
1033
946
|
var selectedField = layer.config[field];
|
|
1034
|
-
var visConfig = layer.config.visConfig;
|
|
947
|
+
var visConfig = layer.config.visConfig;
|
|
1035
948
|
|
|
949
|
+
// aggregation should only be selectable when field is selected
|
|
1036
950
|
var aggregationOptions = layer.getAggregationOptions(key);
|
|
1037
951
|
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
1038
952
|
id: 'layer.aggregateBy',
|
|
@@ -1051,8 +965,6 @@ var AggregationTypeSelector = function AggregationTypeSelector(_ref15) {
|
|
|
1051
965
|
}
|
|
1052
966
|
}));
|
|
1053
967
|
};
|
|
1054
|
-
/* eslint-enable max-params */
|
|
1055
|
-
|
|
1056
968
|
|
|
1057
|
-
|
|
1058
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvbGF5ZXItY29uZmlndXJhdG9yLmpzIl0sIm5hbWVzIjpbIlN0eWxlZExheWVyQ29uZmlndXJhdG9yIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJwcm9wcyIsInRoZW1lIiwibGF5ZXJDb25maWd1cmF0b3JNYXJnaW4iLCJsYXllckNvbmZpZ3VyYXRvclBhZGRpbmciLCJsYXllckNvbmZpZ3VyYXRvckJvcmRlciIsImxheWVyQ29uZmlndXJhdG9yQm9yZGVyQ29sb3IiLCJTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvciIsImdldExheWVyRmllbGRzIiwiZGF0YXNldHMiLCJsYXllciIsImNvbmZpZyIsImRhdGFJZCIsImZpZWxkcyIsImdldExheWVyRGF0YXNldCIsImdldExheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJkaXNhYmxlZCIsIkJvb2xlYW4iLCJvbkNoYW5nZSIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2V0Q29sb3JVSSIsInVwZGF0ZUxheWVyQ29sb3JVSSIsImdldFZpc0NvbmZpZ3VyYXRvclByb3BzIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJnZXRMYXllckNoYW5uZWxDb25maWdQcm9wcyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZyIsIm9uQ2hhbmdlVmlzQ29uZmlnIiwiTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5IiwiZGVwcyIsIlNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnkiLCJWaXNDb25maWdTbGlkZXJGYWN0b3J5IiwiVGV4dExhYmVsUGFuZWxGYWN0b3J5IiwiTGF5ZXJDb25maWdHcm91cEZhY3RvcnkiLCJDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sdW1uQ29uZmlnRmFjdG9yeSIsIkxheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSIsIlZpc0NvbmZpZ1N3aXRjaEZhY3RvcnkiLCJBZ2dyU2NhbGVTZWxlY3RvckZhY3RvcnkiLCJMYXllclZpc2liaWxpdHlCeVpvb21GYWN0b3J5IiwiTGF5ZXJBZ2dyZWdhdGlvblJlc29sdXRpb25GYWN0b3J5IiwiTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSIsIkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeSIsIkFyY0xheWVyQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJDdXN0b21NYXJrZXJzQ29uZmlnR3JvdXBGYWN0b3J5IiwiU291cmNlRGF0YVNlbGVjdG9yIiwiVmlzQ29uZmlnU2xpZGVyIiwiVGV4dExhYmVsUGFuZWwiLCJMYXllckNvbmZpZ0dyb3VwIiwiQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvciIsIkxheWVyQ29sdW1uQ29uZmlnIiwiTGF5ZXJUeXBlU2VsZWN0b3IiLCJWaXNDb25maWdTd2l0Y2giLCJBZ2dyU2NhbGVTZWxlY3RvciIsIkxheWVyVmlzaWJpbGl0eUJ5Wm9vbSIsIkxheWVyQWdncmVnYXRpb25SZXNvbHV0aW9uIiwiTGF5ZXJDb2xvclNlbGVjdG9yIiwiTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3IiLCJBcmNMYXllckNvbG9yU2VsZWN0b3IiLCJDdXN0b21NYXJrZXJzQ29uZmlnR3JvdXAiLCJMYXllckNvbmZpZ3VyYXRvciIsIl9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnIiwidmlzQ29uZmlndXJhdG9yUHJvcHMiLCJsYXllckNoYW5uZWxDb25maWdQcm9wcyIsImxheWVyQ29uZmlndXJhdG9yUHJvcHMiLCJ2aXNDb25maWdTZXR0aW5ncyIsImZpbGxlZCIsImxhYmVsIiwiY29sb3JGaWVsZCIsInZpc3VhbENoYW5uZWxzIiwiY29sb3IiLCJvcGFjaXR5IiwidHlwZSIsIkxBWUVSX1RZUEVTIiwicG9pbnQiLCJvdXRsaW5lIiwidmlzQ29uZmlnIiwiY3VzdG9tTWFya2VycyIsInN0cm9rZUNvbG9yRmllbGQiLCJzdHJva2VDb2xvciIsInRoaWNrbmVzcyIsInNpemVGaWVsZCIsInJhZGl1cyIsInJhZGl1c1JhbmdlIiwic2l6ZSIsInVwZGF0ZUxheWVyVGV4dExhYmVsIiwidGV4dExhYmVsIiwiY29sb3JQYWxldHRlIiwic2V0Q29sb3JQYWxldHRlVUkiLCJjb2xvckFnZ3JlZ2F0aW9uIiwiY29uZGl0aW9uIiwiY2x1c3RlclJhZGl1cyIsIndlaWdodCIsIl9yZW5kZXJBZ2dyZWdhdGlvbkxheWVyQ29uZmlnIiwiZW5hYmxlM2QiLCJlbGV2YXRpb25CeURlc2NyaXB0aW9uIiwiY29sb3JCeURlc2NyaXB0aW9uIiwicGVyY2VudGlsZSIsIndvcmxkVW5pdFNpemUiLCJjb3ZlcmFnZSIsImVsZXZhdGlvblNjYWxlIiwic2l6ZVJhbmdlIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiZWxldmF0aW9uUGVyY2VudGlsZSIsImNvdmVyYWdlRmllbGQiLCJjb3ZlcmFnZVJhbmdlIiwiYXJncyIsIl9yZW5kZXJMaW5lTGF5ZXJDb25maWciLCJzb3VyY2VDb2xvciIsIm1ldGEiLCJmZWF0dXJlVHlwZXMiLCJwb2x5Z29uIiwic3Ryb2tlZCIsInRyYWlsTGVuZ3RoIiwic3Ryb2tlT3BhY2l0eSIsImhlaWdodCIsIndpcmVmcmFtZSIsInJhZGl1c0ZpZWxkIiwiZSIsInRhcmdldCIsImZpbGVzIiwidXJsIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwic2NlbmVncmFwaCIsInNpemVTY2FsZSIsImFuZ2xlWCIsImFuZ2xlWSIsImFuZ2xlWiIsImhlaWdodFJhbmdlIiwibGF5ZXJUeXBlT3B0aW9ucyIsInVwZGF0ZUxheWVyVHlwZSIsImZpZWxkUGFpcnMiLCJ1bmRlZmluZWQiLCJkYXRhc2V0IiwicmVuZGVyVGVtcGxhdGUiLCJsYXllckluZm9Nb2RhbCIsIm9wZW5Nb2RhbCIsIk9iamVjdCIsImtleXMiLCJjb2x1bW5zIiwibGVuZ3RoIiwiaGFzQWxsQ29sdW1ucyIsImlkIiwidmFsdWUiLCJjb2x1bW5QYWlycyIsImFzc2lnbkNvbHVtblBhaXJzIiwiYmluZCIsImFzc2lnbkNvbHVtbiIsImNvbHVtbkxhYmVscyIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJhcnJheU9mIiwiYW55IiwiZnVuYyIsIlN0eWxlZEhvd1RvQnV0dG9uIiwiSG93VG9CdXR0b24iLCJvbkNsaWNrIiwiQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJDb2xvclNlbGVjdG9yIiwic2VsZWN0ZWRDb2xvciIsInByb3BlcnR5Iiwic2V0Q29sb3IiLCJyZ2JWYWx1ZSIsImNvbG9yVUkiLCJuZXdDb25maWciLCJvbkNoYW5nZUNvbmZpZyIsInRhcmdldENvbG9yIiwiaXNSYW5nZSIsImNvbG9yUmFuZ2UiLCJjb2xvck1hcCIsImNvbG9yUmFuZ2VVcGRhdGVkIiwidXBkYXRlQ29sb3JNYXAiLCJjaGFubmVsIiwiaGFuZGxlQ3VzdG9tT25TZWxlY3RIZXhDb2x1bW4iLCJyYW5nZSIsImZpZWxkIiwic2NhbGUiLCJjb2xvckNvbHVtbiIsImNvbG9yQ29sdW1uSWR4IiwiU0NBTEVfVFlQRVMiLCJvcmRpbmFsIiwidmFsaWRhdGVTY2FsZSIsIm5hbWUiLCJmaWVsZElkeCIsImlkZW50aXR5IiwiaGV4Q29sb3JDdXN0b21QYWxldHRlIiwicmVuZGVyQ29sb3JTZWxlY3RvckNvbXBvbmVudCIsIl9fcmVuZGVyRGVmYXVsdENvbG9yU2VsZWN0b3JDb21wb25lbnQiLCJoZWF0bWFwIiwiX19yZW5kZXJIZWF0bWFwQ29sb3JTZWxlY3RvckNvbXBvbmVudCIsIlZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvckZhY3RvcnkiLCJWaXNDb25maWdCeUZpZWxkU2VsZWN0b3IiLCJmaWVsZHNBZ2dyZWdhdGVkIiwiZGVzY3JpcHRpb24iLCJpc0xvYWRpbmciLCJjaGFubmVsU2NhbGVUeXBlIiwiZG9tYWluIiwiYWdncmVnYXRpb24iLCJrZXkiLCJkZWZhdWx0TWVhc3VyZSIsInN1cHBvcnRlZEZpZWxkVHlwZXMiLCJjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsInN1cHBvcnRlZEZpZWxkcyIsImZpbHRlciIsImluY2x1ZGVzIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwic2hvd1NjYWxlQ3VzdG9taXphYmxlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJzaG93U2NhbGUiLCJpc0FnZ3JlZ2F0ZWQiLCJkZWZhdWx0RGVzY3JpcHRpb24iLCJ2aXNSYW5nZSIsImFnZ3JlZ2F0b3IiLCJ2YWwiLCJERUZBVUxUX0NPTE9SX1JBTkdFIiwic2VsZWN0ZWRBZ2dyZWdhdG9yIiwidWlDdXN0b21TY2FsZVR5cGUiLCJDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3JGYWN0b3J5IiwiQ29sb3JEaW1lbnNpb25TY2FsZVNlbGVjdG9yIiwiY29sb3JBZ2dyIiwiQXJyYXkiLCJpc0FycmF5IiwiQWdncmVnYXRpb25UeXBlU2VsZWN0b3IiLCJzZWxlY3RlZEZpZWxkIiwiYWdncmVnYXRpb25PcHRpb25zIiwiZ2V0QWdncmVnYXRpb25PcHRpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsdUJBQXVCLEdBQUdDLDZCQUFPQyxHQUFQLENBQVdDLEtBQVgsQ0FBaUI7QUFDL0NDLEVBQUFBLFNBQVMsRUFBRTtBQURvQyxDQUFqQixDQUFILDhMQUliLFVBQUFDLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsdUJBQWhCO0FBQUEsQ0FKUSxFQUtoQixVQUFBRixLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlFLHdCQUFoQjtBQUFBLENBTFcsRUFNWixVQUFBSCxLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENB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TUFBTXlKLGtCQUFrQixHQUFHMU4sS0FBSyxDQUFDMk4scUJBQU4sQ0FBNEI3QixHQUE1QixDQUEzQjtBQUVBLHNCQUNFLGdDQUFDLG1DQUFELHFCQUNFLGdDQUFDLDZCQUFELHFCQUNFLGdDQUFDLDhCQUFEO0FBQWtCLElBQUEsRUFBRSxFQUFFLG1CQUF0QjtBQUEyQyxJQUFBLE1BQU0sRUFBRTtBQUFDdkIsTUFBQUEsS0FBSyxFQUFFa0QsYUFBYSxDQUFDM0M7QUFBdEI7QUFBbkQsSUFERixDQURGLGVBSUUsZ0NBQUMsd0JBQUQ7QUFDRSxJQUFBLGFBQWEsRUFBRTdHLFNBQVMsQ0FBQzRILFdBQUQsQ0FEMUI7QUFFRSxJQUFBLE9BQU8sRUFBRTZCLGtCQUZYO0FBR0UsSUFBQSxXQUFXLEVBQUUsS0FIZjtBQUlFLElBQUEsVUFBVSxFQUFFLEtBSmQ7QUFLRSxJQUFBLFFBQVEsRUFBRSxrQkFBQXJGLEtBQUs7QUFBQSxhQUNiN0gsVUFBUSxDQUNOO0FBQ0V5RCxRQUFBQSxTQUFTLGtDQUNKakUsS0FBSyxDQUFDQyxNQUFOLENBQWFnRSxTQURULDRDQUVONEgsV0FGTSxFQUVReEQsS0FGUjtBQURYLE9BRE0sRUFPTitCLE9BQU8sQ0FBQzBCLEdBUEYsQ0FESztBQUFBO0FBTGpCLElBSkYsQ0FERjtBQXdCRCxDQWhDTTtBQWtDUCIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgRnJhZ21lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnbG9jYWxpemF0aW9uJztcblxuaW1wb3J0IHtCdXR0b24sIElucHV0LCBQYW5lbExhYmVsLCBTaWRlUGFuZWxTZWN0aW9ufSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgSXRlbVNlbGVjdG9yIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2l0ZW0tc2VsZWN0b3IvaXRlbS1zZWxlY3Rvcic7XG5cbmltcG9ydCBWaXNDb25maWdCeUZpZWxkU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vdmlzLWNvbmZpZy1ieS1maWVsZC1zZWxlY3Rvcic7XG5pbXBvcnQgTGF5ZXJDb2x1bW5Db25maWdGYWN0b3J5IGZyb20gJy4vbGF5ZXItY29sdW1uLWNvbmZpZyc7XG5pbXBvcnQgTGF5ZXJUeXBlU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vbGF5ZXItdHlwZS1zZWxlY3Rvcic7XG5pbXBvcnQgTGF5ZXJWaXNpYmlsaXR5Qnlab29tRmFjdG9yeSBmcm9tICcuL2xheWVyLXZpc2liaWxpdHktYnktem9vbSc7XG5pbXBvcnQgRGltZW5zaW9uU2NhbGVTZWxlY3RvciBmcm9tICcuL2RpbWVuc2lvbi1zY2FsZS1zZWxlY3Rvcic7XG5pbXBvcnQgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSBmcm9tICdjb21wb25lbnRzL3NpZGUtcGFuZWwvY29tbW9uL3NvdXJjZS1kYXRhLXNlbGVjdG9yJztcbmltcG9ydCBWaXNDb25maWdTd2l0Y2hGYWN0b3J5IGZyb20gJy4vdmlzLWNvbmZpZy1zd2l0Y2gnO1xuaW1wb3J0IFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXNsaWRlcic7XG5pbXBvcnQgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksIHtDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudH0gZnJvbSAnLi9sYXllci1jb25maWctZ3JvdXAnO1xuaW1wb3J0IEN1c3RvbU1hcmtlcnNDb25maWdHcm91cEZhY3RvcnkgZnJvbSAnLi9jdXN0b20tbWFya2Vycy1jb25maWctZ3JvdXAnO1xuaW1wb3J0IFRleHRMYWJlbFBhbmVsRmFjdG9yeSBmcm9tICcuL3RleHQtbGFiZWwtcGFuZWwnO1xuXG5pbXBvcnQge2NhcGl0YWxpemVGaXJzdExldHRlcn0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBDSEFOTkVMX1NDQUxFUyxcbiAgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTLFxuICBTQ0FMRV9UWVBFU1xufSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQge0xBWUVSX1RZUEVTfSBmcm9tICdsYXllcnMvdHlwZXMnO1xuaW1wb3J0IHtpbmplY3RJbnRsfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCBDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vY29sb3ItZGltZW5zaW9uLXNjYWxlLXNlbGVjdG9yJztcbmltcG9ydCBDb2xvclNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL2NvbG9yLXNlbGVjdG9yJztcbmltcG9ydCBMYXllckFnZ3JlZ2F0aW9uUmVzb2x1dGlvbkZhY3RvcnkgZnJvbSAnLi9sYXllci1hZ2dyZWdhdGlvbi1yZXNvbHV0aW9uJztcbmltcG9ydCB7REVGQVVMVF9DT0xPUl9SQU5HRSwgaGV4Q29sb3JDdXN0b21QYWxldHRlfSBmcm9tICdjb25zdGFudHMvY29sb3ItcmFuZ2VzJztcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZydcbn0pYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JNYXJnaW59O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yUGFkZGluZ307XG4gIGJvcmRlci1sZWZ0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyfSBkYXNoZWRcbiAgICAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZ19fdmlzdWFsQy1jb25maWcnXG59KWBcbiAgbWFyZ2luLXRvcDogMTJweDtcbmA7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckZpZWxkcyA9IChkYXRhc2V0cywgbGF5ZXIpID0+XG4gIGxheWVyLmNvbmZpZyAmJiBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSA/IGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLmZpZWxkcyA6IFtdO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJEYXRhc2V0ID0gKGRhdGFzZXRzLCBsYXllcikgPT5cbiAgbGF5ZXIuY29uZmlnICYmIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdID8gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0gOiBudWxsO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyA9IHByb3BzID0+ICh7XG4gIGxheWVyOiBwcm9wcy5sYXllcixcbiAgZGlzYWJsZWQ6IEJvb2xlYW4ocHJvcHMuZGlzYWJsZWQpLFxuICBmaWVsZHM6IGdldExheWVyRmllbGRzKHByb3BzLmRhdGFzZXRzLCBwcm9wcy5sYXllciksXG4gIG9uQ2hhbmdlOiBwcm9wcy51cGRhdGVMYXllckNvbmZpZyxcbiAgc2V0Q29sb3JVSTogcHJvcHMudXBkYXRlTGF5ZXJDb2xvclVJXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldFZpc0NvbmZpZ3VyYXRvclByb3BzID0gcHJvcHMgPT4gKHtcbiAgbGF5ZXI6IHByb3BzLmxheWVyLFxuICBmaWVsZHM6IGdldExheWVyRmllbGRzKHByb3BzLmRhdGFzZXRzLCBwcm9wcy5sYXllciksXG4gIG9uQ2hhbmdlOiBwcm9wcy51cGRhdGVMYXllclZpc0NvbmZpZyxcbiAgc2V0Q29sb3JVSTogcHJvcHMudXBkYXRlTGF5ZXJDb2xvclVJXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldExheWVyQ2hhbm5lbENvbmZpZ1Byb3BzID0gcHJvcHMgPT4gKHtcbiAgbGF5ZXI6IHByb3BzLmxheWVyLFxuICBmaWVsZHM6IGdldExheWVyRmllbGRzKHByb3BzLmRhdGFzZXRzLCBwcm9wcy5sYXllciksXG4gIG9uQ2hhbmdlOiBwcm9wcy51cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWcsXG4gIG9uQ2hhbmdlVmlzQ29uZmlnOiBwcm9wcy51cGRhdGVMYXllclZpc0NvbmZpZ1xufSk7XG5cbkxheWVyQ29uZmlndXJhdG9yRmFjdG9yeS5kZXBzID0gW1xuICBTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5LFxuICBWaXNDb25maWdTbGlkZXJGYWN0b3J5LFxuICBUZXh0TGFiZWxQYW5lbEZhY3RvcnksXG4gIExheWVyQ29uZmlnR3JvdXBGYWN0b3J5LFxuICBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2x1bW5Db25maWdGYWN0b3J5LFxuICBMYXllclR5cGVTZWxlY3RvckZhY3RvcnksXG4gIFZpc0NvbmZpZ1N3aXRjaEZhY3RvcnksXG4gIEFnZ3JTY2FsZVNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJWaXNpYmlsaXR5Qnlab29tRmFjdG9yeSxcbiAgTGF5ZXJBZ2dyZWdhdGlvblJlc29sdXRpb25GYWN0b3J5LFxuICBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnksXG4gIEFyY0xheWVyQ29sb3JTZWxlY3RvckZhY3RvcnksXG4gIEN1c3RvbU1hcmtlcnNDb25maWdHcm91cEZhY3Rvcnlcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExheWVyQ29uZmlndXJhdG9yRmFjdG9yeShcbiAgU291cmNlRGF0YVNlbGVjdG9yLFxuICBWaXNDb25maWdTbGlkZXIsXG4gIFRleHRMYWJlbFBhbmVsLFxuICBMYXllckNvbmZpZ0dyb3VwLFxuICBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yLFxuICBMYXllckNvbHVtbkNvbmZpZyxcbiAgTGF5ZXJUeXBlU2VsZWN0b3IsXG4gIFZpc0NvbmZpZ1N3aXRjaCxcbiAgQWdnclNjYWxlU2VsZWN0b3IsXG4gIExheWVyVmlzaWJpbGl0eUJ5Wm9vbSxcbiAgTGF5ZXJBZ2dyZWdhdGlvblJlc29sdXRpb24sXG4gIExheWVyQ29sb3JTZWxlY3RvcixcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3IsXG4gIEFyY0xheWVyQ29sb3JTZWxlY3RvcixcbiAgQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwXG4pIHtcbiAgY2xhc3MgTGF5ZXJDb25maWd1cmF0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBsYXllcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgZGF0YXNldHM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIGxheWVyVHlwZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLmlzUmVxdWlyZWQsXG4gICAgICBvcGVuTW9kYWw6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB1cGRhdGVMYXllckNvbmZpZzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZUxheWVyVHlwZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZUxheWVyVmlzQ29uZmlnOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdXBkYXRlTGF5ZXJDb2xvclVJOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfTtcblxuICAgIF9yZW5kZXJQb2ludExheWVyQ29uZmlnKHByb3BzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyhwcm9wcyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckljb25MYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIEZpbGwgQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi4obGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkIHx8IHtsYWJlbDogJ2xheWVyLmNvbG9yJ30pfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIG91dGxpbmUgY29sb3IgKi99XG4gICAgICAgICAge2xheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLnBvaW50ID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm91dGxpbmV9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4obGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5jdXN0b21NYXJrZXJzKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGNoYW5uZWw9XCJzdHJva2VDb2xvclwiIC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcudmlzQ29uZmlnLm91dGxpbmV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHtsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5wb2ludCA/IChcbiAgICAgICAgICAgIDxDdXN0b21NYXJrZXJzQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcz17dmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzPXtsYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7LyogUmFkaXVzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICBsYWJlbD17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5jdXN0b21NYXJrZXJzID8gJ2xheWVyLnNpemUnIDogJ2xheWVyLnJhZGl1cyd9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHshbGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXN9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17Qm9vbGVhbihsYXllci5jb25maWcuc2l6ZUZpZWxkKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5zaXplRmllbGR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogdGV4dCBsYWJlbCAqL31cbiAgICAgICAgICA8VGV4dExhYmVsUGFuZWxcbiAgICAgICAgICAgIGZpZWxkcz17dmlzQ29uZmlndXJhdG9yUHJvcHMuZmllbGRzfVxuICAgICAgICAgICAgdXBkYXRlTGF5ZXJUZXh0TGFiZWw9e3RoaXMucHJvcHMudXBkYXRlTGF5ZXJUZXh0TGFiZWx9XG4gICAgICAgICAgICB0ZXh0TGFiZWw9e2xheWVyLmNvbmZpZy50ZXh0TGFiZWx9XG4gICAgICAgICAgICBjb2xvclBhbGV0dGU9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLmNvbG9yUGFsZXR0ZX1cbiAgICAgICAgICAgIHNldENvbG9yUGFsZXR0ZVVJPXt2aXNDb25maWd1cmF0b3JQcm9wcy5zZXRDb2xvclBhbGV0dGVVSX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyQ2x1c3RlckxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxBZ2dyU2NhbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlVmlzQ29uZmlnPXtsYXllckNoYW5uZWxDb25maWdQcm9wcy5vbkNoYW5nZVZpc0NvbmZpZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9uLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb259XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogQ2x1c3RlciBSYWRpdXMgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNsdXN0ZXJSYWRpdXN9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVySGVhdG1hcExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIHsvKiBSYWRpdXMgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICB7LyogV2VpZ2h0ICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIud2VpZ2h0J30+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy53ZWlnaHR9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyR3JpZExheWVyQ29uZmlnKHByb3BzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyhwcm9wcyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckhleGFnb25MYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJBZ2dyZWdhdGlvbkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7Y29uZmlnfSA9IGxheWVyO1xuICAgICAgY29uc3Qge1xuICAgICAgICB2aXNDb25maWc6IHtlbmFibGUzZH1cbiAgICAgIH0gPSBjb25maWc7XG4gICAgICBjb25zdCBlbGV2YXRpb25CeURlc2NyaXB0aW9uID0gJ2xheWVyLmVsZXZhdGlvbkJ5RGVzY3JpcHRpb24nO1xuICAgICAgY29uc3QgY29sb3JCeURlc2NyaXB0aW9uID0gJ2xheWVyLmNvbG9yQnlEZXNjcmlwdGlvbic7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPEFnZ3JTY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWc9e2xheWVyQ2hhbm5lbENvbmZpZ1Byb3BzLm9uQ2hhbmdlVmlzQ29uZmlnfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb24uY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgPEFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JBZ2dyZWdhdGlvbn1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtjb2xvckJ5RGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnBlcmNlbnRpbGUgJiZcbiAgICAgICAgICAgICAgbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucGVyY2VudGlsZS5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucGVyY2VudGlsZX1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogQ2VsbCBzaXplICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy53b3JsZFVuaXRTaXplfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvdmVyYWdlfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBFbGV2YXRpb24gKi99XG4gICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodE11bHRpcGxpZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17ZWxldmF0aW9uQnlEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshZW5hYmxlM2R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8QWdnclNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlVmlzQ29uZmlnPXtsYXllckNoYW5uZWxDb25maWdQcm9wcy5vbkNoYW5nZVZpc0NvbmZpZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5oZWlnaHRSYW5nZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZUFnZ3JlZ2F0aW9uLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgICAgPEFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplQWdncmVnYXRpb259XG4gICAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblBlcmNlbnRpbGUuY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25QZXJjZW50aWxlfVxuICAgICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBTaGFuIG1vdmUgdGhlc2UgaW50byBsYXllciBjbGFzc1xuICAgIF9yZW5kZXJIZXhhZ29uSWRMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvbG9yJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIENvdmVyYWdlICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY292ZXJhZ2UnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHshbGF5ZXIuY29uZmlnLmNvdmVyYWdlRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY292ZXJhZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY292ZXJhZ2VSYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb3ZlcmFnZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBoZWlnaHQgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGUzZH1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5oZWlnaHRSYW5nZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlckFyY0xheWVyQ29uZmlnKGFyZ3MpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJMaW5lTGF5ZXJDb25maWcoYXJncyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckxpbmVMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvbG9yJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8QXJjTGF5ZXJDb2xvclNlbGVjdG9yXG4gICAgICAgICAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICAgICAgICAgIHNldENvbG9yVUk9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuc2V0Q29sb3JVSX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZUNvbmZpZz17bGF5ZXJDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZz17dmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNvdXJjZUNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogdGhpY2tuZXNzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuc3Ryb2tlJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbGF5ZXIuY29uZmlnLnNpemVGaWVsZH1cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIGVsZXZhdGlvbiBzY2FsZSAqL31cbiAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGUgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5lbGV2YXRpb25TY2FsZVwiIGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlclRyaXBMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtZXRhOiB7ZmVhdHVyZVR5cGVzID0ge319XG4gICAgICB9ID0gbGF5ZXI7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cImxheWVyLnN0cm9rZVdpZHRoXCIgY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBUcmFpbCBMZW5ndGgqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgey4uLihmZWF0dXJlVHlwZXMucG9seWdvbiA/IGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWQgOiB7fSl9XG4gICAgICAgICAgICBsYWJlbD1cImxheWVyLnRyYWlsTGVuZ3RoXCJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwibGF5ZXIudHJhaWxMZW5ndGhEZXNjcmlwdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudHJhaWxMZW5ndGh9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJHZW9qc29uTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWV0YToge2ZlYXR1cmVUeXBlcyA9IHt9fSxcbiAgICAgICAgY29uZmlnOiB7dmlzQ29uZmlnfVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIEZpbGwgQ29sb3IgKi99XG4gICAgICAgICAge2ZlYXR1cmVUeXBlcy5wb2x5Z29uIHx8IGZlYXR1cmVUeXBlcy5wb2ludCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maWxsZWR9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgbGFiZWw9XCJsYXllci5maWxsQ29sb3JcIlxuICAgICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgey8qIHN0cm9rZSBjb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWR9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD1cImxheWVyLnN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBjaGFubmVsPVwic3Ryb2tlQ29sb3JcIiAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlT3BhY2l0eX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIHsuLi4oZmVhdHVyZVR5cGVzLnBvbHlnb24gPyBsYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkIDoge30pfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc2l6ZUZpZWxkID8gKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVSYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50aGlja25lc3N9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBFbGV2YXRpb24gKi99XG4gICAgICAgICAge2ZlYXR1cmVUeXBlcy5wb2x5Z29uID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshdmlzQ29uZmlnLmZpbGxlZH1cbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmhlaWdodH1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mud2lyZWZyYW1lfSAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgICB7ZmVhdHVyZVR5cGVzLnBvaW50ID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgeyFsYXllci5jb25maWcucmFkaXVzRmllbGQgPyAoXG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyM0RMYXllckNvbmZpZyh7bGF5ZXIsIHZpc0NvbmZpZ3VyYXRvclByb3BzfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbCd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgYWNjZXB0PVwiLmdsYiwuZ2x0ZlwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXNbMF0pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZS50YXJnZXQuZmlsZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2Uoe3NjZW5lZ3JhcGg6IHVybH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbE9wdGlvbnMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVTY2FsZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuYW5nbGVYfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5hbmdsZVl9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmFuZ2xlWn1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlclMyTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29uZmlnOiB7dmlzQ29uZmlnfVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5maWxsQ29sb3JcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIFN0cm9rZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWR9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD1cImxheWVyLnN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBjaGFubmVsPVwic3Ryb2tlQ29sb3JcIiAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cImxheWVyLnN0cm9rZVdpZHRoXCIgY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXZpc0NvbmZpZy5maWxsZWR9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmhlaWdodH1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmVsZXZhdGlvblNjYWxlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuaGVpZ2h0UmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodFJhbmdlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy53aXJlZnJhbWV9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2xheWVyLCBkYXRhc2V0cywgdXBkYXRlTGF5ZXJDb25maWcsIGxheWVyVHlwZU9wdGlvbnMsIHVwZGF0ZUxheWVyVHlwZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge2ZpZWxkcyA9IFtdLCBmaWVsZFBhaXJzID0gdW5kZWZpbmVkfSA9IGxheWVyLmNvbmZpZy5kYXRhSWRcbiAgICAgICAgPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3Qge2NvbmZpZ30gPSBsYXllcjtcblxuICAgICAgY29uc3QgdmlzQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRWaXNDb25maWd1cmF0b3JQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRMYXllckNvbmZpZ3VyYXRvclByb3BzKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMgPSBnZXRMYXllckNoYW5uZWxDb25maWdQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBnZXRMYXllckRhdGFzZXQoZGF0YXNldHMsIGxheWVyKTtcbiAgICAgIGNvbnN0IHJlbmRlclRlbXBsYXRlID0gbGF5ZXIudHlwZSAmJiBgX3JlbmRlciR7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGxheWVyLnR5cGUpfUxheWVyQ29uZmlnYDtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHtsYXllci5sYXllckluZm9Nb2RhbCA/IChcbiAgICAgICAgICAgIDxIb3dUb0J1dHRvbiBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLm9wZW5Nb2RhbChsYXllci5sYXllckluZm9Nb2RhbCl9IC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIGxhYmVsPXsnbGF5ZXIuYmFzaWMnfVxuICAgICAgICAgICAgY29sbGFwc2libGU9e09iamVjdC5rZXlzKGxheWVyLmNvbmZpZy5jb2x1bW5zKS5sZW5ndGggPiAwfVxuICAgICAgICAgICAgZXhwYW5kZWQ9eyFsYXllci5oYXNBbGxDb2x1bW5zKCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPExheWVyVHlwZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICAgICAgICBsYXllclR5cGVPcHRpb25zPXtsYXllclR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICBvblNlbGVjdD17dXBkYXRlTGF5ZXJUeXBlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxMYXllclZpc2liaWxpdHlCeVpvb21cbiAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3RoaXMucHJvcHMudXBkYXRlTGF5ZXJDb25maWd9XG4gICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPExheWVyQWdncmVnYXRpb25SZXNvbHV0aW9uIGxheWVyPXtsYXllcn0gZGlzYWJsZWQ9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuZGlzYWJsZWR9IC8+XG4gICAgICAgICAgICB7T2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICAgICAgICA8U291cmNlRGF0YVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgIGlkPXtsYXllci5pZH1cbiAgICAgICAgICAgICAgICBkYXRhSWQ9e2NvbmZpZy5kYXRhSWR9XG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e3ZhbHVlID0+IHVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IHZhbHVlfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge09iamVjdC5rZXlzKGxheWVyLmNvbmZpZy5jb2x1bW5zKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxMYXllckNvbHVtbkNvbmZpZ1xuICAgICAgICAgICAgICAgICAgY29sdW1uUGFpcnM9e2xheWVyLmNvbHVtblBhaXJzfVxuICAgICAgICAgICAgICAgICAgY29sdW1ucz17bGF5ZXIuY29uZmlnLmNvbHVtbnN9XG4gICAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW5QYWlycz17bGF5ZXIuYXNzaWduQ29sdW1uUGFpcnMuYmluZChsYXllcil9XG4gICAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW49e2xheWVyLmFzc2lnbkNvbHVtbi5iaW5kKGxheWVyKX1cbiAgICAgICAgICAgICAgICAgIGNvbHVtbkxhYmVscz17bGF5ZXIuY29sdW1uTGFiZWxzfVxuICAgICAgICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICAgICAgICBmaWVsZFBhaXJzPXtmaWVsZFBhaXJzfVxuICAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3VwZGF0ZUxheWVyQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJUeXBlPXt0aGlzLnByb3BzLnVwZGF0ZUxheWVyVHlwZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAge3RoaXNbcmVuZGVyVGVtcGxhdGVdICYmXG4gICAgICAgICAgICB0aGlzW3JlbmRlclRlbXBsYXRlXSh7XG4gICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgICAgICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgICAgICAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHNcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTGF5ZXJDb25maWd1cmF0b3I7XG59XG4vKlxuICogQ29tcG9uZW50aXplIGNvbmZpZyBjb21wb25lbnQgaW50byBwdXJlIGZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICovXG5cbmNvbnN0IFN0eWxlZEhvd1RvQnV0dG9uID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMTJweDtcbiAgdG9wOiAtNHB4O1xuYDtcblxuZXhwb3J0IGNvbnN0IEhvd1RvQnV0dG9uID0gKHtvbkNsaWNrfSkgPT4gKFxuICA8U3R5bGVkSG93VG9CdXR0b24+XG4gICAgPEJ1dHRvbiBsaW5rIHNtYWxsIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydsYXllckNvbmZpZ3VyYXRpb24uaG93VG8nfSAvPlxuICAgIDwvQnV0dG9uPlxuICA8L1N0eWxlZEhvd1RvQnV0dG9uPlxuKTtcblxuTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5KENvbG9yU2VsZWN0b3IpIHtcbiAgY2xhc3MgTGF5ZXJDb2xvclNlbGVjdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7bGF5ZXIsIG9uQ2hhbmdlLCBzZWxlY3RlZENvbG9yLCBwcm9wZXJ0eSA9ICdjb2xvcicsIHNldENvbG9yVUksIGZpZWxkc30gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImxheWVyLmNvbG9yXCIgLz5cbiAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgPENvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiBzZWxlY3RlZENvbG9yIHx8IGxheWVyLmNvbmZpZy5jb2xvcixcbiAgICAgICAgICAgICAgICBzZXRDb2xvcjogcmdiVmFsdWUgPT4gb25DaGFuZ2Uoe1twcm9wZXJ0eV06IHJnYlZhbHVlfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGNvbG9yVUk9e2xheWVyLmNvbmZpZy5jb2xvclVJW3Byb3BlcnR5XX1cbiAgICAgICAgICAgIHNldENvbG9yVUk9e25ld0NvbmZpZyA9PiBzZXRDb2xvclVJKHByb3BlcnR5LCBuZXdDb25maWcpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIExheWVyQ29sb3JTZWxlY3Rvcjtcbn1cblxuQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5KENvbG9yU2VsZWN0b3IpIHtcbiAgY2xhc3MgQXJjTGF5ZXJDb2xvclNlbGVjdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGxheWVyLFxuICAgICAgICBvbkNoYW5nZUNvbmZpZyxcbiAgICAgICAgb25DaGFuZ2VWaXNDb25maWcsXG4gICAgICAgIHByb3BlcnR5ID0gJ2NvbG9yJyxcbiAgICAgICAgc2V0Q29sb3JVSSxcbiAgICAgICAgZmllbGRzXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImxheWVyLmNvbG9yUmFuZ2VcIiAvPlxuICAgICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgICA8Q29sb3JTZWxlY3RvclxuICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICBjb2xvclNldHM9e1tcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IGxheWVyLmNvbmZpZy5jb2xvcixcbiAgICAgICAgICAgICAgICBzZXRDb2xvcjogcmdiVmFsdWUgPT4gb25DaGFuZ2VDb25maWcoe2NvbG9yOiByZ2JWYWx1ZX0pLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnU291cmNlJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcjogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy50YXJnZXRDb2xvciB8fCBsYXllci5jb25maWcuY29sb3IsXG4gICAgICAgICAgICAgICAgc2V0Q29sb3I6IHJnYlZhbHVlID0+IG9uQ2hhbmdlVmlzQ29uZmlnKHt0YXJnZXRDb2xvcjogcmdiVmFsdWV9KSxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1RhcmdldCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGNvbG9yVUk9e2xheWVyLmNvbmZpZy5jb2xvclVJW3Byb3BlcnR5XX1cbiAgICAgICAgICAgIHNldENvbG9yVUk9e25ld0NvbmZpZyA9PiBzZXRDb2xvclVJKHByb3BlcnR5LCBuZXdDb25maWcpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBBcmNMYXllckNvbG9yU2VsZWN0b3I7XG59XG5cbkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnkoQ29sb3JTZWxlY3Rvcikge1xuICBjbGFzcyBMYXllckNvbG9yUmFuZ2VTZWxlY3RvciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgX19yZW5kZXJIZWF0bWFwQ29sb3JTZWxlY3RvckNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gJ2NvbG9yUmFuZ2UnO1xuICAgICAgY29uc3Qge2xheWVyLCBvbkNoYW5nZSwgc2V0Q29sb3JVSX0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbG9yU2VsZWN0b3JcbiAgICAgICAgICBjb2xvclNldHM9e1tcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcjogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wZXJ0eV0sXG4gICAgICAgICAgICAgIGlzUmFuZ2U6IHRydWUsXG4gICAgICAgICAgICAgIHNldENvbG9yOiBjb2xvclJhbmdlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7Y29sb3JNYXB9ID0gbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3JSYW5nZVVwZGF0ZWQgPSBjb2xvck1hcFxuICAgICAgICAgICAgICAgICAgPyBsYXllci51cGRhdGVDb2xvck1hcChwcm9wZXJ0eSwgY29sb3JNYXAsIGNvbG9yUmFuZ2UpXG4gICAgICAgICAgICAgICAgICA6IGNvbG9yUmFuZ2U7XG4gICAgICAgICAgICAgICAgb25DaGFuZ2Uoe1twcm9wZXJ0eV06IGNvbG9yUmFuZ2VVcGRhdGVkfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdfVxuICAgICAgICAgIGNvbG9yVUk9e2xheWVyLmNvbmZpZy5jb2xvclVJW3Byb3BlcnR5XX1cbiAgICAgICAgICBzZXRDb2xvclVJPXtuZXdDb25maWcgPT4gc2V0Q29sb3JVSShwcm9wZXJ0eSwgbmV3Q29uZmlnKX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIF9fcmVuZGVyRGVmYXVsdENvbG9yU2VsZWN0b3JDb21wb25lbnQoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGxheWVyLFxuICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgY2hhbm5lbCA9ICdjb2xvcicsXG4gICAgICAgIHNldENvbG9yVUksXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgaGFuZGxlQ3VzdG9tT25TZWxlY3RIZXhDb2x1bW4gPSAoKSA9PiBudWxsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHtyYW5nZTogcHJvcGVydHksIGZpZWxkLCBzY2FsZX0gPSBsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xvclNlbGVjdG9yXG4gICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IGxheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcGVydHldLFxuICAgICAgICAgICAgICBpc1JhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICBzZXRDb2xvcjogY29sb3JSYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge2NvbG9yTWFwfSA9IGxheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yUmFuZ2VVcGRhdGVkID0gY29sb3JNYXBcbiAgICAgICAgICAgICAgICAgID8gbGF5ZXIudXBkYXRlQ29sb3JNYXAocHJvcGVydHksIGNvbG9yTWFwLCBjb2xvclJhbmdlKVxuICAgICAgICAgICAgICAgICAgOiBjb2xvclJhbmdlO1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHNjYWxlIGNoYW5nZXMgZnJvbSBpZGVudGl0eSB0byBvcmRpbmFsXG4gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgc2NhbGUgdG8gZW5zdXJlIHRoYXQgaXQgY2hhbmdlcyBmcm9tIGBpZGVudGl0eWAgdG8gdGhlIGNvcnJlY3Qgb25lLlxuICAgICAgICAgICAgICAgIGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgICAgICAgIFtmaWVsZF06IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3JDb2x1bW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yQ29sdW1uSWR4OiBudWxsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW3NjYWxlXTogU0NBTEVfVFlQRVMub3JkaW5hbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxheWVyLnZhbGlkYXRlU2NhbGUoY2hhbm5lbCk7XG4gICAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgb25DaGFuZ2Uoe1twcm9wZXJ0eV06IGNvbG9yUmFuZ2VVcGRhdGVkfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdfVxuICAgICAgICAgIGNvbG9yVUk9e2xheWVyLmNvbmZpZy5jb2xvclVJW3Byb3BlcnR5XX1cbiAgICAgICAgICBzZXRDb2xvclVJPXtuZXdDb25maWcgPT4gc2V0Q29sb3JVSShwcm9wZXJ0eSwgbmV3Q29uZmlnKX1cbiAgICAgICAgICBvblNlbGVjdEhleENvbG9yQ29sdW1uPXtjb2xvckNvbHVtbiA9PiB7XG4gICAgICAgICAgICAvLyBJdCdzIGRlZmluZWQgaW4gQ046IHNlZSB3b3Jrc3BhY2Utd3d3L3NyYy9mZWF0dXJlcy9idWlsZGVyL3VpL0tlcGxlckdsL1NpZGVQYW5lbC9MYXllclBhbmVsL0xheWVyQ29sb3JSYW5nZVNlbGVjdG9yLnRzeFxuICAgICAgICAgICAgaGFuZGxlQ3VzdG9tT25TZWxlY3RIZXhDb2x1bW4obGF5ZXIsIGNvbG9yQ29sdW1uKTtcblxuICAgICAgICAgICAgbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgICBbZmllbGRdOiB7XG4gICAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICBjb2xvckNvbHVtbjogY29sb3JDb2x1bW4/Lm5hbWUsXG4gICAgICAgICAgICAgICAgY29sb3JDb2x1bW5JZHg6IGNvbG9yQ29sdW1uPy5maWVsZElkeFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbc2NhbGVdOiBTQ0FMRV9UWVBFUy5pZGVudGl0eVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG9uQ2hhbmdlKHtbcHJvcGVydHldOiBoZXhDb2xvckN1c3RvbVBhbGV0dGV9KTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7bGF5ZXJ9ID0gdGhpcy5wcm9wcztcbiAgICAgIGxldCByZW5kZXJDb2xvclNlbGVjdG9yQ29tcG9uZW50ID0gdGhpcy5fX3JlbmRlckRlZmF1bHRDb2xvclNlbGVjdG9yQ29tcG9uZW50LmJpbmQodGhpcyk7XG5cbiAgICAgIGlmIChsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5oZWF0bWFwKSB7XG4gICAgICAgIHJlbmRlckNvbG9yU2VsZWN0b3JDb21wb25lbnQgPSB0aGlzLl9fcmVuZGVySGVhdG1hcENvbG9yU2VsZWN0b3JDb21wb25lbnQuYmluZCh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImxheWVyLmNvbG9yUmFuZ2VcIiAvPlxuICAgICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgICB7cmVuZGVyQ29sb3JTZWxlY3RvckNvbXBvbmVudCgpfVxuICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3I7XG59XG5cbkNoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5LmRlcHMgPSBbVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yRmFjdG9yeV07XG5leHBvcnQgZnVuY3Rpb24gQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnkoVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yKSB7XG4gIGNvbnN0IENoYW5uZWxCeVZhbHVlU2VsZWN0b3IgPSAoe1xuICAgIGxheWVyLFxuICAgIGNoYW5uZWwsXG4gICAgb25DaGFuZ2UsXG4gICAgb25DaGFuZ2VWaXNDb25maWcsXG4gICAgZmllbGRzLFxuICAgIGZpZWxkc0FnZ3JlZ2F0ZWQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgaXNMb2FkaW5nXG4gIH0pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjaGFubmVsU2NhbGVUeXBlLFxuICAgICAgZG9tYWluLFxuICAgICAgZmllbGQsXG4gICAgICBhZ2dyZWdhdGlvbixcbiAgICAgIGtleSxcbiAgICAgIHByb3BlcnR5LFxuICAgICAgcmFuZ2UsXG4gICAgICBzY2FsZSxcbiAgICAgIGRlZmF1bHRNZWFzdXJlLFxuICAgICAgc3VwcG9ydGVkRmllbGRUeXBlc1xuICAgIH0gPSBjaGFubmVsO1xuICAgIGNvbnN0IGNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzID1cbiAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXMgfHwgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTW2NoYW5uZWxTY2FsZVR5cGVdO1xuICAgIGNvbnN0IHN1cHBvcnRlZEZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoKHt0eXBlfSkgPT4gY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMuaW5jbHVkZXModHlwZSkpO1xuICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IGxheWVyLmdldFNjYWxlT3B0aW9ucyhjaGFubmVsLmtleSk7XG4gICAgY29uc3Qgc2hvd1NjYWxlQ3VzdG9taXphYmxlID1cbiAgICAgIGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgICBzY2FsZSAmJlxuICAgICAgbGF5ZXIuY29uZmlnW3NjYWxlXSAmJlxuICAgICAgQm9vbGVhbihsYXllci5jb25maWdbZmllbGRdKSAmJlxuICAgICAgc2NhbGVPcHRpb25zPy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IHNob3dTY2FsZSA9IEJvb2xlYW4oXG4gICAgICAhc2hvd1NjYWxlQ3VzdG9taXphYmxlICYmXG4gICAgICAgIHNjYWxlICYmXG4gICAgICAgICFsYXllci5pc0FnZ3JlZ2F0ZWQgJiZcbiAgICAgICAgbGF5ZXIuY29uZmlnW3NjYWxlXSAmJlxuICAgICAgICBzY2FsZU9wdGlvbnM/Lmxlbmd0aCA+IDFcbiAgICApO1xuICAgIGNvbnN0IGRlZmF1bHREZXNjcmlwdGlvbiA9ICdsYXllckNvbmZpZ3VyYXRpb24uZGVmYXVsdERlc2NyaXB0aW9uJztcbiAgICBjb25zdCB2aXNSYW5nZSA9IGxheWVyLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdO1xuICAgIGNvbnN0IGFnZ3JlZ2F0b3IgPSBsYXllci5jb25maWcudmlzQ29uZmlnW2FnZ3JlZ2F0aW9uXTtcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yXG4gICAgICAgIGNoYW5uZWw9e2NoYW5uZWwua2V5fVxuICAgICAgICBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb24gfHwgZGVmYXVsdERlc2NyaXB0aW9ufVxuICAgICAgICBkb21haW49e2xheWVyLmNvbmZpZ1tkb21haW5dfVxuICAgICAgICBmaWVsZHM9e3N1cHBvcnRlZEZpZWxkc31cbiAgICAgICAgYWdncmVnYXRvcj17YWdncmVnYXRvcn1cbiAgICAgICAgZmllbGRzQWdncmVnYXRlZD17ZmllbGRzQWdncmVnYXRlZH1cbiAgICAgICAgaWQ9e2xheWVyLmlkfVxuICAgICAgICBrZXk9e2Ake2tleX0tY2hhbm5lbC1zZWxlY3RvcmB9XG4gICAgICAgIHByb3BlcnR5PXtwcm9wZXJ0eX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e2RlZmF1bHRNZWFzdXJlIHx8ICdwbGFjZWhvbGRlci5zZWxlY3RGaWVsZCd9XG4gICAgICAgIHJhbmdlPXt2aXNSYW5nZX1cbiAgICAgICAgc2NhbGVPcHRpb25zPXtzY2FsZU9wdGlvbnN9XG4gICAgICAgIHNjYWxlVHlwZT17c2NhbGUgPyBsYXllci5jb25maWdbc2NhbGVdIDogbnVsbH1cbiAgICAgICAgc2VsZWN0ZWRGaWVsZD17bGF5ZXIuY29uZmlnW2ZpZWxkXX1cbiAgICAgICAgc2hvd1NjYWxlPXtzaG93U2NhbGV9XG4gICAgICAgIHNob3dTY2FsZUN1c3RvbWl6YWJsZT17c2hvd1NjYWxlQ3VzdG9taXphYmxlfVxuICAgICAgICB1cGRhdGVGaWVsZD17dmFsID0+IHtcbiAgICAgICAgICBpZiAodmlzUmFuZ2U/LmNvbG9yTWFwKSB7XG4gICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZyh7W3JhbmdlXTogey4uLnZpc1JhbmdlLCBjb2xvck1hcDogdW5kZWZpbmVkfX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgLy8gQ2xlYW4gZXZlcnl0aGluZyBhbmQgY29tZWJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvdXJcbiAgICAgICAgICAgIG9uQ2hhbmdlKHtbZmllbGRdOiBudWxsfSwga2V5KTtcbiAgICAgICAgICAgIG9uQ2hhbmdlVmlzQ29uZmlnKHtbcmFuZ2VdOiBERUZBVUxUX0NPTE9SX1JBTkdFfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9uQ2hhbmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbZmllbGRdOiB2YWwsXG4gICAgICAgICAgICAgIC4uLihmaWVsZHNBZ2dyZWdhdGVkICYmIHtcbiAgICAgICAgICAgICAgICB2aXNDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgICAgICAgICAgICAgICBbYWdncmVnYXRpb25dOiB2YWw/LnNlbGVjdGVkQWdncmVnYXRvclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGxheWVyLnZhbGlkYXRlU2NhbGUoa2V5KTtcbiAgICAgICAgfX1cbiAgICAgICAgdXBkYXRlU2NhbGU9e3ZhbCA9PiBvbkNoYW5nZSh7W3NjYWxlXTogdmFsfSwga2V5KX1cbiAgICAgICAgdXBkYXRlQ3VzdG9tUGFsZXR0ZT17KGNvbG9yTWFwLCB1aUN1c3RvbVNjYWxlVHlwZSkgPT4ge1xuICAgICAgICAgIG9uQ2hhbmdlVmlzQ29uZmlnKHtbcmFuZ2VdOiB7Li4udmlzUmFuZ2UsIGNvbG9yTWFwLCB1aUN1c3RvbVNjYWxlVHlwZX19KTtcbiAgICAgICAgfX1cbiAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIENoYW5uZWxCeVZhbHVlU2VsZWN0b3I7XG59XG5cbkFnZ3JTY2FsZVNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yRGltZW5zaW9uU2NhbGVTZWxlY3RvckZhY3RvcnldO1xuXG5mdW5jdGlvbiBBZ2dyU2NhbGVTZWxlY3RvckZhY3RvcnkoQ29sb3JEaW1lbnNpb25TY2FsZVNlbGVjdG9yKSB7XG4gIGNsYXNzIEFnZ3JTY2FsZVNlbGVjdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7Y2hhbm5lbCwgbGF5ZXIsIG9uQ2hhbmdlLCBvbkNoYW5nZVZpc0NvbmZpZ30gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge3NjYWxlLCBrZXksIGNoYW5uZWxTY2FsZVR5cGUsIGRvbWFpbiwgcmFuZ2V9ID0gY2hhbm5lbDtcbiAgICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IGxheWVyLmdldFNjYWxlT3B0aW9ucyhrZXkpO1xuICAgICAgY29uc3QgdmlzUmFuZ2UgPSBsYXllci5jb25maWcudmlzQ29uZmlnW3JhbmdlXTtcbiAgICAgIGNvbnN0IHNob3dTY2FsZUN1c3RvbWl6YWJsZSA9XG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yQWdnciAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHNjYWxlT3B0aW9ucykgJiZcbiAgICAgICAgc2NhbGVPcHRpb25zLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBzaG93U2NhbGUgPSBBcnJheS5pc0FycmF5KHNjYWxlT3B0aW9ucykgJiYgc2NhbGVPcHRpb25zLmxlbmd0aCA+IDE7XG5cbiAgICAgIGlmIChzaG93U2NhbGVDdXN0b21pemFibGUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgIDxDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgbGFiZWw9e2Ake2tleX0gU2NhbGVgfVxuICAgICAgICAgICAgICBzY2FsZVR5cGU9e2xheWVyLmNvbmZpZ1tzY2FsZV19XG4gICAgICAgICAgICAgIG9wdGlvbnM9e3NjYWxlT3B0aW9uc31cbiAgICAgICAgICAgICAgZG9tYWluPXtsYXllci5jb25maWdbZG9tYWluXX1cbiAgICAgICAgICAgICAgcmFuZ2U9e3Zpc1JhbmdlfVxuICAgICAgICAgICAgICBvblNlbGVjdD17dmFsID0+IG9uQ2hhbmdlKHtbc2NhbGVdOiB2YWx9LCBrZXkpfVxuICAgICAgICAgICAgICBvblNldEN1c3RvbVBhbGV0dGU9eyhjb2xvck1hcCwgdWlDdXN0b21TY2FsZVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZyh7W3JhbmdlXTogey4uLnZpc1JhbmdlLCBjb2xvck1hcCwgdWlDdXN0b21TY2FsZVR5cGV9fSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3dTY2FsZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxEaW1lbnNpb25TY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICBsYWJlbD17YCR7a2V5fSBTY2FsZWB9XG4gICAgICAgICAgICBvcHRpb25zPXtzY2FsZU9wdGlvbnN9XG4gICAgICAgICAgICBzY2FsZVR5cGU9e2xheWVyLmNvbmZpZ1tzY2FsZV19XG4gICAgICAgICAgICBvblNlbGVjdD17dmFsID0+IG9uQ2hhbmdlKHtbc2NhbGVdOiB2YWx9LCBrZXkpfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluamVjdEludGwoQWdnclNjYWxlU2VsZWN0b3IpO1xufVxuXG5leHBvcnQgY29uc3QgQWdncmVnYXRpb25UeXBlU2VsZWN0b3IgPSAoe2xheWVyLCBjaGFubmVsLCBvbkNoYW5nZX0pID0+IHtcbiAgY29uc3Qge2ZpZWxkLCBhZ2dyZWdhdGlvbiwga2V5fSA9IGNoYW5uZWw7XG4gIGNvbnN0IHNlbGVjdGVkRmllbGQgPSBsYXllci5jb25maWdbZmllbGRdO1xuICBjb25zdCB7dmlzQ29uZmlnfSA9IGxheWVyLmNvbmZpZztcblxuICAvLyBhZ2dyZWdhdGlvbiBzaG91bGQgb25seSBiZSBzZWxlY3RhYmxlIHdoZW4gZmllbGQgaXMgc2VsZWN0ZWRcbiAgY29uc3QgYWdncmVnYXRpb25PcHRpb25zID0gbGF5ZXIuZ2V0QWdncmVnYXRpb25PcHRpb25zKGtleSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2xheWVyLmFnZ3JlZ2F0ZUJ5J30gdmFsdWVzPXt7ZmllbGQ6IHNlbGVjdGVkRmllbGQubmFtZX19IC8+XG4gICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICA8SXRlbVNlbGVjdG9yXG4gICAgICAgIHNlbGVjdGVkSXRlbXM9e3Zpc0NvbmZpZ1thZ2dyZWdhdGlvbl19XG4gICAgICAgIG9wdGlvbnM9e2FnZ3JlZ2F0aW9uT3B0aW9uc31cbiAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICBzZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgb25DaGFuZ2U9e3ZhbHVlID0+XG4gICAgICAgICAgb25DaGFuZ2UoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgICAgICAgICAgICAgW2FnZ3JlZ2F0aW9uXTogdmFsdWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoYW5uZWwua2V5XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAvPlxuICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgKTtcbn07XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXBhcmFtcyAqL1xuIl19
|
|
969
|
+
/* eslint-enable max-params */
|
|
970
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2xvY2FsaXphdGlvbiIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9pdGVtU2VsZWN0b3IiLCJfdmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yIiwiX2xheWVyQ29sdW1uQ29uZmlnIiwiX2xheWVyVHlwZVNlbGVjdG9yIiwiX2xheWVyVmlzaWJpbGl0eUJ5Wm9vbSIsIl9kaW1lbnNpb25TY2FsZVNlbGVjdG9yIiwiX3NvdXJjZURhdGFTZWxlY3RvciIsIl92aXNDb25maWdTd2l0Y2giLCJfdmlzQ29uZmlnU2xpZGVyIiwiX2xheWVyQ29uZmlnR3JvdXAiLCJfY3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwIiwiX3RleHRMYWJlbFBhbmVsIiwiX3V0aWxzIiwiX2RlZmF1bHRTZXR0aW5ncyIsIl90eXBlcyIsIl9yZWFjdEludGwiLCJfY29sb3JEaW1lbnNpb25TY2FsZVNlbGVjdG9yIiwiX2NvbG9yU2VsZWN0b3IiLCJfbGF5ZXJBZ2dyZWdhdGlvblJlc29sdXRpb24iLCJfY29sb3JSYW5nZXMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsImxheWVyQ29uZmlndXJhdG9yTWFyZ2luIiwibGF5ZXJDb25maWd1cmF0b3JQYWRkaW5nIiwibGF5ZXJDb25maWd1cmF0b3JCb3JkZXIiLCJsYXllckNvbmZpZ3VyYXRvckJvcmRlckNvbG9yIiwiU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3IiLCJnZXRMYXllckZpZWxkcyIsImV4cG9ydHMiLCJkYXRhc2V0cyIsImxheWVyIiwiY29uZmlnIiwiZGF0YUlkIiwiZmllbGRzIiwiZ2V0TGF5ZXJEYXRhc2V0IiwiZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsImRpc2FibGVkIiwib25DaGFuZ2UiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNldENvbG9yVUkiLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJnZXRWaXNDb25maWd1cmF0b3JQcm9wcyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiZ2V0TGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWciLCJvbkNoYW5nZVZpc0NvbmZpZyIsIkxheWVyQ29uZmlndXJhdG9yRmFjdG9yeSIsImRlcHMiLCJTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5IiwiVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSIsIlRleHRMYWJlbFBhbmVsRmFjdG9yeSIsIkxheWVyQ29uZmlnR3JvdXBGYWN0b3J5IiwiQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbHVtbkNvbmZpZ0ZhY3RvcnkiLCJMYXllclR5cGVTZWxlY3RvckZhY3RvcnkiLCJWaXNDb25maWdTd2l0Y2hGYWN0b3J5IiwiQWdnclNjYWxlU2VsZWN0b3JGYWN0b3J5IiwiTGF5ZXJWaXNpYmlsaXR5Qnlab29tRmFjdG9yeSIsIkxheWVyQWdncmVnYXRpb25SZXNvbHV0aW9uRmFjdG9yeSIsIkxheWVyQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnkiLCJBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5IiwiQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwRmFjdG9yeSIsIlNvdXJjZURhdGFTZWxlY3RvciIsIlZpc0NvbmZpZ1NsaWRlciIsIlRleHRMYWJlbFBhbmVsIiwiTGF5ZXJDb25maWdHcm91cCIsIkNoYW5uZWxCeVZhbHVlU2VsZWN0b3IiLCJMYXllckNvbHVtbkNvbmZpZyIsIkxheWVyVHlwZVNlbGVjdG9yIiwiVmlzQ29uZmlnU3dpdGNoIiwiQWdnclNjYWxlU2VsZWN0b3IiLCJMYXllclZpc2liaWxpdHlCeVpvb20iLCJMYXllckFnZ3JlZ2F0aW9uUmVzb2x1dGlvbiIsIkxheWVyQ29sb3JTZWxlY3RvciIsIkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yIiwiQXJjTGF5ZXJDb2xvclNlbGVjdG9yIiwiQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwIiwiTGF5ZXJDb25maWd1cmF0b3IiLCJfQ29tcG9uZW50IiwiX2luaGVyaXRzMiIsIl9jbGFzc0NhbGxDaGVjazIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJfcmVuZGVyUG9pbnRMYXllckNvbmZpZyIsIl9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnIiwiX3JlbmRlckljb25MYXllckNvbmZpZyIsIl9yZWYiLCJ2aXNDb25maWd1cmF0b3JQcm9wcyIsImxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzIiwibGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImZpbGxlZCIsImxhYmVsIiwiY29sbGFwc2libGUiLCJjb2xvckZpZWxkIiwiQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQiLCJjaGFubmVsIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsIm9wYWNpdHkiLCJ0eXBlIiwiTEFZRVJfVFlQRVMiLCJwb2ludCIsIm91dGxpbmUiLCJ2aXNDb25maWciLCJjdXN0b21NYXJrZXJzIiwic3Ryb2tlQ29sb3JGaWVsZCIsInNlbGVjdGVkQ29sb3IiLCJzdHJva2VDb2xvciIsInByb3BlcnR5IiwidGhpY2tuZXNzIiwic2l6ZUZpZWxkIiwicmFkaXVzIiwicmFkaXVzUmFuZ2UiLCJzaXplIiwidXBkYXRlTGF5ZXJUZXh0TGFiZWwiLCJ0ZXh0TGFiZWwiLCJjb2xvclBhbGV0dGUiLCJzZXRDb2xvclBhbGV0dGVVSSIsIl9yZW5kZXJDbHVzdGVyTGF5ZXJDb25maWciLCJfcmVmMiIsImNvbG9yQWdncmVnYXRpb24iLCJjb25kaXRpb24iLCJBZ2dyZWdhdGlvblR5cGVTZWxlY3RvciIsImNsdXN0ZXJSYWRpdXMiLCJfcmVuZGVySGVhdG1hcExheWVyQ29uZmlnIiwiX3JlZjMiLCJ3ZWlnaHQiLCJfcmVuZGVyR3JpZExheWVyQ29uZmlnIiwiX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWciLCJfcmVuZGVySGV4YWdvbkxheWVyQ29uZmlnIiwiX3JlZjQiLCJlbmFibGUzZCIsImVsZXZhdGlvbkJ5RGVzY3JpcHRpb24iLCJjb2xvckJ5RGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInBlcmNlbnRpbGUiLCJ3b3JsZFVuaXRTaXplIiwiY292ZXJhZ2UiLCJlbGV2YXRpb25TY2FsZSIsInNpemVSYW5nZSIsInNpemVBZ2dyZWdhdGlvbiIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJfcmVuZGVySGV4YWdvbklkTGF5ZXJDb25maWciLCJfcmVmNSIsImNvdmVyYWdlRmllbGQiLCJjb3ZlcmFnZVJhbmdlIiwiX3JlbmRlckFyY0xheWVyQ29uZmlnIiwiYXJncyIsIl9yZW5kZXJMaW5lTGF5ZXJDb25maWciLCJfcmVmNiIsIm9uQ2hhbmdlQ29uZmlnIiwic291cmNlQ29sb3IiLCJfcmVuZGVyVHJpcExheWVyQ29uZmlnIiwiX3JlZjciLCJfbGF5ZXIkbWV0YSRmZWF0dXJlVHkiLCJtZXRhIiwiZmVhdHVyZVR5cGVzIiwicG9seWdvbiIsInN0cm9rZWQiLCJ0cmFpbExlbmd0aCIsIl9yZW5kZXJHZW9qc29uTGF5ZXJDb25maWciLCJfcmVmOCIsIl9sYXllciRtZXRhJGZlYXR1cmVUeTIiLCJzdHJva2VPcGFjaXR5IiwiaGVpZ2h0Iiwid2lyZWZyYW1lIiwicmFkaXVzRmllbGQiLCJfcmVuZGVyM0RMYXllckNvbmZpZyIsIl9yZWY5IiwiRnJhZ21lbnQiLCJJbnB1dCIsImFjY2VwdCIsInRhcmdldCIsImZpbGVzIiwidXJsIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwic2NlbmVncmFwaCIsInNpemVTY2FsZSIsImFuZ2xlWCIsImFuZ2xlWSIsImFuZ2xlWiIsIl9yZW5kZXJTMkxheWVyQ29uZmlnIiwiX3JlZjEwIiwiaGVpZ2h0UmFuZ2UiLCJyZW5kZXIiLCJfdGhpcyIsIl90aGlzJHByb3BzIiwibGF5ZXJUeXBlT3B0aW9ucyIsInVwZGF0ZUxheWVyVHlwZSIsIl9yZWYxMSIsIl9yZWYxMSRmaWVsZHMiLCJfcmVmMTEkZmllbGRQYWlycyIsImZpZWxkUGFpcnMiLCJ1bmRlZmluZWQiLCJkYXRhc2V0IiwicmVuZGVyVGVtcGxhdGUiLCJjb25jYXQiLCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIiLCJsYXllckluZm9Nb2RhbCIsIkhvd1RvQnV0dG9uIiwib25DbGljayIsIm9wZW5Nb2RhbCIsImNvbHVtbnMiLCJleHBhbmRlZCIsImhhc0FsbENvbHVtbnMiLCJvblNlbGVjdCIsImlkIiwiY29sdW1uUGFpcnMiLCJhc3NpZ25Db2x1bW5QYWlycyIsImJpbmQiLCJhc3NpZ25Db2x1bW4iLCJjb2x1bW5MYWJlbHMiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwiYXJyYXlPZiIsImFueSIsImZ1bmMiLCJTdHlsZWRIb3dUb0J1dHRvbiIsIl9yZWYxMiIsIkJ1dHRvbiIsImxpbmsiLCJzbWFsbCIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJDb2xvclNlbGVjdG9yRmFjdG9yeSIsIkNvbG9yU2VsZWN0b3IiLCJfQ29tcG9uZW50MiIsIl90aGlzJHByb3BzMiIsIl90aGlzJHByb3BzMiRwcm9wZXJ0eSIsIlNpZGVQYW5lbFNlY3Rpb24iLCJQYW5lbExhYmVsIiwiY29sb3JTZXRzIiwic2V0Q29sb3IiLCJyZ2JWYWx1ZSIsImNvbG9yVUkiLCJuZXdDb25maWciLCJfQ29tcG9uZW50MyIsIl90aGlzJHByb3BzMyIsIl90aGlzJHByb3BzMyRwcm9wZXJ0eSIsInRhcmdldENvbG9yIiwiX0NvbXBvbmVudDQiLCJfX3JlbmRlckhlYXRtYXBDb2xvclNlbGVjdG9yQ29tcG9uZW50IiwiX3RoaXMkcHJvcHM0IiwiaXNSYW5nZSIsImNvbG9yUmFuZ2UiLCJjb2xvck1hcCIsImNvbG9yUmFuZ2VVcGRhdGVkIiwidXBkYXRlQ29sb3JNYXAiLCJfX3JlbmRlckRlZmF1bHRDb2xvclNlbGVjdG9yQ29tcG9uZW50IiwiX3RoaXMkcHJvcHM1IiwiX3RoaXMkcHJvcHM1JGNoYW5uZWwiLCJfdGhpcyRwcm9wczUkaGFuZGxlQ3UiLCJoYW5kbGVDdXN0b21PblNlbGVjdEhleENvbHVtbiIsIl9sYXllciR2aXN1YWxDaGFubmVscyIsInJhbmdlIiwiZmllbGQiLCJzY2FsZSIsImlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4iLCJjb2xvckNvbHVtbiIsImNvbG9yQ29sdW1uSWR4IiwiU0NBTEVfVFlQRVMiLCJvcmRpbmFsIiwidmFsaWRhdGVTY2FsZSIsIm9uU2VsZWN0SGV4Q29sb3JDb2x1bW4iLCJuYW1lIiwiZmllbGRJZHgiLCJpZGVudGl0eSIsImhleENvbG9yQ3VzdG9tUGFsZXR0ZSIsInJlbmRlckNvbG9yU2VsZWN0b3JDb21wb25lbnQiLCJoZWF0bWFwIiwiVmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yRmFjdG9yeSIsIlZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvciIsIl9yZWYxMyIsImZpZWxkc0FnZ3JlZ2F0ZWQiLCJpc0xvYWRpbmciLCJjaGFubmVsU2NhbGVUeXBlIiwiZG9tYWluIiwiYWdncmVnYXRpb24iLCJkZWZhdWx0TWVhc3VyZSIsInN1cHBvcnRlZEZpZWxkVHlwZXMiLCJjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsInN1cHBvcnRlZEZpZWxkcyIsIl9yZWYxNCIsImluY2x1ZGVzIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwic2hvd1NjYWxlQ3VzdG9taXphYmxlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJzaG93U2NhbGUiLCJpc0FnZ3JlZ2F0ZWQiLCJkZWZhdWx0RGVzY3JpcHRpb24iLCJ2aXNSYW5nZSIsImFnZ3JlZ2F0b3IiLCJwbGFjZWhvbGRlciIsInNjYWxlVHlwZSIsInNlbGVjdGVkRmllbGQiLCJ1cGRhdGVGaWVsZCIsInZhbCIsIkRFRkFVTFRfQ09MT1JfUkFOR0UiLCJzZWxlY3RlZEFnZ3JlZ2F0b3IiLCJ1cGRhdGVTY2FsZSIsInVwZGF0ZUN1c3RvbVBhbGV0dGUiLCJ1aUN1c3RvbVNjYWxlVHlwZSIsIkNvbG9yRGltZW5zaW9uU2NhbGVTZWxlY3RvckZhY3RvcnkiLCJDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3IiLCJfQ29tcG9uZW50NSIsIl90aGlzJHByb3BzNiIsImNvbG9yQWdnciIsIkFycmF5IiwiaXNBcnJheSIsIm9wdGlvbnMiLCJvblNldEN1c3RvbVBhbGV0dGUiLCJpbmplY3RJbnRsIiwiX3JlZjE1IiwiYWdncmVnYXRpb25PcHRpb25zIiwiZ2V0QWdncmVnYXRpb25PcHRpb25zIiwidmFsdWVzIiwic2VsZWN0ZWRJdGVtcyIsIm11bHRpU2VsZWN0Iiwic2VhcmNoYWJsZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvbGF5ZXItY29uZmlndXJhdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgRnJhZ21lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnbG9jYWxpemF0aW9uJztcblxuaW1wb3J0IHtCdXR0b24sIElucHV0LCBQYW5lbExhYmVsLCBTaWRlUGFuZWxTZWN0aW9ufSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgSXRlbVNlbGVjdG9yIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2l0ZW0tc2VsZWN0b3IvaXRlbS1zZWxlY3Rvcic7XG5cbmltcG9ydCBWaXNDb25maWdCeUZpZWxkU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vdmlzLWNvbmZpZy1ieS1maWVsZC1zZWxlY3Rvcic7XG5pbXBvcnQgTGF5ZXJDb2x1bW5Db25maWdGYWN0b3J5IGZyb20gJy4vbGF5ZXItY29sdW1uLWNvbmZpZyc7XG5pbXBvcnQgTGF5ZXJUeXBlU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vbGF5ZXItdHlwZS1zZWxlY3Rvcic7XG5pbXBvcnQgTGF5ZXJWaXNpYmlsaXR5Qnlab29tRmFjdG9yeSBmcm9tICcuL2xheWVyLXZpc2liaWxpdHktYnktem9vbSc7XG5pbXBvcnQgRGltZW5zaW9uU2NhbGVTZWxlY3RvciBmcm9tICcuL2RpbWVuc2lvbi1zY2FsZS1zZWxlY3Rvcic7XG5pbXBvcnQgU291cmNlRGF0YVNlbGVjdG9yRmFjdG9yeSBmcm9tICdjb21wb25lbnRzL3NpZGUtcGFuZWwvY29tbW9uL3NvdXJjZS1kYXRhLXNlbGVjdG9yJztcbmltcG9ydCBWaXNDb25maWdTd2l0Y2hGYWN0b3J5IGZyb20gJy4vdmlzLWNvbmZpZy1zd2l0Y2gnO1xuaW1wb3J0IFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXNsaWRlcic7XG5pbXBvcnQgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksIHtDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudH0gZnJvbSAnLi9sYXllci1jb25maWctZ3JvdXAnO1xuaW1wb3J0IEN1c3RvbU1hcmtlcnNDb25maWdHcm91cEZhY3RvcnkgZnJvbSAnLi9jdXN0b20tbWFya2Vycy1jb25maWctZ3JvdXAnO1xuaW1wb3J0IFRleHRMYWJlbFBhbmVsRmFjdG9yeSBmcm9tICcuL3RleHQtbGFiZWwtcGFuZWwnO1xuXG5pbXBvcnQge2NhcGl0YWxpemVGaXJzdExldHRlcn0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBDSEFOTkVMX1NDQUxFUyxcbiAgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTLFxuICBTQ0FMRV9UWVBFU1xufSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQge0xBWUVSX1RZUEVTfSBmcm9tICdsYXllcnMvdHlwZXMnO1xuaW1wb3J0IHtpbmplY3RJbnRsfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCBDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vY29sb3ItZGltZW5zaW9uLXNjYWxlLXNlbGVjdG9yJztcbmltcG9ydCBDb2xvclNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL2NvbG9yLXNlbGVjdG9yJztcbmltcG9ydCBMYXllckFnZ3JlZ2F0aW9uUmVzb2x1dGlvbkZhY3RvcnkgZnJvbSAnLi9sYXllci1hZ2dyZWdhdGlvbi1yZXNvbHV0aW9uJztcbmltcG9ydCB7REVGQVVMVF9DT0xPUl9SQU5HRSwgaGV4Q29sb3JDdXN0b21QYWxldHRlfSBmcm9tICdjb25zdGFudHMvY29sb3ItcmFuZ2VzJztcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZydcbn0pYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JNYXJnaW59O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yUGFkZGluZ307XG4gIGJvcmRlci1sZWZ0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyfSBkYXNoZWRcbiAgICAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlndXJhdG9yQm9yZGVyQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2NvbmZpZ19fdmlzdWFsQy1jb25maWcnXG59KWBcbiAgbWFyZ2luLXRvcDogMTJweDtcbmA7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckZpZWxkcyA9IChkYXRhc2V0cywgbGF5ZXIpID0+XG4gIGxheWVyLmNvbmZpZyAmJiBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSA/IGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLmZpZWxkcyA6IFtdO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJEYXRhc2V0ID0gKGRhdGFzZXRzLCBsYXllcikgPT5cbiAgbGF5ZXIuY29uZmlnICYmIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdID8gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0gOiBudWxsO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyA9IHByb3BzID0+ICh7XG4gIGxheWVyOiBwcm9wcy5sYXllcixcbiAgZGlzYWJsZWQ6IEJvb2xlYW4ocHJvcHMuZGlzYWJsZWQpLFxuICBmaWVsZHM6IGdldExheWVyRmllbGRzKHByb3BzLmRhdGFzZXRzLCBwcm9wcy5sYXllciksXG4gIG9uQ2hhbmdlOiBwcm9wcy51cGRhdGVMYXllckNvbmZpZyxcbiAgc2V0Q29sb3JVSTogcHJvcHMudXBkYXRlTGF5ZXJDb2xvclVJXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldFZpc0NvbmZpZ3VyYXRvclByb3BzID0gcHJvcHMgPT4gKHtcbiAgbGF5ZXI6IHByb3BzLmxheWVyLFxuICBmaWVsZHM6IGdldExheWVyRmllbGRzKHByb3BzLmRhdGFzZXRzLCBwcm9wcy5sYXllciksXG4gIG9uQ2hhbmdlOiBwcm9wcy51cGRhdGVMYXllclZpc0NvbmZpZyxcbiAgc2V0Q29sb3JVSTogcHJvcHMudXBkYXRlTGF5ZXJDb2xvclVJXG59KTtcblxuZXhwb3J0IGNvbnN0IGdldExheWVyQ2hhbm5lbENvbmZpZ1Byb3BzID0gcHJvcHMgPT4gKHtcbiAgbGF5ZXI6IHByb3BzLmxheWVyLFxuICBmaWVsZHM6IGdldExheWVyRmllbGRzKHByb3BzLmRhdGFzZXRzLCBwcm9wcy5sYXllciksXG4gIG9uQ2hhbmdlOiBwcm9wcy51cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWcsXG4gIG9uQ2hhbmdlVmlzQ29uZmlnOiBwcm9wcy51cGRhdGVMYXllclZpc0NvbmZpZ1xufSk7XG5cbkxheWVyQ29uZmlndXJhdG9yRmFjdG9yeS5kZXBzID0gW1xuICBTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5LFxuICBWaXNDb25maWdTbGlkZXJGYWN0b3J5LFxuICBUZXh0TGFiZWxQYW5lbEZhY3RvcnksXG4gIExheWVyQ29uZmlnR3JvdXBGYWN0b3J5LFxuICBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJDb2x1bW5Db25maWdGYWN0b3J5LFxuICBMYXllclR5cGVTZWxlY3RvckZhY3RvcnksXG4gIFZpc0NvbmZpZ1N3aXRjaEZhY3RvcnksXG4gIEFnZ3JTY2FsZVNlbGVjdG9yRmFjdG9yeSxcbiAgTGF5ZXJWaXNpYmlsaXR5Qnlab29tRmFjdG9yeSxcbiAgTGF5ZXJBZ2dyZWdhdGlvblJlc29sdXRpb25GYWN0b3J5LFxuICBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnksXG4gIEFyY0xheWVyQ29sb3JTZWxlY3RvckZhY3RvcnksXG4gIEN1c3RvbU1hcmtlcnNDb25maWdHcm91cEZhY3Rvcnlcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExheWVyQ29uZmlndXJhdG9yRmFjdG9yeShcbiAgU291cmNlRGF0YVNlbGVjdG9yLFxuICBWaXNDb25maWdTbGlkZXIsXG4gIFRleHRMYWJlbFBhbmVsLFxuICBMYXllckNvbmZpZ0dyb3VwLFxuICBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yLFxuICBMYXllckNvbHVtbkNvbmZpZyxcbiAgTGF5ZXJUeXBlU2VsZWN0b3IsXG4gIFZpc0NvbmZpZ1N3aXRjaCxcbiAgQWdnclNjYWxlU2VsZWN0b3IsXG4gIExheWVyVmlzaWJpbGl0eUJ5Wm9vbSxcbiAgTGF5ZXJBZ2dyZWdhdGlvblJlc29sdXRpb24sXG4gIExheWVyQ29sb3JTZWxlY3RvcixcbiAgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3IsXG4gIEFyY0xheWVyQ29sb3JTZWxlY3RvcixcbiAgQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwXG4pIHtcbiAgY2xhc3MgTGF5ZXJDb25maWd1cmF0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBsYXllcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgZGF0YXNldHM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIGxheWVyVHlwZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLmlzUmVxdWlyZWQsXG4gICAgICBvcGVuTW9kYWw6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB1cGRhdGVMYXllckNvbmZpZzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZUxheWVyVHlwZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZUxheWVyVmlzQ29uZmlnOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdXBkYXRlTGF5ZXJDb2xvclVJOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfTtcblxuICAgIF9yZW5kZXJQb2ludExheWVyQ29uZmlnKHByb3BzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyhwcm9wcyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckljb25MYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIEZpbGwgQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi4obGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkIHx8IHtsYWJlbDogJ2xheWVyLmNvbG9yJ30pfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIG91dGxpbmUgY29sb3IgKi99XG4gICAgICAgICAge2xheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLnBvaW50ID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm91dGxpbmV9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4obGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5jdXN0b21NYXJrZXJzKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGNoYW5uZWw9XCJzdHJva2VDb2xvclwiIC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcudmlzQ29uZmlnLm91dGxpbmV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHtsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5wb2ludCA/IChcbiAgICAgICAgICAgIDxDdXN0b21NYXJrZXJzQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcz17dmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzPXtsYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7LyogUmFkaXVzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICBsYWJlbD17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5jdXN0b21NYXJrZXJzID8gJ2xheWVyLnNpemUnIDogJ2xheWVyLnJhZGl1cyd9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHshbGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXN9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17Qm9vbGVhbihsYXllci5jb25maWcuc2l6ZUZpZWxkKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5zaXplRmllbGR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogdGV4dCBsYWJlbCAqL31cbiAgICAgICAgICA8VGV4dExhYmVsUGFuZWxcbiAgICAgICAgICAgIGZpZWxkcz17dmlzQ29uZmlndXJhdG9yUHJvcHMuZmllbGRzfVxuICAgICAgICAgICAgdXBkYXRlTGF5ZXJUZXh0TGFiZWw9e3RoaXMucHJvcHMudXBkYXRlTGF5ZXJUZXh0TGFiZWx9XG4gICAgICAgICAgICB0ZXh0TGFiZWw9e2xheWVyLmNvbmZpZy50ZXh0TGFiZWx9XG4gICAgICAgICAgICBjb2xvclBhbGV0dGU9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLmNvbG9yUGFsZXR0ZX1cbiAgICAgICAgICAgIHNldENvbG9yUGFsZXR0ZVVJPXt2aXNDb25maWd1cmF0b3JQcm9wcy5zZXRDb2xvclBhbGV0dGVVSX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyQ2x1c3RlckxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxBZ2dyU2NhbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlVmlzQ29uZmlnPXtsYXllckNoYW5uZWxDb25maWdQcm9wcy5vbkNoYW5nZVZpc0NvbmZpZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9uLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb259XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogQ2x1c3RlciBSYWRpdXMgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNsdXN0ZXJSYWRpdXN9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVySGVhdG1hcExheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIHsvKiBSYWRpdXMgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICB7LyogV2VpZ2h0ICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIud2VpZ2h0J30+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy53ZWlnaHR9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyR3JpZExheWVyQ29uZmlnKHByb3BzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyhwcm9wcyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckhleGFnb25MYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJBZ2dyZWdhdGlvbkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7Y29uZmlnfSA9IGxheWVyO1xuICAgICAgY29uc3Qge1xuICAgICAgICB2aXNDb25maWc6IHtlbmFibGUzZH1cbiAgICAgIH0gPSBjb25maWc7XG4gICAgICBjb25zdCBlbGV2YXRpb25CeURlc2NyaXB0aW9uID0gJ2xheWVyLmVsZXZhdGlvbkJ5RGVzY3JpcHRpb24nO1xuICAgICAgY29uc3QgY29sb3JCeURlc2NyaXB0aW9uID0gJ2xheWVyLmNvbG9yQnlEZXNjcmlwdGlvbic7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPEFnZ3JTY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWc9e2xheWVyQ2hhbm5lbENvbmZpZ1Byb3BzLm9uQ2hhbmdlVmlzQ29uZmlnfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb24uY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgPEFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JBZ2dyZWdhdGlvbn1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtjb2xvckJ5RGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnBlcmNlbnRpbGUgJiZcbiAgICAgICAgICAgICAgbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucGVyY2VudGlsZS5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucGVyY2VudGlsZX1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogQ2VsbCBzaXplICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy53b3JsZFVuaXRTaXplfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvdmVyYWdlfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBFbGV2YXRpb24gKi99XG4gICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodE11bHRpcGxpZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17ZWxldmF0aW9uQnlEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshZW5hYmxlM2R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8QWdnclNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlVmlzQ29uZmlnPXtsYXllckNoYW5uZWxDb25maWdQcm9wcy5vbkNoYW5nZVZpc0NvbmZpZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5oZWlnaHRSYW5nZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZUFnZ3JlZ2F0aW9uLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgICAgPEFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplQWdncmVnYXRpb259XG4gICAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblBlcmNlbnRpbGUuY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25QZXJjZW50aWxlfVxuICAgICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBTaGFuIG1vdmUgdGhlc2UgaW50byBsYXllciBjbGFzc1xuICAgIF9yZW5kZXJIZXhhZ29uSWRMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvbG9yJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIENvdmVyYWdlICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY292ZXJhZ2UnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHshbGF5ZXIuY29uZmlnLmNvdmVyYWdlRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY292ZXJhZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY292ZXJhZ2VSYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb3ZlcmFnZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBoZWlnaHQgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGUzZH1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5oZWlnaHRSYW5nZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlckFyY0xheWVyQ29uZmlnKGFyZ3MpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJMaW5lTGF5ZXJDb25maWcoYXJncyk7XG4gICAgfVxuXG4gICAgX3JlbmRlckxpbmVMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvbG9yJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8QXJjTGF5ZXJDb2xvclNlbGVjdG9yXG4gICAgICAgICAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICAgICAgICAgIHNldENvbG9yVUk9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuc2V0Q29sb3JVSX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZUNvbmZpZz17bGF5ZXJDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZz17dmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNvdXJjZUNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogdGhpY2tuZXNzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuc3Ryb2tlJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbGF5ZXIuY29uZmlnLnNpemVGaWVsZH1cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIGVsZXZhdGlvbiBzY2FsZSAqL31cbiAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGUgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5lbGV2YXRpb25TY2FsZVwiIGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlclRyaXBMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtZXRhOiB7ZmVhdHVyZVR5cGVzID0ge319XG4gICAgICB9ID0gbGF5ZXI7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cImxheWVyLnN0cm9rZVdpZHRoXCIgY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBUcmFpbCBMZW5ndGgqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgey4uLihmZWF0dXJlVHlwZXMucG9seWdvbiA/IGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWQgOiB7fSl9XG4gICAgICAgICAgICBsYWJlbD1cImxheWVyLnRyYWlsTGVuZ3RoXCJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwibGF5ZXIudHJhaWxMZW5ndGhEZXNjcmlwdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudHJhaWxMZW5ndGh9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJHZW9qc29uTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWV0YToge2ZlYXR1cmVUeXBlcyA9IHt9fSxcbiAgICAgICAgY29uZmlnOiB7dmlzQ29uZmlnfVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIEZpbGwgQ29sb3IgKi99XG4gICAgICAgICAge2ZlYXR1cmVUeXBlcy5wb2x5Z29uIHx8IGZlYXR1cmVUeXBlcy5wb2ludCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maWxsZWR9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgbGFiZWw9XCJsYXllci5maWxsQ29sb3JcIlxuICAgICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgey8qIHN0cm9rZSBjb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWR9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD1cImxheWVyLnN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBjaGFubmVsPVwic3Ryb2tlQ29sb3JcIiAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlT3BhY2l0eX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIHsuLi4oZmVhdHVyZVR5cGVzLnBvbHlnb24gPyBsYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkIDoge30pfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc2l6ZUZpZWxkID8gKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVSYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50aGlja25lc3N9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBFbGV2YXRpb24gKi99XG4gICAgICAgICAge2ZlYXR1cmVUeXBlcy5wb2x5Z29uID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshdmlzQ29uZmlnLmZpbGxlZH1cbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmhlaWdodH1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mud2lyZWZyYW1lfSAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgICB7ZmVhdHVyZVR5cGVzLnBvaW50ID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5yYWRpdXMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgeyFsYXllci5jb25maWcucmFkaXVzRmllbGQgPyAoXG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzUmFuZ2V9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5yYWRpdXNGaWVsZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnJhZGl1c31cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyM0RMYXllckNvbmZpZyh7bGF5ZXIsIHZpc0NvbmZpZ3VyYXRvclByb3BzfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbCd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgYWNjZXB0PVwiLmdsYiwuZ2x0ZlwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXNbMF0pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZS50YXJnZXQuZmlsZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2Uoe3NjZW5lZ3JhcGg6IHVybH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuM0RNb2RlbE9wdGlvbnMnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVTY2FsZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuYW5nbGVYfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5hbmdsZVl9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmFuZ2xlWn1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlclMyTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29uZmlnOiB7dmlzQ29uZmlnfVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5maWxsQ29sb3JcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLmNvbG9yRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclNlbGVjdG9yIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIFN0cm9rZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZWR9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBsYWJlbD1cImxheWVyLnN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zdHJva2VDb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBjaGFubmVsPVwic3Ryb2tlQ29sb3JcIiAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yPXtsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgIHByb3BlcnR5PVwic3Ryb2tlQ29sb3JcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgV2lkdGggKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cImxheWVyLnN0cm9rZVdpZHRoXCIgY29sbGFwc2libGU+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXZpc0NvbmZpZy5maWxsZWR9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmhlaWdodH1cbiAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmVsZXZhdGlvblNjYWxlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuaGVpZ2h0UmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXJWaXNDb25maWdzLmhlaWdodFJhbmdlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy53aXJlZnJhbWV9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2xheWVyLCBkYXRhc2V0cywgdXBkYXRlTGF5ZXJDb25maWcsIGxheWVyVHlwZU9wdGlvbnMsIHVwZGF0ZUxheWVyVHlwZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge2ZpZWxkcyA9IFtdLCBmaWVsZFBhaXJzID0gdW5kZWZpbmVkfSA9IGxheWVyLmNvbmZpZy5kYXRhSWRcbiAgICAgICAgPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3Qge2NvbmZpZ30gPSBsYXllcjtcblxuICAgICAgY29uc3QgdmlzQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRWaXNDb25maWd1cmF0b3JQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyQ29uZmlndXJhdG9yUHJvcHMgPSBnZXRMYXllckNvbmZpZ3VyYXRvclByb3BzKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMgPSBnZXRMYXllckNoYW5uZWxDb25maWdQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBnZXRMYXllckRhdGFzZXQoZGF0YXNldHMsIGxheWVyKTtcbiAgICAgIGNvbnN0IHJlbmRlclRlbXBsYXRlID0gbGF5ZXIudHlwZSAmJiBgX3JlbmRlciR7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGxheWVyLnR5cGUpfUxheWVyQ29uZmlnYDtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHtsYXllci5sYXllckluZm9Nb2RhbCA/IChcbiAgICAgICAgICAgIDxIb3dUb0J1dHRvbiBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLm9wZW5Nb2RhbChsYXllci5sYXllckluZm9Nb2RhbCl9IC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIGxhYmVsPXsnbGF5ZXIuYmFzaWMnfVxuICAgICAgICAgICAgY29sbGFwc2libGU9e09iamVjdC5rZXlzKGxheWVyLmNvbmZpZy5jb2x1bW5zKS5sZW5ndGggPiAwfVxuICAgICAgICAgICAgZXhwYW5kZWQ9eyFsYXllci5oYXNBbGxDb2x1bW5zKCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPExheWVyVHlwZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICAgICAgICBsYXllclR5cGVPcHRpb25zPXtsYXllclR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICBvblNlbGVjdD17dXBkYXRlTGF5ZXJUeXBlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxMYXllclZpc2liaWxpdHlCeVpvb21cbiAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3RoaXMucHJvcHMudXBkYXRlTGF5ZXJDb25maWd9XG4gICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPExheWVyQWdncmVnYXRpb25SZXNvbHV0aW9uIGxheWVyPXtsYXllcn0gZGlzYWJsZWQ9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuZGlzYWJsZWR9IC8+XG4gICAgICAgICAgICB7T2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICAgICAgICA8U291cmNlRGF0YVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgIGlkPXtsYXllci5pZH1cbiAgICAgICAgICAgICAgICBkYXRhSWQ9e2NvbmZpZy5kYXRhSWR9XG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e3ZhbHVlID0+IHVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IHZhbHVlfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge09iamVjdC5rZXlzKGxheWVyLmNvbmZpZy5jb2x1bW5zKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxMYXllckNvbHVtbkNvbmZpZ1xuICAgICAgICAgICAgICAgICAgY29sdW1uUGFpcnM9e2xheWVyLmNvbHVtblBhaXJzfVxuICAgICAgICAgICAgICAgICAgY29sdW1ucz17bGF5ZXIuY29uZmlnLmNvbHVtbnN9XG4gICAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW5QYWlycz17bGF5ZXIuYXNzaWduQ29sdW1uUGFpcnMuYmluZChsYXllcil9XG4gICAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW49e2xheWVyLmFzc2lnbkNvbHVtbi5iaW5kKGxheWVyKX1cbiAgICAgICAgICAgICAgICAgIGNvbHVtbkxhYmVscz17bGF5ZXIuY29sdW1uTGFiZWxzfVxuICAgICAgICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICAgICAgICBmaWVsZFBhaXJzPXtmaWVsZFBhaXJzfVxuICAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3VwZGF0ZUxheWVyQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJUeXBlPXt0aGlzLnByb3BzLnVwZGF0ZUxheWVyVHlwZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAge3RoaXNbcmVuZGVyVGVtcGxhdGVdICYmXG4gICAgICAgICAgICB0aGlzW3JlbmRlclRlbXBsYXRlXSh7XG4gICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgICAgICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgICAgICAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHNcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTGF5ZXJDb25maWd1cmF0b3I7XG59XG4vKlxuICogQ29tcG9uZW50aXplIGNvbmZpZyBjb21wb25lbnQgaW50byBwdXJlIGZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICovXG5cbmNvbnN0IFN0eWxlZEhvd1RvQnV0dG9uID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMTJweDtcbiAgdG9wOiAtNHB4O1xuYDtcblxuZXhwb3J0IGNvbnN0IEhvd1RvQnV0dG9uID0gKHtvbkNsaWNrfSkgPT4gKFxuICA8U3R5bGVkSG93VG9CdXR0b24+XG4gICAgPEJ1dHRvbiBsaW5rIHNtYWxsIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydsYXllckNvbmZpZ3VyYXRpb24uaG93VG8nfSAvPlxuICAgIDwvQnV0dG9uPlxuICA8L1N0eWxlZEhvd1RvQnV0dG9uPlxuKTtcblxuTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5KENvbG9yU2VsZWN0b3IpIHtcbiAgY2xhc3MgTGF5ZXJDb2xvclNlbGVjdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7bGF5ZXIsIG9uQ2hhbmdlLCBzZWxlY3RlZENvbG9yLCBwcm9wZXJ0eSA9ICdjb2xvcicsIHNldENvbG9yVUksIGZpZWxkc30gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImxheWVyLmNvbG9yXCIgLz5cbiAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgPENvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiBzZWxlY3RlZENvbG9yIHx8IGxheWVyLmNvbmZpZy5jb2xvcixcbiAgICAgICAgICAgICAgICBzZXRDb2xvcjogcmdiVmFsdWUgPT4gb25DaGFuZ2Uoe1twcm9wZXJ0eV06IHJnYlZhbHVlfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGNvbG9yVUk9e2xheWVyLmNvbmZpZy5jb2xvclVJW3Byb3BlcnR5XX1cbiAgICAgICAgICAgIHNldENvbG9yVUk9e25ld0NvbmZpZyA9PiBzZXRDb2xvclVJKHByb3BlcnR5LCBuZXdDb25maWcpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIExheWVyQ29sb3JTZWxlY3Rvcjtcbn1cblxuQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5KENvbG9yU2VsZWN0b3IpIHtcbiAgY2xhc3MgQXJjTGF5ZXJDb2xvclNlbGVjdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGxheWVyLFxuICAgICAgICBvbkNoYW5nZUNvbmZpZyxcbiAgICAgICAgb25DaGFuZ2VWaXNDb25maWcsXG4gICAgICAgIHByb3BlcnR5ID0gJ2NvbG9yJyxcbiAgICAgICAgc2V0Q29sb3JVSSxcbiAgICAgICAgZmllbGRzXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImxheWVyLmNvbG9yUmFuZ2VcIiAvPlxuICAgICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgICA8Q29sb3JTZWxlY3RvclxuICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICBjb2xvclNldHM9e1tcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IGxheWVyLmNvbmZpZy5jb2xvcixcbiAgICAgICAgICAgICAgICBzZXRDb2xvcjogcmdiVmFsdWUgPT4gb25DaGFuZ2VDb25maWcoe2NvbG9yOiByZ2JWYWx1ZX0pLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnU291cmNlJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcjogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy50YXJnZXRDb2xvciB8fCBsYXllci5jb25maWcuY29sb3IsXG4gICAgICAgICAgICAgICAgc2V0Q29sb3I6IHJnYlZhbHVlID0+IG9uQ2hhbmdlVmlzQ29uZmlnKHt0YXJnZXRDb2xvcjogcmdiVmFsdWV9KSxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1RhcmdldCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGNvbG9yVUk9e2xheWVyLmNvbmZpZy5jb2xvclVJW3Byb3BlcnR5XX1cbiAgICAgICAgICAgIHNldENvbG9yVUk9e25ld0NvbmZpZyA9PiBzZXRDb2xvclVJKHByb3BlcnR5LCBuZXdDb25maWcpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBBcmNMYXllckNvbG9yU2VsZWN0b3I7XG59XG5cbkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnkoQ29sb3JTZWxlY3Rvcikge1xuICBjbGFzcyBMYXllckNvbG9yUmFuZ2VTZWxlY3RvciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgX19yZW5kZXJIZWF0bWFwQ29sb3JTZWxlY3RvckNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gJ2NvbG9yUmFuZ2UnO1xuICAgICAgY29uc3Qge2xheWVyLCBvbkNoYW5nZSwgc2V0Q29sb3JVSX0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbG9yU2VsZWN0b3JcbiAgICAgICAgICBjb2xvclNldHM9e1tcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcjogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wZXJ0eV0sXG4gICAgICAgICAgICAgIGlzUmFuZ2U6IHRydWUsXG4gICAgICAgICAgICAgIHNldENvbG9yOiBjb2xvclJhbmdlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7Y29sb3JNYXB9ID0gbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3JSYW5nZVVwZGF0ZWQgPSBjb2xvck1hcFxuICAgICAgICAgICAgICAgICAgPyBsYXllci51cGRhdGVDb2xvck1hcChwcm9wZXJ0eSwgY29sb3JNYXAsIGNvbG9yUmFuZ2UpXG4gICAgICAgICAgICAgICAgICA6IGNvbG9yUmFuZ2U7XG4gICAgICAgICAgICAgICAgb25DaGFuZ2Uoe1twcm9wZXJ0eV06IGNvbG9yUmFuZ2VVcGRhdGVkfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdfVxuICAgICAgICAgIGNvbG9yVUk9e2xheWVyLmNvbmZpZy5jb2xvclVJW3Byb3BlcnR5XX1cbiAgICAgICAgICBzZXRDb2xvclVJPXtuZXdDb25maWcgPT4gc2V0Q29sb3JVSShwcm9wZXJ0eSwgbmV3Q29uZmlnKX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIF9fcmVuZGVyRGVmYXVsdENvbG9yU2VsZWN0b3JDb21wb25lbnQoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGxheWVyLFxuICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgY2hhbm5lbCA9ICdjb2xvcicsXG4gICAgICAgIHNldENvbG9yVUksXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgaGFuZGxlQ3VzdG9tT25TZWxlY3RIZXhDb2x1bW4gPSAoKSA9PiBudWxsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHtyYW5nZTogcHJvcGVydHksIGZpZWxkLCBzY2FsZX0gPSBsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xvclNlbGVjdG9yXG4gICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IGxheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcGVydHldLFxuICAgICAgICAgICAgICBpc1JhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICBzZXRDb2xvcjogY29sb3JSYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge2NvbG9yTWFwfSA9IGxheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yUmFuZ2VVcGRhdGVkID0gY29sb3JNYXBcbiAgICAgICAgICAgICAgICAgID8gbGF5ZXIudXBkYXRlQ29sb3JNYXAocHJvcGVydHksIGNvbG9yTWFwLCBjb2xvclJhbmdlKVxuICAgICAgICAgICAgICAgICAgOiBjb2xvclJhbmdlO1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHNjYWxlIGNoYW5nZXMgZnJvbSBpZGVudGl0eSB0byBvcmRpbmFsXG4gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgc2NhbGUgdG8gZW5zdXJlIHRoYXQgaXQgY2hhbmdlcyBmcm9tIGBpZGVudGl0eWAgdG8gdGhlIGNvcnJlY3Qgb25lLlxuICAgICAgICAgICAgICAgIGlmIChsYXllci5pc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgICAgbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgICAgICAgICBbZmllbGRdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvckNvbHVtbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvckNvbHVtbklkeDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbc2NhbGVdOiBTQ0FMRV9UWVBFUy5vcmRpbmFsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGxheWVyLnZhbGlkYXRlU2NhbGUoY2hhbm5lbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKHtbcHJvcGVydHldOiBjb2xvclJhbmdlVXBkYXRlZH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXX1cbiAgICAgICAgICBjb2xvclVJPXtsYXllci5jb25maWcuY29sb3JVSVtwcm9wZXJ0eV19XG4gICAgICAgICAgc2V0Q29sb3JVST17bmV3Q29uZmlnID0+IHNldENvbG9yVUkocHJvcGVydHksIG5ld0NvbmZpZyl9XG4gICAgICAgICAgb25TZWxlY3RIZXhDb2xvckNvbHVtbj17Y29sb3JDb2x1bW4gPT4ge1xuICAgICAgICAgICAgLy8gSXQncyBkZWZpbmVkIGluIENOOiBzZWUgd29ya3NwYWNlLXd3dy9zcmMvZmVhdHVyZXMvYnVpbGRlci91aS9LZXBsZXJHbC9TaWRlUGFuZWwvTGF5ZXJQYW5lbC9MYXllckNvbG9yUmFuZ2VTZWxlY3Rvci50c3hcbiAgICAgICAgICAgIGhhbmRsZUN1c3RvbU9uU2VsZWN0SGV4Q29sdW1uKGxheWVyLCBjb2xvckNvbHVtbik7XG5cbiAgICAgICAgICAgIGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgICAgW2ZpZWxkXToge1xuICAgICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgICAgICAgICAgY29sb3JDb2x1bW46IGNvbG9yQ29sdW1uPy5uYW1lLFxuICAgICAgICAgICAgICAgIGNvbG9yQ29sdW1uSWR4OiBjb2xvckNvbHVtbj8uZmllbGRJZHhcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW3NjYWxlXTogU0NBTEVfVFlQRVMuaWRlbnRpdHlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBvbkNoYW5nZSh7W3Byb3BlcnR5XTogaGV4Q29sb3JDdXN0b21QYWxldHRlfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2xheWVyfSA9IHRoaXMucHJvcHM7XG4gICAgICBsZXQgcmVuZGVyQ29sb3JTZWxlY3RvckNvbXBvbmVudCA9IHRoaXMuX19yZW5kZXJEZWZhdWx0Q29sb3JTZWxlY3RvckNvbXBvbmVudC5iaW5kKHRoaXMpO1xuXG4gICAgICBpZiAobGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMuaGVhdG1hcCkge1xuICAgICAgICByZW5kZXJDb2xvclNlbGVjdG9yQ29tcG9uZW50ID0gdGhpcy5fX3JlbmRlckhlYXRtYXBDb2xvclNlbGVjdG9yQ29tcG9uZW50LmJpbmQodGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJsYXllci5jb2xvclJhbmdlXCIgLz5cbiAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAge3JlbmRlckNvbG9yU2VsZWN0b3JDb21wb25lbnQoKX1cbiAgICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIExheWVyQ29sb3JSYW5nZVNlbGVjdG9yO1xufVxuXG5DaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW1Zpc0NvbmZpZ0J5RmllbGRTZWxlY3RvckZhY3RvcnldO1xuZXhwb3J0IGZ1bmN0aW9uIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5KFZpc0NvbmZpZ0J5RmllbGRTZWxlY3Rvcikge1xuICBjb25zdCBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yID0gKHtcbiAgICBsYXllcixcbiAgICBjaGFubmVsLFxuICAgIG9uQ2hhbmdlLFxuICAgIG9uQ2hhbmdlVmlzQ29uZmlnLFxuICAgIGZpZWxkcyxcbiAgICBmaWVsZHNBZ2dyZWdhdGVkLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGlzTG9hZGluZ1xuICB9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY2hhbm5lbFNjYWxlVHlwZSxcbiAgICAgIGRvbWFpbixcbiAgICAgIGZpZWxkLFxuICAgICAgYWdncmVnYXRpb24sXG4gICAgICBrZXksXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHJhbmdlLFxuICAgICAgc2NhbGUsXG4gICAgICBkZWZhdWx0TWVhc3VyZSxcbiAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXNcbiAgICB9ID0gY2hhbm5lbDtcbiAgICBjb25zdCBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyA9XG4gICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzIHx8IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEU1tjaGFubmVsU2NhbGVUeXBlXTtcbiAgICBjb25zdCBzdXBwb3J0ZWRGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKCh7dHlwZX0pID0+IGNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzLmluY2x1ZGVzKHR5cGUpKTtcbiAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSBsYXllci5nZXRTY2FsZU9wdGlvbnMoY2hhbm5lbC5rZXkpO1xuICAgIGNvbnN0IHNob3dTY2FsZUN1c3RvbWl6YWJsZSA9XG4gICAgICBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgICAgc2NhbGUgJiZcbiAgICAgIGxheWVyLmNvbmZpZ1tzY2FsZV0gJiZcbiAgICAgIEJvb2xlYW4obGF5ZXIuY29uZmlnW2ZpZWxkXSkgJiZcbiAgICAgIHNjYWxlT3B0aW9ucz8ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBzaG93U2NhbGUgPSBCb29sZWFuKFxuICAgICAgIXNob3dTY2FsZUN1c3RvbWl6YWJsZSAmJlxuICAgICAgICBzY2FsZSAmJlxuICAgICAgICAhbGF5ZXIuaXNBZ2dyZWdhdGVkICYmXG4gICAgICAgIGxheWVyLmNvbmZpZ1tzY2FsZV0gJiZcbiAgICAgICAgc2NhbGVPcHRpb25zPy5sZW5ndGggPiAxXG4gICAgKTtcbiAgICBjb25zdCBkZWZhdWx0RGVzY3JpcHRpb24gPSAnbGF5ZXJDb25maWd1cmF0aW9uLmRlZmF1bHREZXNjcmlwdGlvbic7XG4gICAgY29uc3QgdmlzUmFuZ2UgPSBsYXllci5jb25maWcudmlzQ29uZmlnW3JhbmdlXTtcbiAgICBjb25zdCBhZ2dyZWdhdG9yID0gbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1thZ2dyZWdhdGlvbl07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvclxuICAgICAgICBjaGFubmVsPXtjaGFubmVsLmtleX1cbiAgICAgICAgZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9uIHx8IGRlZmF1bHREZXNjcmlwdGlvbn1cbiAgICAgICAgZG9tYWluPXtsYXllci5jb25maWdbZG9tYWluXX1cbiAgICAgICAgZmllbGRzPXtzdXBwb3J0ZWRGaWVsZHN9XG4gICAgICAgIGFnZ3JlZ2F0b3I9e2FnZ3JlZ2F0b3J9XG4gICAgICAgIGZpZWxkc0FnZ3JlZ2F0ZWQ9e2ZpZWxkc0FnZ3JlZ2F0ZWR9XG4gICAgICAgIGlkPXtsYXllci5pZH1cbiAgICAgICAga2V5PXtgJHtrZXl9LWNoYW5uZWwtc2VsZWN0b3JgfVxuICAgICAgICBwcm9wZXJ0eT17cHJvcGVydHl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtkZWZhdWx0TWVhc3VyZSB8fCAncGxhY2Vob2xkZXIuc2VsZWN0RmllbGQnfVxuICAgICAgICByYW5nZT17dmlzUmFuZ2V9XG4gICAgICAgIHNjYWxlT3B0aW9ucz17c2NhbGVPcHRpb25zfVxuICAgICAgICBzY2FsZVR5cGU9e3NjYWxlID8gbGF5ZXIuY29uZmlnW3NjYWxlXSA6IG51bGx9XG4gICAgICAgIHNlbGVjdGVkRmllbGQ9e2xheWVyLmNvbmZpZ1tmaWVsZF19XG4gICAgICAgIHNob3dTY2FsZT17c2hvd1NjYWxlfVxuICAgICAgICBzaG93U2NhbGVDdXN0b21pemFibGU9e3Nob3dTY2FsZUN1c3RvbWl6YWJsZX1cbiAgICAgICAgdXBkYXRlRmllbGQ9e3ZhbCA9PiB7XG4gICAgICAgICAgaWYgKHZpc1JhbmdlPy5jb2xvck1hcCkge1xuICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWcoe1tyYW5nZV06IHsuLi52aXNSYW5nZSwgY29sb3JNYXA6IHVuZGVmaW5lZH19KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgIC8vIENsZWFuIGV2ZXJ5dGhpbmcgYW5kIGNvbWViYWNrIHRvIGRlZmF1bHQgYmVoYXZpb3VyXG4gICAgICAgICAgICBvbkNoYW5nZSh7W2ZpZWxkXTogbnVsbH0sIGtleSk7XG4gICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZyh7W3JhbmdlXTogREVGQVVMVF9DT0xPUl9SQU5HRX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvbkNoYW5nZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW2ZpZWxkXTogdmFsLFxuICAgICAgICAgICAgICAuLi4oZmllbGRzQWdncmVnYXRlZCAmJiB7XG4gICAgICAgICAgICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgW2FnZ3JlZ2F0aW9uXTogdmFsPy5zZWxlY3RlZEFnZ3JlZ2F0b3JcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBsYXllci52YWxpZGF0ZVNjYWxlKGtleSk7XG4gICAgICAgIH19XG4gICAgICAgIHVwZGF0ZVNjYWxlPXt2YWwgPT4gb25DaGFuZ2Uoe1tzY2FsZV06IHZhbH0sIGtleSl9XG4gICAgICAgIHVwZGF0ZUN1c3RvbVBhbGV0dGU9eyhjb2xvck1hcCwgdWlDdXN0b21TY2FsZVR5cGUpID0+IHtcbiAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZyh7W3JhbmdlXTogey4uLnZpc1JhbmdlLCBjb2xvck1hcCwgdWlDdXN0b21TY2FsZVR5cGV9fSk7XG4gICAgICAgIH19XG4gICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yO1xufVxuXG5BZ2dyU2NhbGVTZWxlY3RvckZhY3RvcnkuZGVwcyA9IFtDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3JGYWN0b3J5XTtcblxuZnVuY3Rpb24gQWdnclNjYWxlU2VsZWN0b3JGYWN0b3J5KENvbG9yRGltZW5zaW9uU2NhbGVTZWxlY3Rvcikge1xuICBjbGFzcyBBZ2dyU2NhbGVTZWxlY3RvciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2NoYW5uZWwsIGxheWVyLCBvbkNoYW5nZSwgb25DaGFuZ2VWaXNDb25maWd9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHtzY2FsZSwga2V5LCBjaGFubmVsU2NhbGVUeXBlLCBkb21haW4sIHJhbmdlfSA9IGNoYW5uZWw7XG4gICAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSBsYXllci5nZXRTY2FsZU9wdGlvbnMoa2V5KTtcbiAgICAgIGNvbnN0IHZpc1JhbmdlID0gbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV07XG4gICAgICBjb25zdCBzaG93U2NhbGVDdXN0b21pemFibGUgPVxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvckFnZ3IgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShzY2FsZU9wdGlvbnMpICYmXG4gICAgICAgIHNjYWxlT3B0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgY29uc3Qgc2hvd1NjYWxlID0gQXJyYXkuaXNBcnJheShzY2FsZU9wdGlvbnMpICYmIHNjYWxlT3B0aW9ucy5sZW5ndGggPiAxO1xuXG4gICAgICBpZiAoc2hvd1NjYWxlQ3VzdG9taXphYmxlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICA8Q29sb3JEaW1lbnNpb25TY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGxhYmVsPXtgJHtrZXl9IFNjYWxlYH1cbiAgICAgICAgICAgICAgc2NhbGVUeXBlPXtsYXllci5jb25maWdbc2NhbGVdfVxuICAgICAgICAgICAgICBvcHRpb25zPXtzY2FsZU9wdGlvbnN9XG4gICAgICAgICAgICAgIGRvbWFpbj17bGF5ZXIuY29uZmlnW2RvbWFpbl19XG4gICAgICAgICAgICAgIHJhbmdlPXt2aXNSYW5nZX1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3ZhbCA9PiBvbkNoYW5nZSh7W3NjYWxlXTogdmFsfSwga2V5KX1cbiAgICAgICAgICAgICAgb25TZXRDdXN0b21QYWxldHRlPXsoY29sb3JNYXAsIHVpQ3VzdG9tU2NhbGVUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWcoe1tyYW5nZV06IHsuLi52aXNSYW5nZSwgY29sb3JNYXAsIHVpQ3VzdG9tU2NhbGVUeXBlfX0pO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG93U2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RGltZW5zaW9uU2NhbGVTZWxlY3RvclxuICAgICAgICAgICAgbGFiZWw9e2Ake2tleX0gU2NhbGVgfVxuICAgICAgICAgICAgb3B0aW9ucz17c2NhbGVPcHRpb25zfVxuICAgICAgICAgICAgc2NhbGVUeXBlPXtsYXllci5jb25maWdbc2NhbGVdfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3ZhbCA9PiBvbkNoYW5nZSh7W3NjYWxlXTogdmFsfSwga2V5KX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmplY3RJbnRsKEFnZ3JTY2FsZVNlbGVjdG9yKTtcbn1cblxuZXhwb3J0IGNvbnN0IEFnZ3JlZ2F0aW9uVHlwZVNlbGVjdG9yID0gKHtsYXllciwgY2hhbm5lbCwgb25DaGFuZ2V9KSA9PiB7XG4gIGNvbnN0IHtmaWVsZCwgYWdncmVnYXRpb24sIGtleX0gPSBjaGFubmVsO1xuICBjb25zdCBzZWxlY3RlZEZpZWxkID0gbGF5ZXIuY29uZmlnW2ZpZWxkXTtcbiAgY29uc3Qge3Zpc0NvbmZpZ30gPSBsYXllci5jb25maWc7XG5cbiAgLy8gYWdncmVnYXRpb24gc2hvdWxkIG9ubHkgYmUgc2VsZWN0YWJsZSB3aGVuIGZpZWxkIGlzIHNlbGVjdGVkXG4gIGNvbnN0IGFnZ3JlZ2F0aW9uT3B0aW9ucyA9IGxheWVyLmdldEFnZ3JlZ2F0aW9uT3B0aW9ucyhrZXkpO1xuXG4gIHJldHVybiAoXG4gICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydsYXllci5hZ2dyZWdhdGVCeSd9IHZhbHVlcz17e2ZpZWxkOiBzZWxlY3RlZEZpZWxkLm5hbWV9fSAvPlxuICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgPEl0ZW1TZWxlY3RvclxuICAgICAgICBzZWxlY3RlZEl0ZW1zPXt2aXNDb25maWdbYWdncmVnYXRpb25dfVxuICAgICAgICBvcHRpb25zPXthZ2dyZWdhdGlvbk9wdGlvbnN9XG4gICAgICAgIG11bHRpU2VsZWN0PXtmYWxzZX1cbiAgICAgICAgc2VhcmNoYWJsZT17ZmFsc2V9XG4gICAgICAgIG9uQ2hhbmdlPXt2YWx1ZSA9PlxuICAgICAgICAgIG9uQ2hhbmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2aXNDb25maWc6IHtcbiAgICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgICAgICAgICAgICAgIFthZ2dyZWdhdGlvbl06IHZhbHVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGFubmVsLmtleVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICk7XG59O1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1wYXJhbXMgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFB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
|