ng-yunzai-mobile
Version:
1. 修改wechat.micro.ts
627 lines • 49.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: select-contacts/yz-role-select-contacts/yz-role-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 { MAT_DIALOG_DATA, MatDialogRef } from "@angular/material/dialog";
import { YzSelectContactsService } from "../yz-select-contacts/yz-select-contacts.service";
import { YzRoleSelectContactsService } from "./yz-role-select-contacts.service";
import { ComponentOption } from "./groupRole.interface";
var YzRoleSelectContactsComponent = /** @class */ (function () {
function YzRoleSelectContactsComponent(dialogRef, _modal, yzContactsService, yzRoleContactsService, data) {
this.dialogRef = dialogRef;
this._modal = _modal;
this.yzContactsService = yzContactsService;
this.yzRoleContactsService = yzRoleContactsService;
this.data = data;
this.modalRefCpt = [];
this.subscribed = [];
this.dtPullToRefreshStyle = { height: window.innerHeight - 44 - 51 - 44 + 'px' };
// 总角色组数据
this.roleNodes = [];
// 页面展示的角色组数据
this.groupRoleList = [];
// 当前角色
this.currentRole = [];
// 页面加载中
this.pageLoading = false;
// 人员列表参数
this.baseUserParams = {
total: 0,
pageSize: 20,
pageNum: 1,
realName: null
};
// 人员数据
this.baseUserList = [];
// 是否全选人员
this.allUserCheck = false;
// 已选择的联系人
this.selectedContacts = [];
}
/**
* @return {?}
*/
YzRoleSelectContactsComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.initGroupRole();
};
// 查询角色组
// 查询角色组
/**
* @return {?}
*/
YzRoleSelectContactsComponent.prototype.initGroupRole =
// 查询角色组
/**
* @return {?}
*/
function () {
var _this = this;
this.groupRoleList = [];
this.roleNodes = [];
this.pageLoading = true;
/** @type {?} */
var $temp = this.yzRoleContactsService.getGroupRole(this.data.roleGroupCode).subscribe((/**
* @param {?} role
* @return {?}
*/
function (role) {
_this.pageLoading = false;
_this.roleNodes = role;
_this.roleNodes.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var obj = {
value: item.key,
label: item.title,
children: []
};
if (item.children && item.children.length > 0) {
item.children.forEach((/**
* @param {?} role
* @return {?}
*/
function (role) {
obj.children.push({
value: role.key,
label: role.title,
});
}));
}
_this.groupRoleList.push(obj);
}));
_this.groupRoleList.unshift({
value: null,
label: '全部'
});
if (_this.roleNodes.length > 0) {
if (_this.roleNodes[0].children.length > 0) {
_this.currentRole = [_this.groupRoleList[1].children[0]];
}
}
_this.queryDefaultContact();
_this.subscribed.push($temp);
}), (/**
* @return {?}
*/
function () {
_this.pageLoading = false;
}));
};
// 查询默认已被选择人员的信息
// 查询默认已被选择人员的信息
/**
* @return {?}
*/
YzRoleSelectContactsComponent.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 {?}
*/
YzRoleSelectContactsComponent.prototype.queryBaseUser =
// 查询人员列表
/**
* @return {?}
*/
function () {
var _this = this;
this.pageLoading = true;
/** @type {?} */
var $temp = this.yzRoleContactsService.getBaseUser(this.baseUserParams.pageNum, this.baseUserParams.pageSize, this.baseUserParams.realName, this.currentRole.length > 0 ? this.currentRole[this.currentRole.length - 1].value : null, this.data.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 {?}
*/
YzRoleSelectContactsComponent.prototype.pullToRefresh =
// 刷新回调函数
/**
* @return {?}
*/
function () {
if (this.baseUserList.length < this.baseUserParams.total) {
this.baseUserParams.pageNum++;
this.queryBaseUser();
}
};
// 根据用户姓名即时搜索人员
// 根据用户姓名即时搜索人员
/**
* @return {?}
*/
YzRoleSelectContactsComponent.prototype.queryUserByRealName =
// 根据用户姓名即时搜索人员
/**
* @return {?}
*/
function () {
this.baseUserParams.pageNum = 1;
this.baseUserList = [];
this.queryBaseUser();
};
// 取消——根据用户姓名即时搜索人员
// 取消——根据用户姓名即时搜索人员
/**
* @return {?}
*/
YzRoleSelectContactsComponent.prototype.cancelQueUserByRealName =
// 取消——根据用户姓名即时搜索人员
/**
* @return {?}
*/
function () {
this.baseUserParams.realName = null;
this.baseUserParams.pageNum = 1;
this.baseUserList = [];
this.queryBaseUser();
};
// 切换角色
// 切换角色
/**
* @param {?} $event
* @return {?}
*/
YzRoleSelectContactsComponent.prototype.onChangeRole =
// 切换角色
/**
* @param {?} $event
* @return {?}
*/
function ($event) {
if ($event && $event.length && $event.length > 0) {
this.currentRole = $event;
}
else {
this.currentRole = [{
value: null,
label: '全部'
}];
}
this.baseUserParams.pageNum = 1;
this.baseUserList = [];
this.queryBaseUser();
};
// 人员选择变化的回调
// 人员选择变化的回调
/**
* @param {?} $event
* @return {?}
*/
YzRoleSelectContactsComponent.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 {?}
*/
YzRoleSelectContactsComponent.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 {?}
*/
YzRoleSelectContactsComponent.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 {?}
*/
YzRoleSelectContactsComponent.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 {?}
*/
YzRoleSelectContactsComponent.prototype.allSelect =
// 全选
/**
* @return {?}
*/
function () {
this.allUserCheck = true;
this.baseUserList.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
item.checked = true;
}));
this.addBaseUser();
};
// 取消全选
// 取消全选
/**
* @return {?}
*/
YzRoleSelectContactsComponent.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);
}));
};
// 点“完成”按钮,完成人员选择
// 点“完成”按钮,完成人员选择
/**
* @return {?}
*/
YzRoleSelectContactsComponent.prototype.confirmSelect =
// 点“完成”按钮,完成人员选择
/**
* @return {?}
*/
function () {
this.dialogRef.close(this.selectedContacts);
};
/**
* @return {?}
*/
YzRoleSelectContactsComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.subscribed.forEach((/**
* @param {?} sub
* @return {?}
*/
function (sub) {
sub.unsubscribe();
}));
this.modalRefCpt.forEach((/**
* @param {?} ref
* @return {?}
*/
function (ref) {
ref.destroy();
}));
};
YzRoleSelectContactsComponent.decorators = [
{ type: Component, args: [{
selector: 'yz-role-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\">\r\n <List [className]=\"'yz-select-contact-list'\">\r\n <ListItem\r\n Picker\r\n [extra]=\"currentRole.length>0?currentRole[currentRole.length-1].label:'\u8BF7\u9009\u62E9\u89D2\u8272\u2026\u2026'\"\r\n [arrow]=\"'horizontal'\"\r\n [data]=\"groupRoleList\"\r\n [(ngModel)]=\"currentRole\"\r\n (ngModelChange)=\"onChangeRole($event)\">\r\n \u89D2\u8272\uFF1A\r\n </ListItem>\r\n </List>\r\n </div>\r\n\r\n\r\n\r\n <PullToRefresh [ngStyle]=\"dtPullToRefreshStyle\"\r\n [direction]=\"'up'\"\r\n (onRefresh)=\"pullToRefresh()\"\r\n >\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> <span> {{ item?.dept?.deptName }}</span>\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}::ng-deep .contact-list .am-list-content span{font-size:14px;float:right;color:#888}::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-role-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-role-select-contacts-panel .mat-dialog-container{padding:0;border-radius:0;transform:none!important}"]
}] }
];
/** @nocollapse */
YzRoleSelectContactsComponent.ctorParameters = function () { return [
{ type: MatDialogRef },
{ type: ModalService },
{ type: YzSelectContactsService },
{ type: YzRoleSelectContactsService },
{ type: ComponentOption, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
]; };
return YzRoleSelectContactsComponent;
}());
export { YzRoleSelectContactsComponent };
if (false) {
/** @type {?} */
YzRoleSelectContactsComponent.prototype.modalRefCpt;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.subscribed;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.dtPullToRefreshStyle;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.roleNodes;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.groupRoleList;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.currentRole;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.pageLoading;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.baseUserParams;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.baseUserList;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.allUserCheck;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.selectedContacts;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.dialogRef;
/**
* @type {?}
* @private
*/
YzRoleSelectContactsComponent.prototype._modal;
/**
* @type {?}
* @private
*/
YzRoleSelectContactsComponent.prototype.yzContactsService;
/**
* @type {?}
* @private
*/
YzRoleSelectContactsComponent.prototype.yzRoleContactsService;
/** @type {?} */
YzRoleSelectContactsComponent.prototype.data;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXotcm9sZS1zZWxlY3QtY29udGFjdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcteXVuemFpLW1vYmlsZS8iLCJzb3VyY2VzIjpbInNlbGVjdC1jb250YWN0cy95ei1yb2xlLXNlbGVjdC1jb250YWN0cy95ei1yb2xlLXNlbGVjdC1jb250YWN0cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBVyxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU1RCxPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQ3pGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBcUIsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHMUU7SUF5Q0UsdUNBQ1MsU0FBc0QsRUFDckQsTUFBb0IsRUFDcEIsaUJBQTBDLEVBQzFDLHFCQUFrRCxFQUMxQixJQUFxQjtRQUo5QyxjQUFTLEdBQVQsU0FBUyxDQUE2QztRQUNyRCxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBeUI7UUFDMUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUE2QjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQXZDdkQsZ0JBQVcsR0FBb0IsRUFBRSxDQUFDO1FBQ2xDLGVBQVUsR0FBd0IsRUFBRSxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFDLENBQUM7O1FBRzFFLGNBQVMsR0FBOEIsRUFBRSxDQUFDOztR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QztJQUM5QyxDQUFDOzs7O0lBRUQsbURBQVc7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQyxHQUFpQjtZQUN4QyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxFQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLEdBQWE7WUFDckMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Z0JBMVVGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyw0MEVBQXVEOztpQkFFeEQ7Ozs7Z0JBVndCLFlBQVk7Z0JBRm5CLFlBQVk7Z0JBR3RCLHVCQUF1QjtnQkFDdkIsMkJBQTJCO2dCQUNQLGVBQWUsdUJBaUR0QyxNQUFNLFNBQUMsZUFBZTs7SUE2UjNCLG9DQUFDO0NBQUEsQUEzVUQsSUEyVUM7U0F0VVksNkJBQTZCOzs7SUFFeEMsb0RBQWtDOztJQUNsQyxtREFBcUM7O0lBQ3JDLDZEQUEwRTs7SUFHMUUsa0RBQTBDOztJQUcxQyxzREFBZ0g7O0lBR2hILG9EQUEwRDs7SUFHMUQsb0RBQTZCOztJQUc3Qix1REFLRTs7SUFHRixxREFBNEM7O0lBRzVDLHFEQUE4Qjs7SUFHOUIseURBQWdEOztJQUk5QyxrREFBNkQ7Ozs7O0lBQzdELCtDQUE0Qjs7Ozs7SUFDNUIsMERBQWtEOzs7OztJQUNsRCw4REFBMEQ7O0lBQzFELDZDQUFxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNb2RhbFJlZiwgTW9kYWxTZXJ2aWNlfSBmcm9tIFwibmctem9ycm8tYW50ZC1tb2JpbGVcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWZ9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtZelNlbGVjdENvbnRhY3RzU2VydmljZX0gZnJvbSBcIi4uL3l6LXNlbGVjdC1jb250YWN0cy95ei1zZWxlY3QtY29udGFjdHMuc2VydmljZVwiO1xyXG5pbXBvcnQge1l6Um9sZVNlbGVjdENvbnRhY3RzU2VydmljZX0gZnJvbSBcIi4veXotcm9sZS1zZWxlY3QtY29udGFjdHMuc2VydmljZVwiO1xyXG5pbXBvcnQge0dyb3VwUm9sZUludGVyZmFjZSwgQ29tcG9uZW50T3B0aW9ufSBmcm9tIFwiLi9ncm91cFJvbGUuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7QmFzZVVzZXJJbnRlcmZhY2V9IGZyb20gXCIuLi95ei1zZWxlY3QtY29udGFjdHMvZGVwdC5pbnRlcmZhY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAneXotcm9sZS1zZWxlY3QtY29udGFjdHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi95ei1yb2xlLXNlbGVjdC1jb250YWN0cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4veXotcm9sZS1zZWxlY3QtY29udGFjdHMuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWXpSb2xlU2VsZWN0Q29udGFjdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIG1vZGFsUmVmQ3B0OiBBcnJheTxNb2RhbFJlZj4gPSBbXTtcclxuICBzdWJzY3JpYmVkOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcbiAgZHRQdWxsVG9SZWZyZXNoU3R5bGUgPSB7aGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQgLSA0NCAtIDUxIC0gNDQgKyAncHgnfTtcclxuXHJcbiAgLy8g5oC76KeS6Imy57uE5pWw5o2uXHJcbiAgcm9sZU5vZGVzOiBBcnJheTxHcm91cFJvbGVJbnRlcmZhY2U+ID0gW107XHJcblxyXG4gIC8vIOmhtemdouWxleekuueahOinkuiJsue7hOaVsOaNrlxyXG4gIGdyb3VwUm9sZUxpc3Q6IEFycmF5PHsgdmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZywgY2hpbGRyZW4/OiBBcnJheTx7IHZhbHVlOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcgfT4gfT4gPSBbXTtcclxuXHJcbiAgLy8g5b2T5YmN6KeS6ImyXHJcbiAgY3VycmVudFJvbGU6IEFycmF5PHsgdmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAvLyDpobXpnaLliqDovb3kuK1cclxuICBwYWdlTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDkurrlkZjliJfooajlj4LmlbBcclxuICBiYXNlVXNlclBhcmFtcyA9IHtcclxuICAgIHRvdGFsOiAwLFxyXG4gICAgcGFnZVNpemU6IDIwLFxyXG4gICAgcGFnZU51bTogMSxcclxuICAgIHJlYWxOYW1lOiBudWxsXHJcbiAgfTtcclxuXHJcbiAgLy8g5Lq65ZGY5pWw5o2uXHJcbiAgYmFzZVVzZXJMaXN0OiBBcnJheTxCYXNlVXNlckludGVyZmFjZT4gPSBbXTtcclxuXHJcbiAgLy8g5piv5ZCm5YWo6YCJ5Lq65ZGYXHJcbiAgYWxsVXNlckNoZWNrOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIOW3sumAieaLqeeahOiBlOezu+S6ulxyXG4gIHNlbGVjdGVkQ29udGFjdHM6IEFycmF5PEJhc2VVc2VySW50ZXJmYWNlPiA9IFtdO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8WXpSb2xlU2VsZWN0Q29udGFjdHNDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfbW9kYWw6IE1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgeXpDb250YWN0c1NlcnZpY2U6IFl6U2VsZWN0Q29udGFjdHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB5elJvbGVDb250YWN0c1NlcnZpY2U6IFl6Um9sZVNlbGVjdENvbnRhY3RzU2VydmljZSxcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogQ29tcG9uZW50T3B0aW9uXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdEdyb3VwUm9sZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8g5p+l6K+i6KeS6Imy57uEXHJcbiAgaW5pdEdyb3VwUm9sZSgpIHtcclxuICAgIHRoaXMuZ3JvdXBSb2xlTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5yb2xlTm9kZXMgPSBbXTtcclxuICAgIHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgJHRlbXAgPSB0aGlzLnl6Um9sZUNvbnRhY3RzU2VydmljZS5nZXRHcm91cFJvbGUodGhpcy5kYXRhLnJvbGVHcm91cENvZGUpLnN1YnNjcmliZSgocm9sZTogQXJyYXk8R3JvdXBSb2xlSW50ZXJmYWNlPikgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucm9sZU5vZGVzID0gcm9sZTtcclxuICAgICAgdGhpcy5yb2xlTm9kZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgIHZhbHVlOiBpdGVtLmtleSxcclxuICAgICAgICAgIGxhYmVsOiBpdGVtLnRpdGxlLFxyXG4gICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgocm9sZSkgPT4ge1xyXG4gICAgICAgICAgICBvYmouY2hpbGRyZW4ucHVzaCh7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IHJvbGUua2V5LFxyXG4gICAgICAgICAgICAgIGxhYmVsOiByb2xlLnRpdGxlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JvdXBSb2xlTGlzdC5wdXNoKG9iaik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5ncm91cFJvbGVMaXN0LnVuc2hpZnQoe1xyXG4gICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICAgIGxhYmVsOiAn5YWo6YOoJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnJvbGVOb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucm9sZU5vZGVzWzBdLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudFJvbGUgPSBbdGhpcy5ncm91cFJvbGVMaXN0WzFdLmNoaWxkcmVuWzBdXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucXVlcnlEZWZhdWx0Q29udGFjdCgpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpYmVkLnB1c2goJHRlbXApO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvLyDmn6Xor6Lpu5jorqTlt7LooqvpgInmi6nkurrlkZjnmoTkv6Hmga9cclxuICBxdWVyeURlZmF1bHRDb250YWN0KCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5kZWZhdWx0Q29udGFjdHMgJiYgdGhpcy5kYXRhLmRlZmF1bHRDb250YWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHVzZXJJZHNBcnJheTogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICB0aGlzLmRhdGEuZGVmYXVsdENvbnRhY3RzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbS51c2VySWQpIHtcclxuICAgICAgICAgIHVzZXJJZHNBcnJheS5wdXNoKGl0ZW0udXNlcklkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgY29uc3QgJHRlbXAgPSB0aGlzLnl6Q29udGFjdHNTZXJ2aWNlLmdldFVzZXJCeVVzZXJJZHModXNlcklkc0FycmF5KS5zdWJzY3JpYmUoKGRhdGE6IEFycmF5PEJhc2VVc2VySW50ZXJmYWNlPikgPT4ge1xyXG4gICAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29udGFjdHMgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMucXVlcnlCYXNlVXNlcigpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlZC5wdXNoKCR0ZW1wKTtcclxuICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnF1ZXJ5QmFzZVVzZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOafpeivouS6uuWRmOWIl+ihqFxyXG4gIHF1ZXJ5QmFzZVVzZXIoKSB7XHJcbiAgICB0aGlzLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0ICR0ZW1wID0gdGhpcy55elJvbGVDb250YWN0c1NlcnZpY2UuZ2V0QmFzZVVzZXIoXHJcbiAgICAgIHRoaXMuYmFzZVVzZXJQYXJhbXMucGFnZU51bSxcclxuICAgICAgdGhpcy5iYXNlVXNlclBhcmFtcy5wYWdlU2l6ZSxcclxuICAgICAgdGhpcy5iYXNlVXNlclBhcmFtcy5yZWFsTmFtZSxcclxuICAgICAgdGhpcy5jdXJyZW50Um9sZS5sZW5ndGggPiAwID8gdGhpcy5jdXJyZW50Um9sZVt0aGlzLmN1cnJlbnRSb2xlLmxlbmd0aC0xXS52YWx1ZSA6IG51bGwsXHJcbiAgICAgIHRoaXMuZGF0YS51c2VyVHlwZXNcclxuICAgICkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnRvdGFsID0gZGF0YS50b3RhbDtcclxuICAgICAgdGhpcy5iYXNlVXNlckxpc3QucHVzaCguLi5kYXRhLmxpc3QpO1xyXG4gICAgICB0aGlzLmJhc2VVc2VyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbVsnY2hlY2tlZCddID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbVsnZGlzYWJsZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghaXRlbS5kZXB0KSB7XHJcbiAgICAgICAgICBpdGVtLmRlcHQgPSB7ZGVwdE5hbWU6ICfmmoLml6Dpg6jpl6gnfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWl0ZW0ucmVhbE5hbWUpIHtcclxuICAgICAgICAgIGl0ZW0ucmVhbE5hbWUgPSAn5pqC5peg5aeT5ZCNJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpdGVtLnVzZXJDb2RlKSB7XHJcbiAgICAgICAgICBpdGVtLnJlYWxOYW1lID0gJ+aaguaXoOWtpi/lt6Xlj7cnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXRlbS5yb2xlcykge1xyXG4gICAgICAgICAgaXRlbS5yb2xlcyA9IFtdO1xyXG4gICAgICAgICAgaXRlbS5yb2xlc0RhdGEgPSAn5pqC5peg6KeS6ImyJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgcm9sZUFycmF5ID0gW107XHJcbiAgICAgICAgICBpdGVtLnJvbGVzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHJvbGVBcnJheS5wdXNoKHZhbHVlLnJvbGVOYW1lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaXRlbS5yb2xlc0RhdGEgPSByb2xlQXJyYXkudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWUudXNlcklkID09PSBpdGVtLnVzZXJJZCkge1xyXG4gICAgICAgICAgICBpdGVtWydjaGVja2VkJ10gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc01heENvdW50KCk7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmliZWQucHVzaCgkdGVtcCk7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5Yi35paw5Zue6LCD5Ye95pWwXHJcbiAgcHVsbFRvUmVmcmVzaCgpIHtcclxuICAgIGlmICh0aGlzLmJhc2VVc2VyTGlzdC5sZW5ndGggPCB0aGlzLmJhc2VVc2VyUGFyYW1zLnRvdGFsKSB7XHJcbiAgICAgIHRoaXMuYmFzZVVzZXJQYXJhbXMucGFnZU51bSsrO1xyXG4gICAgICB0aGlzLnF1ZXJ5QmFzZVVzZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOagueaNrueUqOaIt+Wnk+WQjeWNs+aXtuaQnOe0ouS6uuWRmFxyXG4gIHF1ZXJ5VXNlckJ5UmVhbE5hbWUoKSB7XHJcbiAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnBhZ2VOdW0gPSAxO1xyXG4gICAgdGhpcy5iYXNlVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMucXVlcnlCYXNlVXNlcigpO1xyXG4gIH1cclxuXHJcbiAgLy8g5Y+W5raI4oCU4oCU5qC55o2u55So5oi35aeT5ZCN5Y2z5pe25pCc57Si5Lq65ZGYXHJcbiAgY2FuY2VsUXVlVXNlckJ5UmVhbE5hbWUoKSB7XHJcbiAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnJlYWxOYW1lID0gbnVsbDtcclxuICAgIHRoaXMuYmFzZVVzZXJQYXJhbXMucGFnZU51bSA9IDE7XHJcbiAgICB0aGlzLmJhc2VVc2VyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5xdWVyeUJhc2VVc2VyKCk7XHJcbiAgfVxyXG5cclxuICAvLyDliIfmjaLop5LoibJcclxuICBvbkNoYW5nZVJvbGUoJGV2ZW50KSB7XHJcbiAgICBpZiAoJGV2ZW50ICYmICRldmVudC5sZW5ndGggJiYgJGV2ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5jdXJyZW50Um9sZSA9ICRldmVudDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFJvbGUgPSBbe1xyXG4gICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICAgIGxhYmVsOiAn5YWo6YOoJ1xyXG4gICAgICB9XTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnBhZ2VOdW0gPSAxO1xyXG4gICAgdGhpcy5iYXNlVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMucXVlcnlCYXNlVXNlcigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIOS6uuWRmOmAieaLqeWPmOWMlueahOWbnuiwg1xyXG4gIHVzZXJDaGVja2VkQ2hhbmdlKCRldmVudCkge1xyXG4gICAgaWYgKCRldmVudC5jaGVja2VkKSB7IC8vIOmAieS4rVxyXG4gICAgICB0aGlzLmFsbFVzZXJDaGVjayA9IHRoaXMuYmFzZVVzZXJMaXN0LmV2ZXJ5KChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSBlbHNlIHsgLy8g5Y+W5raIXHJcbiAgICAgIGxldCBpdGVtSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29udGFjdHMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLnVzZXJJZCA9PT0gJGV2ZW50LnZhbHVlKSB7XHJcbiAgICAgICAgICBpdGVtSW5kZXggPSBpbmRleDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRlbGV0ZUNvbnRhY3QoJGV2ZW50LnZhbHVlLCBpdGVtSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWRkQmFzZVVzZXIoKTtcclxuICB9XHJcblxyXG4gIC8vIOWwhuS6uuWRmOWIl+ihqOS4remAieS4remhuea3u+WKoOiHs+W3sumAieaLqeeahOS6uuWRmOWIl+ihqOS4rVxyXG4gIGFkZEJhc2VVc2VyKCkge1xyXG4gICAgdGhpcy5iYXNlVXNlckxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBoYXNUaGlzTWVuID0gdGhpcy5zZWxlY3RlZENvbnRhY3RzLnNvbWUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnVzZXJJZCA9PT0gaXRlbS51c2VySWRcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChpdGVtLmNoZWNrZWQgJiYgIWhhc1RoaXNNZW4pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29udGFjdHMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pc01heENvdW50KCk7XHJcbiAgfVxyXG5cclxuICAvLyDkurrmlbDpgInmi6novr7liLDmnIDlpKflgLxcclxuICBpc01heENvdW50KCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5jb3VudCA+IDAgJiYgdGhpcy5zZWxlY3RlZENvbnRhY3RzLmxlbmd0aCA+PSB0aGlzLmRhdGEuY291bnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzLmxlbmd0aCA9IHRoaXMuZGF0YS5jb3VudDtcclxuICAgICAgdGhpcy5iYXNlVXNlckxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhc1RoaXNVc2VyID0gdGhpcy5zZWxlY3RlZENvbnRhY3RzLnNvbWUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbS51c2VySWQgPT09IHZhbHVlLnVzZXJJZFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWhhc1RoaXNVc2VyKSB7XHJcbiAgICAgICAgICBpdGVtLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGl0ZW0uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYmFzZVVzZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYmFzZVVzZXJMaXN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuYWxsVXNlckNoZWNrID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFsbFVzZXJDaGVjayA9IHRoaXMuYmFzZVVzZXJMaXN0LmV2ZXJ5KChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDliKDpmaTogZTns7vkurpcclxuICBkZWxldGVDb250YWN0KGlkLCBpbmRleCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmJhc2VVc2VyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLnVzZXJJZCA9PT0gaWQpIHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5iYXNlVXNlckxpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5hbGxVc2VyQ2hlY2sgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxsVXNlckNoZWNrID0gdGhpcy5iYXNlVXNlckxpc3QuZXZlcnkoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS5jaGVja2VkID09PSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyDlhajpgIlcclxuICBhbGxTZWxlY3QoKSB7XHJcbiAgICB0aGlzLmFsbFVzZXJDaGVjayA9IHRydWU7XHJcbiAgICB0aGlzLmJhc2VVc2VyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYWRkQmFzZVVzZXIoKTtcclxuICB9XHJcblxyXG4gIC8vIOWPlua2iOWFqOmAiVxyXG4gIGNhbmNlbEFsbFNlbGVjdCgpIHtcclxuICAgIHRoaXMuYWxsVXNlckNoZWNrID0gZmFsc2U7XHJcbiAgICB0aGlzLmJhc2VVc2VyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGxldCBpdGVtSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29udGFjdHMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLnVzZXJJZCA9PT0gaXRlbS51c2VySWQpIHtcclxuICAgICAgICAgIGl0ZW1JbmRleCA9IGluZGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZGVsZXRlQ29udGFjdChpdGVtLnVzZXJJZCwgaXRlbUluZGV4KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIOeCueKAnOWujOaIkOKAneaMiemSru+8jOWujOaIkOS6uuWRmOmAieaLqVxyXG4gIGNvbmZpcm1TZWxlY3QoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLnNlbGVjdGVkQ29udGFjdHMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmliZWQuZm9yRWFjaCgoc3ViOiBTdWJzY3JpcHRpb24pID0+IHtcclxuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm1vZGFsUmVmQ3B0LmZvckVhY2goKHJlZjogTW9kYWxSZWYpID0+IHtcclxuICAgICAgcmVmLmRlc3Ryb3koKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=