|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/guild/guild_controller.js';
|
var __require = nodeEnv ? function (request) {
|
return cc.require(request);
|
} : function (request) {
|
return __quick_compile_project__.require(request, __filename);
|
};
|
function __define (exports, require, module) {
|
if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
|
cc._RF.push(module, '2dbf7Am47tNd4tWjYCt9GEt', 'guild_controller');
|
// Scripts/mod/guild/guild_controller.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里填写详细说明,主要填写该模块的功能简要
|
// <br/>Create: 2019-01-14 10:57:08
|
// --------------------------------------------------------------------
|
var GuildConst = require("guild_const");
|
|
var PathTool = require("pathtool");
|
|
var GuildEvent = require("guild_event");
|
|
var RoleController = require("role_controller");
|
|
var GuildController = cc.Class({
|
"extends": BaseController,
|
ctor: function ctor() {},
|
// 初始化配置数据
|
initConfig: function initConfig() {
|
var GuildModel = require("guild_model");
|
|
this.model = new GuildModel();
|
this.model.initConfig();
|
},
|
// 返回当前的model
|
getModel: function getModel() {
|
return this.model;
|
},
|
// 注册监听事件
|
registerEvents: function registerEvents() {
|
if (this.login_event_success == null) {
|
this.login_event_success = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () {
|
gcore.GlobalEvent.unbind(this.login_event_success);
|
this.login_event_success = null;
|
|
var RoleController = require("role_controller");
|
|
this.role_vo = RoleController.getInstance().getRoleVo();
|
|
if (this.role_vo) {
|
this.requestInitProtocal();
|
|
if (this.role_assets_event == null) {
|
this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
|
if (key == "gid") {
|
if (value == 0) {
|
// 这个时候表示退帮了,需要关闭一些窗体
|
this.openGuildMainWindow(false);
|
this.openGuildMemberWindow(false);
|
this.openGuildDonateWindow(false);
|
} else {
|
// 有公会的时候,如果处于初始窗体,就标识加入或者创建
|
if (this.init_window) {
|
this.request_open_main_window = true;
|
}
|
|
this.openGuildInitWindow(false);
|
}
|
|
this.requestInitProtocal();
|
} else if (key == "position") {
|
this.model.updateMemberByPosition(value);
|
}
|
}.bind(this));
|
}
|
}
|
}.bind(this));
|
}
|
},
|
// 注册协议接受事件
|
registerProtocals: function registerProtocals() {
|
this.RegisterProtocal(13500, this.handle13500); // 创建公会
|
|
this.RegisterProtocal(13501, this.handle13501); // 公会列表
|
|
this.RegisterProtocal(13503, this.handle13503); // 申请加入公会
|
|
this.RegisterProtocal(13505, this.handle13505); // 操作申请成员的列表
|
|
this.RegisterProtocal(13507, this.handle13507); // 更新申请加入列表
|
|
this.RegisterProtocal(13513, this.handle13513); // 从公会中踢人
|
|
this.RegisterProtocal(13514, this.handle13514); // 退帮
|
|
this.RegisterProtocal(13516, this.handle13516); // 解散公会
|
|
this.RegisterProtocal(13518, this.handle13518); // 本公会基础信息
|
|
this.RegisterProtocal(13519, this.handle13519); // 本公会成员列表
|
|
this.RegisterProtocal(13520, this.handle13520); // 职位设置
|
|
this.RegisterProtocal(13521, this.handle13521); // 修改宣言
|
|
this.RegisterProtocal(13522, this.handle13522); // 设置申请
|
|
this.RegisterProtocal(13523, this.handle13523); // 玩家基础捐献信息
|
|
this.RegisterProtocal(13524, this.handle13524); // 捐献返回
|
|
this.RegisterProtocal(13542, this.hander13542); // 增删更新成员
|
|
this.RegisterProtocal(13558, this.handle13558); // 公会招募广告
|
|
this.RegisterProtocal(13565, this.handle13565); // 弹劾
|
|
this.RegisterProtocal(13568, this.handle13568); // 修改公会名字
|
|
this.RegisterProtocal(13573, this.handle13573); // 公会申请列表红点
|
|
this.RegisterProtocal(13574, this.handle13574); // 领取捐献宝箱情况
|
|
this.RegisterProtocal(13575, this.handle13575); // 更新当前捐献进度值
|
|
this.RegisterProtocal(13576, this.handle13576); // 欢迎新人
|
|
this.RegisterProtocal(16900, this.handle16900);
|
this.RegisterProtocal(16901, this.handle16901);
|
this.RegisterProtocal(16902, this.handle16902);
|
this.RegisterProtocal(16903, this.handle16903);
|
this.RegisterProtocal(16904, this.handle16904);
|
},
|
// 请求公会相关协议
|
requestInitProtocal: function requestInitProtocal() {
|
if (this.role_vo == null) return;
|
|
if (this.role_vo.gid == 0) {
|
this.model.clearMyGuildInfo();
|
} else {
|
this.SendProtocal(13518, {});
|
this.SendProtocal(13523, {});
|
this.SendProtocal(16900, {});
|
|
if (this.role_vo.position != GuildConst.post_type.member) {
|
this.SendProtocal(13573, {});
|
}
|
}
|
},
|
// 外部调用,打开公会的界面,会根据当前是否存在公会而去打开指定的界面
|
checkOpenGuildWindow: function checkOpenGuildWindow(index) {
|
if (this.role_vo == null || this.role_vo.gid == 0) {
|
this.openGuildInitWindow(true, index);
|
} else {
|
this.openGuildMainWindow(true, index);
|
}
|
},
|
// 创建查找联盟列表窗体
|
openGuildInitWindow: function openGuildInitWindow(status, index) {
|
if (!status) {
|
if (this.init_window != null) {
|
this.init_window.close();
|
this.init_window = null;
|
}
|
} else {
|
if (this.init_window == null) {
|
this.init_window = Utils.createClass("guildinit_window");
|
}
|
|
this.init_window.open(index);
|
}
|
},
|
// 控制主界面
|
openGuildMainWindow: function openGuildMainWindow(status, index) {
|
if (!status) {
|
if (this.main_window) {
|
this.main_window.close();
|
this.main_window = null;
|
}
|
} else {
|
if (this.main_window == null) {
|
this.main_window = Utils.createClass("guild_main_window");
|
}
|
|
this.main_window.open(index);
|
}
|
},
|
// 成员界面
|
openGuildMemberWindow: function openGuildMemberWindow(status) {
|
if (!status) {
|
if (this.member_window) {
|
this.member_window.close();
|
this.member_window = null;
|
}
|
} else {
|
if (this.member_window == null) {
|
this.member_window = Utils.createClass("guild_member_window");
|
}
|
|
this.member_window.open();
|
}
|
},
|
// 捐献界面
|
openGuildDonateWindow: function openGuildDonateWindow(status) {
|
if (!status) {
|
if (this.donate_window) {
|
this.donate_window.close();
|
this.donate_window = null;
|
}
|
} else {
|
if (this.role_vo == null || !this.role_vo.isHasGuild()) {
|
message(Utils.TI18N("您暂时还没有加入公会"));
|
return;
|
}
|
|
if (this.donate_window == null) {
|
this.donate_window = Utils.createClass("guild_donate_window");
|
}
|
|
this.donate_window.open();
|
}
|
},
|
//
|
openGuildApplyWindow: function openGuildApplyWindow(status) {
|
if (!status) {
|
if (this.apply_window) {
|
this.apply_window.close();
|
this.apply_window = null;
|
}
|
} else {
|
if (this.apply_window == null) {
|
this.apply_window = Utils.createClass("guild_apply_window");
|
}
|
|
this.apply_window.open();
|
}
|
},
|
//打开公会活跃面板
|
openGuildActionGoalWindow: function openGuildActionGoalWindow(status) {
|
if (!status) {
|
if (this.goal_window) {
|
this.goal_window.close();
|
this.goal_window = null;
|
}
|
} else {
|
if (this.goal_window == null) {
|
this.goal_window = Utils.createClass("guild_action_goal_window");
|
}
|
|
this.goal_window.open();
|
}
|
},
|
//打开公会活跃奖励预览面板
|
openGuildRewardWindow: function openGuildRewardWindow(status) {
|
if (!status) {
|
if (this.reward_window) {
|
this.reward_window.close();
|
this.reward_window = null;
|
}
|
} else {
|
if (this.reward_window == null) {
|
this.reward_window = Utils.createClass("guild_reward_window");
|
}
|
|
this.reward_window.open();
|
}
|
},
|
//公会申请设置面板
|
openGuildApplySetWindow: function openGuildApplySetWindow(status) {
|
if (!status) {
|
if (this.apply_set_window) {
|
this.apply_set_window.close();
|
this.apply_set_window = null;
|
}
|
} else {
|
if (this.apply_set_window == null) {
|
this.apply_set_window = Utils.createClass("guild_apply_set_window");
|
}
|
|
this.apply_set_window.open();
|
}
|
},
|
//职位任免和踢人面板
|
openGuildOperationPostWindow: function openGuildOperationPostWindow(status, data) {
|
if (!status) {
|
if (this.operation_post_window) {
|
this.operation_post_window.close();
|
this.operation_post_window = null;
|
}
|
} else {
|
if (this.operation_post_window == null) {
|
this.operation_post_window = Utils.createClass("guild_operation_post_window");
|
}
|
|
this.operation_post_window.open(data);
|
}
|
},
|
//弹劾帮主
|
openGuildImpeachPostWindow: function openGuildImpeachPostWindow(status) {
|
if (!status) {
|
if (this.impeach_post_window) {
|
this.impeach_post_window.close();
|
this.impeach_post_window = null;
|
}
|
} else {
|
if (this.impeach_post_window == null) {
|
this.impeach_post_window = Utils.createClass("guild_impeach_post_window");
|
}
|
|
this.impeach_post_window.open();
|
}
|
},
|
//公会改名面板
|
openGuildChangeNameWindow: function openGuildChangeNameWindow(status) {
|
if (!status) {
|
if (this.change_name_window) {
|
this.change_name_window.close();
|
this.change_name_window = null;
|
}
|
} else {
|
if (this.change_name_window == null) {
|
this.change_name_window = Utils.createClass("guild_change_name_window");
|
}
|
|
this.change_name_window.open();
|
}
|
},
|
//公会宣言修改
|
openGuildChangeSignWindow: function openGuildChangeSignWindow(status) {
|
if (!status) {
|
if (this.change_sign_window) {
|
this.change_sign_window.close();
|
this.change_sign_window = null;
|
}
|
} else {
|
if (this.change_sign_window == null) {
|
this.change_sign_window = Utils.createClass("guild_change_sign_window");
|
}
|
|
this.change_sign_window.open();
|
}
|
},
|
//请求创建公会
|
//@name:公会名字
|
//@sign:宣言
|
//@apply_type:申请类型(0:自动审批 1:手动审批 2:不允许申请)
|
//@apply_lev:最小等级要求
|
requestCreateGuild: function requestCreateGuild(name, sign, apply_type, apply_lev) {
|
var protocal = {};
|
protocal.name = name;
|
protocal.sign = sign;
|
protocal.apply_lev = apply_lev || 1;
|
protocal.apply_type = apply_type || 0;
|
this.SendProtocal(13500, protocal);
|
},
|
//创建公会返回
|
handle13500: function handle13500(data) {
|
message(data.msg);
|
},
|
//请求公会列表
|
//@page:页码
|
//@flag:是否显示满人的公会 0:不显示 1:显示
|
//@num:每页显示条数
|
//@name:如果不为“”表示是搜索
|
requestGuildList: function requestGuildList(page, flag, num, name) {
|
var protocal = {};
|
protocal.page = page || 0;
|
protocal.flag = flag || 1;
|
protocal.num = num || 0;
|
protocal.name = name || "";
|
this.SendProtocal(13501, protocal);
|
},
|
//获取公会列表
|
handle13501: function handle13501(data) {
|
this.model.updateGuildList(data.name, data.guilds);
|
},
|
//申请加入公会
|
requestJoinGuild: function requestJoinGuild(gid, gsrv_id, type) {
|
if (gid == null || gsrv_id == null) return;
|
var protocal = {};
|
protocal.gid = gid;
|
protocal.gsrv_id = gsrv_id;
|
protocal.type = type || 1;
|
this.SendProtocal(13503, protocal);
|
},
|
//请求加入公会返回
|
handle13503: function handle13503(data) {
|
message(data.msg);
|
if (data.code == 1) this.model.updateGuildApplyStatus(data.gid, data.gsrv_id, data.is_apply);
|
},
|
//更新自己公会的信息
|
handle13518: function handle13518(data) {
|
this.model.updateMyGuildInfo(data); //
|
|
if (this.request_open_main_window == true) {
|
this.request_open_main_window = false;
|
this.openGuildMainWindow(true);
|
}
|
},
|
//弹劾帮主
|
send13565: function send13565() {
|
this.SendProtocal(13565, {});
|
},
|
handle13565: function handle13565(data) {
|
message(data.msg);
|
},
|
//请求公会成员列表
|
requestGuildMemberList: function requestGuildMemberList() {
|
this.SendProtocal(13519, {});
|
},
|
//更新整个公会成员列表
|
handle13519: function handle13519(data) {
|
this.model.updateMyGuildMemberList(data.members, 1);
|
},
|
handle13523: function handle13523(data) {
|
this.model.updateDonateInfo(data.donate_list); //更新捐献宝箱情况
|
|
this.model.updateDonateBoxInfo(data.boxes, data.donate_exp);
|
|
require("redbag_controller").getInstance().getModel().updateRedBagNum(data.day_send_num, data.day_recv_num);
|
},
|
//请求公会捐献
|
requestGuildDonate: function requestGuildDonate(type) {
|
var protocal = {};
|
protocal.type = type;
|
this.SendProtocal(13524, protocal);
|
},
|
//公会捐献返回
|
handle13524: function handle13524(data) {
|
message(data.msg);
|
if (data.code == 1) this.model.setGuildDonateStatus();
|
},
|
//更新,增加或者删除成员
|
hander13542: function hander13542(data) {
|
this.model.updateMyGuildMemberList(data.members, data.type);
|
},
|
//会长或者副会长处理操作申请列表
|
requestOperationApply: function requestOperationApply(type, rid, srv_id) {
|
var protocal = {};
|
protocal.type = type;
|
protocal.rid = rid;
|
protocal.srv_id = srv_id;
|
this.SendProtocal(13505, protocal);
|
},
|
//操作申请玩家列表返回
|
handle13505: function handle13505(data) {
|
message(data.msg);
|
if (data.code == 1) this.model.deleteApplyInfo(data.rid, data.srv_id);
|
},
|
//请求当前申请加入的公会列表
|
requestGuildApplyList: function requestGuildApplyList(page, num) {
|
var protocal = {};
|
protocal.page = page;
|
protocal.num = num;
|
this.SendProtocal(13507, protocal);
|
},
|
//更新申请列表
|
handle13507: function handle13507(data) {
|
this.model.updateGuildApplyList(data.guids);
|
},
|
//请求退帮
|
requestExitGuild: function requestExitGuild() {
|
var role_vo = RoleController.getInstance().getRoleVo();
|
if (role_vo == null) return;
|
|
if (role_vo.position == GuildConst.post_type.leader) {
|
//自己是帮主,则是解散公会
|
var msg = cc.js.formatStr(Utils.TI18N("是否确定解散公会【%s】?"), role_vo.gname);
|
var extend_msg = "";
|
if (role_vo.guild_quit_time != 0) extend_msg = Utils.TI18N("(解散公会后,会长将在24小时内无法加入其他公会)");else extend_msg = Utils.TI18N("(首次退出或解散公会后,可立即加入其他公会。)");
|
|
var CommonAlert = require("commonalert");
|
|
CommonAlert.show(msg, Utils.TI18N("确定"), function () {
|
this.SendProtocal(13516, {});
|
}.bind(this), Utils.TI18N("取消"), null, null, null, {
|
timer: 3,
|
timer_for: true,
|
off_y: 43,
|
title: Utils.TI18N("解散公会"),
|
extend_str: extend_msg,
|
extend_offy: -5,
|
extend_aligment: cc.TEXT_ALIGNMENT_CENTER
|
});
|
} else {
|
var msg = cc.js.formatStr(Utils.TI18N("是否确定退出公会【%s】?"), role_vo.gname);
|
var extend_msg = "";
|
if (role_vo.guild_quit_time != 0) extend_msg = Utils.TI18N("(退出公会后12小时内无法加入其他公会)");else extend_msg = Utils.TI18N("(首次退出公会可立即加入其它公会)");
|
|
var CommonAlert = require("commonalert");
|
|
CommonAlert.show(msg, Utils.TI18N("确定"), function () {
|
this.SendProtocal(13514, {});
|
}.bind(this), Utils.TI18N("取消"), null, null, null, {
|
timer: 3,
|
timer_for: true,
|
off_y: 43,
|
title: Utils.TI18N("退出公会"),
|
extend_str: extend_msg,
|
extend_offy: -5,
|
extend_aligment: cc.TEXT_ALIGNMENT_CENTER
|
});
|
}
|
},
|
//退帮
|
handle13514: function handle13514(data) {
|
message(data.msg);
|
},
|
//解散
|
handle13516: function handle13516(data) {
|
message(data.msg);
|
},
|
//设置修改申请条件
|
requestChangeApplySet: function requestChangeApplySet(apply_type, apply_lev) {
|
var protocal = {};
|
protocal.apply_type = apply_type;
|
protocal.apply_lev = apply_lev;
|
this.SendProtocal(13522, protocal);
|
},
|
//设置权限返回
|
handle13522: function handle13522(data) {
|
message(data.msg);
|
if (data.code == 1) this.openGuildApplySetWindow(false);
|
},
|
//请求修改公会宣言
|
requestChangeGuildSign: function requestChangeGuildSign(sign) {
|
var protocal = {};
|
protocal.sign = sign;
|
this.SendProtocal(13521, protocal);
|
},
|
//公会宣言修改
|
handle13521: function handle13521(data) {
|
message(data.msg);
|
if (data.code == 1) this.openGuildChangeSignWindow(false);
|
},
|
//从公会中踢人
|
requestKickoutMember: function requestKickoutMember(rid, srv_id, name) {
|
var call_back = function () {
|
var protocal = {};
|
protocal.rid = rid;
|
protocal.srv_id = srv_id;
|
this.SendProtocal(13513, protocal);
|
}.bind(this);
|
|
var msg = cc.js.formatStr(Utils.TI18N("是否确认将【%s】玩家移除出公会?"), name);
|
|
var CommonAlert = require("commonalert");
|
|
CommonAlert.show(msg, Utils.TI18N("确定"), function () {
|
call_back();
|
}.bind(this), Utils.TI18N("取消"));
|
},
|
//踢人返回
|
handle13513: function handle13513(data) {
|
message(data.msg);
|
if (data.code == 1) this.openGuildOperationPostWindow(false);
|
},
|
//职位任命
|
requestOperationPost: function requestOperationPost(rid, srv_id, position) {
|
var protocal = {};
|
protocal.rid = rid;
|
protocal.srv_id = srv_id;
|
protocal.position = position;
|
this.SendProtocal(13520, protocal);
|
},
|
handle13520: function handle13520(data) {
|
message(data.msg);
|
if (data.code == 1) this.openGuildOperationPostWindow(false);
|
},
|
//请求改名
|
requestChangGuildName: function requestChangGuildName(name) {
|
var protocal = {};
|
protocal.name = name;
|
this.SendProtocal(13568, protocal);
|
},
|
//公会改名
|
handle13568: function handle13568(data) {
|
message(data.msg);
|
if (data.code == 1) this.openGuildChangeNameWindow(false);
|
},
|
//发送公会招募广告
|
requestGuildRecruit: function requestGuildRecruit() {
|
var my_info = this.model.getMyGuildInfo();
|
|
if (my_info != null) {
|
if (my_info.recruit_num == 0) {
|
var msg = Utils.TI18N("是否确定发布招募公告?\n\n<color=#AA6111><size=22>每日首次发布公告免费</size></c>");
|
var extend_msg = Utils.TI18N("(每日首次发布公告免费)");
|
|
var CommonAlert = require("commonalert");
|
|
CommonAlert.show(msg, Utils.TI18N("确定"), function () {
|
this.SendProtocal(13558, {});
|
}.bind(this), Utils.TI18N("取消"), null, null, null, null);
|
} else {
|
var config = gdata("guild_data", "data_const", "recruit_cost");
|
var role_vo = RoleController.getInstance().getRoleVo();
|
|
if (config && role_vo) {
|
var total = role_vo.gold;
|
var extend_msg = cc.js.formatStr("<color=#AA6111><size=22>发布消耗:<img src='%s' scale=0.5 />%s/%s</size></c>", 15, Utils.getMoneyString(total), config.val);
|
var msg = cc.js.formatStr(Utils.TI18N("是否确定花费<img src='%s' scale=0.5 />%s发布招募广告?\n\n%s"), 15, config.val, extend_msg);
|
|
var CommonAlert = require("commonalert");
|
|
var res = PathTool.getItemRes(15);
|
CommonAlert.show(msg, Utils.TI18N("确定"), function () {
|
this.SendProtocal(13558, {});
|
}.bind(this), Utils.TI18N("取消"), null, 2, null, {
|
resArr: [res]
|
});
|
}
|
}
|
}
|
},
|
//招募广告返回
|
handle13558: function handle13558(data) {
|
message(data.msg);
|
},
|
//公会申请红点
|
handle13573: function handle13573(data) {
|
this.model.updateGuildRedStatus(GuildConst.red_index.apply, data.code == 1);
|
},
|
//有玩家申请加入的提示
|
setApplyListStatus: function setApplyListStatus(data) {
|
this.model.updateGuildRedStatus(GuildConst.red_index.apply, true);
|
},
|
//请求领取指定捐献宝箱
|
requestDonateBoxRewards: function requestDonateBoxRewards(box_id) {
|
var protocal = {};
|
protocal.box_id = box_id;
|
this.SendProtocal(13574, protocal);
|
},
|
//领取捐献宝箱返回
|
handle13574: function handle13574(data) {
|
message(data.msg);
|
if (data.code == 1) this.model.setDonateBoxStatus(data.box_id);
|
},
|
//更新捐献进度值
|
handle13575: function handle13575(data) {
|
this.model.updateDonateActivity(data.donate_exp);
|
},
|
welcomeNewMember: function welcomeNewMember(rid, srv_id) {
|
var protocal = {};
|
protocal.rid = rid;
|
protocal.srv_id = srv_id;
|
this.SendProtocal(13576, protocal);
|
},
|
handle13576: function handle13576(data) {
|
message(data.msg);
|
},
|
//--------------公会活跃
|
//基本信息
|
send16900: function send16900() {
|
this.SendProtocal(16900, {});
|
},
|
handle16900: function handle16900(data) {
|
this.model.updataGuildActionRedStatus(data);
|
gcore.GlobalEvent.fire(GuildEvent.UpdataGuildGoalBasicData, data);
|
},
|
//任务信息
|
send16901: function send16901() {
|
this.SendProtocal(16901, {});
|
},
|
handle16901: function handle16901(data) {
|
gcore.GlobalEvent.fire(GuildEvent.UpdataGuildGoalTaskData, data);
|
},
|
//单条任务信息
|
handle16902: function handle16902(data) {
|
gcore.GlobalEvent.fire(GuildEvent.UpdataGuildGoalSingleTaskData, data);
|
},
|
//提交任务
|
send16903: function send16903(id) {
|
var protocal = {};
|
protocal.id = id;
|
this.SendProtocal(16903, protocal);
|
},
|
handle16903: function handle16903(data) {
|
message(data.msg);
|
},
|
send16904: function send16904() {
|
this.SendProtocal(16904, {});
|
},
|
handle16904: function handle16904(data) {
|
message(data.msg);
|
},
|
getGuildMainRootWnd: function getGuildMainRootWnd() {
|
if (this.main_window) {
|
return this.main_window.root_wnd;
|
}
|
}
|
});
|
module.exports = GuildController;
|
|
cc._RF.pop();
|
}
|
if (nodeEnv) {
|
__define(__module.exports, __require, __module);
|
}
|
else {
|
__quick_compile_project__.registerModuleFunc(__filename, function () {
|
__define(__module.exports, __require, __module);
|
});
|
}
|
})();
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxndWlsZFxcZ3VpbGRfY29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJHdWlsZENvbnN0IiwicmVxdWlyZSIsIlBhdGhUb29sIiwiR3VpbGRFdmVudCIsIlJvbGVDb250cm9sbGVyIiwiR3VpbGRDb250cm9sbGVyIiwiY2MiLCJDbGFzcyIsIkJhc2VDb250cm9sbGVyIiwiY3RvciIsImluaXRDb25maWciLCJHdWlsZE1vZGVsIiwibW9kZWwiLCJnZXRNb2RlbCIsInJlZ2lzdGVyRXZlbnRzIiwibG9naW5fZXZlbnRfc3VjY2VzcyIsImdjb3JlIiwiR2xvYmFsRXZlbnQiLCJiaW5kIiwiRXZlbnRJZCIsIkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTIiwidW5iaW5kIiwicm9sZV92byIsImdldEluc3RhbmNlIiwiZ2V0Um9sZVZvIiwicmVxdWVzdEluaXRQcm90b2NhbCIsInJvbGVfYXNzZXRzX2V2ZW50IiwiVVBEQVRFX1JPTEVfQVRUUklCVVRFIiwia2V5IiwidmFsdWUiLCJvcGVuR3VpbGRNYWluV2luZG93Iiwib3Blbkd1aWxkTWVtYmVyV2luZG93Iiwib3Blbkd1aWxkRG9uYXRlV2luZG93IiwiaW5pdF93aW5kb3ciLCJyZXF1ZXN0X29wZW5fbWFpbl93aW5kb3ciLCJvcGVuR3VpbGRJbml0V2luZG93IiwidXBkYXRlTWVtYmVyQnlQb3NpdGlvbiIsInJlZ2lzdGVyUHJvdG9jYWxzIiwiUmVnaXN0ZXJQcm90b2NhbCIsImhhbmRsZTEzNTAwIiwiaGFuZGxlMTM1MDEiLCJoYW5kbGUxMzUwMyIsImhhbmRsZTEzNTA1IiwiaGFuZGxlMTM1MDciLCJoYW5kbGUxMzUxMyIsImhhbmRsZTEzNTE0IiwiaGFuZGxlMTM1MTYiLCJoYW5kbGUxMzUxOCIsImhhbmRsZTEzNTE5IiwiaGFuZGxlMTM1MjAiLCJoYW5kbGUxMzUyMSIsImhhbmRsZTEzNTIyIiwiaGFuZGxlMTM1MjMiLCJoYW5kbGUxMzUyNCIsImhhbmRlcjEzNTQyIiwiaGFuZGxlMTM1NTgiLCJoYW5kbGUxMzU2NSIsImhhbmRsZTEzNTY4IiwiaGFuZGxlMTM1NzMiLCJoYW5kbGUxMzU3NCIsImhhbmRsZTEzNTc1IiwiaGFuZGxlMTM1NzYiLCJoYW5kbGUxNjkwMCIsImhhbmRsZTE2OTAxIiwiaGFuZGxlMTY5MDIiLCJoYW5kbGUxNjkwMyIsImhhbmRsZTE2OTA0IiwiZ2lkIiwiY2xlYXJNeUd1aWxkSW5mbyIsIlNlbmRQcm90b2NhbCIsInBvc2l0aW9uIiwicG9zdF90eXBlIiwibWVtYmVyIiwiY2hlY2tPcGVuR3VpbGRXaW5kb3ciLCJpbmRleCIsInN0YXR1cyIsImNsb3NlIiwiVXRpbHMiLCJjcmVhdGVDbGFzcyIsIm9wZW4iLCJtYWluX3dpbmRvdyIsIm1lbWJlcl93aW5kb3ciLCJkb25hdGVfd2luZG93IiwiaXNIYXNHdWlsZCIsIm1lc3NhZ2UiLCJUSTE4TiIsIm9wZW5HdWlsZEFwcGx5V2luZG93IiwiYXBwbHlfd2luZG93Iiwib3Blbkd1aWxkQWN0aW9uR29hbFdpbmRvdyIsImdvYWxfd2luZG93Iiwib3Blbkd1aWxkUmV3YXJkV2luZG93IiwicmV3YXJkX3dpbmRvdyIsIm9wZW5HdWlsZEFwcGx5U2V0V2luZG93IiwiYXBwbHlfc2V0X3dpbmRvdyIsIm9wZW5HdWlsZE9wZXJhdGlvblBvc3RXaW5kb3ciLCJkYXRhIiwib3BlcmF0aW9uX3Bvc3Rfd2luZG93Iiwib3Blbkd1aWxkSW1wZWFjaFBvc3RXaW5kb3ciLCJpbXBlYWNoX3Bvc3Rfd2luZG93Iiwib3Blbkd1aWxkQ2hhbmdlTmFtZVdpbmRvdyIsImNoYW5nZV9uYW1lX3dpbmRvdyIsIm9wZW5HdWlsZENoYW5nZVNpZ25XaW5kb3ciLCJjaGFuZ2Vfc2lnbl93aW5kb3ciLCJyZXF1ZXN0Q3JlYXRlR3VpbGQiLCJuYW1lIiwic2lnbiIsImFwcGx5X3R5cGUiLCJhcHBseV9sZXYiLCJwcm90b2NhbCIsIm1zZyIsInJlcXVlc3RHdWlsZExpc3QiLCJwYWdlIiwiZmxhZyIsIm51bSIsInVwZGF0ZUd1aWxkTGlzdCIsImd1aWxkcyIsInJlcXVlc3RKb2luR3VpbGQiLCJnc3J2X2lkIiwidHlwZSIsImNvZGUiLCJ1cGRhdGVHdWlsZEFwcGx5U3RhdHVzIiwiaXNfYXBwbHkiLCJ1cGRhdGVNeUd1aWxkSW5mbyIsInNlbmQxMzU2NSIsInJlcXVlc3RHdWlsZE1lbWJlckxpc3QiLCJ1cGRhdGVNeUd1aWxkTWVtYmVyTGlzdCIsIm1lbWJlcnMiLCJ1cGRhdGVEb25hdGVJbmZvIiwiZG9uYXRlX2xpc3QiLCJ1cGRhdGVEb25hdGVCb3hJbmZvIiwiYm94ZXMiLCJkb25hdGVfZXhwIiwidXBkYXRlUmVkQmFnTnVtIiwiZGF5X3NlbmRfbnVtIiwiZGF5X3JlY3ZfbnVtIiwicmVxdWVzdEd1aWxkRG9uYXRlIiwic2V0R3VpbGREb25hdGVTdGF0dXMiLCJyZXF1ZXN0T3BlcmF0aW9uQXBwbHkiLCJyaWQiLCJzcnZfaWQiLCJkZWxldGVBcHBseUluZm8iLCJyZXF1ZXN0R3VpbGRBcHBseUxpc3QiLCJ1cGRhdGVHdWlsZEFwcGx5TGlzdCIsImd1aWRzIiwicmVxdWVzdEV4aXRHdWlsZCIsImxlYWRlciIsImpzIiwiZm9ybWF0U3RyIiwiZ25hbWUiLCJleHRlbmRfbXNnIiwiZ3VpbGRfcXVpdF90aW1lIiwiQ29tbW9uQWxlcnQiLCJzaG93IiwidGltZXIiLCJ0aW1lcl9mb3IiLCJvZmZfeSIsInRpdGxlIiwiZXh0ZW5kX3N0ciIsImV4dGVuZF9vZmZ5IiwiZXh0ZW5kX2FsaWdtZW50IiwiVEVYVF9BTElHTk1FTlRfQ0VOVEVSIiwicmVxdWVzdENoYW5nZUFwcGx5U2V0IiwicmVxdWVzdENoYW5nZUd1aWxkU2lnbiIsInJlcXVlc3RLaWNrb3V0TWVtYmVyIiwiY2FsbF9iYWNrIiwicmVxdWVzdE9wZXJhdGlvblBvc3QiLCJyZXF1ZXN0Q2hhbmdHdWlsZE5hbWUiLCJyZXF1ZXN0R3VpbGRSZWNydWl0IiwibXlfaW5mbyIsImdldE15R3VpbGRJbmZvIiwicmVjcnVpdF9udW0iLCJjb25maWciLCJnZGF0YSIsInRvdGFsIiwiZ29sZCIsImdldE1vbmV5U3RyaW5nIiwidmFsIiwicmVzIiwiZ2V0SXRlbVJlcyIsInJlc0FyciIsInVwZGF0ZUd1aWxkUmVkU3RhdHVzIiwicmVkX2luZGV4IiwiYXBwbHkiLCJzZXRBcHBseUxpc3RTdGF0dXMiLCJyZXF1ZXN0RG9uYXRlQm94UmV3YXJkcyIsImJveF9pZCIsInNldERvbmF0ZUJveFN0YXR1cyIsInVwZGF0ZURvbmF0ZUFjdGl2aXR5Iiwid2VsY29tZU5ld01lbWJlciIsInNlbmQxNjkwMCIsInVwZGF0YUd1aWxkQWN0aW9uUmVkU3RhdHVzIiwiZmlyZSIsIlVwZGF0YUd1aWxkR29hbEJhc2ljRGF0YSIsInNlbmQxNjkwMSIsIlVwZGF0YUd1aWxkR29hbFRhc2tEYXRhIiwiVXBkYXRhR3VpbGRHb2FsU2luZ2xlVGFza0RhdGEiLCJzZW5kMTY5MDMiLCJpZCIsInNlbmQxNjkwNCIsImdldEd1aWxkTWFpblJvb3RXbmQiLCJyb290X3duZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsVUFBVSxHQUFHQyxPQUFPLENBQUMsYUFBRCxDQUF4Qjs7QUFDQSxJQUFJQyxRQUFRLEdBQUdELE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlFLFVBQVUsR0FBR0YsT0FBTyxDQUFDLGFBQUQsQ0FBeEI7O0FBQ0EsSUFBSUcsY0FBYyxHQUFHSCxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBRUEsSUFBSUksZUFBZSxHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUMzQixhQUFTQyxjQURrQjtBQUUzQkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZLENBQ2pCLENBSDBCO0FBSzNCO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixRQUFJQyxVQUFVLEdBQUdWLE9BQU8sQ0FBQyxhQUFELENBQXhCOztBQUNBLFNBQUtXLEtBQUwsR0FBYSxJQUFJRCxVQUFKLEVBQWI7QUFDQSxT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QUFrQjhLLElBQWxCLENBQXVCNUwsVUFBVSxDQUFDZ00sNkJBQWxDLEVBQWlFcEcsSUFBakU7QUFDSCxHQS9vQjBCO0FBaXBCM0I7QUFDQXFHLEVBQUFBLFNBQVMsRUFBRSxtQkFBVUMsRUFBVixFQUFjO0FBQ3JCLFFBQUl6RixRQUFRLEdBQUcsRUFBZjtBQUNBQSxJQUFBQSxRQUFRLENBQUN5RixFQUFULEdBQWNBLEVBQWQ7QUFDQSxTQUFLaEksWUFBTCxDQUFrQixLQUFsQixFQUF5QnVDLFFBQXpCO0FBQ0gsR0F0cEIwQjtBQXdwQjNCM0MsRUFBQUEsV0FBVyxFQUFFLHFCQUFVOEIsSUFBVixFQUFnQjtBQUN6QlgsSUFBQUEsT0FBTyxDQUFDVyxJQUFJLENBQUNjLEdBQU4sQ0FBUDtBQUNILEdBMXBCMEI7QUE0cEIzQnlGLEVBQUFBLFNBQVMsRUFBRSxxQkFBWTtBQUNuQixTQUFLakksWUFBTCxDQUFrQixLQUFsQixFQUF5QixFQUF6QjtBQUNILEdBOXBCMEI7QUFncUIzQkgsRUFBQUEsV0FBVyxFQUFFLHFCQUFVNkIsSUFBVixFQUFnQjtBQUN6QlgsSUFBQUEsT0FBTyxDQUFDVyxJQUFJLENBQUNjLEdBQU4sQ0FBUDtBQUNILEdBbHFCMEI7QUFxcUIzQjBGLEVBQUFBLG1CQUFtQixFQUFDLCtCQUFVO0FBQzFCLFFBQUcsS0FBS3ZILFdBQVIsRUFBb0I7QUFDaEIsYUFBTyxLQUFLQSxXQUFMLENBQWlCd0gsUUFBeEI7QUFDSDtBQUNKO0FBenFCMEIsQ0FBVCxDQUF0QjtBQTZxQkFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnJNLGVBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOi/memHjOWhq+WGmeivpue7huivtOaYjizkuLvopoHloavlhpnor6XmqKHlnZfnmoTlip/og73nroDopoFcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTAxLTE0IDEwOjU3OjA4XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIEd1aWxkQ29uc3QgPSByZXF1aXJlKFwiZ3VpbGRfY29uc3RcIik7XG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgR3VpbGRFdmVudCA9IHJlcXVpcmUoXCJndWlsZF9ldmVudFwiKTtcbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XG5cbnZhciBHdWlsZENvbnRyb2xsZXIgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZUNvbnRyb2xsZXIsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbphY3nva7mlbDmja5cbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBHdWlsZE1vZGVsID0gcmVxdWlyZShcImd1aWxkX21vZGVsXCIpO1xuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IEd1aWxkTW9kZWwoKTtcbiAgICAgICAgdGhpcy5tb2RlbC5pbml0Q29uZmlnKCk7XG4gICAgfSxcblxuICAgIC8vIOi/lOWbnuW9k+WJjeeahG1vZGVsXG4gICAgZ2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOebkeWQrOS6i+S7tlxuICAgIHJlZ2lzdGVyRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvZ2luX2V2ZW50X3N1Y2Nlc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5sb2dpbl9ldmVudF9zdWNjZXNzID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChFdmVudElkLkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTLCAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LnVuYmluZCh0aGlzLmxvZ2luX2V2ZW50X3N1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dpbl9ldmVudF9zdWNjZXNzID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIHZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIilcbiAgICAgICAgICAgICAgICB0aGlzLnJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm9sZV92bykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RJbml0UHJvdG9jYWwoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb2xlX2Fzc2V0c19ldmVudCA9IHRoaXMucm9sZV92by5iaW5kKEV2ZW50SWQuVVBEQVRFX1JPTEVfQVRUUklCVVRFLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gXCJnaWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMCkgeyAgICAvLyDov5nkuKrml7blgJnooajnpLrpgIDluK7kuoYs6ZyA6KaB5YWz6Zet5LiA5Lqb56qX5L2TXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5HdWlsZE1haW5XaW5kb3coZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5HdWlsZE1lbWJlcldpbmRvdyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbkd1aWxkRG9uYXRlV2luZG93KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pyJ5YWs5Lya55qE5pe25YCZLOWmguaenOWkhOS6juWIneWni+eql+S9kyzlsLHmoIfor4bliqDlhaXmiJbogIXliJvlu7pcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRfd2luZG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0X29wZW5fbWFpbl93aW5kb3cgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5HdWlsZEluaXRXaW5kb3coZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SW5pdFByb3RvY2FsKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSBcInBvc2l0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVNZW1iZXJCeVBvc2l0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5iaW5kKHRoaXMpKVxuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5Y2P6K6u5o6l5Y+X5LqL5Lu2XG4gICAgcmVnaXN0ZXJQcm90b2NhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEzNTAwLCB0aGlzLmhhbmRsZTEzNTAwKSAgICAgICAgIC8vIOWIm+W7uuWFrOS8mlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTM1MDEsIHRoaXMuaGFuZGxlMTM1MDEpICAgICAgICAgLy8g5YWs5Lya5YiX6KGoXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMzUwMywgdGhpcy5oYW5kbGUxMzUwMykgICAgICAgICAvLyDnlLPor7fliqDlhaXlhazkvJpcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEzNTA1LCB0aGlzLmhhbmRsZTEzNTA1KSAgICAgICAgIC8vIOaTjeS9nOeUs+ivt+aIkOWRmOeahOWIl+ihqFxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTM1MDcsIHRoaXMuaGFuZGxlMTM1MDcpICAgICAgICAgLy8g5pu05paw55Sz6K+35Yqg5YWl5YiX6KGoXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMzUxMywgdGhpcy5oYW5kbGUxMzUxMykgICAgICAgICAvLyDku47lhazkvJrkuK3ouKLkurpcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEzNTE0LCB0aGlzLmhhbmRsZTEzNTE0KSAgICAgICAgIC8vIOmAgOW4rlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTM1MTYsIHRoaXMuaGFuZGxlMTM1MTYpICAgICAgICAgLy8g6Kej5pWj5YWs5LyaXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMzUxOCwgdGhpcy5oYW5kbGUxMzUxOCkgICAgICAgICAvLyDmnKzlhazkvJrln7rnoYDkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEzNTE5LCB0aGlzLmhhbmRsZTEzNTE5KSAgICAgICAgIC8vIOacrOWFrOS8muaIkOWRmOWIl+ihqFxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTM1MjAsIHRoaXMuaGFuZGxlMTM1MjApICAgICAgICAgLy8g6IGM5L2N6K6+572uXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMzUyMSwgdGhpcy5oYW5kbGUxMzUyMSkgICAgICAgICAvLyDkv67mlLnlrqPoqIBcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEzNTIyLCB0aGlzLmhhbmRsZTEzNTIyKSAgICAgICAgIC8vIOiuvue9rueUs+ivt1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTM1MjMsIHRoaXMuaGFuZGxlMTM1MjMpICAgICAgICAgLy8g546p5a625Z+656GA5o2Q54yu5L+h5oGvXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMzUyNCwgdGhpcy5oYW5kbGUxMzUyNCkgICAgICAgICAvLyDmjZDnjK7ov5Tlm55cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEzNTQyLCB0aGlzLmhhbmRlcjEzNTQyKSAgICAgICAgIC8vIOWinuWIoOabtOaWsOaIkOWRmFxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTM1NTgsIHRoaXMuaGFuZGxlMTM1NTgpICAgICAgICAgLy8g5YWs5Lya5oub5Yuf5bm/5ZGKXG5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEzNTY1LCB0aGlzLmhhbmRsZTEzNTY1KSAgICAgICAgIC8vIOW8ueWKvlxuXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMzU2OCwgdGhpcy5oYW5kbGUxMzU2OCkgICAgICAgICAvLyDkv67mlLnlhazkvJrlkI3lrZdcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEzNTczLCB0aGlzLmhhbmRsZTEzNTczKSAgICAgICAgIC8vIOWFrOS8mueUs+ivt+WIl+ihqOe6oueCuVxuXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMzU3NCwgdGhpcy5oYW5kbGUxMzU3NCkgICAgICAgICAvLyDpooblj5bmjZDnjK7lrp3nrrHmg4XlhrVcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEzNTc1LCB0aGlzLmhhbmRsZTEzNTc1KSAgICAgICAgIC8vIOabtOaWsOW9k+WJjeaNkOeMrui/m+W6puWAvFxuXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMzU3NiwgdGhpcy5oYW5kbGUxMzU3NikgICAgICAgICAvLyDmrKLov47mlrDkurpcblxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY5MDAsIHRoaXMuaGFuZGxlMTY5MDApXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjkwMSwgdGhpcy5oYW5kbGUxNjkwMSlcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDE2OTAyLCB0aGlzLmhhbmRsZTE2OTAyKVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY5MDMsIHRoaXMuaGFuZGxlMTY5MDMpXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjkwNCwgdGhpcy5oYW5kbGUxNjkwNClcbiAgICB9LFxuXG4gICAgLy8g6K+35rGC5YWs5Lya55u45YWz5Y2P6K6uXG4gICAgcmVxdWVzdEluaXRQcm90b2NhbDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvID09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucm9sZV92by5naWQgPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5jbGVhck15R3VpbGRJbmZvKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDEzNTE4LCB7fSlcbiAgICAgICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDEzNTIzLCB7fSlcbiAgICAgICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2OTAwLCB7fSlcbiAgICAgICAgICAgIGlmICh0aGlzLnJvbGVfdm8ucG9zaXRpb24gIT0gR3VpbGRDb25zdC5wb3N0X3R5cGUubWVtYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTM1NzMsIHt9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWklumDqOiwg+eUqCzmiZPlvIDlhazkvJrnmoTnlYzpnaIs5Lya5qC55o2u5b2T5YmN5piv5ZCm5a2Y5Zyo5YWs5Lya6ICM5Y675omT5byA5oyH5a6a55qE55WM6Z2iXG4gICAgY2hlY2tPcGVuR3VpbGRXaW5kb3c6IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvID09IG51bGwgfHwgdGhpcy5yb2xlX3ZvLmdpZCA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5HdWlsZEluaXRXaW5kb3codHJ1ZSwgaW5kZXgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5HdWlsZE1haW5XaW5kb3codHJ1ZSwgaW5kZXgpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5Yib5bu65p+l5om+6IGU55uf5YiX6KGo56qX5L2TXG4gICAgb3Blbkd1aWxkSW5pdFdpbmRvdzogZnVuY3Rpb24gKHN0YXR1cywgaW5kZXgpIHtcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRfd2luZG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRfd2luZG93LmNsb3NlKClcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRfd2luZG93ID0gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdF93aW5kb3cgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdF93aW5kb3cgPSBVdGlscy5jcmVhdGVDbGFzcyhcImd1aWxkaW5pdF93aW5kb3dcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdF93aW5kb3cub3BlbihpbmRleClcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmjqfliLbkuLvnlYzpnaJcbiAgICBvcGVuR3VpbGRNYWluV2luZG93OiBmdW5jdGlvbiAoc3RhdHVzLCBpbmRleCkge1xuICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgICAgaWYgKHRoaXMubWFpbl93aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1haW5fd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWluX3dpbmRvdyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYWluX3dpbmRvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWluX3dpbmRvdyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwiZ3VpbGRfbWFpbl93aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1haW5fd2luZG93Lm9wZW4oaW5kZXgpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5oiQ5ZGY55WM6Z2iXG4gICAgb3Blbkd1aWxkTWVtYmVyV2luZG93OiBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgICAgIGlmICghc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tZW1iZXJfd2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW1iZXJfd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW1iZXJfd2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1lbWJlcl93aW5kb3cgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWVtYmVyX3dpbmRvdyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwiZ3VpbGRfbWVtYmVyX3dpbmRvd1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubWVtYmVyX3dpbmRvdy5vcGVuKClcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmjZDnjK7nlYzpnaJcbiAgICBvcGVuR3VpbGREb25hdGVXaW5kb3c6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRvbmF0ZV93aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvbmF0ZV93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRvbmF0ZV93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMucm9sZV92byA9PSBudWxsIHx8ICF0aGlzLnJvbGVfdm8uaXNIYXNHdWlsZCgpKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuaCqOaaguaXtui/mOayoeacieWKoOWFpeWFrOS8mlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kb25hdGVfd2luZG93ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvbmF0ZV93aW5kb3cgPSBVdGlscy5jcmVhdGVDbGFzcyhcImd1aWxkX2RvbmF0ZV93aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRvbmF0ZV93aW5kb3cub3BlbigpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy9cbiAgICBvcGVuR3VpbGRBcHBseVdpbmRvdzogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXBwbHlfd2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseV93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5X3dpbmRvdyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hcHBseV93aW5kb3cgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJndWlsZF9hcHBseV93aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFwcGx5X3dpbmRvdy5vcGVuKClcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+aJk+W8gOWFrOS8mua0u+i3g+mdouadv1xuICAgIG9wZW5HdWlsZEFjdGlvbkdvYWxXaW5kb3c6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdvYWxfd2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb2FsX3dpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ29hbF93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ29hbF93aW5kb3cgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ29hbF93aW5kb3cgPSBVdGlscy5jcmVhdGVDbGFzcyhcImd1aWxkX2FjdGlvbl9nb2FsX3dpbmRvd1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ29hbF93aW5kb3cub3BlbigpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/miZPlvIDlhazkvJrmtLvot4PlpZblirHpooTop4jpnaLmnb9cbiAgICBvcGVuR3VpbGRSZXdhcmRXaW5kb3c6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJld2FyZF93aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJld2FyZF93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJld2FyZF93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMucmV3YXJkX3dpbmRvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJndWlsZF9yZXdhcmRfd2luZG93XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXdhcmRfd2luZG93Lm9wZW4oKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5YWs5Lya55Sz6K+36K6+572u6Z2i5p2/XG4gICAgb3Blbkd1aWxkQXBwbHlTZXRXaW5kb3c6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcGx5X3NldF93aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5X3NldF93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5X3NldF93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXBwbHlfc2V0X3dpbmRvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseV9zZXRfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJndWlsZF9hcHBseV9zZXRfd2luZG93XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcHBseV9zZXRfd2luZG93Lm9wZW4oKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v6IGM5L2N5Lu75YWN5ZKM6Lii5Lq66Z2i5p2/XG4gICAgb3Blbkd1aWxkT3BlcmF0aW9uUG9zdFdpbmRvdzogZnVuY3Rpb24gKHN0YXR1cywgZGF0YSkge1xuICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uX3Bvc3Rfd2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRpb25fcG9zdF93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdGlvbl9wb3N0X3dpbmRvdyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVyYXRpb25fcG9zdF93aW5kb3cgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uX3Bvc3Rfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJndWlsZF9vcGVyYXRpb25fcG9zdF93aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9wZXJhdGlvbl9wb3N0X3dpbmRvdy5vcGVuKGRhdGEpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5by55Yq+5biu5Li7XG4gICAgb3Blbkd1aWxkSW1wZWFjaFBvc3RXaW5kb3c6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmltcGVhY2hfcG9zdF93aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltcGVhY2hfcG9zdF93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmltcGVhY2hfcG9zdF93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW1wZWFjaF9wb3N0X3dpbmRvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbXBlYWNoX3Bvc3Rfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJndWlsZF9pbXBlYWNoX3Bvc3Rfd2luZG93XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbXBlYWNoX3Bvc3Rfd2luZG93Lm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+WFrOS8muaUueWQjemdouadv1xuICAgIG9wZW5HdWlsZENoYW5nZU5hbWVXaW5kb3c6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYW5nZV9uYW1lX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlX25hbWVfd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VfbmFtZV93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hhbmdlX25hbWVfd2luZG93ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZV9uYW1lX3dpbmRvdyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwiZ3VpbGRfY2hhbmdlX25hbWVfd2luZG93XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VfbmFtZV93aW5kb3cub3BlbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5YWs5Lya5a6j6KiA5L+u5pS5XG4gICAgb3Blbkd1aWxkQ2hhbmdlU2lnbldpbmRvdzogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hhbmdlX3NpZ25fd2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2Vfc2lnbl93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZV9zaWduX3dpbmRvdyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGFuZ2Vfc2lnbl93aW5kb3cgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlX3NpZ25fd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJndWlsZF9jaGFuZ2Vfc2lnbl93aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZV9zaWduX3dpbmRvdy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvL+ivt+axguWIm+W7uuWFrOS8mlxuICAgIC8vQG5hbWU65YWs5Lya5ZCN5a2XXG4gICAgLy9Ac2lnbjrlrqPoqIBcbiAgICAvL0BhcHBseV90eXBlOueUs+ivt+exu+WeiygwOuiHquWKqOWuoeaJuSAxOuaJi+WKqOWuoeaJuSAyOuS4jeWFgeiuuOeUs+ivtylcbiAgICAvL0BhcHBseV9sZXY65pyA5bCP562J57qn6KaB5rGCXG4gICAgcmVxdWVzdENyZWF0ZUd1aWxkOiBmdW5jdGlvbiAobmFtZSwgc2lnbiwgYXBwbHlfdHlwZSwgYXBwbHlfbGV2KSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5uYW1lID0gbmFtZTtcbiAgICAgICAgcHJvdG9jYWwuc2lnbiA9IHNpZ247XG4gICAgICAgIHByb3RvY2FsLmFwcGx5X2xldiA9IGFwcGx5X2xldiB8fCAxO1xuICAgICAgICBwcm90b2NhbC5hcHBseV90eXBlID0gYXBwbHlfdHlwZSB8fCAwO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMzUwMCwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvL+WIm+W7uuWFrOS8mui/lOWbnlxuICAgIGhhbmRsZTEzNTAwOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICB9LFxuXG4gICAgLy/or7fmsYLlhazkvJrliJfooahcbiAgICAvL0BwYWdlOumhteeggVxuICAgIC8vQGZsYWc65piv5ZCm5pi+56S65ruh5Lq655qE5YWs5LyaIDA65LiN5pi+56S6IDE65pi+56S6XG4gICAgLy9AbnVtOuavj+mhteaYvuekuuadoeaVsFxuICAgIC8vQG5hbWU65aaC5p6c5LiN5Li64oCc4oCd6KGo56S65piv5pCc57SiXG4gICAgcmVxdWVzdEd1aWxkTGlzdDogZnVuY3Rpb24gKHBhZ2UsIGZsYWcsIG51bSwgbmFtZSkge1xuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwucGFnZSA9IHBhZ2UgfHwgMDtcbiAgICAgICAgcHJvdG9jYWwuZmxhZyA9IGZsYWcgfHwgMTtcbiAgICAgICAgcHJvdG9jYWwubnVtID0gbnVtIHx8IDA7XG4gICAgICAgIHByb3RvY2FsLm5hbWUgPSBuYW1lIHx8IFwiXCI7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDEzNTAxLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIC8v6I635Y+W5YWs5Lya5YiX6KGoXG4gICAgaGFuZGxlMTM1MDE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwudXBkYXRlR3VpbGRMaXN0KGRhdGEubmFtZSwgZGF0YS5ndWlsZHMpO1xuICAgIH0sXG5cbiAgICAvL+eUs+ivt+WKoOWFpeWFrOS8mlxuICAgIHJlcXVlc3RKb2luR3VpbGQ6IGZ1bmN0aW9uIChnaWQsIGdzcnZfaWQsIHR5cGUpIHtcbiAgICAgICAgaWYgKGdpZCA9PSBudWxsIHx8IGdzcnZfaWQgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwuZ2lkID0gZ2lkO1xuICAgICAgICBwcm90b2NhbC5nc3J2X2lkID0gZ3Nydl9pZDtcbiAgICAgICAgcHJvdG9jYWwudHlwZSA9IHR5cGUgfHwgMTtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTM1MDMsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgLy/or7fmsYLliqDlhaXlhazkvJrov5Tlm55cbiAgICBoYW5kbGUxMzUwMzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMSlcbiAgICAgICAgICAgIHRoaXMubW9kZWwudXBkYXRlR3VpbGRBcHBseVN0YXR1cyhkYXRhLmdpZCwgZGF0YS5nc3J2X2lkLCBkYXRhLmlzX2FwcGx5KTtcbiAgICB9LFxuXG4gICAgLy/mm7TmlrDoh6rlt7HlhazkvJrnmoTkv6Hmga9cbiAgICBoYW5kbGUxMzUxODogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVNeUd1aWxkSW5mbyhkYXRhKTtcbiAgICAgICAgLy9cbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdF9vcGVuX21haW5fd2luZG93ID09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdF9vcGVuX21haW5fd2luZG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9wZW5HdWlsZE1haW5XaW5kb3codHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/lvLnlir7luK7kuLtcbiAgICBzZW5kMTM1NjU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTM1NjUsIHt9KTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMTM1NjU6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguWFrOS8muaIkOWRmOWIl+ihqFxuICAgIHJlcXVlc3RHdWlsZE1lbWJlckxpc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTM1MTksIHt9KTtcbiAgICB9LFxuXG4gICAgLy/mm7TmlrDmlbTkuKrlhazkvJrmiJDlkZjliJfooahcbiAgICBoYW5kbGUxMzUxOTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVNeUd1aWxkTWVtYmVyTGlzdChkYXRhLm1lbWJlcnMsIDEpO1xuICAgIH0sXG5cbiAgICBoYW5kbGUxMzUyMzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVEb25hdGVJbmZvKGRhdGEuZG9uYXRlX2xpc3QpO1xuICAgICAgICAvL+abtOaWsOaNkOeMruWuneeuseaDheWGtVxuICAgICAgICB0aGlzLm1vZGVsLnVwZGF0ZURvbmF0ZUJveEluZm8oZGF0YS5ib3hlcywgZGF0YS5kb25hdGVfZXhwKTtcbiAgICAgICAgcmVxdWlyZShcInJlZGJhZ19jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS51cGRhdGVSZWRCYWdOdW0oZGF0YS5kYXlfc2VuZF9udW0sZGF0YS5kYXlfcmVjdl9udW0pO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguWFrOS8muaNkOeMrlxuICAgIHJlcXVlc3RHdWlsZERvbmF0ZTogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMzUyNCwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvL+WFrOS8muaNkOeMrui/lOWbnlxuICAgIGhhbmRsZTEzNTI0OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKVxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRHdWlsZERvbmF0ZVN0YXR1cygpO1xuICAgIH0sXG5cbiAgICAvL+abtOaWsO+8jOWinuWKoOaIluiAheWIoOmZpOaIkOWRmFxuICAgIGhhbmRlcjEzNTQyOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB0aGlzLm1vZGVsLnVwZGF0ZU15R3VpbGRNZW1iZXJMaXN0KGRhdGEubWVtYmVycywgZGF0YS50eXBlKTtcbiAgICB9LFxuXG4gICAgLy/kvJrplb/miJbogIXlia/kvJrplb/lpITnkIbmk43kvZznlLPor7fliJfooahcbiAgICByZXF1ZXN0T3BlcmF0aW9uQXBwbHk6IGZ1bmN0aW9uICh0eXBlLCByaWQsIHNydl9pZCkge1xuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwudHlwZSA9IHR5cGU7XG4gICAgICAgIHByb3RvY2FsLnJpZCA9IHJpZDtcbiAgICAgICAgcHJvdG9jYWwuc3J2X2lkID0gc3J2X2lkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMzUwNSwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvL+aTjeS9nOeUs+ivt+eOqeWutuWIl+ihqOi/lOWbnlxuICAgIGhhbmRsZTEzNTA1OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKVxuICAgICAgICAgICAgdGhpcy5tb2RlbC5kZWxldGVBcHBseUluZm8oZGF0YS5yaWQsIGRhdGEuc3J2X2lkKTtcbiAgICB9LFxuXG4gICAgLy/or7fmsYLlvZPliY3nlLPor7fliqDlhaXnmoTlhazkvJrliJfooahcbiAgICByZXF1ZXN0R3VpbGRBcHBseUxpc3Q6IGZ1bmN0aW9uIChwYWdlLCBudW0pIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLnBhZ2UgPSBwYWdlO1xuICAgICAgICBwcm90b2NhbC5udW0gPSBudW07XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDEzNTA3LCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIC8v5pu05paw55Sz6K+35YiX6KGoXG4gICAgaGFuZGxlMTM1MDc6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwudXBkYXRlR3VpbGRBcHBseUxpc3QoZGF0YS5ndWlkcyk7XG4gICAgfSxcblxuICAgIC8v6K+35rGC6YCA5biuXG4gICAgcmVxdWVzdEV4aXRHdWlsZDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgIGlmIChyb2xlX3ZvID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgaWYgKHJvbGVfdm8ucG9zaXRpb24gPT0gR3VpbGRDb25zdC5wb3N0X3R5cGUubGVhZGVyKSB7ICAgICAgICAgIC8v6Ieq5bex5piv5biu5Li777yM5YiZ5piv6Kej5pWj5YWs5LyaXG4gICAgICAgICAgICB2YXIgbXNnID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5piv5ZCm56Gu5a6a6Kej5pWj5YWs5Lya44CQJXPjgJHvvJ9cIiksIHJvbGVfdm8uZ25hbWUpO1xuICAgICAgICAgICAgdmFyIGV4dGVuZF9tc2cgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHJvbGVfdm8uZ3VpbGRfcXVpdF90aW1lICE9IDApXG4gICAgICAgICAgICAgICAgZXh0ZW5kX21zZyA9IFV0aWxzLlRJMThOKFwiKOino+aVo+WFrOS8muWQju+8jOS8mumVv+WwhuWcqDI05bCP5pe25YaF5peg5rOV5Yqg5YWl5YW25LuW5YWs5LyaKVwiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBleHRlbmRfbXNnID0gVXRpbHMuVEkxOE4oXCIo6aaW5qyh6YCA5Ye65oiW6Kej5pWj5YWs5Lya5ZCO77yM5Y+v56uL5Y2z5Yqg5YWl5YW25LuW5YWs5Lya44CCKVwiKTtcbiAgICAgICAgICAgIHZhciBDb21tb25BbGVydCA9IHJlcXVpcmUoXCJjb21tb25hbGVydFwiKTtcbiAgICAgICAgICAgIENvbW1vbkFsZXJ0LnNob3cobXNnLCBVdGlscy5USTE4TihcIuehruWumlwiKSwgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMzUxNiwge30pO1xuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSwgVXRpbHMuVEkxOE4oXCLlj5bmtohcIiksIG51bGwsIG51bGwsIG51bGwsIHsgdGltZXI6IDMsIHRpbWVyX2ZvcjogdHJ1ZSwgb2ZmX3k6IDQzLCB0aXRsZTogVXRpbHMuVEkxOE4oXCLop6PmlaPlhazkvJpcIiksIGV4dGVuZF9zdHI6IGV4dGVuZF9tc2csIGV4dGVuZF9vZmZ5OiAtNSwgZXh0ZW5kX2FsaWdtZW50OiBjYy5URVhUX0FMSUdOTUVOVF9DRU5URVIgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbXNnID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5piv5ZCm56Gu5a6a6YCA5Ye65YWs5Lya44CQJXPjgJHvvJ9cIiksIHJvbGVfdm8uZ25hbWUpO1xuICAgICAgICAgICAgdmFyIGV4dGVuZF9tc2cgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHJvbGVfdm8uZ3VpbGRfcXVpdF90aW1lICE9IDApXG4gICAgICAgICAgICAgICAgZXh0ZW5kX21zZyA9IFV0aWxzLlRJMThOKFwiKOmAgOWHuuWFrOS8muWQjjEy5bCP5pe25YaF5peg5rOV5Yqg5YWl5YW25LuW5YWs5LyaKVwiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBleHRlbmRfbXNnID0gVXRpbHMuVEkxOE4oXCIo6aaW5qyh6YCA5Ye65YWs5Lya5Y+v56uL5Y2z5Yqg5YWl5YW25a6D5YWs5LyaKVwiKTtcbiAgICAgICAgICAgIHZhciBDb21tb25BbGVydCA9IHJlcXVpcmUoXCJjb21tb25hbGVydFwiKTtcbiAgICAgICAgICAgIENvbW1vbkFsZXJ0LnNob3cobXNnLCBVdGlscy5USTE4TihcIuehruWumlwiKSwgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMzUxNCwge30pO1xuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSwgVXRpbHMuVEkxOE4oXCLlj5bmtohcIiksIG51bGwsIG51bGwsIG51bGwsIHsgdGltZXI6IDMsIHRpbWVyX2ZvcjogdHJ1ZSwgb2ZmX3k6IDQzLCB0aXRsZTogVXRpbHMuVEkxOE4oXCLpgIDlh7rlhazkvJpcIiksIGV4dGVuZF9zdHI6IGV4dGVuZF9tc2csIGV4dGVuZF9vZmZ5OiAtNSwgZXh0ZW5kX2FsaWdtZW50OiBjYy5URVhUX0FMSUdOTUVOVF9DRU5URVIgfSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/pgIDluK5cbiAgICBoYW5kbGUxMzUxNDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgfSxcblxuICAgIC8v6Kej5pWjXG4gICAgaGFuZGxlMTM1MTY6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgIH0sXG5cbiAgICAvL+iuvue9ruS/ruaUueeUs+ivt+adoeS7tlxuICAgIHJlcXVlc3RDaGFuZ2VBcHBseVNldDogZnVuY3Rpb24gKGFwcGx5X3R5cGUsIGFwcGx5X2xldikge1xuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwuYXBwbHlfdHlwZSA9IGFwcGx5X3R5cGU7XG4gICAgICAgIHByb3RvY2FsLmFwcGx5X2xldiA9IGFwcGx5X2xldjtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTM1MjIsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgLy/orr7nva7mnYPpmZDov5Tlm55cbiAgICBoYW5kbGUxMzUyMjogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMSlcbiAgICAgICAgICAgIHRoaXMub3Blbkd1aWxkQXBwbHlTZXRXaW5kb3coZmFsc2UpO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguS/ruaUueWFrOS8muWuo+iogFxuICAgIHJlcXVlc3RDaGFuZ2VHdWlsZFNpZ246IGZ1bmN0aW9uIChzaWduKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5zaWduID0gc2lnbjtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTM1MjEsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgLy/lhazkvJrlrqPoqIDkv67mlLlcbiAgICBoYW5kbGUxMzUyMTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMSlcbiAgICAgICAgICAgIHRoaXMub3Blbkd1aWxkQ2hhbmdlU2lnbldpbmRvdyhmYWxzZSk7XG4gICAgfSxcblxuICAgIC8v5LuO5YWs5Lya5Lit6Lii5Lq6XG4gICAgcmVxdWVzdEtpY2tvdXRNZW1iZXI6IGZ1bmN0aW9uIChyaWQsIHNydl9pZCwgbmFtZSkge1xuICAgICAgICB2YXIgY2FsbF9iYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgICAgICBwcm90b2NhbC5yaWQgPSByaWQ7XG4gICAgICAgICAgICBwcm90b2NhbC5zcnZfaWQgPSBzcnZfaWQ7XG4gICAgICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMzUxMywgcHJvdG9jYWwpO1xuICAgICAgICB9LmJpbmQodGhpcylcblxuICAgICAgICB2YXIgbXNnID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5piv5ZCm56Gu6K6k5bCG44CQJXPjgJHnjqnlrrbnp7vpmaTlh7rlhazkvJrvvJ9cIiksIG5hbWUpO1xuICAgICAgICB2YXIgQ29tbW9uQWxlcnQgPSByZXF1aXJlKFwiY29tbW9uYWxlcnRcIik7XG4gICAgICAgIENvbW1vbkFsZXJ0LnNob3cobXNnLCBVdGlscy5USTE4TihcIuehruWumlwiKSwgZnVuY3Rpb24gKCkgeyBjYWxsX2JhY2soKSB9LmJpbmQodGhpcyksIFV0aWxzLlRJMThOKFwi5Y+W5raIXCIpKVxuICAgIH0sXG5cbiAgICAvL+i4ouS6uui/lOWbnlxuICAgIGhhbmRsZTEzNTEzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKVxuICAgICAgICAgICAgdGhpcy5vcGVuR3VpbGRPcGVyYXRpb25Qb3N0V2luZG93KGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLy/ogYzkvY3ku7vlkb1cbiAgICByZXF1ZXN0T3BlcmF0aW9uUG9zdDogZnVuY3Rpb24gKHJpZCwgc3J2X2lkLCBwb3NpdGlvbikge1xuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwucmlkID0gcmlkO1xuICAgICAgICBwcm90b2NhbC5zcnZfaWQgPSBzcnZfaWQ7XG4gICAgICAgIHByb3RvY2FsLnBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDEzNTIwLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIGhhbmRsZTEzNTIwOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKVxuICAgICAgICAgICAgdGhpcy5vcGVuR3VpbGRPcGVyYXRpb25Qb3N0V2luZG93KGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLy/or7fmsYLmlLnlkI1cbiAgICByZXF1ZXN0Q2hhbmdHdWlsZE5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTM1NjgsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgLy/lhazkvJrmlLnlkI1cbiAgICBoYW5kbGUxMzU2ODogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMSlcbiAgICAgICAgICAgIHRoaXMub3Blbkd1aWxkQ2hhbmdlTmFtZVdpbmRvdyhmYWxzZSk7XG4gICAgfSxcblxuICAgIC8v5Y+R6YCB5YWs5Lya5oub5Yuf5bm/5ZGKXG4gICAgcmVxdWVzdEd1aWxkUmVjcnVpdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbXlfaW5mbyA9IHRoaXMubW9kZWwuZ2V0TXlHdWlsZEluZm8oKTtcbiAgICAgICAgaWYgKG15X2luZm8gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG15X2luZm8ucmVjcnVpdF9udW0gPT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBtc2cgPSBVdGlscy5USTE4TihcIuaYr+WQpuehruWumuWPkeW4g+aLm+WLn+WFrOWRiu+8n1xcblxcbjxjb2xvcj0jQUE2MTExPjxzaXplPTIyPuavj+aXpemmluasoeWPkeW4g+WFrOWRiuWFjei0uTwvc2l6ZT48L2M+XCIpO1xuICAgICAgICAgICAgICAgIHZhciBleHRlbmRfbXNnID0gVXRpbHMuVEkxOE4oXCLvvIjmr4/ml6XpppbmrKHlj5HluIPlhazlkYrlhY3otLnvvIlcIik7XG4gICAgICAgICAgICAgICAgdmFyIENvbW1vbkFsZXJ0ID0gcmVxdWlyZShcImNvbW1vbmFsZXJ0XCIpO1xuICAgICAgICAgICAgICAgIENvbW1vbkFsZXJ0LnNob3cobXNnLCBVdGlscy5USTE4TihcIuehruWumlwiKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMzU1OCwge30pXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCBVdGlscy5USTE4TihcIuWPlua2iFwiKSwgbnVsbCwgbnVsbCwgbnVsbCxudWxsKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0gZ2RhdGEoXCJndWlsZF9kYXRhXCIsIFwiZGF0YV9jb25zdFwiLCBcInJlY3J1aXRfY29zdFwiKTtcbiAgICAgICAgICAgICAgICB2YXIgcm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiByb2xlX3ZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IHJvbGVfdm8uZ29sZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4dGVuZF9tc2cgPSBjYy5qcy5mb3JtYXRTdHIoXCI8Y29sb3I9I0FBNjExMT48c2l6ZT0yMj7lj5HluIPmtojogJfvvJo8aW1nIHNyYz0nJXMnIHNjYWxlPTAuNSAvPiVzLyVzPC9zaXplPjwvYz5cIiwxNSwgVXRpbHMuZ2V0TW9uZXlTdHJpbmcodG90YWwpLCBjb25maWcudmFsKVxuICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5piv5ZCm56Gu5a6a6Iqx6LS5PGltZyBzcmM9JyVzJyBzY2FsZT0wLjUgLz4lc+WPkeW4g+aLm+WLn+W5v+WRiu+8n1xcblxcbiVzXCIpLCAxNSwgY29uZmlnLnZhbCxleHRlbmRfbXNnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENvbW1vbkFsZXJ0ID0gcmVxdWlyZShcImNvbW1vbmFsZXJ0XCIpXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSAgUGF0aFRvb2wuZ2V0SXRlbVJlcygxNSk7XG4gICAgICAgICAgICAgICAgICAgIENvbW1vbkFsZXJ0LnNob3cobXNnLCBVdGlscy5USTE4TihcIuehruWumlwiKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTM1NTgsIHt9KVxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIFV0aWxzLlRJMThOKFwi5Y+W5raIXCIpLCBudWxsLCAyLCBudWxsLCB7cmVzQXJyOltyZXNdfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/mi5vli5/lub/lkYrov5Tlm55cbiAgICBoYW5kbGUxMzU1ODogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgfSxcblxuICAgIC8v5YWs5Lya55Sz6K+357qi54K5XG4gICAgaGFuZGxlMTM1NzM6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwudXBkYXRlR3VpbGRSZWRTdGF0dXMoR3VpbGRDb25zdC5yZWRfaW5kZXguYXBwbHksIChkYXRhLmNvZGUgPT0gMSkpO1xuICAgIH0sXG5cbiAgICAvL+acieeOqeWutueUs+ivt+WKoOWFpeeahOaPkOekulxuICAgIHNldEFwcGx5TGlzdFN0YXR1czogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVHdWlsZFJlZFN0YXR1cyhHdWlsZENvbnN0LnJlZF9pbmRleC5hcHBseSwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIC8v6K+35rGC6aKG5Y+W5oyH5a6a5o2Q54yu5a6d566xXG4gICAgcmVxdWVzdERvbmF0ZUJveFJld2FyZHM6IGZ1bmN0aW9uIChib3hfaWQpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLmJveF9pZCA9IGJveF9pZDtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTM1NzQsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgLy/pooblj5bmjZDnjK7lrp3nrrHov5Tlm55cbiAgICBoYW5kbGUxMzU3NDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMSlcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0RG9uYXRlQm94U3RhdHVzKGRhdGEuYm94X2lkKTtcbiAgICB9LFxuXG4gICAgLy/mm7TmlrDmjZDnjK7ov5vluqblgLxcbiAgICBoYW5kbGUxMzU3NTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVEb25hdGVBY3Rpdml0eShkYXRhLmRvbmF0ZV9leHApO1xuICAgIH0sXG5cbiAgICB3ZWxjb21lTmV3TWVtYmVyOiBmdW5jdGlvbiAocmlkLCBzcnZfaWQpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLnJpZCA9IHJpZDtcbiAgICAgICAgcHJvdG9jYWwuc3J2X2lkID0gc3J2X2lkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMzU3NiwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICBoYW5kbGUxMzU3NjogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICB9LFxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLeWFrOS8mua0u+i3g1xuICAgIC8v5Z+65pys5L+h5oGvXG4gICAgc2VuZDE2OTAwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2OTAwLCB7fSk7XG4gICAgfSxcblxuICAgIGhhbmRsZTE2OTAwOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB0aGlzLm1vZGVsLnVwZGF0YUd1aWxkQWN0aW9uUmVkU3RhdHVzKGRhdGEpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEd1aWxkRXZlbnQuVXBkYXRhR3VpbGRHb2FsQmFzaWNEYXRhLCBkYXRhKTtcbiAgICB9LFxuXG4gICAgLy/ku7vliqHkv6Hmga9cbiAgICBzZW5kMTY5MDE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTY5MDEsIHt9KTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMTY5MDE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoR3VpbGRFdmVudC5VcGRhdGFHdWlsZEdvYWxUYXNrRGF0YSwgZGF0YSk7XG4gICAgfSxcblxuICAgIC8v5Y2V5p2h5Lu75Yqh5L+h5oGvXG4gICAgaGFuZGxlMTY5MDI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoR3VpbGRFdmVudC5VcGRhdGFHdWlsZEdvYWxTaW5nbGVUYXNrRGF0YSwgZGF0YSk7XG4gICAgfSxcblxuICAgIC8v5o+Q5Lqk5Lu75YqhXG4gICAgc2VuZDE2OTAzOiBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2OTAzLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIGhhbmRsZTE2OTAzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICB9LFxuXG4gICAgc2VuZDE2OTA0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2OTA0LCB7fSk7XG4gICAgfSxcblxuICAgIGhhbmRsZTE2OTA0OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICB9LFxuXG5cbiAgICBnZXRHdWlsZE1haW5Sb290V25kOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMubWFpbl93aW5kb3cpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFpbl93aW5kb3cucm9vdF93bmRcbiAgICAgICAgfVxuICAgIH0sXG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEd1aWxkQ29udHJvbGxlcjtcbiJdfQ==
|