@ngx-gallery/core
Version:
Angular gallery directive that hooks the lightbox with the images automatically.
522 lines • 43.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Output, TemplateRef, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
import { Subscription } from 'rxjs';
import { Gallery } from '../services/gallery.service';
import { IframeItem, ImageItem, VideoItem, YoutubeItem } from './templates/items.model';
var GalleryComponent = /** @class */ (function () {
function GalleryComponent(_gallery) {
this._gallery = _gallery;
this.nav = this._gallery.config.nav;
this.dots = this._gallery.config.dots;
this.loop = this._gallery.config.loop;
this.thumb = this._gallery.config.thumb;
this.zoomOut = this._gallery.config.zoomOut;
this.counter = this._gallery.config.counter;
this.dotsSize = this._gallery.config.dotsSize;
this.autoPlay = this._gallery.config.autoPlay;
this.gestures = this._gallery.config.gestures;
this.thumbWidth = this._gallery.config.thumbWidth;
this.thumbHeight = this._gallery.config.thumbHeight;
this.disableThumb = this._gallery.config.disableThumb;
this.panSensitivity = this._gallery.config.panSensitivity;
this.playerInterval = this._gallery.config.playerInterval;
this.itemTemplate = this._gallery.config.itemTemplate;
this.thumbTemplate = this._gallery.config.thumbTemplate;
this.thumbMode = this._gallery.config.thumbMode;
this.imageSize = this._gallery.config.imageSize;
this.dotsPosition = this._gallery.config.dotsPosition;
this.counterPosition = this._gallery.config.counterPosition;
this.slidingDirection = this._gallery.config.slidingDirection;
this.loadingStrategy = this._gallery.config.loadingStrategy;
this.thumbPosition = this._gallery.config.thumbPosition;
// Inputs used by the lightbox
/**
* Destroy gallery ref on component destroy event
*/
this.destroyRef = true;
/**
* Skip initializing the config with components inputs (Lightbox mode)
*/
this.skipInitConfig = false;
this.itemClick = new EventEmitter();
this.thumbClick = new EventEmitter();
this.playingChange = new EventEmitter();
this.indexChange = new EventEmitter();
this.itemsChange = new EventEmitter();
this.error = new EventEmitter();
this._itemClick$ = Subscription.EMPTY;
this._thumbClick$ = Subscription.EMPTY;
this._itemChange$ = Subscription.EMPTY;
this._indexChange$ = Subscription.EMPTY;
this._playingChange$ = Subscription.EMPTY;
this._playerListener$ = Subscription.EMPTY;
}
/**
* @private
* @return {?}
*/
GalleryComponent.prototype.getConfig = /**
* @private
* @return {?}
*/
function () {
return {
nav: this.nav,
dots: this.dots,
loop: this.loop,
thumb: this.thumb,
zoomOut: this.zoomOut,
counter: this.counter,
autoPlay: this.autoPlay,
gestures: this.gestures,
dotsSize: this.dotsSize,
imageSize: this.imageSize,
thumbMode: this.thumbMode,
thumbWidth: this.thumbWidth,
thumbHeight: this.thumbHeight,
disableThumb: this.disableThumb,
dotsPosition: this.dotsPosition,
itemTemplate: this.itemTemplate,
thumbTemplate: this.thumbTemplate,
thumbPosition: this.thumbPosition,
panSensitivity: this.panSensitivity,
playerInterval: this.playerInterval,
counterPosition: this.counterPosition,
loadingStrategy: this.loadingStrategy,
slidingDirection: this.slidingDirection
};
};
/**
* @param {?} i
* @return {?}
*/
GalleryComponent.prototype.onAction = /**
* @param {?} i
* @return {?}
*/
function (i) {
switch (i) {
case 'next':
this.galleryRef.next();
break;
case 'prev':
this.galleryRef.prev();
break;
default:
this.galleryRef.set((/** @type {?} */ (i)));
}
};
/**
* @param {?} changes
* @return {?}
*/
GalleryComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (this.galleryRef) {
this.galleryRef.setConfig(this.getConfig());
if (changes.items && changes.items.currentValue !== changes.items.previousValue) {
this.load(this.items);
}
}
};
/**
* @return {?}
*/
GalleryComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
// Get gallery instance by id
if (this.skipInitConfig) {
this.galleryRef = this._gallery.ref(this.id);
}
else {
this.galleryRef = this._gallery.ref(this.id, this.getConfig());
}
// Load gallery items
this.load(this.items);
// Activate player listener
this._playerListener$ = this.galleryRef.activatePlayer().subscribe();
// Subscribes to events on demand
if (this.indexChange.observers.length) {
this._indexChange$ = this.galleryRef.indexChanged.subscribe(function (state) { return _this.indexChange.emit(state); });
}
if (this.itemsChange.observers.length) {
this._itemChange$ = this.galleryRef.itemsChanged.subscribe(function (state) { return _this.itemsChange.emit(state); });
}
if (this.playingChange.observers.length) {
this._playingChange$ = this.galleryRef.playingChanged.subscribe(function (state) { return _this.playingChange.emit(state); });
}
// Start playing if auto-play is set to true
if (this.autoPlay) {
this.play();
}
};
/**
* @return {?}
*/
GalleryComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this._itemClick$.unsubscribe();
this._thumbClick$.unsubscribe();
this._itemChange$.unsubscribe();
this._indexChange$.unsubscribe();
this._playingChange$.unsubscribe();
this._playerListener$.unsubscribe();
if (this.destroyRef) {
this.galleryRef.destroy();
}
};
/**
* @param {?} i
* @return {?}
*/
GalleryComponent.prototype.onItemClick = /**
* @param {?} i
* @return {?}
*/
function (i) {
this.itemClick.emit(i);
this.galleryRef.itemClick.next(i);
};
/**
* @param {?} i
* @return {?}
*/
GalleryComponent.prototype.onThumbClick = /**
* @param {?} i
* @return {?}
*/
function (i) {
this.galleryRef.set(i);
this.thumbClick.emit(i);
this.galleryRef.thumbClick.next(i);
};
/**
* @param {?} err
* @return {?}
*/
GalleryComponent.prototype.onError = /**
* @param {?} err
* @return {?}
*/
function (err) {
this.error.emit(err);
this.galleryRef.error.next(err);
};
/**
* @param {?} items
* @return {?}
*/
GalleryComponent.prototype.load = /**
* @param {?} items
* @return {?}
*/
function (items) {
this.galleryRef.load(items);
};
/**
* @param {?} item
* @param {?=} active
* @return {?}
*/
GalleryComponent.prototype.add = /**
* @param {?} item
* @param {?=} active
* @return {?}
*/
function (item, active) {
this.galleryRef.add(item, active);
};
/**
* @param {?} data
* @param {?=} active
* @return {?}
*/
GalleryComponent.prototype.addImage = /**
* @param {?} data
* @param {?=} active
* @return {?}
*/
function (data, active) {
this.add(new ImageItem(data), active);
};
/**
* @param {?} data
* @param {?=} active
* @return {?}
*/
GalleryComponent.prototype.addVideo = /**
* @param {?} data
* @param {?=} active
* @return {?}
*/
function (data, active) {
this.add(new VideoItem(data), active);
};
/**
* @param {?} data
* @param {?=} active
* @return {?}
*/
GalleryComponent.prototype.addIframe = /**
* @param {?} data
* @param {?=} active
* @return {?}
*/
function (data, active) {
this.add(new IframeItem(data), active);
};
/**
* @param {?} data
* @param {?=} active
* @return {?}
*/
GalleryComponent.prototype.addYoutube = /**
* @param {?} data
* @param {?=} active
* @return {?}
*/
function (data, active) {
this.add(new YoutubeItem(data), active);
};
/**
* @param {?} i
* @return {?}
*/
GalleryComponent.prototype.remove = /**
* @param {?} i
* @return {?}
*/
function (i) {
this.galleryRef.remove(i);
};
/**
* @return {?}
*/
GalleryComponent.prototype.next = /**
* @return {?}
*/
function () {
this.galleryRef.next();
};
/**
* @return {?}
*/
GalleryComponent.prototype.prev = /**
* @return {?}
*/
function () {
this.galleryRef.prev();
};
/**
* @param {?} i
* @return {?}
*/
GalleryComponent.prototype.set = /**
* @param {?} i
* @return {?}
*/
function (i) {
this.galleryRef.set(i);
};
/**
* @return {?}
*/
GalleryComponent.prototype.reset = /**
* @return {?}
*/
function () {
this.galleryRef.reset();
};
/**
* @param {?=} interval
* @return {?}
*/
GalleryComponent.prototype.play = /**
* @param {?=} interval
* @return {?}
*/
function (interval) {
this.galleryRef.play(interval);
};
/**
* @return {?}
*/
GalleryComponent.prototype.stop = /**
* @return {?}
*/
function () {
this.galleryRef.stop();
};
GalleryComponent.decorators = [
{ type: Component, args: [{
selector: 'gallery',
changeDetection: ChangeDetectionStrategy.OnPush,
template: "\n <gallery-core [state]=\"galleryRef.state | async\"\n [config]=\"galleryRef.config | async\"\n (action)=\"onAction($event)\"\n (itemClick)=\"onItemClick($event)\"\n (thumbClick)=\"onThumbClick($event)\"\n (error)=\"onError($event)\"></gallery-core>\n <ng-content></ng-content>\n ",
styles: ["::ng-deep gallery-core[dotsPosition=top] gallery-dots{top:0}::ng-deep gallery-core[dotsPosition=bottom] gallery-dots{bottom:0}::ng-deep gallery-dots{margin:7px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}::ng-deep .g-dot{cursor:pointer;z-index:20}::ng-deep .g-dot:hover .g-dot-inner{opacity:1}::ng-deep .g-dot-active .g-dot-inner{opacity:1;-webkit-transform:scale(1.5)!important;transform:scale(1.5)!important}::ng-deep .g-dot-inner{background-color:#fff;opacity:.6;width:30%;height:30%;border-radius:50%;box-shadow:0 0 1px #000;transition:.2s}::ng-deep .g-dot,::ng-deep .g-dot-inner,::ng-deep gallery-dots{display:flex;justify-content:center;align-items:center}::ng-deep .g-nav-next,::ng-deep .g-nav-prev{position:absolute;top:50%;width:30px;height:40px;cursor:pointer;z-index:999}::ng-deep .g-nav-next{right:.5em;-webkit-transform:translateY(-50%) perspective(1px);transform:translateY(-50%) perspective(1px)}::ng-deep .g-nav-prev{left:.5em;-webkit-transform:translateY(-50%) perspective(1px) scale(-1,-1);transform:translateY(-50%) perspective(1px) scale(-1,-1)}@media only screen and (max-width:480px){::ng-deep .g-nav-next{right:.2em}::ng-deep .g-nav-prev{left:.2em}}::ng-deep .g-items-container{height:100%}::ng-deep .g-slider{position:absolute;transition:transform .4s cubic-bezier(.5,0,.5,1);transition:transform .4s cubic-bezier(.5,0,.5,1),-webkit-transform .4s cubic-bezier(.5,0,.5,1)}::ng-deep gallery-core[slidingDirection=horizontal] .g-slider{flex-direction:row}::ng-deep gallery-core[slidingDirection=vertical] .g-slider{flex-direction:column}::ng-deep gallery-thumbs{display:block;z-index:1;overflow:unset}::ng-deep .g-thumbs-container{position:relative;z-index:206;width:100%;height:100%;left:0;top:0;display:flex;overflow:unset}::ng-deep gallery-core[disableThumb=true] gallery-thumb{cursor:default}::ng-deep gallery-core[thumbPosition=bottom] gallery-thumbs .g-slider,::ng-deep gallery-core[thumbPosition=top] gallery-thumbs .g-slider{flex-direction:row;top:0;left:50%}::ng-deep gallery-core[thumbPosition=bottom] gallery-thumb,::ng-deep gallery-core[thumbPosition=top] gallery-thumb{padding:1px 0 1px 1px}::ng-deep gallery-core[thumbPosition=left] gallery-thumbs .g-slider,::ng-deep gallery-core[thumbPosition=right] gallery-thumbs .g-slider{flex-direction:column;top:50%;left:0}::ng-deep gallery-core[thumbPosition=left] gallery-thumb,::ng-deep gallery-core[thumbPosition=right] gallery-thumb{padding:0 1px 1px}::ng-deep gallery-core[thumbPosition=top]{flex-direction:column}::ng-deep gallery-core[thumbPosition=left]{flex-direction:row}::ng-deep gallery-core[thumbPosition=right]{flex-direction:row-reverse}::ng-deep gallery-core[thumbPosition=bottom]{flex-direction:column-reverse}::ng-deep gallery-thumb.g-active-thumb .g-thumb-loading{background-color:#464646}::ng-deep .g-thumb-loading{position:relative;overflow:hidden;height:100%;background-color:#262626}::ng-deep .g-thumb-loading::before{content:\"\";position:absolute;top:0;right:0;bottom:0;left:50%;z-index:1;width:500%;margin-left:-250%;-webkit-animation:.8s linear infinite phAnimation;animation:.8s linear infinite phAnimation;background:linear-gradient(to right,rgba(255,255,255,0) 46%,rgba(255,255,255,.35) 50%,rgba(255,255,255,0) 54%) 50% 50%}@-webkit-keyframes phAnimation{0%{-webkit-transform:translate3d(-30%,0,0);transform:translate3d(-30%,0,0)}100%{-webkit-transform:translate3d(30%,0,0);transform:translate3d(30%,0,0)}}@keyframes phAnimation{0%{-webkit-transform:translate3d(-30%,0,0);transform:translate3d(-30%,0,0)}100%{-webkit-transform:translate3d(30%,0,0);transform:translate3d(30%,0,0)}}::ng-deep gallery-core[counterPosition=top] .g-counter{top:0;border-bottom-left-radius:4px;border-bottom-right-radius:4px}::ng-deep gallery-core[counterPosition=bottom] .g-counter{bottom:0;border-top-left-radius:4px;border-top-right-radius:4px}::ng-deep .g-counter{z-index:50;position:absolute;left:50%;-webkit-transform:translateX(-50%) perspective(1px);transform:translateX(-50%) perspective(1px);font-size:12px;padding:4px 10px;color:#fff;background-color:rgba(0,0,0,.5)}::ng-deep gallery[gallerize] gallery-item{cursor:pointer}::ng-deep gallery-item,::ng-deep gallery-thumb{position:relative;height:100%;width:100%;display:block;overflow:hidden}::ng-deep gallery-item h2,::ng-deep gallery-item h4,::ng-deep gallery-thumb h2,::ng-deep gallery-thumb h4{color:coral;margin:0}::ng-deep gallery-item h2,::ng-deep gallery-thumb h2{font-size:3.5em;margin-bottom:.3em}::ng-deep gallery-item h4,::ng-deep gallery-thumb h4{font-size:1.6em}::ng-deep gallery-item{z-index:10}::ng-deep gallery-item iframe,::ng-deep gallery-item video{position:absolute;width:100%;height:100%}::ng-deep gallery-thumb{opacity:.5;cursor:pointer;transition:opacity .3s cubic-bezier(.5,0,.5,1)}::ng-deep gallery-thumb.g-active-thumb{opacity:1}::ng-deep .g-image-item{background-position:center center;background-repeat:no-repeat;background-size:cover;width:100%;height:100%}::ng-deep .g-image-error-message,::ng-deep .g-template{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;color:#fff;display:flex;align-items:center;justify-content:center;flex-direction:column}::ng-deep .g-loading{position:absolute;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);left:50%;top:50%;width:80px;height:80px}::ng-deep gallery-core[imageSize=contain] gallery-slider .g-image-item{background-size:contain}::ng-deep gallery-image{display:flex;justify-content:center;align-items:center;height:100%}::ng-deep gallery{position:relative;z-index:1;overflow:hidden;display:block;height:500px;background-color:#000}::ng-deep gallery *{box-sizing:border-box}::ng-deep gallery,::ng-deep gallery-core{position:relative;overflow:hidden}::ng-deep .g-box,::ng-deep .g-slider,::ng-deep gallery-core{display:flex;height:100%;width:100%}::ng-deep gallery[fluid]{-webkit-transform:translateX(-50vw);transform:translateX(-50vw);width:100vw;left:50%}::ng-deep gallery[fluid][fluid=false]{-webkit-transform:none;transform:none;width:initial;left:initial}::ng-deep .g-no-transition{transition:unset!important}::ng-deep .g-box,::ng-deep gallery-slider{overflow:hidden;position:relative;display:flex;flex-direction:column;flex:1;order:1;height:100%}::ng-deep .g-btn-close svg,::ng-deep gallery-nav svg{width:100%;height:100%;-webkit-filter:drop-shadow(0 0 1px #000);filter:drop-shadow(0 0 1px #000);transition:opacity .2s linear;opacity:.6}::ng-deep .g-btn-close svg:hover,::ng-deep gallery-nav svg:hover{opacity:1}"]
}] }
];
/** @nocollapse */
GalleryComponent.ctorParameters = function () { return [
{ type: Gallery }
]; };
GalleryComponent.propDecorators = {
id: [{ type: Input }],
items: [{ type: Input }],
nav: [{ type: Input }],
dots: [{ type: Input }],
loop: [{ type: Input }],
thumb: [{ type: Input }],
zoomOut: [{ type: Input }],
counter: [{ type: Input }],
dotsSize: [{ type: Input }],
autoPlay: [{ type: Input }],
gestures: [{ type: Input }],
thumbWidth: [{ type: Input }],
thumbHeight: [{ type: Input }],
disableThumb: [{ type: Input }],
panSensitivity: [{ type: Input }],
playerInterval: [{ type: Input }],
itemTemplate: [{ type: Input }],
thumbTemplate: [{ type: Input }],
thumbMode: [{ type: Input }],
imageSize: [{ type: Input }],
dotsPosition: [{ type: Input }],
counterPosition: [{ type: Input }],
slidingDirection: [{ type: Input }],
loadingStrategy: [{ type: Input }],
thumbPosition: [{ type: Input }],
destroyRef: [{ type: Input }],
skipInitConfig: [{ type: Input }],
itemClick: [{ type: Output }],
thumbClick: [{ type: Output }],
playingChange: [{ type: Output }],
indexChange: [{ type: Output }],
itemsChange: [{ type: Output }],
error: [{ type: Output }]
};
return GalleryComponent;
}());
export { GalleryComponent };
if (false) {
/** @type {?} */
GalleryComponent.prototype.galleryRef;
/** @type {?} */
GalleryComponent.prototype.id;
/** @type {?} */
GalleryComponent.prototype.items;
/** @type {?} */
GalleryComponent.prototype.nav;
/** @type {?} */
GalleryComponent.prototype.dots;
/** @type {?} */
GalleryComponent.prototype.loop;
/** @type {?} */
GalleryComponent.prototype.thumb;
/** @type {?} */
GalleryComponent.prototype.zoomOut;
/** @type {?} */
GalleryComponent.prototype.counter;
/** @type {?} */
GalleryComponent.prototype.dotsSize;
/** @type {?} */
GalleryComponent.prototype.autoPlay;
/** @type {?} */
GalleryComponent.prototype.gestures;
/** @type {?} */
GalleryComponent.prototype.thumbWidth;
/** @type {?} */
GalleryComponent.prototype.thumbHeight;
/** @type {?} */
GalleryComponent.prototype.disableThumb;
/** @type {?} */
GalleryComponent.prototype.panSensitivity;
/** @type {?} */
GalleryComponent.prototype.playerInterval;
/** @type {?} */
GalleryComponent.prototype.itemTemplate;
/** @type {?} */
GalleryComponent.prototype.thumbTemplate;
/** @type {?} */
GalleryComponent.prototype.thumbMode;
/** @type {?} */
GalleryComponent.prototype.imageSize;
/** @type {?} */
GalleryComponent.prototype.dotsPosition;
/** @type {?} */
GalleryComponent.prototype.counterPosition;
/** @type {?} */
GalleryComponent.prototype.slidingDirection;
/** @type {?} */
GalleryComponent.prototype.loadingStrategy;
/** @type {?} */
GalleryComponent.prototype.thumbPosition;
/**
* Destroy gallery ref on component destroy event
* @type {?}
*/
GalleryComponent.prototype.destroyRef;
/**
* Skip initializing the config with components inputs (Lightbox mode)
* @type {?}
*/
GalleryComponent.prototype.skipInitConfig;
/** @type {?} */
GalleryComponent.prototype.itemClick;
/** @type {?} */
GalleryComponent.prototype.thumbClick;
/** @type {?} */
GalleryComponent.prototype.playingChange;
/** @type {?} */
GalleryComponent.prototype.indexChange;
/** @type {?} */
GalleryComponent.prototype.itemsChange;
/** @type {?} */
GalleryComponent.prototype.error;
/**
* @type {?}
* @private
*/
GalleryComponent.prototype._itemClick$;
/**
* @type {?}
* @private
*/
GalleryComponent.prototype._thumbClick$;
/**
* @type {?}
* @private
*/
GalleryComponent.prototype._itemChange$;
/**
* @type {?}
* @private
*/
GalleryComponent.prototype._indexChange$;
/**
* @type {?}
* @private
*/
GalleryComponent.prototype._playingChange$;
/**
* @type {?}
* @private
*/
GalleryComponent.prototype._playerListener$;
/**
* @type {?}
* @private
*/
GalleryComponent.prototype._gallery;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWdhbGxlcnkvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2dhbGxlcnkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBS04sV0FBVyxFQUNYLFlBQVksRUFDWix1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RjtJQWlFRSwwQkFBb0IsUUFBaUI7UUFBakIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQTlDNUIsUUFBRyxHQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUN4QyxTQUFJLEdBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzFDLFNBQUksR0FBWSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDMUMsVUFBSyxHQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUM1QyxZQUFPLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQy9DLFlBQU8sR0FBWSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDaEQsYUFBUSxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNqRCxhQUFRLEdBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMs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bnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgU3Vic2NyaXB0aW9uTGlrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR2FsbGVyeSB9IGZyb20gJy4uL3NlcnZpY2VzL2dhbGxlcnkuc2VydmljZSc7XG5pbXBvcnQgeyBHYWxsZXJ5UmVmIH0gZnJvbSAnLi4vc2VydmljZXMvZ2FsbGVyeS1yZWYnO1xuaW1wb3J0IHsgR2FsbGVyeUVycm9yLCBHYWxsZXJ5SXRlbSwgR2FsbGVyeVN0YXRlIH0gZnJvbSAnLi4vbW9kZWxzL2dhbGxlcnkubW9kZWwnO1xuaW1wb3J0IHsgSWZyYW1lSXRlbSwgSW1hZ2VJdGVtLCBWaWRlb0l0ZW0sIFlvdXR1YmVJdGVtIH0gZnJvbSAnLi90ZW1wbGF0ZXMvaXRlbXMubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnYWxsZXJ5JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0eWxlVXJsczogWycuLi9zdHlsZXMvZ2FsbGVyeS5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGdhbGxlcnktY29yZSBbc3RhdGVdPVwiZ2FsbGVyeVJlZi5zdGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiZ2FsbGVyeVJlZi5jb25maWcgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAoYWN0aW9uKT1cIm9uQWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGl0ZW1DbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICh0aHVtYkNsaWNrKT1cIm9uVGh1bWJDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJvbkVycm9yKCRldmVudClcIj48L2dhbGxlcnktY29yZT5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgR2FsbGVyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIGdhbGxlcnlSZWY6IEdhbGxlcnlSZWY7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGl0ZW1zOiBHYWxsZXJ5SXRlbSBbXTtcbiAgQElucHV0KCkgbmF2OiBib29sZWFuID0gdGhpcy5fZ2FsbGVyeS5jb25maWcubmF2O1xuICBASW5wdXQoKSBkb3RzOiBib29sZWFuID0gdGhpcy5fZ2FsbGVyeS5jb25maWcuZG90cztcbiAgQElucHV0KCkgbG9vcDogYm9vbGVhbiA9IHRoaXMuX2dhbGxlcnkuY29uZmlnLmxvb3A7XG4gIEBJbnB1dCgpIHRodW1iOiBib29sZWFuID0gdGhpcy5fZ2FsbGVyeS5jb25maWcudGh1bWI7XG4gIEBJbnB1dCgpIHpvb21PdXQ6IG51bWJlciA9IHRoaXMuX2dhbGxlcnkuY29uZmlnLnpvb21PdXQ7XG4gIEBJbnB1dCgpIGNvdW50ZXI6IGJvb2xlYW4gPSB0aGlzLl9nYWxsZXJ5LmNvbmZpZy5jb3VudGVyO1xuICBASW5wdXQoKSBkb3RzU2l6ZTogbnVtYmVyID0gdGhpcy5fZ2FsbGVyeS5jb25maWcuZG90c1NpemU7XG4gIEBJbnB1dCgpIGF1dG9QbGF5OiBib29sZWFuID0gdGhpcy5fZ2FsbGVyeS5jb25maWcuYXV0b1BsYXk7XG4gIEBJbnB1dCgpIGdlc3R1cmVzOiBib29sZWFuID0gdGhpcy5fZ2FsbGVyeS5jb25maWcuZ2VzdHVyZXM7XG4gIEBJbnB1dCgpIHRodW1iV2lkdGg6IG51bWJlciA9IHRoaXMuX2dhbGxlcnkuY29uZmlnLnRodW1iV2lkdGg7XG4gIEBJbnB1dCgpIHRodW1iSGVpZ2h0OiBudW1iZXIgPSB0aGlzLl9nYWxsZXJ5LmNvbmZpZy50aHVtYkhlaWdodDtcbiAgQElucHV0KCkgZGlzYWJsZVRodW1iOiBib29sZWFuID0gdGhpcy5fZ2FsbGVyeS5jb25maWcuZGlzYWJsZVRodW1iO1xuICBASW5wdXQoKSBwYW5TZW5zaXRpdml0eTogbnVtYmVyID0gdGhpcy5fZ2FsbGVyeS5jb25maWcucGFuU2Vuc2l0aXZpdHk7XG4gIEBJbnB1dCgpIHBsYXllckludGVydmFsOiBudW1iZXIgPSB0aGlzLl9nYWxsZXJ5LmNvbmZpZy5wbGF5ZXJJbnRlcnZhbDtcbiAgQElucHV0KCkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gdGhpcy5fZ2FsbGVyeS5jb25maWcuaXRlbVRlbXBsYXRlO1xuICBASW5wdXQoKSB0aHVtYlRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gdGhpcy5fZ2FsbGVyeS5jb25maWcudGh1bWJUZW1wbGF0ZTtcbiAgQElucHV0KCkgdGh1bWJNb2RlOiAnc3RyaWN0JyB8ICdmcmVlJyA9IHRoaXMuX2dhbGxlcnkuY29uZmlnLnRodW1iTW9kZTtcbiAgQElucHV0KCkgaW1hZ2VTaXplOiAnY292ZXInIHwgJ2NvbnRhaW4nID0gdGhpcy5fZ2FsbGVyeS5jb25maWcuaW1hZ2VTaXplO1xuICBASW5wdXQoKSBkb3RzUG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbScgPSB0aGlzLl9nYWxsZXJ5LmNvbmZpZy5kb3RzUG9zaXRpb247XG4gIEBJbnB1dCgpIGNvdW50ZXJQb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJyA9IHRoaXMuX2dhbGxlcnkuY29uZmlnLmNvdW50ZXJQb3NpdGlvbjtcbiAgQElucHV0KCkgc2xpZGluZ0RpcmVjdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9IHRoaXMuX2dhbGxlcnkuY29uZmlnLnNsaWRpbmdEaXJlY3Rpb247XG4gIEBJbnB1dCgpIGxvYWRpbmdTdHJhdGVneTogJ3ByZWxvYWQnIHwgJ2xhenknIHwgJ2RlZmF1bHQnID0gdGhpcy5fZ2FsbGVyeS5jb25maWcubG9hZGluZ1N0cmF0ZWd5O1xuICBASW5wdXQoKSB0aHVtYlBvc2l0aW9uOiAndG9wJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyA9IHRoaXMuX2dhbGxlcnkuY29uZmlnLnRodW1iUG9zaXRpb247XG5cbiAgLy8gSW5wdXRzIHVzZWQgYnkgdGhlIGxpZ2h0Ym94XG5cbiAgLyoqIERlc3Ryb3kgZ2FsbGVyeSByZWYgb24gY29tcG9uZW50IGRlc3Ryb3kgZXZlbnQgKi9cbiAgQElucHV0KCkgZGVzdHJveVJlZiA9IHRydWU7XG5cbiAgLyoqIFNraXAgaW5pdGlhbGl6aW5nIHRoZSBjb25maWcgd2l0aCBjb21wb25lbnRzIGlucHV0cyAoTGlnaHRib3ggbW9kZSkgKi9cbiAgQElucHV0KCkgc2tpcEluaXRDb25maWcgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSB0aHVtYkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBwbGF5aW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHYWxsZXJ5U3RhdGU+KCk7XG4gIEBPdXRwdXQoKSBpbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FsbGVyeVN0YXRlPigpO1xuICBAT3V0cHV0KCkgaXRlbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbGxlcnlTdGF0ZT4oKTtcbiAgQE91dHB1dCgpIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxHYWxsZXJ5RXJyb3I+KCk7XG5cbiAgcHJpdmF0ZSBfaXRlbUNsaWNrJDogU3Vic2NyaXB0aW9uTGlrZSA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJpdmF0ZSBfdGh1bWJDbGljayQ6IFN1YnNjcmlwdGlvbkxpa2UgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX2l0ZW1DaGFuZ2UkOiBTdWJzY3JpcHRpb25MaWtlID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICBwcml2YXRlIF9pbmRleENoYW5nZSQ6IFN1YnNjcmlwdGlvbkxpa2UgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX3BsYXlpbmdDaGFuZ2UkOiBTdWJzY3JpcHRpb25MaWtlID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICBwcml2YXRlIF9wbGF5ZXJMaXN0ZW5lciQ6IFN1YnNjcmlwdGlvbkxpa2UgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZ2FsbGVyeTogR2FsbGVyeSkge1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdjogdGhpcy5uYXYsXG4gICAgICBkb3RzOiB0aGlzLmRvdHMsXG4gICAgICBsb29wOiB0aGlzLmxvb3AsXG4gICAgICB0aHVtYjogdGhpcy50aHVtYixcbiAgICAgIHpvb21PdXQ6IHRoaXMuem9vbU91dCxcbiAgICAgIGNvdW50ZXI6IHRoaXMuY291bnRlcixcbiAgICAgIGF1dG9QbGF5OiB0aGlzLmF1dG9QbGF5LFxuICAgICAgZ2VzdHVyZXM6IHRoaXMuZ2VzdHVyZXMsXG4gICAgICBkb3RzU2l6ZTogdGhpcy5kb3RzU2l6ZSxcbiAgICAgIGltYWdlU2l6ZTogdGhpcy5pbWFnZVNpemUsXG4gICAgICB0aHVtYk1vZGU6IHRoaXMudGh1bWJNb2RlLFxuICAgICAgdGh1bWJXaWR0aDogdGhpcy50aHVtYldpZHRoLFxuICAgICAgdGh1bWJIZWlnaHQ6IHRoaXMudGh1bWJIZWlnaHQsXG4gICAgICBkaXNhYmxlVGh1bWI6IHRoaXMuZGlzYWJsZVRodW1iLFxuICAgICAgZG90c1Bvc2l0aW9uOiB0aGlzLmRvdHNQb3NpdGlvbixcbiAgICAgIGl0ZW1UZW1wbGF0ZTogdGhpcy5pdGVtVGVtcGxhdGUsXG4gICAgICB0aHVtYlRlbXBsYXRlOiB0aGlzLnRodW1iVGVtcGxhdGUsXG4gICAgICB0aHVtYlBvc2l0aW9uOiB0aGlzLnRodW1iUG9zaXRpb24sXG4gICAgICBwYW5TZW5zaXRpdml0eTogdGhpcy5wYW5TZW5zaXRpdml0eSxcbiAgICAgIHBsYXllckludGVydmFsOiB0aGlzLnBsYXllckludGVydmFsLFxuICAgICAgY291bnRlclBvc2l0aW9uOiB0aGlzLmNvdW50ZXJQb3NpdGlvbixcbiAgICAgIGxvYWRpbmdTdHJhdGVneTogdGhpcy5sb2FkaW5nU3RyYXRlZ3ksXG4gICAgICBzbGlkaW5nRGlyZWN0aW9uOiB0aGlzLnNsaWRpbmdEaXJlY3Rpb25cbiAgICB9O1xuICB9XG5cbiAgb25BY3Rpb24oaTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgc3dpdGNoIChpKSB7XG4gICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgdGhpcy5nYWxsZXJ5UmVmLm5leHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwcmV2JzpcbiAgICAgICAgdGhpcy5nYWxsZXJ5UmVmLnByZXYoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmdhbGxlcnlSZWYuc2V0KDxudW1iZXI+aSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLmdhbGxlcnlSZWYpIHtcbiAgICAgIHRoaXMuZ2FsbGVyeVJlZi5zZXRDb25maWcodGhpcy5nZXRDb25maWcoKSk7XG5cbiAgICAgIGlmIChjaGFuZ2VzLml0ZW1zICYmIGNoYW5nZXMuaXRlbXMuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLml0ZW1zLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5sb2FkKHRoaXMuaXRlbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIEdldCBnYWxsZXJ5IGluc3RhbmNlIGJ5IGlkXG4gICAgaWYgKHRoaXMuc2tpcEluaXRDb25maWcpIHtcbiAgICAgIHRoaXMuZ2FsbGVyeVJlZiA9IHRoaXMuX2dhbGxlcnkucmVmKHRoaXMuaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdhbGxlcnlSZWYgPSB0aGlzLl9nYWxsZXJ5LnJlZih0aGlzLmlkLCB0aGlzLmdldENvbmZpZygpKTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIGdhbGxlcnkgaXRlbXNcbiAgICB0aGlzLmxvYWQodGhpcy5pdGVtcyk7XG5cbiAgICAvLyBBY3RpdmF0ZSBwbGF5ZXIgbGlzdGVuZXJcbiAgICB0aGlzLl9wbGF5ZXJMaXN0ZW5lciQgPSB0aGlzLmdhbGxlcnlSZWYuYWN0aXZhdGVQbGF5ZXIoKS5zdWJzY3JpYmUoKTtcblxuICAgIC8vIFN1YnNjcmliZXMgdG8gZXZlbnRzIG9uIGRlbWFuZFxuICAgIGlmICh0aGlzLmluZGV4Q2hhbmdlLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2luZGV4Q2hhbmdlJCA9IHRoaXMuZ2FsbGVyeVJlZi5pbmRleENoYW5nZWQuc3Vic2NyaWJlKChzdGF0ZTogR2FsbGVyeVN0YXRlKSA9PiB0aGlzLmluZGV4Q2hhbmdlLmVtaXQoc3RhdGUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXRlbXNDaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5faXRlbUNoYW5nZSQgPSB0aGlzLmdhbGxlcnlSZWYuaXRlbXNDaGFuZ2VkLnN1YnNjcmliZSgoc3RhdGU6IEdhbGxlcnlTdGF0ZSkgPT4gdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHN0YXRlKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBsYXlpbmdDaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fcGxheWluZ0NoYW5nZSQgPSB0aGlzLmdhbGxlcnlSZWYucGxheWluZ0NoYW5nZWQuc3Vic2NyaWJlKChzdGF0ZTogR2FsbGVyeVN0YXRlKSA9PiB0aGlzLnBsYXlpbmdDaGFuZ2UuZW1pdChzdGF0ZSkpO1xuICAgIH1cblxuICAgIC8vIFN0YXJ0IHBsYXlpbmcgaWYgYXV0by1wbGF5IGlzIHNldCB0byB0cnVlXG4gICAgaWYgKHRoaXMuYXV0b1BsYXkpIHtcbiAgICAgIHRoaXMucGxheSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2l0ZW1DbGljayQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl90aHVtYkNsaWNrJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2l0ZW1DaGFuZ2UkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5faW5kZXhDaGFuZ2UkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fcGxheWluZ0NoYW5nZSQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9wbGF5ZXJMaXN0ZW5lciQudW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5kZXN0cm95UmVmKSB7XG4gICAgICB0aGlzLmdhbGxlcnlSZWYuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uSXRlbUNsaWNrKGk6IG51bWJlcikge1xuICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQoaSk7XG4gICAgdGhpcy5nYWxsZXJ5UmVmLml0ZW1DbGljay5uZXh0KGkpO1xuICB9XG5cbiAgb25UaHVtYkNsaWNrKGk6IG51bWJlcikge1xuICAgIHRoaXMuZ2FsbGVyeVJlZi5zZXQoaSk7XG4gICAgdGhpcy50aHVtYkNsaWNrLmVtaXQoaSk7XG4gICAgdGhpcy5nYWxsZXJ5UmVmLnRodW1iQ2xpY2submV4dChpKTtcbiAgfVxuXG4gIG9uRXJyb3IoZXJyOiBHYWxsZXJ5RXJyb3IpIHtcbiAgICB0aGlzLmVycm9yLmVtaXQoZXJyKTtcbiAgICB0aGlzLmdhbGxlcnlSZWYuZXJyb3IubmV4dChlcnIpO1xuICB9XG5cbiAgbG9hZChpdGVtczogR2FsbGVyeUl0ZW1bXSkge1xuICAgIHRoaXMuZ2FsbGVyeVJlZi5sb2FkKGl0ZW1zKTtcbiAgfVxuXG4gIGFkZChpdGVtOiBHYWxsZXJ5SXRlbSwgYWN0aXZlPzogYm9vbGVhbikge1xuICAgIHRoaXMuZ2FsbGVyeVJlZi5hZGQoaXRlbSwgYWN0aXZlKTtcbiAgfVxuXG4gIGFkZEltYWdlKGRhdGE6IGFueSwgYWN0aXZlPzogYm9vbGVhbikge1xuICAgIHRoaXMuYWRkKG5ldyBJbWFnZUl0ZW0oZGF0YSksIGFjdGl2ZSk7XG4gIH1cblxuICBhZGRWaWRlbyhkYXRhOiBhbnksIGFjdGl2ZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFkZChuZXcgVmlkZW9JdGVtKGRhdGEpLCBhY3RpdmUpO1xuICB9XG5cbiAgYWRkSWZyYW1lKGRhdGE6IGFueSwgYWN0aXZlPzogYm9vbGVhbikge1xuICAgIHRoaXMuYWRkKG5ldyBJZnJhbWVJdGVtKGRhdGEpLCBhY3RpdmUpO1xuICB9XG5cbiAgYWRkWW91dHViZShkYXRhOiBhbnksIGFjdGl2ZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFkZChuZXcgWW91dHViZUl0ZW0oZGF0YSksIGFjdGl2ZSk7XG4gIH1cblxuICByZW1vdmUoaTogbnVtYmVyKSB7XG4gICAgdGhpcy5nYWxsZXJ5UmVmLnJlbW92ZShpKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy5nYWxsZXJ5UmVmLm5leHQoKTtcbiAgfVxuXG4gIHByZXYoKSB7XG4gICAgdGhpcy5nYWxsZXJ5UmVmLnByZXYoKTtcbiAgfVxuXG4gIHNldChpOiBudW1iZXIpIHtcbiAgICB0aGlzLmdhbGxlcnlSZWYuc2V0KGkpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5nYWxsZXJ5UmVmLnJlc2V0KCk7XG4gIH1cblxuICBwbGF5KGludGVydmFsPzogbnVtYmVyKSB7XG4gICAgdGhpcy5nYWxsZXJ5UmVmLnBsYXkoaW50ZXJ2YWwpO1xuICB9XG5cbiAgc3RvcCgpIHtcbiAgICB0aGlzLmdhbGxlcnlSZWYuc3RvcCgpO1xuICB9XG59XG4iXX0=