ng-yunzai-mobile
Version:
1. 修改wechat.micro.ts
797 lines • 63 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: select-contacts/yz-select-contacts/yz-select-contacts.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Inject } from '@angular/core';
import { ModalService } from "ng-zorro-antd-mobile";
import { ComponentOption } from "./dept.interface";
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { YzSelectContactsService } from './yz-select-contacts.service';
var YzSelectContactsComponent = /** @class */ (function () {
function YzSelectContactsComponent(dialogRef, _modal, yzContactsService, data) {
this.dialogRef = dialogRef;
this._modal = _modal;
this.yzContactsService = yzContactsService;
this.data = data;
this.modalRefCpt = [];
this.subscribed = [];
this.dtPullToRefreshStyle = { height: window.innerHeight - 44 - 51 + 'px' };
// 总部门数据
this.deptNodes = [];
// 页面展示的部门数据
this.deptList = [];
// 面包屑
this.deptBarList = [];
// 页面加载中
this.pageLoading = false;
// 人员列表参数
this.baseUserParams = {
total: 0,
pageSize: 20,
pageNum: 1,
deptId: null,
realName: null,
userTypes: null
};
// 人员数据
this.baseUserList = [];
// 是否全选人员
this.allUserCheck = false;
// 已选择的联系人
this.selectedContacts = [];
// 年级数据
this.gradeList = [];
this.gradeParams = [];
}
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
if (this.data.onlyStudent === true) {
this.baseUserParams.userTypes = '2,3';
this.dtPullToRefreshStyle = { height: window.innerHeight - 44 - 51 - 44 + 'px' };
this.initDeptOnlyStu();
this.queryGrade();
}
else {
this.baseUserParams.userTypes = this.data.userTypes;
this.dtPullToRefreshStyle = { height: window.innerHeight - 44 - 51 + 'px' };
this.initDept();
}
};
// 查询部门树
// 查询部门树
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.initDept =
// 查询部门树
/**
* @return {?}
*/
function () {
var _this = this;
this.deptList = [];
this.deptNodes = [];
this.pageLoading = true;
/** @type {?} */
var $temp = this.yzContactsService.getDeptTree(this.data.includeClass, this.data.includeHisClass).subscribe((/**
* @param {?} dept
* @return {?}
*/
function (dept) {
_this.pageLoading = false;
_this.deptNodes = dept;
_this.deptList = JSON.parse(JSON.stringify(_this.deptNodes));
_this.queryDefaultContact();
_this.blDeptTree(_this.deptList);
_this.blDeptTree(_this.deptNodes);
_this.subscribed.push($temp);
}), (/**
* @return {?}
*/
function () {
_this.pageLoading = false;
}));
};
// 查询部门->只选学生
// 查询部门->只选学生
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.initDeptOnlyStu =
// 查询部门->只选学生
/**
* @return {?}
*/
function () {
var _this = this;
this.deptList = [];
this.deptNodes = [];
this.pageLoading = true;
/** @type {?} */
var gradeId = null;
if (this.gradeParams.length > 0) {
gradeId = this.gradeParams[0].value;
}
/** @type {?} */
var $temp = this.yzContactsService.getDeptTreeOnlyStu(gradeId, this.data.includeClass, this.data.includeHisClass).subscribe((/**
* @param {?} dept
* @return {?}
*/
function (dept) {
_this.pageLoading = false;
_this.deptNodes = dept;
_this.deptList = JSON.parse(JSON.stringify(_this.deptNodes));
_this.queryDefaultContact();
_this.blDeptTree(_this.deptList);
_this.blDeptTree(_this.deptNodes);
_this.subscribed.push($temp);
}), (/**
* @return {?}
*/
function () {
_this.pageLoading = false;
}));
};
// 查询年级
// 查询年级
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.queryGrade =
// 查询年级
/**
* @return {?}
*/
function () {
var _this = this;
this.gradeList = [];
this.pageLoading = true;
/** @type {?} */
var $temp = this.yzContactsService.getGrade().subscribe((/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.pageLoading = false;
_this.gradeList = [];
data.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
if (item.enable !== 0 && item.enable !== null) {
_this.gradeList.push({
value: item.openId,
label: item.name
});
}
}));
_this.gradeList.unshift({
value: null,
label: '全部'
});
_this.subscribed.push($temp);
}), (/**
* @return {?}
*/
function () {
_this.pageLoading = false;
_this.gradeList.unshift({
value: null,
label: '全部'
});
}));
};
// 遍历部门树,确定叶子节点
// 遍历部门树,确定叶子节点
/**
* @param {?} tree
* @return {?}
*/
YzSelectContactsComponent.prototype.blDeptTree =
// 遍历部门树,确定叶子节点
/**
* @param {?} tree
* @return {?}
*/
function (tree) {
var _this = this;
if (tree && tree.length && tree.length > 0) {
tree.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
item.expanded = true;
if (item.children === null || item.children.length === 0) {
item['isLeaf'] = true;
}
else {
item['isLeaf'] = false;
}
_this.blDeptTree(item.children);
}));
}
};
// 查询默认已被选择人员的信息
// 查询默认已被选择人员的信息
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.queryDefaultContact =
// 查询默认已被选择人员的信息
/**
* @return {?}
*/
function () {
var _this = this;
if (this.data.defaultContacts && this.data.defaultContacts.length > 0) {
/** @type {?} */
var userIdsArray_1 = [];
this.data.defaultContacts.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
if (item.userId) {
userIdsArray_1.push(item.userId);
}
}));
this.pageLoading = true;
/** @type {?} */
var $temp_1 = this.yzContactsService.getUserByUserIds(userIdsArray_1).subscribe((/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.pageLoading = false;
_this.selectedContacts = data;
_this.queryBaseUser();
_this.subscribed.push($temp_1);
}), (/**
* @return {?}
*/
function () {
_this.pageLoading = false;
}));
}
else {
this.queryBaseUser();
}
};
// 查询人员列表
// 查询人员列表
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.queryBaseUser =
// 查询人员列表
/**
* @return {?}
*/
function () {
var _this = this;
this.pageLoading = true;
/** @type {?} */
var $temp = this.yzContactsService.getBaseUser(this.baseUserParams.pageNum, this.baseUserParams.pageSize, this.baseUserParams.realName, this.baseUserParams.deptId, this.baseUserParams.userTypes).subscribe((/**
* @param {?} data
* @return {?}
*/
function (data) {
var _a;
_this.pageLoading = false;
_this.baseUserParams.total = data.total;
(_a = _this.baseUserList).push.apply(_a, tslib_1.__spread(data.list));
_this.baseUserList.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
item['checked'] = false;
item['disabled'] = false;
if (!item.dept) {
item.dept = { deptName: '暂无部门' };
}
if (!item.realName) {
item.realName = '暂无姓名';
}
if (!item.userCode) {
item.realName = '暂无学/工号';
}
if (!item.roles) {
item.roles = [];
item.rolesData = '暂无角色';
}
else {
/** @type {?} */
var roleArray_1 = [];
item.roles.forEach((/**
* @param {?} value
* @return {?}
*/
function (value) {
roleArray_1.push(value.roleName);
}));
item.rolesData = roleArray_1.toString();
}
_this.selectedContacts.forEach((/**
* @param {?} value
* @return {?}
*/
function (value) {
if (value.userId === item.userId) {
item['checked'] = true;
}
}));
}));
_this.isMaxCount();
_this.subscribed.push($temp);
}), (/**
* @return {?}
*/
function () {
_this.pageLoading = false;
}));
};
// 刷新回调函数
// 刷新回调函数
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.pullToRefresh =
// 刷新回调函数
/**
* @return {?}
*/
function () {
if (this.baseUserList.length < this.baseUserParams.total) {
this.baseUserParams.pageNum++;
this.queryBaseUser();
}
};
// 根据用户姓名即时搜索人员
// 根据用户姓名即时搜索人员
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.queryUserByRealName =
// 根据用户姓名即时搜索人员
/**
* @return {?}
*/
function () {
this.baseUserParams.pageNum = 1;
this.baseUserList = [];
this.queryBaseUser();
};
// 取消——根据用户姓名即时搜索人员
// 取消——根据用户姓名即时搜索人员
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.cancelQueUserByRealName =
// 取消——根据用户姓名即时搜索人员
/**
* @return {?}
*/
function () {
this.baseUserParams.realName = null;
this.baseUserParams.pageNum = 1;
this.baseUserList = [];
this.queryBaseUser();
};
// 查询全部人员
// 查询全部人员
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.viewAllList =
// 查询全部人员
/**
* @return {?}
*/
function () {
this.deptList = JSON.parse(JSON.stringify(this.deptNodes));
this.deptBarList = [];
this.baseUserParams.deptId = '';
this.baseUserParams.pageNum = 1;
this.baseUserList = [];
this.queryBaseUser();
};
// 顶部面包屑查看部门详细
// 顶部面包屑查看部门详细
/**
* @param {?} item
* @param {?} index
* @return {?}
*/
YzSelectContactsComponent.prototype.deptBarviewList =
// 顶部面包屑查看部门详细
/**
* @param {?} item
* @param {?} index
* @return {?}
*/
function (item, index) {
if (index != this.deptBarList.length - 1) {
this.deptList = item.children;
this.deptBarList.length = index + 1;
this.baseUserParams.deptId = item.key;
this.baseUserParams.pageNum = 1;
this.baseUserList = [];
this.queryBaseUser();
}
};
// 查看子部门 -> 查询当前部门人员
// 查看子部门 -> 查询当前部门人员
/**
* @param {?} item
* @return {?}
*/
YzSelectContactsComponent.prototype.viewDeptChildrenList =
// 查看子部门 -> 查询当前部门人员
/**
* @param {?} item
* @return {?}
*/
function (item) {
if (item.isLeaf) { // 是叶子节点,无子部门
this.deptList = [];
}
else {
this.deptList = item.children;
}
this.deptBarList.push(item);
this.baseUserParams.deptId = item.key;
this.baseUserParams.pageNum = 1;
this.baseUserList = [];
this.queryBaseUser();
};
// 人员选择变化的回调
// 人员选择变化的回调
/**
* @param {?} $event
* @return {?}
*/
YzSelectContactsComponent.prototype.userCheckedChange =
// 人员选择变化的回调
/**
* @param {?} $event
* @return {?}
*/
function ($event) {
if ($event.checked) { // 选中
this.allUserCheck = this.baseUserList.every((/**
* @param {?} item
* @return {?}
*/
function (item) {
return item.checked === true;
}));
}
else { // 取消
// 取消
/** @type {?} */
var itemIndex_1 = 0;
this.selectedContacts.forEach((/**
* @param {?} value
* @param {?} index
* @return {?}
*/
function (value, index) {
if (value.userId === $event.value) {
itemIndex_1 = index;
}
}));
this.deleteContact($event.value, itemIndex_1);
}
this.addBaseUser();
};
// 将人员列表中选中项添加至已选择的人员列表中
// 将人员列表中选中项添加至已选择的人员列表中
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.addBaseUser =
// 将人员列表中选中项添加至已选择的人员列表中
/**
* @return {?}
*/
function () {
var _this = this;
this.baseUserList.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var hasThisMen = _this.selectedContacts.some((/**
* @param {?} value
* @return {?}
*/
function (value) {
return value.userId === item.userId;
}));
if (item.checked && !hasThisMen) {
_this.selectedContacts.push(item);
}
}));
this.isMaxCount();
};
// 人数选择达到最大值
// 人数选择达到最大值
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.isMaxCount =
// 人数选择达到最大值
/**
* @return {?}
*/
function () {
var _this = this;
if (this.data.count > 0 && this.selectedContacts.length >= this.data.count) {
this.selectedContacts.length = this.data.count;
this.baseUserList.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var hasThisUser = _this.selectedContacts.some((/**
* @param {?} value
* @return {?}
*/
function (value) {
return item.userId === value.userId;
}));
if (!hasThisUser) {
item.checked = false;
item.disabled = true;
}
}));
}
else {
this.baseUserList.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
item.disabled = false;
}));
}
if (this.baseUserList.length == 0) {
this.allUserCheck = false;
}
else {
this.allUserCheck = this.baseUserList.every((/**
* @param {?} item
* @return {?}
*/
function (item) {
return item.checked === true;
}));
}
};
// 删除联系人
// 删除联系人
/**
* @param {?} id
* @param {?} index
* @return {?}
*/
YzSelectContactsComponent.prototype.deleteContact =
// 删除联系人
/**
* @param {?} id
* @param {?} index
* @return {?}
*/
function (id, index) {
this.selectedContacts.splice(index, 1);
this.baseUserList.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
if (item.userId === id) {
item.checked = false;
}
}));
if (this.baseUserList.length == 0) {
this.allUserCheck = false;
}
else {
this.allUserCheck = this.baseUserList.every((/**
* @param {?} item
* @return {?}
*/
function (item) {
return item.checked === true;
}));
}
};
// 全选
// 全选
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.allSelect =
// 全选
/**
* @return {?}
*/
function () {
this.allUserCheck = true;
this.baseUserList.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
item.checked = true;
}));
this.addBaseUser();
};
// 取消全选
// 取消全选
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.cancelAllSelect =
// 取消全选
/**
* @return {?}
*/
function () {
var _this = this;
this.allUserCheck = false;
this.baseUserList.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var itemIndex = 0;
_this.selectedContacts.forEach((/**
* @param {?} value
* @param {?} index
* @return {?}
*/
function (value, index) {
if (value.userId === item.userId) {
itemIndex = index;
}
}));
_this.deleteContact(item.userId, itemIndex);
}));
};
// 切换年级
// 切换年级
/**
* @param {?} $event
* @return {?}
*/
YzSelectContactsComponent.prototype.onChangeGrade =
// 切换年级
/**
* @param {?} $event
* @return {?}
*/
function ($event) {
if ($event && $event.length && $event.length > 0) {
this.gradeParams = $event;
}
else {
this.gradeParams = [{
value: null,
label: '全部'
}];
}
this.deptBarList = [];
this.baseUserParams.deptId = '';
this.baseUserParams.pageNum = 1;
this.baseUserList = [];
this.initDeptOnlyStu();
};
// 点“完成”按钮,完成人员选择
// 点“完成”按钮,完成人员选择
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.confirmSelect =
// 点“完成”按钮,完成人员选择
/**
* @return {?}
*/
function () {
this.dialogRef.close(this.selectedContacts);
};
/**
* @return {?}
*/
YzSelectContactsComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.subscribed.forEach((/**
* @param {?} sub
* @return {?}
*/
function (sub) {
sub.unsubscribe();
}));
this.modalRefCpt.forEach((/**
* @param {?} ref
* @return {?}
*/
function (ref) {
ref.destroy();
}));
};
YzSelectContactsComponent.decorators = [
{ type: Component, args: [{
selector: 'yz-select-contacts',
template: "<yz-loading-mask *ngIf=\"pageLoading\"></yz-loading-mask>\r\n<div class=\"yz-select-contacts\">\r\n <div class=\"yz-select-contacts-search\">\r\n <SearchBar [placeholder]=\"'\u8BF7\u8F93\u5165\u59D3\u540D\u2026\u2026'\"\r\n [(ngModel)]=\"baseUserParams.realName\"\r\n (onSubmit)=\"queryUserByRealName()\"\r\n (onCancel)=\"cancelQueUserByRealName()\"\r\n (onClear)=\"cancelQueUserByRealName()\"></SearchBar>\r\n </div>\r\n <div class=\"yz-select-contacts-grade\" *ngIf=\"data.onlyStudent\">\r\n <List [className]=\"'yz-select-contact-list'\">\r\n <ListItem\r\n Picker\r\n [extra]=\"gradeParams.length>0?gradeParams[0].label:'\u8BF7\u9009\u62E9\u5E74\u7EA7\u2026\u2026'\"\r\n [arrow]=\"'horizontal'\"\r\n [data]=\"gradeList\"\r\n [(ngModel)]=\"gradeParams\"\r\n (ngModelChange)=\"onChangeGrade($event)\">\r\n \u5E74\u7EA7\uFF1A\r\n </ListItem>\r\n </List>\r\n </div>\r\n\r\n\r\n <PullToRefresh [ngStyle]=\"dtPullToRefreshStyle\"\r\n [direction]=\"'up'\"\r\n (onRefresh)=\"pullToRefresh()\"\r\n >\r\n <div class=\"yz-select-contact-dept-bar\">\r\n <a (click)=\"viewAllList()\">\u5168\u90E8</a>\r\n <ng-container *ngFor=\"let item of deptBarList;let i=index;\">\r\n <a (click)=\"deptBarviewList(item, i)\">>{{item?.title}}</a>\r\n </ng-container>\r\n </div>\r\n\r\n <!--\u90E8\u95E8-->\r\n <List [className]=\"'yz-select-contact-list'\" *ngIf=\"deptList.length>0\">\r\n <ListItem multipleLine [arrow]=\"'horizontal'\"\r\n [thumb]=\"'./assets/imgs/icon_dept.png'\"\r\n *ngFor=\"let item of deptList\"\r\n (onClick)=\"viewDeptChildrenList(item)\">\r\n {{item?.title || '--'}}\r\n </ListItem>\r\n </List>\r\n\r\n <!--\u4EBA\u5458-->\r\n <List [className]=\"'contact-list'\" *ngIf=\"baseUserList.length>0\">\r\n <CheckboxItem\r\n *ngFor=\"let item of baseUserList\"\r\n [name]=\"item.realName\"\r\n [value]=\"item.userId\"\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled\"\r\n (onChange)=\"userCheckedChange($event)\"\r\n >\r\n {{ item.realName }}<small *ngIf=\"item?.userCode\">({{item.userCode}})</small>\r\n </CheckboxItem>\r\n </List>\r\n </PullToRefresh>\r\n\r\n\r\n <div class=\"yz-select-contacts-btn\">\r\n <div class=\"count-box\">\u5DF2\u9009\u62E9\uFF1A{{selectedContacts.length}} \u4EBA</div>\r\n <div Button [type]=\"'primary'\" [size]=\"'small'\" [inline]=\"true\" (onClick)=\"confirmSelect()\">\u5B8C\u6210</div>\r\n <div Button [type]=\"'ghost'\" [size]=\"'small'\" [inline]=\"true\" *ngIf=\"!allUserCheck\" (onClick)=\"allSelect()\">\u5168\u9009</div>\r\n <div Button [type]=\"'ghost'\" [size]=\"'small'\" [inline]=\"true\" *ngIf=\"allUserCheck\" (onClick)=\"cancelAllSelect()\">\r\n \u53D6\u6D88\u5168\u9009\r\n </div>\r\n </div>\r\n\r\n</div>\r\n",
styles: ["::ng-deep .yz-select-contact-list .am-list-item .am-list-line .am-list-content{font-size:15px}::ng-deep .yz-select-contact-list .am-list-item img{width:34px;height:34px}.yz-select-contact-dept-bar{background:#efeff4;padding:9px 8px}.yz-select-contact-dept-bar a{display:inline-block;color:#1e90ff;margin-bottom:3px;letter-spacing:2px}.yz-select-contact-dept-bar a:last-child{color:#444}::ng-deep .yz-select-contacts-search{width:100%;background:#fff}::ng-deep .yz-select-contacts-search .am-search{background:#fff}::ng-deep .yz-select-contacts-search .am-search-input{background-color:#efeff4}::ng-deep .yz-select-contacts-btn{background:#fff;border-top:1px solid #d9d9d9;position:fixed;bottom:0;left:0;width:100%;padding:10px 0;z-index:5}::ng-deep .yz-select-contacts-btn .am-button-small{display:block;float:right;margin-right:10px}::ng-deep .yz-select-contacts-btn .count-box{display:block;float:left;line-height:30px;margin-left:10px;max-width:calc(100% - 150px);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .yz-select-contacts-panel{position:fixed!important;top:0;left:0;z-index:10;width:100%;height:100%;background:#fff;max-width:unset!important}::ng-deep .yz-select-contacts-panel .mat-dialog-container{padding:0;border-radius:0;transform:none!important}"]
}] }
];
/** @nocollapse */
YzSelectContactsComponent.ctorParameters = function () { return [
{ type: MatDialogRef },
{ type: ModalService },
{ type: YzSelectContactsService },
{ type: ComponentOption, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
]; };
return YzSelectContactsComponent;
}());
export { YzSelectContactsComponent };
if (false) {
/** @type {?} */
YzSelectContactsComponent.prototype.modalRefCpt;
/** @type {?} */
YzSelectContactsComponent.prototype.subscribed;
/** @type {?} */
YzSelectContactsComponent.prototype.dtPullToRefreshStyle;
/** @type {?} */
YzSelectContactsComponent.prototype.deptNodes;
/** @type {?} */
YzSelectContactsComponent.prototype.deptList;
/** @type {?} */
YzSelectContactsComponent.prototype.deptBarList;
/** @type {?} */
YzSelectContactsComponent.prototype.pageLoading;
/** @type {?} */
YzSelectContactsComponent.prototype.baseUserParams;
/** @type {?} */
YzSelectContactsComponent.prototype.baseUserList;
/** @type {?} */
YzSelectContactsComponent.prototype.allUserCheck;
/** @type {?} */
YzSelectContactsComponent.prototype.selectedContacts;
/** @type {?} */
YzSelectContactsComponent.prototype.gradeList;
/** @type {?} */
YzSelectContactsComponent.prototype.gradeParams;
/** @type {?} */
YzSelectContactsComponent.prototype.dialogRef;
/**
* @type {?}
* @private
*/
YzSelectContactsComponent.prototype._modal;
/**
* @type {?}
* @private
*/
YzSelectContactsComponent.prototype.yzContactsService;
/** @type {?} */
YzSelectContactsComponent.prototype.data;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXotc2VsZWN0LWNvbnRhY3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXl1bnphaS1tb2JpbGUvIiwic291cmNlcyI6WyJzZWxlY3QtY29udGFjdHMveXotc2VsZWN0LWNvbnRhY3RzL3l6LXNlbGVjdC1jb250YWN0cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBVyxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU1RCxPQUFPLEVBQW9CLGVBQWUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRixPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRXJFO0lBOENFLG1DQUNTLFNBQWtELEVBQ2pELE1BQW9CLEVBQ3BCLGlCQUEwQyxFQUNsQixJQUFxQjtRQUg5QyxjQUFTLEdBQVQsU0FBUyxDQUF5QztRQUNqRCxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBeUI7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUEzQ3ZELGdCQUFXLEdBQW9CLEVBQUUsQ0FBQztRQUNsQyxlQUFVLEdBQXdCLEVBQUUsQ0FBQztRQUNyQyx5QkFBb0IsR0FBRyxFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFDLENBQUM7O1FBR3JFLGNBQVMsR0FBeUIsRUFBRSxDQUFDOztRQUdyQyxhQUFRLEdBQXlCLEVBQUUsQ0FBQzs7UUFHcEMsZ0JBQVcsR0FBeUIsRUFBRSxDQUFDOztRQUd2QyxnQkFBVyxHQUFZLEtBQUssQ0FBQzs7UUFHN0IsbUJBQWMsR0FBRztZQUNmLEtBQUssRUFB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QywrQ0FBcUM7O0lBQ3JDLHlEQUFxRTs7SUFHckUsOENBQXFDOztJQUdyQyw2Q0FBb0M7O0lBR3BDLGdEQUF1Qzs7SUFHdkMsZ0RBQTZCOztJQUc3QixtREFPRTs7SUFHRixpREFBNEM7O0lBRzVDLGlEQUE4Qjs7SUFHOUIscURBQWdEOztJQUdoRCw4Q0FBd0Q7O0lBQ3hELGdEQUEwRDs7SUFHeEQsOENBQXlEOzs7OztJQUN6RCwyQ0FBNEI7Ozs7O0lBQzVCLHNEQUFrRDs7SUFDbEQseUNBQXFEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge01vZGFsUmVmLCBNb2RhbFNlcnZpY2V9IGZyb20gXCJuZy16b3Jyby1hbnRkLW1vYmlsZVwiO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtCYXNlVXNlckludGVyZmFjZSwgQ29tcG9uZW50T3B0aW9uLCBEZXB0SW50ZXJmYWNlfSBmcm9tIFwiLi9kZXB0LmludGVyZmFjZVwiO1xyXG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge1l6U2VsZWN0Q29udGFjdHNTZXJ2aWNlfSBmcm9tICcuL3l6LXNlbGVjdC1jb250YWN0cy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAneXotc2VsZWN0LWNvbnRhY3RzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4veXotc2VsZWN0LWNvbnRhY3RzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi95ei1zZWxlY3QtY29udGFjdHMuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWXpTZWxlY3RDb250YWN0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgbW9kYWxSZWZDcHQ6IEFycmF5PE1vZGFsUmVmPiA9IFtdO1xyXG4gIHN1YnNjcmliZWQ6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcclxuICBkdFB1bGxUb1JlZnJlc2hTdHlsZSA9IHtoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCAtIDQ0IC0gNTEgKyAncHgnfTtcclxuXHJcbiAgLy8g5oC76YOo6Zeo5pWw5o2uXHJcbiAgZGVwdE5vZGVzOiBBcnJheTxEZXB0SW50ZXJmYWNlPiA9IFtdO1xyXG5cclxuICAvLyDpobXpnaLlsZXnpLrnmoTpg6jpl6jmlbDmja5cclxuICBkZXB0TGlzdDogQXJyYXk8RGVwdEludGVyZmFjZT4gPSBbXTtcclxuXHJcbiAgLy8g6Z2i5YyF5bGRXHJcbiAgZGVwdEJhckxpc3Q6IEFycmF5PERlcHRJbnRlcmZhY2U+ID0gW107XHJcblxyXG4gIC8vIOmhtemdouWKoOi9veS4rVxyXG4gIHBhZ2VMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIOS6uuWRmOWIl+ihqOWPguaVsFxyXG4gIGJhc2VVc2VyUGFyYW1zID0ge1xyXG4gICAgdG90YWw6IDAsXHJcbiAgICBwYWdlU2l6ZTogMjAsXHJcbiAgICBwYWdlTnVtOiAxLFxyXG4gICAgZGVwdElkOiBudWxsLFxyXG4gICAgcmVhbE5hbWU6IG51bGwsXHJcbiAgICB1c2VyVHlwZXM6IG51bGxcclxuICB9O1xyXG5cclxuICAvLyDkurrlkZjmlbDmja5cclxuICBiYXNlVXNlckxpc3Q6IEFycmF5PEJhc2VVc2VySW50ZXJmYWNlPiA9IFtdO1xyXG5cclxuICAvLyDmmK/lkKblhajpgInkurrlkZhcclxuICBhbGxVc2VyQ2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8g5bey6YCJ5oup55qE6IGU57O75Lq6XHJcbiAgc2VsZWN0ZWRDb250YWN0czogQXJyYXk8QmFzZVVzZXJJbnRlcmZhY2U+ID0gW107XHJcblxyXG4gIC8vIOW5tOe6p+aVsOaNrlxyXG4gIGdyYWRlTGlzdDogQXJyYXk8eyB2YWx1ZTogc3RyaW5nLCBsYWJlbDogc3RyaW5nIH0+ID0gW107XHJcbiAgZ3JhZGVQYXJhbXM6IEFycmF5PHsgdmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxZelNlbGVjdENvbnRhY3RzQ29tcG9uZW50PixcclxuICAgIHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHl6Q29udGFjdHNTZXJ2aWNlOiBZelNlbGVjdENvbnRhY3RzU2VydmljZSxcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogQ29tcG9uZW50T3B0aW9uXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEub25seVN0dWRlbnQgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5iYXNlVXNlclBhcmFtcy51c2VyVHlwZXMgPSAnMiwzJztcclxuICAgICAgdGhpcy5kdFB1bGxUb1JlZnJlc2hTdHlsZSA9IHtoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCAtIDQ0IC0gNTEgLSA0NCArICdweCd9O1xyXG4gICAgICB0aGlzLmluaXREZXB0T25seVN0dSgpO1xyXG4gICAgICB0aGlzLnF1ZXJ5R3JhZGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYmFzZVVzZXJQYXJhbXMudXNlclR5cGVzID0gdGhpcy5kYXRhLnVzZXJUeXBlcztcclxuICAgICAgdGhpcy5kdFB1bGxUb1JlZnJlc2hTdHlsZSA9IHtoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCAtIDQ0IC0gNTEgKyAncHgnfTtcclxuICAgICAgdGhpcy5pbml0RGVwdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5p+l6K+i6YOo6Zeo5qCRXHJcbiAgaW5pdERlcHQoKSB7XHJcbiAgICB0aGlzLmRlcHRMaXN0ID0gW107XHJcbiAgICB0aGlzLmRlcHROb2RlcyA9IFtdO1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCAkdGVtcCA9IHRoaXMueXpDb250YWN0c1NlcnZpY2UuZ2V0RGVwdFRyZWUodGhpcy5kYXRhLmluY2x1ZGVDbGFzcywgdGhpcy5kYXRhLmluY2x1ZGVIaXNDbGFzcykuc3Vic2NyaWJlKChkZXB0OiBBcnJheTxEZXB0SW50ZXJmYWNlPikgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZGVwdE5vZGVzID0gZGVwdDtcclxuICAgICAgdGhpcy5kZXB0TGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZXB0Tm9kZXMpKTtcclxuXHJcbiAgICAgIHRoaXMucXVlcnlEZWZhdWx0Q29udGFjdCgpO1xyXG5cclxuICAgICAgdGhpcy5ibERlcHRUcmVlKHRoaXMuZGVwdExpc3QpO1xyXG4gICAgICB0aGlzLmJsRGVwdFRyZWUodGhpcy5kZXB0Tm9kZXMpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZWQucHVzaCgkdGVtcCk7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5p+l6K+i6YOo6ZeoLT7lj6rpgInlrabnlJ9cclxuICBpbml0RGVwdE9ubHlTdHUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlcHRMaXN0ID0gW107XHJcbiAgICB0aGlzLmRlcHROb2RlcyA9IFtdO1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgZ3JhZGVJZCA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5ncmFkZVBhcmFtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGdyYWRlSWQgPSB0aGlzLmdyYWRlUGFyYW1zWzBdLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0ICR0ZW1wID0gdGhpcy55ekNvbnRhY3RzU2VydmljZS5nZXREZXB0VHJlZU9ubHlTdHUoZ3JhZGVJZCwgdGhpcy5kYXRhLmluY2x1ZGVDbGFzcywgdGhpcy5kYXRhLmluY2x1ZGVIaXNDbGFzcykuc3Vic2NyaWJlKChkZXB0OiBBcnJheTxEZXB0SW50ZXJmYWNlPikgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLmRlcHROb2RlcyA9IGRlcHQ7XHJcbiAgICAgIHRoaXMuZGVwdExpc3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVwdE5vZGVzKSk7XHJcbiAgICAgIHRoaXMucXVlcnlEZWZhdWx0Q29udGFjdCgpO1xyXG5cclxuICAgICAgdGhpcy5ibERlcHRUcmVlKHRoaXMuZGVwdExpc3QpO1xyXG4gICAgICB0aGlzLmJsRGVwdFRyZWUodGhpcy5kZXB0Tm9kZXMpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpYmVkLnB1c2goJHRlbXApO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOafpeivouW5tOe6p1xyXG4gIHF1ZXJ5R3JhZGUoKSB7XHJcbiAgICB0aGlzLmdyYWRlTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCAkdGVtcCA9IHRoaXMueXpDb250YWN0c1NlcnZpY2UuZ2V0R3JhZGUoKS5zdWJzY3JpYmUoKGRhdGE6IEFycmF5PGFueT4pID0+IHtcclxuICAgICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmdyYWRlTGlzdCA9IFtdO1xyXG4gICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpZihpdGVtLmVuYWJsZSAhPT0gMCAmJiBpdGVtLmVuYWJsZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgIC