{"version":3,"file":"covalent-guided-tour.mjs","sources":["../tmp-esm2022/lib/guided.tour.js","../tmp-esm2022/lib/guided-tour.service.js","../tmp-esm2022/lib/guided-tour.module.js","../tmp-esm2022/covalent-guided-tour.js"],"sourcesContent":["import Shepherd from 'shepherd.js';\nimport { timer, Subject, BehaviorSubject, merge, fromEvent, forkJoin, } from 'rxjs';\nimport { takeUntil, skipWhile, filter, skip, first } from 'rxjs/operators';\nexport var ITourEvent;\n(function (ITourEvent) {\n    ITourEvent[\"click\"] = \"click\";\n    ITourEvent[\"pointerover\"] = \"pointerover\";\n    ITourEvent[\"keyup\"] = \"keyup\";\n    ITourEvent[\"added\"] = \"added\";\n    ITourEvent[\"removed\"] = \"removed\";\n})(ITourEvent || (ITourEvent = {}));\nclass TourButtonsActions {\n}\nconst SHEPHERD_DEFAULT_FIND_TIME_BEFORE_SHOW = 100;\nconst SHEPHERD_DEFAULT_FIND_INTERVAL = 500;\nconst SHEPHERD_DEFAULT_FIND_ATTEMPTS = 20;\nconst overriddenEvents = [\n    ITourEvent.click,\n    ITourEvent.pointerover,\n    ITourEvent.removed,\n    ITourEvent.added,\n    ITourEvent.keyup,\n];\nconst keyEvents = new Map([\n    [13, 'enter'],\n    [27, 'esc'],\n]);\nconst defaultStepOptions = {\n    scrollTo: { behavior: 'smooth', block: 'center' },\n    cancelIcon: {\n        enabled: true,\n    },\n};\nconst MAT_ICON_BUTTON = 'mdc-icon-button material-icons mat-mdc-icon-button mat-mdc-button-base';\nconst MAT_BUTTON = 'mdc-button mat-mdc-button mat-mdc-button-base';\nconst MAT_BUTTON_INVISIBLE = 'shepherd-void-button';\nexport class CovalentGuidedTour extends TourButtonsActions {\n    _destroyedEvent$;\n    shepherdTour;\n    stepOptions;\n    constructor(stepOptions = defaultStepOptions) {\n        super();\n        this.stepOptions = stepOptions;\n        this.newTour();\n    }\n    newTour(opts) {\n        this.shepherdTour = new Shepherd.Tour(Object.assign({\n            defaultStepOptions: this.stepOptions,\n        }, opts));\n        this._destroyedEvent$ = new Subject();\n        // listen to cancel and complete to clean up abortOn events\n        merge(fromEvent(this.shepherdTour, 'cancel'), fromEvent(this.shepherdTour, 'complete'))\n            .pipe(first())\n            .subscribe(() => {\n            this._destroyedEvent$.next();\n            this._destroyedEvent$.complete();\n        });\n        // if abortOn was passed, we bind the event and execute complete\n        if (opts && opts.abortOn) {\n            const abortArr$ = [];\n            opts.abortOn.forEach((abortOn) => {\n                const abortEvent$ = new Subject();\n                abortArr$.push(abortEvent$);\n                this._bindEvent(abortOn, undefined, abortEvent$, this._destroyedEvent$);\n            });\n            const abortSubs = merge(...abortArr$)\n                .pipe(takeUntil(this._destroyedEvent$))\n                .subscribe(() => {\n                this.shepherdTour.complete();\n                abortSubs.unsubscribe();\n            });\n        }\n    }\n    back() {\n        this.shepherdTour.back();\n    }\n    cancel() {\n        this.shepherdTour.cancel();\n    }\n    next() {\n        this.shepherdTour.next();\n    }\n    finish() {\n        this.shepherdTour.complete();\n    }\n    addSteps(steps) {\n        this.shepherdTour.addSteps(this._prepareTour(steps));\n    }\n    start() {\n        this.shepherdTour.start();\n    }\n    _prepareTour(originalSteps, finishLabel = 'finish') {\n        // create Subjects for back and forward events\n        const backEvent$ = new Subject();\n        const forwardEvent$ = new Subject();\n        let _backFlow = false;\n        // create Subject for your end\n        const destroyedEvent$ = new Subject();\n        /**\n         * This function adds the step progress in the footer of the shepherd tooltip\n         */\n        const appendProgressFunc = function () {\n            // get all the footers that are available in the DOM\n            const footers = Array.from(document.querySelectorAll('.shepherd-footer'));\n            // get the last footer since Shepherd always puts the active one at the end\n            const footer = footers[footers.length - 1];\n            // generate steps html element\n            const progress = document.createElement('span');\n            progress.className = 'shepherd-progress';\n            progress.innerText = `${this.shepherdTour.currentStep.options.count}/${stepTotal}`;\n            // insert into the footer before the first button\n            footer.insertBefore(progress, footer.querySelector('.shepherd-button'));\n        };\n        let stepTotal = 0;\n        const steps = originalSteps.map((step) => {\n            let showProgress = () => {\n                //\n            };\n            if (step.attachToOptions?.skipFromStepCount === true) {\n                showProgress = function () {\n                    return;\n                };\n            }\n            else if (step.attachToOptions?.skipFromStepCount === undefined ||\n                step.attachToOptions?.skipFromStepCount === false) {\n                step.count = ++stepTotal;\n                showProgress = appendProgressFunc.bind(this);\n            }\n            return Object.assign({}, step, {\n                when: {\n                    show: showProgress,\n                },\n            });\n        });\n        const finishButton = {\n            text: finishLabel,\n            action: this['finish'].bind(this),\n            classes: MAT_BUTTON,\n        };\n        const voidButton = {\n            text: '',\n            action() {\n                return;\n            },\n            classes: MAT_BUTTON_INVISIBLE,\n        };\n        // listen to the destroyed event to clean up all the streams\n        this._destroyedEvent$.pipe(first()).subscribe(() => {\n            backEvent$.complete();\n            forwardEvent$.complete();\n            destroyedEvent$.next();\n            destroyedEvent$.complete();\n        });\n        const totalSteps = steps.length;\n        steps.forEach((step, index) => {\n            // create buttons specific for the step\n            // this is done to create more control on events\n            const nextButton = {\n                text: 'chevron_right',\n                action: () => {\n                    // intercept the next action and trigger event\n                    forwardEvent$.next();\n                    this.shepherdTour.next();\n                },\n                classes: MAT_ICON_BUTTON,\n            };\n            const backButton = {\n                text: 'chevron_left',\n                action: () => {\n                    // intercept the back action and trigger event\n                    backEvent$.next();\n                    _backFlow = true;\n                    // check if 'goBackTo' is set to jump to a particular step, else just go back\n                    if (step.attachToOptions && step.attachToOptions.goBackTo) {\n                        this.shepherdTour.show(step.attachToOptions.goBackTo, false);\n                    }\n                    else {\n                        this.shepherdTour.back();\n                    }\n                },\n                classes: step.advanceOnOptions?.allowGoBack === false\n                    ? MAT_BUTTON_INVISIBLE\n                    : MAT_ICON_BUTTON,\n            };\n            // check if highlight was provided for the step, else fallback into shepherds usage\n            step.highlightClass =\n                step.attachToOptions && step.attachToOptions.highlight\n                    ? 'shepherd-highlight'\n                    : step.highlightClass;\n            // Adding buttons in the steps if no buttons are defined\n            if (!step.buttons || step.buttons.length === 0) {\n                if (index === 0) {\n                    // first step\n                    step.buttons = [nextButton];\n                }\n                else if (index === totalSteps - 1) {\n                    // last step\n                    step.buttons = [backButton, finishButton];\n                }\n                else {\n                    step.buttons = [backButton, nextButton];\n                }\n            }\n            // checks \"advanceOn\" to override listeners\n            let advanceOn = step.advanceOn;\n            // remove the shepherd \"advanceOn\" infavor of ours if the event is part of our list\n            if ((typeof advanceOn === 'object' &&\n                !Array.isArray(advanceOn) &&\n                advanceOn.event &&\n                overriddenEvents.indexOf(advanceOn.event.split('.')[0]) > -1) ||\n                advanceOn instanceof Array) {\n                step.advanceOn = undefined;\n                step.buttons =\n                    step.advanceOnOptions && step.advanceOnOptions.allowGoBack\n                        ? [backButton, voidButton]\n                        : [voidButton];\n            }\n            // adds a default beforeShowPromise function\n            step.beforeShowPromise = () => {\n                return new Promise((resolve) => {\n                    const additionalCapabilitiesSetup = () => {\n                        if (advanceOn && !step.advanceOn) {\n                            if (!Array.isArray(advanceOn)) {\n                                advanceOn = [advanceOn];\n                            }\n                            const advanceArr$ = [];\n                            advanceOn.forEach((_) => {\n                                const advanceEvent$ = new Subject();\n                                advanceArr$.push(advanceEvent$);\n                                // we start a timer of attempts to find an element in the dom\n                                this._bindEvent(_, step.advanceOnOptions, advanceEvent$, destroyedEvent$);\n                            });\n                            const advanceSubs = forkJoin(...advanceArr$)\n                                .pipe(takeUntil(merge(destroyedEvent$, backEvent$)))\n                                .subscribe(() => {\n                                // check if we need to advance to a specific step, else advance to next step\n                                if (step.advanceOnOptions && step.advanceOnOptions.jumpTo) {\n                                    this.shepherdTour.show(step.advanceOnOptions.jumpTo);\n                                }\n                                else {\n                                    this.shepherdTour.next();\n                                }\n                                forwardEvent$.next();\n                                advanceSubs.unsubscribe();\n                            });\n                        }\n                        // if abortOn was passed on the step, we bind the event and execute complete\n                        if (step.abortOn) {\n                            const abortArr$ = [];\n                            step.abortOn.forEach((abortOn) => {\n                                const abortEvent$ = new Subject();\n                                abortArr$.push(abortEvent$);\n                                this._bindEvent(abortOn, undefined, abortEvent$, destroyedEvent$);\n                            });\n                            const abortSubs = merge(...abortArr$)\n                                .pipe(takeUntil(merge(destroyedEvent$, backEvent$, forwardEvent$)))\n                                .subscribe(() => {\n                                this.shepherdTour.complete();\n                                abortSubs.unsubscribe();\n                            });\n                        }\n                    };\n                    const _stopTimer$ = new Subject();\n                    const _retriesReached$ = new Subject();\n                    const _retryAttempts$ = new BehaviorSubject(-1);\n                    let id;\n                    // checks if \"attachTo\" is a string or an object to get the id of an element\n                    if (typeof step.attachTo === 'string') {\n                        id = step.attachTo;\n                    }\n                    else if (typeof step.attachTo === 'object' &&\n                        typeof step.attachTo.element === 'string') {\n                        id = step.attachTo.element;\n                    }\n                    // if we have an id as a string in either case, we use it (we ignore it if its HTMLElement)\n                    if (id) {\n                        // if current step is the first step of the tour, we set the buttons to be only \"next\"\n                        // we had to use `any` since the tour doesnt expose the steps in any fashion nor a way to check if we have modified them at all\n                        if (this.shepherdTour.getCurrentStep() ===\n                            this.shepherdTour.steps[0]) {\n                            this.shepherdTour.getCurrentStep()?.updateStepOptions({\n                                buttons: originalSteps[index].advanceOn\n                                    ? [voidButton]\n                                    : [nextButton],\n                            });\n                        }\n                        // register to the attempts observable to notify deeveloper when number has been reached\n                        _retryAttempts$\n                            .pipe(skip(1), skipWhile((val) => {\n                            if (step.attachToOptions &&\n                                step.attachToOptions.retries !== undefined) {\n                                return val < step.attachToOptions.retries;\n                            }\n                            return val < SHEPHERD_DEFAULT_FIND_ATTEMPTS;\n                        }), takeUntil(merge(_stopTimer$.asObservable(), destroyedEvent$)))\n                            .subscribe((attempts) => {\n                            _retriesReached$.next(1);\n                            _retriesReached$.complete();\n                            // if attempts have been reached, we check \"skipIfNotFound\" to move on to the next step\n                            if (step.attachToOptions &&\n                                step.attachToOptions.skipIfNotFound) {\n                                // if we get to this step coming back from a step and it wasnt found\n                                // then we either check if its the first step and try going forward\n                                // or we keep going back until we find a step that actually exists\n                                if (_backFlow) {\n                                    if (this.shepherdTour.steps.indexOf(this.shepherdTour.getCurrentStep()) === 0) {\n                                        this.shepherdTour.next();\n                                    }\n                                    else {\n                                        this.shepherdTour.back();\n                                    }\n                                    _backFlow = false;\n                                }\n                                else {\n                                    // destroys current step if we need to skip it to remove it from the tour\n                                    const currentStep = this.shepherdTour.getCurrentStep();\n                                    currentStep?.destroy();\n                                    this.shepherdTour.next();\n                                    this.shepherdTour.removeStep(currentStep?.id ?? '');\n                                }\n                            }\n                            else if (step.attachToOptions && step.attachToOptions.else) {\n                                // if \"skipIfNotFound\" is not true, then we check if \"else\" has been set to jump to a specific step\n                                this.shepherdTour.show(step.attachToOptions.else);\n                            }\n                            else {\n                                // tslint:disable-next-line:no-console\n                                console.warn(`Retries reached trying to find ${id}. Retried  ${attempts} times.`);\n                                // else we show the step regardless\n                                resolve();\n                            }\n                        });\n                        // we start a timer of attempts to find an element in the dom\n                        timer((step.attachToOptions && step.attachToOptions.timeBeforeShow) ||\n                            SHEPHERD_DEFAULT_FIND_TIME_BEFORE_SHOW, (step.attachToOptions && step.attachToOptions.interval) ||\n                            SHEPHERD_DEFAULT_FIND_INTERVAL)\n                            .pipe(\n                        // the timer will continue either until we find the element or the number of attempts has been reached\n                        takeUntil(merge(_stopTimer$, _retriesReached$, destroyedEvent$)))\n                            .subscribe(() => {\n                            const element = document.querySelector(id ?? '');\n                            // if the element has been found, we stop the timer and resolve the promise\n                            if (element) {\n                                _stopTimer$.next();\n                                _stopTimer$.complete();\n                                additionalCapabilitiesSetup();\n                                resolve();\n                            }\n                            else {\n                                _retryAttempts$.next(_retryAttempts$.value + 1);\n                            }\n                        });\n                        // stop find interval if user stops the tour\n                        destroyedEvent$.subscribe(() => {\n                            _stopTimer$.next();\n                            _stopTimer$.complete();\n                            _retriesReached$.next(1);\n                            _retriesReached$.complete();\n                        });\n                    }\n                    else {\n                        // resolve observable until the timeBeforeShow has passsed or use default\n                        timer((step.attachToOptions && step.attachToOptions.timeBeforeShow) ||\n                            SHEPHERD_DEFAULT_FIND_TIME_BEFORE_SHOW)\n                            .pipe(takeUntil(merge(destroyedEvent$)))\n                            .subscribe(() => {\n                            resolve();\n                        });\n                    }\n                });\n            };\n        });\n        return steps;\n    }\n    _bindEvent(eventOn, eventOnOptions, event$, destroyedEvent$) {\n        const selector = eventOn.selector ?? '';\n        const event = eventOn.event;\n        // we start a timer of attempts to find an element in the dom\n        const timerSubs = timer((eventOnOptions && eventOnOptions.timeBeforeShow) ||\n            SHEPHERD_DEFAULT_FIND_TIME_BEFORE_SHOW, (eventOnOptions && eventOnOptions.interval) ||\n            SHEPHERD_DEFAULT_FIND_INTERVAL)\n            .pipe(takeUntil(destroyedEvent$))\n            .subscribe(() => {\n            const element = document.querySelector(selector);\n            // if the element has been found, we stop the timer and resolve the promise\n            if (element) {\n                timerSubs.unsubscribe();\n                if (event === ITourEvent.added) {\n                    // if event is \"Added\" trigger a soon as this is attached.\n                    event$.next();\n                    event$.complete();\n                }\n                else if (event === ITourEvent.click ||\n                    event === ITourEvent.pointerover ||\n                    (event && event.indexOf(ITourEvent.keyup) > -1)) {\n                    // we use normal listeners for mouseevents\n                    const mainEvent = event?.split('.')[0];\n                    const subEvent = event?.split('.')[1];\n                    fromEvent(element, mainEvent)\n                        .pipe(filter(($event) => {\n                        // only trigger if the event is a keyboard event and part of out list\n                        if ($event instanceof KeyboardEvent) {\n                            if (keyEvents.get($event.keyCode) === subEvent) {\n                                return true;\n                            }\n                            return false;\n                        }\n                        else {\n                            return true;\n                        }\n                    }), takeUntil(merge(event$.asObservable(), destroyedEvent$)))\n                        .subscribe(() => {\n                        event$.next();\n                        event$.complete();\n                    });\n                }\n                else if (event === ITourEvent.removed) {\n                    // and we will use MutationObserver for DOM events\n                    const observer = new MutationObserver(() => {\n                        if (!document.body.contains(element)) {\n                            event$.next();\n                            event$.complete();\n                            observer.disconnect();\n                        }\n                    });\n                    // stop listenining if tour is closed\n                    destroyedEvent$.subscribe(() => {\n                        observer.disconnect();\n                    });\n                    // observe for any DOM interaction in the element\n                    observer.observe(element, {\n                        childList: true,\n                        subtree: true,\n                        attributes: true,\n                    });\n                }\n            }\n        });\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpZGVkLnRvdXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItZ3VpZGVkLXRvdXIvc3JjL2xpYi9ndWlkZWQudG91ci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxFQUNMLEtBQUssRUFDTCxPQUFPLEVBQ1AsZUFBZSxFQUNmLEtBQUssRUFFTCxTQUFTLEVBQ1QsUUFBUSxHQUNULE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUszRSxNQUFNLENBQU4sSUFBWSxVQU1YO0FBTkQsV0FBWSxVQUFVO0lBQ3BCLDZCQUFpQixDQUFBO0lBQ2pCLHlDQUE2QixDQUFBO0lBQzdCLDZCQUFpQixDQUFBO0lBQ2pCLDZCQUFpQixDQUFBO0lBQ2pCLGlDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFOVyxVQUFVLEtBQVYsVUFBVSxRQU1yQjtBQXNDRCxNQUFlLGtCQUFrQjtDQVFoQztBQUVELE1BQU0sc0NBQXNDLEdBQUcsR0FBRyxDQUFDO0FBQ25ELE1BQU0sOEJBQThCLEdBQUcsR0FBRyxDQUFDO0FBQzNDLE1BQU0sOEJBQThCLEdBQUcsRUFBRSxDQUFDO0FBRTFDLE1BQU0sZ0JBQWdCLEdBQWE7SUFDakMsVUFBVSxDQUFDLEtBQUs7SUFDaEIsVUFBVSxDQUFDLFdBQVc7SUFDdEIsVUFBVSxDQUFDLE9BQU87SUFDbEIsVUFBVSxDQUFDLEtBQUs7SUFDaEIsVUFBVSxDQUFDLEtBQUs7Q0FDakIsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUF3QixJQUFJLEdBQUcsQ0FBaUI7SUFDN0QsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDO0NBQ1osQ0FBQyxDQUFDO0FB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Q0FBQyxDQUFDLENBQUM7b0JBQ0gsaURBQWlEO29CQUNqRCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTt3QkFDeEIsU0FBUyxFQUFFLElBQUk7d0JBQ2YsT0FBTyxFQUFFLElBQUk7d0JBQ2IsVUFBVSxFQUFFLElBQUk7cUJBQ2pCLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNoZXBoZXJkIGZyb20gJ3NoZXBoZXJkLmpzJztcbmltcG9ydCB7XG4gIHRpbWVyLFxuICBTdWJqZWN0LFxuICBCZWhhdmlvclN1YmplY3QsXG4gIG1lcmdlLFxuICBTdWJzY3JpcHRpb24sXG4gIGZyb21FdmVudCxcbiAgZm9ya0pvaW4sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBza2lwV2hpbGUsIGZpbHRlciwgc2tpcCwgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCB0eXBlIFRvdXJTdGVwID0gU2hlcGhlcmQuU3RlcC5TdGVwT3B0aW9ucztcbmV4cG9ydCB0eXBlIFRvdXJTdGVwQnV0dG9uID0gU2hlcGhlcmQuU3RlcC5TdGVwT3B0aW9uc0J1dHRvbjtcblxuZXhwb3J0IGVudW0gSVRvdXJFdmVudCB7XG4gICdjbGljaycgPSAnY2xpY2snLFxuICAncG9pbnRlcm92ZXInID0gJ3BvaW50ZXJvdmVyJyxcbiAgJ2tleXVwJyA9ICdrZXl1cCcsXG4gICdhZGRlZCcgPSAnYWRkZWQnLCAvLyBhZGRlZCB0byBET01cbiAgJ3JlbW92ZWQnID0gJ3JlbW92ZWQnLCAvLyByZW1vdmVkIGZyb20gRE9NXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvdXJFdmVudE9uIHtcbiAgc2VsZWN0b3I/OiBzdHJpbmc7IC8vIGNzcyBzZWxlY3RvclxuICBldmVudD86IGtleW9mIHR5cGVvZiBJVG91ckV2ZW50OyAvLyBjbGljaywgcG9pbnRlcm92ZXIsIGtleXVwLCBhZGRlZCwgcmVtb3ZlZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUb3VyRXZlbnRPbk9wdGlvbnMge1xuICB0aW1lQmVmb3JlU2hvdz86IG51bWJlcjsgLy8gZGVsYXkgYmVmb3JlIHN0ZXAgaXMgZGlzcGxheWVkXG4gIGludGVydmFsPzogbnVtYmVyOyAvLyB0aW1lIGJldHdlZW4gc2VhcmNoZXMgZm9yIGVsZW1lbnQsIGRlZmF1bHRzIHRvIDUwMG1zXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvdXJPcHRpb25zIGV4dGVuZHMgU2hlcGhlcmQuVG91ci5Ub3VyT3B0aW9ucyB7XG4gIGFib3J0T24/OiBJVG91ckV2ZW50T25bXTsgLy8gZXZlbnRzIHRvIGFib3J0IG9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvdXJTdGVwQXR0YWNoVG9PcHRpb25zIGV4dGVuZHMgSVRvdXJFdmVudE9uT3B0aW9ucyB7XG4gIGhpZ2hsaWdodD86IGJvb2xlYW47XG4gIHJldHJpZXM/OiBudW1iZXI7IC8vICMgbnVtIG9mIGF0dGVtcHRzIHRvIGZpbmQgZWxlbWVudFxuICBza2lwSWZOb3RGb3VuZD86IGJvb2xlYW47IC8vIGlmIGVsZW1lbnQgaXMgbm90IGZvdW5kIGFmdGVyIG4gcmV0cmllcywgbW92ZSBvbiB0byBuZXh0IHN0ZXBcbiAgZWxzZT86IHN0cmluZzsgLy8gaWYgZWxlbWVudCBpcyBub3QgZm91bmQsIGdvIHRvIHN0ZXAgd2l0aCB0aGlzIGlkXG4gIGdvQmFja1RvPzogc3RyaW5nOyAvLyBiYWNrIGJ1dHRvbiBnb2VzIGJhY2sgdG8gc3RlcCB3aXRoIHRoaXMgaWRcbiAgc2tpcEZyb21TdGVwQ291bnQ/OiBib29sZWFuOyAvLyBzaG93L2hpZGUgcHJvZ3Jlc3Mgb24gc3RlcFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUb3VyU3RlcEFkdmFuY2VPbk9wdGlvbnMgZXh0ZW5kcyBJVG91ckV2ZW50T25PcHRpb25zIHtcbiAganVtcFRvPzogc3RyaW5nOyAvLyBuZXh0IGJ1dHRvbiB3aWxsIGp1bXAgdG8gc3RlcCB3aXRoIHRoaXMgaWRcbiAgYWxsb3dHb0JhY2s/OiBib29sZWFuOyAvLyBhbGxvdyBiYWNrIHdpdGhpbiB0aGlzIHN0ZXBcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVG91clN0ZXAgZXh0ZW5kcyBUb3VyU3RlcCB7XG4gIGF0dGFjaFRvT3B0aW9ucz86IElUb3VyU3RlcEF0dGFjaFRvT3B0aW9ucztcbiAgYWR2YW5jZU9uT3B0aW9ucz86IElUb3VyU3RlcEFkdmFuY2VPbk9wdGlvbnM7XG4gIGFkdmFuY2VPbj86IElUb3VyRXZlbnRPbltdIHwgSVRvdXJFdmVudE9uIHwgYW55O1xuICBhYm9ydE9uPzogSVRvdXJFdmVudE9uW107XG4gIGNvdW50PzogbnVtYmVyO1xufVxuXG5hYnN0cmFjdCBjbGFzcyBUb3VyQnV0dG9uc0FjdGlvbnMge1xuICBhYnN0cmFjdCBuZXh0KCk6IHZvaWQ7XG5cbiAgYWJzdHJhY3QgYmFjaygpOiB2b2lkO1xuXG4gIGFic3RyYWN0IGNhbmNlbCgpOiB2b2lkO1xuXG4gIGFic3RyYWN0IGZpbmlzaCgpOiB2b2lkO1xufVxuXG5jb25zdCBTSEVQSEVSRF9ERUZBVUxUX0ZJTkRfVElNRV9CRUZPUkVfU0hPVyA9IDEwMDtcbmNvbnN0IFNIRVBIRVJEX0RFRkFVTFRfRklORF9JTlRFUlZBTCA9IDUwMDtcbmNvbnN0IFNIRVBIRVJEX0RFRkFVTFRfRklORF9BVFRFTVBUUyA9IDIwO1xuXG5jb25zdCBvdmVycmlkZGVuRXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgSVRvdXJFdmVudC5jbGljayxcbiAgSVRvdXJFdmVudC5wb2ludGVyb3ZlcixcbiAgSVRvdXJFdmVudC5yZW1vdmVkLFxuICBJVG91ckV2ZW50LmFkZGVkLFxuICBJVG91ckV2ZW50LmtleXVwLFxuXTtcblxuY29uc3Qga2V5RXZlbnRzOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oW1xuICBbMTMsICdlbnRlciddLFxuICBbMjcsICdlc2MnXSxcbl0pO1xuXG5jb25zdCBkZWZhdWx0U3RlcE9wdGlvbnM6IFRvdXJTdGVwID0ge1xuICBzY3JvbGxUbzogeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9LFxuICBjYW5jZWxJY29uOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgfSxcbn07XG5cbmNvbnN0IE1BVF9JQ09OX0JVVFRPTiA9XG4gICdtZGMtaWNvbi1idXR0b24gbWF0ZXJpYWwtaWNvbnMgbWF0LW1kYy1pY29uLWJ1dHRvbiBtYXQtbWRjLWJ1dHRvbi1iYXNlJztcbmNvbnN0IE1BVF9CVVRUT04gPSAnbWRjLWJ1dHRvbiBtYXQtbWRjLWJ1dHRvbiBtYXQtbWRjLWJ1dHRvbi1iYXNlJztcbmNvbnN0IE1BVF9CVVRUT05fSU5WSVNJQkxFID0gJ3NoZXBoZXJkLXZvaWQtYnV0dG9uJztcblxuZXhwb3J0IGNsYXNzIENvdmFsZW50R3VpZGVkVG91ciBleHRlbmRzIFRvdXJCdXR0b25zQWN0aW9ucyB7XG4gIHByaXZhdGUgX2Rlc3Ryb3llZEV2ZW50JCE6IFN1YmplY3Q8dm9pZD47XG5cbiAgc2hlcGhlcmRUb3VyITogU2hlcGhlcmQuVG91cjtcbiAgc3RlcE9wdGlvbnM6IElUb3VyU3RlcDtcblxuICBjb25zdHJ1Y3RvcihzdGVwT3B0aW9uczogSVRvdXJTdGVwID0gZGVmYXVsdFN0ZXBPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3RlcE9wdGlvbnMgPSBzdGVwT3B0aW9ucztcbiAgICB0aGlzLm5ld1RvdXIoKTtcbiAgfVxuXG4gIG5ld1RvdXIob3B0cz86IElUb3VyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuc2hlcGhlcmRUb3VyID0gbmV3IFNoZXBoZXJkLlRvdXIoXG4gICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICB7XG4gICAgICAgICAgZGVmYXVsdFN0ZXBPcHRpb25zOiB0aGlzLnN0ZXBPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBvcHRzXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuX2Rlc3Ryb3llZEV2ZW50JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLy8gbGlzdGVuIHRvIGNhbmNlbCBhbmQgY29tcGxldGUgdG8gY2xlYW4gdXAgYWJvcnRPbiBldmVudHNcbiAgICBtZXJnZShcbiAgICAgIGZyb21FdmVudCh0aGlzLnNoZXBoZXJkVG91ciwgJ2NhbmNlbCcpLFxuICAgICAgZnJvbUV2ZW50KHRoaXMuc2hlcGhlcmRUb3VyLCAnY29tcGxldGUnKVxuICAgIClcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkRXZlbnQkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkRXZlbnQkLmNvbXBsZXRlKCk7XG4gICAgICB9KTtcblxuICAgIC8vIGlmIGFib3J0T24gd2FzIHBhc3NlZCwgd2UgYmluZCB0aGUgZXZlbnQgYW5kIGV4ZWN1dGUgY29tcGxldGVcbiAgICBpZiAob3B0cyAmJiBvcHRzLmFib3J0T24pIHtcbiAgICAgIGNvbnN0IGFib3J0QXJyJDogU3ViamVjdDx2b2lkPltdID0gW107XG4gICAgICBvcHRzLmFib3J0T24uZm9yRWFjaCgoYWJvcnRPbjogSVRvdXJFdmVudE9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGFib3J0RXZlbnQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgICAgYWJvcnRBcnIkLnB1c2goYWJvcnRFdmVudCQpO1xuICAgICAgICB0aGlzLl9iaW5kRXZlbnQoYWJvcnRPbiwgdW5kZWZpbmVkLCBhYm9ydEV2ZW50JCwgdGhpcy5fZGVzdHJveWVkRXZlbnQkKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhYm9ydFN1YnM6IFN1YnNjcmlwdGlvbiA9IG1lcmdlKC4uLmFib3J0QXJyJClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZEV2ZW50JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hlcGhlcmRUb3VyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgYWJvcnRTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy5zaGVwaGVyZFRvdXIuYmFjaygpO1xuICB9XG5cbiAgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuc2hlcGhlcmRUb3VyLmNhbmNlbCgpO1xuICB9XG5cbiAgbmV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLnNoZXBoZXJkVG91ci5uZXh0KCk7XG4gIH1cblxuICBmaW5pc2goKTogdm9pZCB7XG4gICAgdGhpcy5zaGVwaGVyZFRvdXIuY29tcGxldGUoKTtcbiAgfVxuXG4gIGFkZFN0ZXBzKHN0ZXBzOiBJVG91clN0ZXBbXSk6IHZvaWQge1xuICAgIHRoaXMuc2hlcGhlcmRUb3VyLmFkZFN0ZXBzKHRoaXMuX3ByZXBhcmVUb3VyKHN0ZXBzKSk7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLnNoZXBoZXJkVG91ci5zdGFydCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9wcmVwYXJlVG91cihcbiAgICBvcmlnaW5hbFN0ZXBzOiBJVG91clN0ZXBbXSxcbiAgICBmaW5pc2hMYWJlbCA9ICdmaW5pc2gnXG4gICk6IElUb3VyU3RlcFtdIHtcbiAgICAvLyBjcmVhdGUgU3ViamVjdHMgZm9yIGJhY2sgYW5kIGZvcndhcmQgZXZlbnRzXG4gICAgY29uc3QgYmFja0V2ZW50JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgY29uc3QgZm9yd2FyZEV2ZW50JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgbGV0IF9iYWNrRmxvdyA9IGZhbHNlO1xuICAgIC8vIGNyZWF0ZSBTdWJqZWN0IGZvciB5b3VyIGVuZFxuICAgIGNvbnN0IGRlc3Ryb3llZEV2ZW50JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBhZGRzIHRoZSBzdGVwIHByb2dyZXNzIGluIHRoZSBmb290ZXIgb2YgdGhlIHNoZXBoZXJkIHRvb2x0aXBcbiAgICAgKi9cbiAgICBjb25zdCBhcHBlbmRQcm9ncmVzc0Z1bmMgPSBmdW5jdGlvbiAodGhpczogYW55KTogdm9pZCB7XG4gICAgICAvLyBnZXQgYWxsIHRoZSBmb290ZXJzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgRE9NXG4gICAgICBjb25zdCBmb290ZXJzOiBFbGVtZW50W10gPSBBcnJheS5mcm9tPEVsZW1lbnQ+KFxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2hlcGhlcmQtZm9vdGVyJylcbiAgICAgICk7XG4gICAgICAvLyBnZXQgdGhlIGxhc3QgZm9vdGVyIHNpbmNlIFNoZXBoZXJkIGFsd2F5cyBwdXRzIHRoZSBhY3RpdmUgb25lIGF0IHRoZSBlbmRcbiAgICAgIGNvbnN0IGZvb3RlcjogRWxlbWVudCA9IGZvb3RlcnNbZm9vdGVycy5sZW5ndGggLSAxXTtcbiAgICAgIC8vIGdlbmVyYXRlIHN0ZXBzIGh0bWwgZWxlbWVudFxuICAgICAgY29uc3QgcHJvZ3Jlc3M6IEhUTUxTcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgIHByb2dyZXNzLmNsYXNzTmFtZSA9ICdzaGVwaGVyZC1wcm9ncmVzcyc7XG4gICAgICBwcm9ncmVzcy5pbm5lclRleHQgPSBgJHt0aGlzLnNoZXBoZXJkVG91ci5jdXJyZW50U3RlcC5vcHRpb25zLmNvdW50fS8ke3N0ZXBUb3RhbH1gO1xuICAgICAgLy8gaW5zZXJ0IGludG8gdGhlIGZvb3RlciBiZWZvcmUgdGhlIGZpcnN0IGJ1dHRvblxuICAgICAgZm9vdGVyLmluc2VydEJlZm9yZShwcm9ncmVzcywgZm9vdGVyLnF1ZXJ5U2VsZWN0b3IoJy5zaGVwaGVyZC1idXR0b24nKSk7XG4gICAgfTtcblxuICAgIGxldCBzdGVwVG90YWwgPSAwO1xuICAgIGNvbnN0IHN0ZXBzOiBJVG91clN0ZXBbXSA9IG9yaWdpbmFsU3RlcHMubWFwKChzdGVwOiBJVG91clN0ZXApID0+IHtcbiAgICAgIGxldCBzaG93UHJvZ3Jlc3M6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgICAgIC8vXG4gICAgICB9O1xuICAgICAgaWYgKHN0ZXAuYXR0YWNoVG9PcHRpb25zPy5za2lwRnJvbVN0ZXBDb3VudCA9PT0gdHJ1ZSkge1xuICAgICAgICBzaG93UHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3RlcC5hdHRhY2hUb09wdGlvbnM/LnNraXBGcm9tU3RlcENvdW50ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgc3RlcC5hdHRhY2hUb09wdGlvbnM/LnNraXBGcm9tU3RlcENvdW50ID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHN0ZXAuY291bnQgPSArK3N0ZXBUb3RhbDtcbiAgICAgICAgc2hvd1Byb2dyZXNzID0gYXBwZW5kUHJvZ3Jlc3NGdW5jLmJpbmQodGhpcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RlcCwge1xuICAgICAgICB3aGVuOiB7XG4gICAgICAgICAgc2hvdzogc2hvd1Byb2dyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmaW5pc2hCdXR0b246IFRvdXJTdGVwQnV0dG9uID0ge1xuICAgICAgdGV4dDogZmluaXNoTGFiZWwsXG4gICAgICBhY3Rpb246IHRoaXNbJ2ZpbmlzaCddLmJpbmQodGhpcyksXG4gICAgICBjbGFzc2VzOiBNQVRfQlVUVE9OLFxuICAgIH07XG5cbiAgICBjb25zdCB2b2lkQnV0dG9uOiBUb3VyU3RlcEJ1dHRvbiA9IHtcbiAgICAgIHRleHQ6ICcnLFxuICAgICAgYWN0aW9uKCk6IHZvaWQge1xuICAgICAgICByZXR1cm47XG4gICAgICB9LFxuICAgICAgY2xhc3NlczogTUFUX0JVVFRPTl9JTlZJU0lCTEUsXG4gICAgfTtcblxuICAgIC8vIGxpc3RlbiB0byB0aGUgZGVzdHJveWVkIGV2ZW50IHRvIGNsZWFuIHVwIGFsbCB0aGUgc3RyZWFtc1xuICAgIHRoaXMuX2Rlc3Ryb3llZEV2ZW50JC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBiYWNrRXZlbnQkLmNvbXBsZXRlKCk7XG4gICAgICBmb3J3YXJkRXZlbnQkLmNvbXBsZXRlKCk7XG4gICAgICBkZXN0cm95ZWRFdmVudCQubmV4dCgpO1xuICAgICAgZGVzdHJveWVkRXZlbnQkLmNvbXBsZXRlKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b3RhbFN0ZXBzOiBudW1iZXIgPSBzdGVwcy5sZW5ndGg7XG4gICAgc3RlcHMuZm9yRWFjaCgoc3RlcDogSVRvdXJTdGVwLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyBjcmVhdGUgYnV0dG9ucyBzcGVjaWZpYyBmb3IgdGhlIHN0ZXBcbiAgICAgIC8vIHRoaXMgaXMgZG9uZSB0byBjcmVhdGUgbW9yZSBjb250cm9sIG9uIGV2ZW50c1xuICAgICAgY29uc3QgbmV4dEJ1dHRvbjogVG91clN0ZXBCdXR0b24gPSB7XG4gICAgICAgIHRleHQ6ICdjaGV2cm9uX3JpZ2h0JyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgLy8gaW50ZXJjZXB0IHRoZSBuZXh0IGFjdGlvbiBhbmQgdHJpZ2dlciBldmVudFxuICAgICAgICAgIGZvcndhcmRFdmVudCQubmV4dCgpO1xuICAgICAgICAgIHRoaXMuc2hlcGhlcmRUb3VyLm5leHQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NlczogTUFUX0lDT05fQlVUVE9OLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGJhY2tCdXR0b246IFRvdXJTdGVwQnV0dG9uID0ge1xuICAgICAgICB0ZXh0OiAnY2hldnJvbl9sZWZ0JyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgLy8gaW50ZXJjZXB0IHRoZSBiYWNrIGFjdGlvbiBhbmQgdHJpZ2dlciBldmVudFxuICAgICAgICAgIGJhY2tFdmVudCQubmV4dCgpO1xuICAgICAgICAgIF9iYWNrRmxvdyA9IHRydWU7XG4gICAgICAgICAgLy8gY2hlY2sgaWYgJ2dvQmFja1RvJyBpcyBzZXQgdG8ganVtcCB0byBhIHBhcnRpY3VsYXIgc3RlcCwgZWxzZSBqdXN0IGdvIGJhY2tcbiAgICAgICAgICBpZiAoc3RlcC5hdHRhY2hUb09wdGlvbnMgJiYgc3RlcC5hdHRhY2hUb09wdGlvbnMuZ29CYWNrVG8pIHtcbiAgICAgICAgICAgIHRoaXMuc2hlcGhlcmRUb3VyLnNob3coc3RlcC5hdHRhY2hUb09wdGlvbnMuZ29CYWNrVG8sIGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaGVwaGVyZFRvdXIuYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NlczpcbiAgICAgICAgICBzdGVwLmFkdmFuY2VPbk9wdGlvbnM/LmFsbG93R29CYWNrID09PSBmYWxzZVxuICAgICAgICAgICAgPyBNQVRfQlVUVE9OX0lOVklTSUJMRVxuICAgICAgICAgICAgOiBNQVRfSUNPTl9CVVRUT04sXG4gICAgICB9O1xuXG4gICAgICAvLyBjaGVjayBpZiBoaWdobGlnaHQgd2FzIHByb3ZpZGVkIGZvciB0aGUgc3RlcCwgZWxzZSBmYWxsYmFjayBpbnRvIHNoZXBoZXJkcyB1c2FnZVxuICAgICAgc3RlcC5oaWdobGlnaHRDbGFzcyA9XG4gICAgICAgIHN0ZXAuYXR0YWNoVG9PcHRpb25zICYmIHN0ZXAuYXR0YWNoVG9PcHRpb25zLmhpZ2hsaWdodFxuICAgICAgICAgID8gJ3NoZXBoZXJkLWhpZ2hsaWdodCdcbiAgICAgICAgICA6IHN0ZXAuaGlnaGxpZ2h0Q2xhc3M7XG5cbiAgICAgIC8vIEFkZGluZyBidXR0b25zIGluIHRoZSBzdGVwcyBpZiBubyBidXR0b25zIGFyZSBkZWZpbmVkXG4gICAgICBpZiAoIXN0ZXAuYnV0dG9ucyB8fCBzdGVwLmJ1dHRvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICBzdGVwLmJ1dHRvbnMgPSBbbmV4dEJ1dHRvbl07XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IHRvdGFsU3RlcHMgLSAxKSB7XG4gICAgICAgICAgLy8gbGFzdCBzdGVwXG4gICAgICAgICAgc3RlcC5idXR0b25zID0gW2JhY2tCdXR0b24sIGZpbmlzaEJ1dHRvbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RlcC5idXR0b25zID0gW2JhY2tCdXR0b24sIG5leHRCdXR0b25dO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrcyBcImFkdmFuY2VPblwiIHRvIG92ZXJyaWRlIGxpc3RlbmVyc1xuICAgICAgbGV0IGFkdmFuY2VPbjogSVRvdXJFdmVudE9uW10gfCBJVG91ckV2ZW50T24gPSBzdGVwLmFkdmFuY2VPbjtcbiAgICAgIC8vIHJlbW92ZSB0aGUgc2hlcGhlcmQgXCJhZHZhbmNlT25cIiBpbmZhdm9yIG9mIG91cnMgaWYgdGhlIGV2ZW50IGlzIHBhcnQgb2Ygb3VyIGxpc3RcbiAgICAgIGlmIChcbiAgICAgICAgKHR5cGVvZiBhZHZhbmNlT24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkoYWR2YW5jZU9uKSAmJlxuICAgICAgICAgIGFkdmFuY2VPbi5ldmVudCAmJlxuICAgICAgICAgIG92ZXJyaWRkZW5FdmVudHMuaW5kZXhPZihhZHZhbmNlT24uZXZlbnQuc3BsaXQoJy4nKVswXSkgPiAtMSkgfHxcbiAgICAgICAgYWR2YW5jZU9uIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICkge1xuICAgICAgICBzdGVwLmFkdmFuY2VPbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgc3RlcC5idXR0b25zID1cbiAgICAgICAgICBzdGVwLmFkdmFuY2VPbk9wdGlvbnMgJiYgc3RlcC5hZHZhbmNlT25PcHRpb25zLmFsbG93R29CYWNrXG4gICAgICAgICAgICA/IFtiYWNrQnV0dG9uLCB2b2lkQnV0dG9uXVxuICAgICAgICAgICAgOiBbdm9pZEJ1dHRvbl07XG4gICAgICB9XG4gICAgICAvLyBhZGRzIGEgZGVmYXVsdCBiZWZvcmVTaG93UHJvbWlzZSBmdW5jdGlvblxuICAgICAgc3RlcC5iZWZvcmVTaG93UHJvbWlzZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAodmFsdWU/OiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsQ2FwYWJpbGl0aWVzU2V0dXA6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWR2YW5jZU9uICYmICFzdGVwLmFkdmFuY2VPbikge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWR2YW5jZU9uKSkge1xuICAgICAgICAgICAgICAgIGFkdmFuY2VPbiA9IFthZHZhbmNlT25dO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgYWR2YW5jZUFyciQ6IFN1YmplY3Q8dm9pZD5bXSA9IFtdO1xuICAgICAgICAgICAgICBhZHZhbmNlT24uZm9yRWFjaCgoXzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWR2YW5jZUV2ZW50JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgICAgICAgICAgICAgYWR2YW5jZUFyciQucHVzaChhZHZhbmNlRXZlbnQkKTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIHN0YXJ0IGEgdGltZXIgb2YgYXR0ZW1wdHMgdG8gZmluZCBhbiBlbGVtZW50IGluIHRoZSBkb21cbiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRXZlbnQoXG4gICAgICAgICAgICAgICAgICBfLFxuICAgICAgICAgICAgICAgICAgc3RlcC5hZHZhbmNlT25PcHRpb25zLFxuICAgICAgICAgICAgICAgICAgYWR2YW5jZUV2ZW50JCxcbiAgICAgICAgICAgICAgICAgIGRlc3Ryb3llZEV2ZW50JFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBhZHZhbmNlU3ViczogU3Vic2NyaXB0aW9uID0gZm9ya0pvaW4oLi4uYWR2YW5jZUFyciQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKG1lcmdlKGRlc3Ryb3llZEV2ZW50JCwgYmFja0V2ZW50JCkpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBhZHZhbmNlIHRvIGEgc3BlY2lmaWMgc3RlcCwgZWxzZSBhZHZhbmNlIHRvIG5leHQgc3RlcFxuICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAuYWR2YW5jZU9uT3B0aW9ucyAmJiBzdGVwLmFkdmFuY2VPbk9wdGlvbnMuanVtcFRvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hlcGhlcmRUb3VyLnNob3coc3RlcC5hZHZhbmNlT25PcHRpb25zLmp1bXBUbyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoZXBoZXJkVG91ci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmb3J3YXJkRXZlbnQkLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgIGFkdmFuY2VTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGFib3J0T24gd2FzIHBhc3NlZCBvbiB0aGUgc3RlcCwgd2UgYmluZCB0aGUgZXZlbnQgYW5kIGV4ZWN1dGUgY29tcGxldGVcbiAgICAgICAgICAgIGlmIChzdGVwLmFib3J0T24pIHtcbiAgICAgICAgICAgICAgY29uc3QgYWJvcnRBcnIkOiBTdWJqZWN0PHZvaWQ+W10gPSBbXTtcbiAgICAgICAgICAgICAgc3RlcC5hYm9ydE9uLmZvckVhY2goKGFib3J0T246IElUb3VyRXZlbnRPbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFib3J0RXZlbnQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgICAgICAgICAgICBhYm9ydEFyciQucHVzaChhYm9ydEV2ZW50JCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmluZEV2ZW50KFxuICAgICAgICAgICAgICAgICAgYWJvcnRPbixcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIGFib3J0RXZlbnQkLFxuICAgICAgICAgICAgICAgICAgZGVzdHJveWVkRXZlbnQkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgYWJvcnRTdWJzOiBTdWJzY3JpcHRpb24gPSBtZXJnZSguLi5hYm9ydEFyciQpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWwobWVyZ2UoZGVzdHJveWVkRXZlbnQkLCBiYWNrRXZlbnQkLCBmb3J3YXJkRXZlbnQkKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNoZXBoZXJkVG91ci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgYWJvcnRTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IF9zdG9wVGltZXIkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgICAgICBjb25zdCBfcmV0cmllc1JlYWNoZWQkOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gICAgICAgICAgY29uc3QgX3JldHJ5QXR0ZW1wdHMkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9XG4gICAgICAgICAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oLTEpO1xuXG4gICAgICAgICAgbGV0IGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgLy8gY2hlY2tzIGlmIFwiYXR0YWNoVG9cIiBpcyBhIHN0cmluZyBvciBhbiBvYmplY3QgdG8gZ2V0IHRoZSBpZCBvZiBhbiBlbGVtZW50XG4gICAgICAgICAgaWYgKHR5cGVvZiBzdGVwLmF0dGFjaFRvID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWQgPSBzdGVwLmF0dGFjaFRvO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2Ygc3RlcC5hdHRhY2hUbyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiBzdGVwLmF0dGFjaFRvLmVsZW1lbnQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZCA9IHN0ZXAuYXR0YWNoVG8uZWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhbiBpZCBhcyBhIHN0cmluZyBpbiBlaXRoZXIgY2FzZSwgd2UgdXNlIGl0ICh3ZSBpZ25vcmUgaXQgaWYgaXRzIEhUTUxFbGVtZW50KVxuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgLy8gaWYgY3VycmVudCBzdGVwIGlzIHRoZSBmaXJzdCBzdGVwIG9mIHRoZSB0b3VyLCB3ZSBzZXQgdGhlIGJ1dHRvbnMgdG8gYmUgb25seSBcIm5leHRcIlxuICAgICAgICAgICAgLy8gd2UgaGFkIHRvIHVzZSBgYW55YCBzaW5jZSB0aGUgdG91ciBkb2VzbnQgZXhwb3NlIHRoZSBzdGVwcyBpbiBhbnkgZmFzaGlvbiBub3IgYSB3YXkgdG8gY2hlY2sgaWYgd2UgaGF2ZSBtb2RpZmllZCB0aGVtIGF0IGFsbFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnNoZXBoZXJkVG91ci5nZXRDdXJyZW50U3RlcCgpID09PVxuICAgICAgICAgICAgICAoPGFueT50aGlzLnNoZXBoZXJkVG91cikuc3RlcHNbMF1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNoZXBoZXJkVG91ci5nZXRDdXJyZW50U3RlcCgpPy51cGRhdGVTdGVwT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgYnV0dG9uczogb3JpZ2luYWxTdGVwc1tpbmRleF0uYWR2YW5jZU9uXG4gICAgICAgICAgICAgICAgICA/IFt2b2lkQnV0dG9uXVxuICAgICAgICAgICAgICAgICAgOiBbbmV4dEJ1dHRvbl0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdG8gdGhlIGF0dGVtcHRzIG9ic2VydmFibGUgdG8gbm90aWZ5IGRlZXZlbG9wZXIgd2hlbiBudW1iZXIgaGFzIGJlZW4gcmVhY2hlZFxuICAgICAgICAgICAgX3JldHJ5QXR0ZW1wdHMkXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNraXAoMSksXG4gICAgICAgICAgICAgICAgc2tpcFdoaWxlKCh2YWw6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzdGVwLmF0dGFjaFRvT3B0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICBzdGVwLmF0dGFjaFRvT3B0aW9ucy5yZXRyaWVzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsIDwgc3RlcC5hdHRhY2hUb09wdGlvbnMucmV0cmllcztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwgPCBTSEVQSEVSRF9ERUZBVUxUX0ZJTkRfQVRURU1QVFM7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKG1lcmdlKF9zdG9wVGltZXIkLmFzT2JzZXJ2YWJsZSgpLCBkZXN0cm95ZWRFdmVudCQpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGF0dGVtcHRzOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBfcmV0cmllc1JlYWNoZWQkLm5leHQoMSk7XG4gICAgICAgICAgICAgICAgX3JldHJpZXNSZWFjaGVkJC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIC8vIGlmIGF0dGVtcHRzIGhhdmUgYmVlbiByZWFjaGVkLCB3ZSBjaGVjayBcInNraXBJZk5vdEZvdW5kXCIgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBzdGVwXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3RlcC5hdHRhY2hUb09wdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgIHN0ZXAuYXR0YWNoVG9PcHRpb25zLnNraXBJZk5vdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBnZXQgdG8gdGhpcyBzdGVwIGNvbWluZyBiYWNrIGZyb20gYSBzdGVwIGFuZCBpdCB3YXNudCBmb3VuZFxuICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBlaXRoZXIgY2hlY2sgaWYgaXRzIHRoZSBmaXJzdCBzdGVwIGFuZCB0cnkgZ29pbmcgZm9yd2FyZFxuICAgICAgICAgICAgICAgICAgLy8gb3Igd2Uga2VlcCBnb2luZyBiYWNrIHVudGlsIHdlIGZpbmQgYSBzdGVwIHRoYXQgYWN0dWFsbHkgZXhpc3RzXG4gICAgICAgICAgICAgICAgICBpZiAoX2JhY2tGbG93KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnNoZXBoZXJkVG91cikuc3RlcHMuaW5kZXhPZihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hlcGhlcmRUb3VyLmdldEN1cnJlbnRTdGVwKClcbiAgICAgICAgICAgICAgICAgICAgICApID09PSAwXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hlcGhlcmRUb3VyLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoZXBoZXJkVG91ci5iYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2JhY2tGbG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBkZXN0cm95cyBjdXJyZW50IHN0ZXAgaWYgd2UgbmVlZCB0byBza2lwIGl0IHRvIHJlbW92ZSBpdCBmcm9tIHRoZSB0b3VyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gdGhpcy5zaGVwaGVyZFRvdXIuZ2V0Q3VycmVudFN0ZXAoKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ZXA/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGVwaGVyZFRvdXIubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoZXBoZXJkVG91ci5yZW1vdmVTdGVwKGN1cnJlbnRTdGVwPy5pZCA/PyAnJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwLmF0dGFjaFRvT3B0aW9ucyAmJiBzdGVwLmF0dGFjaFRvT3B0aW9ucy5lbHNlKSB7XG4gICAgICAgICAgICAgICAgICAvLyBpZiBcInNraXBJZk5vdEZvdW5kXCIgaXMgbm90IHRydWUsIHRoZW4gd2UgY2hlY2sgaWYgXCJlbHNlXCIgaGFzIGJlZW4gc2V0IHRvIGp1bXAgdG8gYSBzcGVjaWZpYyBzdGVwXG4gICAgICAgICAgICAgICAgICB0aGlzLnNoZXBoZXJkVG91ci5zaG93KHN0ZXAuYXR0YWNoVG9PcHRpb25zLmVsc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICBgUmV0cmllcyByZWFjaGVkIHRyeWluZyB0byBmaW5kICR7aWR9LiBSZXRyaWVkICAke2F0dGVtcHRzfSB0aW1lcy5gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgLy8gZWxzZSB3ZSBzaG93IHRoZSBzdGVwIHJlZ2FyZGxlc3NcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyB3ZSBzdGFydCBhIHRpbWVyIG9mIGF0dGVtcHRzIHRvIGZpbmQgYW4gZWxlbWVudCBpbiB0aGUgZG9tXG4gICAgICAgICAgICB0aW1lcihcbiAgICAgICAgICAgICAgKHN0ZXAuYXR0YWNoVG9PcHRpb25zICYmIHN0ZXAuYXR0YWNoVG9PcHRpb25zLnRpbWVCZWZvcmVTaG93KSB8fFxuICAgICAgICAgICAgICAgIFNIRVBIRVJEX0RFRkFVTFRfRklORF9USU1FX0JFRk9SRV9TSE9XLFxuICAgICAgICAgICAgICAoc3RlcC5hdHRhY2hUb09wdGlvbnMgJiYgc3RlcC5hdHRhY2hUb09wdGlvbnMuaW50ZXJ2YWwpIHx8XG4gICAgICAgICAgICAgICAgU0hFUEhFUkRfREVGQVVMVF9GSU5EX0lOVEVSVkFMXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIHRoZSB0aW1lciB3aWxsIGNvbnRpbnVlIGVpdGhlciB1bnRpbCB3ZSBmaW5kIHRoZSBlbGVtZW50IG9yIHRoZSBudW1iZXIgb2YgYXR0ZW1wdHMgaGFzIGJlZW4gcmVhY2hlZFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbChtZXJnZShfc3RvcFRpbWVyJCwgX3JldHJpZXNSZWFjaGVkJCwgZGVzdHJveWVkRXZlbnQkKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpZCA/PyAnJyk7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaGFzIGJlZW4gZm91bmQsIHdlIHN0b3AgdGhlIHRpbWVyIGFuZCByZXNvbHZlIHRoZSBwcm9taXNlXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgIF9zdG9wVGltZXIkLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgIF9zdG9wVGltZXIkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQ2FwYWJpbGl0aWVzU2V0dXAoKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgX3JldHJ5QXR0ZW1wdHMkLm5leHQoX3JldHJ5QXR0ZW1wdHMkLnZhbHVlICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gc3RvcCBmaW5kIGludGVydmFsIGlmIHVzZXIgc3RvcHMgdGhlIHRvdXJcbiAgICAgICAgICAgIGRlc3Ryb3llZEV2ZW50JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBfc3RvcFRpbWVyJC5uZXh0KCk7XG4gICAgICAgICAgICAgIF9zdG9wVGltZXIkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIF9yZXRyaWVzUmVhY2hlZCQubmV4dCgxKTtcbiAgICAgICAgICAgICAgX3JldHJpZXNSZWFjaGVkJC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlc29sdmUgb2JzZXJ2YWJsZSB1bnRpbCB0aGUgdGltZUJlZm9yZVNob3cgaGFzIHBhc3NzZWQgb3IgdXNlIGRlZmF1bHRcbiAgICAgICAgICAgIHRpbWVyKFxuICAgICAgICAgICAgICAoc3RlcC5hdHRhY2hUb09wdGlvbnMgJiYgc3RlcC5hdHRhY2hUb09wdGlvbnMudGltZUJlZm9yZVNob3cpIHx8XG4gICAgICAgICAgICAgICAgU0hFUEhFUkRfREVGQVVMVF9GSU5EX1RJTUVfQkVGT1JFX1NIT1dcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKG1lcmdlKGRlc3Ryb3llZEV2ZW50JCkpKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIHByaXZhdGUgX2JpbmRFdmVudChcbiAgICBldmVudE9uOiBJVG91ckV2ZW50T24sXG4gICAgZXZlbnRPbk9wdGlvbnM6IElUb3VyRXZlbnRPbk9wdGlvbnMgfCB1bmRlZmluZWQsXG4gICAgZXZlbnQkOiBTdWJqZWN0PHZvaWQ+LFxuICAgIGRlc3Ryb3llZEV2ZW50JDogU3ViamVjdDx2b2lkPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGV2ZW50T24uc2VsZWN0b3IgPz8gJyc7XG4gICAgY29uc3QgZXZlbnQgPSBldmVudE9uLmV2ZW50O1xuICAgIC8vIHdlIHN0YXJ0IGEgdGltZXIgb2YgYXR0ZW1wdHMgdG8gZmluZCBhbiBlbGVtZW50IGluIHRoZSBkb21cbiAgICBjb25zdCB0aW1lclN1YnM6IFN1YnNjcmlwdGlvbiA9IHRpbWVyKFxuICAgICAgKGV2ZW50T25PcHRpb25zICYmIGV2ZW50T25PcHRpb25zLnRpbWVCZWZvcmVTaG93KSB8fFxuICAgICAgICBTSEVQSEVSRF9ERUZBVUxUX0ZJTkRfVElNRV9CRUZPUkVfU0hPVyxcbiAgICAgIChldmVudE9uT3B0aW9ucyAmJiBldmVudE9uT3B0aW9ucy5pbnRlcnZhbCkgfHxcbiAgICAgICAgU0hFUEhFUkRfREVGQVVMVF9GSU5EX0lOVEVSVkFMXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKGRlc3Ryb3llZEV2ZW50JCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCBoYXMgYmVlbiBmb3VuZCwgd2Ugc3RvcCB0aGUgdGltZXIgYW5kIHJlc29sdmUgdGhlIHByb21pc2VcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICB0aW1lclN1YnMudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgIGlmIChldmVudCA9PT0gSVRvdXJFdmVudC5hZGRlZCkge1xuICAgICAgICAgICAgLy8gaWYgZXZlbnQgaXMgXCJBZGRlZFwiIHRyaWdnZXIgYSBzb29uIGFzIHRoaXMgaXMgYXR0YWNoZWQuXG4gICAgICAgICAgICBldmVudCQubmV4dCgpO1xuICAgICAgICAgICAgZXZlbnQkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGV2ZW50ID09PSBJVG91ckV2ZW50LmNsaWNrIHx8XG4gICAgICAgICAgICBldmVudCA9PT0gSVRvdXJFdmVudC5wb2ludGVyb3ZlciB8fFxuICAgICAgICAgICAgKGV2ZW50ICYmIGV2ZW50LmluZGV4T2YoSVRvdXJFdmVudC5rZXl1cCkgPiAtMSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHdlIHVzZSBub3JtYWwgbGlzdGVuZXJzIGZvciBtb3VzZWV2ZW50c1xuICAgICAgICAgICAgY29uc3QgbWFpbkV2ZW50ID0gZXZlbnQ/LnNwbGl0KCcuJylbMF07XG4gICAgICAgICAgICBjb25zdCBzdWJFdmVudCA9IGV2ZW50Py5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgZnJvbUV2ZW50KGVsZW1lbnQsIG1haW5FdmVudClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBvbmx5IHRyaWdnZXIgaWYgdGhlIGV2ZW50IGlzIGEga2V5Ym9hcmQgZXZlbnQgYW5kIHBhcnQgb2Ygb3V0IGxpc3RcbiAgICAgICAgICAgICAgICAgIGlmICgkZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlFdmVudHMuZ2V0KCRldmVudC5rZXlDb2RlKSA9PT0gc3ViRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwobWVyZ2UoZXZlbnQkLmFzT2JzZXJ2YWJsZSgpLCBkZXN0cm95ZWRFdmVudCQpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50JC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09IElUb3VyRXZlbnQucmVtb3ZlZCkge1xuICAgICAgICAgICAgLy8gYW5kIHdlIHdpbGwgdXNlIE11dGF0aW9uT2JzZXJ2ZXIgZm9yIERPTSBldmVudHNcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudCQubmV4dCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50JC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHN0b3AgbGlzdGVuaW5pbmcgaWYgdG91ciBpcyBjbG9zZWRcbiAgICAgICAgICAgIGRlc3Ryb3llZEV2ZW50JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIG9ic2VydmUgZm9yIGFueSBET00gaW50ZXJhY3Rpb24gaW4gdGhlIGVsZW1lbnRcbiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwge1xuICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Router, ActivatedRoute, NavigationStart, } from '@angular/router';\nimport { tap, map, filter } from 'rxjs/operators';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { CovalentGuidedTour, } from './guided.tour';\nimport * as i0 from \"@angular/core\";\n/**\n *  Router enabled Shepherd tour\n */\nexport var TourEvents;\n(function (TourEvents) {\n    TourEvents[\"complete\"] = \"complete\";\n    TourEvents[\"cancel\"] = \"cancel\";\n    TourEvents[\"hide\"] = \"hide\";\n    TourEvents[\"show\"] = \"show\";\n    TourEvents[\"start\"] = \"start\";\n    TourEvents[\"active\"] = \"active\";\n    TourEvents[\"inactive\"] = \"inactive\";\n})(TourEvents || (TourEvents = {}));\nexport class CovalentGuidedTourService extends CovalentGuidedTour {\n    _router = inject(Router);\n    _route = inject(ActivatedRoute);\n    _httpClient = inject(HttpClient);\n    _toursMap = new Map();\n    _tourStepURLs = new Map();\n    constructor() {\n        super();\n        const _router = this._router;\n        _router.events\n            .pipe(filter((event) => event instanceof NavigationStart &&\n            event.navigationTrigger === 'popstate'))\n            .subscribe(() => {\n            if (this.shepherdTour.isActive()) {\n                this.shepherdTour.cancel();\n            }\n        });\n    }\n    tourEvent$(str) {\n        return fromEvent(this.shepherdTour, str);\n    }\n    async registerTour(tourName, tour) {\n        const guidedTour = typeof tour === 'string' ? await this._loadTour(tour) : tour;\n        this._toursMap.set(tourName, guidedTour);\n    }\n    startTour(tourName) {\n        const guidedTour = this._getTour(tourName);\n        this.finish();\n        if (guidedTour && guidedTour.steps && guidedTour.steps.length) {\n            // remove steps from tour since we need to preprocess them first\n            this.newTour(Object.assign({}, guidedTour, { steps: undefined }));\n            const tourInstance = this.shepherdTour.addSteps(this._configureRoutesForSteps(this._prepareTour(guidedTour.steps, guidedTour.finishButtonText)));\n            // init route transition if step URL is different then the current location.\n            this.tourEvent$(TourEvents.show).subscribe((tourEvent) => {\n                const currentURL = this._router.url.split(/[?#]/)[0];\n                const { step: { id, options }, } = tourEvent;\n                if (this._tourStepURLs.has(id)) {\n                    const stepRoute = this._tourStepURLs.get(id);\n                    if (stepRoute !== currentURL) {\n                        this._router.navigate([stepRoute]);\n                    }\n                }\n                else {\n                    if (options && options.routing) {\n                        this._tourStepURLs.set(id, options.routing.route);\n                    }\n                    else {\n                        this._tourStepURLs.set(id, currentURL);\n                    }\n                }\n            });\n            this.start();\n            return tourInstance;\n        }\n        else {\n            // tslint:disable-next-line:no-console\n            console.warn(`Tour ${tourName} does not exist. Please try another tour.`);\n            return undefined;\n        }\n    }\n    // Finds the right registered tour by using queryParams\n    // finishes any other tour and starts the new one.\n    initializeOnQueryParams(queryParam = 'tour') {\n        return this._route.queryParamMap.pipe(debounceTime(100), tap((params) => {\n            const tourParam = params.get(queryParam);\n            if (tourParam) {\n                this.startTour(tourParam);\n                // get current search parameters\n                const searchParams = new URLSearchParams(window.location.search);\n                // delete tour queryParam\n                searchParams.delete(queryParam);\n                // build new URL string without it\n                let url = window.location.protocol +\n                    '//' +\n                    window.location.host +\n                    window.location.pathname;\n                if (searchParams.toString()) {\n                    url += '?' + searchParams.toString();\n                }\n                // replace state in history without triggering a navigation\n                window.history.replaceState({ path: url }, '', url);\n            }\n        }));\n    }\n    setNextBtnDisability(stepId, isDisabled) {\n        if (this.shepherdTour.getById(stepId)) {\n            const stepOptions = this.shepherdTour.getById(stepId)\n                .options;\n            stepOptions.buttons?.forEach((button) => {\n                if (button.text === 'chevron_right') {\n                    button.disabled = isDisabled;\n                }\n            });\n            this.shepherdTour.getById(stepId)?.updateStepOptions(stepOptions);\n        }\n    }\n    async _loadTour(tourUrl) {\n        const request = this._httpClient.get(tourUrl);\n        try {\n            return await request\n                .pipe(map((resultSet) => {\n                return JSON.parse(JSON.stringify(resultSet));\n            }))\n                .toPromise();\n        }\n        catch {\n            return undefined;\n        }\n    }\n    _getTour(key) {\n        return this._toursMap.get(key);\n    }\n    _configureRoutesForSteps(routedSteps) {\n        routedSteps.forEach((step) => {\n            if (step.routing) {\n                const route = step.routing.route;\n                // if there is a beforeShowPromise, then we save it and call it after the navigation\n                if (step.beforeShowPromise) {\n                    const beforeShowPromise = step.beforeShowPromise;\n                    step.beforeShowPromise = () => {\n                        return this._router\n                            .navigate([route], step.routing?.extras)\n                            .then(() => {\n                            return beforeShowPromise();\n                        });\n                    };\n                }\n                else {\n                    step.beforeShowPromise = () => this._router.navigate([route]);\n                }\n            }\n        });\n        return routedSteps;\n    }\n    static ɵfac = function CovalentGuidedTourService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CovalentGuidedTourService)(); };\n    static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: CovalentGuidedTourService, factory: CovalentGuidedTourService.ɵfac });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CovalentGuidedTourService, [{\n        type: Injectable\n    }], () => [], null); })();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpZGVkLXRvdXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1ndWlkZWQtdG91ci9zcmMvbGliL2d1aWRlZC10b3VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxNQUFNLEVBQ04sY0FBYyxFQUdkLGVBQWUsR0FFaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsa0JBQWtCLEdBSW5CLE1BQU0sZUFBZSxDQUFDOztBQWN2Qjs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLFVBUVg7QUFSRCxXQUFZLFVBQVU7SUFDcEIsbUNBQXFCLENBQUE7SUFDckIsK0JBQWlCLENBQUE7SUFDakIsMkJBQWEsQ0FBQTtJQUNiLDJCQUFhLENBQUE7SUFDYiw2QkFBZSxDQUFBO0lBQ2YsK0JBQWlCLENBQUE7SUFDakIsbUNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVJXLFVBQVUsS0FBVixVQUFVLFFBUXJCO0FBU0QsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGtCQUFrQjtJQUN2RCxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqQyxTQUFTLEdBQTZC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QUFDLENBQUMsQ0FBQztRQUVILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7bUhBdEtVLHlCQUF5QjtnRUFBekIseUJBQXlCLFdBQXpCLHlCQUF5Qjs7aUZBQXpCLHlCQUF5QjtjQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgUm91dGVyLFxuICBBY3RpdmF0ZWRSb3V0ZSxcbiAgUGFyYW1NYXAsXG4gIE5hdmlnYXRpb25FeHRyYXMsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgRXZlbnQgYXMgTmF2aWdhdGlvbkV2ZW50LFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IFNoZXBoZXJkIGZyb20gJ3NoZXBoZXJkLmpzJztcbmltcG9ydCB7IHRhcCwgbWFwLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENvdmFsZW50R3VpZGVkVG91cixcbiAgSVRvdXJTdGVwLFxuICBJVG91ck9wdGlvbnMsXG4gIFRvdXJTdGVwQnV0dG9uLFxufSBmcm9tICcuL2d1aWRlZC50b3VyJztcblxuZXhwb3J0IGludGVyZmFjZSBJR3VpZGVkVG91ciBleHRlbmRzIElUb3VyT3B0aW9ucyB7XG4gIHN0ZXBzOiBJR3VpZGVkVG91clN0ZXBbXTtcbiAgZmluaXNoQnV0dG9uVGV4dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3VpZGVkVG91clN0ZXAgZXh0ZW5kcyBJVG91clN0ZXAge1xuICByb3V0aW5nPzoge1xuICAgIHJvdXRlOiBzdHJpbmc7XG4gICAgZXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcztcbiAgfTtcbn1cblxuLyoqXG4gKiAgUm91dGVyIGVuYWJsZWQgU2hlcGhlcmQgdG91clxuICovXG5leHBvcnQgZW51bSBUb3VyRXZlbnRzIHtcbiAgY29tcGxldGUgPSAnY29tcGxldGUnLFxuICBjYW5jZWwgPSAnY2FuY2VsJyxcbiAgaGlkZSA9ICdoaWRlJyxcbiAgc2hvdyA9ICdzaG93JyxcbiAgc3RhcnQgPSAnc3RhcnQnLFxuICBhY3RpdmUgPSAnYWN0aXZlJyxcbiAgaW5hY3RpdmUgPSAnaW5hY3RpdmUnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHdWlkZWRUb3VyRXZlbnQge1xuICBzdGVwOiBhbnk7XG4gIHByZXZpb3VzOiBhbnk7XG4gIHRvdXI6IGFueTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvdmFsZW50R3VpZGVkVG91clNlcnZpY2UgZXh0ZW5kcyBDb3ZhbGVudEd1aWRlZFRvdXIge1xuICBwcml2YXRlIF9yb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBfcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIF9odHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXG4gIHByaXZhdGUgX3RvdXJzTWFwOiBNYXA8c3RyaW5nLCBJR3VpZGVkVG91cj4gPSBuZXcgTWFwPHN0cmluZywgSUd1aWRlZFRvdXI+KCk7XG4gIHByaXZhdGUgX3RvdXJTdGVwVVJMczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgX3JvdXRlciA9IHRoaXMuX3JvdXRlcjtcblxuICAgIF9yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIChldmVudDogTmF2aWdhdGlvbkV2ZW50KSA9PlxuICAgICAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgJiZcbiAgICAgICAgICAgIGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNoZXBoZXJkVG91ci5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgdGhpcy5zaGVwaGVyZFRvdXIuY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgdG91ckV2ZW50JChzdHI6IFRvdXJFdmVudHMpOiBPYnNlcnZhYmxlPElHdWlkZWRUb3VyRXZlbnQ+IHtcbiAgICByZXR1cm4gZnJvbUV2ZW50KHRoaXMuc2hlcGhlcmRUb3VyLCBzdHIpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXJUb3VyKFxuICAgIHRvdXJOYW1lOiBzdHJpbmcsXG4gICAgdG91cjogSUd1aWRlZFRvdXIgfCBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGd1aWRlZFRvdXI6IElHdWlkZWRUb3VyID1cbiAgICAgIHR5cGVvZiB0b3VyID09PSAnc3RyaW5nJyA/IGF3YWl0IHRoaXMuX2xvYWRUb3VyKHRvdXIpIDogdG91cjtcbiAgICB0aGlzLl90b3Vyc01hcC5zZXQodG91ck5hbWUsIGd1aWRlZFRvdXIpO1xuICB9XG5cbiAgc3RhcnRUb3VyKHRvdXJOYW1lOiBzdHJpbmcpOiBTaGVwaGVyZC5Ub3VyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBndWlkZWRUb3VyID0gdGhpcy5fZ2V0VG91cih0b3VyTmFtZSk7XG4gICAgdGhpcy5maW5pc2goKTtcbiAgICBpZiAoZ3VpZGVkVG91ciAmJiBndWlkZWRUb3VyLnN0ZXBzICYmIGd1aWRlZFRvdXIuc3RlcHMubGVuZ3RoKSB7XG4gICAgICAvLyByZW1vdmUgc3RlcHMgZnJvbSB0b3VyIHNpbmNlIHdlIG5lZWQgdG8gcHJlcHJvY2VzcyB0aGVtIGZpcnN0XG4gICAgICB0aGlzLm5ld1RvdXIoT2JqZWN0LmFzc2lnbih7fSwgZ3VpZGVkVG91ciwgeyBzdGVwczogdW5kZWZpbmVkIH0pKTtcbiAgICAgIGNvbnN0IHRvdXJJbnN0YW5jZTogU2hlcGhlcmQuVG91ciA9IHRoaXMuc2hlcGhlcmRUb3VyLmFkZFN0ZXBzKFxuICAgICAgICB0aGlzLl9jb25maWd1cmVSb3V0ZXNGb3JTdGVwcyhcbiAgICAgICAgICB0aGlzLl9wcmVwYXJlVG91cihndWlkZWRUb3VyLnN0ZXBzLCBndWlkZWRUb3VyLmZpbmlzaEJ1dHRvblRleHQpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIC8vIGluaXQgcm91dGUgdHJhbnNpdGlvbiBpZiBzdGVwIFVSTCBpcyBkaWZmZXJlbnQgdGhlbiB0aGUgY3VycmVudCBsb2NhdGlvbi5cbiAgICAgIHRoaXMudG91ckV2ZW50JChUb3VyRXZlbnRzLnNob3cpLnN1YnNjcmliZShcbiAgICAgICAgKHRvdXJFdmVudDogSUd1aWRlZFRvdXJFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRVUkw6IHN0cmluZyA9IHRoaXMuX3JvdXRlci51cmwuc3BsaXQoL1s/I10vKVswXTtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBzdGVwOiB7IGlkLCBvcHRpb25zIH0sXG4gICAgICAgICAgfSA9IHRvdXJFdmVudDtcbiAgICAgICAgICBpZiAodGhpcy5fdG91clN0ZXBVUkxzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBSb3V0ZSA9IHRoaXMuX3RvdXJTdGVwVVJMcy5nZXQoaWQpO1xuICAgICAgICAgICAgaWYgKHN0ZXBSb3V0ZSAhPT0gY3VycmVudFVSTCkge1xuICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3N0ZXBSb3V0ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJvdXRpbmcpIHtcbiAgICAgICAgICAgICAgdGhpcy5fdG91clN0ZXBVUkxzLnNldChpZCwgb3B0aW9ucy5yb3V0aW5nLnJvdXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX3RvdXJTdGVwVVJMcy5zZXQoaWQsIGN1cnJlbnRVUkwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgICByZXR1cm4gdG91ckluc3RhbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKGBUb3VyICR7dG91ck5hbWV9IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgdHJ5IGFub3RoZXIgdG91ci5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gRmluZHMgdGhlIHJpZ2h0IHJlZ2lzdGVyZWQgdG91ciBieSB1c2luZyBxdWVyeVBhcmFtc1xuICAvLyBmaW5pc2hlcyBhbnkgb3RoZXIgdG91ciBhbmQgc3RhcnRzIHRoZSBuZXcgb25lLlxuICBpbml0aWFsaXplT25RdWVyeVBhcmFtcyhxdWVyeVBhcmFtID0gJ3RvdXInKTogT2JzZXJ2YWJsZTxQYXJhbU1hcD4ge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZS5xdWVyeVBhcmFtTWFwLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgIHRhcCgocGFyYW1zOiBQYXJhbU1hcCkgPT4ge1xuICAgICAgICBjb25zdCB0b3VyUGFyYW0gPSBwYXJhbXMuZ2V0KHF1ZXJ5UGFyYW0pO1xuICAgICAgICBpZiAodG91clBhcmFtKSB7XG4gICAgICAgICAgdGhpcy5zdGFydFRvdXIodG91clBhcmFtKTtcbiAgICAgICAgICAvLyBnZXQgY3VycmVudCBzZWFyY2ggcGFyYW1ldGVyc1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gsXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvLyBkZWxldGUgdG91ciBxdWVyeVBhcmFtXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLmRlbGV0ZShxdWVyeVBhcmFtKTtcbiAgICAgICAgICAvLyBidWlsZCBuZXcgVVJMIHN0cmluZyB3aXRob3V0IGl0XG4gICAgICAgICAgbGV0IHVybDogc3RyaW5nID1cbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArXG4gICAgICAgICAgICAnLy8nICtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgICBpZiAoc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHVybCArPSAnPycgKyBzZWFyY2hQYXJhbXMudG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVwbGFjZSBzdGF0ZSBpbiBoaXN0b3J5IHdpdGhvdXQgdHJpZ2dlcmluZyBhIG5hdmlnYXRpb25cbiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoeyBwYXRoOiB1cmwgfSwgJycsIHVybCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBzZXROZXh0QnRuRGlzYWJpbGl0eShzdGVwSWQ6IHN0cmluZywgaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNoZXBoZXJkVG91ci5nZXRCeUlkKHN0ZXBJZCkpIHtcbiAgICAgIGNvbnN0IHN0ZXBPcHRpb25zOiBJVG91clN0ZXAgPSAodGhpcy5zaGVwaGVyZFRvdXIuZ2V0QnlJZChzdGVwSWQpIGFzIGFueSlcbiAgICAgICAgLm9wdGlvbnM7XG4gICAgICBzdGVwT3B0aW9ucy5idXR0b25zPy5mb3JFYWNoKChidXR0b246IFRvdXJTdGVwQnV0dG9uKSA9PiB7XG4gICAgICAgIGlmIChidXR0b24udGV4dCA9PT0gJ2NoZXZyb25fcmlnaHQnKSB7XG4gICAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNoZXBoZXJkVG91ci5nZXRCeUlkKHN0ZXBJZCk/LnVwZGF0ZVN0ZXBPcHRpb25zKHN0ZXBPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9sb2FkVG91cih0b3VyVXJsOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlcXVlc3Q6IE9ic2VydmFibGU8b2JqZWN0PiA9IHRoaXMuX2h0dHBDbGllbnQuZ2V0KHRvdXJVcmwpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVxdWVzdFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHJlc3VsdFNldDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXN1bHRTZXQpKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFRvdXIoa2V5OiBzdHJpbmcpOiBJR3VpZGVkVG91ciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdXJzTWFwLmdldChrZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlndXJlUm91dGVzRm9yU3RlcHMoXG4gICAgcm91dGVkU3RlcHM6IElHdWlkZWRUb3VyU3RlcFtdLFxuICApOiBJR3VpZGVkVG91clN0ZXBbXSB7XG4gICAgcm91dGVkU3RlcHMuZm9yRWFjaCgoc3RlcDogSUd1aWRlZFRvdXJTdGVwKSA9PiB7XG4gICAgICBpZiAoc3RlcC5yb3V0aW5nKSB7XG4gICAgICAgIGNvbnN0IHJvdXRlOiBzdHJpbmcgPSBzdGVwLnJvdXRpbmcucm91dGU7XG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgYmVmb3JlU2hvd1Byb21pc2UsIHRoZW4gd2Ugc2F2ZSBpdCBhbmQgY2FsbCBpdCBhZnRlciB0aGUgbmF2aWdhdGlvblxuICAgICAgICBpZiAoc3RlcC5iZWZvcmVTaG93UHJvbWlzZSkge1xuICAgICAgICAgIGNvbnN0IGJlZm9yZVNob3dQcm9taXNlOiAoKSA9PiBQcm9taXNlPHZvaWQ+ID0gc3RlcC5iZWZvcmVTaG93UHJvbWlzZTtcbiAgICAgICAgICBzdGVwLmJlZm9yZVNob3dQcm9taXNlID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlclxuICAgICAgICAgICAgICAubmF2aWdhdGUoW3JvdXRlXSwgc3RlcC5yb3V0aW5nPy5leHRyYXMpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlU2hvd1Byb21pc2UoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGVwLmJlZm9yZVNob3dQcm9taXNlID0gKCkgPT4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm91dGVkU3RlcHM7XG4gIH1cbn1cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CovalentGuidedTourService } from './guided-tour.service';\nimport * as i0 from \"@angular/core\";\nexport class CovalentGuidedTourModule {\n    static ɵfac = function CovalentGuidedTourModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CovalentGuidedTourModule)(); };\n    static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: CovalentGuidedTourModule });\n    static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [CovalentGuidedTourService], imports: [CommonModule] });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CovalentGuidedTourModule, [{\n        type: NgModule,\n        args: [{\n                imports: [CommonModule],\n                providers: [CovalentGuidedTourService],\n                declarations: [],\n                exports: [],\n            }]\n    }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && i0.ɵɵsetNgModuleScope(CovalentGuidedTourModule, { imports: [CommonModule] }); })();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpZGVkLXRvdXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWd1aWRlZC10b3VyL3NyYy9saWIvZ3VpZGVkLXRvdXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQVFsRSxNQUFNLE9BQU8sd0JBQXdCO2tIQUF4Qix3QkFBd0I7NERBQXhCLHdCQUF3QjtpRUFKeEIsQ0FBQyx5QkFBeUIsQ0FBQyxZQUQ1QixZQUFZOztpRkFLWCx3QkFBd0I7Y0FOcEMsUUFBUTtlQUFDO2dCQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztnQkFDdkIsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7Z0JBQ3RDLFlBQVksRUFBRSxFQUFFO2dCQUNoQixPQUFPLEVBQUUsRUFBRTthQUNaOzt3RkFDWSx3QkFBd0IsY0FMekIsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ292YWxlbnRHdWlkZWRUb3VyU2VydmljZSB9IGZyb20gJy4vZ3VpZGVkLXRvdXIuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtDb3ZhbGVudEd1aWRlZFRvdXJTZXJ2aWNlXSxcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgZXhwb3J0czogW10sXG59KVxuZXhwb3J0IGNsYXNzIENvdmFsZW50R3VpZGVkVG91ck1vZHVsZSB7fVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public_api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292YWxlbnQtZ3VpZGVkLXRvdXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItZ3VpZGVkLXRvdXIvc3JjL2NvdmFsZW50LWd1aWRlZC10b3VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0="],"names":[],"mappings":"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"}