UNPKG

dbweb-common

Version:

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

650 lines 48.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { EventEmitter, Injectable } from '@angular/core'; import { BehaviorSubject, forkJoin } from 'rxjs'; import { startWith, tap } from 'rxjs/operators'; import { map2WithLetter } from '../../services/eleview/mapletter'; import { ElementBackFace } from './back-face'; import { FillAt } from './bill-param'; import { ImportStyle } from './import-param'; /** * @record */ function IElementData() { } if (false) { /** @type {?} */ IElementData.prototype.Tabs; /** @type {?} */ IElementData.prototype.parent; } /** * @record */ export function IProcess() { } if (false) { /** @type {?} */ IProcess.prototype.Name; /** @type {?|undefined} */ IProcess.prototype.Icon; /** @type {?|undefined} */ IProcess.prototype.Color; /** @type {?|undefined} */ IProcess.prototype.ElementName; /** @type {?} */ IProcess.prototype.BindRecord; /** @type {?|undefined} */ IProcess.prototype.TransPath; /** @type {?|undefined} */ IProcess.prototype.TransQuery; /** @type {?|undefined} */ IProcess.prototype.WithSql; /** @type {?|undefined} */ IProcess.prototype.Visable; /** @type {?|undefined} */ IProcess.prototype.MoreStr; } var ElementDataRecordView = /** @class */ (function () { function ElementDataRecordView(parent) { this.parent = parent; this.Tabs = ['取数SQL', '默认显示列', '处理列表', '标签', '条件模板']; this.inited = new EventEmitter(); this.currentProcess = new BehaviorSubject(null); } Object.defineProperty(ElementDataRecordView.prototype, "Params", { get: /** * @return {?} */ function () { return (/** @type {?} */ (this.parent.Params)); }, enumerable: true, configurable: true }); /** * @return {?} */ ElementDataRecordView.prototype.init = /** * @return {?} */ function () { var _this = this; forkJoin([ this.parent.back.fetchDB(), this.parent.back.fetchElementNames(), this.parent.back.fetchTables(this.Params.DB) ]).subscribe((/** * @param {?} v * @return {?} */ function (v) { _this.DBList = v[0]; _this.allElementNames = v[1]; _this.Tables = v[2]; _this.refreshProcesses(); if (_this.bindRecordProcesses && _this.bindRecordProcesses.length > 0) { _this.currentProcess.next(_this.bindRecordProcesses[0]); } else if (_this.notBindRecordProcesses && _this.notBindRecordProcesses.length > 0) { _this.currentProcess.next(_this.notBindRecordProcesses[0]); } if (_this.Params.ConditionalTemplates && _this.Params.ConditionalTemplates.length > 0) { _this.currentConditionTemplate = _this.Params.ConditionalTemplates[0]; } _this.checkSQL().subscribe(); _this.inited.emit(); })); }; /** * @return {?} */ ElementDataRecordView.prototype.refreshTables = /** * @return {?} */ function () { var _this = this; this.parent.back.fetchTables(this.Params.DB).subscribe((/** * @param {?} v * @return {?} */ function (v) { return (_this.Tables = v); })); }; /** * @return {?} */ ElementDataRecordView.prototype.refreshProcesses = /** * @return {?} */ function () { this.bindRecordProcesses = (this.Params.Processes || []).filter((/** * @param {?} v * @return {?} */ function (v) { return v.BindRecord; })); this.notBindRecordProcesses = (this.Params.Processes || []).filter((/** * @param {?} v * @return {?} */ function (v) { return !v.BindRecord; })); }; // 将分开的处理列表合并成一个 // 将分开的处理列表合并成一个 /** * @return {?} */ ElementDataRecordView.prototype.collectionProcesses = // 将分开的处理列表合并成一个 /** * @return {?} */ function () { this.Params.Processes = tslib_1.__spread(this.bindRecordProcesses, this.notBindRecordProcesses); }; /** * @return {?} */ ElementDataRecordView.prototype.checkSQL = /** * @return {?} */ function () { var _this = this; return this.parent.back .checkSQL({ DB: this.Params.DB, Table: this.Params.TableName, ManualPage: this.Params.ManualPage, SQL: this.Params.Sql }) .pipe(tap((/** * @param {?} v * @return {?} */ function (v) { _this.SQLCheckError = v.Error; if (!_this.SQLCheckError) { // 要把旧的类型复制过来 _this.Params.AllColumns = v.Columns.map((/** * @param {?} col * @return {?} */ function (col) { /** @type {?} */ var t = col.Type; if (_this.Params.AllColumns) { /** @type {?} */ var oldCol = _this.Params.AllColumns.find((/** * @param {?} fv * @return {?} */ function (fv) { return fv.Name === col.Name; })); if (oldCol) { t = oldCol.Type; } } return { Name: col.Name, Type: t }; })); _this.allColumnNames = _this.Params.AllColumns.map((/** * @param {?} vv * @return {?} */ function (vv) { return vv.Name; })); _this.allColumnWithLetter = map2WithLetter(_this.allColumnNames); // 删除不存在的列 if (_this.Params.Columns) { _this.Params.Columns = _this.Params.Columns.filter((/** * @param {?} col * @return {?} */ function (col) { return _this.allColumnNames.includes(col.Name); })); } } }))); }; return ElementDataRecordView; }()); export { ElementDataRecordView }; if (false) { /** @type {?} */ ElementDataRecordView.prototype.labelCategories; /** @type {?} */ ElementDataRecordView.prototype.Tabs; /** @type {?} */ ElementDataRecordView.prototype.DBList; /** @type {?} */ ElementDataRecordView.prototype.Tables; /** @type {?} */ ElementDataRecordView.prototype.allElementNames; /** @type {?} */ ElementDataRecordView.prototype.SQLCheckError; /** @type {?} */ ElementDataRecordView.prototype.allColumnNames; /** @type {?} */ ElementDataRecordView.prototype.allColumnWithLetter; /** @type {?} */ ElementDataRecordView.prototype.bindRecordProcesses; /** @type {?} */ ElementDataRecordView.prototype.notBindRecordProcesses; /** @type {?} */ ElementDataRecordView.prototype.inited; /** @type {?} */ ElementDataRecordView.prototype.currentProcess; /** @type {?} */ ElementDataRecordView.prototype.currentConditionTemplate; /** @type {?} */ ElementDataRecordView.prototype.parent; } var ElementDataImport = /** @class */ (function () { function ElementDataImport(parent) { this.parent = parent; this.Tabs = ['字段设置', '属性']; } Object.defineProperty(ElementDataImport.prototype, "Params", { get: /** * @return {?} */ function () { return (/** @type {?} */ (this.parent.Params)); }, enumerable: true, configurable: true }); /** * @return {?} */ ElementDataImport.prototype.init = /** * @return {?} */ function () { var _this = this; return forkJoin([this.parent.back.fetchDB(), this.parent.back.fetchTables(this.Params.DB)]).pipe(tap((/** * @param {?} v * @return {?} */ function (v) { _this.DBList = v[0]; _this.Tables = v[1]; _this.syncTableColumn(); }))); }; // 根据表名,同步最新的字段清单 // 根据表名,同步最新的字段清单 /** * @return {?} */ ElementDataImport.prototype.syncTableColumn = // 根据表名,同步最新的字段清单 /** * @return {?} */ function () { var _this = this; this.parent.back.fetchTableColumns(this.Params.Table).subscribe((/** * @param {?} v * @return {?} */ function (v) { _this.Params.Fields = v.map((/** * @param {?} one * @return {?} */ function (one) { /** @type {?} */ var found = _this.Params.Fields.find((/** * @param {?} sv * @return {?} */ function (sv) { return sv.Name === one; })); if (found) { return found; } return (/** @type {?} */ ({ Name: one, Style: ImportStyle.Normal })); })); })); }; /** * @return {?} */ ElementDataImport.prototype.refreshTables = /** * @return {?} */ function () { var _this = this; this.parent.back.fetchTables(this.Params.DB).subscribe((/** * @param {?} v * @return {?} */ function (v) { _this.Tables = v; })); }; return ElementDataImport; }()); export { ElementDataImport }; if (false) { /** @type {?} */ ElementDataImport.prototype.Tabs; /** @type {?} */ ElementDataImport.prototype.DBList; /** @type {?} */ ElementDataImport.prototype.Tables; /** @type {?} */ ElementDataImport.prototype.parent; } var ElementDataUpdate = /** @class */ (function () { function ElementDataUpdate(parent) { this.parent = parent; this.Tabs = ['设置']; } Object.defineProperty(ElementDataUpdate.prototype, "Params", { get: /** * @return {?} */ function () { return (/** @type {?} */ (this.parent.Params)); }, enumerable: true, configurable: true }); /** * @return {?} */ ElementDataUpdate.prototype.isAllSelected = /** * @return {?} */ function () { return this.Params.Fields && this.Params.Fields.find((/** * @param {?} v * @return {?} */ function (v) { return !v.selected; })) === undefined; }; /** * @return {?} */ ElementDataUpdate.prototype.hasSelected = /** * @return {?} */ function () { return this.Params.Fields && this.Params.Fields.find((/** * @param {?} v * @return {?} */ function (v) { return v.selected; })) !== undefined; }; /** * @return {?} */ ElementDataUpdate.prototype.init = /** * @return {?} */ function () { var _this = this; this.parent.back.fetchDB().subscribe((/** * @param {?} v * @return {?} */ function (v) { return (_this.DBList = v); })); this.refreshTables(); }; /** * @return {?} */ ElementDataUpdate.prototype.refreshTables = /** * @return {?} */ function () { var _this = this; this.parent.back.fetchTables(this.Params.DB).subscribe((/** * @param {?} v * @return {?} */ function (v) { return (_this.Tables = v); })); }; return ElementDataUpdate; }()); export { ElementDataUpdate }; if (false) { /** @type {?} */ ElementDataUpdate.prototype.Tabs; /** @type {?} */ ElementDataUpdate.prototype.DBList; /** @type {?} */ ElementDataUpdate.prototype.Tables; /** @type {?} */ ElementDataUpdate.prototype.parent; } var ElementDataBill = /** @class */ (function () { function ElementDataBill(parent) { var _this = this; this.parent = parent; this.Tabs = ['设置']; this.parent.init.subscribe((/** * @return {?} */ function () { _this.parent.bill.formGroup .get('Controller') .valueChanges.pipe(startWith(_this.parent.bill.formGroup.get('Controller').value)) .subscribe((/** * @param {?} v * @return {?} */ function (v) { // 如果是单据,则需要修复填充列的设置 /** @type {?} */ var ctrl = _this.parent.Controllers.find((/** * @param {?} c * @return {?} */ function (c) { return c.Name === v; })); if (ctrl && ctrl.Bill) { _this.parent.back.fetchBillMainColumns(v).subscribe((/** * @param {?} cols * @return {?} */ function (cols) { _this.MainColumns = cols; _this.fixFieldSettings(cols.map((/** * @param {?} c * @return {?} */ function (c) { return c.Name; }))); _this.fixCloneSettings(); })); } })); })); } Object.defineProperty(ElementDataBill.prototype, "Param", { get: /** * @return {?} */ function () { return (/** @type {?} */ (this.parent.Params)); }, enumerable: true, configurable: true }); /** * @param {?} cols * @return {?} */ ElementDataBill.prototype.fixFieldSettings = /** * @param {?} cols * @return {?} */ function (cols) { var _this = this; this.Param.FieldSettings = cols.map((/** * @param {?} col * @return {?} */ function (col) { /** @type {?} */ var foundField; if (_this.Param && _this.Param.FieldSettings) { foundField = _this.Param.FieldSettings.find((/** * @param {?} fld * @return {?} */ function (fld) { return fld.Name === col; })); } if (foundField) { return foundField; } return (/** @type {?} */ ({ Name: col, Fill: '', FillAt: FillAt.SkipFill, Visibility: '' })); })); }; /** * @return {?} */ ElementDataBill.prototype.fixCloneSettings = /** * @return {?} */ function () { /** @type {?} */ var old = tslib_1.__spread((this.Param.ClonePrimaryKeySettings || [])); if (this.Param.AllowClone) { this.Param.ClonePrimaryKeySettings = this.MainColumns.filter((/** * @param {?} v * @return {?} */ function (v) { return v.PrimaryKey; })).map((/** * @param {?} v * @return {?} */ function (v) { /** @type {?} */ var oldField = old.find((/** * @param {?} o * @return {?} */ function (o) { return o.Name === v.Name; })); return (/** @type {?} */ ({ Name: v.Name, Fill: oldField ? oldField.Fill : '{{.SRC}}', Visibility: oldField ? oldField.Visibility : '' })); })); console.log(this.Param.ClonePrimaryKeySettings); } else { this.Param.ClonePrimaryKeySettings = null; } }; return ElementDataBill; }()); export { ElementDataBill }; if (false) { /** @type {?} */ ElementDataBill.prototype.Tabs; /** @type {?} */ ElementDataBill.prototype.MainColumns; /** @type {?} */ ElementDataBill.prototype.parent; } var ElementService = /** @class */ (function () { function ElementService(back) { this.back = back; this.init = new EventEmitter(); this.BaseActive = true; this.data = { recordview: new ElementDataRecordView(this), import: new ElementDataImport(this), update: new ElementDataUpdate(this), bill: new ElementDataBill(this) }; } /** * @param {?} ele * @return {?} */ ElementService.prototype.onInit = /** * @param {?} ele * @return {?} */ function (ele) { var _this = this; this.back.element = ele; this.back.fetchElementInitData(this.bill.typeRecord.Name).subscribe((/** * @param {?} v * @return {?} */ function (v) { _this.Controllers = v.Controllers; _this.Categories = v.Categories; _this.CategoriesEN = v.CategoriesEN; if (v.CanSelectRoles) { _this.Roles = v.CanSelectRoles.map((/** * @param {?} sv * @return {?} */ function (sv) { return ({ Name: sv, OldChecked: v.Roles && v.Roles.find((/** * @param {?} vv * @return {?} */ function (vv) { return vv === sv; })) !== undefined, Checked: false, Modify: false }); })); _this.Roles.forEach((/** * @param {?} role * @return {?} */ function (role) { return (role.Checked = role.OldChecked); })); } _this.init.emit(); })); }; ElementService.decorators = [ { type: Injectable } ]; /** @nocollapse */ ElementService.ctorParameters = function () { return [ { type: ElementBackFace } ]; }; return ElementService; }()); export { ElementService }; if (false) { /** @type {?} */ ElementService.prototype.bill; /** @type {?} */ ElementService.prototype.init; /** @type {?} */ ElementService.prototype.Controllers; /** @type {?} */ ElementService.prototype.Categories; /** @type {?} */ ElementService.prototype.CategoriesEN; /** @type {?} */ ElementService.prototype.BaseActive; /** @type {?} */ ElementService.prototype.ActiveTab; /** @type {?} */ ElementService.prototype.Roles; /** @type {?} */ ElementService.prototype.Params; /** @type {?} */ ElementService.prototype.data; /** @type {?} */ ElementService.prototype.back; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2VsZW1lbnQvc2VydmljZS9lbGVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVsRSxPQUFPLEVBQWMsZUFBZSxFQUFjLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBMkIsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9ELE9BQU8sRUFBNEIsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFJdkUsMkJBR0M7OztJQUZBLDRCQUFlOztJQUNmLDhCQUF1Qjs7Ozs7QUFFeEIsOEJBV0M7OztJQVZBLHdCQUFhOztJQUNiLHdCQUFjOztJQUNkLHlCQUFlOztJQUNmLCtCQUFxQjs7SUFDckIsOEJBQW9COztJQUNwQiw2QkFBcUI7O0lBQ3JCLDhCQUFvQjs7SUFDcEIsMkJBQWtCOztJQUNsQiwyQkFBaUI7O0lBQ2pCLDJCQUFpQjs7QUFHbEI7SUFrQkMsK0JBQW1CLE1BQXNCO1FBQXRCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBaEJ6QyxTQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFVaEQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJNUIsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVyxJQUFJLENBQUMsQ0FBQztJQUVULENBQUM7SUFMN0Ms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RSxFQUFFO29CQUNSLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSTs7OztvQkFBQyxVQUFBLEVBQUUsSUFBSSxPQUFBLEVBQUUsS0FBSyxFQUFFLEVBQVQsQ0FBUyxFQUFDLEtBQUssU0FBUztvQkFDbEUsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsTUFBTSxFQUFFLEtBQUs7aUJBQ2IsQ0FBQyxFQUxzQyxDQUt0QyxFQUFDLENBQUM7Z0JBQ0osS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPOzs7O2dCQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBaEMsQ0FBZ0MsRUFBQyxDQUFDO2FBQzdEO1lBQ0QsS0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixDQUFDLEVBQUMsQ0FBQztJQUNKLENBQUM7O2dCQXZDRCxVQUFVOzs7O2dCQWhQVSxlQUFlOztJQXdScEMscUJBQUM7Q0FBQSxBQXhDRCxJQXdDQztTQXZDWSxjQUFjOzs7SUFDMUIsOEJBQW9COztJQUNwQiw4QkFBMEI7O0lBQzFCLHFDQUEwQjs7SUFDMUIsb0NBQXFCOztJQUNyQixzQ0FBdUI7O0lBQ3ZCLG9DQUFrQjs7SUFDbEIsbUNBQWtCOztJQUNsQiwrQkFJSTs7SUFDSixnQ0FBWTs7SUFDWiw4QkFLRTs7SUFDVSw4QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRWxlbWVudFJvdXRlLCBQcmltYXJ5S2V5U2V0dGluZyB9IGZyb20gJ2Rid2ViLWNvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCaWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmlsbC9iaWxsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1vZGVsRWxlbWVudENhdGVnb3J5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxldmlldy9lbGV2aWV3LWJhY2tmYWNlJztcclxuaW1wb3J0IHsgbWFwMldpdGhMZXR0ZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGV2aWV3L21hcGxldHRlcic7XHJcbmltcG9ydCB7IENvbHVtbnNXaXRoTGV0dGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9tb2RlbCc7XHJcbmltcG9ydCB7IENvbnRyb2xsZXIsIEVsZW1lbnRCYWNrRmFjZSwgTWFpbkNvbHVtbiB9IGZyb20gJy4vYmFjay1mYWNlJztcclxuaW1wb3J0IHsgQmlsbFBhcmFtLCBGaWVsZFNldHRpbmcsIEZpbGxBdCB9IGZyb20gJy4vYmlsbC1wYXJhbSc7XHJcbmltcG9ydCB7IEltcG9ydFBhcmFtLCBJbXBvcnRGaWVsZCwgSW1wb3J0U3R5bGUgfSBmcm9tICcuL2ltcG9ydC1wYXJhbSc7XHJcbmltcG9ydCB7IENvbmRpdGlvbmFsVGVtcGxhdGUsIFJlY29yZFZpZXdQYXJhbSB9IGZyb20gJy4vcmVjb3Jkdmlldy1wYXJhbSc7XHJcbmltcG9ydCB7IFVwZGF0ZVBhcmFtIH0gZnJvbSAnLi91cGRhdGUucGFyYW0nO1xyXG5cclxuaW50ZXJmYWNlIElFbGVtZW50RGF0YSB7XHJcblx0VGFiczogc3RyaW5nW107XHJcblx0cGFyZW50OiBFbGVtZW50U2VydmljZTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9jZXNzIHtcclxuXHROYW1lOiBzdHJpbmc7XHJcblx0SWNvbj86IHN0cmluZzsgLy8gW25hbWVzcGFjZV06W25hbWVdIOeahOaWueW8j1xyXG5cdENvbG9yPzogc3RyaW5nOyAvLyDosIPoibLmnb/oibLlj7flkI3np7DvvIzpu5jorqTkuLrnqbpcclxuXHRFbGVtZW50TmFtZT86IHN0cmluZztcclxuXHRCaW5kUmVjb3JkOiBib29sZWFuOyAvLyDkvKDpgJLliLDkuIvkuIDkuKrlt6XkvZzlhYPntKDnmoTot6/lvoTkuIrvvIzkuIDoiKznlKjmnaXkvKDpgJLkuLvplK7vvIzlpoLmnpzkuLrnqbrliJnoh6rliqjkvKDpgJLooajnmoTkuLvplK5cclxuXHRUcmFuc1BhdGg/OiBzdHJpbmdbXTsgLy8g5Lyg6YCS5Yiw5LiL5LiA5Liq5bel5L2c5YWD57Sg55qE5Y+C5pWw77yM55So5qih5p2/5p2l5a6M5oiQLFxyXG5cdFRyYW5zUXVlcnk/OiBzdHJpbmc7IC8vIOS4gOiIrOaYr+eUqOadpeS8oOmAkuWIsOWPpuS4gOS4qlJlY29yZFZpZXfnmoTpmYTliqDmnaHku7blj4rmoIfpophcclxuXHRXaXRoU3FsPzogYm9vbGVhbjsgLy8g5piv5ZCm5Lyg6YCSc3FsXHJcblx0VmlzYWJsZT86IHN0cmluZzsgLy8g6Z2e56m655qE6K+d6K6h566X5Y+v6KeB5oCn77yM55SodGVtcGxhdGVy55qE6K+t5rOVXHJcblx0TW9yZVN0cj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVsZW1lbnREYXRhUmVjb3JkVmlldyBpbXBsZW1lbnRzIElFbGVtZW50RGF0YSB7XHJcblx0bGFiZWxDYXRlZ29yaWVzOiBNb2RlbEVsZW1lbnRDYXRlZ29yeVtdO1xyXG5cdFRhYnMgPSBbJ+WPluaVsFNRTCcsICfpu5jorqTmmL7npLrliJcnLCAn5aSE55CG5YiX6KGoJywgJ+agh+etvicsICfmnaHku7bmqKHmnb8nXTtcclxuXHREQkxpc3Q6IHN0cmluZ1tdO1xyXG5cdFRhYmxlczogc3RyaW5nW107XHJcblx0YWxsRWxlbWVudE5hbWVzOiBzdHJpbmdbXTtcclxuXHRTUUxDaGVja0Vycm9yOiBzdHJpbmc7XHJcblx0YWxsQ29sdW1uTmFtZXM6IHN0cmluZ1tdO1xyXG5cdGFsbENvbHVtbldpdGhMZXR0ZXI6IENvbHVtbnNXaXRoTGV0dGVyW107XHJcblx0Ly8g5LuOcGFyYW1zLnByb2Nlc3Nlc+S4rei9rOaNouiAjOadpVxyXG5cdGJpbmRSZWNvcmRQcm9jZXNzZXM6IElQcm9jZXNzW107XHJcblx0bm90QmluZFJlY29yZFByb2Nlc3NlczogSVByb2Nlc3NbXTtcclxuXHRpbml0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0Z2V0IFBhcmFtcygpIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcmVudC5QYXJhbXMgYXMgUmVjb3JkVmlld1BhcmFtO1xyXG5cdH1cclxuXHRjdXJyZW50UHJvY2VzcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVByb2Nlc3M+KG51bGwpO1xyXG5cdGN1cnJlbnRDb25kaXRpb25UZW1wbGF0ZTogQ29uZGl0aW9uYWxUZW1wbGF0ZTtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgcGFyZW50OiBFbGVtZW50U2VydmljZSkge31cclxuXHRpbml0KCkge1xyXG5cdFx0Zm9ya0pvaW4oW1xyXG5cdFx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoREIoKSxcclxuXHRcdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaEVsZW1lbnROYW1lcygpLFxyXG5cdFx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVzKHRoaXMuUGFyYW1zLkRCKVxyXG5cdFx0XSkuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHR0aGlzLkRCTGlzdCA9IHZbMF07XHJcblx0XHRcdHRoaXMuYWxsRWxlbWVudE5hbWVzID0gdlsxXTtcclxuXHRcdFx0dGhpcy5UYWJsZXMgPSB2WzJdO1xyXG5cclxuXHRcdFx0dGhpcy5yZWZyZXNoUHJvY2Vzc2VzKCk7XHJcblx0XHRcdGlmICh0aGlzLmJpbmRSZWNvcmRQcm9jZXNzZXMgJiYgdGhpcy5iaW5kUmVjb3JkUHJvY2Vzc2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRQcm9jZXNzLm5leHQodGhpcy5iaW5kUmVjb3JkUHJvY2Vzc2VzWzBdKTtcclxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLm5vdEJpbmRSZWNvcmRQcm9jZXNzZXMgJiYgdGhpcy5ub3RCaW5kUmVjb3JkUHJvY2Vzc2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRQcm9jZXNzLm5leHQodGhpcy5ub3RCaW5kUmVjb3JkUHJvY2Vzc2VzWzBdKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5QYXJhbXMuQ29uZGl0aW9uYWxUZW1wbGF0ZXMgJiYgdGhpcy5QYXJhbXMuQ29uZGl0aW9uYWxUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMuY3VycmVudENvbmRpdGlvblRlbXBsYXRlID0gdGhpcy5QYXJhbXMuQ29uZGl0aW9uYWxUZW1wbGF0ZXNbMF07XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5jaGVja1NRTCgpLnN1YnNjcmliZSgpO1xyXG5cclxuXHRcdFx0dGhpcy5pbml0ZWQuZW1pdCgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHB1YmxpYyByZWZyZXNoVGFibGVzKCkge1xyXG5cdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaFRhYmxlcyh0aGlzLlBhcmFtcy5EQikuc3Vic2NyaWJlKHYgPT4gKHRoaXMuVGFibGVzID0gdikpO1xyXG5cdH1cclxuXHRwdWJsaWMgcmVmcmVzaFByb2Nlc3NlcygpIHtcclxuXHRcdHRoaXMuYmluZFJlY29yZFByb2Nlc3NlcyA9ICh0aGlzLlBhcmFtcy5Qcm9jZXNzZXMgfHwgW10pLmZpbHRlcih2ID0+IHYuQmluZFJlY29yZCk7XHJcblx0XHR0aGlzLm5vdEJpbmRSZWNvcmRQcm9jZXNzZXMgPSAodGhpcy5QYXJhbXMuUHJvY2Vzc2VzIHx8IFtdKS5maWx0ZXIodiA9PiAhdi5CaW5kUmVjb3JkKTtcclxuXHR9XHJcblxyXG5cdC8vIOWwhuWIhuW8gOeahOWkhOeQhuWIl+ihqOWQiOW5tuaIkOS4gOS4qlxyXG5cdGNvbGxlY3Rpb25Qcm9jZXNzZXMoKSB7XHJcblx0XHR0aGlzLlBhcmFtcy5Qcm9jZXNzZXMgPSBbLi4udGhpcy5iaW5kUmVjb3JkUHJvY2Vzc2VzLCAuLi50aGlzLm5vdEJpbmRSZWNvcmRQcm9jZXNzZXNdO1xyXG5cdH1cclxuXHJcblx0Y2hlY2tTUUwoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQuYmFja1xyXG5cdFx0XHQuY2hlY2tTUUwoe1xyXG5cdFx0XHRcdERCOiB0aGlzLlBhcmFtcy5EQixcclxuXHRcdFx0XHRUYWJsZTogdGhpcy5QYXJhbXMuVGFibGVOYW1lLFxyXG5cdFx0XHRcdE1hbnVhbFBhZ2U6IHRoaXMuUGFyYW1zLk1hbnVhbFBhZ2UsXHJcblx0XHRcdFx0U1FMOiB0aGlzLlBhcmFtcy5TcWxcclxuXHRcdFx0fSlcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0dGFwKHYgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5TUUxDaGVja0Vycm9yID0gdi5FcnJvcjtcclxuXHRcdFx0XHRcdGlmICghdGhpcy5TUUxDaGVja0Vycm9yKSB7XHJcblx0XHRcdFx0XHRcdC8vIOimgeaKiuaXp+eahOexu+Wei+WkjeWItui/h+adpVxyXG5cdFx0XHRcdFx0XHR0aGlzLlBhcmFtcy5BbGxDb2x1bW5zID0gdi5Db2x1bW5zLm1hcChjb2wgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGxldCB0ID0gY29sLlR5cGU7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuUGFyYW1zLkFsbENvbHVtbnMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9sZENvbCA9IHRoaXMuUGFyYW1zLkFsbENvbHVtbnMuZmluZChmdiA9PiBmdi5OYW1lID09PSBjb2wuTmFtZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAob2xkQ29sKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHQgPSBvbGRDb2wuVHlwZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRcdE5hbWU6IGNvbC5OYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0VHlwZTogdFxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbENvbHVtbk5hbWVzID0gdGhpcy5QYXJhbXMuQWxsQ29sdW1ucy5tYXAodnYgPT4gdnYuTmFtZSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuYWxsQ29sdW1uV2l0aExldHRlciA9IG1hcDJXaXRoTGV0dGVyKHRoaXMuYWxsQ29sdW1uTmFtZXMpO1xyXG5cdFx0XHRcdFx0XHQvLyDliKDpmaTkuI3lrZjlnKjnmoTliJdcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuUGFyYW1zLkNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBhcmFtcy5Db2x1bW5zID0gdGhpcy5QYXJhbXMuQ29sdW1ucy5maWx0ZXIoY29sID0+XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbENvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbC5OYW1lKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVsZW1lbnREYXRhSW1wb3J0IGltcGxlbWVudHMgSUVsZW1lbnREYXRhIHtcclxuXHRUYWJzOiBzdHJpbmdbXSA9IFsn5a2X5q616K6+572uJywgJ+WxnuaApyddO1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJlbnQ6IEVsZW1lbnRTZXJ2aWNlKSB7fVxyXG5cdERCTGlzdDogc3RyaW5nW107XHJcblx0VGFibGVzOiBzdHJpbmdbXTtcclxuXHRnZXQgUGFyYW1zKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMucGFyZW50LlBhcmFtcyBhcyBJbXBvcnRQYXJhbTtcclxuXHR9XHJcblxyXG5cdGluaXQoKSB7XHJcblx0XHRyZXR1cm4gZm9ya0pvaW4oW3RoaXMucGFyZW50LmJhY2suZmV0Y2hEQigpLCB0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVzKHRoaXMuUGFyYW1zLkRCKV0pLnBpcGUoXHJcblx0XHRcdHRhcCh2ID0+IHtcclxuXHRcdFx0XHR0aGlzLkRCTGlzdCA9IHZbMF07XHJcblx0XHRcdFx0dGhpcy5UYWJsZXMgPSB2WzFdO1xyXG5cdFx0XHRcdHRoaXMuc3luY1RhYmxlQ29sdW1uKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHQvLyDmoLnmja7ooajlkI3vvIzlkIzmraXmnIDmlrDnmoTlrZfmrrXmuIXljZVcclxuXHRzeW5jVGFibGVDb2x1bW4oKSB7XHJcblx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVDb2x1bW5zKHRoaXMuUGFyYW1zLlRhYmxlKS5zdWJzY3JpYmUodiA9PiB7XHJcblx0XHRcdHRoaXMuUGFyYW1zLkZpZWxkcyA9IHYubWFwKG9uZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZm91bmQgPSB0aGlzLlBhcmFtcy5GaWVsZHMuZmluZChzdiA9PiBzdi5OYW1lID09PSBvbmUpO1xyXG5cdFx0XHRcdGlmIChmb3VuZCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZvdW5kO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0TmFtZTogb25lLFxyXG5cdFx0XHRcdFx0U3R5bGU6IEltcG9ydFN0eWxlLk5vcm1hbFxyXG5cdFx0XHRcdH0gYXMgSW1wb3J0RmllbGQ7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHJlZnJlc2hUYWJsZXMoKSB7XHJcblx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVzKHRoaXMuUGFyYW1zLkRCKS5zdWJzY3JpYmUodiA9PiB7XHJcblx0XHRcdHRoaXMuVGFibGVzID0gdjtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVsZW1lbnREYXRhVXBkYXRlIGltcGxlbWVudHMgSUVsZW1lbnREYXRhIHtcclxuXHRUYWJzOiBzdHJpbmdbXSA9IFsn6K6+572uJ107XHJcblx0REJMaXN0OiBzdHJpbmdbXTtcclxuXHRUYWJsZXM6IHN0cmluZ1tdO1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJlbnQ6IEVsZW1lbnRTZXJ2aWNlKSB7fVxyXG5cdGdldCBQYXJhbXMoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQuUGFyYW1zIGFzIFVwZGF0ZVBhcmFtO1xyXG5cdH1cclxuXHRpc0FsbFNlbGVjdGVkKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuUGFyYW1zLkZpZWxkcyAmJiB0aGlzLlBhcmFtcy5GaWVsZHMuZmluZCh2ID0+ICF2LnNlbGVjdGVkKSA9PT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHRoYXNTZWxlY3RlZCgpIHtcclxuXHRcdHJldHVybiB0aGlzLlBhcmFtcy5GaWVsZHMgJiYgdGhpcy5QYXJhbXMuRmllbGRzLmZpbmQodiA9PiB2LnNlbGVjdGVkKSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0aW5pdCgpIHtcclxuXHRcdHRoaXMucGFyZW50LmJhY2suZmV0Y2hEQigpLnN1YnNjcmliZSh2ID0+ICh0aGlzLkRCTGlzdCA9IHYpKTtcclxuXHRcdHRoaXMucmVmcmVzaFRhYmxlcygpO1xyXG5cdH1cclxuXHRyZWZyZXNoVGFibGVzKCkge1xyXG5cdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaFRhYmxlcyh0aGlzLlBhcmFtcy5EQikuc3Vic2NyaWJlKHYgPT4gKHRoaXMuVGFibGVzID0gdikpO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgRWxlbWVudERhdGFCaWxsIGltcGxlbWVudHMgSUVsZW1lbnREYXRhIHtcclxuXHRUYWJzID0gWyforr7nva4nXTtcclxuXHRNYWluQ29sdW1uczogTWFpbkNvbHVtbltdO1xyXG5cdGdldCBQYXJhbSgpIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcmVudC5QYXJhbXMgYXMgQmlsbFBhcmFtO1xyXG5cdH1cclxuXHRmaXhGaWVsZFNldHRpbmdzKGNvbHM6IHN0cmluZ1tdKSB7XHJcblx0XHR0aGlzLlBhcmFtLkZpZWxkU2V0dGluZ3MgPSBjb2xzLm1hcChjb2wgPT4ge1xyXG5cdFx0XHRsZXQgZm91bmRGaWVsZDogRmllbGRTZXR0aW5nO1xyXG5cdFx0XHRpZiAodGhpcy5QYXJhbSAmJiB0aGlzLlBhcmFtLkZpZWxkU2V0dGluZ3MpIHtcclxuXHRcdFx0XHRmb3VuZEZpZWxkID0gdGhpcy5QYXJhbS5GaWVsZFNldHRpbmdzLmZpbmQoZmxkID0+IGZsZC5OYW1lID09PSBjb2wpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChmb3VuZEZpZWxkKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZvdW5kRmllbGQ7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHROYW1lOiBjb2wsXHJcblx0XHRcdFx0RmlsbDogJycsXHJcblx0XHRcdFx0RmlsbEF0OiBGaWxsQXQuU2tpcEZpbGwsXHJcblx0XHRcdFx0VmlzaWJpbGl0eTogJydcclxuXHRcdFx0fSBhcyBGaWVsZFNldHRpbmc7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0Zml4Q2xvbmVTZXR0aW5ncygpIHtcclxuXHRcdGNvbnN0IG9sZCA9IFsuLi4odGhpcy5QYXJhbS5DbG9uZVByaW1hcnlLZXlTZXR0aW5ncyB8fCBbXSldO1xyXG5cdFx0aWYgKHRoaXMuUGFyYW0uQWxsb3dDbG9uZSkge1xyXG5cdFx0XHR0aGlzLlBhcmFtLkNsb25lUHJpbWFyeUtleVNldHRpbmdzID0gdGhpcy5NYWluQ29sdW1ucy5maWx0ZXIodiA9PiB2LlByaW1hcnlLZXkpLm1hcCh2ID0+IHtcclxuXHRcdFx0XHRjb25zdCBvbGRGaWVsZCA9IG9sZC5maW5kKG8gPT4gby5OYW1lID09PSB2Lk5hbWUpO1xyXG5cdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHROYW1lOiB2Lk5hbWUsXHJcblx0XHRcdFx0XHRGaWxsOiBvbGRGaWVsZCA/IG9sZEZpZWxkLkZpbGwgOiAne3suU1JDfX0nLFxyXG5cdFx0XHRcdFx0VmlzaWJpbGl0eTogb2xkRmllbGQgPyBvbGRGaWVsZC5WaXNpYmlsaXR5IDogJydcclxuXHRcdFx0XHR9IGFzIFByaW1hcnlLZXlTZXR0aW5nO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Y29uc29sZS5sb2codGhpcy5QYXJhbS5DbG9uZVByaW1hcnlLZXlTZXR0aW5ncyk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLlBhcmFtLkNsb25lUHJpbWFyeUtleVNldHRpbmdzID0gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblx0Y29uc3RydWN0b3IocHVibGljIHBhcmVudDogRWxlbWVudFNlcnZpY2UpIHtcclxuXHRcdHRoaXMucGFyZW50LmluaXQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0dGhpcy5wYXJlbnQuYmlsbC5mb3JtR3JvdXBcclxuXHRcdFx0XHQuZ2V0KCdDb250cm9sbGVyJylcclxuXHRcdFx0XHQudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMucGFyZW50LmJpbGwuZm9ybUdyb3VwLmdldCgnQ29udHJvbGxlcicpLnZhbHVlKSlcclxuXHRcdFx0XHQuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdFx0Ly8g5aaC5p6c5piv5Y2V5o2u77yM5YiZ6ZyA6KaB5L+u5aSN5aGr5YWF5YiX55qE6K6+572uXHJcblx0XHRcdFx0XHRjb25zdCBjdHJsID0gdGhpcy5wYXJlbnQuQ29udHJvbGxlcnMuZmluZChjID0+IGMuTmFtZSA9PT0gdik7XHJcblx0XHRcdFx0XHRpZiAoY3RybCAmJiBjdHJsLkJpbGwpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaEJpbGxNYWluQ29sdW1ucyh2KS5zdWJzY3JpYmUoY29scyA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5NYWluQ29sdW1ucyA9IGNvbHM7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maXhGaWVsZFNldHRpbmdzKGNvbHMubWFwKGMgPT4gYy5OYW1lKSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maXhDbG9uZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVsZW1lbnRTZXJ2aWNlIHtcclxuXHRiaWxsOiBCaWxsQ29tcG9uZW50O1xyXG5cdGluaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0Q29udHJvbGxlcnM6IENvbnRyb2xsZXJbXTtcclxuXHRDYXRlZ29yaWVzOiBzdHJpbmdbXTtcclxuXHRDYXRlZ29yaWVzRU46IHN0cmluZ1tdO1xyXG5cdEJhc2VBY3RpdmUgPSB0cnVlO1xyXG5cdEFjdGl2ZVRhYjogc3RyaW5nO1xyXG5cdFJvbGVzOiB7XHJcblx0XHROYW1lOiBzdHJpbmc7XHJcblx0XHRDaGVja2VkOiBib29sZWFuO1xyXG5cdFx0T2xkQ2hlY2tlZDogYm9vbGVhbjtcclxuXHR9W107XHJcblx0UGFyYW1zOiBhbnk7XHJcblx0ZGF0YTogeyBba2V5OiBzdHJpbmddOiBJRWxlbWVudERhdGEgfSA9IHtcclxuXHRcdHJlY29yZHZpZXc6IG5ldyBFbGVtZW50RGF0YVJlY29yZFZpZXcodGhpcyksXHJcblx0XHRpbXBvcnQ6IG5ldyBFbGVtZW50RGF0YUltcG9ydCh0aGlzKSxcclxuXHRcdHVwZGF0ZTogbmV3IEVsZW1lbnREYXRhVXBkYXRlKHRoaXMpLFxyXG5cdFx0YmlsbDogbmV3IEVsZW1lbnREYXRhQmlsbCh0aGlzKVxyXG5cdH07XHJcblx0Y29uc3RydWN0b3IocHVibGljIGJhY2s6IEVsZW1lbnRCYWNrRmFjZSkge31cclxuXHRvbkluaXQoZWxlOiBFbGVtZW50Um91dGUpIHtcclxuXHRcdHRoaXMuYmFjay5lbGVtZW50ID0gZWxlO1xyXG5cdFx0dGhpcy5iYWNrLmZldGNoRWxlbWVudEluaXREYXRhKHRoaXMuYmlsbC50eXBlUmVjb3JkLk5hbWUpLnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0dGhpcy5Db250cm9sbGVycyA9IHYuQ29udHJvbGxlcnM7XHJcblx0XHRcdHRoaXMuQ2F0ZWdvcmllcyA9IHYuQ2F0ZWdvcmllcztcclxuXHRcdFx0dGhpcy5DYXRlZ29yaWVzRU4gPSB2LkNhdGVnb3JpZXNFTjtcclxuXHRcdFx0aWYgKHYuQ2FuU2VsZWN0Um9sZXMpIHtcclxuXHRcdFx0XHR0aGlzLlJvbGVzID0gdi5DYW5TZWxlY3RSb2xlcy5tYXAoc3YgPT4gKHtcclxuXHRcdFx0XHRcdE5hbWU6IHN2LFxyXG5cdFx0XHRcdFx0T2xkQ2hlY2tlZDogdi5Sb2xlcyAmJiB2LlJvbGVzLmZpbmQodnYgPT4gdnYgPT09IHN2KSAhPT0gdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0Q2hlY2tlZDogZmFsc2UsXHJcblx0XHRcdFx0XHRNb2RpZnk6IGZhbHNlXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdHRoaXMuUm9sZXMuZm9yRWFjaChyb2xlID0+IChyb2xlLkNoZWNrZWQgPSByb2xlLk9sZENoZWNrZWQpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmluaXQuZW1pdCgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiJdfQ==