|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/chat/view/chat_item.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, '0c5beN4BwhJVbiEQYzIsQu+', 'chat_item');
|
// Scripts/mod/chat/view/chat_item.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: shiraho@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 物品单列,显示对象
|
// <br/>Create: new Date().toISOString()
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var GoodsVo = require("goods_vo");
|
|
var PathTool = require("pathtool");
|
|
var BackPackConst = require("backpack_const");
|
|
var ChatConst = require("chat_const");
|
|
var ChatItemController = require("chat_item_controller");
|
|
var ChatHelp = require("chat_help");
|
|
var ChatController = require("chat_controller");
|
|
var ChatItem = cc.Class({
|
"extends": BaseView,
|
properties: {
|
content: null,
|
msg_index: 0,
|
// 消息标签号
|
data: null,
|
height: 100,
|
update_cb: null,
|
pos_y: 0,
|
is_mine: false,
|
head_margin: 63,
|
name_margin: 120,
|
msg_bg_pos: 220,
|
msg_rt_pos: 200,
|
channel: null,
|
init_ing: false,
|
have_nd: true,
|
head_sp: null,
|
sp_res: null,
|
is_loading: false
|
},
|
ctor: function ctor() {
|
this.content = arguments[0];
|
this.data = arguments[1];
|
this.height = arguments[2];
|
this.pos_y = arguments[3];
|
this.channel = arguments[4];
|
|
var RoleController = require("role_controller");
|
|
var role_vo = this.role_vo = RoleController.getInstance().getRoleVo();
|
|
if (this.channel === ChatConst.Channel.Friend) {
|
if (this.data.flag === 1 || this.data.flag === 11 || !this.data.flag) {
|
this.is_mine = true;
|
this.face_id = role_vo.face_id;
|
this.r_name = role_vo.name;
|
} else {
|
this.face_id = this.data.face_id;
|
this.r_name = this.data.name;
|
}
|
} else if (this.channel === ChatConst.Channel.System) {} else {
|
if (this.data && this.data.role_list && this.data.role_list[0]) {
|
var msg_role = this.data.role_list[0];
|
if (msg_role.rid === role_vo.rid && msg_role.srv_id === role_vo.srv_id) this.is_mine = true;
|
this.face_id = this.data.role_list[0].face_id;
|
this.r_name = this.data.role_list[0].name;
|
}
|
}
|
|
var msg;
|
|
if (this.data.len == 0) {
|
msg = StringUtil.parseStr(this.data.msg, "handler").string;
|
} else {
|
msg = this.data.msg;
|
} // 对数据进行初始化
|
|
|
this.msg = msg;
|
this.head_path = PathTool.getHeadRes(this.face_id);
|
this.chat_item_ctrl = ChatItemController.getInstance();
|
this.updateInterval = 1;
|
this.updateTimer = 0;
|
this.totalCount = 0;
|
},
|
initRootWind: function initRootWind() {
|
if (this.init_ing) return;
|
this.root_wnd = this.content.getChatItemNd();
|
|
if (this.root_wnd) {
|
this.have_nd = true;
|
this.root_wnd.active = true;
|
this.initWidget();
|
} else {
|
var prefab_path = PathTool.getPrefabPath("chat", "chat_item");
|
LoaderManager.getInstance().loadRes(prefab_path, function (res_object) {
|
this.init_ing = false;
|
var root_wnd = res_object;
|
|
if (this.content && this.content.msgs_content) {
|
root_wnd.parent = this.content.msgs_content;
|
|
if (this.have_nd) {
|
this.root_wnd = root_wnd;
|
this.initWidget();
|
} else {
|
root_wnd.active = false;
|
this.content.chat_items_cache.push(root_wnd);
|
}
|
}
|
}.bind(this));
|
this.init_ing = true;
|
}
|
},
|
initWidget: function initWidget() {
|
this.common_msg_nd = this.seekChild("common_msg");
|
this.notice_msg_nd = this.seekChild("notice");
|
this.head_nd = this.seekChild("head_bg");
|
this.name_nd = this.seekChild("name_nd");
|
this.head_kuang_sp = this.seekChild("head_kuang", cc.Sprite);
|
this.sex_nd = this.seekChild("sex");
|
this.sex_sp = this.seekChild("sex", cc.Sprite);
|
this.msg_root_nd = this.seekChild("msg_root");
|
this.message_bg_nd = this.seekChild("msg_bg");
|
this.head_sp = this.seekChild("head_sp", cc.Sprite);
|
this.name_lb = this.seekChild("name_nd", cc.Label);
|
this.message_rt = this.seekChild("msg_rt", cc.RichText);
|
this.message_nd = this.seekChild("msg_rt");
|
this.notice_msg_rt = this.seekChild("notice_msg", cc.RichText);
|
this.head_wd = this.head_nd.getComponent(cc.Widget);
|
this.name_wd = this.name_nd.getComponent(cc.Widget);
|
this.message_wd = this.message_nd.getComponent(cc.Widget);
|
this.root_wnd.height = 100;
|
this.message_nd.height = 24;
|
this.message_bg_nd.height = 36;
|
this.message_rt.addTouchHandler("handler", this.onClickItem.bind(this));
|
this.notice_msg_rt.addTouchHandler("handler", this.onClickItem.bind(this));
|
|
if (this.data) {
|
this.updateWidget();
|
this.register();
|
}
|
},
|
register: function register() {
|
this.head_kuang_sp.node.on(cc.Node.EventType.TOUCH_START, this.upBtnStart, this);
|
this.head_kuang_sp.node.on(cc.Node.EventType.TOUCH_CANCEL, this.upBtnEnd, this);
|
this.head_kuang_sp.node.on(cc.Node.EventType.TOUCH_END, this.upBtnEnd, this);
|
},
|
upBtnStart: function upBtnStart() {
|
this.stopUpdate();
|
this.startUpdate();
|
},
|
upBtnEnd: function upBtnEnd() {
|
this.stopUpdate();
|
|
if (this.totalCount < this.updateInterval) {
|
//小于1秒时
|
this.touchHead();
|
} else {
|
if (this.data == null || this.data.role_list == null || this.data.role_list[0] == null || this.role_vo == null) {
|
this.totalCount = 0;
|
this.updateTimer = 0;
|
return;
|
}
|
|
if (this.data.role_list[0].rid == this.role_vo.rid && this.data.role_list[0].srv_id == this.role_vo.srv_id) {
|
this.totalCount = 0;
|
this.updateTimer = 0;
|
return;
|
}
|
|
var input = ChatController.getInstance().getChatInput();
|
|
if (input) {
|
input.setInputText("@" + this.data.role_list[0].name + " ");
|
}
|
}
|
|
this.totalCount = 0;
|
this.updateTimer = 0;
|
},
|
update: function update(dt) {
|
if (this.head_kuang_sp.node.active == false) {
|
this.totalCount = 0;
|
this.updateTimer = 0;
|
this.stopUpdate();
|
return;
|
}
|
|
this.updateTimer += dt;
|
this.totalCount += dt;
|
|
if (this.updateTimer >= this.updateInterval) {
|
this.updateTimer = 0;
|
|
if (this.data == null || this.data.role_list == null || this.data.role_list[0] == null || this.role_vo == null) {
|
this.stopUpdate();
|
return;
|
}
|
|
if (this.data.role_list[0].rid == this.role_vo.rid && this.data.role_list[0].srv_id == this.role_vo.srv_id) {
|
this.stopUpdate();
|
return;
|
}
|
|
var input = ChatController.getInstance().getChatInput();
|
|
if (input) {
|
input.setInputText("@" + this.data.role_list[0].name + " ");
|
}
|
}
|
},
|
touchHead: function touchHead() {
|
var rid, srv_id, name;
|
|
if (this.channel === ChatConst.Channel.Friend) {
|
// rid = this.data.rid;
|
// srv_id = this.data.srv_id;
|
return;
|
} else {
|
if (this.data && this.data.role_list && this.data.role_list[0]) {
|
rid = this.data.role_list[0].rid;
|
srv_id = this.data.role_list[0].srv_id;
|
name = this.data.role_list[0].name;
|
}
|
}
|
|
if (rid == this.role_vo.rid) return;
|
Utils.playButtonSound(1);
|
ChatController.getInstance().openFriendInfo({
|
srv_id: srv_id,
|
rid: rid,
|
channel: this.channel,
|
name: name
|
});
|
},
|
onShow: function onShow() {},
|
// 更新数据
|
updateData: function updateData(data, msg_index, pos_y) {
|
this.data = data;
|
this.pos_y = pos_y; // if ()
|
},
|
// 更新布局
|
updateWidget: function updateWidget() {
|
if (this.channel == ChatConst.Channel.System) {
|
this.common_msg_nd.active = false;
|
this.notice_msg_nd.active = true;
|
this.root_wnd.y = -this.pos_y;
|
this.notice_msg_rt.string = this.msg;
|
this.notice_msg_nd.width = 640;
|
this.notice_msg_nd.height = this.notice_msg_rt.node.height + 20;
|
this.root_wnd.height = this.notice_msg_nd.height + 20;
|
return;
|
} else {
|
this.notice_msg_nd.active = false;
|
var show_delay = cc.delayTime(0.1);
|
var show_active = cc.callFunc(function () {
|
this.common_msg_nd.active = true;
|
}, this);
|
var show_act = cc.sequence(show_delay, show_active);
|
this.root_wnd.runAction(show_act);
|
} // 布局
|
|
|
if (this.is_mine) {
|
this.head_wd.isAlignLeft = false;
|
this.head_wd.isAlignRight = true;
|
this.head_wd.right = this.head_margin;
|
this.name_wd.isAlignLeft = false;
|
this.name_wd.isAlignRight = true;
|
this.name_wd.right = this.name_margin;
|
this.message_bg_nd.anchorX = 1;
|
this.message_nd.anchorX = 1; // this.message_bg_nd.x = this.msg_bg_pos - this.message_bg_nd.width;
|
|
this.message_nd.x = this.msg_rt_pos - 5;
|
this.message_bg_nd.scaleX = -1;
|
} else {
|
this.head_wd.isAlignLeft = true;
|
this.head_wd.isAlignRight = false;
|
this.head_wd.left = this.head_margin;
|
this.name_wd.isAlignLeft = true;
|
this.name_wd.isAlignRight = false;
|
this.name_wd.left = this.name_margin;
|
this.message_bg_nd.anchorX = 0;
|
this.message_nd.anchorX = 0;
|
this.message_bg_nd.x = -this.msg_bg_pos;
|
this.message_nd.x = -this.msg_rt_pos;
|
this.message_bg_nd.scaleX = 1;
|
} // 设置表情
|
|
|
var emoji_ids = this.chat_item_ctrl.getEmojis(this.msg);
|
|
for (var emoji_i in emoji_ids) {
|
var anima_path = PathTool.getSpinePath(emoji_ids[emoji_i]);
|
this.loadRes(anima_path, function (emoji, emoji_sd) {
|
this.message_rt.addEmojiAtlas(emoji_sd, emoji);
|
this.message_bg_nd.height = this.message_nd.height + 12;
|
this.message_bg_nd.width = this.message_nd.width + 30;
|
|
if (this.is_mine) {
|
this.message_bg_nd.x = this.msg_bg_pos - this.message_bg_nd.width;
|
}
|
}.bind(this, emoji_ids[emoji_i]));
|
} // 设置Imag
|
|
|
var item_imgs = this.chat_item_ctrl.getImages(this.msg);
|
|
for (var img_i in item_imgs) {
|
var item_path = PathTool.getItemRes(item_imgs[img_i]);
|
this.loadRes(item_path, function (item_sf) {
|
this.message_rt.addSpriteFrame(item_sf);
|
this.message_bg_nd.height = this.message_nd.height + 12;
|
this.message_bg_nd.width = this.message_nd.width + 30;
|
|
if (this.is_mine) {
|
this.message_bg_nd.x = this.msg_bg_pos - this.message_bg_nd.width;
|
}
|
}.bind(this));
|
}
|
|
this.message_rt.maxWidth = 0;
|
this.message_rt.string = this.msg; // this.message_rt.addTouchHandler("handler", this.onClickItem.bind(this))
|
|
this.root_wnd.y = -this.pos_y;
|
|
if (this.message_nd.width >= 400) {
|
this.message_rt.maxWidth = 400;
|
} else {
|
this.message_rt.maxWidth = 0;
|
}
|
|
this.message_bg_nd.height = this.message_nd.height + 12;
|
this.message_bg_nd.width = this.message_nd.width + 30;
|
|
if (this.is_mine) {
|
this.message_bg_nd.x = this.msg_bg_pos - this.message_bg_nd.width;
|
}
|
|
this.root_wnd.height += this.message_nd.height; // 头像
|
|
if (this.sp_res) {
|
this.head_sp.spriteFrame = this.sp_res;
|
} else {
|
if (!this.is_loading) {
|
this.is_loading = true;
|
this.loadRes(this.head_path, function (res_object) {
|
this.sp_res = res_object;
|
this.head_sp.spriteFrame = this.sp_res;
|
this.is_loading = false;
|
}.bind(this));
|
}
|
}
|
|
var role_data = this.data;
|
|
if (this.channel === ChatConst.Channel.Friend) {
|
role_data = this.data;
|
} else {
|
if (this.data && this.data.role_list && this.data.role_list[0]) {
|
role_data = this.data.role_list[0];
|
}
|
} // 头像框
|
|
|
this.loadFrameRes(role_data.head_bid); // name
|
|
var name_str = this.r_name;
|
|
if (this.channel == ChatConst.Channel.Cross) {} else if (this.channel == ChatConst.Channel.Province) {
|
if (this.is_mine) {
|
name_str = cc.js.formatStr("%s %s", role_data.city, this.r_name);
|
} else {
|
name_str = cc.js.formatStr("%s %s", this.r_name, role_data.city);
|
}
|
}
|
|
this.name_lb.string = name_str; // sex
|
|
if (role_data.sex !== 2 && typeof role_data.sex == "number") {
|
this.sex_nd.active = true;
|
var sex_res_path = PathTool.getUIIconPath("common", "common_sex" + role_data.sex);
|
this.loadRes(sex_res_path, function (sex_sf) {
|
this.sex_sp.spriteFrame = sex_sf;
|
}.bind(this));
|
} else {
|
this.sex_nd.active = false;
|
} // vip
|
|
|
if (role_data.is_show_vip === 0 && role_data.vip_lev > 0 && this.channel !== ChatConst.Channel.Province) {} else {// 不显示vip
|
}
|
},
|
//scale默认比例是大部分需要缩放所以用了100/117,其他情况结合自己界面修改scale值
|
loadFrameRes: function loadFrameRes(bid, scale) {
|
if (scale == null) {
|
scale = 100 / 117;
|
}
|
|
if (typeof bid == "number") {
|
var config = Config.avatar_data.data_avatar[bid];
|
|
if (!config) {
|
return;
|
}
|
|
var res_path = PathTool.getHeadcircle(config.res_id);
|
this.loadRes(res_path, function (resObject) {
|
this.head_kuang_sp.spriteFrame = resObject;
|
}.bind(this));
|
this.head_kuang_sp.node.scale = scale;
|
|
if (bid == 1000) {
|
this.head_kuang_sp.node.y = 0;
|
} else {
|
this.head_kuang_sp.node.y = 5;
|
}
|
} else {
|
if (bid == null) {
|
bid = PathTool.getCommonIcomPath("common_1031");
|
scale = 1;
|
}
|
|
this.loadRes(bid, function (resObject) {
|
this.head_kuang_sp.spriteFrame = resObject;
|
}.bind(this));
|
this.head_kuang_sp.node.scale = scale;
|
this.head_kuang_sp.node.y = 0;
|
}
|
},
|
onHide: function onHide() {},
|
onDelete: function onDelete() {
|
this.stopUpdate(); // LoaderManager.getInstance().releaseRes(this.head_path);
|
},
|
// content显示区域更新区域
|
updateContent: function updateContent(isCache) {
|
if (isCache) {
|
if (this.root_wnd) {
|
if (this.head_kuang_sp && this.head_kuang_sp.node) {
|
this.head_kuang_sp.node.off(cc.Node.EventType.TOUCH_START, this.upBtnStart, this);
|
this.head_kuang_sp.node.off(cc.Node.EventType.TOUCH_CANCEL, this.upBtnEnd, this);
|
this.head_kuang_sp.node.off(cc.Node.EventType.TOUCH_END, this.upBtnEnd, this);
|
}
|
|
this.root_wnd.active = false;
|
this.content.chat_items_cache.push(this.root_wnd);
|
this.root_wnd = null;
|
}
|
|
this.have_nd = false;
|
return;
|
}
|
|
var content_pos = this.content.getContentPos();
|
|
if (this.pos_y < content_pos + 800 && this.pos_y > content_pos - 300) {
|
this.have_nd = true;
|
|
if (!this.root_wnd) {
|
this.initRootWind();
|
} else {
|
this.root_wnd.y = -this.pos_y;
|
}
|
} else {
|
if (this.root_wnd) {
|
if (this.head_kuang_sp && this.head_kuang_sp.node) {
|
this.head_kuang_sp.node.off(cc.Node.EventType.TOUCH_START, this.upBtnStart, this);
|
this.head_kuang_sp.node.off(cc.Node.EventType.TOUCH_CANCEL, this.upBtnEnd, this);
|
this.head_kuang_sp.node.off(cc.Node.EventType.TOUCH_END, this.upBtnEnd, this);
|
}
|
|
this.root_wnd.active = false;
|
this.content.chat_items_cache.push(this.root_wnd);
|
this.root_wnd = null;
|
}
|
|
this.have_nd = false;
|
}
|
},
|
onClickFrom: function onClickFrom(event, parame) {},
|
onClickItem: function onClickItem(data, parame) {
|
var parames = parame.split("|");
|
var link_type = parames[0];
|
var sev_id = parames[1];
|
var share_id = parames[2];
|
ChatHelp.getInstance().onChatTouched(link_type, parame, this.data);
|
},
|
getId: function getId() {
|
if (!this.data) return null;
|
return this.data.id;
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxjaGF0XFx2aWV3XFxjaGF0X2l0ZW0uanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiR29vZHNWbyIsIkJhY2tQYWNrQ29uc3QiLCJDaGF0Q29uc3QiLCJDaGF0SXRlbUNvbnRyb2xsZXIiLCJDaGF0SGVscCIsIkNoYXRDb250cm9sbGVyIiwiQ2hhdEl0ZW0iLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJwcm9wZXJ0aWVzIiwiY29udGVudCIsIm1zZ19pbmRleCIsImRhdGEiLCJoZWlnaHQiLCJ1cGRhdGVfY2IiLCJwb3NfeSIsImlzX21pbmUiLCJoZWFkX21hcmdpbiIsIm5hbWVfbWFyZ2luIiwibXNnX2JnX3BvcyIsIm1zZ19ydF9wb3MiLCJjaGFubmVsIiwiaW5pdF9pbmciLCJoYXZlX25kIiwiaGVhZF9zcCIsInNwX3JlcyIsImlzX2xvYWRpbmciLCJjdG9yIiwiYXJndW1lbnRzIiwiUm9sZUNvbnRyb2xsZXIiLCJyb2xlX3ZvIiwiZ2V0SW5zdGFuY2UiLCJnZXRSb2xlVm8iLCJDaGFubmVsIiwiRnJpZW5kIiwiZmxhZyIsImZhY2VfaWQiLCJyX25hbWUiLCJuYW1lIiwiU3lzdGVtIiwicm9sZV9saXN0IiwibXNnX3JvbGUiLCJyaWQiLCJzcnZfaWQiLCJtc2ciLCJsZW4iLCJTdHJpbmdVdGlsIiwicGFyc2VTdHIiLCJzdHJpbmciLCJoZWFkX3BhdGgiLCJnZXRIZWFkUmVzIiwiY2hhdF9pdGVtX2N0cmwiLCJ1cGRhdGVJbnRlcnZhbCIsInVwZGF0ZVRpbWVyIiwidG90YWxDb3VudCIsImluaXRSb290V2luZCIsInJvb3Rfd25kIiwiZ2V0Q2hhdEl0ZW1OZCIsImFjdGl2ZSIsImluaXRXaWRnZXQiLCJwcmVmYWJfcGF0aCIsImdldFByZWZhYlBhdGgiLCJMb2FkZXJNYW5hZ2VyIiwibG9hZFJlcyIsInJlc19vYmplY3QiLCJtc2dzX2NvbnRlbnQiLCJwYXJlbnQiLCJjaGF0X2l0ZW1zX2NhY2hlIiwicHVzaCIsImJpbmQiLCJjb21tb25fbXNnX25kIiwic2Vla0NoaWxkIiwibm90aWNlX21zZ19uZCIsImhlYWRfbmQiLCJuYW1lX25kIiwiaGVhZF9rdWFuZ19zcCIsIlNwcml0ZSIsInNleF9uZCIsInNleF9zcCIsIm1zZ19yb290X25kIiwibWVzc2FnZV9iZ19uZCIsIm5hbWVfbGIiLCJMYWJlbCIsIm1lc3NhZ2VfcnQiLCJSaWNoVGV4dCIsIm1lc3NhZ2VfbmQiLCJub3RpY2VfbXNnX3J0IiwiaGVhZF93ZCIsImdldENvbXBvbmVudCIsIldpZGdldCIsIm5hbWVfd2QiLCJtZXNzYWdlX3dkIiwiYWRkVG91Y2hIYW5kbGVyIiwib25DbGlja0l0ZW0iLCJ1cGRhdGVXaWRnZXQiLCJyZWdpc3RlciIsIm5vZGUiLCJvbiIsIk5vZGUiLCJFdmVudFR5cGUiLCJUT1VDSF9TVEFSVCIsInVwQnRuU3RhcnQiLCJUT1VDSF9DQU5DRUwiLCJ1cEJ0bkVuZCIsIlRPVUNIX0VORCIsInN0b3BVcGRhdGUiLCJzdGFydFVwZGF0ZSIsInRvdWNoSGVhZCIsImlucHV0IiwiZ2V0Q2hhdElucHV0Iiwic2V0SW5wdXRUZXh0IiwidXBkYXRlIiwiZHQiLCJVdGlscyIsInBsYXlCdXR0b25Tb3VuZCIsIm9wZW5GcmllbmRJbmZvIiwib25TaG93IiwidXBkYXRlRGF0YSIsInkiLCJ3aWR0aCIsInNob3dfZGVsYXkiLCJkZWxheVRpbWUiLCJzaG93X2FjdGl2ZSIsImNhbGxGdW5jIiwic2hvd19hY3QiLCJzZXF1ZW5jZSIsInJ1bkFjdGlvbiIsImlzQWxpZ25MZWZ0IiwiaXNBbGlnblJpZ2h0IiwicmlnaHQiLCJhbmNob3JYIiwieCIsInNjYWxlWCIsImxlZnQiLCJlbW9qaV9pZHMiLCJnZXRFbW9qaXMiLCJlbW9qaV9pIiwiYW5pbWFfcGF0aCIsImdldFNwaW5lUGF0aCIsImVtb2ppIiwiZW1vamlfc2QiLCJhZGRFbW9qaUF0bGFzIiwiaXRlbV9pbWdzIiwiZ2V0SW1hZ2VzIiwiaW1nX2kiLCJpdGVtX3BhdGgiLCJnZXRJdGVtUmVzIiwiaXRlbV9zZiIsImFkZFNwcml0ZUZyYW1lIiwibWF4V2lkdGgiLCJzcHJpdGVGcmFtZSIsInJvbGVfZGF0YSIsImxvYWRGcmFtZVJlcyIsImhlYWRfYmlkIiwibmFtZV9zdHIiLCJDcm9zcyIsIlByb3ZpbmNlIiwianMiLCJmb3JtYXRTdHIiLCJjaXR5Iiwic2V4Iiwic2V4X3Jlc19wYXRoIiwiZ2V0VUlJY29uUGF0aCIsInNleF9zZiIsImlzX3Nob3dfdmlwIiwidmlwX2xldiIsImJpZCIsInNjYWxlIiwiY29uZmlnIiwiQ29uZmlnIiwiYXZhdGFyX2RhdGEiLCJkYXRhX2F2YXRhciIsInJlc19wYXRoIiwiZ2V0SGVhZGNpcmNsZSIsInJlc19pZCIsInJlc09iamVjdCIsImdldENvbW1vbkljb21QYXRoIiwib25IaWRlIiwib25EZWxldGUiLCJ1cGRhdGVDb250ZW50IiwiaXNDYWNoZSIsIm9mZiIsImNvbnRlbnRfcG9zIiwiZ2V0Q29udGVudFBvcyIsIm9uQ2xpY2tGcm9tIiwiZXZlbnQiLCJwYXJhbWUiLCJwYXJhbWVzIiwic3BsaXQiLCJsaW5rX3R5cGUiLCJzZXZfaWQiLCJzaGFyZV9pZCIsIm9uQ2hhdFRvdWNoZWQiLCJnZXRJZCIsImlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBYUMsT0FBTyxDQUFDLFVBQUQsQ0FBaEM7O0FBQ0EsSUFBSUMsT0FBTyxHQUFjRCxPQUFPLENBQUMsVUFBRCxDQUFoQzs7QUFDQSxJQUFJRCxRQUFRLEdBQWFDLE9BQU8sQ0FBQyxVQUFELENBQWhDOztBQUNBLElBQUlFLGFBQWEsR0FBUUYsT0FBTyxDQUFDLGdCQUFELENBQWhDOztBQUNBLElBQUlHLFNBQVMsR0FBWUgsT0FBTyxDQUFDLFlBQUQsQ0FBaEM7O0FBQ0EsSUFBSUksa0JBQWtCLEdBQUdKLE9BQU8sQ0FBQyxzQkFBRCxDQUFoQzs7QUFDQSxJQUFJSyxRQUFRLEdBQWFMLE9BQU8sQ0FB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QUMsaUJBQVU7QUFDWixRQUFHLENBQUMsS0FBS3JMLElBQVQsRUFBYyxPQUFPLElBQVA7QUFDZCxXQUFPLEtBQUtBLElBQUwsQ0FBVXNMLEVBQWpCO0FBQ0g7QUF2ZW1CLENBQVQsQ0FBZiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gQGF1dGhvcjogc2hpcmFob0BzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxyXG4vLyBAZGVzY3JpcHRpb246XHJcbi8vICAgICAg54mp5ZOB5Y2V5YiXLOaYvuekuuWvueixoVxyXG4vLyA8YnIvPkNyZWF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbnZhciBQYXRoVG9vbCAgICAgICAgICAgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XHJcbnZhciBHb29kc1ZvICAgICAgICAgICAgPSByZXF1aXJlKFwiZ29vZHNfdm9cIik7XHJcbnZhciBQYXRoVG9vbCAgICAgICAgICAgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XHJcbnZhciBCYWNrUGFja0NvbnN0ICAgICAgPSByZXF1aXJlKFwiYmFja3BhY2tfY29uc3RcIik7XHJcbnZhciBDaGF0Q29uc3QgICAgICAgICAgPSByZXF1aXJlKFwiY2hhdF9jb25zdFwiKTtcclxudmFyIENoYXRJdGVtQ29udHJvbGxlciA9IHJlcXVpcmUoXCJjaGF0X2l0ZW1fY29udHJvbGxlclwiKTtcclxudmFyIENoYXRIZWxwICAgICAgICAgICA9IHJlcXVpcmUoXCJjaGF0X2hlbHBcIik7XHJcbnZhciBDaGF0Q29udHJvbGxlciA9IHJlcXVpcmUoXCJjaGF0X2NvbnRyb2xsZXJcIilcclxudmFyIENoYXRJdGVtID0gY2MuQ2xhc3Moe1xyXG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXHJcblxyXG4gICAgcHJvcGVydGllczoge1xyXG4gICAgICAgIGNvbnRlbnQ6IG51bGwsXHJcbiAgICAgICAgbXNnX2luZGV4OiAwLCAgICAgICAgICAgICAgIC8vIOa2iOaBr+agh+etvuWPt1xyXG4gICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgaGVpZ2h0OiAxMDAsXHJcbiAgICAgICAgdXBkYXRlX2NiOiBudWxsLFxyXG4gICAgICAgIHBvc195OiAwLFxyXG4gICAgICAgIGlzX21pbmU6IGZhbHNlLFxyXG4gICAgICAgIGhlYWRfbWFyZ2luOiA2MyxcclxuICAgICAgICBuYW1lX21hcmdpbjogMTIwLFxyXG4gICAgICAgIG1zZ19iZ19wb3M6IDIyMCxcclxuICAgICAgICBtc2dfcnRfcG9zOiAyMDAsXHJcbiAgICAgICAgY2hhbm5lbDogbnVsbCxcclxuICAgICAgICBpbml0X2luZzogZmFsc2UsXHJcbiAgICAgICAgaGF2ZV9uZDogdHJ1ZSxcclxuICAgICAgICBoZWFkX3NwOiBudWxsLFxyXG4gICAgICAgIHNwX3JlczogbnVsbCxcclxuICAgICAgICBpc19sb2FkaW5nOiBmYWxzZSxcclxuICAgIH0sXHJcblxyXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY29udGVudCA9IGFyZ3VtZW50c1swXTtcclxuICAgICAgICB0aGlzLmRhdGEgICAgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgID0gYXJndW1lbnRzWzJdO1xyXG4gICAgICAgIHRoaXMucG9zX3kgICA9IGFyZ3VtZW50c1szXTtcclxuICAgICAgICB0aGlzLmNoYW5uZWwgPSBhcmd1bWVudHNbNF07XHJcblxyXG4gICAgICAgIHZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIilcclxuICAgICAgICB2YXIgcm9sZV92byA9IHRoaXMucm9sZV92bz0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbCA9PT0gQ2hhdENvbnN0LkNoYW5uZWwuRnJpZW5kKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuZmxhZyA9PT0gMSB8fCB0aGlzLmRhdGEuZmxhZyA9PT0gMTEgfHwgIXRoaXMuZGF0YS5mbGFnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzX21pbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mYWNlX2lkID0gcm9sZV92by5mYWNlX2lkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yX25hbWUgPSByb2xlX3ZvLm5hbWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZhY2VfaWQgPSB0aGlzLmRhdGEuZmFjZV9pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMucl9uYW1lID0gdGhpcy5kYXRhLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhbm5lbCA9PT0gQ2hhdENvbnN0LkNoYW5uZWwuU3lzdGVtKSB7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEucm9sZV9saXN0ICYmIHRoaXMuZGF0YS5yb2xlX2xpc3RbMF0pe1xyXG4gICAgICAgICAgICAgICAgdmFyIG1zZ19yb2xlID0gdGhpcy5kYXRhLnJvbGVfbGlzdFswXVxyXG4gICAgICAgICAgICAgICAgaWYgKG1zZ19yb2xlLnJpZCA9PT0gcm9sZV92by5yaWQgJiYgbXNnX3JvbGUuc3J2X2lkID09PSByb2xlX3ZvLnNydl9pZCkgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc19taW5lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmFjZV9pZCA9IHRoaXMuZGF0YS5yb2xlX2xpc3RbMF0uZmFjZV9pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMucl9uYW1lID0gdGhpcy5kYXRhLnJvbGVfbGlzdFswXS5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbXNnXHJcbiAgICAgICAgaWYodGhpcy5kYXRhLmxlbiA9PSAwKXtcclxuICAgICAgICAgICAgbXNnID0gU3RyaW5nVXRpbC5wYXJzZVN0cih0aGlzLmRhdGEubXNnLFwiaGFuZGxlclwiKS5zdHJpbmdcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbXNnID0gdGhpcy5kYXRhLm1zZ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDlr7nmlbDmja7ov5vooYzliJ3lp4vljJZcclxuICAgICAgICB0aGlzLm1zZyA9IG1zZztcclxuICAgICAgICB0aGlzLmhlYWRfcGF0aCA9IFBhdGhUb29sLmdldEhlYWRSZXModGhpcy5mYWNlX2lkKTtcclxuICAgICAgICB0aGlzLmNoYXRfaXRlbV9jdHJsID0gQ2hhdEl0ZW1Db250cm9sbGVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJbnRlcnZhbCA9IDE7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUaW1lciA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFJvb3RXaW5kOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5pbml0X2luZykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucm9vdF93bmQgPSB0aGlzLmNvbnRlbnQuZ2V0Q2hhdEl0ZW1OZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGF2ZV9uZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdF93bmQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pbml0V2lkZ2V0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIHByZWZhYl9wYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImNoYXRcIiwgXCJjaGF0X2l0ZW1cIik7XHJcbiAgICAgICAgICAgIExvYWRlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2FkUmVzKHByZWZhYl9wYXRoLCBmdW5jdGlvbihyZXNfb2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRfaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm9vdF93bmQgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQubXNnc19jb250ZW50KSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Rfd25kLnBhcmVudCA9IHRoaXMuY29udGVudC5tc2dzX2NvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGF2ZV9uZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3Rfd25kID0gcm9vdF93bmQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFdpZGdldCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rfd25kLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQuY2hhdF9pdGVtc19jYWNoZS5wdXNoKHJvb3Rfd25kKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgdGhpcy5pbml0X2luZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0V2lkZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbl9tc2dfbmQgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJjb21tb25fbXNnXCIpO1xyXG4gICAgICAgIHRoaXMubm90aWNlX21zZ19uZCAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcIm5vdGljZVwiKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmhlYWRfbmQgICAgICAgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJoZWFkX2JnXCIpO1xyXG4gICAgICAgIHRoaXMubmFtZV9uZCAgICAgICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcIm5hbWVfbmRcIik7XHJcbiAgICAgICAgdGhpcy5oZWFkX2t1YW5nX3NwICAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwiaGVhZF9rdWFuZ1wiLCBjYy5TcHJpdGUpO1xyXG4gICAgICAgIHRoaXMuc2V4X25kICAgICAgICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcInNleFwiKTtcclxuICAgICAgICB0aGlzLnNleF9zcCAgICAgICAgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJzZXhcIiwgY2MuU3ByaXRlKTtcclxuXHJcbiAgICAgICAgdGhpcy5tc2dfcm9vdF9uZCAgICAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwibXNnX3Jvb3RcIik7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlX2JnX25kICAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwibXNnX2JnXCIpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaGVhZF9zcCAgICAgICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcImhlYWRfc3BcIiwgY2MuU3ByaXRlKTtcclxuICAgICAgICB0aGlzLm5hbWVfbGIgICAgICAgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJuYW1lX25kXCIsIGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VfcnQgICAgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJtc2dfcnRcIiwgY2MuUmljaFRleHQpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZV9uZCAgICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcIm1zZ19ydFwiKTtcclxuICAgICAgICB0aGlzLm5vdGljZV9tc2dfcnQgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJub3RpY2VfbXNnXCIsIGNjLlJpY2hUZXh0KTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmhlYWRfd2QgICAgICAgICAgICAgID0gdGhpcy5oZWFkX25kLmdldENvbXBvbmVudChjYy5XaWRnZXQpO1xyXG4gICAgICAgIHRoaXMubmFtZV93ZCAgICAgICAgICAgICAgPSB0aGlzLm5hbWVfbmQuZ2V0Q29tcG9uZW50KGNjLldpZGdldCk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlX3dkICAgICAgICAgICA9IHRoaXMubWVzc2FnZV9uZC5nZXRDb21wb25lbnQoY2MuV2lkZ2V0KTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnJvb3Rfd25kLmhlaWdodCAgICAgID0gMTAwO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZV9uZC5oZWlnaHQgICAgPSAyNDtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VfYmdfbmQuaGVpZ2h0ID0gMzY7XHJcblxyXG4gICAgICAgIHRoaXMubWVzc2FnZV9ydC5hZGRUb3VjaEhhbmRsZXIoXCJoYW5kbGVyXCIsIHRoaXMub25DbGlja0l0ZW0uYmluZCh0aGlzKSlcclxuICAgICAgICB0aGlzLm5vdGljZV9tc2dfcnQuYWRkVG91Y2hIYW5kbGVyKFwiaGFuZGxlclwiLCB0aGlzLm9uQ2xpY2tJdGVtLmJpbmQodGhpcykpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEpe1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVdpZGdldCgpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICAgICAgfSBcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlZ2lzdGVyOmZ1bmN0aW9uKCl7XHJcbiAgICAgICAgdGhpcy5oZWFkX2t1YW5nX3NwLm5vZGUub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQsIHRoaXMudXBCdG5TdGFydCwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5oZWFkX2t1YW5nX3NwLm5vZGUub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfQ0FOQ0VMLCB0aGlzLnVwQnRuRW5kLHRoaXMgKSBcclxuICAgICAgICB0aGlzLmhlYWRfa3Vhbmdfc3Aubm9kZS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIHRoaXMudXBCdG5FbmQsIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cEJ0blN0YXJ0OmZ1bmN0aW9uKCl7XHJcbiAgICAgICAgdGhpcy5zdG9wVXBkYXRlKCk7XHJcbiAgICAgICAgdGhpcy5zdGFydFVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBcclxuICAgIHVwQnRuRW5kOmZ1bmN0aW9uKCl7XHJcbiAgICAgICAgdGhpcy5zdG9wVXBkYXRlKCk7XHJcbiAgICAgICAgaWYodGhpcy50b3RhbENvdW50IDwgdGhpcy51cGRhdGVJbnRlcnZhbCl7XHJcbiAgICAgICAgICAgIC8v5bCP5LqOMeenkuaXtlxyXG4gICAgICAgICAgICB0aGlzLnRvdWNoSGVhZCgpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEgPT0gbnVsbCB8fCB0aGlzLmRhdGEucm9sZV9saXN0ID09IG51bGwgfHwgdGhpcy5kYXRhLnJvbGVfbGlzdFswXSA9PSBudWxsIHx8IHRoaXMucm9sZV92byA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWVyID0gMDtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEucm9sZV9saXN0WzBdLnJpZCA9PSB0aGlzLnJvbGVfdm8ucmlkICYmIHRoaXMuZGF0YS5yb2xlX2xpc3RbMF0uc3J2X2lkID09IHRoaXMucm9sZV92by5zcnZfaWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IENoYXRDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Q2hhdElucHV0KCk7XHJcbiAgICAgICAgICAgIGlmKGlucHV0KXtcclxuICAgICAgICAgICAgICAgIGlucHV0LnNldElucHV0VGV4dChcIkBcIit0aGlzLmRhdGEucm9sZV9saXN0WzBdLm5hbWUrXCIgXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IDA7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUaW1lciA9IDA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGUoZHQpe1xyXG4gICAgICAgIGlmKHRoaXMuaGVhZF9rdWFuZ19zcC5ub2RlLmFjdGl2ZSA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZXIgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BVcGRhdGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZVRpbWVyICs9IGR0O1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCArPSBkdDtcclxuICAgICAgICBcclxuICAgICAgICBpZih0aGlzLnVwZGF0ZVRpbWVyID49IHRoaXMudXBkYXRlSW50ZXJ2YWwpe1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWVyID0gMDtcclxuICAgICAgICAgICAgaWYodGhpcy5kYXRhID09IG51bGwgfHwgdGhpcy5kYXRhLnJvbGVfbGlzdCA9PSBudWxsIHx8IHRoaXMuZGF0YS5yb2xlX2xpc3RbMF0gPT0gbnVsbCB8fCB0aGlzLnJvbGVfdm8gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BVcGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYodGhpcy5kYXRhLnJvbGVfbGlzdFswXS5yaWQgPT0gdGhpcy5yb2xlX3ZvLnJpZCAmJiB0aGlzLmRhdGEucm9sZV9saXN0WzBdLnNydl9pZCA9PSB0aGlzLnJvbGVfdm8uc3J2X2lkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcFVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IENoYXRDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Q2hhdElucHV0KCk7XHJcbiAgICAgICAgICAgIGlmKGlucHV0KXtcclxuICAgICAgICAgICAgICAgIGlucHV0LnNldElucHV0VGV4dChcIkBcIit0aGlzLmRhdGEucm9sZV9saXN0WzBdLm5hbWUrXCIgXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgdG91Y2hIZWFkOmZ1bmN0aW9uKCl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHJpZCwgc3J2X2lkLG5hbWU7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbCA9PT0gQ2hhdENvbnN0LkNoYW5uZWwuRnJpZW5kKSB7XHJcbiAgICAgICAgICAgIC8vIHJpZCA9IHRoaXMuZGF0YS5yaWQ7XHJcbiAgICAgICAgICAgIC8vIHNydl9pZCA9IHRoaXMuZGF0YS5zcnZfaWQ7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJvbGVfbGlzdCAmJiB0aGlzLmRhdGEucm9sZV9saXN0WzBdKXtcclxuICAgICAgICAgICAgICAgIHJpZCA9IHRoaXMuZGF0YS5yb2xlX2xpc3RbMF0ucmlkO1xyXG4gICAgICAgICAgICAgICAgc3J2X2lkID0gdGhpcy5kYXRhLnJvbGVfbGlzdFswXS5zcnZfaWQ7XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5kYXRhLnJvbGVfbGlzdFswXS5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJpZCA9PSB0aGlzLnJvbGVfdm8ucmlkKXJldHVyblxyXG4gICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKTtcclxuICAgICAgICBDaGF0Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5GcmllbmRJbmZvKHtzcnZfaWQgOnNydl9pZCwgcmlkIDpyaWQsY2hhbm5lbDp0aGlzLmNoYW5uZWwsbmFtZTpuYW1lfSk7IFxyXG4gICAgfSxcclxuXHJcbiAgICBvblNob3c6IGZ1bmN0aW9uICgpIHtcclxuICAgIH0sXHJcblxyXG4gICAgLy8g5pu05paw5pWw5o2uXHJcbiAgICB1cGRhdGVEYXRhOiBmdW5jdGlvbihkYXRhLCBtc2dfaW5kZXgsIHBvc195KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLnBvc195ID0gcG9zX3k7XHJcbiAgICAgICAgLy8gaWYgKClcclxuICAgIH0sXHJcblxyXG4gICAgLy8g5pu05paw5biD5bGAXHJcbiAgICB1cGRhdGVXaWRnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5uZWwgPT0gQ2hhdENvbnN0LkNoYW5uZWwuU3lzdGVtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uX21zZ19uZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpY2VfbXNnX25kLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdF93bmQueSA9IC0gdGhpcy5wb3NfeTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpY2VfbXNnX3J0LnN0cmluZyA9IHRoaXMubXNnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5ub3RpY2VfbXNnX25kLndpZHRoID0gNjQwO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGljZV9tc2dfbmQuaGVpZ2h0ID0gdGhpcy5ub3RpY2VfbXNnX3J0Lm5vZGUuaGVpZ2h0KzIwO1xyXG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLmhlaWdodCA9IHRoaXMubm90aWNlX21zZ19uZC5oZWlnaHQrMjA7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWNlX21zZ19uZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIHNob3dfZGVsYXkgPSBjYy5kZWxheVRpbWUoMC4xKTtcclxuICAgICAgICAgICAgdmFyIHNob3dfYWN0aXZlID0gY2MuY2FsbEZ1bmMoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25fbXNnX25kLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgICAgICB2YXIgc2hvd19hY3QgPSBjYy5zZXF1ZW5jZShzaG93X2RlbGF5LCBzaG93X2FjdGl2ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdF93bmQucnVuQWN0aW9uKHNob3dfYWN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOW4g+WxgFxyXG4gICAgICAgIGlmICh0aGlzLmlzX21pbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5oZWFkX3dkLmlzQWxpZ25MZWZ0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZF93ZC5pc0FsaWduUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRfd2QucmlnaHQgPSB0aGlzLmhlYWRfbWFyZ2luO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5uYW1lX3dkLmlzQWxpZ25MZWZ0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZV93ZC5pc0FsaWduUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm5hbWVfd2QucmlnaHQgPSB0aGlzLm5hbWVfbWFyZ2luO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlX2JnX25kLmFuY2hvclggPSAxO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VfbmQuYW5jaG9yWCA9IDE7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIHRoaXMubWVzc2FnZV9iZ19uZC54ID0gIHRoaXMubXNnX2JnX3BvcyAtIHRoaXMubWVzc2FnZV9iZ19uZC53aWR0aDtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlX25kLnggPSAgdGhpcy5tc2dfcnRfcG9zIC0gNTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZV9iZ19uZC5zY2FsZVggPSAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRfd2QuaXNBbGlnbkxlZnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRfd2QuaXNBbGlnblJpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZF93ZC5sZWZ0ID0gdGhpcy5oZWFkX21hcmdpbjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubmFtZV93ZC5pc0FsaWduTGVmdCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZV93ZC5pc0FsaWduUmlnaHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5uYW1lX3dkLmxlZnQgPSB0aGlzLm5hbWVfbWFyZ2luO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlX2JnX25kLmFuY2hvclggPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VfbmQuYW5jaG9yWCA9IDA7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZV9iZ19uZC54ID0gLSB0aGlzLm1zZ19iZ19wb3M7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZV9uZC54ID0gLSB0aGlzLm1zZ19ydF9wb3M7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VfYmdfbmQuc2NhbGVYID0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOiuvue9ruihqOaDhVxyXG4gICAgICAgIHZhciBlbW9qaV9pZHMgPSB0aGlzLmNoYXRfaXRlbV9jdHJsLmdldEVtb2ppcyh0aGlzLm1zZyk7XHJcbiAgICAgICAgZm9yICh2YXIgZW1vamlfaSBpbiBlbW9qaV9pZHMpIHtcclxuICAgICAgICAgICAgdmFyIGFuaW1hX3BhdGggPSBQYXRoVG9vbC5nZXRTcGluZVBhdGgoZW1vamlfaWRzW2Vtb2ppX2ldKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKGFuaW1hX3BhdGgsIGZ1bmN0aW9uKGVtb2ppLCBlbW9qaV9zZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlX3J0LmFkZEVtb2ppQXRsYXMoZW1vamlfc2QsIGVtb2ppKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZV9iZ19uZC5oZWlnaHQgPSB0aGlzLm1lc3NhZ2VfbmQuaGVpZ2h0ICsgMTI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VfYmdfbmQud2lkdGggPSB0aGlzLm1lc3NhZ2VfbmQud2lkdGggKyAzMDsgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNfbWluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZV9iZ19uZC54ID0gdGhpcy5tc2dfYmdfcG9zIC0gdGhpcy5tZXNzYWdlX2JnX25kLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzLCBlbW9qaV9pZHNbZW1vamlfaV0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOiuvue9rkltYWdcclxuICAgICAgICB2YXIgaXRlbV9pbWdzID0gdGhpcy5jaGF0X2l0ZW1fY3RybC5nZXRJbWFnZXModGhpcy5tc2cpO1xyXG4gICAgICAgIGZvciAodmFyIGltZ19pIGluIGl0ZW1faW1ncykge1xyXG4gICAgICAgICAgICB2YXIgaXRlbV9wYXRoID0gUGF0aFRvb2wuZ2V0SXRlbVJlcyhpdGVtX2ltZ3NbaW1nX2ldKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKGl0ZW1fcGF0aCwgZnVuY3Rpb24oaXRlbV9zZikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlX3J0LmFkZFNwcml0ZUZyYW1lKGl0ZW1fc2YpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlX2JnX25kLmhlaWdodCA9IHRoaXMubWVzc2FnZV9uZC5oZWlnaHQgKyAxMjtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZV9iZ19uZC53aWR0aCA9IHRoaXMubWVzc2FnZV9uZC53aWR0aCArIDMwOyAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc19taW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlX2JnX25kLnggPSB0aGlzLm1zZ19iZ19wb3MgLSB0aGlzLm1lc3NhZ2VfYmdfbmQud2lkdGg7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWVzc2FnZV9ydC5tYXhXaWR0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlX3J0LnN0cmluZyA9IHRoaXMubXNnO1xyXG4gICAgICAgIC8vIHRoaXMubWVzc2FnZV9ydC5hZGRUb3VjaEhhbmRsZXIoXCJoYW5kbGVyXCIsIHRoaXMub25DbGlja0l0ZW0uYmluZCh0aGlzKSlcclxuICAgICAgICB0aGlzLnJvb3Rfd25kLnkgPSAtIHRoaXMucG9zX3k7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VfbmQud2lkdGggPj0gNDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZV9ydC5tYXhXaWR0aCA9IDQwMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VfcnQubWF4V2lkdGggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1lc3NhZ2VfYmdfbmQuaGVpZ2h0ID0gdGhpcy5tZXNzYWdlX25kLmhlaWdodCArIDEyO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZV9iZ19uZC53aWR0aCA9IHRoaXMubWVzc2FnZV9uZC53aWR0aCArIDMwO1xyXG4gICAgICAgIGlmICh0aGlzLmlzX21pbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlX2JnX25kLnggPSB0aGlzLm1zZ19iZ19wb3MgLSB0aGlzLm1lc3NhZ2VfYmdfbmQud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm9vdF93bmQuaGVpZ2h0ICs9IHRoaXMubWVzc2FnZV9uZC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIOWktOWDj1xyXG4gICAgICAgIGlmICh0aGlzLnNwX3Jlcykge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRfc3Auc3ByaXRlRnJhbWUgPSB0aGlzLnNwX3JlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNfbG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc19sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyh0aGlzLmhlYWRfcGF0aCwgZnVuY3Rpb24ocmVzX29iamVjdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcF9yZXMgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZF9zcC5zcHJpdGVGcmFtZSA9IHRoaXMuc3BfcmVzO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByb2xlX2RhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbCA9PT0gQ2hhdENvbnN0LkNoYW5uZWwuRnJpZW5kKSB7XHJcbiAgICAgICAgICAgIHJvbGVfZGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZih0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJvbGVfbGlzdCAmJiB0aGlzLmRhdGEucm9sZV9saXN0WzBdKXtcclxuICAgICAgICAgICAgICAgIHJvbGVfZGF0YSA9IHRoaXMuZGF0YS5yb2xlX2xpc3RbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOWktOWDj+ahhlxyXG4gICAgICAgIHRoaXMubG9hZEZyYW1lUmVzKHJvbGVfZGF0YS5oZWFkX2JpZCk7XHJcbiAgICAgICAgLy8gbmFtZVxyXG4gICAgICAgIHZhciBuYW1lX3N0ciA9IHRoaXMucl9uYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5uZWwgPT0gQ2hhdENvbnN0LkNoYW5uZWwuQ3Jvc3MpIHtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYW5uZWwgPT0gQ2hhdENvbnN0LkNoYW5uZWwuUHJvdmluY2UpIHtcclxuICAgICAgICAgICAgaWYodGhpcy5pc19taW5lKXtcclxuICAgICAgICAgICAgICAgIG5hbWVfc3RyID0gY2MuanMuZm9ybWF0U3RyKFwiJXMgICAgJXNcIiwgcm9sZV9kYXRhLmNpdHksIHRoaXMucl9uYW1lKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuYW1lX3N0ciA9IGNjLmpzLmZvcm1hdFN0cihcIiVzICAgICVzXCIsIHRoaXMucl9uYW1lLCByb2xlX2RhdGEuY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5uYW1lX2xiLnN0cmluZyA9IG5hbWVfc3RyO1xyXG5cclxuICAgICAgICAvLyBzZXhcclxuICAgICAgICBpZiAocm9sZV9kYXRhLnNleCAhPT0gMiAmJiB0eXBlb2Ygcm9sZV9kYXRhLnNleCA9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V4X25kLmFjdGl2ZSA9IHRydWU7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzZXhfcmVzX3BhdGggPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY29tbW9uXCIsXCJjb21tb25fc2V4XCIgKyByb2xlX2RhdGEuc2V4KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHNleF9yZXNfcGF0aCwgZnVuY3Rpb24oc2V4X3NmKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNleF9zcC5zcHJpdGVGcmFtZSA9IHNleF9zZjtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNleF9uZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZpcCBcclxuICAgICAgICBpZiAocm9sZV9kYXRhLmlzX3Nob3dfdmlwID09PSAwICYmIHJvbGVfZGF0YS52aXBfbGV2ID4gMCAmJiB0aGlzLmNoYW5uZWwgIT09IENoYXRDb25zdC5DaGFubmVsLlByb3ZpbmNlKSB7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7ICAgICAgIC8vIOS4jeaYvuekunZpcFxyXG5cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vc2NhbGXpu5jorqTmr5TkvovmmK/lpKfpg6jliIbpnIDopoHnvKnmlL7miYDku6XnlKjkuoYxMDAvMTE377yM5YW25LuW5oOF5Ya157uT5ZCI6Ieq5bex55WM6Z2i5L+u5pS5c2NhbGXlgLxcclxuICAgIGxvYWRGcmFtZVJlczogZnVuY3Rpb24gKGJpZCxzY2FsZSkge1xyXG4gICAgICAgIGlmKHNjYWxlID09IG51bGwpe1xyXG4gICAgICAgICAgICBzY2FsZSA9IDEwMC8xMTc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHR5cGVvZiAoYmlkKSA9PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IENvbmZpZy5hdmF0YXJfZGF0YS5kYXRhX2F2YXRhcltiaWRdO1xyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVzX3BhdGggPSBQYXRoVG9vbC5nZXRIZWFkY2lyY2xlKGNvbmZpZy5yZXNfaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMocmVzX3BhdGgsIGZ1bmN0aW9uIChyZXNPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhZF9rdWFuZ19zcC5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICB0aGlzLmhlYWRfa3Vhbmdfc3Aubm9kZS5zY2FsZSA9IHNjYWxlO1xyXG4gICAgICAgICAgICBpZihiaWQgPT0gMTAwMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRfa3Vhbmdfc3Aubm9kZS55ID0gMDtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRfa3Vhbmdfc3Aubm9kZS55ID0gNTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZihiaWQgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICBiaWQgPSBQYXRoVG9vbC5nZXRDb21tb25JY29tUGF0aChcImNvbW1vbl8xMDMxXCIpO1xyXG4gICAgICAgICAgICAgICAgc2NhbGUgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhiaWQsIGZ1bmN0aW9uIChyZXNPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhZF9rdWFuZ19zcC5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICB0aGlzLmhlYWRfa3Vhbmdfc3Aubm9kZS5zY2FsZSA9IHNjYWxlO1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRfa3Vhbmdfc3Aubm9kZS55ID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIG9uSGlkZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgb25EZWxldGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnN0b3BVcGRhdGUoKTtcclxuICAgICAgICAvLyBMb2FkZXJNYW5hZ2VyLmdldEluc3RhbmNlKCkucmVsZWFzZVJlcyh0aGlzLmhlYWRfcGF0aCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGNvbnRlbnTmmL7npLrljLrln5/mm7TmlrDljLrln59cclxuICAgIHVwZGF0ZUNvbnRlbnQ6IGZ1bmN0aW9uKGlzQ2FjaGUpIHtcclxuICAgICAgICBpZiAoaXNDYWNoZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5oZWFkX2t1YW5nX3NwICYmIHRoaXMuaGVhZF9rdWFuZ19zcC5ub2RlKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRfa3Vhbmdfc3Aubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQsIHRoaXMudXBCdG5TdGFydCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkX2t1YW5nX3NwLm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0NBTkNFTCwgdGhpcy51cEJ0bkVuZCx0aGlzICkgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkX2t1YW5nX3NwLm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgdGhpcy51cEJ0bkVuZCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMucm9vdF93bmQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQuY2hhdF9pdGVtc19jYWNoZS5wdXNoKHRoaXMucm9vdF93bmQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb290X3duZCA9IG51bGw7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5oYXZlX25kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29udGVudF9wb3MgPSB0aGlzLmNvbnRlbnQuZ2V0Q29udGVudFBvcygpO1xyXG4gICAgICAgIGlmICgodGhpcy5wb3NfeSA8IGNvbnRlbnRfcG9zICsgODAwKSAmJiAodGhpcy5wb3NfeSA+IGNvbnRlbnRfcG9zIC0gMzAwKSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhdmVfbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucm9vdF93bmQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJvb3RXaW5kKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnkgPSAtIHRoaXMucG9zX3k7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5oZWFkX2t1YW5nX3NwICYmIHRoaXMuaGVhZF9rdWFuZ19zcC5ub2RlKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRfa3Vhbmdfc3Aubm9kZS5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQsIHRoaXMudXBCdG5TdGFydCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkX2t1YW5nX3NwLm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0NBTkNFTCwgdGhpcy51cEJ0bkVuZCx0aGlzICkgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkX2t1YW5nX3NwLm5vZGUub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgdGhpcy51cEJ0bkVuZCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMucm9vdF93bmQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQuY2hhdF9pdGVtc19jYWNoZS5wdXNoKHRoaXMucm9vdF93bmQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb290X3duZCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5oYXZlX25kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBvbkNsaWNrRnJvbTogZnVuY3Rpb24oZXZlbnQsIHBhcmFtZSkge1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgb25DbGlja0l0ZW06IGZ1bmN0aW9uKGRhdGEsIHBhcmFtZSkge1xyXG4gICAgICAgIHZhciBwYXJhbWVzID0gcGFyYW1lLnNwbGl0KFwifFwiKTtcclxuXHJcbiAgICAgICAgdmFyIGxpbmtfdHlwZSA9IHBhcmFtZXNbMF07XHJcbiAgICAgICAgdmFyIHNldl9pZCA9IHBhcmFtZXNbMV07XHJcbiAgICAgICAgdmFyIHNoYXJlX2lkID0gcGFyYW1lc1syXTtcclxuXHJcbiAgICAgICAgQ2hhdEhlbHAuZ2V0SW5zdGFuY2UoKS5vbkNoYXRUb3VjaGVkKGxpbmtfdHlwZSwgcGFyYW1lLCB0aGlzLmRhdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRJZDpmdW5jdGlvbigpe1xyXG4gICAgICAgIGlmKCF0aGlzLmRhdGEpcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5pZDtcclxuICAgIH1cclxuXHJcbn0pIl19
|