UNPKG

dbweb-common

Version:

用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上

383 lines 31.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { moveItemInArray } from '@angular/cdk/drag-drop'; import { Injectable } from '@angular/core'; import { CurrentService } from 'dbweb-core'; import { of, throwError } from 'rxjs'; import * as uuid from 'uuid'; import { EleViewBackFaceService } from '../../services/eleview/eleview-backface'; import { Category } from '../../services/eleview/types/category'; import { ownerElement } from '../../services/eleview/types/model'; import { map } from 'rxjs/operators'; /** * @return {?} */ function newID() { /** @type {?} */ const buf = uuid.v1(null, []); /** @type {?} */ const TYPED_ARRAY = new Uint8Array(buf); /** @type {?} */ const STRING_CHAR = TYPED_ARRAY.reduce((/** * @param {?} data * @param {?} byte * @return {?} */ (data, byte) => { return data + String.fromCharCode(byte); }), ''); /** @type {?} */ const base64String = btoa(STRING_CHAR); return base64String; } export class LabelMockBackfaceService { /** * @param {?} backface * @param {?} curr */ constructor(backface, curr) { this.backface = backface; this.curr = curr; } /** * @param {?} param * @return {?} */ addCategory(param) { if (!param.Name) { return throwError('名称为空'); } if (this.recordViewData.labelCategories.find((/** * @param {?} v * @return {?} */ v => v.Name === param.Name))) { return throwError('名称重复'); } /** @type {?} */ const newCate = (/** @type {?} */ ({ ID: newID(), EleName: param.EleName, OwnerBy: param.OwnerBy, Owner: ownerElement, Name: param.Name })); if (param.BeforeAtID) { this.recordViewData.labelCategories.splice(this.recordViewData.labelCategories.findIndex((/** * @param {?} v * @return {?} */ v => v.ID === param.BeforeAtID)), 0, newCate); } else { this.recordViewData.labelCategories.push(newCate); } this.recordViewData.labelCategories.forEach((/** * @param {?} v * @param {?} i * @return {?} */ (v, i) => (v.Position = i + 1))); /** @type {?} */ const rev = new Category(); rev.ID = newCate.ID; rev.Name = newCate.Name; rev.Owner = newCate.Owner; rev.OwnerBy = newCate.OwnerBy; rev.Position = newCate.Position; return of(rev); } /** * @param {?} id * @return {?} */ removeCategory(id) { this.recordViewData.labelCategories .splice(this.recordViewData.labelCategories.findIndex((/** * @param {?} v * @return {?} */ v => v.ID === id)), 1) .forEach((/** * @param {?} v * @param {?} i * @return {?} */ (v, i) => (v.Position = i + 1))); return of(true); } /** * @param {?} param * @return {?} */ setCategoryPosition(param) { moveItemInArray(this.recordViewData.labelCategories, this.recordViewData.labelCategories.findIndex((/** * @param {?} v * @return {?} */ v => v.ID === param.ID)), param.Position - 1); this.recordViewData.labelCategories.forEach((/** * @param {?} v * @param {?} i * @return {?} */ (v, i) => (v.Position = i + 1))); return of(this.recordViewData.labelCategories.map((/** * @param {?} v * @return {?} */ v => ({ ID: v.ID, Position: v.Position })))); } /** * @param {?} param * @return {?} */ updateCategory(param) { /** @type {?} */ const c = this.recordViewData.labelCategories.find((/** * @param {?} v * @return {?} */ v => v.ID === param.ID)); c.Name = param.Name; return of(true); } /** * @param {?} param * @return {?} */ fetchCategories(param) { // 新增状态下,不能去取数据,因为有可能会取到已存在的记录数据,造成泄密 if (this.isAdd) { return of([]); } return this.backface .fetchFullCategories({ EleName: param.EleName, OwnerBy: param.OwnerBy, Owner: param.Owner }) .pipe(map((/** * @param {?} cates * @return {?} */ cates => { this.recordViewData.labelCategories = cates; return this.recordViewData.labelCategories.map((/** * @param {?} v * @return {?} */ v => { /** @type {?} */ let lbls; if (v.Labels) { lbls = v.Labels.map((/** * @param {?} lbl * @return {?} */ lbl => ({ ID: lbl.ID, Name: lbl.Name }))); } return Category.fromInterface({ ID: v.ID, Name: v.Name, Owner: v.Owner, OwnerBy: v.OwnerBy, Position: v.Position, Labels: lbls }); })); }))); } // 获取菜单项所有标签的日志 /** * @param {?} param * @return {?} */ fetchCategoryLabelHis(param) { if (this.isAdd) { return of([]); } return this.backface.fetchCategoryLabelHis(param); } // 获取标签的日志列表 /** * @param {?} param * @return {?} */ fetchLabelHisList(param) { if (this.isAdd) { return of([]); } return this.backface.fetchLabelHisList(param); } // 根据时间获取label的内容 /** * @param {?} param * @return {?} */ fetchLabelHis(param) { return this.backface.fetchLabelHis(param); } /** * @param {?} param * @return {?} */ addLabel(param) { /** @type {?} */ const c = this.recordViewData.labelCategories.find((/** * @param {?} v * @return {?} */ v => v.ID === param.CategoryID)); c.Labels = c.Labels || []; if (c.Labels.find((/** * @param {?} v * @return {?} */ v => v.Name === param.Name))) { return throwError('重复的名称'); } /** @type {?} */ const lbl = (/** @type {?} */ ({ CategoryID: param.CategoryID, ID: newID(), Name: param.Name, LastWriteTime: new Date(), LastWriteUser: this.curr.data.UserName, Conts: param.Conts, PlainText: param.PlainText })); c.Labels.push(lbl); c.Labels.forEach((/** * @param {?} v * @param {?} i * @return {?} */ (v, i) => (v.Position = i + 1))); return of(lbl); } /** * @param {?} param * @return {?} */ removeLabel(param) { /** @type {?} */ const lbls = this.recordViewData.labelCategories.find((/** * @param {?} v * @return {?} */ v => v.ID === param.CategoryID)).Labels; lbls.splice(lbls.findIndex((/** * @param {?} v * @return {?} */ v => v.ID === param.ID)), 1); return of(true); } /** * @param {?} param * @return {?} */ nodeToString(param) { return this.backface.nodeToString(param); } /** * @param {?} param * @return {?} */ stringToNode(param) { return this.backface.stringToNode(param); } /** * @param {?} param * @return {?} */ setLabelPosition(param) { /** @type {?} */ const lbls = this.recordViewData.labelCategories.find((/** * @param {?} v * @return {?} */ v => v.ID === param.CategoryID)).Labels; moveItemInArray(lbls, lbls.findIndex((/** * @param {?} v * @return {?} */ v => v.ID === param.ID)), param.Position - 1); lbls.forEach((/** * @param {?} v * @param {?} i * @return {?} */ (v, i) => (v.Position = i + 1))); return of(lbls.map((/** * @param {?} v * @return {?} */ v => ({ ID: v.ID, Position: v.Position })))); } /** * @param {?} param * @return {?} */ updateLabel(param) { /** @type {?} */ const lbl = this.recordViewData.labelCategories .find((/** * @param {?} v * @return {?} */ v => v.ID === param.CategoryID)) .Labels.find((/** * @param {?} v * @return {?} */ v => v.ID === param.ID)); lbl.Name = param.Name; lbl.Conts = param.Conts; lbl.PlainText = param.PlainText; lbl.LastWriteTime = new Date(); return of(lbl); } /** * @param {?} param * @return {?} */ fetchLabel(param) { return of(this.recordViewData.labelCategories.find((/** * @param {?} v * @return {?} */ v => v.ID === param.CategoryID)).Labels.find((/** * @param {?} v * @return {?} */ v => v.ID === param.ID))); } } LabelMockBackfaceService.decorators = [ { type: Injectable } ]; /** @nocollapse */ LabelMockBackfaceService.ctorParameters = () => [ { type: EleViewBackFaceService }, { type: CurrentService } ]; if (false) { /** @type {?} */ LabelMockBackfaceService.prototype.isAdd; /** @type {?} */ LabelMockBackfaceService.prototype.recordViewData; /** * @type {?} * @private */ LabelMockBackfaceService.prototype.backface; /** * @type {?} * @private */ LabelMockBackfaceService.prototype.curr; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbW9jay1iYWNrZmFjZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2VsZW1lbnQvc2VydmljZS9sYWJlbC1tb2NrLWJhY2tmYWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQWUsTUFBTSxZQUFZLENBQUM7QUFDekQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUdOLHNCQUFzQixFQVV0QixNQUFNLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBUU4sWUFBWSxFQUNaLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBSXJDLFNBQVMsS0FBSzs7VUFDUCxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDOztVQUN2QixXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDOztVQUNqQyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU07Ozs7O0lBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDckQsT0FBTyxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDLEdBQUUsRUFBRSxDQUFDOztVQUNBLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3RDLE9BQU8sWUFBWSxDQUFDO0FBQ3JCLENB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LENBQUMsTUFBTSxDQUFDLElBQUk7Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBQyxDQUM1RyxDQUFDO0lBQ0gsQ0FBQzs7O1lBcEtELFVBQVU7Ozs7WUFuQ1Ysc0JBQXNCO1lBTmQsY0FBYzs7OztJQTJDdEIseUNBQWU7O0lBQ2Ysa0RBQXNDOzs7OztJQUMxQiw0Q0FBd0M7Ozs7O0lBQUUsd0NBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ3VycmVudFNlcnZpY2UsIEJpbGxPcGVyYXRlIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7XHJcblx0QWRkQ2F0ZWdvcnlQYXJhbSxcclxuXHRBZGRMYWJlbFBhcmFtLFxyXG5cdEVsZVZpZXdCYWNrRmFjZVNlcnZpY2UsXHJcblx0RmV0Y2hMYWJlbFJlc3VsdCxcclxuXHRNb2RlbEVsZW1lbnRDYXRlZ29yeSxcclxuXHRNb2RlbEVsZW1lbnRMYWJlbCxcclxuXHRTZXRDYXRlZ29yeVBvc2l0aW9uUGFyYW0sXHJcblx0U2V0Q2F0ZWdvcnlQb3NpdGlvblJlc3VsdCxcclxuXHRTZXRMYWJlbFBvc2l0aW9uUGFyYW0sXHJcblx0U2V0TGFiZWxQb3NpdGlvblJlc3VsdCxcclxuXHRVcGRhdGVDYXRlZ29yeVBhcmFtLFxyXG5cdFVwZGF0ZUxhYmVsUGFyYW1cclxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGV2aWV3L2VsZXZpZXctYmFja2ZhY2UnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvY2F0ZWdvcnknO1xyXG5pbXBvcnQge1xyXG5cdElFbGVtZW50SGlzLFxyXG5cdElMYWJlbCxcclxuXHRJTGFiZWxIaXNJdGVtLFxyXG5cdElMYWJlbEhpc0tleSxcclxuXHRJTGFiZWxLZXksXHJcblx0SU5vZGUsXHJcblx0T3duZXJCeUVudW0sXHJcblx0b3duZXJFbGVtZW50XHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9tb2RlbCc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRWxlbWVudERhdGFSZWNvcmRWaWV3IH0gZnJvbSAnLi9lbGVtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYWNrRmFjZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbGFiZWwtbWFuYWdlci9zZXJ2aWNlL2JhY2tmYWNlJztcclxuXHJcbmZ1bmN0aW9uIG5ld0lEKCkge1xyXG5cdGNvbnN0IGJ1ZiA9IHV1aWQudjEobnVsbCwgW10pO1xyXG5cdGNvbnN0IFRZUEVEX0FSUkFZID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcclxuXHRjb25zdCBTVFJJTkdfQ0hBUiA9IFRZUEVEX0FSUkFZLnJlZHVjZSgoZGF0YSwgYnl0ZSkgPT4ge1xyXG5cdFx0cmV0dXJuIGRhdGEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGUpO1xyXG5cdH0sICcnKTtcclxuXHRjb25zdCBiYXNlNjRTdHJpbmcgPSBidG9hKFNUUklOR19DSEFSKTtcclxuXHRyZXR1cm4gYmFzZTY0U3RyaW5nO1xyXG59XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIExhYmVsTW9ja0JhY2tmYWNlU2VydmljZSBpbXBsZW1lbnRzIEJhY2tGYWNlIHtcclxuXHRpc0FkZDogYm9vbGVhbjtcclxuXHRyZWNvcmRWaWV3RGF0YTogRWxlbWVudERhdGFSZWNvcmRWaWV3O1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYmFja2ZhY2U6IEVsZVZpZXdCYWNrRmFjZVNlcnZpY2UsIHByaXZhdGUgY3VycjogQ3VycmVudFNlcnZpY2UpIHt9XHJcblx0YWRkQ2F0ZWdvcnkocGFyYW06IEFkZENhdGVnb3J5UGFyYW0pOiBPYnNlcnZhYmxlPENhdGVnb3J5PiB7XHJcblx0XHRpZiAoIXBhcmFtLk5hbWUpIHtcclxuXHRcdFx0cmV0dXJuIHRocm93RXJyb3IoJ+WQjeensOS4uuepuicpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2Lk5hbWUgPT09IHBhcmFtLk5hbWUpKSB7XHJcblx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCflkI3np7Dph43lpI0nKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IG5ld0NhdGUgPSB7XHJcblx0XHRcdElEOiBuZXdJRCgpLFxyXG5cdFx0XHRFbGVOYW1lOiBwYXJhbS5FbGVOYW1lLFxyXG5cdFx0XHRPd25lckJ5OiBwYXJhbS5Pd25lckJ5LFxyXG5cdFx0XHRPd25lcjogb3duZXJFbGVtZW50LFxyXG5cdFx0XHROYW1lOiBwYXJhbS5OYW1lXHJcblx0XHR9IGFzIE1vZGVsRWxlbWVudENhdGVnb3J5O1xyXG5cdFx0aWYgKHBhcmFtLkJlZm9yZUF0SUQpIHtcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMuc3BsaWNlKFxyXG5cdFx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IHBhcmFtLkJlZm9yZUF0SUQpLFxyXG5cdFx0XHRcdDAsXHJcblx0XHRcdFx0bmV3Q2F0ZVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMucHVzaChuZXdDYXRlKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZvckVhY2goKHYsIGkpID0+ICh2LlBvc2l0aW9uID0gaSArIDEpKTtcclxuXHRcdGNvbnN0IHJldiA9IG5ldyBDYXRlZ29yeSgpO1xyXG5cdFx0cmV2LklEID0gbmV3Q2F0ZS5JRDtcclxuXHRcdHJldi5OYW1lID0gbmV3Q2F0ZS5OYW1lO1xyXG5cdFx0cmV2Lk93bmVyID0gbmV3Q2F0ZS5Pd25lcjtcclxuXHRcdHJldi5Pd25lckJ5ID0gbmV3Q2F0ZS5Pd25lckJ5O1xyXG5cdFx0cmV2LlBvc2l0aW9uID0gbmV3Q2F0ZS5Qb3NpdGlvbjtcclxuXHRcdHJldHVybiBvZihyZXYpO1xyXG5cdH1cclxuXHRyZW1vdmVDYXRlZ29yeShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcblx0XHR0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllc1xyXG5cdFx0XHQuc3BsaWNlKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IGlkKSwgMSlcclxuXHRcdFx0LmZvckVhY2goKHYsIGkpID0+ICh2LlBvc2l0aW9uID0gaSArIDEpKTtcclxuXHRcdHJldHVybiBvZih0cnVlKTtcclxuXHR9XHJcblx0c2V0Q2F0ZWdvcnlQb3NpdGlvbihwYXJhbTogU2V0Q2F0ZWdvcnlQb3NpdGlvblBhcmFtKTogT2JzZXJ2YWJsZTxTZXRDYXRlZ29yeVBvc2l0aW9uUmVzdWx0W10+IHtcclxuXHRcdG1vdmVJdGVtSW5BcnJheShcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMsXHJcblx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IHBhcmFtLklEKSxcclxuXHRcdFx0cGFyYW0uUG9zaXRpb24gLSAxXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMuZm9yRWFjaCgodiwgaSkgPT4gKHYuUG9zaXRpb24gPSBpICsgMSkpO1xyXG5cdFx0cmV0dXJuIG9mKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLm1hcCh2ID0+ICh7IElEOiB2LklELCBQb3NpdGlvbjogdi5Qb3NpdGlvbiB9KSkpO1xyXG5cdH1cclxuXHR1cGRhdGVDYXRlZ29yeShwYXJhbTogVXBkYXRlQ2F0ZWdvcnlQYXJhbSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG5cdFx0Y29uc3QgYyA9IHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5JRCk7XHJcblx0XHRjLk5hbWUgPSBwYXJhbS5OYW1lO1xyXG5cdFx0cmV0dXJuIG9mKHRydWUpO1xyXG5cdH1cclxuXHRmZXRjaENhdGVnb3JpZXMocGFyYW06IHsgRWxlTmFtZTogc3RyaW5nOyBPd25lckJ5OiBPd25lckJ5RW51bTsgT3duZXI6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxDYXRlZ29yeVtdPiB7XHJcblx0XHQvLyDmlrDlop7nirbmgIHkuIvvvIzkuI3og73ljrvlj5bmlbDmja7vvIzlm6DkuLrmnInlj6/og73kvJrlj5bliLDlt7LlrZjlnKjnmoTorrDlvZXmlbDmja7vvIzpgKDmiJDms4Tlr4ZcclxuXHRcdGlmICh0aGlzLmlzQWRkKSB7XHJcblx0XHRcdHJldHVybiBvZihbXSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5iYWNrZmFjZVxyXG5cdFx0XHQuZmV0Y2hGdWxsQ2F0ZWdvcmllcyh7IEVsZU5hbWU6IHBhcmFtLkVsZU5hbWUsIE93bmVyQnk6IHBhcmFtLk93bmVyQnksIE93bmVyOiBwYXJhbS5Pd25lciB9KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRtYXAoY2F0ZXMgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMgPSBjYXRlcztcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5tYXAodiA9PiB7XHJcblx0XHRcdFx0XHRcdGxldCBsYmxzOiB7IElEOiBzdHJpbmc7IE5hbWU6IHN0cmluZyB9W107XHJcblx0XHRcdFx0XHRcdGlmICh2LkxhYmVscykge1xyXG5cdFx0XHRcdFx0XHRcdGxibHMgPSB2LkxhYmVscy5tYXAobGJsID0+ICh7XHJcblx0XHRcdFx0XHRcdFx0XHRJRDogbGJsLklELFxyXG5cdFx0XHRcdFx0XHRcdFx0TmFtZTogbGJsLk5hbWVcclxuXHRcdFx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIENhdGVnb3J5LmZyb21JbnRlcmZhY2Uoe1xyXG5cdFx0XHRcdFx0XHRcdElEOiB2LklELFxyXG5cdFx0XHRcdFx0XHRcdE5hbWU6IHYuTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRPd25lcjogdi5Pd25lcixcclxuXHRcdFx0XHRcdFx0XHRPd25lckJ5OiB2Lk93bmVyQnksXHJcblx0XHRcdFx0XHRcdFx0UG9zaXRpb246IHYuUG9zaXRpb24sXHJcblx0XHRcdFx0XHRcdFx0TGFiZWxzOiBsYmxzXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHR9XHJcblx0Ly8g6I635Y+W6I+c5Y2V6aG55omA5pyJ5qCH562+55qE5pel5b+XXHJcblx0ZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHBhcmFtOiB7XHJcblx0XHRFbGVOYW1lOiBzdHJpbmc7XHJcblx0XHRPd25lckJ5OiBPd25lckJ5RW51bTtcclxuXHRcdE93bmVyOiBzdHJpbmdbXTtcclxuXHR9KTogT2JzZXJ2YWJsZTxJRWxlbWVudEhpc1tdPiB7XHJcblx0XHRpZiAodGhpcy5pc0FkZCkge1xyXG5cdFx0XHRyZXR1cm4gb2YoW10pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHBhcmFtKTtcclxuXHR9XHJcblx0Ly8g6I635Y+W5qCH562+55qE5pel5b+X5YiX6KGoXHJcblx0ZmV0Y2hMYWJlbEhpc0xpc3QocGFyYW06IElMYWJlbEtleSk6IE9ic2VydmFibGU8SUxhYmVsSGlzSXRlbVtdPiB7XHJcblx0XHRpZiAodGhpcy5pc0FkZCkge1xyXG5cdFx0XHRyZXR1cm4gb2YoW10pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hMYWJlbEhpc0xpc3QocGFyYW0pO1xyXG5cdH1cclxuXHQvLyDmoLnmja7ml7bpl7Tojrflj5ZsYWJlbOeahOWGheWuuVxyXG5cdGZldGNoTGFiZWxIaXMoXHJcblx0XHRwYXJhbTogSUxhYmVsSGlzS2V5XHJcblx0KTogT2JzZXJ2YWJsZTx7XHJcblx0XHRDb250czogc3RyaW5nO1xyXG5cdFx0UGxhaW5UZXh0OiBzdHJpbmc7XHJcblx0fT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hMYWJlbEhpcyhwYXJhbSk7XHJcblx0fVxyXG5cdGFkZExhYmVsKHBhcmFtOiBBZGRMYWJlbFBhcmFtKTogT2JzZXJ2YWJsZTxJTGFiZWw+IHtcclxuXHRcdGNvbnN0IGMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCk7XHJcblx0XHRjLkxhYmVscyA9IGMuTGFiZWxzIHx8IFtdO1xyXG5cdFx0aWYgKGMuTGFiZWxzLmZpbmQodiA9PiB2Lk5hbWUgPT09IHBhcmFtLk5hbWUpKSB7XHJcblx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCfph43lpI3nmoTlkI3np7AnKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGxibCA9IHtcclxuXHRcdFx0Q2F0ZWdvcnlJRDogcGFyYW0uQ2F0ZWdvcnlJRCxcclxuXHRcdFx0SUQ6IG5ld0lEKCksXHJcblx0XHRcdE5hbWU6IHBhcmFtLk5hbWUsXHJcblx0XHRcdExhc3RXcml0ZVRpbWU6IG5ldyBEYXRlKCksXHJcblx0XHRcdExhc3RXcml0ZVVzZXI6IHRoaXMuY3Vyci5kYXRhLlVzZXJOYW1lLFxyXG5cdFx0XHRDb250czogcGFyYW0uQ29udHMsXHJcblx0XHRcdFBsYWluVGV4dDogcGFyYW0uUGxhaW5UZXh0XHJcblx0XHR9IGFzIE1vZGVsRWxlbWVudExhYmVsO1xyXG5cdFx0Yy5MYWJlbHMucHVzaChsYmwpO1xyXG5cdFx0Yy5MYWJlbHMuZm9yRWFjaCgodiwgaSkgPT4gKHYuUG9zaXRpb24gPSBpICsgMSkpO1xyXG5cdFx0cmV0dXJuIG9mKGxibCk7XHJcblx0fVxyXG5cdHJlbW92ZUxhYmVsKHBhcmFtOiBJTGFiZWxLZXkpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuXHRcdGNvbnN0IGxibHMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCkuTGFiZWxzO1xyXG5cdFx0bGJscy5zcGxpY2UobGJscy5maW5kSW5kZXgodiA9PiB2LklEID09PSBwYXJhbS5JRCksIDEpO1xyXG5cdFx0cmV0dXJuIG9mKHRydWUpO1xyXG5cdH1cclxuXHRub2RlVG9TdHJpbmcocGFyYW06IElOb2RlKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuXHRcdHJldHVybiB0aGlzLmJhY2tmYWNlLm5vZGVUb1N0cmluZyhwYXJhbSk7XHJcblx0fVxyXG5cdHN0cmluZ1RvTm9kZShwYXJhbTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJTm9kZT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2Uuc3RyaW5nVG9Ob2RlKHBhcmFtKTtcclxuXHR9XHJcblx0c2V0TGFiZWxQb3NpdGlvbihwYXJhbTogU2V0TGFiZWxQb3NpdGlvblBhcmFtKTogT2JzZXJ2YWJsZTxTZXRMYWJlbFBvc2l0aW9uUmVzdWx0W10+IHtcclxuXHRcdGNvbnN0IGxibHMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCkuTGFiZWxzO1xyXG5cdFx0bW92ZUl0ZW1JbkFycmF5KGxibHMsIGxibHMuZmluZEluZGV4KHYgPT4gdi5JRCA9PT0gcGFyYW0uSUQpLCBwYXJhbS5Qb3NpdGlvbiAtIDEpO1xyXG5cdFx0bGJscy5mb3JFYWNoKCh2LCBpKSA9PiAodi5Qb3NpdGlvbiA9IGkgKyAxKSk7XHJcblx0XHRyZXR1cm4gb2YobGJscy5tYXAodiA9PiAoeyBJRDogdi5JRCwgUG9zaXRpb246IHYuUG9zaXRpb24gfSkpKTtcclxuXHR9XHJcblx0dXBkYXRlTGFiZWwocGFyYW06IFVwZGF0ZUxhYmVsUGFyYW0pOiBPYnNlcnZhYmxlPElMYWJlbD4ge1xyXG5cdFx0Y29uc3QgbGJsID0gdGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXNcclxuXHRcdFx0LmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5DYXRlZ29yeUlEKVxyXG5cdFx0XHQuTGFiZWxzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5JRCk7XHJcblx0XHRsYmwuTmFtZSA9IHBhcmFtLk5hbWU7XHJcblx0XHRsYmwuQ29udHMgPSBwYXJhbS5Db250cztcclxuXHRcdGxibC5QbGFpblRleHQgPSBwYXJhbS5QbGFpblRleHQ7XHJcblx0XHRsYmwuTGFzdFdyaXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRyZXR1cm4gb2YobGJsKTtcclxuXHR9XHJcblx0ZmV0Y2hMYWJlbChwYXJhbTogSUxhYmVsS2V5KTogT2JzZXJ2YWJsZTxGZXRjaExhYmVsUmVzdWx0PiB7XHJcblx0XHRyZXR1cm4gb2YoXHJcblx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5DYXRlZ29yeUlEKS5MYWJlbHMuZmluZCh2ID0+IHYuSUQgPT09IHBhcmFtLklEKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIl19