ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
412 lines • 42.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, QueryList, Renderer2, ViewChild, ElementRef, HostBinding, ContentChildren, ChangeDetectorRef } from '@angular/core';
var DefaultTabBarComponent = /** @class */ (function () {
function DefaultTabBarComponent(_renderer, _ref) {
this._renderer = _renderer;
this._ref = _ref;
this.prefixCls = 'am-tabs-default-bar';
this.inkBarStyle = {};
this.tabsBarStyle = {};
this.showPrev = false;
this.showNext = false;
this.selectedKey = 0;
this.inkBarOffSet = 0;
this.inkBarLength = 0;
this.tabBarNavSwipedPosition = 0;
this.tabBarNavSwipingPosition = 0;
this._startPosition = 0;
this.page = 5;
this.animated = true;
this.tabBarBackgroundColor = '#FFF';
this.tabTitleSize = 0;
this.tabBarPosition = 'top';
this.tabBarWrap = true;
this.getTabSize = (/**
* @param {?} page
* @param {?} tabLength
* @return {?}
*/
function (page, tabLength) { return 100 / Math.min(page, tabLength); });
}
Object.defineProperty(DefaultTabBarComponent.prototype, "activeTab", {
get: /**
* @return {?}
*/
function () {
return this.selectedKey;
},
set: /**
* @param {?} index
* @return {?}
*/
function (index) {
if (index !== this.selectedKey) {
this.selectedKey = index;
if (this.tabTitles && this.tabTitles.length > 0) {
this.setTabBarStyleCenter();
this.setInkBarStatus(this.selectedKey);
}
}
},
enumerable: true,
configurable: true
});
/**
* @param {?} event
* @return {?}
*/
DefaultTabBarComponent.prototype.onTouchStart = /**
* @param {?} event
* @return {?}
*/
function (event) {
if ((this.tabTitleSize > 0 &&
this.tabTitleSize * this.tabTitles.length >
('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition
? this.tabsBarSwipe.nativeElement.offsetWidth
: this.tabsBarSwipe.nativeElement.offsetHeight)) ||
(this.tabTitleSize <= 0 && this.page < this.tabTitles.length)) {
if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) {
this._startPosition =
event && event.changedTouches && event.changedTouches[0] && event.changedTouches[0].clientX;
}
else {
this._startPosition =
event && event.changedTouches && event.changedTouches[0] && event.changedTouches[0].clientY;
}
}
};
/**
* @param {?} event
* @return {?}
*/
DefaultTabBarComponent.prototype.onTouchMove = /**
* @param {?} event
* @return {?}
*/
function (event) {
event.preventDefault();
event.stopPropagation();
if ((this.tabTitleSize > 0 &&
this.tabTitleSize * this.tabTitles.length >
('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition
? this.tabsBarSwipe.nativeElement.offsetWidth
: this.tabsBarSwipe.nativeElement.offsetHeight)) ||
(this.tabTitleSize <= 0 && this.page < this.tabTitles.length)) {
if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) {
this.setTabBarNavSwipingPosition(event.changedTouches[0].clientX - this._startPosition, this.tabTitles.first.nativeElement.offsetWidth, this.tabsBarSwipe.nativeElement.offsetWidth);
this.tabsBarStyle = {
transition: '0ms',
transform: 'translate3d(' + this.tabBarNavSwipingPosition + 'px, 0px, 0px)',
webkitTransform: 'translate3d(' + this.tabBarNavSwipingPosition + 'px, 0px, 0px)'
};
}
else {
this.setTabBarNavSwipingPosition(event.changedTouches[0].clientY - this._startPosition, this.tabTitles.first.nativeElement.offsetHeight, this.tabsBarSwipe.nativeElement.offsetHeight);
this.tabsBarStyle = {
transition: '0ms',
transform: 'translate3d(0, ' + this.tabBarNavSwipingPosition + 'px, 0px)',
webkitTransform: 'translate3d(0, ' + this.tabBarNavSwipingPosition + 'px, 0px)'
};
}
}
};
/**
* @return {?}
*/
DefaultTabBarComponent.prototype.onTouchEnd = /**
* @return {?}
*/
function () {
if ((this.tabTitleSize > 0 &&
this.tabTitleSize * this.tabTitles.length >
('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition
? this.tabsBarSwipe.nativeElement.offsetWidth
: this.tabsBarSwipe.nativeElement.offsetHeight)) ||
(this.tabTitleSize <= 0 && this.page < this.tabTitles.length)) {
this.tabBarNavSwipedPosition = this.tabBarNavSwipingPosition;
}
};
/**
* @return {?}
*/
DefaultTabBarComponent.prototype.onContentChange = /**
* @return {?}
*/
function () {
this.setTabsStyle();
this.setInkBarStatus(this.selectedKey);
};
/**
* @return {?}
*/
DefaultTabBarComponent.prototype.ngAfterContentInit = /**
* @return {?}
*/
function () {
this.setTabsStyle();
this.setTabBarStyleCenter();
this.setInkBarStatus(this.selectedKey);
};
/**
* @private
* @return {?}
*/
DefaultTabBarComponent.prototype.setTabsStyle = /**
* @private
* @return {?}
*/
function () {
var _this = this;
if (this.tabTitles && this.tabTitles.length > 0) {
if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) {
this.tabTitles.forEach((/**
* @param {?} tabTitle
* @return {?}
*/
function (tabTitle) {
_this._renderer.setStyle(tabTitle.nativeElement, 'width', _this.tabTitleSize > 0 ? _this.tabTitleSize + 'px' : _this.getTabSize(_this.page, _this.tabTitles.length) + '%');
}));
}
else {
this.tabTitles.forEach((/**
* @param {?} tabTitle
* @return {?}
*/
function (tabTitle) {
_this._renderer.setStyle(tabTitle.nativeElement, 'height', _this.tabTitleSize > 0 ? _this.tabTitleSize + 'px' : _this.getTabSize(_this.page, _this.tabTitles.length) + '%');
}));
}
}
};
/**
* @private
* @return {?}
*/
DefaultTabBarComponent.prototype.setTabBarStyleCenter = /**
* @private
* @return {?}
*/
function () {
if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) {
this.setTabBarNavSwipedPosition(this.tabTitleSize > 0
? this.tabTitleSize
: this.tabsBarSwipe.nativeElement.offsetWidth / Math.min(this.tabTitles.length, this.page), this.tabsBarSwipe.nativeElement.offsetWidth);
this.tabsBarStyle = {
transform: 'translate3d(' + this.tabBarNavSwipedPosition + 'px, 0px, 0px)',
webkitTransform: 'translate3d(' + this.tabBarNavSwipedPosition + ', 0px, 0px)'
};
}
else {
this.setTabBarNavSwipedPosition(this.tabTitleSize > 0
? this.tabTitleSize
: this.tabsBarSwipe.nativeElement.offsetHeight / Math.min(this.tabTitles.length, this.page), this.tabsBarSwipe.nativeElement.offsetHeight);
this.tabsBarStyle = {
transform: 'translate3d(0, ' + this.tabBarNavSwipedPosition + 'px, 0px)',
webkitTransform: 'translate3d(0, ' + this.tabBarNavSwipedPosition + 'px, 0px)'
};
}
};
/**
* @private
* @param {?} key
* @return {?}
*/
DefaultTabBarComponent.prototype.setInkBarStatus = /**
* @private
* @param {?} key
* @return {?}
*/
function (key) {
if (this.tabTitles && this.tabTitles.length > 0) {
if ('top' === this.tabBarPosition || 'bottom' === this.tabBarPosition) {
this.inkBarOffSet = this.tabTitles.toArray()[key].nativeElement.offsetLeft;
this.inkBarLength = this.tabTitles.toArray()[key].nativeElement.style.width;
this.inkBarStyle = {
width: this.inkBarLength,
left: this.tabTitleSize > 0
? this.selectedKey * this.tabTitleSize + 'px'
: (this.selectedKey * 100) / Math.min(this.tabTitles.length, this.page) + '%'
};
Object.assign(this.inkBarStyle, this.tabBarUnderlineStyle);
}
else {
this.inkBarOffSet = this.tabTitles.toArray()[key].nativeElement.offsetTop;
this.inkBarLength = this.tabTitles.toArray()[key].nativeElement.style.height;
this.inkBarStyle = {
height: this.inkBarLength,
top: this.tabTitleSize > 0
? this.selectedKey * this.tabTitleSize + 'px'
: (this.selectedKey * 100) / Math.min(this.tabTitles.length, this.page) + '%'
};
Object.assign(this.inkBarStyle, this.tabBarUnderlineStyle);
}
this._ref.detectChanges();
}
};
/**
* @private
* @param {?} swipingDistance
* @param {?} swipingItemLength
* @param {?} viewportLength
* @return {?}
*/
DefaultTabBarComponent.prototype.setTabBarNavSwipingPosition = /**
* @private
* @param {?} swipingDistance
* @param {?} swipingItemLength
* @param {?} viewportLength
* @return {?}
*/
function (swipingDistance, swipingItemLength, viewportLength) {
if (this.tabBarNavSwipedPosition + swipingDistance > 0) {
this.tabBarNavSwipingPosition = 0;
}
else if (this.tabBarNavSwipedPosition + swipingDistance <
viewportLength - swipingItemLength * this.tabTitles.length) {
this.tabBarNavSwipingPosition = viewportLength - swipingItemLength * this.tabTitles.length;
this.showNext = false;
}
else {
this.tabBarNavSwipingPosition = this.tabBarNavSwipedPosition + swipingDistance;
this.showNext = true;
}
if (this.tabBarNavSwipingPosition < 0) {
this.showPrev = true;
}
else {
this.showPrev = false;
}
};
/**
* @private
* @param {?} swipingItemLength
* @param {?} viewportLength
* @return {?}
*/
DefaultTabBarComponent.prototype.setTabBarNavSwipedPosition = /**
* @private
* @param {?} swipingItemLength
* @param {?} viewportLength
* @return {?}
*/
function (swipingItemLength, viewportLength) {
if (this.selectedKey * swipingItemLength + this.tabBarNavSwipedPosition <= 0) {
if (0 === this.selectedKey) {
this.tabBarNavSwipedPosition = 0;
}
else {
this.tabBarNavSwipedPosition = (1 - this.selectedKey) * swipingItemLength;
}
}
else if ((this.selectedKey + 1) * swipingItemLength >= viewportLength - this.tabBarNavSwipedPosition) {
if (this.tabTitles.length - 1 === this.selectedKey) {
this.tabBarNavSwipedPosition = viewportLength - (this.selectedKey + 1) * swipingItemLength;
}
else {
this.tabBarNavSwipedPosition = viewportLength - (this.selectedKey + 2) * swipingItemLength;
}
}
if (this.tabBarNavSwipedPosition < 0) {
this.showPrev = true;
}
else {
this.showPrev = false;
}
if (this.tabBarNavSwipedPosition + swipingItemLength * this.tabTitles.length - viewportLength > 0) {
this.showNext = true;
}
else {
this.showNext = false;
}
};
DefaultTabBarComponent.decorators = [
{ type: Component, args: [{
selector: 'DefaultTabBar, nzm-default-tab-bar',
template: "<div\n class=\"{{ prefixCls }} {{ prefixCls }}-{{ tabBarPosition }}\"\n [ngClass]=\"{ 'am-tabs-default-bar-animated': animated }\"\n [ngStyle]=\"{ backgroundColor: tabBarBackgroundColor || '#FFF' }\"\n>\n <div *ngIf=\"showPrev\" class=\"{{ prefixCls }}-prevpage\"></div>\n <div\n #TabsBarSwipe\n class=\"{{ prefixCls }}-content\"\n [ngStyle]=\"tabsBarStyle\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd()\"\n (cdkObserveContent)=\"onContentChange()\"\n >\n <ng-content></ng-content>\n <div class=\"{{ prefixCls }}-underline\" [ngStyle]=\"inkBarStyle\"></div>\n </div>\n <div *ngIf=\"showNext\" class=\"{{ prefixCls }}-nextpage\"></div>\n</div>\n"
}] }
];
/** @nocollapse */
DefaultTabBarComponent.ctorParameters = function () { return [
{ type: Renderer2 },
{ type: ChangeDetectorRef }
]; };
DefaultTabBarComponent.propDecorators = {
tabTitles: [{ type: ContentChildren, args: ['TabTitle',] }],
tabsBarSwipe: [{ type: ViewChild, args: ['TabsBarSwipe', { static: true },] }],
page: [{ type: Input }],
animated: [{ type: Input }],
tabBarUnderlineStyle: [{ type: Input }],
tabBarBackgroundColor: [{ type: Input }],
tabTitleSize: [{ type: Input }],
tabBarPosition: [{ type: Input }],
activeTab: [{ type: Input }],
tabBarWrap: [{ type: HostBinding, args: ['class.am-tabs-tab-bar-wrap',] }]
};
return DefaultTabBarComponent;
}());
export { DefaultTabBarComponent };
if (false) {
/** @type {?} */
DefaultTabBarComponent.prototype.prefixCls;
/** @type {?} */
DefaultTabBarComponent.prototype.inkBarStyle;
/** @type {?} */
DefaultTabBarComponent.prototype.tabsBarStyle;
/** @type {?} */
DefaultTabBarComponent.prototype.showPrev;
/** @type {?} */
DefaultTabBarComponent.prototype.showNext;
/** @type {?} */
DefaultTabBarComponent.prototype.selectedKey;
/** @type {?} */
DefaultTabBarComponent.prototype.inkBarOffSet;
/** @type {?} */
DefaultTabBarComponent.prototype.inkBarLength;
/** @type {?} */
DefaultTabBarComponent.prototype.tabBarNavSwipedPosition;
/** @type {?} */
DefaultTabBarComponent.prototype.tabBarNavSwipingPosition;
/**
* @type {?}
* @private
*/
DefaultTabBarComponent.prototype._startPosition;
/** @type {?} */
DefaultTabBarComponent.prototype.tabTitles;
/** @type {?} */
DefaultTabBarComponent.prototype.tabsBarSwipe;
/** @type {?} */
DefaultTabBarComponent.prototype.page;
/** @type {?} */
DefaultTabBarComponent.prototype.animated;
/** @type {?} */
DefaultTabBarComponent.prototype.tabBarUnderlineStyle;
/** @type {?} */
DefaultTabBarComponent.prototype.tabBarBackgroundColor;
/** @type {?} */
DefaultTabBarComponent.prototype.tabTitleSize;
/** @type {?} */
DefaultTabBarComponent.prototype.tabBarPosition;
/** @type {?} */
DefaultTabBarComponent.prototype.tabBarWrap;
/**
* @type {?}
* @private
*/
DefaultTabBarComponent.prototype.getTabSize;
/**
* @type {?}
* @private
*/
DefaultTabBarComponent.prototype._renderer;
/**
* @type {?}
* @private
*/
DefaultTabBarComponent.prototype._ref;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC10YWItYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsidGFicy9kZWZhdWx0LXRhYi1iYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUVYLGVBQWUsRUFDZixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFJdkI7SUFxREUsZ0NBQW9CLFNBQW9CLEVBQVUsSUFBdUI7UUFBckQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFVLFNBQUksR0FBSixJQUFJLENBQW1CO1FBaER6RSxjQUFTLEdBQVcscUJBQXFCLENBQUM7UUFDMUMsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLDRCQUF1QixHQUFXLENBQUMsQ0FBQztRQUNwQyw2QkFBd0IsR0FBVyxDQUFDLENBQUM7UUFFN0IsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFTbkMsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUVqQixhQUFRLEdBQVksSUFBSSxDQUFDO1FBSXpCLDBCQUFxQixHQUFXLE1BQU0sQ0FBQztRQUV2QyxpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUV6QixtQkFBYyxHQUF1QixLQUFLLENBQUM7UUFnQjNDLGVBQVUsR0FBRyxJQUFJLENBQUM7UUErTVYsZUFBVTs7Ozs7UUFBRyxVQUFDLElBQVksRUFBRSxTQUFpQixJQUFLLE9BQUEsR0FBRyxHQUFH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QUNoRDs7OztnQkFkQyxTQUFTO2dCQU1ULGlCQUFpQjs7OzRCQXVCaEIsZUFBZSxTQUFDLFVBQVU7K0JBRzFCLFNBQVMsU0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3VCQUcxQyxLQUFLOzJCQUVMLEtBQUs7dUNBRUwsS0FBSzt3Q0FFTCxLQUFLOytCQUVMLEtBQUs7aUNBRUwsS0FBSzs0QkFFTCxLQUFLOzZCQWNMLFdBQVcsU0FBQyw0QkFBNEI7O0lBaU4zQyw2QkFBQztDQUFBLEFBblFELElBbVFDO1NBL1BZLHNCQUFzQjs7O0lBQ2pDLDJDQUEwQzs7SUFDMUMsNkNBQXlCOztJQUN6Qiw4Q0FBMEI7O0lBQzFCLDBDQUEwQjs7SUFDMUIsMENBQTBCOztJQUMxQiw2Q0FBd0I7O0lBQ3hCLDhDQUF5Qjs7SUFDekIsOENBQXlCOztJQUN6Qix5REFBb0M7O0lBQ3BDLDBEQUFxQzs7Ozs7SUFFckMsZ0RBQW1DOztJQUVuQywyQ0FDaUM7O0lBRWpDLDhDQUN5Qjs7SUFFekIsc0NBQ2lCOztJQUNqQiwwQ0FDeUI7O0lBQ3pCLHNEQUM2Qjs7SUFDN0IsdURBQ3VDOztJQUN2Qyw4Q0FDeUI7O0lBQ3pCLGdEQUMyQzs7SUFlM0MsNENBQ2tCOzs7OztJQStNbEIsNENBQTBGOzs7OztJQTdNOUUsMkNBQTRCOzs7OztJQUFFLHNDQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBUYWJCYXJQb3NpdGlvblR5cGUgfSBmcm9tICcuL1Byb3BzVHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0RlZmF1bHRUYWJCYXIsIG56bS1kZWZhdWx0LXRhYi1iYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVmYXVsdC10YWItYmFyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGFiQmFyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXRhYnMtZGVmYXVsdC1iYXInO1xuICBpbmtCYXJTdHlsZTogb2JqZWN0ID0ge307XG4gIHRhYnNCYXJTdHlsZTogb2JqZWN0ID0ge307XG4gIHNob3dQcmV2OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dOZXh0OiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkS2V5OiBudW1iZXIgPSAwO1xuICBpbmtCYXJPZmZTZXQ6IG51bWJlciA9IDA7XG4gIGlua0Jhckxlbmd0aDogbnVtYmVyID0gMDtcbiAgdGFiQmFyTmF2U3dpcGVkUG9zaXRpb246IG51bWJlciA9IDA7XG4gIHRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICBwcml2YXRlIF9zdGFydFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oJ1RhYlRpdGxlJylcbiAgdGFiVGl0bGVzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgQFZpZXdDaGlsZCgnVGFic0JhclN3aXBlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgdGFic0JhclN3aXBlOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHBhZ2U6IG51bWJlciA9IDU7XG4gIEBJbnB1dCgpXG4gIGFuaW1hdGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgdGFiQmFyVW5kZXJsaW5lU3R5bGU6IG9iamVjdDtcbiAgQElucHV0KClcbiAgdGFiQmFyQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI0ZGRic7XG4gIEBJbnB1dCgpXG4gIHRhYlRpdGxlU2l6ZTogbnVtYmVyID0gMDtcbiAgQElucHV0KClcbiAgdGFiQmFyUG9zaXRpb246IFRhYkJhclBvc2l0aW9uVHlwZSA9ICd0b3AnO1xuICBASW5wdXQoKVxuICBnZXQgYWN0aXZlVGFiKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRLZXk7XG4gIH1cbiAgc2V0IGFjdGl2ZVRhYihpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4ICE9PSB0aGlzLnNlbGVjdGVkS2V5KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkS2V5ID0gaW5kZXg7XG4gICAgICBpZiAodGhpcy50YWJUaXRsZXMgJiYgdGhpcy50YWJUaXRsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNldFRhYkJhclN0eWxlQ2VudGVyKCk7XG4gICAgICAgIHRoaXMuc2V0SW5rQmFyU3RhdHVzKHRoaXMuc2VsZWN0ZWRLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tdGFicy10YWItYmFyLXdyYXAnKVxuICB0YWJCYXJXcmFwID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIF9yZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG9uVG91Y2hTdGFydChldmVudCkge1xuICAgIGlmIChcbiAgICAgICh0aGlzLnRhYlRpdGxlU2l6ZSA+IDAgJiZcbiAgICAgICAgdGhpcy50YWJUaXRsZVNpemUgKiB0aGlzLnRhYlRpdGxlcy5sZW5ndGggPlxuICAgICAgICAgICgndG9wJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvbiB8fCAnYm90dG9tJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvblxuICAgICAgICAgICAgPyB0aGlzLnRhYnNCYXJTd2lwZS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoXG4gICAgICAgICAgICA6IHRoaXMudGFic0JhclN3aXBlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KSkgfHxcbiAgICAgICh0aGlzLnRhYlRpdGxlU2l6ZSA8PSAwICYmIHRoaXMucGFnZSA8IHRoaXMudGFiVGl0bGVzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIGlmICgndG9wJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvbiB8fCAnYm90dG9tJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvbikge1xuICAgICAgICB0aGlzLl9zdGFydFBvc2l0aW9uID1cbiAgICAgICAgICBldmVudCAmJiBldmVudC5jaGFuZ2VkVG91Y2hlcyAmJiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSAmJiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3RhcnRQb3NpdGlvbiA9XG4gICAgICAgICAgZXZlbnQgJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXMgJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gJiYgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblRvdWNoTW92ZShldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKFxuICAgICAgKHRoaXMudGFiVGl0bGVTaXplID4gMCAmJlxuICAgICAgICB0aGlzLnRhYlRpdGxlU2l6ZSAqIHRoaXMudGFiVGl0bGVzLmxlbmd0aCA+XG4gICAgICAgICAgKCd0b3AnID09PSB0aGlzLnRhYkJhclBvc2l0aW9uIHx8ICdib3R0b20nID09PSB0aGlzLnRhYkJhclBvc2l0aW9uXG4gICAgICAgICAgICA/IHRoaXMudGFic0JhclN3aXBlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGhcbiAgICAgICAgICAgIDogdGhpcy50YWJzQmFyU3dpcGUubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpKSB8fFxuICAgICAgKHRoaXMudGFiVGl0bGVTaXplIDw9IDAgJiYgdGhpcy5wYWdlIDwgdGhpcy50YWJUaXRsZXMubGVuZ3RoKVxuICAgICkge1xuICAgICAgaWYgKCd0b3AnID09PSB0aGlzLnRhYkJhclBvc2l0aW9uIHx8ICdib3R0b20nID09PSB0aGlzLnRhYkJhclBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuc2V0VGFiQmFyTmF2U3dpcGluZ1Bvc2l0aW9uKFxuICAgICAgICAgIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9zdGFydFBvc2l0aW9uLFxuICAgICAgICAgIHRoaXMudGFiVGl0bGVzLmZpcnN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgdGhpcy50YWJzQmFyU3dpcGUubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRhYnNCYXJTdHlsZSA9IHtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAnMG1zJyxcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgnICsgdGhpcy50YWJCYXJOYXZTd2lwaW5nUG9zaXRpb24gKyAncHgsIDBweCwgMHB4KScsXG4gICAgICAgICAgd2Via2l0VHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoJyArIHRoaXMudGFiQmFyTmF2U3dpcGluZ1Bvc2l0aW9uICsgJ3B4LCAwcHgsIDBweCknXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldFRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbihcbiAgICAgICAgICBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZIC0gdGhpcy5fc3RhcnRQb3NpdGlvbixcbiAgICAgICAgICB0aGlzLnRhYlRpdGxlcy5maXJzdC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgICAgICB0aGlzLnRhYnNCYXJTd2lwZS5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRhYnNCYXJTdHlsZSA9IHtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAnMG1zJyxcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgwLCAnICsgdGhpcy50YWJCYXJOYXZTd2lwaW5nUG9zaXRpb24gKyAncHgsIDBweCknLFxuICAgICAgICAgIHdlYmtpdFRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsICcgKyB0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbiArICdweCwgMHB4KSdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblRvdWNoRW5kKCkge1xuICAgIGlmIChcbiAgICAgICh0aGlzLnRhYlRpdGxlU2l6ZSA+IDAgJiZcbiAgICAgICAgdGhpcy50YWJUaXRsZVNpemUgKiB0aGlzLnRhYlRpdGxlcy5sZW5ndGggPlxuICAgICAgICAgICgndG9wJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvbiB8fCAnYm90dG9tJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvblxuICAgICAgICAgICAgPyB0aGlzLnRhYnNCYXJTd2lwZS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoXG4gICAgICAgICAgICA6IHRoaXMudGFic0JhclN3aXBlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KSkgfHxcbiAgICAgICh0aGlzLnRhYlRpdGxlU2l6ZSA8PSAwICYmIHRoaXMucGFnZSA8IHRoaXMudGFiVGl0bGVzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gPSB0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICBvbkNvbnRlbnRDaGFuZ2UoKSB7XG4gICAgdGhpcy5zZXRUYWJzU3R5bGUoKTtcbiAgICB0aGlzLnNldElua0JhclN0YXR1cyh0aGlzLnNlbGVjdGVkS2V5KTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnNldFRhYnNTdHlsZSgpO1xuICAgIHRoaXMuc2V0VGFiQmFyU3R5bGVDZW50ZXIoKTtcbiAgICB0aGlzLnNldElua0JhclN0YXR1cyh0aGlzLnNlbGVjdGVkS2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGFic1N0eWxlKCkge1xuICAgIGlmICh0aGlzLnRhYlRpdGxlcyAmJiB0aGlzLnRhYlRpdGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoJ3RvcCcgPT09IHRoaXMudGFiQmFyUG9zaXRpb24gfHwgJ2JvdHRvbScgPT09IHRoaXMudGFiQmFyUG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy50YWJUaXRsZXMuZm9yRWFjaCgodGFiVGl0bGU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGFiVGl0bGUubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICB0aGlzLnRhYlRpdGxlU2l6ZSA+IDAgPyB0aGlzLnRhYlRpdGxlU2l6ZSArICdweCcgOiB0aGlzLmdldFRhYlNpemUodGhpcy5wYWdlLCB0aGlzLnRhYlRpdGxlcy5sZW5ndGgpICsgJyUnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRhYlRpdGxlcy5mb3JFYWNoKCh0YWJUaXRsZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0YWJUaXRsZS5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICB0aGlzLnRhYlRpdGxlU2l6ZSA+IDAgPyB0aGlzLnRhYlRpdGxlU2l6ZSArICdweCcgOiB0aGlzLmdldFRhYlNpemUodGhpcy5wYWdlLCB0aGlzLnRhYlRpdGxlcy5sZW5ndGgpICsgJyUnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRUYWJCYXJTdHlsZUNlbnRlcigpIHtcbiAgICBpZiAoJ3RvcCcgPT09IHRoaXMudGFiQmFyUG9zaXRpb24gfHwgJ2JvdHRvbScgPT09IHRoaXMudGFiQmFyUG9zaXRpb24pIHtcbiAgICAgIHRoaXMuc2V0VGFiQmFyTmF2U3dpcGVkUG9zaXRpb24oXG4gICAgICAgIHRoaXMudGFiVGl0bGVTaXplID4gMFxuICAgICAgICAgID8gdGhpcy50YWJUaXRsZVNpemVcbiAgICAgICAgICA6IHRoaXMudGFic0JhclN3aXBlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLyBNYXRoLm1pbih0aGlzLnRhYlRpdGxlcy5sZW5ndGgsIHRoaXMucGFnZSksXG4gICAgICAgIHRoaXMudGFic0JhclN3aXBlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLnRhYnNCYXJTdHlsZSA9IHtcbiAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoJyArIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gKyAncHgsIDBweCwgMHB4KScsXG4gICAgICAgIHdlYmtpdFRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKCcgKyB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uICsgJywgMHB4LCAwcHgpJ1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRUYWJCYXJOYXZTd2lwZWRQb3NpdGlvbihcbiAgICAgICAgdGhpcy50YWJUaXRsZVNpemUgPiAwXG4gICAgICAgICAgPyB0aGlzLnRhYlRpdGxlU2l6ZVxuICAgICAgICAgIDogdGhpcy50YWJzQmFyU3dpcGUubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgLyBNYXRoLm1pbih0aGlzLnRhYlRpdGxlcy5sZW5ndGgsIHRoaXMucGFnZSksXG4gICAgICAgIHRoaXMudGFic0JhclN3aXBlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgICApO1xuICAgICAgdGhpcy50YWJzQmFyU3R5bGUgPSB7XG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsICcgKyB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uICsgJ3B4LCAwcHgpJyxcbiAgICAgICAgd2Via2l0VHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgJyArIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gKyAncHgsIDBweCknXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5rQmFyU3RhdHVzKGtleTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMudGFiVGl0bGVzICYmIHRoaXMudGFiVGl0bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICgndG9wJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvbiB8fCAnYm90dG9tJyA9PT0gdGhpcy50YWJCYXJQb3NpdGlvbikge1xuICAgICAgICB0aGlzLmlua0Jhck9mZlNldCA9IHRoaXMudGFiVGl0bGVzLnRvQXJyYXkoKVtrZXldLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcbiAgICAgICAgdGhpcy5pbmtCYXJMZW5ndGggPSB0aGlzLnRhYlRpdGxlcy50b0FycmF5KClba2V5XS5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoO1xuICAgICAgICB0aGlzLmlua0JhclN0eWxlID0ge1xuICAgICAgICAgIHdpZHRoOiB0aGlzLmlua0Jhckxlbmd0aCxcbiAgICAgICAgICBsZWZ0OlxuICAgICAgICAgICAgdGhpcy50YWJUaXRsZVNpemUgPiAwXG4gICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEtleSAqIHRoaXMudGFiVGl0bGVTaXplICsgJ3B4J1xuICAgICAgICAgICAgICA6ICh0aGlzLnNlbGVjdGVkS2V5ICogMTAwKSAvIE1hdGgubWluKHRoaXMudGFiVGl0bGVzLmxlbmd0aCwgdGhpcy5wYWdlKSArICclJ1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuaW5rQmFyU3R5bGUsIHRoaXMudGFiQmFyVW5kZXJsaW5lU3R5bGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbmtCYXJPZmZTZXQgPSB0aGlzLnRhYlRpdGxlcy50b0FycmF5KClba2V5XS5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgdGhpcy5pbmtCYXJMZW5ndGggPSB0aGlzLnRhYlRpdGxlcy50b0FycmF5KClba2V5XS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodDtcbiAgICAgICAgdGhpcy5pbmtCYXJTdHlsZSA9IHtcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuaW5rQmFyTGVuZ3RoLFxuICAgICAgICAgIHRvcDpcbiAgICAgICAgICAgIHRoaXMudGFiVGl0bGVTaXplID4gMFxuICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRLZXkgKiB0aGlzLnRhYlRpdGxlU2l6ZSArICdweCdcbiAgICAgICAgICAgICAgOiAodGhpcy5zZWxlY3RlZEtleSAqIDEwMCkgLyBNYXRoLm1pbih0aGlzLnRhYlRpdGxlcy5sZW5ndGgsIHRoaXMucGFnZSkgKyAnJSdcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmlua0JhclN0eWxlLCB0aGlzLnRhYkJhclVuZGVybGluZVN0eWxlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3JlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRUYWJCYXJOYXZTd2lwaW5nUG9zaXRpb24oc3dpcGluZ0Rpc3RhbmNlOiBudW1iZXIsIHN3aXBpbmdJdGVtTGVuZ3RoOiBudW1iZXIsIHZpZXdwb3J0TGVuZ3RoOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy50YWJCYXJOYXZTd2lwZWRQb3NpdGlvbiArIHN3aXBpbmdEaXN0YW5jZSA+IDApIHtcbiAgICAgIHRoaXMudGFiQmFyTmF2U3dpcGluZ1Bvc2l0aW9uID0gMDtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy50YWJCYXJOYXZTd2lwZWRQb3NpdGlvbiArIHN3aXBpbmdEaXN0YW5jZSA8XG4gICAgICB2aWV3cG9ydExlbmd0aCAtIHN3aXBpbmdJdGVtTGVuZ3RoICogdGhpcy50YWJUaXRsZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLnRhYkJhck5hdlN3aXBpbmdQb3NpdGlvbiA9IHZpZXdwb3J0TGVuZ3RoIC0gc3dpcGluZ0l0ZW1MZW5ndGggKiB0aGlzLnRhYlRpdGxlcy5sZW5ndGg7XG4gICAgICB0aGlzLnNob3dOZXh0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFiQmFyTmF2U3dpcGluZ1Bvc2l0aW9uID0gdGhpcy50YWJCYXJOYXZTd2lwZWRQb3NpdGlvbiArIHN3aXBpbmdEaXN0YW5jZTtcbiAgICAgIHRoaXMuc2hvd05leHQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWJCYXJOYXZTd2lwaW5nUG9zaXRpb24gPCAwKSB7XG4gICAgICB0aGlzLnNob3dQcmV2ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93UHJldiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VGFiQmFyTmF2U3dpcGVkUG9zaXRpb24oc3dpcGluZ0l0ZW1MZW5ndGg6IG51bWJlciwgdmlld3BvcnRMZW5ndGg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkS2V5ICogc3dpcGluZ0l0ZW1MZW5ndGggKyB0aGlzLnRhYkJhck5hdlN3aXBlZFBvc2l0aW9uIDw9IDApIHtcbiAgICAgIGlmICgwID09PSB0aGlzLnNlbGVjdGVkS2V5KSB7XG4gICAgICAgIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWJCYXJOYXZTd2lwZWRQb3NpdGlvbiA9ICgxIC0gdGhpcy5zZWxlY3RlZEtleSkgKiBzd2lwaW5nSXRlbUxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCh0aGlzLnNlbGVjdGVkS2V5ICsgMSkgKiBzd2lwaW5nSXRlbUxlbmd0aCA+PSB2aWV3cG9ydExlbmd0aCAtIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24pIHtcbiAgICAgIGlmICh0aGlzLnRhYlRpdGxlcy5sZW5ndGggLSAxID09PSB0aGlzLnNlbGVjdGVkS2V5KSB7XG4gICAgICAgIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gPSB2aWV3cG9ydExlbmd0aCAtICh0aGlzLnNlbGVjdGVkS2V5ICsgMSkgKiBzd2lwaW5nSXRlbUxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gPSB2aWV3cG9ydExlbmd0aCAtICh0aGlzLnNlbGVjdGVkS2V5ICsgMikgKiBzd2lwaW5nSXRlbUxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudGFiQmFyTmF2U3dpcGVkUG9zaXRpb24gPCAwKSB7XG4gICAgICB0aGlzLnNob3dQcmV2ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93UHJldiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWJCYXJOYXZTd2lwZWRQb3NpdGlvbiArIHN3aXBpbmdJdGVtTGVuZ3RoICogdGhpcy50YWJUaXRsZXMubGVuZ3RoIC0gdmlld3BvcnRMZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNob3dOZXh0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93TmV4dCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFiU2l6ZSA9IChwYWdlOiBudW1iZXIsIHRhYkxlbmd0aDogbnVtYmVyKSA9PiAxMDAgLyBNYXRoLm1pbihwYWdlLCB0YWJMZW5ndGgpO1xufVxuIl19