ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
226 lines • 23.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: notification-container.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __assign, __extends, __read, __spread } from "tslib";
/**
* @license
* Copyright Alibaba.com All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewEncapsulation } from '@angular/core';
import { NzConfigService } from 'ng-zorro-antd/core/config';
import { warnDeprecation } from 'ng-zorro-antd/core/logger';
import { toCssPixel } from 'ng-zorro-antd/core/util';
import { NzMNContainerComponent } from 'ng-zorro-antd/message';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
/** @type {?} */
var NZ_CONFIG_COMPONENT_NAME = 'notification';
/** @type {?} */
var NZ_NOTIFICATION_DEFAULT_CONFIG = {
nzTop: '24px',
nzBottom: '24px',
nzPlacement: 'topRight',
nzDuration: 4500,
nzMaxStack: 7,
nzPauseOnHover: true,
nzAnimate: true
};
var NzNotificationContainerComponent = /** @class */ (function (_super) {
__extends(NzNotificationContainerComponent, _super);
function NzNotificationContainerComponent(cdr, nzConfigService) {
var _this = _super.call(this, cdr, nzConfigService) || this;
_this.instances = [];
_this.topLeftInstances = [];
_this.topRightInstances = [];
_this.bottomLeftInstances = [];
_this.bottomRightInstances = [];
return _this;
}
/**
* @param {?} notification
* @return {?}
*/
NzNotificationContainerComponent.prototype.create = /**
* @param {?} notification
* @return {?}
*/
function (notification) {
/** @type {?} */
var noti = this.onCreate(notification);
/** @type {?} */
var key = noti.options.nzKey;
/** @type {?} */
var notificationWithSameKey = this.instances.find((/**
* @param {?} msg
* @return {?}
*/
function (msg) { return msg.options.nzKey === ((/** @type {?} */ (notification.options))).nzKey; }));
if (key && notificationWithSameKey) {
this.replaceNotification(notificationWithSameKey, noti);
}
else {
if (this.instances.length >= this.config.nzMaxStack) {
this.instances = this.instances.slice(1);
}
this.instances = __spread(this.instances, [noti]);
}
this.readyInstances();
return noti;
};
/**
* @protected
* @param {?} instance
* @return {?}
*/
NzNotificationContainerComponent.prototype.onCreate = /**
* @protected
* @param {?} instance
* @return {?}
*/
function (instance) {
instance.options = this.mergeOptions(instance.options);
instance.onClose = new Subject();
instance.onClick = new Subject();
return (/** @type {?} */ (instance));
};
/**
* @protected
* @return {?}
*/
NzNotificationContainerComponent.prototype.subscribeConfigChange = /**
* @protected
* @return {?}
*/
function () {
var _this = this;
this.nzConfigService
.getConfigChangeEventForComponent(NZ_CONFIG_COMPONENT_NAME)
.pipe(takeUntil(this.destroy$))
.subscribe((/**
* @return {?}
*/
function () { return _this.updateConfig(); }));
};
/**
* @protected
* @return {?}
*/
NzNotificationContainerComponent.prototype.updateConfig = /**
* @protected
* @return {?}
*/
function () {
this.config = __assign(__assign(__assign({}, NZ_NOTIFICATION_DEFAULT_CONFIG), this.config), this.nzConfigService.getConfigForComponent(NZ_CONFIG_COMPONENT_NAME));
this.top = toCssPixel((/** @type {?} */ (this.config.nzTop)));
this.bottom = toCssPixel((/** @type {?} */ (this.config.nzBottom)));
this.cdr.markForCheck();
};
/**
* @private
* @param {?} old
* @param {?} _new
* @return {?}
*/
NzNotificationContainerComponent.prototype.replaceNotification = /**
* @private
* @param {?} old
* @param {?} _new
* @return {?}
*/
function (old, _new) {
old.title = _new.title;
old.content = _new.content;
old.template = _new.template;
old.type = _new.type;
};
/**
* @protected
* @return {?}
*/
NzNotificationContainerComponent.prototype.readyInstances = /**
* @protected
* @return {?}
*/
function () {
this.topLeftInstances = this.instances.filter((/**
* @param {?} m
* @return {?}
*/
function (m) { return m.options.nzPlacement === 'topLeft'; }));
this.topRightInstances = this.instances.filter((/**
* @param {?} m
* @return {?}
*/
function (m) { return m.options.nzPlacement === 'topRight' || !m.options.nzPlacement; }));
this.bottomLeftInstances = this.instances.filter((/**
* @param {?} m
* @return {?}
*/
function (m) { return m.options.nzPlacement === 'bottomLeft'; }));
this.bottomRightInstances = this.instances.filter((/**
* @param {?} m
* @return {?}
*/
function (m) { return m.options.nzPlacement === 'bottomRight'; }));
this.cdr.detectChanges();
};
/**
* @protected
* @param {?=} options
* @return {?}
*/
NzNotificationContainerComponent.prototype.mergeOptions = /**
* @protected
* @param {?=} options
* @return {?}
*/
function (options) {
var nzPosition = (options !== null && options !== void 0 ? options : {}).nzPosition;
if (nzPosition) {
warnDeprecation('`nzPosition` of NzNotificationDataOptions is deprecated and would be removed in 10.0.0. Use `nzPlacement` instead.');
}
var _a = this.config, nzDuration = _a.nzDuration, nzAnimate = _a.nzAnimate, nzPauseOnHover = _a.nzPauseOnHover, nzPlacement = _a.nzPlacement;
return __assign({ nzDuration: nzDuration, nzAnimate: nzAnimate, nzPauseOnHover: nzPauseOnHover, nzPlacement: nzPlacement || nzPosition }, options);
};
NzNotificationContainerComponent.decorators = [
{ type: Component, args: [{
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None,
selector: 'nz-notification-container',
exportAs: 'nzNotificationContainer',
preserveWhitespaces: false,
template: "\n <div class=\"ant-notification ant-notification-topLeft\" [style.top]=\"top\" [style.left]=\"'0px'\">\n <nz-notification\n *ngFor=\"let instance of topLeftInstances\"\n [instance]=\"instance\"\n [placement]=\"config.nzPlacement\"\n (destroyed)=\"remove($event.id, $event.userAction)\"\n ></nz-notification>\n </div>\n <div class=\"ant-notification ant-notification-topRight\" [style.top]=\"top\" [style.right]=\"'0px'\">\n <nz-notification\n *ngFor=\"let instance of topRightInstances\"\n [instance]=\"instance\"\n [placement]=\"config.nzPlacement\"\n (destroyed)=\"remove($event.id, $event.userAction)\"\n ></nz-notification>\n </div>\n <div class=\"ant-notification ant-notification-bottomLeft\" [style.bottom]=\"bottom\" [style.left]=\"'0px'\">\n <nz-notification\n *ngFor=\"let instance of bottomLeftInstances\"\n [instance]=\"instance\"\n [placement]=\"config.nzPlacement\"\n (destroyed)=\"remove($event.id, $event.userAction)\"\n ></nz-notification>\n </div>\n <div class=\"ant-notification ant-notification-bottomRight\" [style.bottom]=\"bottom\" [style.right]=\"'0px'\">\n <nz-notification\n *ngFor=\"let instance of bottomRightInstances\"\n [instance]=\"instance\"\n [placement]=\"config.nzPlacement\"\n (destroyed)=\"remove($event.id, $event.userAction)\"\n ></nz-notification>\n </div>\n "
}] }
];
/** @nocollapse */
NzNotificationContainerComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef },
{ type: NzConfigService }
]; };
return NzNotificationContainerComponent;
}(NzMNContainerComponent));
export { NzNotificationContainerComponent };
if (false) {
/** @type {?} */
NzNotificationContainerComponent.prototype.bottom;
/** @type {?} */
NzNotificationContainerComponent.prototype.top;
/** @type {?} */
NzNotificationContainerComponent.prototype.config;
/** @type {?} */
NzNotificationContainerComponent.prototype.instances;
/** @type {?} */
NzNotificationContainerComponent.prototype.topLeftInstances;
/** @type {?} */
NzNotificationContainerComponent.prototype.topRightInstances;
/** @type {?} */
NzNotificationContainerComponent.prototype.bottomLeftInstances;
/** @type {?} */
NzNotificationContainerComponent.prototype.bottomRightInstances;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkL25vdGlmaWNhdGlvbi8iLCJzb3VyY2VzIjpbIm5vdGlmaWNhdGlvbi1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFRQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBc0IsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7SUFJckMsd0JBQXdCLEdBQUcsY0FBYzs7SUFFekMsOEJBQThCLEdBQWlDO0lBQ25FLEtBQUssRUFBRSxNQUFNO0lBQ2IsUUFBUSxFQUFFLE1BQU07SUFDaEIsV0FBVyxFQUFFLFVBQVU7SUFDdkIsVUFBVSxFQUFFLElBQUk7SUFDaEIsVUFBVSxFQUFFLENBQUM7SUFDYixjQUFjLEVBQUUsSUFBSTtJQUNwQixTQUFTLEVBQUUsSUFBSTtDQUNoQjtBQUVEO0lBeUNzRCxvREFBc0I7SUFVMUUsMENBQVksR0FBc0IsRUFBRSxlQUFnQztRQUFwRSxZQUNFLGtCQUFNLEdBQUcsRUFBRSxlQUFlLENBQUMsU0FDNUI7UUFSRCxlQUFTLEdBQXdDLEVBQUUsQ0FBQztRQUNwRCxzQkFBZ0IsR0FBd0MsRUFBRSxDQUFDO1FBQzNELHVCQUFpQixHQUF3QyxFQUFFLENBQUM7UUFDNUQseUJBQW1CLEdBQXdDLEVBQUUsQ0FBQztRQUM5RCwwQkFBb0IsR0FBd0MsRUFBRSxDQUFDOztJQUkvRCxDQUFDOzs7OztJQUVELGlEQUFNOzs7O0lBQU4sVUFBTyxZQUFnQzs7WUFDL0IsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDOztZQUNsQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLOztZQUN4Qix1QkFBdUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7Ozs7UUFDakQsVUFBQSxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLG1CQUFBLFlBQVksQ0FBQyxPQUFPLEVBQXVDLENBQUMsQ0FBQyxLQUFLLEVBQXpGLENBQXlGLEVBQ2pHO1FBQ0QsSUFBSSxHQUFHLElBQUksdUJBQXVCLEVBQUU7WUFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3pEO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsWUFBTyxJQUFJLENBQUMsU0FBUyxHQUFFLElBQUksRUFBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7O0lBRVMsbURBQVE7Ozs7O0lBQWxCLFVBQW1CLFFBQTRCO1FBQzdDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQzFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUM3QyxPQUFPLG1CQUFBLFFBQVEsRUFBZ0MsQ0FBQztJQUNsRCxDQUFDOzs7OztJQUVTLGdFQUFxQjs7OztJQUEvQjtRQUFBLGlCQUtDO1FBSkMsSUFBSSxDQUFDLGVBQWU7YUFDakIsZ0NBQWdDLENBQUMsd0JBQXdCLENBQUM7YUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUzs7O1FBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxZQUFZLEVBQUUsRUFBbkIsQ0FBbUIsRUFBQyxDQUFDO0lBQzFDLENBQUM7Ozs7O0lBRVMsdURBQVk7Ozs7SUFBdEI7UUFDRSxJQUFJLENBQUMsTUFBTSxrQ0FDTiw4QkFBOEIsR0FDOUIsSUFBSSxDQUFDLE1BQU0sR0FDWCxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLENBQ3hFLENBQUM7UUFFRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxtQkFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsbUJBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7Ozs7OztJQUVPLDhEQUFtQjs7Ozs7O0lBQTNCLFVBQTRCLEdBQXVCLEVBQUUsSUFBd0I7UUFDM0UsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzQixHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7Ozs7O0lBRVMseURBQWM7Ozs7SUFBeEI7UUFDRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQW5DLENBQW1DLEVBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBOUQsQ0FBOEQsRUFBQyxDQUFDO1FBQ3BILElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLFlBQVksRUFBdEMsQ0FBc0MsRUFBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLGFBQWEsRUFBdkMsQ0FBdUMsRUFBQyxDQUFDO1FBRWhHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7Ozs7O0lBRVMsdURBQVk7Ozs7O0lBQXRCLFVBQXVCLE9BQW1DO1FBQ2hELElBQUEsK0VBQVU7UUFFbEIsSUFBSSxVQUFVLEVBQUU7WUFDZCxlQUFlLENBQUMsb0hBQW9ILENBQUMsQ0FBQztTQUN2STtRQUVLLElBQUEsZ0JBQW9FLEVBQWxFLDBCQUFVLEVBQUUsd0JBQVMsRUFBRSxrQ0FBYyxFQUFFLDRCQUEyQjtRQUMxRSxrQkFBUyxVQUFVLFlBQUEsRUFBRSxTQUFTLFdBQUEsRUFBRSxjQUFjLGdCQUFBLEVBQUUsV0FBVyxFQUFFLFdBQVcsSUFBSSxVQUFVLElBQUssT0FBTyxFQUFHO0lBQ3ZHLENBQUM7O2dCQS9IRixTQUFTLFNBQUM7b0JBQ1QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxtQkFBbUIsRUFBRSxLQUFLO29CQUMxQixRQUFRLEVBQUUsdzhDQWlDVDtpQkFDRjs7OztnQkEvRGlDLGlCQUFpQjtnQkFDdEIsZUFBZTs7SUFzSjVDLHVDQUFDO0NBQUEsQUFoSUQsQ0F5Q3NELHNCQUFzQixHQXVGM0U7U0F2RlksZ0NBQWdDOzs7SUFDM0Msa0RBQXNCOztJQUN0QiwrQ0FBbUI7O0lBQ25CLGtEQUFxQzs7SUFDckMscURBQW9EOztJQUNwRCw0REFBMkQ7O0lBQzNELDZEQUE0RDs7SUFDNUQsK0RBQThEOztJQUM5RCxnRUFBK0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgQWxpYmFiYS5jb20gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25Db25maWcsIE56Q29uZmlnU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgd2FybkRlcHJlY2F0aW9uIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2xvZ2dlcic7XG5pbXBvcnQgeyB0b0Nzc1BpeGVsIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3V0aWwnO1xuXG5pbXBvcnQgeyBOek1OQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnbmctem9ycm8tYW50ZC9tZXNzYWdlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnpOb3RpZmljYXRpb25EYXRhLCBOek5vdGlmaWNhdGlvbkRhdGFPcHRpb25zIH0gZnJvbSAnLi90eXBpbmdzJztcblxuY29uc3QgTlpfQ09ORklHX0NPTVBPTkVOVF9OQU1FID0gJ25vdGlmaWNhdGlvbic7XG5cbmNvbnN0IE5aX05PVElGSUNBVElPTl9ERUZBVUxUX0NPTkZJRzogUmVxdWlyZWQ8Tm90aWZpY2F0aW9uQ29uZmlnPiA9IHtcbiAgbnpUb3A6ICcyNHB4JyxcbiAgbnpCb3R0b206ICcyNHB4JyxcbiAgbnpQbGFjZW1lbnQ6ICd0b3BSaWdodCcsXG4gIG56RHVyYXRpb246IDQ1MDAsXG4gIG56TWF4U3RhY2s6IDcsXG4gIG56UGF1c2VPbkhvdmVyOiB0cnVlLFxuICBuekFuaW1hdGU6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc2VsZWN0b3I6ICduei1ub3RpZmljYXRpb24tY29udGFpbmVyJyxcbiAgZXhwb3J0QXM6ICduek5vdGlmaWNhdGlvbkNvbnRhaW5lcicsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJhbnQtbm90aWZpY2F0aW9uIGFudC1ub3RpZmljYXRpb24tdG9wTGVmdFwiIFtzdHlsZS50b3BdPVwidG9wXCIgW3N0eWxlLmxlZnRdPVwiJzBweCdcIj5cbiAgICAgIDxuei1ub3RpZmljYXRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGluc3RhbmNlIG9mIHRvcExlZnRJbnN0YW5jZXNcIlxuICAgICAgICBbaW5zdGFuY2VdPVwiaW5zdGFuY2VcIlxuICAgICAgICBbcGxhY2VtZW50XT1cImNvbmZpZy5uelBsYWNlbWVudFwiXG4gICAgICAgIChkZXN0cm95ZWQpPVwicmVtb3ZlKCRldmVudC5pZCwgJGV2ZW50LnVzZXJBY3Rpb24pXCJcbiAgICAgID48L256LW5vdGlmaWNhdGlvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYW50LW5vdGlmaWNhdGlvbiBhbnQtbm90aWZpY2F0aW9uLXRvcFJpZ2h0XCIgW3N0eWxlLnRvcF09XCJ0b3BcIiBbc3R5bGUucmlnaHRdPVwiJzBweCdcIj5cbiAgICAgIDxuei1ub3RpZmljYXRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGluc3RhbmNlIG9mIHRvcFJpZ2h0SW5zdGFuY2VzXCJcbiAgICAgICAgW2luc3RhbmNlXT1cImluc3RhbmNlXCJcbiAgICAgICAgW3BsYWNlbWVudF09XCJjb25maWcubnpQbGFjZW1lbnRcIlxuICAgICAgICAoZGVzdHJveWVkKT1cInJlbW92ZSgkZXZlbnQuaWQsICRldmVudC51c2VyQWN0aW9uKVwiXG4gICAgICA+PC9uei1ub3RpZmljYXRpb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImFudC1ub3RpZmljYXRpb24gYW50LW5vdGlmaWNhdGlvbi1ib3R0b21MZWZ0XCIgW3N0eWxlLmJvdHRvbV09XCJib3R0b21cIiBbc3R5bGUubGVmdF09XCInMHB4J1wiPlxuICAgICAgPG56LW5vdGlmaWNhdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgaW5zdGFuY2Ugb2YgYm90dG9tTGVmdEluc3RhbmNlc1wiXG4gICAgICAgIFtpbnN0YW5jZV09XCJpbnN0YW5jZVwiXG4gICAgICAgIFtwbGFjZW1lbnRdPVwiY29uZmlnLm56UGxhY2VtZW50XCJcbiAgICAgICAgKGRlc3Ryb3llZCk9XCJyZW1vdmUoJGV2ZW50LmlkLCAkZXZlbnQudXNlckFjdGlvbilcIlxuICAgICAgPjwvbnotbm90aWZpY2F0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJhbnQtbm90aWZpY2F0aW9uIGFudC1ub3RpZmljYXRpb24tYm90dG9tUmlnaHRcIiBbc3R5bGUuYm90dG9tXT1cImJvdHRvbVwiIFtzdHlsZS5yaWdodF09XCInMHB4J1wiPlxuICAgICAgPG56LW5vdGlmaWNhdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgaW5zdGFuY2Ugb2YgYm90dG9tUmlnaHRJbnN0YW5jZXNcIlxuICAgICAgICBbaW5zdGFuY2VdPVwiaW5zdGFuY2VcIlxuICAgICAgICBbcGxhY2VtZW50XT1cImNvbmZpZy5uelBsYWNlbWVudFwiXG4gICAgICAgIChkZXN0cm95ZWQpPVwicmVtb3ZlKCRldmVudC5pZCwgJGV2ZW50LnVzZXJBY3Rpb24pXCJcbiAgICAgID48L256LW5vdGlmaWNhdGlvbj5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBOek5vdGlmaWNhdGlvbkNvbnRhaW5lckNvbXBvbmVudCBleHRlbmRzIE56TU5Db250YWluZXJDb21wb25lbnQge1xuICBib3R0b206IHN0cmluZyB8IG51bGw7XG4gIHRvcDogc3RyaW5nIHwgbnVsbDtcbiAgY29uZmlnOiBSZXF1aXJlZDxOb3RpZmljYXRpb25Db25maWc+O1xuICBpbnN0YW5jZXM6IEFycmF5PFJlcXVpcmVkPE56Tm90aWZpY2F0aW9uRGF0YT4+ID0gW107XG4gIHRvcExlZnRJbnN0YW5jZXM6IEFycmF5PFJlcXVpcmVkPE56Tm90aWZpY2F0aW9uRGF0YT4+ID0gW107XG4gIHRvcFJpZ2h0SW5zdGFuY2VzOiBBcnJheTxSZXF1aXJlZDxOek5vdGlmaWNhdGlvbkRhdGE+PiA9IFtdO1xuICBib3R0b21MZWZ0SW5zdGFuY2VzOiBBcnJheTxSZXF1aXJlZDxOek5vdGlmaWNhdGlvbkRhdGE+PiA9IFtdO1xuICBib3R0b21SaWdodEluc3RhbmNlczogQXJyYXk8UmVxdWlyZWQ8TnpOb3RpZmljYXRpb25EYXRhPj4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihjZHI6IENoYW5nZURldGVjdG9yUmVmLCBuekNvbmZpZ1NlcnZpY2U6IE56Q29uZmlnU2VydmljZSkge1xuICAgIHN1cGVyKGNkciwgbnpDb25maWdTZXJ2aWNlKTtcbiAgfVxuXG4gIGNyZWF0ZShub3RpZmljYXRpb246IE56Tm90aWZpY2F0aW9uRGF0YSk6IFJlcXVpcmVkPE56Tm90aWZpY2F0aW9uRGF0YT4ge1xuICAgIGNvbnN0IG5vdGkgPSB0aGlzLm9uQ3JlYXRlKG5vdGlmaWNhdGlvbik7XG4gICAgY29uc3Qga2V5ID0gbm90aS5vcHRpb25zLm56S2V5O1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbldpdGhTYW1lS2V5ID0gdGhpcy5pbnN0YW5jZXMuZmluZChcbiAgICAgIG1zZyA9PiBtc2cub3B0aW9ucy5uektleSA9PT0gKG5vdGlmaWNhdGlvbi5vcHRpb25zIGFzIFJlcXVpcmVkPE56Tm90aWZpY2F0aW9uRGF0YU9wdGlvbnM+KS5uektleVxuICAgICk7XG4gICAgaWYgKGtleSAmJiBub3RpZmljYXRpb25XaXRoU2FtZUtleSkge1xuICAgICAgdGhpcy5yZXBsYWNlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbldpdGhTYW1lS2V5LCBub3RpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaW5zdGFuY2VzLmxlbmd0aCA+PSB0aGlzLmNvbmZpZy5uek1heFN0YWNrKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VzID0gdGhpcy5pbnN0YW5jZXMuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICB0aGlzLmluc3RhbmNlcyA9IFsuLi50aGlzLmluc3RhbmNlcywgbm90aV07XG4gICAgfVxuXG4gICAgdGhpcy5yZWFkeUluc3RhbmNlcygpO1xuXG4gICAgcmV0dXJuIG5vdGk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25DcmVhdGUoaW5zdGFuY2U6IE56Tm90aWZpY2F0aW9uRGF0YSk6IFJlcXVpcmVkPE56Tm90aWZpY2F0aW9uRGF0YT4ge1xuICAgIGluc3RhbmNlLm9wdGlvbnMgPSB0aGlzLm1lcmdlT3B0aW9ucyhpbnN0YW5jZS5vcHRpb25zKTtcbiAgICBpbnN0YW5jZS5vbkNsb3NlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBpbnN0YW5jZS5vbkNsaWNrID0gbmV3IFN1YmplY3Q8TW91c2VFdmVudD4oKTtcbiAgICByZXR1cm4gaW5zdGFuY2UgYXMgUmVxdWlyZWQ8TnpOb3RpZmljYXRpb25EYXRhPjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdWJzY3JpYmVDb25maWdDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5uekNvbmZpZ1NlcnZpY2VcbiAgICAgIC5nZXRDb25maWdDaGFuZ2VFdmVudEZvckNvbXBvbmVudChOWl9DT05GSUdfQ09NUE9ORU5UX05BTUUpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29uZmlnKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLk5aX05PVElGSUNBVElPTl9ERUZBVUxUX0NPTkZJRyxcbiAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgLi4udGhpcy5uekNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnRm9yQ29tcG9uZW50KE5aX0NPTkZJR19DT01QT05FTlRfTkFNRSlcbiAgICB9O1xuXG4gICAgdGhpcy50b3AgPSB0b0Nzc1BpeGVsKHRoaXMuY29uZmlnLm56VG9wISk7XG4gICAgdGhpcy5ib3R0b20gPSB0b0Nzc1BpeGVsKHRoaXMuY29uZmlnLm56Qm90dG9tISk7XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZU5vdGlmaWNhdGlvbihvbGQ6IE56Tm90aWZpY2F0aW9uRGF0YSwgX25ldzogTnpOb3RpZmljYXRpb25EYXRhKTogdm9pZCB7XG4gICAgb2xkLnRpdGxlID0gX25ldy50aXRsZTtcbiAgICBvbGQuY29udGVudCA9IF9uZXcuY29udGVudDtcbiAgICBvbGQudGVtcGxhdGUgPSBfbmV3LnRlbXBsYXRlO1xuICAgIG9sZC50eXBlID0gX25ldy50eXBlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWR5SW5zdGFuY2VzKCk6IHZvaWQge1xuICAgIHRoaXMudG9wTGVmdEluc3RhbmNlcyA9IHRoaXMuaW5zdGFuY2VzLmZpbHRlcihtID0+IG0ub3B0aW9ucy5uelBsYWNlbWVudCA9PT0gJ3RvcExlZnQnKTtcbiAgICB0aGlzLnRvcFJpZ2h0SW5zdGFuY2VzID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKG0gPT4gbS5vcHRpb25zLm56UGxhY2VtZW50ID09PSAndG9wUmlnaHQnIHx8ICFtLm9wdGlvbnMubnpQbGFjZW1lbnQpO1xuICAgIHRoaXMuYm90dG9tTGVmdEluc3RhbmNlcyA9IHRoaXMuaW5zdGFuY2VzLmZpbHRlcihtID0+IG0ub3B0aW9ucy5uelBsYWNlbWVudCA9PT0gJ2JvdHRvbUxlZnQnKTtcbiAgICB0aGlzLmJvdHRvbVJpZ2h0SW5zdGFuY2VzID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKG0gPT4gbS5vcHRpb25zLm56UGxhY2VtZW50ID09PSAnYm90dG9tUmlnaHQnKTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtZXJnZU9wdGlvbnMob3B0aW9ucz86IE56Tm90aWZpY2F0aW9uRGF0YU9wdGlvbnMpOiBOek5vdGlmaWNhdGlvbkRhdGFPcHRpb25zIHtcbiAgICBjb25zdCB7IG56UG9zaXRpb24gfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBpZiAobnpQb3NpdGlvbikge1xuICAgICAgd2FybkRlcHJlY2F0aW9uKCdgbnpQb3NpdGlvbmAgb2YgTnpOb3RpZmljYXRpb25EYXRhT3B0aW9ucyBpcyBkZXByZWNhdGVkIGFuZCB3b3VsZCBiZSByZW1vdmVkIGluIDEwLjAuMC4gVXNlIGBuelBsYWNlbWVudGAgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG56RHVyYXRpb24sIG56QW5pbWF0ZSwgbnpQYXVzZU9uSG92ZXIsIG56UGxhY2VtZW50IH0gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4geyBuekR1cmF0aW9uLCBuekFuaW1hdGUsIG56UGF1c2VPbkhvdmVyLCBuelBsYWNlbWVudDogbnpQbGFjZW1lbnQgfHwgbnpQb3NpdGlvbiwgLi4ub3B0aW9ucyB9O1xuICB9XG59XG4iXX0=