{"version":3,"file":"ngu-carousel.mjs","sources":["../tmp-esm2022/lib/ngu-carousel/ngu-carousel.js","../tmp-esm2022/lib/symbols.js","../tmp-esm2022/lib/ngu-carousel.directive.js","../tmp-esm2022/lib/ngu-carousel/ngu-carousel-hammer-manager.js","../tmp-esm2022/lib/ngu-carousel/ngu-window-scroll-listener.js","../tmp-esm2022/lib/ngu-carousel/ngu-carousel.component.js","../tmp-esm2022/lib/ngu-item/ngu-item.component.js","../tmp-esm2022/lib/ngu-tile/ngu-tile.component.js","../tmp-esm2022/public-api.js","../tmp-esm2022/ngu-carousel.js"],"sourcesContent":["import { signal } from '@angular/core';\nexport class NguCarouselStore {\n    constructor(touch = new Touch(), vertical = new Vertical(), interval, transform = new Transfrom(), button, visibleItems, deviceType, type = 'fixed', token = '', items = 0, load = 0, deviceWidth = 0, carouselWidth = 0, itemWidth = 0, slideItems = 0, itemWidthPer = 0, itemLength = 0, currentSlide = 0, easing = 'cubic-bezier(0, 0, 0.2, 1)', speed = 200, loop = false, dexVal = 0, touchTransform = 0, isEnd = false, isFirst = signal(true), isLast = signal(false), RTL = false, point = true, velocity = 1) {\n        this.touch = touch;\n        this.vertical = vertical;\n        this.interval = interval;\n        this.transform = transform;\n        this.button = button;\n        this.visibleItems = visibleItems;\n        this.deviceType = deviceType;\n        this.type = type;\n        this.token = token;\n        this.items = items;\n        this.load = load;\n        this.deviceWidth = deviceWidth;\n        this.carouselWidth = carouselWidth;\n        this.itemWidth = itemWidth;\n        this.slideItems = slideItems;\n        this.itemWidthPer = itemWidthPer;\n        this.itemLength = itemLength;\n        this.currentSlide = currentSlide;\n        this.easing = easing;\n        this.speed = speed;\n        this.loop = loop;\n        this.dexVal = dexVal;\n        this.touchTransform = touchTransform;\n        this.isEnd = isEnd;\n        this.isFirst = isFirst;\n        this.isLast = isLast;\n        this.RTL = RTL;\n        this.point = point;\n        this.velocity = velocity;\n    }\n}\nexport class ItemsControl {\n}\nexport class Vertical {\n}\nexport class NguButton {\n}\nexport class Touch {\n}\n// This is misspelled. Must be changed to `Transform`.\nexport class Transfrom {\n    constructor(xs = 0, sm = 0, md = 0, lg = 0, all = 0) {\n        this.xs = xs;\n        this.sm = sm;\n        this.md = md;\n        this.lg = lg;\n        this.all = all;\n        this.xl = 0;\n    }\n}\n/**\n * Default values\n * {sm: 768, md: 992, lg: 1200, xl: 1200}\n *\n * Bootstrap values:\n * {sm: 576, md: 768, lg: 992, xl: 1200}\n */\nexport class Breakpoints {\n    constructor(sm = 768, md = 992, lg = 1200, xl = 1200) {\n        this.sm = sm;\n        this.md = md;\n        this.lg = lg;\n        this.xl = xl;\n    }\n}\nexport class NguCarouselConfig {\n}\nexport class NguCarouselOutletContext {\n    constructor(data) {\n        this.$implicit = data;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd1LWNhcm91c2VsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3UvY2Fyb3VzZWwvc3JjL2xpYi9uZ3UtY2Fyb3VzZWwvbmd1LWNhcm91c2VsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUNTLFFBQVEsSUFBSSxLQUFLLEVBQUUsRUFDbkIsV0FBVyxJQUFJLFFBQVEsRUFBRSxFQUN6QixRQUEyQixFQUMzQixZQUFZLElBQUksU0FBUyxFQUFFLEVBQzNCLE1BQWtCLEVBQ2xCLFlBQTJCLEVBQzNCLFVBQXVCLEVBQ3ZCLE9BQU8sT0FBTyxFQUNkLFFBQVEsRUFBRSxFQUNWLFFBQVEsQ0FBQyxFQUNULE9BQU8sQ0FBQyxFQUNSLGNBQWMsQ0FBQyxFQUNmLGdCQUFnQixDQUFDLEVBQ2pCLFlBQVksQ0FBQyxFQUNiLGFBQWEsQ0FBQyxFQUNkLGVBQWUsQ0FBQyxFQUNoQixhQUFhLENBQUMsRUFDZCxlQUFlLENBQUMsRUFDaEIsU0FBUyw0QkFBNEIsRUFDckMsUUFBUSxHQUFHLEVBQ1gsT0FBTyxLQUFLLEVBQ1osU0FBUyxDQUFDLEVBQ1YsaUJBQWlCLENBQUMsRUFDbEIsUUFBUSxLQUFLLEVBQ0osVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQ3RCLFNBQVMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUMvQixNQUFNLEtBQUssRUFDWCxRQUFRLElBQUksRUFDWixXQUFXLENBQUM7UUE1QlosVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFtQjtRQUMzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFZO1FBQ2xCLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBQzNCLGVBQVUsR0FBVixVQUFVLENBQWE7UUFDdkIsU0FBSSxHQUFKLElBQUksQ0FBVTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQUs7UUFDVixVQUFLLEdBQUwsS0FBSyxDQUFJO1FBQ1QsU0FBSSxHQUFKLElBQUksQ0FBSTtRQUNSLGdCQUFXLEdBQVgsV0FBVyxDQUFJO1FBQ2Ysa0JBQWEsR0FBYixhQUFhLENBQUk7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBSTtRQUNiLGVBQVUsR0FBVixVQUFVLENBQUk7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBSTtRQUNoQixlQUFVLEdBQVYsVUFBVSxDQUFJO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQUk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBK0I7UUFDckMsVUFBSyxHQUFMLEtBQUssQ0FBTTtRQUNYLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixXQUFNLEdBQU4sTUFBTSxDQUFJO1FBQ1YsbUJBQWMsR0FBZCxjQUFjLENBQUk7UUFDbEIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNKLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDL0IsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUNYLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFJO0lBQ2xCLENBQUM7Q0FDTDtBQUtELE1BQU0sT0FBTyxZQUFZO0NBR3hCO0FBRUQsTUFBTSxPQUFPLFFBQVE7Q0FJcEI7QUFFRCxNQUFNLE9BQU8sU0FBUztDQUdyQjtBQUVELE1BQU0sT0FBTyxLQUFLO0NBSWpCO0FBYUQsc0RBQXNEO0FBQ3RELE1BQU0sT0FBTyxTQUFTO0lBRXBCLFlBQ1MsS0FBSyxDQUFDLEVBQ04sS0FBSyxDQUFDLEVBQ04sS0FBSyxDQUFDLEVBQ04sS0FBSyxDQUFDLEVBQ04sTUFBTSxDQUFDO1FBSlAsT0FBRSxHQUFGLEVBQUUsQ0FBSTtRQUNOLE9BQUUsR0FBRixFQUFFLENBQUk7UUFDTixPQUFFLEdBQUYsRUFBRSxDQUFJO1FBQ04sT0FBRSxHQUFGLEVBQUUsQ0FBSTtRQUNOLFFBQUcsR0FBSCxHQUFHLENBQUk7UUFOVCxPQUFFLEdBQUksQ0FBQyxDQUFDO0lBT1osQ0FBQztDQUNMO0FBV0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDUyxLQUFLLEdBQUcsRUFDUixLQUFLLEdBQUcsRUFDUixLQUFLLElBQUksRUFDVCxLQUFLLElBQUk7UUFIVCxPQUFFLEdBQUYsRUFBRSxDQUFNO1FBQ1IsT0FBRSxHQUFGLEVBQUUsQ0FBTTtRQUNSLE9BQUUsR0FBRixFQUFFLENBQU87UUFDVCxPQUFFLEdBQUYsRUFBRSxDQUFPO0lBQ2YsQ0FBQztDQUNMO0FBRUQsTUFBTSxPQUFPLGlCQUFpQjtDQWtCN0I7QUEyQkQsTUFBTSxPQUFPLHdCQUF3QjtJQWFuQyxZQUFZLElBQU87UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBOZ3VDYXJvdXNlbFN0b3JlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRvdWNoID0gbmV3IFRvdWNoKCksXG4gICAgcHVibGljIHZlcnRpY2FsID0gbmV3IFZlcnRpY2FsKCksXG4gICAgcHVibGljIGludGVydmFsPzogQ2Fyb3VzZWxJbnRlcnZhbCxcbiAgICBwdWJsaWMgdHJhbnNmb3JtID0gbmV3IFRyYW5zZnJvbSgpLFxuICAgIHB1YmxpYyBidXR0b24/OiBOZ3VCdXR0b24sXG4gICAgcHVibGljIHZpc2libGVJdGVtcz86IEl0ZW1zQ29udHJvbCxcbiAgICBwdWJsaWMgZGV2aWNlVHlwZT86IERldmljZVR5cGUsXG4gICAgcHVibGljIHR5cGUgPSAnZml4ZWQnLFxuICAgIHB1YmxpYyB0b2tlbiA9ICcnLFxuICAgIHB1YmxpYyBpdGVtcyA9IDAsXG4gICAgcHVibGljIGxvYWQgPSAwLFxuICAgIHB1YmxpYyBkZXZpY2VXaWR0aCA9IDAsXG4gICAgcHVibGljIGNhcm91c2VsV2lkdGggPSAwLFxuICAgIHB1YmxpYyBpdGVtV2lkdGggPSAwLFxuICAgIHB1YmxpYyBzbGlkZUl0ZW1zID0gMCxcbiAgICBwdWJsaWMgaXRlbVdpZHRoUGVyID0gMCxcbiAgICBwdWJsaWMgaXRlbUxlbmd0aCA9IDAsXG4gICAgcHVibGljIGN1cnJlbnRTbGlkZSA9IDAsXG4gICAgcHVibGljIGVhc2luZyA9ICdjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKScsXG4gICAgcHVibGljIHNwZWVkID0gMjAwLFxuICAgIHB1YmxpYyBsb29wID0gZmFsc2UsXG4gICAgcHVibGljIGRleFZhbCA9IDAsXG4gICAgcHVibGljIHRvdWNoVHJhbnNmb3JtID0gMCxcbiAgICBwdWJsaWMgaXNFbmQgPSBmYWxzZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNGaXJzdCA9IHNpZ25hbCh0cnVlKSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNMYXN0ID0gc2lnbmFsKGZhbHNlKSxcbiAgICBwdWJsaWMgUlRMID0gZmFsc2UsXG4gICAgcHVibGljIHBvaW50ID0gdHJ1ZSxcbiAgICBwdWJsaWMgdmVsb2NpdHkgPSAxXG4gICkge31cbn1cbmV4cG9ydCB0eXBlIERldmljZVR5cGUgPSAneHMnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJyB8ICdhbGwnO1xuXG5leHBvcnQgdHlwZSBCdXR0b25WaXNpYmxlID0gJ2Rpc2FibGVkJyB8ICdoaWRlJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1zQ29udHJvbCB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmVydGljYWwge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgLy8gbnVtSGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgTmd1QnV0dG9uIHtcbiAgdmlzaWJpbGl0eT86IEJ1dHRvblZpc2libGU7XG4gIGVsYXN0aWM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUb3VjaCB7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIHN3aXBlOiBzdHJpbmc7XG4gIHZlbG9jaXR5OiBudW1iZXI7XG59XG5cbi8vIEludGVyZmFjZSBpcyBkZWNsYXJlZCB0byBwcmV2ZW50IHByb3BlcnR5LW1pbmlmaWNhdGlvblxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdWl1bml2ZXJzYWwvbmd1LWNhcm91c2VsL2lzc3Vlcy8zMjJcbmRlY2xhcmUgaW50ZXJmYWNlIFRyYW5zZm9ybUludGVyZmFjZSB7XG4gIHhzOiBudW1iZXI7XG4gIHNtOiBudW1iZXI7XG4gIG1kOiBudW1iZXI7XG4gIGxnOiBudW1iZXI7XG4gIHhsPzogbnVtYmVyO1xuICBhbGw6IG51bWJlcjtcbn1cblxuLy8gVGhpcyBpcyBtaXNzcGVsbGVkLiBNdXN0IGJlIGNoYW5nZWQgdG8gYFRyYW5zZm9ybWAuXG5leHBvcnQgY2xhc3MgVHJhbnNmcm9tIGltcGxlbWVudHMgVHJhbnNmb3JtSW50ZXJmYWNlIHtcbiAgcHVibGljIHhsPyA9IDA7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB4cyA9IDAsXG4gICAgcHVibGljIHNtID0gMCxcbiAgICBwdWJsaWMgbWQgPSAwLFxuICAgIHB1YmxpYyBsZyA9IDAsXG4gICAgcHVibGljIGFsbCA9IDBcbiAgKSB7fVxufVxuXG4vLyBJbnRlcmZhY2UgaXMgZGVjbGFyZWQgdG8gcHJldmVudCBwcm9wZXJ0eS1taW5pZmljYXRpb25cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3VpdW5pdmVyc2FsL25ndS1jYXJvdXNlbC9pc3N1ZXMvMzIyXG5kZWNsYXJlIGludGVyZmFjZSBCcmVha3BvaW50c0ludGVyZmFjZSB7XG4gIHNtOiBudW1iZXI7XG4gIG1kOiBudW1iZXI7XG4gIGxnOiBudW1iZXI7XG4gIHhsOiBudW1iZXI7XG59XG5cbi8qKlxuICogRGVmYXVsdCB2YWx1ZXNcbiAqIHtzbTogNzY4LCBtZDogOTkyLCBsZzogMTIwMCwgeGw6IDEyMDB9XG4gKlxuICogQm9vdHN0cmFwIHZhbHVlczpcbiAqIHtzbTogNTc2LCBtZDogNzY4LCBsZzogOTkyLCB4bDogMTIwMH1cbiAqL1xuZXhwb3J0IGNsYXNzIEJyZWFrcG9pbnRzIGltcGxlbWVudHMgQnJlYWtwb2ludHNJbnRlcmZhY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc20gPSA3NjgsXG4gICAgcHVibGljIG1kID0gOTkyLFxuICAgIHB1YmxpYyBsZyA9IDEyMDAsXG4gICAgcHVibGljIHhsID0gMTIwMFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBOZ3VDYXJvdXNlbENvbmZpZyB7XG4gIGdyaWQ6IFRyYW5zZnJvbTtcbiAgZ3JpZEJyZWFrcG9pbnRzPzogQnJlYWtwb2ludHM7XG4gIHNsaWRlPzogbnVtYmVyO1xuICBzcGVlZD86IG51bWJlcjtcbiAgaW50ZXJ2YWw/OiBDYXJvdXNlbEludGVydmFsO1xuICBhbmltYXRpb24/OiBBbmltYXRlO1xuICBwb2ludD86IFBvaW50O1xuICB0eXBlPzogc3RyaW5nO1xuICBsb2FkPzogbnVtYmVyO1xuICBjdXN0b20/OiBDdXN0b207XG4gIGxvb3A/OiBib29sZWFuO1xuICB0b3VjaD86IGJvb2xlYW47XG4gIGVhc2luZz86IHN0cmluZztcbiAgUlRMPzogYm9vbGVhbjtcbiAgYnV0dG9uPzogTmd1QnV0dG9uO1xuICB2ZXJ0aWNhbD86IFZlcnRpY2FsO1xuICB2ZWxvY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgQ3VzdG9tID0gJ2Jhbm5lcic7XG5leHBvcnQgdHlwZSBBbmltYXRlID0gJ2xhenknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvaW50IHtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgaGlkZU9uU2luZ2xlU2xpZGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuaW1hdGlvbiB7XG4gIHR5cGU/OiBBbmltYXRlO1xuICBhbmltYXRlU3R5bGVzPzogQW5pbWF0aW9uU3R5bGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuaW1hdGlvblN0eWxlcyB7XG4gIHN0eWxlPzogc3RyaW5nO1xuICBvcGVuPzogc3RyaW5nO1xuICBjbG9zZT86IHN0cmluZztcbiAgc3RhZ2dlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJvdXNlbEludGVydmFsIHtcbiAgdGltaW5nOiBudW1iZXI7XG4gIGluaXRpYWxEZWxheT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIE5ndUNhcm91c2VsT3V0bGV0Q29udGV4dDxUPiB7XG4gIC8qKiBEYXRhIGZvciB0aGUgbm9kZS4gKi9cbiAgJGltcGxpY2l0OiBUO1xuXG4gIC8qKiBEZXB0aCBvZiB0aGUgbm9kZS4gKi9cbiAgbGV2ZWw6IG51bWJlcjtcblxuICAvKiogSW5kZXggbG9jYXRpb24gb2YgdGhlIG5vZGUuICovXG4gIGluZGV4PzogbnVtYmVyO1xuXG4gIC8qKiBMZW5ndGggb2YgdGhlIG51bWJlciBvZiB0b3RhbCBkYXRhTm9kZXMuICovXG4gIGNvdW50PzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFQpIHtcbiAgICB0aGlzLiRpbXBsaWNpdCA9IGRhdGE7XG4gIH1cbn1cbiJdfQ==","import { isPlatformBrowser } from '@angular/common';\nimport { InjectionToken, PLATFORM_ID, inject } from '@angular/core';\nexport const IS_BROWSER = new InjectionToken('IS_BROWSER', {\n    providedIn: 'root',\n    factory: () => isPlatformBrowser(inject(PLATFORM_ID))\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd1L2Nhcm91c2VsL3NyYy9saWIvc3ltYm9scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxDQUFVLFlBQVksRUFBRTtJQUNsRSxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0NBQ3RELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGlvblRva2VuLCBQTEFURk9STV9JRCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdJU19CUk9XU0VSJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IGlzUGxhdGZvcm1Ccm93c2VyKGluamVjdChQTEFURk9STV9JRCkpXG59KTtcbiJdfQ==","import { Directive, TemplateRef, ViewContainerRef, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class NguCarouselItemDirective {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.3\", type: NguCarouselItemDirective, isStandalone: true, selector: \"[NguCarouselItem]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselItemDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[NguCarouselItem]'\n                }]\n        }] });\nexport class NguCarouselNextDirective {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselNextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.3\", type: NguCarouselNextDirective, isStandalone: true, selector: \"[NguCarouselNext]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselNextDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[NguCarouselNext]'\n                }]\n        }] });\nexport class NguCarouselPrevDirective {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselPrevDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.3\", type: NguCarouselPrevDirective, isStandalone: true, selector: \"[NguCarouselPrev]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselPrevDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[NguCarouselPrev]'\n                }]\n        }] });\nexport class NguCarouselPointDirective {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselPointDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.3\", type: NguCarouselPointDirective, isStandalone: true, selector: \"[NguCarouselPoint]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselPointDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[NguCarouselPoint]'\n                }]\n        }] });\nexport class NguCarouselDefDirective {\n    constructor() {\n        this.template = inject(TemplateRef);\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.3\", type: NguCarouselDefDirective, isStandalone: true, selector: \"[nguCarouselDef]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselDefDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    // eslint-disable-next-line @angular-eslint/directive-selector\n                    selector: '[nguCarouselDef]'\n                }]\n        }] });\nexport class NguCarouselOutlet {\n    constructor() {\n        this.viewContainer = inject(ViewContainerRef);\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.3\", type: NguCarouselOutlet, isStandalone: true, selector: \"[nguCarouselOutlet]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselOutlet, decorators: [{\n            type: Directive,\n            args: [{\n                    // eslint-disable-next-line @angular-eslint/directive-selector\n                    selector: '[nguCarouselOutlet]'\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd1LWNhcm91c2VsLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd1L2Nhcm91c2VsL3NyYy9saWIvbmd1LWNhcm91c2VsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS2pGLE1BQU0sT0FBTyx3QkFBd0I7OEdBQXhCLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUhwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCOztBQU1ELE1BQU0sT0FBTyx3QkFBd0I7OEdBQXhCLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUhwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCOztBQU1ELE1BQU0sT0FBTyx3QkFBd0I7OEdBQXhCLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUhwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCOztBQU1ELE1BQU0sT0FBTyx5QkFBeUI7OEdBQXpCLHlCQUF5QjtrR0FBekIseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQUhyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7aUJBQy9COztBQU9ELE1BQU0sT0FBTyx1QkFBdUI7SUFKcEM7UUFLRSxhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBRWhDOzhHQUhZLHVCQUF1QjtrR0FBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQUpuQyxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7O0FBVUQsTUFBTSxPQUFPLGlCQUFpQjtJQUo5QjtRQUtFLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDMUM7OEdBRlksaUJBQWlCO2tHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBSjdCLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUscUJBQXFCO2lCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbTmd1Q2Fyb3VzZWxJdGVtXSdcbn0pXG5leHBvcnQgY2xhc3MgTmd1Q2Fyb3VzZWxJdGVtRGlyZWN0aXZlIHt9XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tOZ3VDYXJvdXNlbE5leHRdJ1xufSlcbmV4cG9ydCBjbGFzcyBOZ3VDYXJvdXNlbE5leHREaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW05ndUNhcm91c2VsUHJldl0nXG59KVxuZXhwb3J0IGNsYXNzIE5ndUNhcm91c2VsUHJldkRpcmVjdGl2ZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbTmd1Q2Fyb3VzZWxQb2ludF0nXG59KVxuZXhwb3J0IGNsYXNzIE5ndUNhcm91c2VsUG9pbnREaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW25ndUNhcm91c2VsRGVmXSdcbn0pXG5leHBvcnQgY2xhc3MgTmd1Q2Fyb3VzZWxEZWZEaXJlY3RpdmU8VD4ge1xuICB0ZW1wbGF0ZSA9IGluamVjdChUZW1wbGF0ZVJlZik7XG4gIHdoZW4/OiAoaW5kZXg6IG51bWJlciwgbm9kZURhdGE6IFQpID0+IGJvb2xlYW47XG59XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tuZ3VDYXJvdXNlbE91dGxldF0nXG59KVxuZXhwb3J0IGNsYXNzIE5ndUNhcm91c2VsT3V0bGV0IHtcbiAgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { Observable, Subject, defer, fromEvent, map, shareReplay, takeUntil } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class NguHammerLoader {\n    constructor() {\n        this._hammer$ = defer(() => import('hammerjs')).pipe(shareReplay({ bufferSize: 1, refCount: true }));\n    }\n    load() {\n        return this._hammer$;\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguHammerLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n    static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguHammerLoader, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguHammerLoader, decorators: [{\n            type: Injectable,\n            args: [{ providedIn: 'root' }]\n        }] });\nexport class NguCarouselHammerManager {\n    constructor(_ngZone, _nguHammerLoader) {\n        this._ngZone = _ngZone;\n        this._nguHammerLoader = _nguHammerLoader;\n        this._destroy$ = new Subject();\n    }\n    ngOnDestroy() {\n        this._destroy$.next();\n    }\n    createHammer(element) {\n        return this._nguHammerLoader.load().pipe(map(() => \n        // Note: The Hammer manager should be created outside of the Angular zone since it sets up\n        //       `pointermove` event listener which triggers change detection every time the pointer is moved.\n        this._ngZone.runOutsideAngular(() => new Hammer(element))), \n        // Note: the dynamic import is always a microtask which may run after the view is destroyed.\n        //       `takeUntil` is used to prevent setting Hammer up if the view had been destroyed before\n        //       the HammerJS is loaded.\n        takeUntil(this._destroy$));\n    }\n    on(hammer, event) {\n        return fromEvent(hammer, event).pipe(\n        // Note: We have to re-enter the Angular zone because Hammer would trigger events outside of the\n        //       Angular zone (since we set it up with `runOutsideAngular`).\n        enterNgZone(this._ngZone), takeUntil(this._destroy$));\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselHammerManager, deps: [{ token: i0.NgZone }, { token: NguHammerLoader }], target: i0.ɵɵFactoryTarget.Injectable }); }\n    static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselHammerManager }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarouselHammerManager, decorators: [{\n            type: Injectable\n        }], ctorParameters: () => [{ type: i0.NgZone }, { type: NguHammerLoader }] });\nfunction enterNgZone(ngZone) {\n    return (source) => new Observable(subscriber => source.subscribe({\n        next: value => ngZone.run(() => subscriber.next(value)),\n        error: error => ngZone.run(() => subscriber.error(error)),\n        complete: () => ngZone.run(() => subscriber.complete())\n    }));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd1LWNhcm91c2VsLWhhbW1lci1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3UvY2Fyb3VzZWwvc3JjL2xpYi9uZ3UtY2Fyb3VzZWwvbmd1LWNhcm91c2VsLWhhbW1lci1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRzFGLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBRVUsYUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JELFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQy9DLENBQUM7S0FLSDtJQUhDLElBQUk7UUFDRixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQzs4R0FQVSxlQUFlO2tIQUFmLGVBQWUsY0FERixNQUFNOzsyRkFDbkIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBWWxDLE1BQU0sT0FBTyx3QkFBd0I7SUFHbkMsWUFDVSxPQUFlLEVBQ2YsZ0JBQWlDO1FBRGpDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBSm5DLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBS3JDLENBQUM7SUFFSixXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQW9CO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FDdEMsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNQLDBGQUEwRjtRQUMxRixzR0FBc0c7UUFDdEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUMxRDtRQUNELDRGQUE0RjtRQUM1RiwrRkFBK0Y7UUFDL0YsZ0NBQWdDO1FBQ2hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsRUFBRSxDQUFDLE1BQXFCLEVBQUUsS0FBYTtRQUNyQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSTtRQUNsQyxnR0FBZ0c7UUFDaEcsb0VBQW9FO1FBQ3BFLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQUM7SUFDSixDQUFDOzhHQWpDVSx3QkFBd0I7a0hBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVTs7QUFxQ1gsU0FBUyxXQUFXLENBQUksTUFBYztJQUNwQyxPQUFPLENBQUMsTUFBcUIsRUFBRSxFQUFFLENBQy9CLElBQUksVUFBVSxDQUFJLFVBQVUsQ0FBQyxFQUFFLENBQzdCLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDZixJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUN4RCxDQUFDLENBQ0gsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZGVmZXIsIGZyb21FdmVudCwgbWFwLCBzaGFyZVJlcGxheSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmd1SGFtbWVyTG9hZGVyIHtcbiAgcHJpdmF0ZSBfaGFtbWVyJCA9IGRlZmVyKCgpID0+IGltcG9ydCgnaGFtbWVyanMnKSkucGlwZShcbiAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICk7XG5cbiAgbG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGFtbWVyJDtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd1Q2Fyb3VzZWxIYW1tZXJNYW5hZ2VyIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgX25ndUhhbW1lckxvYWRlcjogTmd1SGFtbWVyTG9hZGVyXG4gICkge31cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gIH1cblxuICBjcmVhdGVIYW1tZXIoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPEhhbW1lck1hbmFnZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fbmd1SGFtbWVyTG9hZGVyLmxvYWQoKS5waXBlKFxuICAgICAgbWFwKCgpID0+XG4gICAgICAgIC8vIE5vdGU6IFRoZSBIYW1tZXIgbWFuYWdlciBzaG91bGQgYmUgY3JlYXRlZCBvdXRzaWRlIG9mIHRoZSBBbmd1bGFyIHpvbmUgc2luY2UgaXQgc2V0cyB1cFxuICAgICAgICAvLyAgICAgICBgcG9pbnRlcm1vdmVgIGV2ZW50IGxpc3RlbmVyIHdoaWNoIHRyaWdnZXJzIGNoYW5nZSBkZXRlY3Rpb24gZXZlcnkgdGltZSB0aGUgcG9pbnRlciBpcyBtb3ZlZC5cbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IG5ldyBIYW1tZXIoZWxlbWVudCkpXG4gICAgICApLFxuICAgICAgLy8gTm90ZTogdGhlIGR5bmFtaWMgaW1wb3J0IGlzIGFsd2F5cyBhIG1pY3JvdGFzayB3aGljaCBtYXkgcnVuIGFmdGVyIHRoZSB2aWV3IGlzIGRlc3Ryb3llZC5cbiAgICAgIC8vICAgICAgIGB0YWtlVW50aWxgIGlzIHVzZWQgdG8gcHJldmVudCBzZXR0aW5nIEhhbW1lciB1cCBpZiB0aGUgdmlldyBoYWQgYmVlbiBkZXN0cm95ZWQgYmVmb3JlXG4gICAgICAvLyAgICAgICB0aGUgSGFtbWVySlMgaXMgbG9hZGVkLlxuICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICk7XG4gIH1cblxuICBvbihoYW1tZXI6IEhhbW1lck1hbmFnZXIsIGV2ZW50OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZnJvbUV2ZW50KGhhbW1lciwgZXZlbnQpLnBpcGUoXG4gICAgICAvLyBOb3RlOiBXZSBoYXZlIHRvIHJlLWVudGVyIHRoZSBBbmd1bGFyIHpvbmUgYmVjYXVzZSBIYW1tZXIgd291bGQgdHJpZ2dlciBldmVudHMgb3V0c2lkZSBvZiB0aGVcbiAgICAgIC8vICAgICAgIEFuZ3VsYXIgem9uZSAoc2luY2Ugd2Ugc2V0IGl0IHVwIHdpdGggYHJ1bk91dHNpZGVBbmd1bGFyYCkuXG4gICAgICBlbnRlck5nWm9uZSh0aGlzLl9uZ1pvbmUpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW50ZXJOZ1pvbmU8VD4obmdab25lOiBOZ1pvbmUpIHtcbiAgcmV0dXJuIChzb3VyY2U6IE9ic2VydmFibGU8VD4pID0+XG4gICAgbmV3IE9ic2VydmFibGU8VD4oc3Vic2NyaWJlciA9PlxuICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IHZhbHVlID0+IG5nWm9uZS5ydW4oKCkgPT4gc3Vic2NyaWJlci5uZXh0KHZhbHVlKSksXG4gICAgICAgIGVycm9yOiBlcnJvciA9PiBuZ1pvbmUucnVuKCgpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpKSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IG5nWm9uZS5ydW4oKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKVxuICAgICAgfSlcbiAgICApO1xufVxuIl19","import { Injectable, NgZone, inject } from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IS_BROWSER } from '../symbols';\nimport * as i0 from \"@angular/core\";\nexport class NguWindowScrollListener extends Subject {\n    constructor() {\n        super();\n        this._destroy$ = new Subject();\n        const isBrowser = inject(IS_BROWSER);\n        const ngZone = inject(NgZone);\n        // Note: this service is shared between multiple `NguCarousel` components and each instance\n        //       doesn't add new events listener for the `window`.\n        if (isBrowser) {\n            ngZone.runOutsideAngular(() => fromEvent(window, 'scroll').pipe(takeUntil(this._destroy$)).subscribe(this));\n        }\n    }\n    ngOnDestroy() {\n        this._destroy$.next();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguWindowScrollListener, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n    static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguWindowScrollListener, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguWindowScrollListener, decorators: [{\n            type: Injectable,\n            args: [{ providedIn: 'root' }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd1LXdpbmRvdy1zY3JvbGwtbGlzdGVuZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ndS9jYXJvdXNlbC9zcmMvbGliL25ndS1jYXJvdXNlbC9uZ3Utd2luZG93LXNjcm9sbC1saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBR3hDLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxPQUFjO0lBR3pEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFITyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUsvQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLDJGQUEyRjtRQUMzRiwwREFBMEQ7UUFDMUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FDNUIsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FDNUUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQzs4R0FuQlUsdUJBQXVCO2tIQUF2Qix1QkFBdUIsY0FEVixNQUFNOzsyRkFDbkIsdUJBQXVCO2tCQURuQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJU19CUk9XU0VSIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmd1V2luZG93U2Nyb2xsTGlzdGVuZXIgZXh0ZW5kcyBTdWJqZWN0PEV2ZW50PiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgY29uc3QgaXNCcm93c2VyID0gaW5qZWN0KElTX0JST1dTRVIpO1xuICAgIGNvbnN0IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIC8vIE5vdGU6IHRoaXMgc2VydmljZSBpcyBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBgTmd1Q2Fyb3VzZWxgIGNvbXBvbmVudHMgYW5kIGVhY2ggaW5zdGFuY2VcbiAgICAvLyAgICAgICBkb2Vzbid0IGFkZCBuZXcgZXZlbnRzIGxpc3RlbmVyIGZvciB0aGUgYHdpbmRvd2AuXG4gICAgaWYgKGlzQnJvd3Nlcikge1xuICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdzY3JvbGwnKS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSh0aGlzKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gIH1cbn1cbiJdfQ==","import { ChangeDetectionStrategy, Component, ElementRef, IterableDiffers, NgZone, Renderer2, computed, contentChild, contentChildren, effect, inject, input, output, viewChild, signal, untracked, ChangeDetectorRef, afterNextRender } from '@angular/core';\nimport { EMPTY, Subject, fromEvent, interval, merge, timer } from 'rxjs';\nimport { debounceTime, filter, map, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport { IS_BROWSER } from '../symbols';\nimport { NguCarouselDefDirective, NguCarouselNextDirective, NguCarouselOutlet, NguCarouselPrevDirective } from '../ngu-carousel.directive';\nimport { Breakpoints, NguCarouselOutletContext, NguCarouselStore } from './ngu-carousel';\nimport { NguCarouselHammerManager } from './ngu-carousel-hammer-manager';\nimport { NguWindowScrollListener } from './ngu-window-scroll-listener';\nimport * as i0 from \"@angular/core\";\nconst NG_DEV_MODE = typeof ngDevMode === 'undefined' || ngDevMode;\nexport class NguCarousel extends NguCarouselStore {\n    constructor() {\n        super();\n        this._host = inject(ElementRef);\n        this._renderer = inject(Renderer2);\n        this._differs = inject(IterableDiffers);\n        this._isBrowser = inject(IS_BROWSER);\n        this._ngZone = inject(NgZone);\n        this._nguWindowScrollListener = inject(NguWindowScrollListener);\n        this._nguCarouselHammerManager = inject(NguCarouselHammerManager);\n        this._cdr = inject(ChangeDetectorRef);\n        /** Public property that may be accessed outside of the component. */\n        this.activePoint = signal(0, ...(ngDevMode ? [{ debugName: \"activePoint\" }] : []));\n        this.pointNumbers = signal([], ...(ngDevMode ? [{ debugName: \"pointNumbers\" }] : []));\n        this.inputs = input.required(...(ngDevMode ? [{ debugName: \"inputs\" }] : []));\n        this.carouselLoad = output();\n        this.onMove = output();\n        this._defDirectives = contentChildren(NguCarouselDefDirective, ...(ngDevMode ? [{ debugName: \"_defDirectives\" }] : []));\n        this._nodeOutlet = viewChild.required(NguCarouselOutlet);\n        this.nextButton = contentChild(NguCarouselNextDirective, ...(ngDevMode ? [{ debugName: \"nextButton\", read: ElementRef }] : [{ read: ElementRef }]));\n        this.prevButton = contentChild(NguCarouselPrevDirective, ...(ngDevMode ? [{ debugName: \"prevButton\", read: ElementRef }] : [{ read: ElementRef }]));\n        this.carouselMain1 = viewChild.required('ngucarousel', { read: ElementRef });\n        this._nguItemsContainer = viewChild.required('nguItemsContainer', { read: ElementRef });\n        this._touchContainer = viewChild.required('touchContainer', { read: ElementRef });\n        this._arrayChanges = null;\n        this.dataSource = input.required(...(ngDevMode ? [{ debugName: \"dataSource\", transform: (v) => v || [] }] : [{\n                transform: (v) => v || []\n            }]));\n        this._intervalController$ = new Subject();\n        this._hammer = null;\n        this._withAnimation = true;\n        this._destroy$ = new Subject();\n        /**\n         * Tracking function that will be used to check the differences in data changes. Used similarly\n         * to `ngFor` `trackBy` function. Optimize Items operations by identifying a Items based on its data\n         * relative to the function to know if a Items should be added/removed/moved.\n         * Accepts a function that takes two parameters, `index` and `item`.\n         */\n        this.trackBy = input(...(ngDevMode ? [undefined, { debugName: \"trackBy\" }] : []));\n        this._trackByFn = computed(() => {\n            const fn = this.trackBy();\n            if (NG_DEV_MODE && fn != null && typeof fn !== 'function' && console?.warn) {\n                console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}.`);\n            }\n            return fn || ((index, item) => item);\n        }, ...(ngDevMode ? [{ debugName: \"_trackByFn\" }] : []));\n        this._dataDiffer = this._differs.find([]).create(this._trackByFn());\n        afterNextRender({\n            earlyRead: () => true,\n            write: () => {\n                this._inputValidation();\n                this._carouselCssNode = this._createStyleElem();\n                if (this._isBrowser) {\n                    this._carouselInterval();\n                    if (!this.vertical.enabled && this.inputs()?.touch) {\n                        this._setupHammer();\n                    }\n                    this._setupWindowResizeListener();\n                    this._onWindowScrolling();\n                }\n            }\n        });\n        effect(() => {\n            const _ = this._defDirectives();\n            const data = this.dataSource();\n            untracked(() => this._checkChanges(data));\n        });\n        effect(cleanup => {\n            const prevButton = this.prevButton();\n            untracked(() => {\n                if (prevButton) {\n                    const preSub = fromEvent(prevButton.nativeElement, 'click')\n                        .pipe(takeUntil(this._destroy$))\n                        .subscribe(() => this._carouselScrollOne(0));\n                    cleanup(() => preSub.unsubscribe());\n                }\n            });\n        });\n        effect(cleanup => {\n            const nextButton = this.nextButton();\n            untracked(() => {\n                if (nextButton) {\n                    const nextSub = fromEvent(nextButton.nativeElement, 'click')\n                        .pipe(takeUntil(this._destroy$))\n                        .subscribe(() => this._carouselScrollOne(1));\n                    cleanup(() => nextSub.unsubscribe());\n                }\n            });\n        });\n    }\n    _checkChanges(data) {\n        // if (this.ngu_dirty) {\n        //   this.ngu_dirty = false;\n        //   const dataStream = this.dataSource;\n        //   if (!this._arrayChanges && !!dataStream) {\n        //     this._dataDiffer = this._differs\n        //       .find(dataStream)\n        //       .create((index: number, item: any) => this._trackByFn()(index, item))!;\n        //   }\n        // }\n        // if (this._dataDiffer) {\n        //   this._arrayChanges =\n        //     this._markedForCheck && this._arrayChanges\n        //       ? this._arrayChanges\n        //       : this._dataDiffer.diff(this.dataSource)!;\n        //   if (this._arrayChanges) {\n        //     this.renderNodeChanges(Array.from(this.dataSource()));\n        //   }\n        // }\n        this._arrayChanges = this._dataDiffer.diff(data);\n        if (this._arrayChanges) {\n            this.renderNodeChanges(Array.from(data));\n        }\n    }\n    renderNodeChanges(data) {\n        if (!this._arrayChanges)\n            return;\n        this.isLast.set(this._pointIndex === this.currentSlide);\n        const viewContainer = this._nodeOutlet().viewContainer;\n        // this._markedForCheck = false;\n        this._arrayChanges.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {\n            const node = this._getNodeDef(data[currentIndex], currentIndex);\n            if (node?.template) {\n                if (item.previousIndex == null) {\n                    const context = new NguCarouselOutletContext(data[currentIndex]);\n                    context.index = currentIndex;\n                    viewContainer.createEmbeddedView(node.template, context, currentIndex);\n                }\n                else if (currentIndex == null) {\n                    viewContainer.remove(adjustedPreviousIndex);\n                }\n                else {\n                    const view = viewContainer.get(adjustedPreviousIndex);\n                    viewContainer.move(view, currentIndex);\n                }\n            }\n        });\n        this._updateItemIndexContext();\n        if (this._host.nativeElement) {\n            this._storeCarouselData();\n        }\n    }\n    /**\n     * Updates the index-related context for each row to reflect any changes in the index of the rows,\n     * e.g. first/last/even/odd.\n     */\n    _updateItemIndexContext() {\n        const viewContainer = this._nodeOutlet().viewContainer;\n        for (let renderIndex = 0, count = viewContainer.length; renderIndex < count; renderIndex++) {\n            const viewRef = viewContainer.get(renderIndex);\n            const context = viewRef.context;\n            context.count = count;\n            context.first = renderIndex === 0;\n            context.last = renderIndex === count - 1;\n            context.even = renderIndex % 2 === 0;\n            context.odd = !context.even;\n            context.index = renderIndex;\n        }\n    }\n    _getNodeDef(data, i) {\n        if (this._defDirectives()?.length === 1) {\n            return this._defDirectives()[0];\n        }\n        const nodeDef = (this._defDirectives() || []).find(def => !!def.when?.(i, data));\n        return nodeDef;\n    }\n    _inputValidation() {\n        const inputs = this.inputs();\n        inputs.gridBreakpoints = inputs.gridBreakpoints ? inputs.gridBreakpoints : new Breakpoints();\n        if (inputs.grid.xl === undefined) {\n            inputs.grid.xl = inputs.grid.lg;\n        }\n        this.type = inputs.grid.all !== 0 ? 'fixed' : 'responsive';\n        this.loop = inputs.loop || false;\n        inputs.easing = inputs.easing || 'cubic-bezier(0, 0, 0.2, 1)';\n        this.touch.active = inputs.touch || false;\n        this.RTL = inputs.RTL ? true : false;\n        this.interval = inputs.interval || undefined;\n        this.velocity = typeof inputs.velocity === 'number' ? inputs.velocity : this.velocity;\n        if (inputs.vertical && inputs.vertical.enabled) {\n            this.vertical.enabled = inputs.vertical.enabled;\n            this.vertical.height = inputs.vertical.height;\n        }\n        this._directionSymbol = this.RTL ? '' : '-';\n        this.point =\n            inputs.point && typeof inputs.point.visible !== 'undefined' ? inputs.point.visible : true;\n        this._carouselSize();\n    }\n    ngOnDestroy() {\n        this._hammer?.destroy();\n        this._destroy$.next();\n    }\n    /** Get Touch input */\n    _setupHammer() {\n        // Note: doesn't need to unsubscribe because streams are piped with `takeUntil` already.\n        this._nguCarouselHammerManager\n            .createHammer(this._touchContainer().nativeElement)\n            .subscribe(hammer => {\n            this._hammer = hammer;\n            hammer.get('pan').set({ direction: Hammer.DIRECTION_HORIZONTAL });\n            this._nguCarouselHammerManager.on(hammer, 'panstart').subscribe(() => {\n                this.carouselWidth = this._nguItemsContainer().nativeElement.offsetWidth;\n                this.touchTransform = this.transform[this.deviceType];\n                this.dexVal = 0;\n                this._setStyle(this._nguItemsContainer().nativeElement, 'transition', '');\n            });\n            if (this.vertical.enabled) {\n                this._nguCarouselHammerManager.on(hammer, 'panup').subscribe((ev) => {\n                    this._touchHandling('panleft', ev);\n                });\n                this._nguCarouselHammerManager.on(hammer, 'pandown').subscribe((ev) => {\n                    this._touchHandling('panright', ev);\n                });\n            }\n            else {\n                this._nguCarouselHammerManager.on(hammer, 'panleft').subscribe((ev) => {\n                    this._touchHandling('panleft', ev);\n                });\n                this._nguCarouselHammerManager.on(hammer, 'panright').subscribe((ev) => {\n                    this._touchHandling('panright', ev);\n                });\n            }\n            this._nguCarouselHammerManager.on(hammer, 'panend pancancel').subscribe(({ velocity }) => {\n                if (Math.abs(velocity) >= this.velocity) {\n                    this.touch.velocity = velocity;\n                    let direc = 0;\n                    if (!this.RTL) {\n                        direc = this.touch.swipe === 'panright' ? 0 : 1;\n                    }\n                    else {\n                        direc = this.touch.swipe === 'panright' ? 1 : 0;\n                    }\n                    this._carouselScrollOne(direc);\n                }\n                else {\n                    this.dexVal = 0;\n                    this._setStyle(this._nguItemsContainer().nativeElement, 'transition', 'transform 324ms cubic-bezier(0, 0, 0.2, 1)');\n                    this._setStyle(this._nguItemsContainer().nativeElement, 'transform', '');\n                }\n            });\n            this._nguCarouselHammerManager.on(hammer, 'hammer.input').subscribe(({ srcEvent }) => {\n                // allow nested touch events to no propagate, this may have other side affects but works for now.\n                // TODO: It is probably better to check the source element of the event and only apply the handle to the correct carousel\n                srcEvent.stopPropagation();\n            });\n        });\n    }\n    /** handle touch input */\n    _touchHandling(e, ev) {\n        // vertical touch events seem to cause to panstart event with an odd delta\n        // and a center of {x:0,y:0} so this will ignore them\n        if (ev.center.x === 0) {\n            return;\n        }\n        ev = Math.abs(this.vertical.enabled ? ev.deltaY : ev.deltaX);\n        let valt = ev - this.dexVal;\n        valt =\n            this.type === 'responsive'\n                ? (Math.abs(ev - this.dexVal) /\n                    (this.vertical.enabled ? this.vertical.height : this.carouselWidth)) *\n                    100\n                : valt;\n        this.dexVal = ev;\n        this.touch.swipe = e;\n        this._setTouchTransfrom(e, valt);\n        this._setTransformFromTouch();\n    }\n    _setTouchTransfrom(e, valt) {\n        const condition = this.RTL ? 'panright' : 'panleft';\n        this.touchTransform = e === condition ? valt + this.touchTransform : this.touchTransform - valt;\n    }\n    _setTransformFromTouch() {\n        if (this.touchTransform < 0) {\n            this.touchTransform = 0;\n        }\n        const type = this.type === 'responsive' ? '%' : 'px';\n        this._setStyle(this._nguItemsContainer().nativeElement, 'transform', this.vertical.enabled\n            ? `translate3d(0, ${this._directionSymbol}${this.touchTransform}${type}, 0)`\n            : `translate3d(${this._directionSymbol}${this.touchTransform}${type}, 0, 0)`);\n    }\n    /** this fn used to disable the interval when it is not on the viewport */\n    _onWindowScrolling() {\n        const { offsetTop, offsetHeight } = this._host.nativeElement;\n        const { scrollY: windowScrollY, innerHeight: windowInnerHeight } = window;\n        const isCarouselOnScreen = offsetTop <= windowScrollY + windowInnerHeight - offsetHeight / 4 &&\n            offsetHeight + offsetHeight / 2 >= windowScrollY;\n        if (isCarouselOnScreen) {\n            this._intervalController$.next(1);\n        }\n        else {\n            this._intervalController$.next(0);\n        }\n    }\n    /** store data based on width of the screen for the carousel */\n    _storeCarouselData() {\n        const inputs = this.inputs();\n        const breakpoints = this.inputs().gridBreakpoints;\n        this.deviceWidth = this._isBrowser ? window.innerWidth : breakpoints?.xl;\n        this.carouselWidth = this.carouselMain1().nativeElement.offsetWidth;\n        if (this.type === 'responsive') {\n            this.deviceType =\n                this.deviceWidth >= breakpoints?.xl\n                    ? 'xl'\n                    : this.deviceWidth >= breakpoints?.lg\n                        ? 'lg'\n                        : this.deviceWidth >= breakpoints?.md\n                            ? 'md'\n                            : this.deviceWidth >= breakpoints?.sm\n                                ? 'sm'\n                                : 'xs';\n            this.items = inputs.grid[this.deviceType];\n            this.itemWidth = this.carouselWidth / this.items;\n        }\n        else {\n            this.items = Math.trunc(this.carouselWidth / inputs.grid.all);\n            this.itemWidth = inputs.grid.all;\n            this.deviceType = 'all';\n        }\n        this.slideItems = +(inputs.slide < this.items ? inputs.slide : this.items);\n        this.load = inputs.load >= this.slideItems ? inputs.load : this.slideItems;\n        this.speed = inputs.speed && inputs.speed > -1 ? inputs.speed : 400;\n        this._carouselPoint();\n    }\n    /** Used to reset the carousel */\n    reset(withoutAnimation) {\n        withoutAnimation && (this._withAnimation = false);\n        this._carouselCssNode.textContent = '';\n        this.moveTo(0);\n        this._carouselPoint();\n    }\n    /** Init carousel point */\n    _carouselPoint() {\n        const Nos = Array.from(this.dataSource()).length - (this.items - this.slideItems);\n        this._pointIndex = Math.ceil(Nos / this.slideItems);\n        const pointers = [];\n        if (this._pointIndex > 1 || !this.inputs().point?.hideOnSingleSlide) {\n            for (let i = 0; i < this._pointIndex; i++) {\n                pointers.push(i);\n            }\n        }\n        this.pointNumbers.set(pointers);\n        this._carouselPointActiver();\n        if (this._pointIndex <= 1) {\n            this._btnBoolean(1, 1);\n        }\n        else {\n            if (this.currentSlide === 0 && !this.loop) {\n                this._btnBoolean(1, 0);\n            }\n            else {\n                this._btnBoolean(0, 0);\n            }\n        }\n    }\n    /** change the active point in carousel */\n    _carouselPointActiver() {\n        const i = Math.ceil(this.currentSlide / this.slideItems);\n        this.activePoint.set(i);\n    }\n    /** this function is used to scoll the carousel when point is clicked */\n    moveTo(slide, withoutAnimation) {\n        // slide = slide - 1;\n        withoutAnimation && (this._withAnimation = false);\n        if (this.activePoint() !== slide && slide < this._pointIndex) {\n            let slideremains;\n            const btns = this.currentSlide < slide ? 1 : 0;\n            switch (slide) {\n                case 0:\n                    this._btnBoolean(1, 0);\n                    slideremains = slide * this.slideItems;\n                    break;\n                case this._pointIndex - 1:\n                    this._btnBoolean(0, 1);\n                    slideremains = Array.from(this.dataSource()).length - this.items;\n                    break;\n                default:\n                    this._btnBoolean(0, 0);\n                    slideremains = slide * this.slideItems;\n            }\n            this._carouselScrollTwo(btns, slideremains, this.speed);\n        }\n    }\n    /** set the style of the carousel based the inputs data */\n    _carouselSize() {\n        const inputs = this.inputs();\n        this.token = this._generateID();\n        let dism = '';\n        this._styleid = `.${this.token} > .ngucarousel > .ngu-container > .ngu-touch-container > .ngucarousel-items`;\n        if (inputs.custom === 'banner') {\n            this._renderer.addClass(this._host.nativeElement, 'banner');\n        }\n        if (inputs.animation === 'lazy') {\n            dism += `${this._styleid} > .item {transition: transform .6s ease;}`;\n        }\n        const breakpoints = inputs.gridBreakpoints;\n        let itemStyle = '';\n        if (this.vertical.enabled) {\n            const itemWidthXS = `${this._styleid} > .item {height: ${this.vertical.height / +inputs.grid.xs}px}`;\n            const itemWidthSM = `${this._styleid} > .item {height: ${this.vertical.height / +inputs.grid.sm}px}`;\n            const itemWidthMD = `${this._styleid} > .item {height: ${this.vertical.height / +inputs.grid.md}px}`;\n            const itemWidthLG = `${this._styleid} > .item {height: ${this.vertical.height / +inputs.grid.lg}px}`;\n            const itemWidthXL = `${this._styleid} > .item {height: ${this.vertical.height / +inputs.grid.xl}px}`;\n            itemStyle = `@media (max-width:${breakpoints?.sm - 1}px){${itemWidthXS}}\n                    @media (max-width:${breakpoints?.sm}px){${itemWidthSM}}\n                    @media (min-width:${breakpoints?.md}px){${itemWidthMD}}\n                    @media (min-width:${breakpoints?.lg}px){${itemWidthLG}}\n                    @media (min-width:${breakpoints?.xl}px){${itemWidthXL}}`;\n        }\n        else if (this.type === 'responsive') {\n            const itemWidthXS = inputs.type === 'mobile'\n                ? `${this._styleid} .item {flex: 0 0 ${95 / +inputs.grid.xs}%; width: ${95 / +inputs.grid.xs}%;}`\n                : `${this._styleid} .item {flex: 0 0 ${100 / +inputs.grid.xs}%; width: ${100 / +inputs.grid.xs}%;}`;\n            const itemWidthSM = `${this._styleid} > .item {flex: 0 0 ${100 / +inputs.grid.sm}%; width: ${100 / +inputs.grid.sm}%}`;\n            const itemWidthMD = `${this._styleid} > .item {flex: 0 0 ${100 / +inputs.grid.md}%; width: ${100 / +inputs.grid.md}%}`;\n            const itemWidthLG = `${this._styleid} > .item {flex: 0 0 ${100 / +inputs.grid.lg}%; width: ${100 / +inputs.grid.lg}%}`;\n            const itemWidthXL = `${this._styleid} > .item {flex: 0 0 ${100 / +inputs.grid.xl}%; width: ${100 / +inputs.grid.xl}%}`;\n            itemStyle = `@media (max-width:${breakpoints?.sm - 1}px){${itemWidthXS}}\n                    @media (min-width:${breakpoints?.sm}px){${itemWidthSM}}\n                    @media (min-width:${breakpoints?.md}px){${itemWidthMD}}\n                    @media (min-width:${breakpoints?.lg}px){${itemWidthLG}}\n                    @media (min-width:${breakpoints?.xl}px){${itemWidthXL}}`;\n        }\n        else {\n            itemStyle = `${this._styleid} .item {flex: 0 0 ${inputs.grid.all}px; width: ${inputs.grid.all}px;}`;\n        }\n        this._renderer.addClass(this._host.nativeElement, this.token);\n        if (this.vertical.enabled) {\n            this._renderer.addClass(this._nguItemsContainer().nativeElement, 'nguvertical');\n            this._renderer.setStyle(this.carouselMain1().nativeElement, 'height', `${this.vertical.height}px`);\n        }\n        this.RTL &&\n            !this.vertical.enabled &&\n            this._renderer.addClass(this._host.nativeElement, 'ngurtl');\n        this._createStyleElem(`${dism} ${itemStyle}`);\n        this._storeCarouselData();\n    }\n    /** logic to scroll the carousel step 1 */\n    _carouselScrollOne(Btn) {\n        let itemSpeed = this.speed;\n        let currentSlide = 0;\n        let touchMove = Math.ceil(this.dexVal / this.itemWidth);\n        touchMove = isFinite(touchMove) ? touchMove : 0;\n        this._setStyle(this._nguItemsContainer().nativeElement, 'transform', '');\n        if (this._pointIndex === 1) {\n            return;\n        }\n        else if (Btn === 0 && ((!this.loop && !this.isFirst()) || this.loop)) {\n            const currentSlideD = this.currentSlide - this.slideItems;\n            const MoveSlide = currentSlideD + this.slideItems;\n            this._btnBoolean(0, 1);\n            if (this.currentSlide === 0) {\n                currentSlide = Array.from(this.dataSource()).length - this.items;\n                itemSpeed = 400;\n                this._btnBoolean(0, 1);\n            }\n            else if (this.slideItems >= MoveSlide) {\n                currentSlide = 0;\n                this._btnBoolean(1, 0);\n            }\n            else {\n                this._btnBoolean(0, 0);\n                if (touchMove > this.slideItems) {\n                    currentSlide = this.currentSlide - touchMove;\n                    itemSpeed = 200;\n                }\n                else {\n                    currentSlide = this.currentSlide - this.slideItems;\n                }\n            }\n            this._carouselScrollTwo(Btn, currentSlide, itemSpeed);\n        }\n        else if (Btn === 1 && ((!this.loop && !this.isLast()) || this.loop)) {\n            if (Array.from(this.dataSource()).length <= this.currentSlide + this.items + this.slideItems &&\n                !this.isLast()) {\n                currentSlide = Array.from(this.dataSource()).length - this.items;\n                this._btnBoolean(0, 1);\n            }\n            else if (this.isLast()) {\n                currentSlide = 0;\n                itemSpeed = 400;\n                this._btnBoolean(1, 0);\n            }\n            else {\n                this._btnBoolean(0, 0);\n                if (touchMove > this.slideItems) {\n                    currentSlide = this.currentSlide + this.slideItems + (touchMove - this.slideItems);\n                    itemSpeed = 200;\n                }\n                else {\n                    currentSlide = this.currentSlide + this.slideItems;\n                }\n            }\n            this._carouselScrollTwo(Btn, currentSlide, itemSpeed);\n        }\n    }\n    /** logic to scroll the carousel step 2 */\n    _carouselScrollTwo(Btn, currentSlide, itemSpeed) {\n        if (this.dexVal !== 0) {\n            const val = Math.abs(this.touch.velocity);\n            let somt = Math.floor((this.dexVal / val / this.dexVal) * (this.deviceWidth - this.dexVal));\n            somt = somt > itemSpeed ? itemSpeed : somt;\n            itemSpeed = somt < 200 ? 200 : somt;\n            this.dexVal = 0;\n        }\n        if (this._withAnimation) {\n            this._setStyle(this._nguItemsContainer().nativeElement, 'transition', `transform ${itemSpeed}ms ${this.inputs().easing}`);\n            this.inputs().animation &&\n                this._carouselAnimator(Btn, currentSlide + 1, currentSlide + this.items, itemSpeed, Math.abs(this.currentSlide - currentSlide));\n        }\n        else {\n            this._setStyle(this._nguItemsContainer().nativeElement, 'transition', ``);\n        }\n        this.itemLength = Array.from(this.dataSource()).length;\n        this._transformStyle(currentSlide);\n        this.currentSlide = currentSlide;\n        this.onMove.emit(this);\n        this._carouselPointActiver();\n        this._carouselLoadTrigger();\n        this._withAnimation = true;\n    }\n    /** boolean function for making isFirst and isLast */\n    _btnBoolean(first, last) {\n        this.isFirst.set(!!first);\n        this.isLast.set(!!last);\n    }\n    _transformString(grid, slide) {\n        let collect = '';\n        collect += `${this._styleid} { transform: translate3d(`;\n        if (this.vertical.enabled) {\n            this.transform[grid] = (this.vertical.height / this.inputs().grid[grid]) * slide;\n            collect += `0, -${this.transform[grid]}px, 0`;\n        }\n        else {\n            this.transform[grid] = (100 / this.inputs().grid[grid]) * slide;\n            collect += `${this._directionSymbol}${this.transform[grid]}%, 0, 0`;\n        }\n        collect += `); }`;\n        return collect;\n    }\n    /** set the transform style to scroll the carousel  */\n    _transformStyle(slide) {\n        let slideCss = '';\n        if (this.type === 'responsive') {\n            const breakpoints = this.inputs().gridBreakpoints;\n            slideCss = `@media (max-width: ${breakpoints?.sm - 1}px) {${this._transformString('xs', slide)}}\n      @media (min-width: ${breakpoints?.sm}px) {${this._transformString('sm', slide)} }\n      @media (min-width: ${breakpoints?.md}px) {${this._transformString('md', slide)} }\n      @media (min-width: ${breakpoints?.lg}px) {${this._transformString('lg', slide)} }\n      @media (min-width: ${breakpoints?.xl}px) {${this._transformString('xl', slide)} }`;\n        }\n        else {\n            this.transform.all = this.inputs().grid.all * slide;\n            slideCss = `${this._styleid} { transform: translate3d(${this._directionSymbol}${this.transform.all}px, 0, 0);`;\n        }\n        this._carouselCssNode.textContent = slideCss;\n    }\n    /** this will trigger the carousel to load the items */\n    _carouselLoadTrigger() {\n        if (typeof this.inputs().load === 'number') {\n            Array.from(this.dataSource()).length - this.load <= this.currentSlide + this.items &&\n                this.carouselLoad.emit(this.currentSlide);\n        }\n    }\n    /** generate Class for each carousel to set specific style */\n    _generateID() {\n        let text = '';\n        const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n        for (let i = 0; i < 6; i++) {\n            text += possible.charAt(Math.floor(Math.random() * possible.length));\n        }\n        return `ngucarousel${text}`;\n    }\n    /** handle the auto slide */\n    _carouselInterval() {\n        const container = this.carouselMain1().nativeElement;\n        if (this.interval && this.loop) {\n            this._nguWindowScrollListener\n                .pipe(\n            // Note: do not use `debounceTime` since it may flush queued actions within the Angular zone.\n            switchMap(() => timer(600)), takeUntil(this._destroy$))\n                .subscribe(() => {\n                // Note: we don't run change detection on each `scroll` event, but we re-enter the\n                //       Angular zone once the DOM timer fires to be backwards compatible.\n                //       TODO: revisit later since we may not run change detection at all on this task.\n                this._ngZone.run(() => this._onWindowScrolling());\n            });\n            const mapToZero = map(() => 0);\n            const mapToOne = map(() => 1);\n            const play$ = fromEvent(container, 'mouseleave').pipe(mapToOne);\n            const pause$ = fromEvent(container, 'mouseenter').pipe(mapToZero);\n            const touchPlay$ = fromEvent(container, 'touchstart').pipe(mapToOne);\n            const touchPause$ = fromEvent(container, 'touchend').pipe(mapToZero);\n            const interval$ = interval(this.inputs().interval?.timing).pipe(mapToOne);\n            const initialDelay = this.interval.initialDelay || 0;\n            const carouselInterval$ = merge(play$, touchPlay$, pause$, touchPause$, this._intervalController$).pipe(startWith(1), switchMap(val => {\n                this._cdr.markForCheck();\n                return val ? interval$ : EMPTY;\n            }));\n            timer(initialDelay)\n                .pipe(switchMap(() => carouselInterval$), takeUntil(this._destroy$))\n                .subscribe(() => {\n                this._carouselScrollOne(1);\n            });\n        }\n    }\n    /** animate the carousel items */\n    _carouselAnimator(direction, start, end, speed, length) {\n        const viewContainer = this._nodeOutlet().viewContainer;\n        let val = length < 5 ? length : 5;\n        val = val === 1 ? 3 : val;\n        const collectedIndexes = [];\n        if (direction === 1) {\n            for (let i = start - 1; i < end; i++) {\n                collectedIndexes.push(i);\n                val = val * 2;\n                const viewRef = viewContainer.get(i);\n                const context = viewRef.context;\n                context.animate = { value: true, params: { distance: val } };\n            }\n        }\n        else {\n            for (let i = end - 1; i >= start - 1; i--) {\n                collectedIndexes.push(i);\n                val = val * 2;\n                const viewRef = viewContainer.get(i);\n                const context = viewRef.context;\n                context.animate = { value: true, params: { distance: -val } };\n            }\n        }\n        timer(speed * 0.7)\n            .pipe(takeUntil(this._destroy$))\n            .subscribe(() => this._removeAnimations(collectedIndexes));\n    }\n    _removeAnimations(collectedIndexes) {\n        const viewContainer = this._nodeOutlet().viewContainer;\n        collectedIndexes.forEach(i => {\n            const viewRef = viewContainer.get(i);\n            const context = viewRef.context;\n            context.animate = { value: false, params: { distance: 0 } };\n        });\n        this._cdr.markForCheck();\n    }\n    /** Short form for setElementStyle */\n    _setStyle(el, prop, val) {\n        this._renderer.setStyle(el, prop, val);\n    }\n    /** For generating style tag */\n    _createStyleElem(datas) {\n        const styleItem = this._renderer.createElement('style');\n        if (datas) {\n            const styleText = this._renderer.createText(datas);\n            this._renderer.appendChild(styleItem, styleText);\n        }\n        this._renderer.appendChild(this._host.nativeElement, styleItem);\n        return styleItem;\n    }\n    _setupWindowResizeListener() {\n        this._ngZone.runOutsideAngular(() => fromEvent(window, 'resize')\n            .pipe(debounceTime(500), filter(() => this.deviceWidth !== window.outerWidth), takeUntil(this._destroy$))\n            .subscribe(() => {\n            this._setStyle(this._nguItemsContainer().nativeElement, 'transition', ``);\n            // Re-enter the Angular zone only after `resize` events have been dispatched\n            // and the timer has run (in `debounceTime`).\n            this._ngZone.run(() => {\n                this._storeCarouselData();\n                // this._cdr.markForCheck();\n            });\n        }));\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarousel, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.1.3\", type: NguCarousel, isStandalone: true, selector: \"ngu-carousel\", inputs: { inputs: { classPropertyName: \"inputs\", publicName: \"inputs\", isSignal: true, isRequired: true, transformFunction: null }, dataSource: { classPropertyName: \"dataSource\", publicName: \"dataSource\", isSignal: true, isRequired: true, transformFunction: null }, trackBy: { classPropertyName: \"trackBy\", publicName: \"trackBy\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { carouselLoad: \"carouselLoad\", onMove: \"onMove\" }, providers: [NguCarouselHammerManager], queries: [{ propertyName: \"_defDirectives\", predicate: NguCarouselDefDirective, isSignal: true }, { propertyName: \"nextButton\", first: true, predicate: NguCarouselNextDirective, descendants: true, read: ElementRef, isSignal: true }, { propertyName: \"prevButton\", first: true, predicate: NguCarouselPrevDirective, descendants: true, read: ElementRef, isSignal: true }], viewQueries: [{ propertyName: \"_nodeOutlet\", first: true, predicate: NguCarouselOutlet, descendants: true, isSignal: true }, { propertyName: \"carouselMain1\", first: true, predicate: [\"ngucarousel\"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: \"_nguItemsContainer\", first: true, predicate: [\"nguItemsContainer\"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: \"_touchContainer\", first: true, predicate: [\"touchContainer\"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div #ngucarousel class=\\\"ngucarousel\\\">\\n  <ng-content select=\\\"[NguCarouselPrev]\\\"></ng-content>\\n  <div class=\\\"ngu-container\\\">\\n    <div #touchContainer class=\\\"ngu-touch-container\\\">\\n      <div #nguItemsContainer class=\\\"ngucarousel-items\\\">\\n        <ng-container nguCarouselOutlet></ng-container>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"nguclearFix\\\"></div>\\n  <ng-content select=\\\"[NguCarouselNext]\\\"></ng-content>\\n</div>\\n<ng-content select=\\\"[NguCarouselPoint]\\\"></ng-content>\\n\", styles: [\":host{display:block;position:relative}:host.ngurtl{direction:rtl}.ngucarousel{position:relative;overflow:hidden;height:100%}.ngucarousel .ngucarousel-items{position:relative;display:flex;height:100%}.ngu-container{overflow:hidden}.nguvertical{flex-direction:column}.banner .ngucarouselPointDefault .ngucarouselPoint{position:absolute;width:100%;bottom:20px}.banner .ngucarouselPointDefault .ngucarouselPoint li{background:#ffffff8c}.banner .ngucarouselPointDefault .ngucarouselPoint li.active{background:#fff}.banner .ngucarouselPointDefault .ngucarouselPoint li:hover{cursor:pointer}.ngucarouselPointDefault .ngucarouselPoint{list-style-type:none;text-align:center;padding:12px;margin:0;white-space:nowrap;overflow:auto;box-sizing:border-box}.ngucarouselPointDefault .ngucarouselPoint li{display:inline-block;border-radius:50%;background:#0000008c;padding:4px;margin:0 4px;transition-timing-function:cubic-bezier(.17,.67,.83,.67);transition:.4s}.ngucarouselPointDefault .ngucarouselPoint li.active{background:#6b6b6b;transform:scale(1.8)}.ngucarouselPointDefault .ngucarouselPoint li:hover{cursor:pointer}.nguclearFix{clear:both}\\n\"], dependencies: [{ kind: \"directive\", type: NguCarouselOutlet, selector: \"[nguCarouselOutlet]\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguCarousel, decorators: [{\n            type: Component,\n            args: [{ selector: 'ngu-carousel', changeDetection: ChangeDetectionStrategy.OnPush, providers: [NguCarouselHammerManager], imports: [NguCarouselOutlet], template: \"<div #ngucarousel class=\\\"ngucarousel\\\">\\n  <ng-content select=\\\"[NguCarouselPrev]\\\"></ng-content>\\n  <div class=\\\"ngu-container\\\">\\n    <div #touchContainer class=\\\"ngu-touch-container\\\">\\n      <div #nguItemsContainer class=\\\"ngucarousel-items\\\">\\n        <ng-container nguCarouselOutlet></ng-container>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"nguclearFix\\\"></div>\\n  <ng-content select=\\\"[NguCarouselNext]\\\"></ng-content>\\n</div>\\n<ng-content select=\\\"[NguCarouselPoint]\\\"></ng-content>\\n\", styles: [\":host{display:block;position:relative}:host.ngurtl{direction:rtl}.ngucarousel{position:relative;overflow:hidden;height:100%}.ngucarousel .ngucarousel-items{position:relative;display:flex;height:100%}.ngu-container{overflow:hidden}.nguvertical{flex-direction:column}.banner .ngucarouselPointDefault .ngucarouselPoint{position:absolute;width:100%;bottom:20px}.banner .ngucarouselPointDefault .ngucarouselPoint li{background:#ffffff8c}.banner .ngucarouselPointDefault .ngucarouselPoint li.active{background:#fff}.banner .ngucarouselPointDefault .ngucarouselPoint li:hover{cursor:pointer}.ngucarouselPointDefault .ngucarouselPoint{list-style-type:none;text-align:center;padding:12px;margin:0;white-space:nowrap;overflow:auto;box-sizing:border-box}.ngucarouselPointDefault .ngucarouselPoint li{display:inline-block;border-radius:50%;background:#0000008c;padding:4px;margin:0 4px;transition-timing-function:cubic-bezier(.17,.67,.83,.67);transition:.4s}.ngucarouselPointDefault .ngucarouselPoint li.active{background:#6b6b6b;transform:scale(1.8)}.ngucarouselPointDefault .ngucarouselPoint li:hover{cursor:pointer}.nguclearFix{clear:both}\\n\"] }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd1LWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd1L2Nhcm91c2VsL3NyYy9saWIvbmd1LWNhcm91c2VsL25ndS1jYXJvdXNlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ndS9jYXJvdXNlbC9zcmMvbGliL25ndS1jYXJvdXNlbC9uZ3UtY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUlWLGVBQWUsRUFFZixNQUFNLEVBRU4sU0FBUyxFQUVULFFBQVEsRUFDUixZQUFZLEVBQ1osZUFBZSxFQUNmLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNMLFdBQVcsRUFFWCx3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBRWpCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHdCQUF3QixFQUFF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Q0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO2FBQ3hCLElBQUksQ0FDSCxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLDRFQUE0RTtZQUM1RSw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNwQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsNEJBQTRCO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7OEdBcjBCVSxXQUFXO2tHQUFYLFdBQVcsa2dCQUhYLENBQUMsd0JBQXdCLENBQUMseURBdUJJLHVCQUF1QiwwRUFJN0Isd0JBQXdCLDJCQUFVLFVBQVUsMEVBQzVDLHdCQUF3QiwyQkFBVSxVQUFVLDBGQUh0QyxpQkFBaUIsMElBS1MsVUFBVSxrSUFDQyxVQUFVLDRIQUNoQixVQUFVLG9FQzdGcEYseWZBYUEsc3FDRGlEWSxpQkFBaUI7OzJGQUVoQixXQUFXO2tCQVJ2QixTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLHdCQUF3QixDQUFDLFdBQzVCLENBQUMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcbiAgSXRlcmFibGVDaGFuZ2VzLFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBOZ0l0ZXJhYmxlLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgUmVuZGVyZXIyLFxuICBUcmFja0J5RnVuY3Rpb24sXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGQsXG4gIGNvbnRlbnRDaGlsZHJlbixcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHZpZXdDaGlsZCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBhZnRlck5leHRSZW5kZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTVBUWSwgU3ViamVjdCwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgbWVyZ2UsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJU19CUk9XU0VSIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQge1xuICBOZ3VDYXJvdXNlbERlZkRpcmVjdGl2ZSxcbiAgTmd1Q2Fyb3VzZWxOZXh0RGlyZWN0aXZlLFxuICBOZ3VDYXJvdXNlbE91dGxldCxcbiAgTmd1Q2Fyb3VzZWxQcmV2RGlyZWN0aXZlXG59IGZyb20gJy4uL25ndS1jYXJvdXNlbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgQnJlYWtwb2ludHMsXG4gIE5ndUNhcm91c2VsQ29uZmlnLFxuICBOZ3VDYXJvdXNlbE91dGxldENvbnRleHQsXG4gIE5ndUNhcm91c2VsU3RvcmUsXG4gIFRyYW5zZnJvbVxufSBmcm9tICcuL25ndS1jYXJvdXNlbCc7XG5pbXBvcnQgeyBOZ3VDYXJvdXNlbEhhbW1lck1hbmFnZXIgfSBmcm9tICcuL25ndS1jYXJvdXNlbC1oYW1tZXItbWFuYWdlcic7XG5pbXBvcnQgeyBOZ3VXaW5kb3dTY3JvbGxMaXN0ZW5lciB9IGZyb20gJy4vbmd1LXdpbmRvdy1zY3JvbGwtbGlzdGVuZXInO1xuXG50eXBlIERpcmVjdGlvblN5bWJvbCA9ICcnIHwgJy0nO1xuXG50eXBlIE5ndUNhcm91c2VsRGF0YVNvdXJjZTxULCBVPiA9IChVICYgTmdJdGVyYWJsZTxUPikgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4vLyBUaGlzIHdpbGwgYmUgcHJvdmlkZWQgdGhyb3VnaCBUZXJzZXIgZ2xvYmFsIGRlZmluaXRpb25zIGJ5IEFuZ3VsYXIgQ0xJLlxuLy8gVGhpcyBpcyBob3cgQW5ndWxhciBkb2VzIHRyZWUtc2hha2luZyBpbnRlcm5hbGx5LlxuZGVjbGFyZSBjb25zdCBuZ0Rldk1vZGU6IGJvb2xlYW47XG5cbmNvbnN0IE5HX0RFVl9NT0RFID0gdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3UtY2Fyb3VzZWwnLFxuICB0ZW1wbGF0ZVVybDogJ25ndS1jYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWyduZ3UtY2Fyb3VzZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW05ndUNhcm91c2VsSGFtbWVyTWFuYWdlcl0sXG4gIGltcG9ydHM6IFtOZ3VDYXJvdXNlbE91dGxldF1cbn0pXG5leHBvcnQgY2xhc3MgTmd1Q2Fyb3VzZWw8VCwgVSBleHRlbmRzIE5nSXRlcmFibGU8VD4gPSBOZ0l0ZXJhYmxlPFQ+PlxuICBleHRlbmRzIE5ndUNhcm91c2VsU3RvcmVcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgcHJpdmF0ZSBfaG9zdCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgX3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHByaXZhdGUgX2RpZmZlcnMgPSBpbmplY3QoSXRlcmFibGVEaWZmZXJzKTtcbiAgcHJpdmF0ZSBfaXNCcm93c2VyID0gaW5qZWN0KElTX0JST1dTRVIpO1xuICBwcml2YXRlIF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSBfbmd1V2luZG93U2Nyb2xsTGlzdGVuZXIgPSBpbmplY3QoTmd1V2luZG93U2Nyb2xsTGlzdGVuZXIpO1xuICBwcml2YXRlIF9uZ3VDYXJvdXNlbEhhbW1lck1hbmFnZXIgPSBpbmplY3QoTmd1Q2Fyb3VzZWxIYW1tZXJNYW5hZ2VyKTtcbiAgcHJpdmF0ZSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgLyoqIFB1YmxpYyBwcm9wZXJ0eSB0aGF0IG1heSBiZSBhY2Nlc3NlZCBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQuICovXG4gIHJlYWRvbmx5IGFjdGl2ZVBvaW50ID0gc2lnbmFsKDApO1xuICByZWFkb25seSBwb2ludE51bWJlcnMgPSBzaWduYWw8bnVtYmVyW10+KFtdKTtcblxuICByZWFkb25seSBpbnB1dHMgPSBpbnB1dC5yZXF1aXJlZDxOZ3VDYXJvdXNlbENvbmZpZz4oKTtcbiAgcmVhZG9ubHkgY2Fyb3VzZWxMb2FkID0gb3V0cHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgb25Nb3ZlID0gb3V0cHV0PHRoaXM+KCk7XG5cbiAgcHJpdmF0ZSBfZGVmRGlyZWN0aXZlcyA9IGNvbnRlbnRDaGlsZHJlbihOZ3VDYXJvdXNlbERlZkRpcmVjdGl2ZSk7XG5cbiAgcHJpdmF0ZSBfbm9kZU91dGxldCA9IHZpZXdDaGlsZC5yZXF1aXJlZChOZ3VDYXJvdXNlbE91dGxldCk7XG5cbiAgcmVhZG9ubHkgbmV4dEJ1dHRvbiA9IGNvbnRlbnRDaGlsZChOZ3VDYXJvdXNlbE5leHREaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcbiAgcmVhZG9ubHkgcHJldkJ1dHRvbiA9IGNvbnRlbnRDaGlsZChOZ3VDYXJvdXNlbFByZXZEaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcblxuICByZWFkb25seSBjYXJvdXNlbE1haW4xID0gdmlld0NoaWxkLnJlcXVpcmVkKCduZ3VjYXJvdXNlbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcbiAgcmVhZG9ubHkgX25ndUl0ZW1zQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkKCduZ3VJdGVtc0NvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcbiAgcmVhZG9ubHkgX3RvdWNoQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkKCd0b3VjaENvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcblxuICBwcml2YXRlIF9hcnJheUNoYW5nZXM6IEl0ZXJhYmxlQ2hhbmdlczxUPiB8IG51bGwgPSBudWxsO1xuXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2UgPSBpbnB1dC5yZXF1aXJlZCh7XG4gICAgdHJhbnNmb3JtOiAodjogTmd1Q2Fyb3VzZWxEYXRhU291cmNlPFQsIFU+KSA9PiB2IHx8IChbXSBhcyBuZXZlcilcbiAgfSk7XG5cbiAgcHJpdmF0ZSBfaW50ZXJ2YWxDb250cm9sbGVyJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICBwcml2YXRlIF9oYW1tZXI6IEhhbW1lck1hbmFnZXIgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF93aXRoQW5pbWF0aW9uID0gdHJ1ZTtcblxuICBwcml2YXRlIF9kaXJlY3Rpb25TeW1ib2w6IERpcmVjdGlvblN5bWJvbDtcblxuICBwcml2YXRlIF9jYXJvdXNlbENzc05vZGU6IEhUTUxTdHlsZUVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSBfZGF0YURpZmZlcjogSXRlcmFibGVEaWZmZXI8VD47XG5cbiAgcHJpdmF0ZSBfc3R5bGVpZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgX3BvaW50SW5kZXg6IG51bWJlcjtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFRyYWNraW5nIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNoZWNrIHRoZSBkaWZmZXJlbmNlcyBpbiBkYXRhIGNoYW5nZXMuIFVzZWQgc2ltaWxhcmx5XG4gICAqIHRvIGBuZ0ZvcmAgYHRyYWNrQnlgIGZ1bmN0aW9uLiBPcHRpbWl6ZSBJdGVtcyBvcGVyYXRpb25zIGJ5IGlkZW50aWZ5aW5nIGEgSXRlbXMgYmFzZWQgb24gaXRzIGRhdGFcbiAgICogcmVsYXRpdmUgdG8gdGhlIGZ1bmN0aW9uIHRvIGtub3cgaWYgYSBJdGVtcyBzaG91bGQgYmUgYWRkZWQvcmVtb3ZlZC9tb3ZlZC5cbiAgICogQWNjZXB0cyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdHdvIHBhcmFtZXRlcnMsIGBpbmRleGAgYW5kIGBpdGVtYC5cbiAgICovXG4gIHJlYWRvbmx5IHRyYWNrQnkgPSBpbnB1dDxUcmFja0J5RnVuY3Rpb248VD4+KCk7XG4gIHJlYWRvbmx5IF90cmFja0J5Rm4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZm4gPSB0aGlzLnRyYWNrQnkoKTtcbiAgICBpZiAoTkdfREVWX01PREUgJiYgZm4gIT0gbnVsbCAmJiB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicgJiYgY29uc29sZT8ud2Fybikge1xuICAgICAgY29uc29sZS53YXJuKGB0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoZm4pfS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuIHx8ICgoaW5kZXg6IG51bWJlciwgaXRlbTogVCkgPT4gaXRlbSk7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZGF0YURpZmZlciA9IHRoaXMuX2RpZmZlcnMuZmluZChbXSkuY3JlYXRlKHRoaXMuX3RyYWNrQnlGbigpKSE7XG5cbiAgICBhZnRlck5leHRSZW5kZXIoe1xuICAgICAgZWFybHlSZWFkOiAoKSA9PiB0cnVlLFxuICAgICAgd3JpdGU6ICgpID0+IHtcbiAgICAgICAgdGhpcy5faW5wdXRWYWxpZGF0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxDc3NOb2RlID0gdGhpcy5fY3JlYXRlU3R5bGVFbGVtKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQnJvd3Nlcikge1xuICAgICAgICAgIHRoaXMuX2Nhcm91c2VsSW50ZXJ2YWwoKTtcbiAgICAgICAgICBpZiAoIXRoaXMudmVydGljYWwuZW5hYmxlZCAmJiB0aGlzLmlucHV0cygpPy50b3VjaCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBIYW1tZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fc2V0dXBXaW5kb3dSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgIHRoaXMuX29uV2luZG93U2Nyb2xsaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBfID0gdGhpcy5fZGVmRGlyZWN0aXZlcygpO1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVNvdXJjZSgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMuX2NoZWNrQ2hhbmdlcyhkYXRhKSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoY2xlYW51cCA9PiB7XG4gICAgICBjb25zdCBwcmV2QnV0dG9uID0gdGhpcy5wcmV2QnV0dG9uKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAocHJldkJ1dHRvbikge1xuICAgICAgICAgIGNvbnN0IHByZVN1YiA9IGZyb21FdmVudChwcmV2QnV0dG9uLm5hdGl2ZUVsZW1lbnQsICdjbGljaycpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jYXJvdXNlbFNjcm9sbE9uZSgwKSk7XG4gICAgICAgICAgY2xlYW51cCgoKSA9PiBwcmVTdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KGNsZWFudXAgPT4ge1xuICAgICAgY29uc3QgbmV4dEJ1dHRvbiA9IHRoaXMubmV4dEJ1dHRvbigpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKG5leHRCdXR0b24pIHtcbiAgICAgICAgICBjb25zdCBuZXh0U3ViID0gZnJvbUV2ZW50KG5leHRCdXR0b24ubmF0aXZlRWxlbWVudCwgJ2NsaWNrJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2Nhcm91c2VsU2Nyb2xsT25lKDEpKTtcbiAgICAgICAgICBjbGVhbnVwKCgpID0+IG5leHRTdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tDaGFuZ2VzKGRhdGE6IE5ndUNhcm91c2VsRGF0YVNvdXJjZTxULCBVPikge1xuICAgIC8vIGlmICh0aGlzLm5ndV9kaXJ0eSkge1xuICAgIC8vICAgdGhpcy5uZ3VfZGlydHkgPSBmYWxzZTtcbiAgICAvLyAgIGNvbnN0IGRhdGFTdHJlYW0gPSB0aGlzLmRhdGFTb3VyY2U7XG4gICAgLy8gICBpZiAoIXRoaXMuX2FycmF5Q2hhbmdlcyAmJiAhIWRhdGFTdHJlYW0pIHtcbiAgICAvLyAgICAgdGhpcy5fZGF0YURpZmZlciA9IHRoaXMuX2RpZmZlcnNcbiAgICAvLyAgICAgICAuZmluZChkYXRhU3RyZWFtKVxuICAgIC8vICAgICAgIC5jcmVhdGUoKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4gdGhpcy5fdHJhY2tCeUZuKCkoaW5kZXgsIGl0ZW0pKSE7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIC8vIGlmICh0aGlzLl9kYXRhRGlmZmVyKSB7XG4gICAgLy8gICB0aGlzLl9hcnJheUNoYW5nZXMgPVxuICAgIC8vICAgICB0aGlzLl9tYXJrZWRGb3JDaGVjayAmJiB0aGlzLl9hcnJheUNoYW5nZXNcbiAgICAvLyAgICAgICA/IHRoaXMuX2FycmF5Q2hhbmdlc1xuICAgIC8vICAgICAgIDogdGhpcy5fZGF0YURpZmZlci5kaWZmKHRoaXMuZGF0YVNvdXJjZSkhO1xuICAgIC8vICAgaWYgKHRoaXMuX2FycmF5Q2hhbmdlcykge1xuICAgIC8vICAgICB0aGlzLnJlbmRlck5vZGVDaGFuZ2VzKEFycmF5LmZyb20odGhpcy5kYXRhU291cmNlKCkpKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgdGhpcy5fYXJyYXlDaGFuZ2VzID0gdGhpcy5fZGF0YURpZmZlci5kaWZmKGRhdGEpO1xuICAgIGlmICh0aGlzLl9hcnJheUNoYW5nZXMpIHtcbiAgICAgIHRoaXMucmVuZGVyTm9kZUNoYW5nZXMoQXJyYXkuZnJvbShkYXRhIGFzIGFueSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyTm9kZUNoYW5nZXMoZGF0YTogYW55W10pIHtcbiAgICBpZiAoIXRoaXMuX2FycmF5Q2hhbmdlcykgcmV0dXJuO1xuICAgIHRoaXMuaXNMYXN0LnNldCh0aGlzLl9wb2ludEluZGV4ID09PSB0aGlzLmN1cnJlbnRTbGlkZSk7XG4gICAgY29uc3Qgdmlld0NvbnRhaW5lciA9IHRoaXMuX25vZGVPdXRsZXQoKS52aWV3Q29udGFpbmVyO1xuICAgIC8vIHRoaXMuX21hcmtlZEZvckNoZWNrID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXlDaGFuZ2VzLmZvckVhY2hPcGVyYXRpb24oXG4gICAgICAoXG4gICAgICAgIGl0ZW06IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPGFueT4sXG4gICAgICAgIGFkanVzdGVkUHJldmlvdXNJbmRleDogbnVtYmVyIHwgbnVsbCxcbiAgICAgICAgY3VycmVudEluZGV4OiBudW1iZXIgfCBudWxsXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2dldE5vZGVEZWYoZGF0YVtjdXJyZW50SW5kZXghXSwgY3VycmVudEluZGV4ISk7XG4gICAgICAgIGlmIChub2RlPy50ZW1wbGF0ZSkge1xuICAgICAgICAgIGlmIChpdGVtLnByZXZpb3VzSW5kZXggPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBOZ3VDYXJvdXNlbE91dGxldENvbnRleHQ8YW55PihkYXRhW2N1cnJlbnRJbmRleCFdKTtcbiAgICAgICAgICAgIGNvbnRleHQuaW5kZXggPSBjdXJyZW50SW5kZXghO1xuICAgICAgICAgICAgdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcobm9kZS50ZW1wbGF0ZSwgY29udGV4dCwgY3VycmVudEluZGV4ISk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW5kZXggPT0gbnVsbCkge1xuICAgICAgICAgICAgdmlld0NvbnRhaW5lci5yZW1vdmUoYWRqdXN0ZWRQcmV2aW91c0luZGV4ISk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB2aWV3Q29udGFpbmVyLmdldChhZGp1c3RlZFByZXZpb3VzSW5kZXghKTtcbiAgICAgICAgICAgIHZpZXdDb250YWluZXIubW92ZSh2aWV3ISwgY3VycmVudEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuX3VwZGF0ZUl0ZW1JbmRleENvbnRleHQoKTtcblxuICAgIGlmICh0aGlzLl9ob3N0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3N0b3JlQ2Fyb3VzZWxEYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGluZGV4LXJlbGF0ZWQgY29udGV4dCBmb3IgZWFjaCByb3cgdG8gcmVmbGVjdCBhbnkgY2hhbmdlcyBpbiB0aGUgaW5kZXggb2YgdGhlIHJvd3MsXG4gICAqIGUuZy4gZmlyc3QvbGFzdC9ldmVuL29kZC5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUl0ZW1JbmRleENvbnRleHQoKSB7XG4gICAgY29uc3Qgdmlld0NvbnRhaW5lciA9IHRoaXMuX25vZGVPdXRsZXQoKS52aWV3Q29udGFpbmVyO1xuICAgIGZvciAobGV0IHJlbmRlckluZGV4ID0gMCwgY291bnQgPSB2aWV3Q29udGFpbmVyLmxlbmd0aDsgcmVuZGVySW5kZXggPCBjb3VudDsgcmVuZGVySW5kZXgrKykge1xuICAgICAgY29uc3Qgdmlld1JlZiA9IHZpZXdDb250YWluZXIuZ2V0KHJlbmRlckluZGV4KSBhcyBhbnk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdmlld1JlZi5jb250ZXh0IGFzIGFueTtcbiAgICAgIGNvbnRleHQuY291bnQgPSBjb3VudDtcbiAgICAgIGNvbnRleHQuZmlyc3QgPSByZW5kZXJJbmRleCA9PT0gMDtcbiAgICAgIGNvbnRleHQubGFzdCA9IHJlbmRlckluZGV4ID09PSBjb3VudCAtIDE7XG4gICAgICBjb250ZXh0LmV2ZW4gPSByZW5kZXJJbmRleCAlIDIgPT09IDA7XG4gICAgICBjb250ZXh0Lm9kZCA9ICFjb250ZXh0LmV2ZW47XG4gICAgICBjb250ZXh0LmluZGV4ID0gcmVuZGVySW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Tm9kZURlZihkYXRhOiBhbnksIGk6IG51bWJlcik6IE5ndUNhcm91c2VsRGVmRGlyZWN0aXZlPGFueT4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLl9kZWZEaXJlY3RpdmVzKCk/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZkRpcmVjdGl2ZXMoKVswXTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlRGVmOiBOZ3VDYXJvdXNlbERlZkRpcmVjdGl2ZTxhbnk+IHwgdW5kZWZpbmVkID0gKHRoaXMuX2RlZkRpcmVjdGl2ZXMoKSB8fCBbXSkuZmluZChcbiAgICAgIGRlZiA9PiAhIWRlZi53aGVuPy4oaSwgZGF0YSlcbiAgICApO1xuXG4gICAgcmV0dXJuIG5vZGVEZWY7XG4gIH1cblxuICBwcml2YXRlIF9pbnB1dFZhbGlkYXRpb24oKSB7XG4gICAgY29uc3QgaW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcbiAgICBpbnB1dHMuZ3JpZEJyZWFrcG9pbnRzID0gaW5wdXRzLmdyaWRCcmVha3BvaW50cyA/IGlucHV0cy5ncmlkQnJlYWtwb2ludHMgOiBuZXcgQnJlYWtwb2ludHMoKTtcbiAgICBpZiAoaW5wdXRzLmdyaWQueGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5wdXRzLmdyaWQueGwgPSBpbnB1dHMuZ3JpZC5sZztcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBpbnB1dHMuZ3JpZC5hbGwgIT09IDAgPyAnZml4ZWQnIDogJ3Jlc3BvbnNpdmUnO1xuICAgIHRoaXMubG9vcCA9IGlucHV0cy5sb29wIHx8IGZhbHNlO1xuICAgIGlucHV0cy5lYXNpbmcgPSBpbnB1dHMuZWFzaW5nIHx8ICdjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSc7XG4gICAgdGhpcy50b3VjaC5hY3RpdmUgPSBpbnB1dHMudG91Y2ggfHwgZmFsc2U7XG4gICAgdGhpcy5SVEwgPSBpbnB1dHMuUlRMID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBpbnB1dHMuaW50ZXJ2YWwgfHwgdW5kZWZpbmVkO1xuICAgIHRoaXMudmVsb2NpdHkgPSB0eXBlb2YgaW5wdXRzLnZlbG9jaXR5ID09PSAnbnVtYmVyJyA/IGlucHV0cy52ZWxvY2l0eSA6IHRoaXMudmVsb2NpdHk7XG5cbiAgICBpZiAoaW5wdXRzLnZlcnRpY2FsICYmIGlucHV0cy52ZXJ0aWNhbC5lbmFibGVkKSB7XG4gICAgICB0aGlzLnZlcnRpY2FsLmVuYWJsZWQgPSBpbnB1dHMudmVydGljYWwuZW5hYmxlZDtcbiAgICAgIHRoaXMudmVydGljYWwuaGVpZ2h0ID0gaW5wdXRzLnZlcnRpY2FsLmhlaWdodDtcbiAgICB9XG4gICAgdGhpcy5fZGlyZWN0aW9uU3ltYm9sID0gdGhpcy5SVEwgPyAnJyA6ICctJztcbiAgICB0aGlzLnBvaW50ID1cbiAgICAgIGlucHV0cy5wb2ludCAmJiB0eXBlb2YgaW5wdXRzLnBvaW50LnZpc2libGUgIT09ICd1bmRlZmluZWQnID8gaW5wdXRzLnBvaW50LnZpc2libGUgOiB0cnVlO1xuXG4gICAgdGhpcy5fY2Fyb3VzZWxTaXplKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9oYW1tZXI/LmRlc3Ryb3koKTtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gIH1cblxuICAvKiogR2V0IFRvdWNoIGlucHV0ICovXG4gIHByaXZhdGUgX3NldHVwSGFtbWVyKCk6IHZvaWQge1xuICAgIC8vIE5vdGU6IGRvZXNuJ3QgbmVlZCB0byB1bnN1YnNjcmliZSBiZWNhdXNlIHN0cmVhbXMgYXJlIHBpcGVkIHdpdGggYHRha2VVbnRpbGAgYWxyZWFkeS5cbiAgICB0aGlzLl9uZ3VDYXJvdXNlbEhhbW1lck1hbmFnZXJcbiAgICAgIC5jcmVhdGVIYW1tZXIodGhpcy5fdG91Y2hDb250YWluZXIoKS5uYXRpdmVFbGVtZW50KVxuICAgICAgLnN1YnNjcmliZShoYW1tZXIgPT4ge1xuICAgICAgICB0aGlzLl9oYW1tZXIgPSBoYW1tZXI7XG5cbiAgICAgICAgaGFtbWVyLmdldCgncGFuJykuc2V0KHsgZGlyZWN0aW9uOiBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgfSk7XG5cbiAgICAgICAgdGhpcy5fbmd1Q2Fyb3VzZWxIYW1tZXJNYW5hZ2VyLm9uKGhhbW1lciwgJ3BhbnN0YXJ0Jykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNhcm91c2VsV2lkdGggPSB0aGlzLl9uZ3VJdGVtc0NvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgdGhpcy50b3VjaFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtW3RoaXMuZGV2aWNlVHlwZSFdITtcbiAgICAgICAgICB0aGlzLmRleFZhbCA9IDA7XG4gICAgICAgICAgdGhpcy5fc2V0U3R5bGUodGhpcy5fbmd1SXRlbXNDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbicsICcnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMudmVydGljYWwuZW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMuX25ndUNhcm91c2VsSGFtbWVyTWFuYWdlci5vbihoYW1tZXIsICdwYW51cCcpLnN1YnNjcmliZSgoZXY6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG91Y2hIYW5kbGluZygncGFubGVmdCcsIGV2KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuX25ndUNhcm91c2VsSGFtbWVyTWFuYWdlci5vbihoYW1tZXIsICdwYW5kb3duJykuc3Vic2NyaWJlKChldjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90b3VjaEhhbmRsaW5nKCdwYW5yaWdodCcsIGV2KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9uZ3VDYXJvdXNlbEhhbW1lck1hbmFnZXIub24oaGFtbWVyLCAncGFubGVmdCcpLnN1YnNjcmliZSgoZXY6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG91Y2hIYW5kbGluZygncGFubGVmdCcsIGV2KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuX25ndUNhcm91c2VsSGFtbWVyTWFuYWdlci5vbihoYW1tZXIsICdwYW5yaWdodCcpLnN1YnNjcmliZSgoZXY6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG91Y2hIYW5kbGluZygncGFucmlnaHQnLCBldik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9uZ3VDYXJvdXNlbEhhbW1lck1hbmFnZXIub24oaGFtbWVyLCAncGFuZW5kIHBhbmNhbmNlbCcpLnN1YnNjcmliZSgoeyB2ZWxvY2l0eSB9KSA9PiB7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKHZlbG9jaXR5KSA+PSB0aGlzLnZlbG9jaXR5KSB7XG4gICAgICAgICAgICB0aGlzLnRvdWNoLnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gICAgICAgICAgICBsZXQgZGlyZWMgPSAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzLlJUTCkge1xuICAgICAgICAgICAgICBkaXJlYyA9IHRoaXMudG91Y2guc3dpcGUgPT09ICdwYW5yaWdodCcgPyAwIDogMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRpcmVjID0gdGhpcy50b3VjaC5zd2lwZSA9PT0gJ3BhbnJpZ2h0JyA/IDEgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTY3JvbGxPbmUoZGlyZWMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRleFZhbCA9IDA7XG4gICAgICAgICAgICB0aGlzLl9zZXRTdHlsZShcbiAgICAgICAgICAgICAgdGhpcy5fbmd1SXRlbXNDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAndHJhbnNpdGlvbicsXG4gICAgICAgICAgICAgICd0cmFuc2Zvcm0gMzI0bXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSknXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5fc2V0U3R5bGUodGhpcy5fbmd1SXRlbXNDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fbmd1Q2Fyb3VzZWxIYW1tZXJNYW5hZ2VyLm9uKGhhbW1lciwgJ2hhbW1lci5pbnB1dCcpLnN1YnNjcmliZSgoeyBzcmNFdmVudCB9KSA9PiB7XG4gICAgICAgICAgLy8gYWxsb3cgbmVzdGVkIHRvdWNoIGV2ZW50cyB0byBubyBwcm9wYWdhdGUsIHRoaXMgbWF5IGhhdmUgb3RoZXIgc2lkZSBhZmZlY3RzIGJ1dCB3b3JrcyBmb3Igbm93LlxuICAgICAgICAgIC8vIFRPRE86IEl0IGlzIHByb2JhYmx5IGJldHRlciB0byBjaGVjayB0aGUgc291cmNlIGVsZW1lbnQgb2YgdGhlIGV2ZW50IGFuZCBvbmx5IGFwcGx5IHRoZSBoYW5kbGUgdG8gdGhlIGNvcnJlY3QgY2Fyb3VzZWxcbiAgICAgICAgICBzcmNFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiBoYW5kbGUgdG91Y2ggaW5wdXQgKi9cbiAgcHJpdmF0ZSBfdG91Y2hIYW5kbGluZyhlOiBzdHJpbmcsIGV2OiBhbnkpOiB2b2lkIHtcbiAgICAvLyB2ZXJ0aWNhbCB0b3VjaCBldmVudHMgc2VlbSB0byBjYXVzZSB0byBwYW5zdGFydCBldmVudCB3aXRoIGFuIG9kZCBkZWx0YVxuICAgIC8vIGFuZCBhIGNlbnRlciBvZiB7eDowLHk6MH0gc28gdGhpcyB3aWxsIGlnbm9yZSB0aGVtXG4gICAgaWYgKGV2LmNlbnRlci54ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXYgPSBNYXRoLmFicyh0aGlzLnZlcnRpY2FsLmVuYWJsZWQgPyBldi5kZWx0YVkgOiBldi5kZWx0YVgpO1xuICAgIGxldCB2YWx0ID0gZXYgLSB0aGlzLmRleFZhbDtcbiAgICB2YWx0ID1cbiAgICAgIHRoaXMudHlwZSA9PT0gJ3Jlc3BvbnNpdmUnXG4gICAgICAgID8gKE1hdGguYWJzKGV2IC0gdGhpcy5kZXhWYWwpIC9cbiAgICAgICAgICAgICh0aGlzLnZlcnRpY2FsLmVuYWJsZWQgPyB0aGlzLnZlcnRpY2FsLmhlaWdodCA6IHRoaXMuY2Fyb3VzZWxXaWR0aCkpICpcbiAgICAgICAgICAxMDBcbiAgICAgICAgOiB2YWx0O1xuICAgIHRoaXMuZGV4VmFsID0gZXY7XG4gICAgdGhpcy50b3VjaC5zd2lwZSA9IGU7XG4gICAgdGhpcy5fc2V0VG91Y2hUcmFuc2Zyb20oZSwgdmFsdCk7XG4gICAgdGhpcy5fc2V0VHJhbnNmb3JtRnJvbVRvdWNoKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRUb3VjaFRyYW5zZnJvbShlOiBzdHJpbmcsIHZhbHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuUlRMID8gJ3BhbnJpZ2h0JyA6ICdwYW5sZWZ0JztcbiAgICB0aGlzLnRvdWNoVHJhbnNmb3JtID0gZSA9PT0gY29uZGl0aW9uID8gdmFsdCArIHRoaXMudG91Y2hUcmFuc2Zvcm0gOiB0aGlzLnRvdWNoVHJhbnNmb3JtIC0gdmFsdDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldFRyYW5zZm9ybUZyb21Ub3VjaCgpIHtcbiAgICBpZiAodGhpcy50b3VjaFRyYW5zZm9ybSA8IDApIHtcbiAgICAgIHRoaXMudG91Y2hUcmFuc2Zvcm0gPSAwO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlID09PSAncmVzcG9uc2l2ZScgPyAnJScgOiAncHgnO1xuICAgIHRoaXMuX3NldFN0eWxlKFxuICAgICAgdGhpcy5fbmd1SXRlbXNDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LFxuICAgICAgJ3RyYW5zZm9ybScsXG4gICAgICB0aGlzLnZlcnRpY2FsLmVuYWJsZWRcbiAgICAgICAgPyBgdHJhbnNsYXRlM2QoMCwgJHt0aGlzLl9kaXJlY3Rpb25TeW1ib2x9JHt0aGlzLnRvdWNoVHJhbnNmb3JtfSR7dHlwZX0sIDApYFxuICAgICAgICA6IGB0cmFuc2xhdGUzZCgke3RoaXMuX2RpcmVjdGlvblN5bWJvbH0ke3RoaXMudG91Y2hUcmFuc2Zvcm19JHt0eXBlfSwgMCwgMClgXG4gICAgKTtcbiAgfVxuXG4gIC8qKiB0aGlzIGZuIHVzZWQgdG8gZGlzYWJsZSB0aGUgaW50ZXJ2YWwgd2hlbiBpdCBpcyBub3Qgb24gdGhlIHZpZXdwb3J0ICovXG4gIHByaXZhdGUgX29uV2luZG93U2Nyb2xsaW5nKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgb2Zmc2V0VG9wLCBvZmZzZXRIZWlnaHQgfSA9IHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB7IHNjcm9sbFk6IHdpbmRvd1Njcm9sbFksIGlubmVySGVpZ2h0OiB3aW5kb3dJbm5lckhlaWdodCB9ID0gd2luZG93O1xuXG4gICAgY29uc3QgaXNDYXJvdXNlbE9uU2NyZWVuID1cbiAgICAgIG9mZnNldFRvcCA8PSB3aW5kb3dTY3JvbGxZICsgd2luZG93SW5uZXJIZWlnaHQgLSBvZmZzZXRIZWlnaHQgLyA0ICYmXG4gICAgICBvZmZzZXRIZWlnaHQgKyBvZmZzZXRIZWlnaHQgLyAyID49IHdpbmRvd1Njcm9sbFk7XG5cbiAgICBpZiAoaXNDYXJvdXNlbE9uU2NyZWVuKSB7XG4gICAgICB0aGlzLl9pbnRlcnZhbENvbnRyb2xsZXIkLm5leHQoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2ludGVydmFsQ29udHJvbGxlciQubmV4dCgwKTtcbiAgICB9XG4gIH1cblxuICAvKiogc3RvcmUgZGF0YSBiYXNlZCBvbiB3aWR0aCBvZiB0aGUgc2NyZWVuIGZvciB0aGUgY2Fyb3VzZWwgKi9cbiAgcHJpdmF0ZSBfc3RvcmVDYXJvdXNlbERhdGEoKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcbiAgICBjb25zdCBicmVha3BvaW50cyA9IHRoaXMuaW5wdXRzKCkuZ3JpZEJyZWFrcG9pbnRzO1xuICAgIHRoaXMuZGV2aWNlV2lkdGggPSB0aGlzLl9pc0Jyb3dzZXIgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IGJyZWFrcG9pbnRzPy54bCE7XG5cbiAgICB0aGlzLmNhcm91c2VsV2lkdGggPSB0aGlzLmNhcm91c2VsTWFpbjEoKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3Jlc3BvbnNpdmUnKSB7XG4gICAgICB0aGlzLmRldmljZVR5cGUgPVxuICAgICAgICB0aGlzLmRldmljZVdpZHRoID49IGJyZWFrcG9pbnRzPy54bCFcbiAgICAgICAgICA/ICd4bCdcbiAgICAgICAgICA6IHRoaXMuZGV2aWNlV2lkdGggPj0gYnJlYWtwb2ludHM/LmxnIVxuICAgICAgICAgICAgPyAnbGcnXG4gICAgICAgICAgICA6IHRoaXMuZGV2aWNlV2lkdGggPj0gYnJlYWtwb2ludHM/Lm1kIVxuICAgICAgICAgICAgICA/ICdtZCdcbiAgICAgICAgICAgICAgOiB0aGlzLmRldmljZVdpZHRoID49IGJyZWFrcG9pbnRzPy5zbSFcbiAgICAgICAgICAgICAgICA/ICdzbSdcbiAgICAgICAgICAgICAgICA6ICd4cyc7XG5cbiAgICAgIHRoaXMuaXRlbXMgPSBpbnB1dHMuZ3JpZFt0aGlzLmRldmljZVR5cGVdITtcbiAgICAgIHRoaXMuaXRlbVdpZHRoID0gdGhpcy5jYXJvdXNlbFdpZHRoIC8gdGhpcy5pdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtcyA9IE1hdGgudHJ1bmModGhpcy5jYXJvdXNlbFdpZHRoIC8gaW5wdXRzLmdyaWQuYWxsKTtcbiAgICAgIHRoaXMuaXRlbVdpZHRoID0gaW5wdXRzLmdyaWQuYWxsO1xuICAgICAgdGhpcy5kZXZpY2VUeXBlID0gJ2FsbCc7XG4gICAgfVxuXG4gICAgdGhpcy5zbGlkZUl0ZW1zID0gKyhpbnB1dHMuc2xpZGUhIDwgdGhpcy5pdGVtcyA/IGlucHV0cy5zbGlkZSEgOiB0aGlzLml0ZW1zKTtcbiAgICB0aGlzLmxvYWQgPSBpbnB1dHMubG9hZCEgPj0gdGhpcy5zbGlkZUl0ZW1zID8gaW5wdXRzLmxvYWQhIDogdGhpcy5zbGlkZUl0ZW1zO1xuICAgIHRoaXMuc3BlZWQgPSBpbnB1dHMuc3BlZWQgJiYgaW5wdXRzLnNwZWVkID4gLTEgPyBpbnB1dHMuc3BlZWQgOiA0MDA7XG4gICAgdGhpcy5fY2Fyb3VzZWxQb2ludCgpO1xuICB9XG5cbiAgLyoqIFVzZWQgdG8gcmVzZXQgdGhlIGNhcm91c2VsICovXG4gIHB1YmxpYyByZXNldCh3aXRob3V0QW5pbWF0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHdpdGhvdXRBbmltYXRpb24gJiYgKHRoaXMuX3dpdGhBbmltYXRpb24gPSBmYWxzZSk7XG4gICAgdGhpcy5fY2Fyb3VzZWxDc3NOb2RlLnRleHRDb250ZW50ID0gJyc7XG4gICAgdGhpcy5tb3ZlVG8oMCk7XG4gICAgdGhpcy5fY2Fyb3VzZWxQb2ludCgpO1xuICB9XG5cbiAgLyoqIEluaXQgY2Fyb3VzZWwgcG9pbnQgKi9cbiAgcHJpdmF0ZSBfY2Fyb3VzZWxQb2ludCgpOiB2b2lkIHtcbiAgICBjb25zdCBOb3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVNvdXJjZSgpKS5sZW5ndGggLSAodGhpcy5pdGVtcyAtIHRoaXMuc2xpZGVJdGVtcyk7XG4gICAgdGhpcy5fcG9pbnRJbmRleCA9IE1hdGguY2VpbChOb3MgLyB0aGlzLnNsaWRlSXRlbXMpO1xuICAgIGNvbnN0IHBvaW50ZXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BvaW50SW5kZXggPiAxIHx8ICF0aGlzLmlucHV0cygpLnBvaW50Py5oaWRlT25TaW5nbGVTbGlkZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9wb2ludEluZGV4OyBpKyspIHtcbiAgICAgICAgcG9pbnRlcnMucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wb2ludE51bWJlcnMuc2V0KHBvaW50ZXJzKTtcblxuICAgIHRoaXMuX2Nhcm91c2VsUG9pbnRBY3RpdmVyKCk7XG4gICAgaWYgKHRoaXMuX3BvaW50SW5kZXggPD0gMSkge1xuICAgICAgdGhpcy5fYnRuQm9vbGVhbigxLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFNsaWRlID09PSAwICYmICF0aGlzLmxvb3ApIHtcbiAgICAgICAgdGhpcy5fYnRuQm9vbGVhbigxLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2J0bkJvb2xlYW4oMCwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGNoYW5nZSB0aGUgYWN0aXZlIHBvaW50IGluIGNhcm91c2VsICovXG4gIHByaXZhdGUgX2Nhcm91c2VsUG9pbnRBY3RpdmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGkgPSBNYXRoLmNlaWwodGhpcy5jdXJyZW50U2xpZGUgLyB0aGlzLnNsaWRlSXRlbXMpO1xuICAgIHRoaXMuYWN0aXZlUG9pbnQuc2V0KGkpO1xuICB9XG5cbiAgLyoqIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzY29sbCB0aGUgY2Fyb3VzZWwgd2hlbiBwb2ludCBpcyBjbGlja2VkICovXG4gIHB1YmxpYyBtb3ZlVG8oc2xpZGU6IG51bWJlciwgd2l0aG91dEFuaW1hdGlvbj86IGJvb2xlYW4pIHtcbiAgICAvLyBzbGlkZSA9IHNsaWRlIC0gMTtcbiAgICB3aXRob3V0QW5pbWF0aW9uICYmICh0aGlzLl93aXRoQW5pbWF0aW9uID0gZmFsc2UpO1xuICAgIGlmICh0aGlzLmFjdGl2ZVBvaW50KCkgIT09IHNsaWRlICYmIHNsaWRlIDwgdGhpcy5fcG9pbnRJbmRleCkge1xuICAgICAgbGV0IHNsaWRlcmVtYWlucztcbiAgICAgIGNvbnN0IGJ0bnMgPSB0aGlzLmN1cnJlbnRTbGlkZSA8IHNsaWRlID8gMSA6IDA7XG5cbiAgICAgIHN3aXRjaCAoc2xpZGUpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHRoaXMuX2J0bkJvb2xlYW4oMSwgMCk7XG4gICAgICAgICAgc2xpZGVyZW1haW5zID0gc2xpZGUgKiB0aGlzLnNsaWRlSXRlbXM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgdGhpcy5fcG9pbnRJbmRleCAtIDE6XG4gICAgICAgICAgdGhpcy5fYnRuQm9vbGVhbigwLCAxKTtcbiAgICAgICAgICBzbGlkZXJlbWFpbnMgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVNvdXJjZSgpKS5sZW5ndGggLSB0aGlzLml0ZW1zO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRoaXMuX2J0bkJvb2xlYW4oMCwgMCk7XG4gICAgICAgICAgc2xpZGVyZW1haW5zID0gc2xpZGUgKiB0aGlzLnNsaWRlSXRlbXM7XG4gICAgICB9XG4gICAgICB0aGlzLl9jYXJvdXNlbFNjcm9sbFR3byhidG5zLCBzbGlkZXJlbWFpbnMsIHRoaXMuc3BlZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBzZXQgdGhlIHN0eWxlIG9mIHRoZSBjYXJvdXNlbCBiYXNlZCB0aGUgaW5wdXRzIGRhdGEgKi9cbiAgcHJpdmF0ZSBfY2Fyb3VzZWxTaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0cyA9IHRoaXMuaW5wdXRzKCk7XG4gICAgdGhpcy50b2tlbiA9IHRoaXMuX2dlbmVyYXRlSUQoKTtcbiAgICBsZXQgZGlzbSA9ICcnO1xuICAgIHRoaXMuX3N0eWxlaWQgPSBgLiR7dGhpcy50b2tlbn0gPiAubmd1Y2Fyb3VzZWwgPiAubmd1LWNvbnRhaW5lciA+IC5uZ3UtdG91Y2gtY29udGFpbmVyID4gLm5ndWNhcm91c2VsLWl0ZW1zYDtcblxuICAgIGlmIChpbnB1dHMuY3VzdG9tID09PSAnYmFubmVyJykge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5faG9zdC5uYXRpdmVFbGVtZW50LCAnYmFubmVyJyk7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0cy5hbmltYXRpb24gPT09ICdsYXp5Jykge1xuICAgICAgZGlzbSArPSBgJHt0aGlzLl9zdHlsZWlkfSA+IC5pdGVtIHt0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjZzIGVhc2U7fWA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJlYWtwb2ludHMgPSBpbnB1dHMuZ3JpZEJyZWFrcG9pbnRzO1xuXG4gICAgbGV0IGl0ZW1TdHlsZSA9ICcnO1xuICAgIGlmICh0aGlzLnZlcnRpY2FsLmVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aFhTID0gYCR7dGhpcy5fc3R5bGVpZH0gPiAuaXRlbSB7aGVpZ2h0OiAke1xuICAgICAgICB0aGlzLnZlcnRpY2FsLmhlaWdodCAvICtpbnB1dHMuZ3JpZC54c1xuICAgICAgfXB4fWA7XG4gICAgICBjb25zdCBpdGVtV2lkdGhTTSA9IGAke3RoaXMuX3N0eWxlaWR9ID4gLml0ZW0ge2hlaWdodDogJHtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbC5oZWlnaHQgLyAraW5wdXRzLmdyaWQuc21cbiAgICAgIH1weH1gO1xuICAgICAgY29uc3QgaXRlbVdpZHRoTUQgPSBgJHt0aGlzLl9zdHlsZWlkfSA+IC5pdGVtIHtoZWlnaHQ6ICR7XG4gICAgICAgIHRoaXMudmVydGljYWwuaGVpZ2h0IC8gK2lucHV0cy5ncmlkLm1kXG4gICAgICB9cHh9YDtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aExHID0gYCR7dGhpcy5fc3R5bGVpZH0gPiAuaXRlbSB7aGVpZ2h0OiAke1xuICAgICAgICB0aGlzLnZlcnRpY2FsLmhlaWdodCAvICtpbnB1dHMuZ3JpZC5sZ1xuICAgICAgfXB4fWA7XG4gICAgICBjb25zdCBpdGVtV2lkdGhYTCA9IGAke3RoaXMuX3N0eWxlaWR9ID4gLml0ZW0ge2hlaWdodDogJHtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbC5oZWlnaHQgLyAraW5wdXRzLmdyaWQueGwhXG4gICAgICB9cHh9YDtcblxuICAgICAgaXRlbVN0eWxlID0gYEBtZWRpYSAobWF4LXdpZHRoOiR7YnJlYWtwb2ludHM/LnNtISAtIDF9cHgpeyR7aXRlbVdpZHRoWFN9fVxuICAgICAgICAgICAgICAgICAgICBAbWVkaWEgKG1heC13aWR0aDoke2JyZWFrcG9pbnRzPy5zbX1weCl7JHtpdGVtV2lkdGhTTX19XG4gICAgICAgICAgICAgICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiR7YnJlYWtwb2ludHM/Lm1kfXB4KXske2l0ZW1XaWR0aE1EfX1cbiAgICAgICAgICAgICAgICAgICAgQG1lZGlhIChtaW4td2lkdGg6JHticmVha3BvaW50cz8ubGd9cHgpeyR7aXRlbVdpZHRoTEd9fVxuICAgICAgICAgICAgICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDoke2JyZWFrcG9pbnRzPy54bH1weCl7JHtpdGVtV2lkdGhYTH19YDtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ3Jlc3BvbnNpdmUnKSB7XG4gICAgICBjb25zdCBpdGVtV2lkdGhYUyA9XG4gICAgICAgIGlucHV0cy50eXBlID09PSAnbW9iaWxlJ1xuICAgICAgICAgID8gYCR7dGhpcy5fc3R5bGVpZH0gLml0ZW0ge2ZsZXg6IDAgMCAkezk1IC8gK2lucHV0cy5ncmlkLnhzfSU7IHdpZHRoOiAke1xuICAgICAgICAgICAgICA5NSAvICtpbnB1dHMuZ3JpZC54c1xuICAgICAgICAgICAgfSU7fWBcbiAgICAgICAgICA6IGAke3RoaXMuX3N0eWxlaWR9IC5pdGVtIHtmbGV4OiAwIDAgJHsxMDAgLyAraW5wdXRzLmdyaWQueHN9JTsgd2lkdGg6ICR7XG4gICAgICAgICAgICAgIDEwMCAvICtpbnB1dHMuZ3JpZC54c1xuICAgICAgICAgICAgfSU7fWA7XG5cbiAgICAgIGNvbnN0IGl0ZW1XaWR0aFNNID0gYCR7dGhpcy5fc3R5bGVpZH0gPiAuaXRlbSB7ZmxleDogMCAwICR7MTAwIC8gK2lucHV0cy5ncmlkLnNtfSU7IHdpZHRoOiAke1xuICAgICAgICAxMDAgLyAraW5wdXRzLmdyaWQuc21cbiAgICAgIH0lfWA7XG4gICAgICBjb25zdCBpdGVtV2lkdGhNRCA9IGAke3RoaXMuX3N0eWxlaWR9ID4gLml0ZW0ge2ZsZXg6IDAgMCAkezEwMCAvICtpbnB1dHMuZ3JpZC5tZH0lOyB3aWR0aDogJHtcbiAgICAgICAgMTAwIC8gK2lucHV0cy5ncmlkLm1kXG4gICAgICB9JX1gO1xuICAgICAgY29uc3QgaXRlbVdpZHRoTEcgPSBgJHt0aGlzLl9zdHlsZWlkfSA+IC5pdGVtIHtmbGV4OiAwIDAgJHsxMDAgLyAraW5wdXRzLmdyaWQubGd9JTsgd2lkdGg6ICR7XG4gICAgICAgIDEwMCAvICtpbnB1dHMuZ3JpZC5sZ1xuICAgICAgfSV9YDtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aFhMID0gYCR7dGhpcy5fc3R5bGVpZH0gPiAuaXRlbSB7ZmxleDogMCAwICR7MTAwIC8gK2lucHV0cy5ncmlkLnhsIX0lOyB3aWR0aDogJHtcbiAgICAgICAgMTAwIC8gK2lucHV0cy5ncmlkLnhsIVxuICAgICAgfSV9YDtcblxuICAgICAgaXRlbVN0eWxlID0gYEBtZWRpYSAobWF4LXdpZHRoOiR7YnJlYWtwb2ludHM/LnNtISAtIDF9cHgpeyR7aXRlbVdpZHRoWFN9fVxuICAgICAgICAgICAgICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDoke2JyZWFrcG9pbnRzPy5zbX1weCl7JHtpdGVtV2lkdGhTTX19XG4gICAgICAgICAgICAgICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiR7YnJlYWtwb2ludHM/Lm1kfXB4KXske2l0ZW1XaWR0aE1EfX1cbiAgICAgICAgICAgICAgICAgICAgQG1lZGlhIChtaW4td2lkdGg6JHticmVha3BvaW50cz8ubGd9cHgpeyR7aXRlbVdpZHRoTEd9fVxuICAgICAgICAgICAgICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDoke2JyZWFrcG9pbnRzPy54bH1weCl7JHtpdGVtV2lkdGhYTH19YDtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbVN0eWxlID0gYCR7dGhpcy5fc3R5bGVpZH0gLml0ZW0ge2ZsZXg6IDAgMCAke2lucHV0cy5ncmlkLmFsbH1weDsgd2lkdGg6ICR7aW5wdXRzLmdyaWQuYWxsfXB4O31gO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2hvc3QubmF0aXZlRWxlbWVudCwgdGhpcy50b2tlbik7XG4gICAgaWYgKHRoaXMudmVydGljYWwuZW5hYmxlZCkge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmd1SXRlbXNDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LCAnbmd1dmVydGljYWwnKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmNhcm91c2VsTWFpbjEoKS5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgYCR7dGhpcy52ZXJ0aWNhbC5oZWlnaHR9cHhgXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuUlRMICYmXG4gICAgICAhdGhpcy52ZXJ0aWNhbC5lbmFibGVkICYmXG4gICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9ob3N0Lm5hdGl2ZUVsZW1lbnQsICduZ3VydGwnKTtcbiAgICB0aGlzLl9jcmVhdGVTdHlsZUVsZW0oYCR7ZGlzbX0gJHtpdGVtU3R5bGV9YCk7XG4gICAgdGhpcy5fc3RvcmVDYXJvdXNlbERhdGEoKTtcbiAgfVxuXG4gIC8qKiBsb2dpYyB0byBzY3JvbGwgdGhlIGNhcm91c2VsIHN0ZXAgMSAqL1xuICBwcml2YXRlIF9jYXJvdXNlbFNjcm9sbE9uZShCdG46IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBpdGVtU3BlZWQgPSB0aGlzLnNwZWVkO1xuICAgIGxldCBjdXJyZW50U2xpZGUgPSAwO1xuICAgIGxldCB0b3VjaE1vdmUgPSBNYXRoLmNlaWwodGhpcy5kZXhWYWwgLyB0aGlzLml0ZW1XaWR0aCk7XG4gICAgdG91Y2hNb3ZlID0gaXNGaW5pdGUodG91Y2hNb3ZlKSA/IHRvdWNoTW92ZSA6IDA7XG4gICAgdGhpcy5fc2V0U3R5bGUodGhpcy5fbmd1SXRlbXNDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgJycpO1xuXG4gICAgaWYgKHRoaXMuX3BvaW50SW5kZXggPT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKEJ0biA9PT0gMCAmJiAoKCF0aGlzLmxvb3AgJiYgIXRoaXMuaXNGaXJzdCgpKSB8fCB0aGlzLmxvb3ApKSB7XG4gICAgICBjb25zdCBjdXJyZW50U2xpZGVEID0gdGhpcy5jdXJyZW50U2xpZGUgLSB0aGlzLnNsaWRlSXRlbXM7XG4gICAgICBjb25zdCBNb3ZlU2xpZGUgPSBjdXJyZW50U2xpZGVEICsgdGhpcy5zbGlkZUl0ZW1zO1xuICAgICAgdGhpcy5fYnRuQm9vbGVhbigwLCAxKTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTbGlkZSA9PT0gMCkge1xuICAgICAgICBjdXJyZW50U2xpZGUgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVNvdXJjZSgpKS5sZW5ndGggLSB0aGlzLml0ZW1zO1xuICAgICAgICBpdGVtU3BlZWQgPSA0MDA7XG4gICAgICAgIHRoaXMuX2J0bkJvb2xlYW4oMCwgMSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2xpZGVJdGVtcyA+PSBNb3ZlU2xpZGUpIHtcbiAgICAgICAgY3VycmVudFNsaWRlID0gMDtcbiAgICAgICAgdGhpcy5fYnRuQm9vbGVhbigxLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2J0bkJvb2xlYW4oMCwgMCk7XG4gICAgICAgIGlmICh0b3VjaE1vdmUgPiB0aGlzLnNsaWRlSXRlbXMpIHtcbiAgICAgICAgICBjdXJyZW50U2xpZGUgPSB0aGlzLmN1cnJlbnRTbGlkZSAtIHRvdWNoTW92ZTtcbiAgICAgICAgICBpdGVtU3BlZWQgPSAyMDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudFNsaWRlID0gdGhpcy5jdXJyZW50U2xpZGUgLSB0aGlzLnNsaWRlSXRlbXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nhcm91c2VsU2Nyb2xsVHdvKEJ0biwgY3VycmVudFNsaWRlLCBpdGVtU3BlZWQpO1xuICAgIH0gZWxzZSBpZiAoQnRuID09PSAxICYmICgoIXRoaXMubG9vcCAmJiAhdGhpcy5pc0xhc3QoKSkgfHwgdGhpcy5sb29wKSkge1xuICAgICAgaWYgKFxuICAgICAgICBBcnJheS5mcm9tKHRoaXMuZGF0YVNvdXJjZSgpKS5sZW5ndGggPD0gdGhpcy5jdXJyZW50U2xpZGUgKyB0aGlzLml0ZW1zICsgdGhpcy5zbGlkZUl0ZW1zICYmXG4gICAgICAgICF0aGlzLmlzTGFzdCgpXG4gICAgICApIHtcbiAgICAgICAgY3VycmVudFNsaWRlID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFTb3VyY2UoKSkubGVuZ3RoIC0gdGhpcy5pdGVtcztcbiAgICAgICAgdGhpcy5fYnRuQm9vbGVhbigwLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0xhc3QoKSkge1xuICAgICAgICBjdXJyZW50U2xpZGUgPSAwO1xuICAgICAgICBpdGVtU3BlZWQgPSA0MDA7XG4gICAgICAgIHRoaXMuX2J0bkJvb2xlYW4oMSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9idG5Cb29sZWFuKDAsIDApO1xuICAgICAgICBpZiAodG91Y2hNb3ZlID4gdGhpcy5zbGlkZUl0ZW1zKSB7XG4gICAgICAgICAgY3VycmVudFNsaWRlID0gdGhpcy5jdXJyZW50U2xpZGUgKyB0aGlzLnNsaWRlSXRlbXMgKyAodG91Y2hNb3ZlIC0gdGhpcy5zbGlkZUl0ZW1zKTtcbiAgICAgICAgICBpdGVtU3BlZWQgPSAyMDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudFNsaWRlID0gdGhpcy5jdXJyZW50U2xpZGUgKyB0aGlzLnNsaWRlSXRlbXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nhcm91c2VsU2Nyb2xsVHdvKEJ0biwgY3VycmVudFNsaWRlLCBpdGVtU3BlZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBsb2dpYyB0byBzY3JvbGwgdGhlIGNhcm91c2VsIHN0ZXAgMiAqL1xuICBwcml2YXRlIF9jYXJvdXNlbFNjcm9sbFR3byhCdG46IG51bWJlciwgY3VycmVudFNsaWRlOiBudW1iZXIsIGl0ZW1TcGVlZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGV4VmFsICE9PSAwKSB7XG4gICAgICBjb25zdCB2YWwgPSBNYXRoLmFicyh0aGlzLnRvdWNoLnZlbG9jaXR5KTtcbiAgICAgIGxldCBzb210ID0gTWF0aC5mbG9vcigodGhpcy5kZXhWYWwgLyB2YWwgLyB0aGlzLmRleFZhbCkgKiAodGhpcy5kZXZpY2VXaWR0aCAtIHRoaXMuZGV4VmFsKSk7XG4gICAgICBzb210ID0gc29tdCA+IGl0ZW1TcGVlZCA/IGl0ZW1TcGVlZCA6IHNvbXQ7XG4gICAgICBpdGVtU3BlZWQgPSBzb210IDwgMjAwID8gMjAwIDogc29tdDtcbiAgICAgIHRoaXMuZGV4VmFsID0gMDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dpdGhBbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX3NldFN0eWxlKFxuICAgICAgICB0aGlzLl9uZ3VJdGVtc0NvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgICAgYHRyYW5zZm9ybSAke2l0ZW1TcGVlZH1tcyAke3RoaXMuaW5wdXRzKCkuZWFzaW5nfWBcbiAgICAgICk7XG4gICAgICB0aGlzLmlucHV0cygpLmFuaW1hdGlvbiAmJlxuICAgICAgICB0aGlzLl9jYXJvdXNlbEFuaW1hdG9yKFxuICAgICAgICAgIEJ0bixcbiAgICAgICAgICBjdXJyZW50U2xpZGUgKyAxLFxuICAgICAgICAgIGN1cnJlbnRTbGlkZSArIHRoaXMuaXRlbXMsXG4gICAgICAgICAgaXRlbVNwZWVkLFxuICAgICAgICAgIE1hdGguYWJzKHRoaXMuY3VycmVudFNsaWRlIC0gY3VycmVudFNsaWRlKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRTdHlsZSh0aGlzLl9uZ3VJdGVtc0NvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uJywgYGApO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbUxlbmd0aCA9IEFycmF5LmZyb20odGhpcy5kYXRhU291cmNlKCkpLmxlbmd0aDtcbiAgICB0aGlzLl90cmFuc2Zvcm1TdHlsZShjdXJyZW50U2xpZGUpO1xuICAgIHRoaXMuY3VycmVudFNsaWRlID0gY3VycmVudFNsaWRlO1xuICAgIHRoaXMub25Nb3ZlLmVtaXQodGhpcyk7XG4gICAgdGhpcy5fY2Fyb3VzZWxQb2ludEFjdGl2ZXIoKTtcbiAgICB0aGlzLl9jYXJvdXNlbExvYWRUcmlnZ2VyKCk7XG4gICAgdGhpcy5fd2l0aEFuaW1hdGlvbiA9IHRydWU7XG4gIH1cblxuICAvKiogYm9vbGVhbiBmdW5jdGlvbiBmb3IgbWFraW5nIGlzRmlyc3QgYW5kIGlzTGFzdCAqL1xuICBwcml2YXRlIF9idG5Cb29sZWFuKGZpcnN0OiBudW1iZXIsIGxhc3Q6IG51bWJlcikge1xuICAgIHRoaXMuaXNGaXJzdC5zZXQoISFmaXJzdCk7XG4gICAgdGhpcy5pc0xhc3Quc2V0KCEhbGFzdCk7XG4gIH1cblxuICBwcml2YXRlIF90cmFuc2Zvcm1TdHJpbmcoZ3JpZDoga2V5b2YgVHJhbnNmcm9tLCBzbGlkZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgY29sbGVjdCA9ICcnO1xuICAgIGNvbGxlY3QgKz0gYCR7dGhpcy5fc3R5bGVpZH0geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKGA7XG5cbiAgICBpZiAodGhpcy52ZXJ0aWNhbC5lbmFibGVkKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybVtncmlkXSA9ICh0aGlzLnZlcnRpY2FsLmhlaWdodCAvIHRoaXMuaW5wdXRzKCkuZ3JpZFtncmlkXSEpICogc2xpZGU7XG4gICAgICBjb2xsZWN0ICs9IGAwLCAtJHt0aGlzLnRyYW5zZm9ybVtncmlkXX1weCwgMGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtW2dyaWRdID0gKDEwMCAvIHRoaXMuaW5wdXRzKCkuZ3JpZFtncmlkXSEpICogc2xpZGU7XG4gICAgICBjb2xsZWN0ICs9IGAke3RoaXMuX2RpcmVjdGlvblN5bWJvbH0ke3RoaXMudHJhbnNmb3JtW2dyaWRdfSUsIDAsIDBgO1xuICAgIH1cbiAgICBjb2xsZWN0ICs9IGApOyB9YDtcbiAgICByZXR1cm4gY29sbGVjdDtcbiAgfVxuXG4gIC8qKiBzZXQgdGhlIHRyYW5zZm9ybSBzdHlsZSB0byBzY3JvbGwgdGhlIGNhcm91c2VsICAqL1xuICBwcml2YXRlIF90cmFuc2Zvcm1TdHlsZShzbGlkZTogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IHNsaWRlQ3NzID0gJyc7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3Jlc3BvbnNpdmUnKSB7XG4gICAgICBjb25zdCBicmVha3BvaW50cyA9IHRoaXMuaW5wdXRzKCkuZ3JpZEJyZWFrcG9pbnRzO1xuICAgICAgc2xpZGVDc3MgPSBgQG1lZGlhIChtYXgtd2lkdGg6ICR7YnJlYWtwb2ludHM/LnNtISAtIDF9cHgpIHske3RoaXMuX3RyYW5zZm9ybVN0cmluZyhcbiAgICAgICAgJ3hzJyxcbiAgICAgICAgc2xpZGVcbiAgICAgICl9fVxuICAgICAgQG1lZGlhIChtaW4td2lkdGg6ICR7YnJlYWtwb2ludHM/LnNtfXB4KSB7JHt0aGlzLl90cmFuc2Zvcm1TdHJpbmcoJ3NtJywgc2xpZGUpfSB9XG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogJHticmVha3BvaW50cz8ubWR9cHgpIHske3RoaXMuX3RyYW5zZm9ybVN0cmluZygnbWQnLCBzbGlkZSl9IH1cbiAgICAgIEBtZWRpYSAobWluLXdpZHRoOiAke2JyZWFrcG9pbnRzPy5sZ31weCkgeyR7dGhpcy5fdHJhbnNmb3JtU3RyaW5nKCdsZycsIHNsaWRlKX0gfVxuICAgICAgQG1lZGlhIChtaW4td2lkdGg6ICR7YnJlYWtwb2ludHM/LnhsfXB4KSB7JHt0aGlzLl90cmFuc2Zvcm1TdHJpbmcoJ3hsJywgc2xpZGUpfSB9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2Zvcm0uYWxsID0gdGhpcy5pbnB1dHMoKS5ncmlkLmFsbCAqIHNsaWRlO1xuICAgICAgc2xpZGVDc3MgPSBgJHt0aGlzLl9zdHlsZWlkfSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoJHt0aGlzLl9kaXJlY3Rpb25TeW1ib2x9JHt0aGlzLnRyYW5zZm9ybS5hbGx9cHgsIDAsIDApO2A7XG4gICAgfVxuICAgIHRoaXMuX2Nhcm91c2VsQ3NzTm9kZS50ZXh0Q29udGVudCA9IHNsaWRlQ3NzO1xuICB9XG5cbiAgLyoqIHRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBjYXJvdXNlbCB0byBsb2FkIHRoZSBpdGVtcyAqL1xuICBwcml2YXRlIF9jYXJvdXNlbExvYWRUcmlnZ2VyKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5pbnB1dHMoKS5sb2FkID09PSAnbnVtYmVyJykge1xuICAgICAgQXJyYXkuZnJvbSh0aGlzLmRhdGFTb3VyY2UoKSkubGVuZ3RoIC0gdGhpcy5sb2FkIDw9IHRoaXMuY3VycmVudFNsaWRlICsgdGhpcy5pdGVtcyAmJlxuICAgICAgICB0aGlzLmNhcm91c2VsTG9hZC5lbWl0KHRoaXMuY3VycmVudFNsaWRlKTtcbiAgICB9XG4gIH1cblxuICAvKiogZ2VuZXJhdGUgQ2xhc3MgZm9yIGVhY2ggY2Fyb3VzZWwgdG8gc2V0IHNwZWNpZmljIHN0eWxlICovXG4gIHByaXZhdGUgX2dlbmVyYXRlSUQoKTogc3RyaW5nIHtcbiAgICBsZXQgdGV4dCA9ICcnO1xuICAgIGNvbnN0IHBvc3NpYmxlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICB0ZXh0ICs9IHBvc3NpYmxlLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBwb3NzaWJsZS5sZW5ndGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGBuZ3VjYXJvdXNlbCR7dGV4dH1gO1xuICB9XG5cbiAgLyoqIGhhbmRsZSB0aGUgYXV0byBzbGlkZSAqL1xuICBwcml2YXRlIF9jYXJvdXNlbEludGVydmFsKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2Fyb3VzZWxNYWluMSgpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWwgJiYgdGhpcy5sb29wKSB7XG4gICAgICB0aGlzLl9uZ3VXaW5kb3dTY3JvbGxMaXN0ZW5lclxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBOb3RlOiBkbyBub3QgdXNlIGBkZWJvdW5jZVRpbWVgIHNpbmNlIGl0IG1heSBmbHVzaCBxdWV1ZWQgYWN0aW9ucyB3aXRoaW4gdGhlIEFuZ3VsYXIgem9uZS5cbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGltZXIoNjAwKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIC8vIE5vdGU6IHdlIGRvbid0IHJ1biBjaGFuZ2UgZGV0ZWN0aW9uIG9uIGVhY2ggYHNjcm9sbGAgZXZlbnQsIGJ1dCB3ZSByZS1lbnRlciB0aGVcbiAgICAgICAgICAvLyAgICAgICBBbmd1bGFyIHpvbmUgb25jZSB0aGUgRE9NIHRpbWVyIGZpcmVzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlLlxuICAgICAgICAgIC8vICAgICAgIFRPRE86IHJldmlzaXQgbGF0ZXIgc2luY2Ugd2UgbWF5IG5vdCBydW4gY2hhbmdlIGRldGVjdGlvbiBhdCBhbGwgb24gdGhpcyB0YXNrLlxuICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5fb25XaW5kb3dTY3JvbGxpbmcoKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtYXBUb1plcm8gPSBtYXAoKCkgPT4gMCk7XG4gICAgICBjb25zdCBtYXBUb09uZSA9IG1hcCgoKSA9PiAxKTtcblxuICAgICAgY29uc3QgcGxheSQgPSBmcm9tRXZlbnQoY29udGFpbmVyLCAnbW91c2VsZWF2ZScpLnBpcGUobWFwVG9PbmUpO1xuICAgICAgY29uc3QgcGF1c2UkID0gZnJvbUV2ZW50KGNvbnRhaW5lciwgJ21vdXNlZW50ZXInKS5waXBlKG1hcFRvWmVybyk7XG5cbiAgICAgIGNvbnN0IHRvdWNoUGxheSQgPSBmcm9tRXZlbnQoY29udGFpbmVyLCAndG91Y2hzdGFydCcpLnBpcGUobWFwVG9PbmUpO1xuICAgICAgY29uc3QgdG91Y2hQYXVzZSQgPSBmcm9tRXZlbnQoY29udGFpbmVyLCAndG91Y2hlbmQnKS5waXBlKG1hcFRvWmVybyk7XG5cbiAgICAgIGNvbnN0IGludGVydmFsJCA9IGludGVydmFsKHRoaXMuaW5wdXRzKCkuaW50ZXJ2YWw/LnRpbWluZyEpLnBpcGUobWFwVG9PbmUpO1xuXG4gICAgICBjb25zdCBpbml0aWFsRGVsYXkgPSB0aGlzLmludGVydmFsLmluaXRpYWxEZWxheSB8fCAwO1xuXG4gICAgICBjb25zdCBjYXJvdXNlbEludGVydmFsJCA9IG1lcmdlKFxuICAgICAgICBwbGF5JCxcbiAgICAgICAgdG91Y2hQbGF5JCxcbiAgICAgICAgcGF1c2UkLFxuICAgICAgICB0b3VjaFBhdXNlJCxcbiAgICAgICAgdGhpcy5faW50ZXJ2YWxDb250cm9sbGVyJFxuICAgICAgKS5waXBlKFxuICAgICAgICBzdGFydFdpdGgoMSksXG4gICAgICAgIHN3aXRjaE1hcCh2YWwgPT4ge1xuICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICByZXR1cm4gdmFsID8gaW50ZXJ2YWwkIDogRU1QVFk7XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICB0aW1lcihpbml0aWFsRGVsYXkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBjYXJvdXNlbEludGVydmFsJCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2Nyb2xsT25lKDEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogYW5pbWF0ZSB0aGUgY2Fyb3VzZWwgaXRlbXMgKi9cbiAgcHJpdmF0ZSBfY2Fyb3VzZWxBbmltYXRvcihcbiAgICBkaXJlY3Rpb246IG51bWJlcixcbiAgICBzdGFydDogbnVtYmVyLFxuICAgIGVuZDogbnVtYmVyLFxuICAgIHNwZWVkOiBudW1iZXIsXG4gICAgbGVuZ3RoOiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgdmlld0NvbnRhaW5lciA9IHRoaXMuX25vZGVPdXRsZXQoKS52aWV3Q29udGFpbmVyO1xuXG4gICAgbGV0IHZhbCA9IGxlbmd0aCA8IDUgPyBsZW5ndGggOiA1O1xuICAgIHZhbCA9IHZhbCA9PT0gMSA/IDMgOiB2YWw7XG4gICAgY29uc3QgY29sbGVjdGVkSW5kZXhlczogbnVtYmVyW10gPSBbXTtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09IDEpIHtcbiAgICAgIGZvciAobGV0IGkgPSBzdGFydCAtIDE7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICBjb2xsZWN0ZWRJbmRleGVzLnB1c2goaSk7XG4gICAgICAgIHZhbCA9IHZhbCAqIDI7XG4gICAgICAgIGNvbnN0IHZpZXdSZWYgPSB2aWV3Q29udGFpbmVyLmdldChpKSBhcyBhbnk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB2aWV3UmVmLmNvbnRleHQgYXMgYW55O1xuICAgICAgICBjb250ZXh0LmFuaW1hdGUgPSB7IHZhbHVlOiB0cnVlLCBwYXJhbXM6IHsgZGlzdGFuY2U6IHZhbCB9IH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSBlbmQgLSAxOyBpID49IHN0YXJ0IC0gMTsgaS0tKSB7XG4gICAgICAgIGNvbGxlY3RlZEluZGV4ZXMucHVzaChpKTtcbiAgICAgICAgdmFsID0gdmFsICogMjtcbiAgICAgICAgY29uc3Qgdmlld1JlZiA9IHZpZXdDb250YWluZXIuZ2V0KGkpIGFzIGFueTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHZpZXdSZWYuY29udGV4dCBhcyBhbnk7XG4gICAgICAgIGNvbnRleHQuYW5pbWF0ZSA9IHsgdmFsdWU6IHRydWUsIHBhcmFtczogeyBkaXN0YW5jZTogLXZhbCB9IH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGltZXIoc3BlZWQgKiAwLjcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZW1vdmVBbmltYXRpb25zKGNvbGxlY3RlZEluZGV4ZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZUFuaW1hdGlvbnMoY29sbGVjdGVkSW5kZXhlczogbnVtYmVyW10pIHtcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyID0gdGhpcy5fbm9kZU91dGxldCgpLnZpZXdDb250YWluZXI7XG4gICAgY29sbGVjdGVkSW5kZXhlcy5mb3JFYWNoKGkgPT4ge1xuICAgICAgY29uc3Qgdmlld1JlZiA9IHZpZXdDb250YWluZXIuZ2V0KGkpIGFzIGFueTtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB2aWV3UmVmLmNvbnRleHQgYXMgYW55O1xuICAgICAgY29udGV4dC5hbmltYXRlID0geyB2YWx1ZTogZmFsc2UsIHBhcmFtczogeyBkaXN0YW5jZTogMCB9IH07XG4gICAgfSk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIFNob3J0IGZvcm0gZm9yIHNldEVsZW1lbnRTdHlsZSAqL1xuICBwcml2YXRlIF9zZXRTdHlsZShlbDogYW55LCBwcm9wOiBhbnksIHZhbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZWwsIHByb3AsIHZhbCk7XG4gIH1cblxuICAvKiogRm9yIGdlbmVyYXRpbmcgc3R5bGUgdGFnICovXG4gIHByaXZhdGUgX2NyZWF0ZVN0eWxlRWxlbShkYXRhcz86IHN0cmluZyk6IEhUTUxTdHlsZUVsZW1lbnQge1xuICAgIGNvbnN0IHN0eWxlSXRlbSA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgaWYgKGRhdGFzKSB7XG4gICAgICBjb25zdCBzdHlsZVRleHQgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVUZXh0KGRhdGFzKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHN0eWxlSXRlbSwgc3R5bGVUZXh0KTtcbiAgICB9XG4gICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5faG9zdC5uYXRpdmVFbGVtZW50LCBzdHlsZUl0ZW0pO1xuICAgIHJldHVybiBzdHlsZUl0ZW07XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cFdpbmRvd1Jlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmRldmljZVdpZHRoICE9PSB3aW5kb3cub3V0ZXJXaWR0aCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3NldFN0eWxlKHRoaXMuX25ndUl0ZW1zQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb24nLCBgYCk7XG4gICAgICAgICAgLy8gUmUtZW50ZXIgdGhlIEFuZ3VsYXIgem9uZSBvbmx5IGFmdGVyIGByZXNpemVgIGV2ZW50cyBoYXZlIGJlZW4gZGlzcGF0Y2hlZFxuICAgICAgICAgIC8vIGFuZCB0aGUgdGltZXIgaGFzIHJ1biAoaW4gYGRlYm91bmNlVGltZWApLlxuICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3RvcmVDYXJvdXNlbERhdGEoKTtcbiAgICAgICAgICAgIC8vIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2RhdGFTb3VyY2U6IE5ndUNhcm91c2VsRGF0YVNvdXJjZTxhbnksIGFueT47XG59XG4iLCI8ZGl2ICNuZ3VjYXJvdXNlbCBjbGFzcz1cIm5ndWNhcm91c2VsXCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltOZ3VDYXJvdXNlbFByZXZdXCI+PC9uZy1jb250ZW50PlxuICA8ZGl2IGNsYXNzPVwibmd1LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgI3RvdWNoQ29udGFpbmVyIGNsYXNzPVwibmd1LXRvdWNoLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiAjbmd1SXRlbXNDb250YWluZXIgY2xhc3M9XCJuZ3VjYXJvdXNlbC1pdGVtc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyIG5ndUNhcm91c2VsT3V0bGV0PjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibmd1Y2xlYXJGaXhcIj48L2Rpdj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW05ndUNhcm91c2VsTmV4dF1cIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbjxuZy1jb250ZW50IHNlbGVjdD1cIltOZ3VDYXJvdXNlbFBvaW50XVwiPjwvbmctY29udGVudD5cbiJdfQ==","import { Component } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class NguItemComponent {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.3\", type: NguItemComponent, isStandalone: true, selector: \"ngu-item\", host: { classAttribute: \"item\" }, ngImport: i0, template: \"<ng-content></ng-content>\\n\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguItemComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'ngu-item', host: {\n                        class: 'item'\n                    }, template: \"<ng-content></ng-content>\\n\" }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd1LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3UvY2Fyb3VzZWwvc3JjL2xpYi9uZ3UtaXRlbS9uZ3UtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ndS9jYXJvdXNlbC9zcmMvbGliL25ndS1pdGVtL25ndS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUzFDLE1BQU0sT0FBTyxnQkFBZ0I7OEdBQWhCLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLHNHQ1Q3Qiw2QkFDQTs7MkZEUWEsZ0JBQWdCO2tCQVA1QixTQUFTOytCQUNFLFVBQVUsUUFFZDt3QkFDSixLQUFLLEVBQUUsTUFBTTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3UtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnbmd1LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdpdGVtJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE5ndUl0ZW1Db21wb25lbnQge31cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==","import { Component } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class NguTileComponent {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguTileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.3\", type: NguTileComponent, isStandalone: true, selector: \"ngu-tile\", host: { classAttribute: \"item\" }, ngImport: i0, template: \"<div class=\\\"tile\\\">\\n  <ng-content></ng-content>\\n</div>\\n\", styles: [\":host{padding:10px;box-sizing:border-box}.tile{box-shadow:0 2px 5px #00000029,0 2px 10px #0000001f}\\n\"] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: NguTileComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'ngu-tile', host: {\n                        class: 'item'\n                    }, template: \"<div class=\\\"tile\\\">\\n  <ng-content></ng-content>\\n</div>\\n\", styles: [\":host{padding:10px;box-sizing:border-box}.tile{box-shadow:0 2px 5px #00000029,0 2px 10px #0000001f}\\n\"] }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd1LXRpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3UvY2Fyb3VzZWwvc3JjL2xpYi9uZ3UtdGlsZS9uZ3UtdGlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ndS9jYXJvdXNlbC9zcmMvbGliL25ndS10aWxlL25ndS10aWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVTFDLE1BQU0sT0FBTyxnQkFBZ0I7OEdBQWhCLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLHNHQ1Y3Qiw2REFHQTs7MkZET2EsZ0JBQWdCO2tCQVI1QixTQUFTOytCQUNFLFVBQVUsUUFHZDt3QkFDSixLQUFLLEVBQUUsTUFBTTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3UtdGlsZScsXG4gIHRlbXBsYXRlVXJsOiAnbmd1LXRpbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnbmd1LXRpbGUuY29tcG9uZW50LnNjc3MnXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnaXRlbSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBOZ3VUaWxlQ29tcG9uZW50IHt9XG4iLCI8ZGl2IGNsYXNzPVwidGlsZVwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==","/*\n * Public API Surface of carousel\n */\nexport { NguCarouselConfig } from './lib/ngu-carousel/ngu-carousel';\nexport { NguCarouselStore } from './lib/ngu-carousel/ngu-carousel';\nexport { NguCarousel } from './lib/ngu-carousel/ngu-carousel.component';\nexport { NguItemComponent } from './lib/ngu-item/ngu-item.component';\nexport { NguTileComponent } from './lib/ngu-tile/ngu-tile.component';\nexport { NguCarouselDefDirective, NguCarouselPointDirective, NguCarouselItemDirective, NguCarouselNextDirective, NguCarouselPrevDirective, NguCarouselOutlet } from './lib/ngu-carousel.directive';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmd1L2Nhcm91c2VsL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXJFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNsQixNQUFNLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBjYXJvdXNlbFxuICovXG5cbmV4cG9ydCB7IE5ndUNhcm91c2VsQ29uZmlnIH0gZnJvbSAnLi9saWIvbmd1LWNhcm91c2VsL25ndS1jYXJvdXNlbCc7XG5cbmV4cG9ydCB7IE5ndUNhcm91c2VsU3RvcmUgfSBmcm9tICcuL2xpYi9uZ3UtY2Fyb3VzZWwvbmd1LWNhcm91c2VsJztcblxuZXhwb3J0IHsgTmd1Q2Fyb3VzZWwgfSBmcm9tICcuL2xpYi9uZ3UtY2Fyb3VzZWwvbmd1LWNhcm91c2VsLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB7IE5ndUl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2xpYi9uZ3UtaXRlbS9uZ3UtaXRlbS5jb21wb25lbnQnO1xuXG5leHBvcnQgeyBOZ3VUaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvbmd1LXRpbGUvbmd1LXRpbGUuY29tcG9uZW50JztcblxuZXhwb3J0IHtcbiAgTmd1Q2Fyb3VzZWxEZWZEaXJlY3RpdmUsXG4gIE5ndUNhcm91c2VsUG9pbnREaXJlY3RpdmUsXG4gIE5ndUNhcm91c2VsSXRlbURpcmVjdGl2ZSxcbiAgTmd1Q2Fyb3VzZWxOZXh0RGlyZWN0aXZlLFxuICBOZ3VDYXJvdXNlbFByZXZEaXJlY3RpdmUsXG4gIE5ndUNhcm91c2VsT3V0bGV0XG59IGZyb20gJy4vbGliL25ndS1jYXJvdXNlbC5kaXJlY3RpdmUnO1xuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public-api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd1LWNhcm91c2VsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3UvY2Fyb3VzZWwvc3JjL25ndS1jYXJvdXNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19"],"names":["takeUntil","map"],"mappings":"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"}