@colijnit/configurator 261.1.0 → 261.1.1
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/bundles/colijnit-configurator.umd.js +18012 -1838
- package/bundles/colijnit-configurator.umd.js.map +1 -1
- package/colijnit-configurator.d.ts +2 -6
- package/esm2015/colijnit-configurator.js +2 -7
- package/esm2015/lib/builder.js +795 -0
- package/esm2015/lib/components/answer-card/answer-card.component.js +313 -0
- package/esm2015/lib/components/answer-card/answer-card.module.js +50 -0
- package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.component.js +182 -0
- package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.module.js +34 -0
- package/esm2015/lib/components/answers-slideout/answers-slideout.component.js +490 -0
- package/esm2015/lib/components/answers-slideout/answers-slideout.module.js +61 -0
- package/esm2015/lib/components/color-filter/color-filter.component.js +59 -0
- package/esm2015/lib/components/color-filter/color-filter.module.js +26 -0
- package/esm2015/lib/components/configurator/configurator.component.js +133 -0
- package/esm2015/lib/components/configurator/configurator.module.js +42 -0
- package/esm2015/lib/components/configurator-dialog/configurator-camera-settings.component.js +222 -0
- package/esm2015/lib/components/configurator-dialog/configurator-dialog.module.js +48 -0
- package/esm2015/lib/components/configurator-dialog/configurator-error-dialog.component.js +82 -0
- package/esm2015/lib/components/configurator-dialog/configurator-export-dialog.component.js +163 -0
- package/esm2015/lib/components/configurator-loader/configurator-loader.component.js +49 -0
- package/esm2015/lib/components/configurator-loader/configurator-loader.module.js +33 -0
- package/esm2015/lib/components/configurator-scene/configurator-scene.component.js +60 -0
- package/esm2015/lib/components/configurator-scene/configurator-scene.module.js +17 -0
- package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.component.js +46 -0
- package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.module.js +26 -0
- package/esm2015/lib/components/element-buttons/element-buttons.component.js +168 -0
- package/esm2015/lib/components/element-buttons/element-buttons.module.js +30 -0
- package/esm2015/lib/components/element-toolbar/element-toolbar.component.js +186 -0
- package/esm2015/lib/components/element-toolbar/element-toolbar.module.js +34 -0
- package/esm2015/lib/components/image-zoom/image-zoom.component.js +61 -0
- package/esm2015/lib/components/image-zoom/image-zoom.module.js +30 -0
- package/esm2015/lib/components/lite-selector/lite-selector.component.js +206 -0
- package/esm2015/lib/components/lite-selector/lite-selector.module.js +34 -0
- package/esm2015/lib/components/product-configurator/product-configurator.component.js +184 -0
- package/esm2015/lib/components/product-configurator/product-configurator.module.js +72 -0
- package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.component.js +237 -0
- package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.module.js +38 -0
- package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.js +284 -0
- package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.js +42 -0
- package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.js +72 -0
- package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.js +34 -0
- package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.js +82 -0
- package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.js +30 -0
- package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.js +80 -0
- package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.js +34 -0
- package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.js +93 -0
- package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.js +34 -0
- package/esm2015/lib/components/progress-bar/progress-bar.component.js +55 -0
- package/esm2015/lib/components/progress-bar/progress-bar.module.js +29 -0
- package/esm2015/lib/components/scene-options/scene-options.component.js +164 -0
- package/esm2015/lib/components/scene-options/scene-options.module.js +38 -0
- package/esm2015/lib/components/selections-summary/selections-summary.component.js +163 -0
- package/esm2015/lib/components/selections-summary/selections-summary.module.js +45 -0
- package/esm2015/lib/components/selections-summary-line/selections-summary-line.component.js +171 -0
- package/esm2015/lib/components/selections-summary-line/selections-summary-line.module.js +34 -0
- package/esm2015/lib/components/slideout/slideout.component.js +83 -0
- package/esm2015/lib/components/slideout/slideout.module.js +17 -0
- package/esm2015/lib/components/summary-line/summary-line.component.js +273 -0
- package/esm2015/lib/components/summary-line/summary-line.module.js +44 -0
- package/esm2015/lib/components/tag-filter/tag-filter.component.js +39 -0
- package/esm2015/lib/components/tag-filter/tag-filter.module.js +21 -0
- package/esm2015/lib/components/threedselector/threedselector.component.js +155 -0
- package/esm2015/lib/components/threedselector/threedselector.module.js +34 -0
- package/esm2015/lib/core/helper/variation-helper.js +553 -0
- package/esm2015/lib/core/shader/floor-fade.shader.js +33 -0
- package/esm2015/lib/core/textures/depth-data-texture.js +19 -0
- package/esm2015/lib/directives/directives.module.js +26 -0
- package/esm2015/lib/directives/visibility-observer-master.directive.js +53 -0
- package/esm2015/lib/directives/visibility-observer.directive.js +54 -0
- package/esm2015/lib/enum/ar-feature.enum.js +14 -0
- package/esm2015/lib/enum/configuration-key.enum.js +41 -0
- package/esm2015/lib/enum/configuration-template.enum.js +6 -0
- package/esm2015/lib/enum/device-size-type.js +7 -0
- package/esm2015/lib/enum/device-tier.enum.js +7 -0
- package/esm2015/lib/enum/icon.enum.js +113 -0
- package/esm2015/lib/enum/item-type.enum.js +23 -0
- package/esm2015/lib/enum/light.enum.js +9 -0
- package/esm2015/lib/enum/navigator-type.enum.js +6 -0
- package/esm2015/lib/enum/output-encoding.enum.js +9 -0
- package/esm2015/lib/enum/result-type.enum.js +21 -0
- package/esm2015/lib/enum/scene-event.enum.js +12 -0
- package/esm2015/lib/enum/shadow-map-type.enum.js +8 -0
- package/esm2015/lib/enum/texture-type.js +9 -0
- package/esm2015/lib/enum/tone-mapping-local.enum.js +12 -0
- package/esm2015/lib/enum/view-mode.enum.js +7 -0
- package/esm2015/lib/enum/xr-mode.enum.js +6 -0
- package/esm2015/lib/environments/environment.js +8 -0
- package/esm2015/lib/interfaces/aa-options.interface.js +2 -0
- package/esm2015/lib/interfaces/adjustable-element.interface.js +2 -0
- package/esm2015/lib/interfaces/ao-options.interface.js +2 -0
- package/esm2015/lib/interfaces/changes.interface.js +2 -0
- package/esm2015/lib/interfaces/configuration-data.interface.js +2 -0
- package/esm2015/lib/interfaces/light-preset.interface.js +2 -0
- package/esm2015/lib/interfaces/post-processing-setting.interface.js +2 -0
- package/esm2015/lib/interfaces/scene-option-button.interface.js +6 -0
- package/esm2015/lib/interfaces/screen-size-info.js +2 -0
- package/esm2015/lib/interfaces/setting.interface.js +2 -0
- package/esm2015/lib/interfaces/texture.interface.js +2 -0
- package/esm2015/lib/interfaces/vignette-options.interface.js +2 -0
- package/esm2015/lib/model/ar-position-indicator.js +18 -0
- package/esm2015/lib/model/camera-settings.js +14 -0
- package/esm2015/lib/model/configuration-result-object.js +6 -0
- package/esm2015/lib/model/configurator-error-message.js +9 -0
- package/esm2015/lib/model/configurator-settings.js +25 -0
- package/esm2015/lib/model/custom-button.js +16 -0
- package/esm2015/lib/model/factory.js +28 -0
- package/esm2015/lib/model/icon.js +112 -0
- package/esm2015/lib/model/intersected-objects.js +7 -0
- package/esm2015/lib/model/light-preset.js +73 -0
- package/esm2015/lib/model/light-properties.js +45 -0
- package/esm2015/lib/model/material.js +11 -0
- package/esm2015/lib/model/metadata.js +2 -0
- package/esm2015/lib/model/render-parameters.js +16 -0
- package/esm2015/lib/model/setting-options.js +71 -0
- package/esm2015/lib/model/settings.js +16 -0
- package/esm2015/lib/model/shadow-properties.js +10 -0
- package/esm2015/lib/model/skin.js +3 -0
- package/esm2015/lib/model/texture.js +76 -0
- package/esm2015/lib/model/variation-settings.js +54 -0
- package/esm2015/lib/model/variation.js +3 -0
- package/esm2015/lib/model/xr-reticle.js +79 -0
- package/esm2015/lib/modules/render/enum/scene-type.enum.js +6 -0
- package/esm2015/lib/modules/render/model/ar-parameters.js +12 -0
- package/esm2015/lib/modules/render/model/scene-setting.js +6 -0
- package/esm2015/lib/modules/render/model/scene-settings.js +3 -0
- package/esm2015/lib/pipes/append.pipe.js +21 -0
- package/esm2015/lib/pipes/google-translate.pipe.js +21 -0
- package/esm2015/lib/pipes/localize.pipe.js +28 -0
- package/esm2015/lib/pipes/pipes.module.js +41 -0
- package/esm2015/lib/pipes/prepend.pipe.js +21 -0
- package/esm2015/lib/pipes/strip-html.pipe.js +17 -0
- package/esm2015/lib/services/app-event.service.js +36 -0
- package/esm2015/lib/services/app-initializer.service.js +27 -0
- package/esm2015/lib/services/ar.service.js +844 -0
- package/esm2015/lib/services/build-furniture-base.service.js +1181 -0
- package/esm2015/lib/services/build-furniture-without-scene.service.js +86 -0
- package/esm2015/lib/services/build-furniture.service.js +169 -0
- package/esm2015/lib/services/bundle-initialzer.service.js +113 -0
- package/esm2015/lib/services/camera.service.js +123 -0
- package/esm2015/lib/services/configuration.service.js +79 -0
- package/esm2015/lib/services/configurator-connector.service.js +830 -0
- package/esm2015/lib/services/configurator.service.js +285 -0
- package/esm2015/lib/services/configuring.service.js +119 -0
- package/esm2015/lib/services/controls.js +799 -0
- package/esm2015/lib/services/debug.service.js +43 -0
- package/esm2015/lib/services/dictionary.service.js +65 -0
- package/esm2015/lib/services/dynamic-camera.service.js +96 -0
- package/esm2015/lib/services/floor-plane.service.js +252 -0
- package/esm2015/lib/services/font.service.js +27 -0
- package/esm2015/lib/services/google-translate.service.js +79 -0
- package/esm2015/lib/services/icon-cache.service.js +44 -0
- package/esm2015/lib/services/intersection.service.js +47 -0
- package/esm2015/lib/services/item.service.js +75 -0
- package/esm2015/lib/services/json-utils.service.js +48 -0
- package/esm2015/lib/services/light-creation.service.js +35 -0
- package/esm2015/lib/services/light-presets.service.js +157 -0
- package/esm2015/lib/services/lights.service.js +146 -0
- package/esm2015/lib/services/load-furniture-base.service.js +164 -0
- package/esm2015/lib/services/load-furniture-without-scene.service.js +45 -0
- package/esm2015/lib/services/load-furniture.service.js +72 -0
- package/esm2015/lib/services/loader.service.js +32 -0
- package/esm2015/lib/services/locator.service.js +11 -0
- package/esm2015/lib/services/message-board.service.js +50 -0
- package/esm2015/lib/services/post-processing.service.js +378 -0
- package/esm2015/lib/services/product-configurator.service.js +16 -0
- package/esm2015/lib/services/progress.service.js +20 -0
- package/esm2015/lib/services/scene-event.service.js +246 -0
- package/esm2015/lib/services/scene-options.service.js +24 -0
- package/esm2015/lib/services/scene.service.js +313 -0
- package/esm2015/lib/services/screen-size-analysis.service.js +97 -0
- package/esm2015/lib/services/settings.service.js +142 -0
- package/esm2015/lib/services/switch-build-furniture.service.js +37 -0
- package/esm2015/lib/services/switch-load-furniture.service.js +35 -0
- package/esm2015/lib/services/threedselector.service.js +72 -0
- package/esm2015/lib/services/utils.service.js +207 -0
- package/esm2015/lib/services/variation-cache.service.js +143 -0
- package/esm2015/lib/services/variation.service.js +490 -0
- package/esm2015/lib/services/view-mode.service.js +37 -0
- package/esm2015/lib/services/vr.service.js +191 -0
- package/esm2015/lib/services/xr.service.js +294 -0
- package/esm2015/lib/utils/asset.utils.js +120 -0
- package/esm2015/lib/utils/base-utils.js +9 -0
- package/esm2015/lib/utils/color.utils.js +30 -0
- package/esm2015/lib/utils/debug.utils.js +9 -0
- package/esm2015/lib/utils/device.utils.js +25 -0
- package/esm2015/lib/utils/file.utils.js +167 -0
- package/esm2015/lib/utils/image.utils.js +61 -0
- package/esm2015/lib/utils/json-parser.utils.js +180 -0
- package/esm2015/lib/utils/material.utils.js +433 -0
- package/esm2015/lib/utils/object.utils.js +360 -0
- package/esm2015/lib/utils/relative-position.utils.js +75 -0
- package/esm2015/lib/utils/rotation-helper.utils.js +15 -0
- package/esm2015/lib/utils/scene-3d.utils.js +213 -0
- package/esm2015/lib/utils/scene-utils.js +191 -0
- package/esm2015/lib/utils/text-utils.js +68 -0
- package/esm2015/lib/utils/threed.utils.js +281 -0
- package/esm2015/lib/utils/variation-utils.js +459 -0
- package/esm2015/public-api.js +65 -0
- package/fesm2015/colijnit-configurator.js +17512 -1451
- package/fesm2015/colijnit-configurator.js.map +1 -1
- package/{app → lib}/builder.d.ts +9 -1
- package/lib/components/answer-card/answer-card.component.d.ts +58 -0
- package/lib/components/answer-card/answer-card.module.d.ts +11 -0
- package/lib/components/answer-card/style/_layout.scss +88 -0
- package/lib/components/answer-card/style/_material-definition.scss +3 -0
- package/lib/components/answer-card/style/_theme.scss +67 -0
- package/lib/components/answer-card/style/material.scss +2 -0
- package/lib/components/answer-info-dialog/answer-info-dialog.component.d.ts +38 -0
- package/lib/components/answer-info-dialog/answer-info-dialog.module.d.ts +10 -0
- package/lib/components/answer-info-dialog/style/_layout.scss +88 -0
- package/lib/components/answer-info-dialog/style/_material-definition.scss +3 -0
- package/lib/components/answer-info-dialog/style/_theme.scss +44 -0
- package/lib/components/answer-info-dialog/style/material.scss +3 -0
- package/lib/components/answers-slideout/answers-slideout.component.d.ts +86 -0
- package/lib/components/answers-slideout/answers-slideout.module.d.ts +16 -0
- package/lib/components/answers-slideout/style/_layout.scss +198 -0
- package/lib/components/answers-slideout/style/_material-definition.scss +3 -0
- package/lib/components/answers-slideout/style/_theme.scss +54 -0
- package/lib/components/answers-slideout/style/material.scss +3 -0
- package/lib/components/color-filter/color-filter.component.d.ts +20 -0
- package/lib/components/color-filter/color-filter.module.d.ts +8 -0
- package/lib/components/color-filter/style/_layout.scss +41 -0
- package/lib/components/color-filter/style/_material-definition.scss +3 -0
- package/lib/components/color-filter/style/_theme.scss +7 -0
- package/lib/components/color-filter/style/material.scss +3 -0
- package/lib/components/configurator/configurator.component.d.ts +37 -0
- package/lib/components/configurator/configurator.module.d.ts +12 -0
- package/lib/components/configurator/style/_layout.scss +7 -0
- package/lib/components/configurator/style/_material-definition.scss +3 -0
- package/lib/components/configurator/style/_theme.scss +7 -0
- package/lib/components/configurator/style/material.scss +3 -0
- package/lib/components/configurator-dialog/configurator-camera-settings.component.d.ts +30 -0
- package/lib/components/configurator-dialog/configurator-dialog.module.d.ts +13 -0
- package/lib/components/configurator-dialog/configurator-error-dialog.component.d.ts +16 -0
- package/lib/components/configurator-dialog/configurator-export-dialog.component.d.ts +26 -0
- package/lib/components/configurator-dialog/style/_layout.scss +129 -0
- package/lib/components/configurator-dialog/style/_material-definition.scss +4 -0
- package/lib/components/configurator-dialog/style/_theme.scss +89 -0
- package/lib/components/configurator-dialog/style/material.scss +3 -0
- package/lib/components/configurator-loader/configurator-loader.component.d.ts +7 -0
- package/lib/components/configurator-loader/configurator-loader.module.d.ts +9 -0
- package/lib/components/configurator-loader/style/_layout.scss +72 -0
- package/lib/components/configurator-loader/style/_material-definition.scss +5 -0
- package/lib/components/configurator-loader/style/_theme.scss +26 -0
- package/lib/components/configurator-loader/style/material.scss +14 -0
- package/lib/components/configurator-scene/configurator-scene.component.d.ts +24 -0
- package/lib/components/configurator-scene/configurator-scene.module.d.ts +7 -0
- package/lib/components/configurator-scene/style/_layout.scss +22 -0
- package/lib/components/configurator-scene/style/_material-definition.scss +3 -0
- package/lib/components/configurator-scene/style/_theme.scss +7 -0
- package/lib/components/configurator-scene/style/material.scss +3 -0
- package/lib/components/configurator-scene-loader/configurator-scene-loader.component.d.ts +7 -0
- package/lib/components/configurator-scene-loader/configurator-scene-loader.module.d.ts +8 -0
- package/lib/components/configurator-scene-loader/style/_layout.scss +72 -0
- package/lib/components/configurator-scene-loader/style/_material-definition.scss +5 -0
- package/lib/components/configurator-scene-loader/style/_theme.scss +26 -0
- package/lib/components/configurator-scene-loader/style/material.scss +14 -0
- package/lib/components/element-buttons/element-buttons.component.d.ts +32 -0
- package/lib/components/element-buttons/element-buttons.module.d.ts +9 -0
- package/lib/components/element-buttons/style/_layout.scss +52 -0
- package/lib/components/element-buttons/style/_material-definition.scss +3 -0
- package/lib/components/element-buttons/style/_theme.scss +23 -0
- package/lib/components/element-buttons/style/material.scss +3 -0
- package/lib/components/element-toolbar/element-toolbar.component.d.ts +27 -0
- package/lib/components/element-toolbar/element-toolbar.component.scss +59 -0
- package/lib/components/element-toolbar/element-toolbar.module.d.ts +10 -0
- package/lib/components/element-toolbar/style/_layout.scss +107 -0
- package/lib/components/element-toolbar/style/_material-definition.scss +3 -0
- package/lib/components/element-toolbar/style/_theme.scss +47 -0
- package/lib/components/element-toolbar/style/material.scss +3 -0
- package/lib/components/image-zoom/image-zoom.component.d.ts +15 -0
- package/lib/components/image-zoom/image-zoom.module.d.ts +9 -0
- package/lib/components/image-zoom/style/_layout.scss +51 -0
- package/lib/components/image-zoom/style/_material-definition.scss +3 -0
- package/lib/components/image-zoom/style/_theme.scss +17 -0
- package/lib/components/image-zoom/style/material.scss +3 -0
- package/lib/components/lite-selector/lite-selector.component.d.ts +40 -0
- package/lib/components/lite-selector/lite-selector.module.d.ts +10 -0
- package/lib/components/lite-selector/style/_layout.scss +21 -0
- package/lib/components/lite-selector/style/_material-definition.scss +3 -0
- package/lib/components/lite-selector/style/_theme.scss +7 -0
- package/lib/components/lite-selector/style/material.scss +3 -0
- package/lib/components/product-configurator/product-configurator.component.d.ts +50 -0
- package/lib/components/product-configurator/product-configurator.module.d.ts +15 -0
- package/lib/components/product-configurator/style/_layout.scss +46 -0
- package/lib/components/product-configurator/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator/style/_theme.scss +22 -0
- package/lib/components/product-configurator/style/material.scss +3 -0
- package/lib/components/product-configurator-selector/product-configurator-selector.component.d.ts +35 -0
- package/lib/components/product-configurator-selector/product-configurator-selector.module.d.ts +11 -0
- package/lib/components/product-configurator-selector/style/_layout.scss +145 -0
- package/lib/components/product-configurator-selector/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector/style/_theme.scss +57 -0
- package/lib/components/product-configurator-selector/style/material.scss +3 -0
- package/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.d.ts +31 -0
- package/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.d.ts +13 -0
- package/lib/components/product-configurator-selector-option/style/_layout.scss +7 -0
- package/lib/components/product-configurator-selector-option/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector-option/style/_theme.scss +7 -0
- package/lib/components/product-configurator-selector-option/style/material.scss +3 -0
- package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.d.ts +20 -0
- package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.d.ts +10 -0
- package/lib/components/product-configurator-selector-option-button/style/_layout.scss +28 -0
- package/lib/components/product-configurator-selector-option-button/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector-option-button/style/_theme.scss +33 -0
- package/lib/components/product-configurator-selector-option-button/style/material.scss +3 -0
- package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.d.ts +20 -0
- package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.d.ts +10 -0
- package/lib/components/product-configurator-selector-option-checkbox/style/_layout.scss +28 -0
- package/lib/components/product-configurator-selector-option-checkbox/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector-option-checkbox/style/_theme.scss +27 -0
- package/lib/components/product-configurator-selector-option-checkbox/style/material.scss +3 -0
- package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.d.ts +21 -0
- package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.d.ts +10 -0
- package/lib/components/product-configurator-selector-option-dropdown/style/_layout.scss +34 -0
- package/lib/components/product-configurator-selector-option-dropdown/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector-option-dropdown/style/_theme.scss +28 -0
- package/lib/components/product-configurator-selector-option-dropdown/style/material.scss +3 -0
- package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.d.ts +21 -0
- package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.d.ts +10 -0
- package/lib/components/product-configurator-selector-option-tile/style/_layout.scss +58 -0
- package/lib/components/product-configurator-selector-option-tile/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector-option-tile/style/_theme.scss +56 -0
- package/lib/components/product-configurator-selector-option-tile/style/material.scss +3 -0
- package/lib/components/progress-bar/progress-bar.component.d.ts +10 -0
- package/lib/components/progress-bar/progress-bar.component.scss +14 -0
- package/lib/components/progress-bar/progress-bar.module.d.ts +8 -0
- package/lib/components/progress-bar/style/_layout.scss +18 -0
- package/lib/components/progress-bar/style/_material-definition.scss +3 -0
- package/lib/components/progress-bar/style/_theme.scss +10 -0
- package/lib/components/progress-bar/style/material.scss +3 -0
- package/lib/components/scene-options/scene-options.component.d.ts +24 -0
- package/lib/components/scene-options/scene-options.module.d.ts +11 -0
- package/lib/components/scene-options/style/_layout.scss +52 -0
- package/lib/components/scene-options/style/_material-definition.scss +3 -0
- package/lib/components/scene-options/style/_theme.scss +7 -0
- package/lib/components/scene-options/style/material.scss +3 -0
- package/lib/components/selections-summary/selections-summary.component.d.ts +38 -0
- package/lib/components/selections-summary/selections-summary.module.d.ts +12 -0
- package/lib/components/selections-summary/style/_layout.scss +87 -0
- package/lib/components/selections-summary/style/_material-definition.scss +5 -0
- package/lib/components/selections-summary/style/_theme.scss +13 -0
- package/lib/components/selections-summary/style/material.scss +3 -0
- package/lib/components/selections-summary-line/selections-summary-line.component.d.ts +27 -0
- package/lib/components/selections-summary-line/selections-summary-line.module.d.ts +10 -0
- package/lib/components/selections-summary-line/style/_layout.scss +12 -0
- package/lib/components/selections-summary-line/style/_material-definition.scss +4 -0
- package/lib/components/selections-summary-line/style/_theme.scss +12 -0
- package/lib/components/selections-summary-line/style/material.scss +3 -0
- package/lib/components/slideout/slideout.component.d.ts +22 -0
- package/lib/components/slideout/slideout.module.d.ts +7 -0
- package/lib/components/slideout/style/_layout.scss +27 -0
- package/lib/components/slideout/style/_material-definition.scss +3 -0
- package/lib/components/slideout/style/_theme.scss +5 -0
- package/lib/components/slideout/style/material.scss +3 -0
- package/lib/components/summary-line/style/_layout.scss +137 -0
- package/lib/components/summary-line/style/_material-definition.scss +4 -0
- package/lib/components/summary-line/style/_theme.scss +56 -0
- package/lib/components/summary-line/style/material.scss +3 -0
- package/lib/components/summary-line/summary-line.component.d.ts +50 -0
- package/lib/components/summary-line/summary-line.module.d.ts +11 -0
- package/lib/components/tag-filter/style/_layout.scss +14 -0
- package/lib/components/tag-filter/style/_material-definition.scss +3 -0
- package/lib/components/tag-filter/style/_theme.scss +7 -0
- package/lib/components/tag-filter/style/material.scss +3 -0
- package/lib/components/tag-filter/tag-filter.component.d.ts +9 -0
- package/lib/components/tag-filter/tag-filter.module.d.ts +7 -0
- package/lib/components/threedselector/style/_layout.scss +32 -0
- package/lib/components/threedselector/style/_material-definition.scss +3 -0
- package/lib/components/threedselector/style/_theme.scss +7 -0
- package/lib/components/threedselector/style/material.scss +9 -0
- package/lib/components/threedselector/threedselector.component.d.ts +38 -0
- package/lib/components/threedselector/threedselector.module.d.ts +10 -0
- package/{helper → lib/core/helper}/variation-helper.d.ts +2 -2
- package/lib/core/shader/floor-fade.shader.d.ts +5 -0
- package/lib/core/textures/depth-data-texture.d.ts +5 -0
- package/lib/directives/directives.module.d.ts +8 -0
- package/{app → lib}/directives/visibility-observer-master.directive.d.ts +3 -0
- package/{app → lib}/directives/visibility-observer.directive.d.ts +3 -0
- package/lib/enum/ar-feature.enum.d.ts +12 -0
- package/lib/enum/configuration-key.enum.d.ts +39 -0
- package/lib/enum/configuration-template.enum.d.ts +4 -0
- package/lib/enum/device-size-type.d.ts +5 -0
- package/lib/enum/device-tier.enum.d.ts +5 -0
- package/lib/enum/icon.enum.d.ts +111 -0
- package/lib/enum/item-type.enum.d.ts +21 -0
- package/lib/enum/light.enum.d.ts +7 -0
- package/lib/enum/navigator-type.enum.d.ts +4 -0
- package/lib/enum/output-encoding.enum.d.ts +7 -0
- package/lib/enum/result-type.enum.d.ts +19 -0
- package/lib/enum/scene-event.enum.d.ts +10 -0
- package/lib/enum/shadow-map-type.enum.d.ts +6 -0
- package/lib/enum/texture-type.d.ts +7 -0
- package/lib/enum/tone-mapping-local.enum.d.ts +10 -0
- package/lib/enum/view-mode.enum.d.ts +5 -0
- package/lib/enum/xr-mode.enum.d.ts +4 -0
- package/lib/environments/environment.d.ts +4 -0
- package/lib/interfaces/aa-options.interface.d.ts +4 -0
- package/lib/interfaces/adjustable-element.interface.d.ts +5 -0
- package/lib/interfaces/ao-options.interface.d.ts +18 -0
- package/lib/interfaces/changes.interface.d.ts +9 -0
- package/lib/interfaces/configuration-data.interface.d.ts +40 -0
- package/lib/interfaces/light-preset.interface.d.ts +22 -0
- package/lib/interfaces/post-processing-setting.interface.d.ts +11 -0
- package/lib/interfaces/scene-option-button.interface.d.ts +19 -0
- package/lib/interfaces/screen-size-info.d.ts +10 -0
- package/lib/interfaces/setting.interface.d.ts +8 -0
- package/lib/interfaces/texture.interface.d.ts +44 -0
- package/lib/interfaces/vignette-options.interface.d.ts +4 -0
- package/lib/model/ar-position-indicator.d.ts +4 -0
- package/lib/model/camera-settings.d.ts +12 -0
- package/lib/model/configuration-result-object.d.ts +30 -0
- package/lib/model/configurator-error-message.d.ts +8 -0
- package/lib/model/configurator-settings.d.ts +62 -0
- package/lib/model/custom-button.d.ts +10 -0
- package/lib/model/factory.d.ts +5 -0
- package/lib/model/icon.d.ts +4 -0
- package/lib/model/intersected-objects.d.ts +6 -0
- package/lib/model/light-preset.d.ts +33 -0
- package/lib/model/light-properties.d.ts +25 -0
- package/lib/model/material.d.ts +41 -0
- package/lib/model/metadata.d.ts +78 -0
- package/lib/model/render-parameters.d.ts +12 -0
- package/lib/model/setting-options.d.ts +67 -0
- package/lib/model/settings.d.ts +10 -0
- package/lib/model/shadow-properties.d.ts +7 -0
- package/lib/model/skin.d.ts +15 -0
- package/lib/model/texture.d.ts +52 -0
- package/{model → lib/model}/variation-settings.d.ts +9 -8
- package/{model → lib/model}/variation.d.ts +2 -1
- package/lib/model/xr-reticle.d.ts +17 -0
- package/lib/modules/render/enum/scene-type.enum.d.ts +4 -0
- package/lib/modules/render/model/ar-parameters.d.ts +9 -0
- package/lib/modules/render/model/scene-setting.d.ts +13 -0
- package/lib/modules/render/model/scene-settings.d.ts +4 -0
- package/lib/pipes/append.pipe.d.ts +7 -0
- package/lib/pipes/google-translate.pipe.d.ts +11 -0
- package/lib/pipes/localize.pipe.d.ts +10 -0
- package/lib/pipes/pipes.module.d.ts +11 -0
- package/lib/pipes/prepend.pipe.d.ts +7 -0
- package/lib/pipes/strip-html.pipe.d.ts +7 -0
- package/lib/services/app-event.service.d.ts +32 -0
- package/lib/services/app-initializer.service.d.ts +14 -0
- package/lib/services/ar.service.d.ts +120 -0
- package/lib/services/build-furniture-base.service.d.ts +117 -0
- package/lib/services/build-furniture-without-scene.service.d.ts +14 -0
- package/lib/services/build-furniture.service.d.ts +14 -0
- package/lib/services/bundle-initialzer.service.d.ts +45 -0
- package/lib/services/camera.service.d.ts +44 -0
- package/lib/services/configuration.service.d.ts +18 -0
- package/lib/services/configurator-connector.service.d.ts +140 -0
- package/lib/services/configurator.service.d.ts +62 -0
- package/lib/services/configuring.service.d.ts +46 -0
- package/lib/services/controls.d.ts +11 -0
- package/lib/services/debug.service.d.ts +16 -0
- package/lib/services/dictionary.service.d.ts +15 -0
- package/lib/services/dynamic-camera.service.d.ts +21 -0
- package/lib/services/floor-plane.service.d.ts +47 -0
- package/lib/services/font.service.d.ts +10 -0
- package/lib/services/google-translate.service.d.ts +26 -0
- package/lib/services/icon-cache.service.d.ts +21 -0
- package/lib/services/intersection.service.d.ts +11 -0
- package/lib/services/item.service.d.ts +18 -0
- package/lib/services/json-utils.service.d.ts +7 -0
- package/lib/services/light-creation.service.d.ts +9 -0
- package/lib/services/light-presets.service.d.ts +34 -0
- package/lib/services/lights.service.d.ts +34 -0
- package/lib/services/load-furniture-base.service.d.ts +37 -0
- package/lib/services/load-furniture-without-scene.service.d.ts +9 -0
- package/lib/services/load-furniture.service.d.ts +9 -0
- package/lib/services/loader.service.d.ts +11 -0
- package/lib/services/locator.service.d.ts +7 -0
- package/lib/services/message-board.service.d.ts +18 -0
- package/lib/services/post-processing.service.d.ts +74 -0
- package/lib/services/product-configurator.service.d.ts +11 -0
- package/lib/services/progress.service.d.ts +9 -0
- package/lib/services/scene-event.service.d.ts +72 -0
- package/lib/services/scene-options.service.d.ts +11 -0
- package/lib/services/scene.service.d.ts +71 -0
- package/lib/services/screen-size-analysis.service.d.ts +32 -0
- package/lib/services/settings.service.d.ts +24 -0
- package/lib/services/switch-build-furniture.service.d.ts +21 -0
- package/lib/services/switch-load-furniture.service.d.ts +21 -0
- package/lib/services/threedselector.service.d.ts +17 -0
- package/lib/services/utils.service.d.ts +24 -0
- package/lib/services/variation-cache.service.d.ts +23 -0
- package/lib/services/variation.service.d.ts +26 -0
- package/lib/services/view-mode.service.d.ts +17 -0
- package/lib/services/vr.service.d.ts +42 -0
- package/lib/services/xr.service.d.ts +56 -0
- package/lib/style/_mixin.scss +9 -0
- package/lib/style/configurator-globals.scss +21 -0
- package/lib/style/template_variables.scss +37 -0
- package/lib/utils/color.utils.d.ts +8 -0
- package/lib/utils/debug.utils.d.ts +3 -0
- package/lib/utils/device.utils.d.ts +7 -0
- package/{utils → lib/utils}/file.utils.d.ts +3 -0
- package/{utils → lib/utils}/image.utils.d.ts +2 -3
- package/lib/utils/json-parser.utils.d.ts +9 -0
- package/lib/utils/material.utils.d.ts +34 -0
- package/lib/utils/object.utils.d.ts +32 -0
- package/lib/utils/relative-position.utils.d.ts +12 -0
- package/lib/utils/rotation-helper.utils.d.ts +6 -0
- package/lib/utils/scene-3d.utils.d.ts +8 -0
- package/lib/utils/text-utils.d.ts +4 -0
- package/{utils → lib/utils}/threed.utils.d.ts +7 -3
- package/{utils → lib/utils}/variation-utils.d.ts +4 -2
- package/package.json +17 -30
- package/public-api.d.ts +60 -0
- package/README.md +0 -28
- package/app/components/answers/answer/answer.component.d.ts +0 -11
- package/app/components/answers/answers.component.d.ts +0 -8
- package/app/components/answers/answers.module.d.ts +0 -2
- package/app/components/selections/selections.component.d.ts +0 -21
- package/app/components/selections/selections.module.d.ts +0 -2
- package/app/components/shared/loader/loader.component.d.ts +0 -2
- package/app/components/shared/shared.module.d.ts +0 -2
- package/app/services/configurator.service.d.ts +0 -19
- package/app/services/image-cache.service.d.ts +0 -10
- package/app/utils/object.utils.d.ts +0 -7
- package/colijnit-configurator.metadata.json +0 -1
- package/esm2015/app/builder.js +0 -710
- package/esm2015/app/components/answers/answer/answer.component.js +0 -66
- package/esm2015/app/components/answers/answers.component.js +0 -38
- package/esm2015/app/components/answers/answers.module.js +0 -27
- package/esm2015/app/components/selections/selections.component.js +0 -129
- package/esm2015/app/components/selections/selections.module.js +0 -21
- package/esm2015/app/components/shared/loader/loader.component.js +0 -22
- package/esm2015/app/components/shared/shared.module.js +0 -19
- package/esm2015/app/directives/visibility-observer-master.directive.js +0 -50
- package/esm2015/app/directives/visibility-observer.directive.js +0 -55
- package/esm2015/app/services/configurator.service.js +0 -79
- package/esm2015/app/services/image-cache.service.js +0 -63
- package/esm2015/app/utils/object.utils.js +0 -51
- package/esm2015/helper/variation-helper.js +0 -549
- package/esm2015/model/material.js +0 -11
- package/esm2015/model/variation-settings.js +0 -54
- package/esm2015/model/variation.js +0 -3
- package/esm2015/public_api.js +0 -7
- package/esm2015/utils/asset.utils.js +0 -124
- package/esm2015/utils/base-utils.js +0 -9
- package/esm2015/utils/file.utils.js +0 -142
- package/esm2015/utils/image.utils.js +0 -66
- package/esm2015/utils/object.utils.js +0 -49
- package/esm2015/utils/scene-utils.js +0 -187
- package/esm2015/utils/threed.utils.js +0 -226
- package/esm2015/utils/variation-utils.js +0 -388
- package/model/material.d.ts +0 -40
- package/public_api.d.ts +0 -6
- package/utils/object.utils.d.ts +0 -7
- /package/{utils → lib/utils}/asset.utils.d.ts +0 -0
- /package/{utils → lib/utils}/base-utils.d.ts +0 -0
- /package/{utils → lib/utils}/scene-utils.d.ts +0 -0
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { DecoNodeType } from '@colijnit/configuratorapi/build/enum/deco-node-type.enum';
|
|
4
|
+
import { Color, DoubleSide, EquirectangularReflectionMapping, Mesh, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, NearestFilter } from 'three';
|
|
5
|
+
import { AssetUtils } from '../utils/asset.utils';
|
|
6
|
+
import { ObjectUtils } from '../utils/object.utils';
|
|
7
|
+
import { VariationUtils } from '../utils/variation-utils';
|
|
8
|
+
import { Variation } from '../model/variation';
|
|
9
|
+
import { DebugUtils } from '../utils/debug.utils';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "./threedselector.service";
|
|
12
|
+
export class VariationService {
|
|
13
|
+
constructor(_threedSelectorService) {
|
|
14
|
+
this._threedSelectorService = _threedSelectorService;
|
|
15
|
+
this._lastKnownVariations = new Map();
|
|
16
|
+
}
|
|
17
|
+
clearCache() {
|
|
18
|
+
const variationMap = Array.from(this._lastKnownVariations.values());
|
|
19
|
+
variationMap.forEach((variations) => {
|
|
20
|
+
variations.forEach((variation) => {
|
|
21
|
+
try {
|
|
22
|
+
if (variation.material) {
|
|
23
|
+
if (variation.material.texture) {
|
|
24
|
+
variation.material.texture.dispose();
|
|
25
|
+
}
|
|
26
|
+
if (variation.material.normal) {
|
|
27
|
+
variation.material.normal.dispose();
|
|
28
|
+
}
|
|
29
|
+
if (variation.material.metalness) {
|
|
30
|
+
variation.material.metalness.dispose();
|
|
31
|
+
}
|
|
32
|
+
if (variation.material.roughness) {
|
|
33
|
+
variation.material.roughness.dispose();
|
|
34
|
+
}
|
|
35
|
+
if (variation.material.ao) {
|
|
36
|
+
variation.material.ao.dispose();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
DebugUtils.log('Failed to dispose material: ' + e);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
loadPart(assetPath, parts, instanceId, obj, usePbr = false) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
try {
|
|
49
|
+
const len = parts.length;
|
|
50
|
+
for (let i = 0; i < len; i++) {
|
|
51
|
+
if (parts[i].decoNode && parts[i].decoNode.gameObjectName && parts[i].decoNode.type === DecoNodeType.Part) {
|
|
52
|
+
let partSettings;
|
|
53
|
+
partSettings = yield this._threedSelectorService.loadVariation(parts[i].decoNode.materialUrl ? parts[i].decoNode.materialCode : (parts[i].decoNode.gameObjectName || parts[i].decoId));
|
|
54
|
+
if (partSettings) {
|
|
55
|
+
const partVariation = new Variation();
|
|
56
|
+
partVariation.decoId = parseFloat(parts[i].decoNode.id);
|
|
57
|
+
partVariation.brandId = parts[i].decoNode.brandId;
|
|
58
|
+
partVariation.gameObjectName = parts[i].decoNode.gameObjectName;
|
|
59
|
+
partVariation.material = yield AssetUtils.CreateMaterialFromAsset(partSettings);
|
|
60
|
+
this.loadedAsset = VariationUtils.GetUrl(assetPath, parts[i].schema, parts[i].decoNode.gameObjectName || parts[i].decoId);
|
|
61
|
+
// parts[i].variation = partVariation;
|
|
62
|
+
this._applyMaterialPart(partVariation, parts[i].node, obj, usePbr);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
DebugUtils.log('Failed to load part: ' + e);
|
|
69
|
+
// console.error(e);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
loadVariation(assetPath, parts, instanceId, obj, usePbr = false) {
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
try {
|
|
77
|
+
const len = parts.length;
|
|
78
|
+
for (let i = 0; i < len; i++) {
|
|
79
|
+
const variations = parts[i].variations;
|
|
80
|
+
if (!variations || variations.length === 0) {
|
|
81
|
+
if (this._getLastKnownVariations(`${parts[i].nodeId}_${parts[i].node}`)) {
|
|
82
|
+
parts[i].variations = this._getLastKnownVariations(`${parts[i].nodeId}_${parts[i].node}`);
|
|
83
|
+
this._applyVariations(parts[i], obj, usePbr);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const lastKnownVariations = [];
|
|
91
|
+
const variationPromise = [];
|
|
92
|
+
for (let j = 0; j < variations.length; j++) {
|
|
93
|
+
variationPromise.push(this._threedSelectorService.loadVariation(variations[j].materialUrl ? variations[j].materialCode : (variations[j].gameObjectName || parts[i].decoId)).then((variationSettings) => __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
const newVariation = this._createVariationFromNode(variations[j]);
|
|
95
|
+
newVariation.material = yield AssetUtils.CreateMaterialFromAsset(variationSettings);
|
|
96
|
+
this.loadedAsset = variations[j].materialUrl ? variations[j].materialUrl : VariationUtils.GetUrl(assetPath, parts[i].schema, variations[j].gameObjectName || parts[i].decoId);
|
|
97
|
+
lastKnownVariations.push(newVariation);
|
|
98
|
+
})));
|
|
99
|
+
}
|
|
100
|
+
yield Promise.all(variationPromise);
|
|
101
|
+
this._setLastKnownVariations(`${parts[i].nodeId}_${parts[i].node}`, lastKnownVariations);
|
|
102
|
+
parts[i].variations = lastKnownVariations;
|
|
103
|
+
this._applyVariations(parts[i], obj, usePbr);
|
|
104
|
+
}
|
|
105
|
+
resolve();
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
DebugUtils.log('Failed to load variation: ' + e);
|
|
109
|
+
// console.error(e);
|
|
110
|
+
reject();
|
|
111
|
+
}
|
|
112
|
+
}));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
loadVariationFromLocalFile(id, file, obj) {
|
|
116
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
+
try {
|
|
118
|
+
const variationSettings = yield VariationUtils.GetVariationSettingsFromFile(id, file);
|
|
119
|
+
const material = yield AssetUtils.CreateMaterialFromAsset(variationSettings);
|
|
120
|
+
this._applyMaterial(obj, material);
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
console.error(e);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
loadVariationForMaterial(gameObject) {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
const partSettings = yield this._threedSelectorService.loadVariation(gameObject);
|
|
130
|
+
if (partSettings) {
|
|
131
|
+
const partVariation = new Variation();
|
|
132
|
+
partVariation.gameObjectName = gameObject;
|
|
133
|
+
partVariation.material = yield AssetUtils.CreateMaterialFromAsset(partSettings);
|
|
134
|
+
return this._setMeshMaterialFromVariation(gameObject, partVariation.material, true);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
loadVariationByAssetUrl(assetUrl) {
|
|
139
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
140
|
+
const fileName = assetUrl.substring(assetUrl.lastIndexOf('/') + 1);
|
|
141
|
+
const id = 'default_' + fileName.substring(0, fileName.lastIndexOf('.'));
|
|
142
|
+
const variationSettings = yield VariationUtils.LoadVariationByUrl(id, assetUrl);
|
|
143
|
+
if (variationSettings) {
|
|
144
|
+
const materialFromAsset = yield AssetUtils.CreateMaterialFromAsset(variationSettings);
|
|
145
|
+
if (materialFromAsset) {
|
|
146
|
+
return this._setMeshMaterialFromVariation(id, materialFromAsset, true);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
createVariationForMaterialPreview(compressedZip) {
|
|
152
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
153
|
+
const id = String(Math.floor(Math.random() * 10) + 1);
|
|
154
|
+
const variationSettings = yield VariationUtils.GetVariationSettingsFromFile(id, compressedZip);
|
|
155
|
+
if (variationSettings) {
|
|
156
|
+
const materialFromAsset = yield AssetUtils.CreateMaterialFromAsset(variationSettings);
|
|
157
|
+
if (materialFromAsset) {
|
|
158
|
+
return this._setMeshMaterialFromVariation(id, materialFromAsset, true);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
_applyMaterialPart(partMaterial, nodeId, obj, usePbr = false) {
|
|
164
|
+
const children = this._getChildrenFilterByProp(obj, 'selection', 'node', nodeId);
|
|
165
|
+
const len = children.length;
|
|
166
|
+
for (let i = 0; i < len; i++) {
|
|
167
|
+
const child = children[i];
|
|
168
|
+
if (child !== null && child !== undefined) {
|
|
169
|
+
child.traverse((mesh) => {
|
|
170
|
+
if (mesh instanceof Mesh && partMaterial) {
|
|
171
|
+
if (Array.isArray(mesh.material)) { // multimaterial support
|
|
172
|
+
for (let j = 0, jlen = mesh.material.length; j < jlen; j++) {
|
|
173
|
+
if (mesh.material[j].name.toLowerCase().indexOf('fixed_frame') !== -1) {
|
|
174
|
+
mesh.material[j] = this._setMeshMaterialFromVariation(mesh.material[j].name, partMaterial, usePbr);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
if (mesh.material.name.toLowerCase().indexOf('fixed_frame') !== -1) {
|
|
180
|
+
mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, partMaterial, usePbr);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
_applyVariations(part, obj, usePbr = false) {
|
|
189
|
+
const children = this._getChildrenFilterByProp(obj, 'selection', 'node', part.node);
|
|
190
|
+
const len = children.length;
|
|
191
|
+
for (let i = 0; i < len; i++) {
|
|
192
|
+
const child = children[i];
|
|
193
|
+
if (child !== null && child !== undefined) {
|
|
194
|
+
child.traverse((mesh) => {
|
|
195
|
+
if (mesh instanceof Mesh && part.variations && part.variations.length > 0 && mesh.name.toLowerCase().indexOf('c_')) {
|
|
196
|
+
//if ((mesh instanceof Mesh || mesh.constructor.name === 'Mesh') && part.variations && part.variations.length > 0 && mesh.name.toLowerCase().indexOf('c_')) {
|
|
197
|
+
for (let j = 0; j < part.variations.length; j++) {
|
|
198
|
+
const variation = part.variations[j];
|
|
199
|
+
if (variation.material) {
|
|
200
|
+
const materialToSearch = !!variation.materialId ? variation.materialId.toLowerCase() : 'default';
|
|
201
|
+
if (Array.isArray(mesh.material)) { // multimaterial support
|
|
202
|
+
for (let m = 0, mlen = mesh.material.length; m < mlen; m++) {
|
|
203
|
+
if ((variation.materialId && mesh.material[m].name.toLowerCase() === materialToSearch) ||
|
|
204
|
+
(!variation.materialId && mesh.material[m].name.toLowerCase().indexOf(materialToSearch) !== -1)) {
|
|
205
|
+
mesh.material[m] = this._setMeshMaterialFromVariation(mesh.material[m].name, variation.material, usePbr);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
if ((variation.materialId && mesh.material.name.toLowerCase() === materialToSearch) ||
|
|
211
|
+
(!variation.materialId && mesh.material.name.toLowerCase().indexOf(materialToSearch) !== -1)) {
|
|
212
|
+
mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, variation.material, usePbr);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
_applyMaterial(obj, material) {
|
|
223
|
+
obj.traverse((mesh) => {
|
|
224
|
+
if (mesh instanceof Mesh) {
|
|
225
|
+
if (Array.isArray(mesh.material)) { // multimaterial support
|
|
226
|
+
for (let m = 0, mlen = mesh.material.length; m < mlen; m++) {
|
|
227
|
+
if (mesh.material[m].name.toLowerCase().indexOf('default') !== -1) {
|
|
228
|
+
ObjectUtils.DisposeMaterial(mesh.material[m]);
|
|
229
|
+
mesh.material[m] = this._setMeshMaterialFromVariation(mesh.material[m].name, material, true);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
if (mesh.material.name.toLowerCase().indexOf('default') !== -1) {
|
|
235
|
+
ObjectUtils.DisposeMaterial(mesh.material);
|
|
236
|
+
mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, material, true);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
_setMeshMaterialFromVariation(name, material, usePbr = false) {
|
|
243
|
+
if (material.texture) {
|
|
244
|
+
material.texture.needsUpdate = true;
|
|
245
|
+
material.texture.mapping = EquirectangularReflectionMapping;
|
|
246
|
+
}
|
|
247
|
+
if (!usePbr) {
|
|
248
|
+
const newMaterial = new MeshPhongMaterial({
|
|
249
|
+
name: name,
|
|
250
|
+
shininess: material.shininess,
|
|
251
|
+
specular: material.specular,
|
|
252
|
+
map: material.texture,
|
|
253
|
+
normalMap: material.normal
|
|
254
|
+
});
|
|
255
|
+
newMaterial.color.setRGB(0.8, 0.8, 0.8);
|
|
256
|
+
newMaterial.needsUpdate = true;
|
|
257
|
+
return newMaterial;
|
|
258
|
+
}
|
|
259
|
+
if (material.sheen || material.sheenColor || material.reflectivity || material.transmission) { // TODO: Proper check for all unique physical material properties
|
|
260
|
+
const params = {
|
|
261
|
+
// side: material.side ? material.side : FrontSide,
|
|
262
|
+
name: name,
|
|
263
|
+
roughness: material.roughnessValue !== undefined && material.roughnessValue !== null ? material.roughnessValue : 1,
|
|
264
|
+
metalness: material.metalnessValue !== undefined && material.metalnessValue !== null ? material.metalnessValue : 0,
|
|
265
|
+
envMapIntensity: material.envMapIntensity ? material.envMapIntensity : 0.01,
|
|
266
|
+
clearcoatMap: material.clearcoatMap ? material.clearcoatMap : null,
|
|
267
|
+
clearcoatRoughnessMap: material.clearcoatRoughnessMap ? material.clearcoatRoughnessMap : null,
|
|
268
|
+
attenuationDistance: Infinity
|
|
269
|
+
// wireframe: true,
|
|
270
|
+
// opacity: 0.3,
|
|
271
|
+
// transparent: true,
|
|
272
|
+
};
|
|
273
|
+
if (material.displacementValue) {
|
|
274
|
+
params.displacementScale = material.displacementValue;
|
|
275
|
+
}
|
|
276
|
+
if (material.opacity) {
|
|
277
|
+
params.opacity = material.opacity;
|
|
278
|
+
}
|
|
279
|
+
if (material.transparent) {
|
|
280
|
+
params.transparent = material.transparent;
|
|
281
|
+
}
|
|
282
|
+
if (material.emissiveValue) {
|
|
283
|
+
params.emissive = material.emissiveValue;
|
|
284
|
+
}
|
|
285
|
+
if (material.emissiveIntensityValue) {
|
|
286
|
+
params.emissiveIntensity = material.emissiveIntensityValue;
|
|
287
|
+
}
|
|
288
|
+
if (material.texture) {
|
|
289
|
+
params.map = material.texture;
|
|
290
|
+
params.map.needsUpdate = true;
|
|
291
|
+
}
|
|
292
|
+
if (material.ao) {
|
|
293
|
+
params.aoMap = material.ao;
|
|
294
|
+
params.aoMap.needsUpdate = true;
|
|
295
|
+
}
|
|
296
|
+
if (material.roughness) {
|
|
297
|
+
params.roughnessMap = material.roughness;
|
|
298
|
+
params.roughnessMap.needsUpdate = true;
|
|
299
|
+
// material.roughness.magFilter = NearestFilter;
|
|
300
|
+
}
|
|
301
|
+
if (material.metalness) {
|
|
302
|
+
params.metalnessMap = material.metalness;
|
|
303
|
+
params.metalnessMap.needsUpdate = true;
|
|
304
|
+
}
|
|
305
|
+
if (material.normal) {
|
|
306
|
+
params.normalMap = material.normal;
|
|
307
|
+
params.normalMap.needsUpdate = true;
|
|
308
|
+
}
|
|
309
|
+
if (material.displacement) {
|
|
310
|
+
params.displacementMap = material.displacement;
|
|
311
|
+
params.displacementMap.needsUpdate = true;
|
|
312
|
+
}
|
|
313
|
+
if (material.emissive) {
|
|
314
|
+
params.emissiveMap = material.emissive;
|
|
315
|
+
params.emissiveMap.needsUpdate = true;
|
|
316
|
+
}
|
|
317
|
+
if (material.envMap) {
|
|
318
|
+
if (material.envMapIntensity != null || 0) {
|
|
319
|
+
params.envMap = material.envMap;
|
|
320
|
+
params.envMap.needsUpdate = true;
|
|
321
|
+
material.envMap.mapping = EquirectangularReflectionMapping;
|
|
322
|
+
material.envMap.minFilter = NearestFilter;
|
|
323
|
+
material.envMap.magFilter = NearestFilter;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
if (material.reflectivity) {
|
|
327
|
+
params.reflectivity = material.reflectivity;
|
|
328
|
+
}
|
|
329
|
+
if (material.side) {
|
|
330
|
+
params.side = material.side;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
params.side = DoubleSide;
|
|
334
|
+
}
|
|
335
|
+
const newMaterial = new MeshPhysicalMaterial(params);
|
|
336
|
+
newMaterial.color.setRGB(1, 1, 1);
|
|
337
|
+
if (material.sheen) {
|
|
338
|
+
newMaterial.sheen = material.sheen;
|
|
339
|
+
}
|
|
340
|
+
if (material.sheenColor) {
|
|
341
|
+
newMaterial.sheenColor = material.sheenColor;
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
// Add fallback for blender render
|
|
345
|
+
newMaterial.sheenColor = new Color(1, 1, 1);
|
|
346
|
+
}
|
|
347
|
+
if (material.sheenRoughness) {
|
|
348
|
+
newMaterial.sheenRoughness = material.sheenRoughness;
|
|
349
|
+
}
|
|
350
|
+
if (material.sheenColorMap) {
|
|
351
|
+
newMaterial.sheenColorMap = material.sheenColorMap;
|
|
352
|
+
newMaterial.sheenColorMap.needsUpdate = true;
|
|
353
|
+
}
|
|
354
|
+
if (material.sheenRoughnessMap) {
|
|
355
|
+
newMaterial.sheenRoughnessMap = material.sheenRoughnessMap;
|
|
356
|
+
newMaterial.sheenRoughnessMap.needsUpdate = true;
|
|
357
|
+
}
|
|
358
|
+
if (material.transmission) {
|
|
359
|
+
newMaterial.transmission = material.transmission;
|
|
360
|
+
}
|
|
361
|
+
if (material.ior !== undefined && material.ior !== null) {
|
|
362
|
+
newMaterial.ior = material.ior;
|
|
363
|
+
}
|
|
364
|
+
if (material.thickness !== undefined && material.thickness !== null) {
|
|
365
|
+
newMaterial.thickness = material.thickness;
|
|
366
|
+
}
|
|
367
|
+
if (material.specularIntensity !== undefined && material.specularIntensity !== null) {
|
|
368
|
+
newMaterial.specularIntensity = material.specularIntensity;
|
|
369
|
+
}
|
|
370
|
+
if (material.transmissionMap) {
|
|
371
|
+
newMaterial.transmissionMap = material.transmissionMap;
|
|
372
|
+
newMaterial.transmissionMap.needsUpdate = true;
|
|
373
|
+
}
|
|
374
|
+
newMaterial.needsUpdate = true;
|
|
375
|
+
return newMaterial;
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
const params = {
|
|
379
|
+
// side: material.side ? material.side : FrontSide,
|
|
380
|
+
name: name,
|
|
381
|
+
roughness: material.roughnessValue !== undefined && material.roughnessValue !== null ? material.roughnessValue : 1,
|
|
382
|
+
metalness: material.metalnessValue !== undefined && material.metalnessValue !== null ? material.metalnessValue : 0,
|
|
383
|
+
envMapIntensity: material.envMapIntensity ? material.envMapIntensity : 0.01
|
|
384
|
+
// wireframe: true,
|
|
385
|
+
// opacity: 0.3,
|
|
386
|
+
// transparent: true,
|
|
387
|
+
};
|
|
388
|
+
if (material.displacementValue) {
|
|
389
|
+
params.displacementScale = material.displacementValue;
|
|
390
|
+
}
|
|
391
|
+
if (material.opacity) {
|
|
392
|
+
params.opacity = material.opacity;
|
|
393
|
+
}
|
|
394
|
+
if (material.transparent) {
|
|
395
|
+
params.transparent = material.transparent;
|
|
396
|
+
}
|
|
397
|
+
if (material.emissiveValue) {
|
|
398
|
+
params.emissive = material.emissiveValue;
|
|
399
|
+
}
|
|
400
|
+
if (material.emissiveIntensityValue) {
|
|
401
|
+
params.emissiveIntensity = material.emissiveIntensityValue;
|
|
402
|
+
}
|
|
403
|
+
if (material.texture) {
|
|
404
|
+
params.map = material.texture;
|
|
405
|
+
params.map.needsUpdate = true;
|
|
406
|
+
}
|
|
407
|
+
if (material.ao) {
|
|
408
|
+
params.aoMap = material.ao;
|
|
409
|
+
params.aoMap.needsUpdate = true;
|
|
410
|
+
}
|
|
411
|
+
if (material.roughness) {
|
|
412
|
+
params.roughnessMap = material.roughness;
|
|
413
|
+
params.roughnessMap.needsUpdate = true;
|
|
414
|
+
// material.roughness.magFilter = NearestFilter;
|
|
415
|
+
}
|
|
416
|
+
if (material.metalness) {
|
|
417
|
+
params.metalnessMap = material.metalness;
|
|
418
|
+
params.metalnessMap.needsUpdate = true;
|
|
419
|
+
}
|
|
420
|
+
if (material.normal) {
|
|
421
|
+
params.normalMap = material.normal;
|
|
422
|
+
params.normalMap.needsUpdate = true;
|
|
423
|
+
}
|
|
424
|
+
if (material.displacement) {
|
|
425
|
+
params.displacementMap = material.displacement;
|
|
426
|
+
params.displacementMap.needsUpdate = true;
|
|
427
|
+
}
|
|
428
|
+
if (material.emissive) {
|
|
429
|
+
params.emissiveMap = material.emissive;
|
|
430
|
+
params.emissiveMap.needsUpdate = true;
|
|
431
|
+
}
|
|
432
|
+
if (material.envMap) {
|
|
433
|
+
if (material.envMapIntensity != null || 0) {
|
|
434
|
+
params.envMap = material.envMap;
|
|
435
|
+
params.envMap.needsUpdate = true;
|
|
436
|
+
material.envMap.mapping = EquirectangularReflectionMapping;
|
|
437
|
+
material.envMap.minFilter = NearestFilter;
|
|
438
|
+
material.envMap.magFilter = NearestFilter;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
if (material.side) {
|
|
442
|
+
params.side = material.side;
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
params.side = DoubleSide;
|
|
446
|
+
}
|
|
447
|
+
const newMaterial = new MeshStandardMaterial(params);
|
|
448
|
+
newMaterial.color.setRGB(1, 1, 1);
|
|
449
|
+
newMaterial.needsUpdate = true;
|
|
450
|
+
return newMaterial;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
_setLastKnownVariations(id, variation) {
|
|
454
|
+
this._lastKnownVariations.set(id, variation);
|
|
455
|
+
}
|
|
456
|
+
_getLastKnownVariations(id) {
|
|
457
|
+
if (this._lastKnownVariations.has(id)) {
|
|
458
|
+
return this._lastKnownVariations.get(id);
|
|
459
|
+
}
|
|
460
|
+
return null;
|
|
461
|
+
}
|
|
462
|
+
_getChildrenFilterByProp(obj, userDataObjectProp, prop, value) {
|
|
463
|
+
return obj.children.filter((child) => {
|
|
464
|
+
return child.userData &&
|
|
465
|
+
child.userData.hasOwnProperty(userDataObjectProp) &&
|
|
466
|
+
child.userData[userDataObjectProp].hasOwnProperty(prop) &&
|
|
467
|
+
child.userData[userDataObjectProp][prop] === value;
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
_createVariationFromNode(node) {
|
|
471
|
+
const newVariation = new Variation();
|
|
472
|
+
newVariation.decoId = node instanceof Variation ? node.decoId : parseFloat(node.id);
|
|
473
|
+
newVariation.node = node instanceof Variation ? node.node : node.nodeId;
|
|
474
|
+
newVariation.brandId = node.brandId;
|
|
475
|
+
newVariation.optionText = node.optionText;
|
|
476
|
+
newVariation.gameObjectName = node.gameObjectName;
|
|
477
|
+
newVariation.supplierArticleNr = node.supplierArticleNr;
|
|
478
|
+
newVariation.materialId = node.materialId;
|
|
479
|
+
return newVariation;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
VariationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: VariationService, deps: [{ token: i1.ThreedselectorService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
483
|
+
VariationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: VariationService, providedIn: 'root' });
|
|
484
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: VariationService, decorators: [{
|
|
485
|
+
type: Injectable,
|
|
486
|
+
args: [{
|
|
487
|
+
providedIn: 'root'
|
|
488
|
+
}]
|
|
489
|
+
}], ctorParameters: function () { return [{ type: i1.ThreedselectorService }]; } });
|
|
490
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25maWd1cmF0b3Ivc3JjL2xpYi9zZXJ2aWNlcy92YXJpYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFFdEYsT0FBTyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsZ0NBQWdDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFrQyxvQkFBb0IsRUFBa0MsYUFBYSxFQUFXLE1BQU0sT0FBTyxDQUFDO0FBRXhPLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFbEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7OztBQU1oRCxNQUFNLE9BQU8sZ0JBQWdCO0lBTTNCLFlBQ1Usc0JBQTZDO1FBQTdDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFIL0MseUJBQW9CLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7SUFLbkUsQ0FBQztJQUVNLFVBQVU7UUFDZixNQUFNLFlBQVksR0FBa0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNuRixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDbEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFF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LFVBQVUsR0FBSSxJQUFZLENBQUMsVUFBVSxDQUFDO1FBQ25ELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7OzhHQTVkVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQUhmLE1BQU07NEZBR1AsZ0JBQWdCO2tCQUo1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RGVjb05vZGVUeXBlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vZGVjby1ub2RlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7RGVjb05vZGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlJztcclxuaW1wb3J0IHtDb2xvciwgRG91YmxlU2lkZSwgRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmcsIE1lc2gsIE1lc2hQaG9uZ01hdGVyaWFsLCBNZXNoUGh5c2ljYWxNYXRlcmlhbCwgTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzLCBNZXNoU3RhbmRhcmRNYXRlcmlhbCwgTWVzaFN0YW5kYXJkTWF0ZXJpYWxQYXJhbWV0ZXJzLCBOZWFyZXN0RmlsdGVyLCBPYmplY3QzRH0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1RocmVlZHNlbGVjdG9yU2VydmljZX0gZnJvbSAnLi90aHJlZWRzZWxlY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtBc3NldFV0aWxzfSBmcm9tICcuLi91dGlscy9hc3NldC51dGlscyc7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gJy4uL3V0aWxzL29iamVjdC51dGlscyc7XHJcbmltcG9ydCB7VmFyaWF0aW9uU2V0dGluZ3N9IGZyb20gJy4uL21vZGVsL3ZhcmlhdGlvbi1zZXR0aW5ncyc7XHJcbmltcG9ydCB7VmFyaWF0aW9uVXRpbHN9IGZyb20gJy4uL3V0aWxzL3ZhcmlhdGlvbi11dGlscyc7XHJcbmltcG9ydCB7TWF0ZXJpYWx9IGZyb20gJy4uL21vZGVsL21hdGVyaWFsJztcclxuaW1wb3J0IHtWYXJpYXRpb259IGZyb20gJy4uL21vZGVsL3ZhcmlhdGlvbic7XHJcbmltcG9ydCB7RGVidWdVdGlsc30gZnJvbSAnLi4vdXRpbHMvZGVidWcudXRpbHMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFZhcmlhdGlvblNlcnZpY2Uge1xyXG5cclxuICBwdWJsaWMgbG9hZGVkQXNzZXQ6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBfbGFzdEtub3duVmFyaWF0aW9uczogTWFwPHN0cmluZywgVmFyaWF0aW9uW10+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3RocmVlZFNlbGVjdG9yU2VydmljZTogVGhyZWVkc2VsZWN0b3JTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZhcmlhdGlvbk1hcDogVmFyaWF0aW9uW11bXSA9IEFycmF5LmZyb20odGhpcy5fbGFzdEtub3duVmFyaWF0aW9ucy52YWx1ZXMoKSk7XHJcbiAgICB2YXJpYXRpb25NYXAuZm9yRWFjaCgodmFyaWF0aW9ucykgPT4ge1xyXG4gICAgICB2YXJpYXRpb25zLmZvckVhY2goKHZhcmlhdGlvbikgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwudGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC50ZXh0dXJlLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLm5vcm1hbCkge1xyXG4gICAgICAgICAgICAgIHZhcmlhdGlvbi5tYXRlcmlhbC5ub3JtYWwuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24ubWF0ZXJpYWwubWV0YWxuZXNzKSB7XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLm1ldGFsbmVzcy5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbi5tYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICAgICAgICB2YXJpYXRpb24ubWF0ZXJpYWwucm91Z2huZXNzLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsLmFvKSB7XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9uLm1hdGVyaWFsLmFvLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIERlYnVnVXRpbHMubG9nKCdGYWlsZWQgdG8gZGlzcG9zZSBtYXRlcmlhbDogJyArIGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkUGFydChhc3NldFBhdGg6IHN0cmluZywgcGFydHM6IGFueVtdLCBpbnN0YW5jZUlkOiBzdHJpbmcsIG9iajogT2JqZWN0M0QsIHVzZVBicjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBsZW46IG51bWJlciA9IHBhcnRzLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChwYXJ0c1tpXS5kZWNvTm9kZSAmJiBwYXJ0c1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSAmJiBwYXJ0c1tpXS5kZWNvTm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuUGFydCkge1xyXG4gICAgICAgICAgbGV0IHBhcnRTZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3M7XHJcbiAgICAgICAgICBwYXJ0U2V0dGluZ3MgPSBhd2FpdCB0aGlzLl90aHJlZWRTZWxlY3RvclNlcnZpY2UubG9hZFZhcmlhdGlvbihcclxuICAgICAgICAgICAgcGFydHNbaV0uZGVjb05vZGUubWF0ZXJpYWxVcmwgPyBwYXJ0c1tpXS5kZWNvTm9kZS5tYXRlcmlhbENvZGUgOiAocGFydHNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgfHwgcGFydHNbaV0uZGVjb0lkKSk7XHJcblxyXG4gICAgICAgICAgaWYgKHBhcnRTZXR0aW5ncykge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0VmFyaWF0aW9uOiBWYXJpYXRpb24gPSBuZXcgVmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAgIHBhcnRWYXJpYXRpb24uZGVjb0lkID0gcGFyc2VGbG9hdChwYXJ0c1tpXS5kZWNvTm9kZS5pZCk7XHJcbiAgICAgICAgICAgIHBhcnRWYXJpYXRpb24uYnJhbmRJZCA9IHBhcnRzW2ldLmRlY29Ob2RlLmJyYW5kSWQ7XHJcbiAgICAgICAgICAgIHBhcnRWYXJpYXRpb24uZ2FtZU9iamVjdE5hbWUgPSBwYXJ0c1tpXS5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgICAgcGFydFZhcmlhdGlvbi5tYXRlcmlhbCA9IGF3YWl0IEFzc2V0VXRpbHMuQ3JlYXRlTWF0ZXJpYWxGcm9tQXNzZXQocGFydFNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWRBc3NldCA9IFZhcmlhdGlvblV0aWxzLkdldFVybChhc3NldFBhdGgsIHBhcnRzW2ldLnNjaGVtYSwgcGFydHNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgfHwgcGFydHNbaV0uZGVjb0lkKTtcclxuICAgICAgICAgICAgLy8gcGFydHNbaV0udmFyaWF0aW9uID0gcGFydFZhcmlhdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5fYXBwbHlNYXRlcmlhbFBhcnQocGFydFZhcmlhdGlvbiwgcGFydHNbaV0ubm9kZSwgb2JqLCB1c2VQYnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBEZWJ1Z1V0aWxzLmxvZygnRmFpbGVkIHRvIGxvYWQgcGFydDogJyArIGUpO1xyXG4gICAgICAvLyBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWRWYXJpYXRpb24oYXNzZXRQYXRoOiBzdHJpbmcsIHBhcnRzOiBhbnlbXSwgaW5zdGFuY2VJZDogc3RyaW5nLCBvYmo6IE9iamVjdDNELCB1c2VQYnI6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHBhcnRzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCB2YXJpYXRpb25zOiBEZWNvTm9kZVtdID0gcGFydHNbaV0udmFyaWF0aW9ucztcclxuICAgICAgICAgIGlmICghdmFyaWF0aW9ucyB8fCB2YXJpYXRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZ2V0TGFzdEtub3duVmFyaWF0aW9ucyhgJHtwYXJ0c1tpXS5ub2RlSWR9XyR7cGFydHNbaV0ubm9kZX1gKSkge1xyXG4gICAgICAgICAgICAgIHBhcnRzW2ldLnZhcmlhdGlvbnMgPSB0aGlzLl9nZXRMYXN0S25vd25WYXJpYXRpb25zKGAke3BhcnRzW2ldLm5vZGVJZH1fJHtwYXJ0c1tpXS5ub2RlfWApO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2FwcGx5VmFyaWF0aW9ucyhwYXJ0c1tpXSwgb2JqLCB1c2VQYnIpO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBsYXN0S25vd25WYXJpYXRpb25zOiBWYXJpYXRpb25bXSA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgdmFyaWF0aW9uUHJvbWlzZTogUHJvbWlzZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFyaWF0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICB2YXJpYXRpb25Qcm9taXNlLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5fdGhyZWVkU2VsZWN0b3JTZXJ2aWNlLmxvYWRWYXJpYXRpb24oXHJcbiAgICAgICAgICAgICAgICB2YXJpYXRpb25zW2pdLm1hdGVyaWFsVXJsID8gdmFyaWF0aW9uc1tqXS5tYXRlcmlhbENvZGUgOiAodmFyaWF0aW9uc1tqXS5nYW1lT2JqZWN0TmFtZSB8fCBwYXJ0c1tpXS5kZWNvSWQpKS50aGVuKGFzeW5jICh2YXJpYXRpb25TZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhcmlhdGlvbjogVmFyaWF0aW9uID0gdGhpcy5fY3JlYXRlVmFyaWF0aW9uRnJvbU5vZGUodmFyaWF0aW9uc1tqXSk7XHJcbiAgICAgICAgICAgICAgICBuZXdWYXJpYXRpb24ubWF0ZXJpYWwgPSBhd2FpdCBBc3NldFV0aWxzLkNyZWF0ZU1hdGVyaWFsRnJvbUFzc2V0KHZhcmlhdGlvblNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkQXNzZXQgPSB2YXJpYXRpb25zW2pdLm1hdGVyaWFsVXJsID8gdmFyaWF0aW9uc1tqXS5tYXRlcmlhbFVybCA6IFZhcmlhdGlvblV0aWxzLkdldFVybChhc3NldFBhdGgsIHBhcnRzW2ldLnNjaGVtYSwgdmFyaWF0aW9uc1tqXS5nYW1lT2JqZWN0TmFtZSB8fCBwYXJ0c1tpXS5kZWNvSWQpO1xyXG4gICAgICAgICAgICAgICAgbGFzdEtub3duVmFyaWF0aW9ucy5wdXNoKG5ld1ZhcmlhdGlvbik7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHZhcmlhdGlvblByb21pc2UpO1xyXG4gICAgICAgICAgdGhpcy5fc2V0TGFzdEtub3duVmFyaWF0aW9ucyhgJHtwYXJ0c1tpXS5ub2RlSWR9XyR7cGFydHNbaV0ubm9kZX1gLCBsYXN0S25vd25WYXJpYXRpb25zKTtcclxuICAgICAgICAgIHBhcnRzW2ldLnZhcmlhdGlvbnMgPSBsYXN0S25vd25WYXJpYXRpb25zO1xyXG4gICAgICAgICAgdGhpcy5fYXBwbHlWYXJpYXRpb25zKHBhcnRzW2ldLCBvYmosIHVzZVBicik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIERlYnVnVXRpbHMubG9nKCdGYWlsZWQgdG8gbG9hZCB2YXJpYXRpb246ICcgKyBlKTtcclxuICAgICAgICAvLyBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgIHJlamVjdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkVmFyaWF0aW9uRnJvbUxvY2FsRmlsZShpZDogc3RyaW5nLCBmaWxlOiBhbnksIG9iajogT2JqZWN0M0QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHZhcmlhdGlvblNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncyA9IGF3YWl0IFZhcmlhdGlvblV0aWxzLkdldFZhcmlhdGlvblNldHRpbmdzRnJvbUZpbGUoaWQsIGZpbGUpO1xyXG4gICAgICBjb25zdCBtYXRlcmlhbDogTWF0ZXJpYWwgPSBhd2FpdCBBc3NldFV0aWxzLkNyZWF0ZU1hdGVyaWFsRnJvbUFzc2V0KHZhcmlhdGlvblNldHRpbmdzKTtcclxuICAgICAgdGhpcy5fYXBwbHlNYXRlcmlhbChvYmosIG1hdGVyaWFsKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkVmFyaWF0aW9uRm9yTWF0ZXJpYWwoZ2FtZU9iamVjdDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IHBhcnRTZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MgPSBhd2FpdCB0aGlzLl90aHJlZWRTZWxlY3RvclNlcnZpY2UubG9hZFZhcmlhdGlvbihnYW1lT2JqZWN0KTtcclxuICAgIGlmIChwYXJ0U2V0dGluZ3MpIHtcclxuICAgICAgY29uc3QgcGFydFZhcmlhdGlvbjogVmFyaWF0aW9uID0gbmV3IFZhcmlhdGlvbigpO1xyXG4gICAgICBwYXJ0VmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lID0gZ2FtZU9iamVjdDtcclxuICAgICAgcGFydFZhcmlhdGlvbi5tYXRlcmlhbCA9IGF3YWl0IEFzc2V0VXRpbHMuQ3JlYXRlTWF0ZXJpYWxGcm9tQXNzZXQocGFydFNldHRpbmdzKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3NldE1lc2hNYXRlcmlhbEZyb21WYXJpYXRpb24oZ2FtZU9iamVjdCwgcGFydFZhcmlhdGlvbi5tYXRlcmlhbCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZFZhcmlhdGlvbkJ5QXNzZXRVcmwoYXNzZXRVcmw6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gYXNzZXRVcmwuc3Vic3RyaW5nKGFzc2V0VXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcclxuICAgIGNvbnN0IGlkOiBzdHJpbmcgPSAnZGVmYXVsdF8nICsgZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykpO1xyXG4gICAgY29uc3QgdmFyaWF0aW9uU2V0dGluZ3M6IFZhcmlhdGlvblNldHRpbmdzID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuTG9hZFZhcmlhdGlvbkJ5VXJsKGlkLCBhc3NldFVybCk7XHJcbiAgICBpZiAodmFyaWF0aW9uU2V0dGluZ3MpIHtcclxuICAgICAgY29uc3QgbWF0ZXJpYWxGcm9tQXNzZXQ6IE1hdGVyaWFsID0gYXdhaXQgQXNzZXRVdGlscy5DcmVhdGVNYXRlcmlhbEZyb21Bc3NldCh2YXJpYXRpb25TZXR0aW5ncyk7XHJcbiAgICAgIGlmIChtYXRlcmlhbEZyb21Bc3NldCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKGlkLCBtYXRlcmlhbEZyb21Bc3NldCwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVWYXJpYXRpb25Gb3JNYXRlcmlhbFByZXZpZXcoY29tcHJlc3NlZFppcDogQmxvYik6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBpZDogc3RyaW5nID0gU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKSArIDEpO1xyXG4gICAgY29uc3QgdmFyaWF0aW9uU2V0dGluZ3M6IFZhcmlhdGlvblNldHRpbmdzID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuR2V0VmFyaWF0aW9uU2V0dGluZ3NGcm9tRmlsZShpZCwgY29tcHJlc3NlZFppcCk7XHJcbiAgICBpZiAodmFyaWF0aW9uU2V0dGluZ3MpIHtcclxuICAgICAgY29uc3QgbWF0ZXJpYWxGcm9tQXNzZXQ6IE1hdGVyaWFsID0gYXdhaXQgQXNzZXRVdGlscy5DcmVhdGVNYXRlcmlhbEZyb21Bc3NldCh2YXJpYXRpb25TZXR0aW5ncyk7XHJcbiAgICAgIGlmIChtYXRlcmlhbEZyb21Bc3NldCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKGlkLCBtYXRlcmlhbEZyb21Bc3NldCwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FwcGx5TWF0ZXJpYWxQYXJ0KHBhcnRNYXRlcmlhbDogYW55LCBub2RlSWQ6IGFueSwgb2JqOiBPYmplY3QzRCwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Q2hpbGRyZW5GaWx0ZXJCeVByb3Aob2JqLCAnc2VsZWN0aW9uJywgJ25vZGUnLCBub2RlSWQpO1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmIGNoaWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjaGlsZC50cmF2ZXJzZSgobWVzaCkgPT4ge1xyXG4gICAgICAgICAgaWYgKG1lc2ggaW5zdGFuY2VvZiBNZXNoICYmIHBhcnRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtZXNoLm1hdGVyaWFsKSkgeyAvLyBtdWx0aW1hdGVyaWFsIHN1cHBvcnRcclxuICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMCwgamxlbjogbnVtYmVyID0gbWVzaC5tYXRlcmlhbC5sZW5ndGg7IGogPCBqbGVuOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsW2pdLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXhlZF9mcmFtZScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsW2pdID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsW2pdLm5hbWUsIHBhcnRNYXRlcmlhbCwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWwubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpeGVkX2ZyYW1lJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsLm5hbWUsIHBhcnRNYXRlcmlhbCwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXBwbHlWYXJpYXRpb25zKHBhcnQ6IGFueSwgb2JqOiBPYmplY3QzRCwgdXNlUGJyOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Q2hpbGRyZW5GaWx0ZXJCeVByb3Aob2JqLCAnc2VsZWN0aW9uJywgJ25vZGUnLCBwYXJ0Lm5vZGUpO1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgaWYgKGNoaWxkICE9PSBudWxsICYmIGNoaWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjaGlsZC50cmF2ZXJzZSgobWVzaDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAobWVzaCBpbnN0YW5jZW9mIE1lc2ggJiYgcGFydC52YXJpYXRpb25zICYmIHBhcnQudmFyaWF0aW9ucy5sZW5ndGggPiAwICYmIG1lc2gubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2NfJykpIHtcclxuICAgICAgICAgIC8vaWYgKChtZXNoIGluc3RhbmNlb2YgTWVzaCB8fCBtZXNoLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdNZXNoJykgJiYgcGFydC52YXJpYXRpb25zICYmIHBhcnQudmFyaWF0aW9ucy5sZW5ndGggPiAwICYmIG1lc2gubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2NfJykpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJ0LnZhcmlhdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCB2YXJpYXRpb246IFZhcmlhdGlvbiA9IHBhcnQudmFyaWF0aW9uc1tqXTtcclxuICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRlcmlhbFRvU2VhcmNoOiBzdHJpbmcgPSAhIXZhcmlhdGlvbi5tYXRlcmlhbElkID8gdmFyaWF0aW9uLm1hdGVyaWFsSWQudG9Mb3dlckNhc2UoKSA6ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc2gubWF0ZXJpYWwpKSB7IC8vIG11bHRpbWF0ZXJpYWwgc3VwcG9ydFxyXG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBtID0gMCwgbWxlbjogbnVtYmVyID0gbWVzaC5tYXRlcmlhbC5sZW5ndGg7IG0gPCBtbGVuOyBtKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHZhcmlhdGlvbi5tYXRlcmlhbElkICYmIG1lc2gubWF0ZXJpYWxbbV0ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBtYXRlcmlhbFRvU2VhcmNoKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgKCF2YXJpYXRpb24ubWF0ZXJpYWxJZCAmJiBtZXNoLm1hdGVyaWFsW21dLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKG1hdGVyaWFsVG9TZWFyY2gpICE9PSAtMSkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsW21dID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsW21dLm5hbWUsIHZhcmlhdGlvbi5tYXRlcmlhbCwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgodmFyaWF0aW9uLm1hdGVyaWFsSWQgJiYgbWVzaC5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IG1hdGVyaWFsVG9TZWFyY2gpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKCF2YXJpYXRpb24ubWF0ZXJpYWxJZCAmJiBtZXNoLm1hdGVyaWFsLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKG1hdGVyaWFsVG9TZWFyY2gpICE9PSAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsID0gdGhpcy5fc2V0TWVzaE1hdGVyaWFsRnJvbVZhcmlhdGlvbihtZXNoLm1hdGVyaWFsLm5hbWUsIHZhcmlhdGlvbi5tYXRlcmlhbCwgdXNlUGJyKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcHBseU1hdGVyaWFsKG9iajogT2JqZWN0M0QsIG1hdGVyaWFsOiBNYXRlcmlhbCk6IHZvaWQge1xyXG4gICAgb2JqLnRyYXZlcnNlKChtZXNoKSA9PiB7XHJcbiAgICAgIGlmIChtZXNoIGluc3RhbmNlb2YgTWVzaCkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1lc2gubWF0ZXJpYWwpKSB7IC8vIG11bHRpbWF0ZXJpYWwgc3VwcG9ydFxyXG4gICAgICAgICAgZm9yIChsZXQgbSA9IDAsIG1sZW46IG51bWJlciA9IG1lc2gubWF0ZXJpYWwubGVuZ3RoOyBtIDwgbWxlbjsgbSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsW21dLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdkZWZhdWx0JykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU1hdGVyaWFsKG1lc2gubWF0ZXJpYWxbbV0pO1xyXG4gICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWxbbV0gPSB0aGlzLl9zZXRNZXNoTWF0ZXJpYWxGcm9tVmFyaWF0aW9uKG1lc2gubWF0ZXJpYWxbbV0ubmFtZSwgbWF0ZXJpYWwsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdkZWZhdWx0JykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VNYXRlcmlhbChtZXNoLm1hdGVyaWFsKTtcclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbCA9IHRoaXMuX3NldE1lc2hNYXRlcmlhbEZyb21WYXJpYXRpb24obWVzaC5tYXRlcmlhbC5uYW1lLCBtYXRlcmlhbCwgdHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldE1lc2hNYXRlcmlhbEZyb21WYXJpYXRpb24obmFtZTogc3RyaW5nLCBtYXRlcmlhbDogTWF0ZXJpYWwsIHVzZVBicjogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgIGlmIChtYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgIG1hdGVyaWFsLnRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICBtYXRlcmlhbC50ZXh0dXJlLm1hcHBpbmcgPSBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZztcclxuICAgIH1cclxuICAgIGlmICghdXNlUGJyKSB7XHJcbiAgICAgIGNvbnN0IG5ld01hdGVyaWFsOiBNZXNoUGhvbmdNYXRlcmlhbCA9IG5ldyBNZXNoUGhvbmdNYXRlcmlhbCh7XHJcbiAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICBzaGluaW5lc3M6IG1hdGVyaWFsLnNoaW5pbmVzcyxcclxuICAgICAgICBzcGVjdWxhcjogbWF0ZXJpYWwuc3BlY3VsYXIsXHJcbiAgICAgICAgbWFwOiBtYXRlcmlhbC50ZXh0dXJlLFxyXG4gICAgICAgIG5vcm1hbE1hcDogbWF0ZXJpYWwubm9ybWFsXHJcbiAgICAgIH0pO1xyXG4gICAgICBuZXdNYXRlcmlhbC5jb2xvci5zZXRSR0IoMC44LCAwLjgsIDAuOCk7XHJcbiAgICAgIG5ld01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIG5ld01hdGVyaWFsO1xyXG4gICAgfVxyXG4gICAgaWYgKG1hdGVyaWFsLnNoZWVuIHx8IG1hdGVyaWFsLnNoZWVuQ29sb3IgfHwgbWF0ZXJpYWwucmVmbGVjdGl2aXR5IHx8IG1hdGVyaWFsLnRyYW5zbWlzc2lvbikgeyAvLyBUT0RPOiBQcm9wZXIgY2hlY2sgZm9yIGFsbCB1bmlxdWUgcGh5c2ljYWwgbWF0ZXJpYWwgcHJvcGVydGllc1xyXG4gICAgICBjb25zdCBwYXJhbXM6IE1lc2hQaHlzaWNhbE1hdGVyaWFsUGFyYW1ldGVycyA9IHtcclxuICAgICAgICAvLyBzaWRlOiBtYXRlcmlhbC5zaWRlID8gbWF0ZXJpYWwuc2lkZSA6IEZyb250U2lkZSxcclxuICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgIHJvdWdobmVzczogbWF0ZXJpYWwucm91Z2huZXNzVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBtYXRlcmlhbC5yb3VnaG5lc3NWYWx1ZSAhPT0gbnVsbCA/IG1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlIDogMSxcclxuICAgICAgICBtZXRhbG5lc3M6IG1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwubWV0YWxuZXNzVmFsdWUgIT09IG51bGwgPyBtYXRlcmlhbC5tZXRhbG5lc3NWYWx1ZSA6IDAsXHJcbiAgICAgICAgZW52TWFwSW50ZW5zaXR5OiBtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgPyBtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgOiAwLjAxLFxyXG4gICAgICAgIGNsZWFyY29hdE1hcDogbWF0ZXJpYWwuY2xlYXJjb2F0TWFwID8gbWF0ZXJpYWwuY2xlYXJjb2F0TWFwIDogbnVsbCxcclxuICAgICAgICBjbGVhcmNvYXRSb3VnaG5lc3NNYXA6IG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCA/IG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzc01hcCA6IG51bGwsXHJcbiAgICAgICAgYXR0ZW51YXRpb25EaXN0YW5jZTogSW5maW5pdHlcclxuICAgICAgICAvLyB3aXJlZnJhbWU6IHRydWUsXHJcbiAgICAgICAgLy8gb3BhY2l0eTogMC4zLFxyXG4gICAgICAgIC8vIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAobWF0ZXJpYWwuZGlzcGxhY2VtZW50VmFsdWUpIHtcclxuICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50U2NhbGUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwub3BhY2l0eSkge1xyXG4gICAgICAgIHBhcmFtcy5vcGFjaXR5ID0gbWF0ZXJpYWwub3BhY2l0eTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcclxuICAgICAgICBwYXJhbXMudHJhbnNwYXJlbnQgPSBtYXRlcmlhbC50cmFuc3BhcmVudDtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwuZW1pc3NpdmVWYWx1ZSkge1xyXG4gICAgICAgIHBhcmFtcy5lbWlzc2l2ZSA9IG1hdGVyaWFsLmVtaXNzaXZlVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1hdGVyaWFsLmVtaXNzaXZlSW50ZW5zaXR5VmFsdWUpIHtcclxuICAgICAgICBwYXJhbXMuZW1pc3NpdmVJbnRlbnNpdHkgPSBtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eVZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC50ZXh0dXJlKSB7XHJcbiAgICAgICAgcGFyYW1zLm1hcCA9IG1hdGVyaWFsLnRleHR1cmU7XHJcbiAgICAgICAgcGFyYW1zLm1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1hdGVyaWFsLmFvKSB7XHJcbiAgICAgICAgcGFyYW1zLmFvTWFwID0gbWF0ZXJpYWwuYW87XHJcbiAgICAgICAgcGFyYW1zLmFvTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwucm91Z2huZXNzKSB7XHJcbiAgICAgICAgcGFyYW1zLnJvdWdobmVzc01hcCA9IG1hdGVyaWFsLnJvdWdobmVzcztcclxuICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAvLyBtYXRlcmlhbC5yb3VnaG5lc3MubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwubWV0YWxuZXNzKSB7XHJcbiAgICAgICAgcGFyYW1zLm1ldGFsbmVzc01hcCA9IG1hdGVyaWFsLm1ldGFsbmVzcztcclxuICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwubm9ybWFsKSB7XHJcbiAgICAgICAgcGFyYW1zLm5vcm1hbE1hcCA9IG1hdGVyaWFsLm5vcm1hbDtcclxuICAgICAgICBwYXJhbXMubm9ybWFsTWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwuZGlzcGxhY2VtZW50KSB7XHJcbiAgICAgICAgcGFyYW1zLmRpc3BsYWNlbWVudE1hcCA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudDtcclxuICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50TWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwuZW1pc3NpdmUpIHtcclxuICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAgPSBtYXRlcmlhbC5lbWlzc2l2ZTtcclxuICAgICAgICBwYXJhbXMuZW1pc3NpdmVNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXApIHtcclxuICAgICAgICBpZiAobWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5ICE9IG51bGwgfHwgMCkge1xyXG4gICAgICAgICAgcGFyYW1zLmVudk1hcCA9IG1hdGVyaWFsLmVudk1hcDtcclxuICAgICAgICAgIHBhcmFtcy5lbnZNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgbWF0ZXJpYWwuZW52TWFwLm1hcHBpbmcgPSBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZztcclxuICAgICAgICAgIG1hdGVyaWFsLmVudk1hcC5taW5GaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xyXG4gICAgICAgICAgbWF0ZXJpYWwuZW52TWFwLm1hZ0ZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5yZWZsZWN0aXZpdHkpIHtcclxuICAgICAgICBwYXJhbXMucmVmbGVjdGl2aXR5ID0gbWF0ZXJpYWwucmVmbGVjdGl2aXR5O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5zaWRlKSB7XHJcbiAgICAgICAgcGFyYW1zLnNpZGUgPSBtYXRlcmlhbC5zaWRlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcmFtcy5zaWRlID0gRG91YmxlU2lkZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbmV3TWF0ZXJpYWw6IE1lc2hQaHlzaWNhbE1hdGVyaWFsID0gbmV3IE1lc2hQaHlzaWNhbE1hdGVyaWFsKHBhcmFtcyk7XHJcbiAgICAgIG5ld01hdGVyaWFsLmNvbG9yLnNldFJHQigxLCAxLCAxKTtcclxuICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuKSB7XHJcbiAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW4gPSBtYXRlcmlhbC5zaGVlbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuQ29sb3IpIHtcclxuICAgICAgICBuZXdNYXRlcmlhbC5zaGVlbkNvbG9yID0gbWF0ZXJpYWwuc2hlZW5Db2xvcjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBBZGQgZmFsbGJhY2sgZm9yIGJsZW5kZXIgcmVuZGVyXHJcbiAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW5Db2xvciA9IG5ldyBDb2xvcigxLCAxLCAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzKSB7XHJcbiAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBtYXRlcmlhbC5zaGVlblJvdWdobmVzcztcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwuc2hlZW5Db2xvck1hcCkge1xyXG4gICAgICAgIG5ld01hdGVyaWFsLnNoZWVuQ29sb3JNYXAgPSBtYXRlcmlhbC5zaGVlbkNvbG9yTWFwO1xyXG4gICAgICAgIG5ld01hdGVyaWFsLnNoZWVuQ29sb3JNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5zaGVlblJvdWdobmVzc01hcCkge1xyXG4gICAgICAgIG5ld01hdGVyaWFsLnNoZWVuUm91Z2huZXNzTWFwID0gbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXA7XHJcbiAgICAgICAgbmV3TWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3NNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC50cmFuc21pc3Npb24pIHtcclxuICAgICAgICBuZXdNYXRlcmlhbC50cmFuc21pc3Npb24gPSBtYXRlcmlhbC50cmFuc21pc3Npb247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1hdGVyaWFsLmlvciAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLmlvciAhPT0gbnVsbCkge1xyXG4gICAgICAgIG5ld01hdGVyaWFsLmlvciA9IG1hdGVyaWFsLmlvcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwudGhpY2tuZXNzICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwudGhpY2tuZXNzICE9PSBudWxsKSB7XHJcbiAgICAgICAgbmV3TWF0ZXJpYWwudGhpY2tuZXNzID0gbWF0ZXJpYWwudGhpY2tuZXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eSAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLnNwZWN1bGFySW50ZW5zaXR5ICE9PSBudWxsKSB7XHJcbiAgICAgICAgbmV3TWF0ZXJpYWwuc3BlY3VsYXJJbnRlbnNpdHkgPSBtYXRlcmlhbC5zcGVjdWxhckludGVuc2l0eTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwKSB7XHJcbiAgICAgICAgbmV3TWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwID0gbWF0ZXJpYWwudHJhbnNtaXNzaW9uTWFwO1xyXG4gICAgICAgIG5ld01hdGVyaWFsLnRyYW5zbWlzc2lvbk1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5ld01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIG5ld01hdGVyaWFsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGFyYW1zOiBNZXNoU3RhbmRhcmRNYXRlcmlhbFBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgLy8gc2lkZTogbWF0ZXJpYWwuc2lkZSA/IG1hdGVyaWFsLnNpZGUgOiBGcm9udFNpZGUsXHJcbiAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICByb3VnaG5lc3M6IG1hdGVyaWFsLnJvdWdobmVzc1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWF0ZXJpYWwucm91Z2huZXNzVmFsdWUgIT09IG51bGwgPyBtYXRlcmlhbC5yb3VnaG5lc3NWYWx1ZSA6IDEsXHJcbiAgICAgICAgbWV0YWxuZXNzOiBtYXRlcmlhbC5tZXRhbG5lc3NWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG1hdGVyaWFsLm1ldGFsbmVzc1ZhbHVlICE9PSBudWxsID8gbWF0ZXJpYWwubWV0YWxuZXNzVmFsdWUgOiAwLFxyXG4gICAgICAgIGVudk1hcEludGVuc2l0eTogbWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5ID8gbWF0ZXJpYWwuZW52TWFwSW50ZW5zaXR5IDogMC4wMVxyXG4gICAgICAgIC8vIHdpcmVmcmFtZTogdHJ1ZSxcclxuICAgICAgICAvLyBvcGFjaXR5OiAwLjMsXHJcbiAgICAgICAgLy8gdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChtYXRlcmlhbC5kaXNwbGFjZW1lbnRWYWx1ZSkge1xyXG4gICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRTY2FsZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5vcGFjaXR5KSB7XHJcbiAgICAgICAgcGFyYW1zLm9wYWNpdHkgPSBtYXRlcmlhbC5vcGFjaXR5O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCkge1xyXG4gICAgICAgIHBhcmFtcy50cmFuc3BhcmVudCA9IG1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgICAgcGFyYW1zLmVtaXNzaXZlID0gbWF0ZXJpYWwuZW1pc3NpdmVWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwuZW1pc3NpdmVJbnRlbnNpdHlWYWx1ZSkge1xyXG4gICAgICAgIHBhcmFtcy5lbWlzc2l2ZUludGVuc2l0eSA9IG1hdGVyaWFsLmVtaXNzaXZlSW50ZW5zaXR5VmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1hdGVyaWFsLnRleHR1cmUpIHtcclxuICAgICAgICBwYXJhbXMubWFwID0gbWF0ZXJpYWwudGV4dHVyZTtcclxuICAgICAgICBwYXJhbXMubWFwLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF0ZXJpYWwuYW8pIHtcclxuICAgICAgICBwYXJhbXMuYW9NYXAgPSBtYXRlcmlhbC5hbztcclxuICAgICAgICBwYXJhbXMuYW9NYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5yb3VnaG5lc3MpIHtcclxuICAgICAgICBwYXJhbXMucm91Z2huZXNzTWFwID0gbWF0ZXJpYWwucm91Z2huZXNzO1xyXG4gICAgICAgIHBhcmFtcy5yb3VnaG5lc3NNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIC8vIG1hdGVyaWFsLnJvdWdobmVzcy5tYWdGaWx0ZXIgPSBOZWFyZXN0RmlsdGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5tZXRhbG5lc3MpIHtcclxuICAgICAgICBwYXJhbXMubWV0YWxuZXNzTWFwID0gbWF0ZXJpYWwubWV0YWxuZXNzO1xyXG4gICAgICAgIHBhcmFtcy5tZXRhbG5lc3NNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5ub3JtYWwpIHtcclxuICAgICAgICBwYXJhbXMubm9ybWFsTWFwID0gbWF0ZXJpYWwubm9ybWFsO1xyXG4gICAgICAgIHBhcmFtcy5ub3JtYWxNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5kaXNwbGFjZW1lbnQpIHtcclxuICAgICAgICBwYXJhbXMuZGlzcGxhY2VtZW50TWFwID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50O1xyXG4gICAgICAgIHBhcmFtcy5kaXNwbGFjZW1lbnRNYXAubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXRlcmlhbC5lbWlzc2l2ZSkge1xyXG4gICAgICAgIHBhcmFtcy5lbWlzc2l2ZU1hcCA9IG1hdGVyaWFsLmVtaXNzaXZlO1xyXG4gICAgICAgIHBhcmFtcy5lbWlzc2l2ZU1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1hdGVyaWFsLmVudk1hcCkge1xyXG4gICAgICAgIGlmIChtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHkgIT0gbnVsbCB8fCAwKSB7XHJcbiAgICAgICAgICBwYXJhbXMuZW52TWFwID0gbWF0ZXJpYWwuZW52TWFwO1xyXG4gICAgICAgICAgcGFyYW1zLmVudk1hcC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBtYXRlcmlhbC5lbnZNYXAubWFwcGluZyA9IEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nO1xyXG4gICAgICAgICAgbWF0ZXJpYWwuZW52TWFwLm1pbkZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7XHJcbiAgICAgICAgICBtYXRlcmlhbC5lbnZNYXAubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1hdGVyaWFsLnNpZGUpIHtcclxuICAgICAgICBwYXJhbXMuc2lkZSA9IG1hdGVyaWFsLnNpZGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFyYW1zLnNpZGUgPSBEb3VibGVTaWRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBuZXdNYXRlcmlhbDogTWVzaFN0YW5kYXJkTWF0ZXJpYWwgPSBuZXcgTWVzaFN0YW5kYXJkTWF0ZXJpYWwocGFyYW1zKTtcclxuICAgICAgbmV3TWF0ZXJpYWwuY29sb3Iuc2V0UkdCKDEsIDEsIDEpO1xyXG4gICAgICBuZXdNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcblxyXG4gICAgICByZXR1cm4gbmV3TWF0ZXJpYWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRMYXN0S25vd25WYXJpYXRpb25zKGlkOiBzdHJpbmcsIHZhcmlhdGlvbjogVmFyaWF0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMuc2V0KGlkLCB2YXJpYXRpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0TGFzdEtub3duVmFyaWF0aW9ucyhpZDogc3RyaW5nKTogVmFyaWF0aW9uW10ge1xyXG4gICAgaWYgKHRoaXMuX2xhc3RLbm93blZhcmlhdGlvbnMuaGFzKGlkKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbGFzdEtub3duVmFyaWF0aW9ucy5nZXQoaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRDaGlsZHJlbkZpbHRlckJ5UHJvcChvYmo6IE9iamVjdDNELCB1c2VyRGF0YU9iamVjdFByb3A6IHN0cmluZywgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KTogT2JqZWN0M0RbXSB7XHJcbiAgICByZXR1cm4gb2JqLmNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IHtcclxuICAgICAgcmV0dXJuIGNoaWxkLnVzZXJEYXRhICYmXHJcbiAgICAgICAgY2hpbGQudXNlckRhdGEuaGFzT3duUHJvcGVydHkodXNlckRhdGFPYmplY3RQcm9wKSAmJlxyXG4gICAgICAgIGNoaWxkLnVzZXJEYXRhW3VzZXJEYXRhT2JqZWN0UHJvcF0uaGFzT3duUHJvcGVydHkocHJvcCkgJiZcclxuICAgICAgICBjaGlsZC51c2VyRGF0YVt1c2VyRGF0YU9iamVjdFByb3BdW3Byb3BdID09PSB2YWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlVmFyaWF0aW9uRnJvbU5vZGUobm9kZTogRGVjb05vZGUpOiBWYXJpYXRpb24ge1xyXG4gICAgY29uc3QgbmV3VmFyaWF0aW9uOiBWYXJpYXRpb24gPSBuZXcgVmFyaWF0aW9uKCk7XHJcbiAgICBuZXdWYXJpYXRpb24uZGVjb0lkID0gbm9kZSBpbnN0YW5jZW9mIFZhcmlhdGlvbiA/IChub2RlIGFzIHVua25vd24gYXMgVmFyaWF0aW9uKS5kZWNvSWQgOiBwYXJzZUZsb2F0KG5vZGUuaWQpO1xyXG4gICAgbmV3VmFyaWF0aW9uLm5vZGUgPSBub2RlIGluc3RhbmNlb2YgVmFyaWF0aW9uID8gKG5vZGUgYXMgdW5rbm93biBhcyBWYXJpYXRpb24pLm5vZGUgOiBub2RlLm5vZGVJZDtcclxuICAgIG5ld1ZhcmlhdGlvbi5icmFuZElkID0gbm9kZS5icmFuZElkO1xyXG4gICAgbmV3VmFyaWF0aW9uLm9wdGlvblRleHQgPSAobm9kZSBhcyBhbnkpLm9wdGlvblRleHQ7XHJcbiAgICBuZXdWYXJpYXRpb24uZ2FtZU9iamVjdE5hbWUgPSBub2RlLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgbmV3VmFyaWF0aW9uLnN1cHBsaWVyQXJ0aWNsZU5yID0gKG5vZGUgYXMgYW55KS5zdXBwbGllckFydGljbGVOcjtcclxuICAgIG5ld1ZhcmlhdGlvbi5tYXRlcmlhbElkID0gKG5vZGUgYXMgYW55KS5tYXRlcmlhbElkO1xyXG4gICAgcmV0dXJuIG5ld1ZhcmlhdGlvbjtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { ViewMode } from '../enum/view-mode.enum';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class ViewModeService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.viewModeChanged = new BehaviorSubject(ViewMode.RoomPlan3D);
|
|
8
|
+
this._viewMode = ViewMode.RoomPlan3D;
|
|
9
|
+
}
|
|
10
|
+
set viewMode(value) {
|
|
11
|
+
if (this._viewMode !== value) {
|
|
12
|
+
this._viewMode = value;
|
|
13
|
+
this.viewModeChanged.next(this._viewMode);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
get viewMode() {
|
|
17
|
+
return this._viewMode;
|
|
18
|
+
}
|
|
19
|
+
setViewMode(viewSize, viewCenter, mode) {
|
|
20
|
+
this.viewSize = viewSize;
|
|
21
|
+
this.viewCenter = viewCenter;
|
|
22
|
+
this.viewMode = mode;
|
|
23
|
+
}
|
|
24
|
+
is3dViewActive() {
|
|
25
|
+
return this._viewMode === ViewMode.RoomPlan3D;
|
|
26
|
+
}
|
|
27
|
+
isVRViewActive() {
|
|
28
|
+
return this._viewMode === ViewMode.VR;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
ViewModeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ViewModeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
32
|
+
ViewModeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ViewModeService, providedIn: 'root' });
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ViewModeService, decorators: [{
|
|
34
|
+
type: Injectable,
|
|
35
|
+
args: [{ providedIn: 'root' }]
|
|
36
|
+
}] });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1tb2RlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25maWd1cmF0b3Ivc3JjL2xpYi9zZXJ2aWNlcy92aWV3LW1vZGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHdCQUF3QixDQUFDOztBQUdoRCxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVTLG9CQUFlLEdBQThCLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyRixjQUFTLEdBQWEsUUFBUSxDQUFDLFVBQVUsQ0FBQztLQTRCbkQ7SUF4QkMsSUFBVyxRQUFRLENBQUMsS0FBZTtRQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBaUIsRUFBRSxVQUFtQixFQUFFLElBQWM7UUFDdkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDaEQsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDeEMsQ0FBQzs7NkdBOUJVLGVBQWU7aUhBQWYsZUFBZSxjQURILE1BQU07NEZBQ2xCLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1ZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtWaWV3TW9kZX0gZnJvbSAnLi4vZW51bS92aWV3LW1vZGUuZW51bSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcclxuZXhwb3J0IGNsYXNzIFZpZXdNb2RlU2VydmljZSB7XHJcbiAgcHVibGljIHZpZXdNb2RlQ2hhbmdlZDogQmVoYXZpb3JTdWJqZWN0PFZpZXdNb2RlPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoVmlld01vZGUuUm9vbVBsYW4zRCk7XHJcblxyXG4gIHByaXZhdGUgX3ZpZXdNb2RlOiBWaWV3TW9kZSA9IFZpZXdNb2RlLlJvb21QbGFuM0Q7XHJcbiAgcHVibGljIHZpZXdTaXplOiBWZWN0b3IzO1xyXG4gIHB1YmxpYyB2aWV3Q2VudGVyOiBWZWN0b3IzO1xyXG5cclxuICBwdWJsaWMgc2V0IHZpZXdNb2RlKHZhbHVlOiBWaWV3TW9kZSkge1xyXG4gICAgaWYgKHRoaXMuX3ZpZXdNb2RlICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl92aWV3TW9kZSA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnZpZXdNb2RlQ2hhbmdlZC5uZXh0KHRoaXMuX3ZpZXdNb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmlld01vZGUoKTogVmlld01vZGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdNb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpZXdNb2RlKHZpZXdTaXplOiBWZWN0b3IzLCB2aWV3Q2VudGVyOiBWZWN0b3IzLCBtb2RlOiBWaWV3TW9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3U2l6ZSA9IHZpZXdTaXplO1xyXG4gICAgdGhpcy52aWV3Q2VudGVyID0gdmlld0NlbnRlcjtcclxuICAgIHRoaXMudmlld01vZGUgPSBtb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzM2RWaWV3QWN0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdNb2RlID09PSBWaWV3TW9kZS5Sb29tUGxhbjNEO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVlJWaWV3QWN0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdNb2RlID09PSBWaWV3TW9kZS5WUjtcclxuICB9XHJcbn1cclxuIl19
|