|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/heroexpedit/view/empoly_window.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, '879a9lP67hGDYwrB7hhKjgb', 'empoly_window');
|
// Scripts/mod/heroexpedit/view/empoly_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-03-11 14:17:19
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var HeroController = require("hero_controller");
|
|
var CommonScrollView = require("common_scrollview");
|
|
var EmpolyPanelItem = require("empoly_item_panel");
|
|
var HeroExpeditEvent = require("heroexpedit_event");
|
|
var EmpolyWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("heroexpedit", "empoly_panel");
|
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Tips; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.ctrl = arguments[0];
|
this.model = this.ctrl.getModel();
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
this.cur_index = null;
|
this.reward_list = [];
|
this.tab_list = [];
|
this.employ_data = []; //雇佣
|
|
this.send_data = []; //派遣
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
this.background = this.root_wnd.getChildByName("background");
|
this.background.scale = FIT_SCALE;
|
this.main_container = this.root_wnd.getChildByName("main_container");
|
var text_7 = this.main_container.getChildByName("Image_6").getChildByName("Text_7").getComponent(cc.Label);
|
text_7.string = Utils.TI18N("好友助阵");
|
this.text_empoly_num = this.main_container.getChildByName("Text_2").getComponent(cc.Label);
|
this.text_empoly_num.string = Utils.TI18N("今日已雇佣: ");
|
var tab_container = this.main_container.getChildByName("tab_container");
|
var tab_name = [Utils.TI18N("支援我的"), Utils.TI18N("我的支援")];
|
|
for (var i = 1; i < 3; i++) {
|
var tab = {};
|
tab.btn = tab_container.getChildByName("btn_" + i);
|
tab.normal = tab.btn.getChildByName("normal");
|
tab.select = tab.btn.getChildByName("select");
|
tab.select.active = false;
|
tab.title = tab.btn.getChildByName("title").getComponent(cc.Label);
|
tab.titleLine = tab.btn.getChildByName("title").getComponent(cc.LabelOutline);
|
tab.title.string = tab_name[i - 1];
|
tab.title.node.color = new cc.Color(0xcf, 0xb5, 0x93, 0xff);
|
tab.index = i;
|
this.tab_list[i] = tab;
|
}
|
|
this.good_cons = this.main_container.getChildByName("good_cons");
|
this.empty_bg = Utils.createImage(this.good_cons, null, this.good_cons.width * 0.5, this.good_cons.height * 0.5, cc.v2(0.5, 0.5));
|
var res = PathTool.getBigBg("bigbg_3");
|
this.loadRes(res, function (sf_obj) {
|
this.empty_bg.spriteFrame = sf_obj;
|
}.bind(this));
|
this.empty_label = Utils.createLabel(24, new cc.Color(0xed, 0xcd, 0xa2, 0xff), null, this.empty_bg.node.width * 0.5, -75, "", this.empty_bg.node, 0, cc.v2(0.5, 0.5));
|
this.empty_label.string = Utils.TI18N("暂无可雇佣英雄,快去加好友吧");
|
this.empty_bg.node.active = false;
|
this.hero_list = HeroController.getInstance().getModel().getExpeditHeroData();
|
this.hero_list = this.hero_list || [];
|
var scroll_view_size = this.good_cons.getContentSize();
|
var setting = {
|
item_class: EmpolyPanelItem,
|
// 单元类
|
start_x: 2,
|
// 第一个单元的X起点
|
space_x: 0,
|
// x方向的间隔
|
start_y: 0,
|
// 第一个单元的Y起点
|
space_y: 5,
|
// y方向的间隔
|
item_width: 631,
|
// 单元的尺寸width
|
item_height: 149,
|
// 单元的尺寸height
|
row: 0,
|
// 行数,作用于水平滚动类型
|
col: 1,
|
// 列数,作用于垂直滚动类型
|
need_dynamic: true
|
};
|
this.itemScrollview = new CommonScrollView();
|
this.itemScrollview.createScroll(this.good_cons, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting);
|
},
|
isVisibleRedPoint: function isVisibleRedPoint() {
|
var status = this.model.getHeroSendRedPoint();
|
Utils.addRedPointToNodeByStatus(this.tab_list[2].btn, status, null, 11);
|
},
|
tabChangeView: function tabChangeView(index) {
|
index = index || 1;
|
if (this.cur_index == index) return;
|
|
if (this.cur_tab != null) {
|
this.cur_tab.select.active = false;
|
this.cur_tab.title.node.color = new cc.Color(0xcf, 0xb5, 0x93, 0xff);
|
this.cur_tab.titleLine.color = new cc.Color(0x2a, 0x16, 0x0e, 0xff);
|
}
|
|
this.cur_index = index;
|
this.cur_tab = this.tab_list[this.cur_index];
|
|
if (this.cur_tab != null) {
|
this.cur_tab.select.active = true;
|
this.cur_tab.title.node.color = new cc.Color(0xff, 0xed, 0xd6, 0xff);
|
this.cur_tab.titleLine.color = new cc.Color(0x2a, 0x16, 0x0e, 0xff);
|
}
|
|
if (index == 1) {
|
var employData = this.model.getPartnerMessage(); //伙伴信息
|
|
var num = employData.length;
|
this.text_empoly_num.node.active = true;
|
var str = cc.js.formatStr(Utils.TI18N("今日已雇佣: %d/%d"), num, 3);
|
this.text_empoly_num.string = str;
|
|
if (this.employ_data && Utils.next(this.employ_data) != null) {
|
var tab = {};
|
tab.num = num;
|
tab.index = 1;
|
this.itemScrollview.setData(this.employ_data, null, tab);
|
this.empty_bg.node.active = false;
|
} else {
|
this.itemScrollview.setData([]);
|
this.empty_bg.node.active = true;
|
}
|
} else if (index == 2) {
|
this.text_empoly_num.node.active = false;
|
this.empty_bg.node.active = false;
|
|
if (this.send_data && Utils.next(this.send_data) != null) {
|
var num = this.send_data.length;
|
var tab = {};
|
tab.num = num;
|
tab.index = 2;
|
this.hero_list.sort(Utils.tableUpperSorter(["power"]));
|
|
if (Utils.next(this.send_data) != null) {
|
var temp = [];
|
|
for (var i = this.hero_list.length - 1; i >= 0; i--) {
|
if (this.hero_list[i].id == this.send_data[0].id) {
|
temp = this.hero_list[i];
|
this.hero_list.splice(i, 1);
|
}
|
}
|
|
if (temp && Utils.next(temp) != null) {
|
temp.isHelp = true;
|
this.hero_list.unshift(temp);
|
tab.num = num;
|
} else {
|
tab.num = 0;
|
}
|
}
|
|
this.itemScrollview.setData(this.hero_list, null, tab);
|
} else {
|
this.ctrl.sender24405();
|
}
|
}
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
// 支援我的
|
this.addGlobalEvent(HeroExpeditEvent.EmployEvent, function () {
|
var employData = this.model.getPartnerMessage(); //已经借用的
|
|
var employPartner = this.model.getEmployPartner(); //可以选择的伙伴
|
|
employPartner.sort(function (a, b) {
|
return a.power > b.power;
|
});
|
|
for (var i = employPartner.length - 1; i >= 0; i--) {
|
for (var j = employData.length - 1; j >= 0; j--) {
|
if (employPartner[i].bid && employData[j].bid && employPartner[i].id && employData[j].id && employPartner[i].srv_id && employData[j].srv_id && employPartner[i].rid && employData[j].rid) {
|
if (employPartner[i].bid == employData[j].bid && employPartner[i].id == employData[j].id && employPartner[i].srv_id == employData[j].srv_id && employPartner[i].rid == employData[j].rid) {
|
employPartner.shift();
|
}
|
}
|
}
|
}
|
|
var num = employData.length;
|
|
if (employPartner.length == 0 && num == 0) {
|
this.empty_bg.node.active = true;
|
} else {
|
this.empty_bg.node.active = false;
|
}
|
|
for (var k in employData) {
|
employData[k].isHelp = true;
|
employPartner.unshift(employData[k]);
|
}
|
|
this.text_empoly_num.node.active = true;
|
var str = cc.js.formatStr(Utils.TI18N("今日已雇佣: %d/%d"), num, 3);
|
this.text_empoly_num.string = str;
|
this.employ_data = employPartner || [];
|
var tab = {};
|
tab.num = num;
|
tab.index = 1;
|
this.itemScrollview.setData(this.employ_data, null, tab);
|
}.bind(this)); // 我的支援
|
|
this.addGlobalEvent(HeroExpeditEvent.EmploySendEvent, function (data) {
|
this.isVisibleRedPoint();
|
this.send_data = data.list;
|
this.text_empoly_num.node.active = false;
|
var num = this.send_data.length;
|
var tab = {};
|
tab.num = num;
|
tab.index = 2;
|
this.hero_list.sort(Utils.tableUpperSorter(["power"]));
|
|
if (Utils.next(this.send_data) != null) {
|
var temp = [];
|
|
for (var i = this.hero_list.length - 1; i >= 0; i--) {
|
if (this.hero_list[i].id == data.list[0].id) {
|
temp = this.hero_list[i];
|
this.hero_list.splice(i, 1);
|
}
|
}
|
|
if (temp && Utils.next(temp) != null) {
|
temp.isHelp = true;
|
this.hero_list.unshift(temp);
|
tab.num = num;
|
} else {
|
tab.num = 0;
|
}
|
}
|
|
this.itemScrollview.setData(this.hero_list, null, tab);
|
}.bind(this)); // 我的支援成功返回
|
|
this.addGlobalEvent(HeroExpeditEvent.EmploySendEvent_Success, function (hero_id) {
|
var num = this.send_data.length;
|
var tab = {};
|
tab.num = num;
|
tab.index = 2;
|
this.hero_list.sort(Utils.tableUpperSorter(["power"]));
|
|
if (Utils.next(this.send_data) != null) {
|
var temp = {};
|
|
for (var i = this.hero_list.length - 1; i >= 0; i--) {
|
if (this.hero_list[i].id == hero_id) {
|
temp = this.hero_list[i];
|
this.hero_list.splice(i, 1);
|
}
|
}
|
|
temp.isHelp = true;
|
this.hero_list.unshift(temp);
|
}
|
|
this.itemScrollview.setData(this.hero_list, null, tab);
|
}.bind(this));
|
Utils.onTouchEnd(this.background, function () {
|
this.ctrl.openEmpolyPanelView(false);
|
}.bind(this), 2);
|
|
for (var i in this.tab_list) {
|
Utils.onTouchEnd(this.tab_list[i].btn, function (v) {
|
this.tabChangeView(v.index);
|
}.bind(this, this.tab_list[i]), 1);
|
}
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(params) {
|
this.tabChangeView(1);
|
this.isVisibleRedPoint();
|
this.ctrl.sender24406();
|
this.ctrl.sender24404();
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
if (this.itemScrollview) {
|
this.itemScrollview.deleteMe();
|
this.itemScrollview = null;
|
}
|
|
this.cur_index = null;
|
this.reward_list = null;
|
this.tab_list = null;
|
this.employ_data = null;
|
this.send_data = null;
|
this.hero_list = null;
|
this.ctrl.openEmpolyPanelView(false);
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxoZXJvZXhwZWRpdFxcdmlld1xcZW1wb2x5X3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJIZXJvQ29udHJvbGxlciIsIkNvbW1vblNjcm9sbFZpZXciLCJFbXBvbHlQYW5lbEl0ZW0iLCJIZXJvRXhwZWRpdEV2ZW50IiwiRW1wb2x5V2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiVGlwcyIsImN0cmwiLCJhcmd1bWVudHMiLCJtb2RlbCIsImdldE1vZGVsIiwiaW5pdENvbmZpZyIsImN1cl9pbmRleCIsInJld2FyZF9saXN0IiwidGFiX2xpc3QiLCJlbXBsb3lfZGF0YSIsInNlbmRfZGF0YSIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJtYWluX2NvbnRhaW5lciIsInRleHRfNyIsImdldENvbXBvbmVudCIsIkxhYmVsIiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsInRleHRfZW1wb2x5X251bSIsInRhYl9jb250YWluZXIiLCJ0YWJfbmFtZSIsImkiLCJ0YWIiLCJidG4iLCJub3JtYWwiLCJzZWxlY3QiLCJhY3RpdmUiLCJ0aXRsZSIsInRpdGxlTGluZSIsIkxhYmVsT3V0bGluZSIsIm5vZGUiLCJjb2xvciIsIkNvbG9yIiwiaW5kZXgiLCJnb29kX2NvbnMiLCJlbXB0eV9iZyIsImNyZWF0ZUltYWdlIiwid2lkdGgiLCJoZWlnaHQiLCJ2MiIsInJlcyIsImdldEJpZ0JnIiwibG9hZFJlcyIsInNmX29iaiIsInNwcml0ZUZyYW1lIiwiYmluZCIsImVtcHR5X2xhYmVsIiwiY3JlYXRlTGFiZWwiLCJoZXJvX2xpc3QiLCJnZXRJbnN0YW5jZSIsImdldEV4cGVkaXRIZXJvRGF0YSIsInNjcm9sbF92aWV3X3NpemUiLCJnZXRDb250ZW50U2l6ZSIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsIm5lZWRfZHluYW1pYyIsIml0ZW1TY3JvbGx2aWV3IiwiY3JlYXRlU2Nyb2xsIiwiU2Nyb2xsVmlld0RpciIsInZlcnRpY2FsIiwiU2Nyb2xsVmlld1N0YXJ0UG9zIiwidG9wIiwiaXNWaXNpYmxlUmVkUG9pbnQiLCJzdGF0dXMiLCJnZXRIZXJvU2VuZFJlZFBvaW50IiwiYWRkUmVkUG9pbnRUb05vZGVCeVN0YXR1cyIsInRhYkNoYW5nZVZpZXciLCJjdXJfdGFiIiwiZW1wbG95RGF0YSIsImdldFBhcnRuZXJNZXNzYWdlIiwibnVtIiwibGVuZ3RoIiwic3RyIiwianMiLCJmb3JtYXRTdHIiLCJuZXh0Iiwic2V0RGF0YSIsInNvcnQiLCJ0YWJsZVVwcGVyU29ydGVyIiwidGVtcCIsImlkIiwic3BsaWNlIiwiaXNIZWxwIiwidW5zaGlmdCIsInNlbmRlcjI0NDA1IiwicmVnaXN0ZXJFdmVudCIsImFkZEdsb2JhbEV2ZW50IiwiRW1wbG95RXZlbnQiLCJlbXBsb3lQYXJ0bmVyIiwiZ2V0RW1wbG95UGFydG5lciIsImEiLCJiIiwicG93ZXIiLCJqIiwiYmlkIiwic3J2X2lkIiwicmlkIiwic2hpZnQiLCJrIiwiRW1wbG95U2VuZEV2ZW50IiwiZGF0YSIsImxpc3QiLCJFbXBsb3lTZW5kRXZlbnRfU3VjY2VzcyIsImhlcm9faWQiLCJvblRvdWNoRW5kIiwib3BlbkVtcG9seVBhbmVsVmlldyIsInYiLCJvcGVuUm9vdFduZCIsInBhcmFtcyIsInNlbmRlcjI0NDA2Iiwic2VuZGVyMjQ0MDQiLCJjbG9zZUNhbGxCYWNrIiwiZGVsZXRlTWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7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QUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0EsU0FBSzRDLFNBQUwsR0FBaUIsSUFBakI7QUFFSCxTQUFLckQsSUFBTCxDQUFVc0gsbUJBQVYsQ0FBOEIsS0FBOUI7QUFDQTtBQXBSdUIsQ0FBVCxDQUFuQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDMtMTEgMTQ6MTc6MTlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgSGVyb0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiaGVyb19jb250cm9sbGVyXCIpO1xudmFyIENvbW1vblNjcm9sbFZpZXcgPSByZXF1aXJlKFwiY29tbW9uX3Njcm9sbHZpZXdcIik7XG52YXIgRW1wb2x5UGFuZWxJdGVtID0gcmVxdWlyZShcImVtcG9seV9pdGVtX3BhbmVsXCIpO1xudmFyIEhlcm9FeHBlZGl0RXZlbnQgPSByZXF1aXJlKFwiaGVyb2V4cGVkaXRfZXZlbnRcIik7XG5cbnZhciBFbXBvbHlXaW5kb3cgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiaGVyb2V4cGVkaXRcIiwgXCJlbXBvbHlfcGFuZWxcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLlRpcHM7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmN1cl9pbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMucmV3YXJkX2xpc3QgPSBbXVxuICAgICAgICB0aGlzLnRhYl9saXN0ID0gW11cbiAgICAgICAgdGhpcy5lbXBsb3lfZGF0YSA9IFtdIC8v6ZuH5L2jXG4gICAgICAgIHRoaXMuc2VuZF9kYXRhID0gW10gLy/mtL7pgaNcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gRklUX1NDQUxFO1xuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpO1xuICAgIFxuICAgICAgICB2YXIgdGV4dF83ID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIkltYWdlXzZcIikuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzdcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGV4dF83LnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5aW95Y+L5Yqp6Zi1XCIpO1xuICAgICAgICB0aGlzLnRleHRfZW1wb2x5X251bSA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzJcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy50ZXh0X2VtcG9seV9udW0uc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLku4rml6Xlt7Lpm4fkvaPvvJogXCIpO1xuXG4gICAgICAgIHZhciB0YWJfY29udGFpbmVyID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRhYl9jb250YWluZXJcIik7XG4gICAgICAgIHZhciB0YWJfbmFtZSA9IFtVdGlscy5USTE4TihcIuaUr+aPtOaIkeeahFwiKSxVdGlscy5USTE4TihcIuaIkeeahOaUr+aPtFwiKV1cbiAgICAgICAgZm9yKHZhciBpID0gMTtpPDM7aSsrKXtcbiAgICAgICAgICAgIHZhciB0YWIgPSB7fTtcbiAgICAgICAgICAgIHRhYi5idG4gPSB0YWJfY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYnRuX1wiK2kpO1xuICAgICAgICAgICAgdGFiLm5vcm1hbCA9IHRhYi5idG4uZ2V0Q2hpbGRCeU5hbWUoXCJub3JtYWxcIilcbiAgICAgICAgICAgIHRhYi5zZWxlY3QgPSB0YWIuYnRuLmdldENoaWxkQnlOYW1lKFwic2VsZWN0XCIpXG4gICAgICAgICAgICB0YWIuc2VsZWN0LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGFiLnRpdGxlID0gdGFiLmJ0bi5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgICAgICB0YWIudGl0bGVMaW5lID0gdGFiLmJ0bi5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbE91dGxpbmUpO1xuICAgICAgICAgICAgdGFiLnRpdGxlLnN0cmluZyA9IHRhYl9uYW1lW2ktMV07XG4gICAgICAgICAgICB0YWIudGl0bGUubm9kZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweGNmLCAweGI1LCAweDkzLCAweGZmKTtcbiAgICAgICAgICAgIHRhYi5pbmRleCA9IGlcbiAgICAgICAgICAgIHRoaXMudGFiX2xpc3RbaV0gPSB0YWJcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ29vZF9jb25zID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImdvb2RfY29uc1wiKVxuXG4gICAgICAgIHRoaXMuZW1wdHlfYmcgPSBVdGlscy5jcmVhdGVJbWFnZSh0aGlzLmdvb2RfY29ucyxudWxsLHRoaXMuZ29vZF9jb25zLndpZHRoKjAuNSwgdGhpcy5nb29kX2NvbnMuaGVpZ2h0KjAuNSxjYy52MigwLjUsIDAuNSkpO1xuICAgICAgICB2YXIgcmVzID0gUGF0aFRvb2wuZ2V0QmlnQmcoXCJiaWdiZ18zXCIpO1xuICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCBmdW5jdGlvbiAoc2Zfb2JqKSB7XG4gICAgICAgICAgICB0aGlzLmVtcHR5X2JnLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuZW1wdHlfbGFiZWwgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCxuZXcgY2MuQ29sb3IoMHhlZCwweGNkLDB4YTIsMHhmZiksbnVsbCx0aGlzLmVtcHR5X2JnLm5vZGUud2lkdGgqMC41LC03NSxcIlwiLHRoaXMuZW1wdHlfYmcubm9kZSwwLGNjLnYyKDAuNSwwLjUpKTtcbiAgICAgICAgdGhpcy5lbXB0eV9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuaaguaXoOWPr+mbh+S9o+iLsembhO+8jOW/q+WOu+WKoOWlveWPi+WQp1wiKTtcbiAgICAgICAgdGhpcy5lbXB0eV9iZy5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuaGVyb19saXN0ID0gSGVyb0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldEV4cGVkaXRIZXJvRGF0YSgpO1xuICAgICAgICB0aGlzLmhlcm9fbGlzdCA9IHRoaXMuaGVyb19saXN0IHx8IFtdO1xuXG4gICAgICAgIHZhciBzY3JvbGxfdmlld19zaXplID0gdGhpcy5nb29kX2NvbnMuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzOiBFbXBvbHlQYW5lbEl0ZW0sICAgICAgLy8g5Y2V5YWD57G7XG4gICAgICAgICAgICBzdGFydF94OiAyLCAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBzdGFydF95OiAwLCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWei1t+eCuVxuICAgICAgICAgICAgc3BhY2VfeTogNSwgICAgICAgICAgICAgICAgICAgIC8vIHnmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIGl0ZW1fd2lkdGg6IDYzMSwgICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IDE0OSwgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuGhlaWdodFxuICAgICAgICAgICAgcm93OiAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xuICAgICAgICAgICAgY29sOiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgICAgIG5lZWRfZHluYW1pYzogdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbVNjcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpO1xuICAgICAgICB0aGlzLml0ZW1TY3JvbGx2aWV3LmNyZWF0ZVNjcm9sbCh0aGlzLmdvb2RfY29ucywgY2MudjIoMCwwKSwgU2Nyb2xsVmlld0Rpci52ZXJ0aWNhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgc2Nyb2xsX3ZpZXdfc2l6ZSwgc2V0dGluZyk7XG5cbiAgICB9LFxuXG4gICAgaXNWaXNpYmxlUmVkUG9pbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMubW9kZWwuZ2V0SGVyb1NlbmRSZWRQb2ludCgpO1xuXHQgICAgVXRpbHMuYWRkUmVkUG9pbnRUb05vZGVCeVN0YXR1cyh0aGlzLnRhYl9saXN0WzJdLmJ0biwgc3RhdHVzLG51bGwsMTEpXG4gICAgfSxcblxuXG4gICAgdGFiQ2hhbmdlVmlldzpmdW5jdGlvbihpbmRleCl7XG4gICAgICAgIGluZGV4ID0gaW5kZXggfHwgMTtcbiAgICAgICAgaWYodGhpcy5jdXJfaW5kZXggPT0gaW5kZXgpcmV0dXJuO1xuICAgICAgICBpZih0aGlzLmN1cl90YWIhPW51bGwpe1xuICAgICAgICAgICAgdGhpcy5jdXJfdGFiLnNlbGVjdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY3VyX3RhYi50aXRsZS5ub2RlLmNvbG9yID0gbmV3IGNjLkNvbG9yKDB4Y2YsIDB4YjUsIDB4OTMsIDB4ZmYpO1xuICAgICAgICAgICAgdGhpcy5jdXJfdGFiLnRpdGxlTGluZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweDJhLDB4MTYsMHgwZSwweGZmKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cl9pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmN1cl90YWIgPSB0aGlzLnRhYl9saXN0W3RoaXMuY3VyX2luZGV4XTtcbiAgICAgICAgaWYodGhpcy5jdXJfdGFiIT1udWxsKXtcbiAgICAgICAgICAgIHRoaXMuY3VyX3RhYi5zZWxlY3QuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY3VyX3RhYi50aXRsZS5ub2RlLmNvbG9yID0gbmV3IGNjLkNvbG9yKDB4ZmYsIDB4ZWQsIDB4ZDYsIDB4ZmYpO1xuICAgICAgICAgICAgdGhpcy5jdXJfdGFiLnRpdGxlTGluZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweDJhLDB4MTYsMHgwZSwweGZmKTtcbiAgICAgICAgfVxuICAgICAgICBpZihpbmRleCA9PSAxKXtcbiAgICAgICAgICAgIHZhciBlbXBsb3lEYXRhID0gdGhpcy5tb2RlbC5nZXRQYXJ0bmVyTWVzc2FnZSgpIC8v5LyZ5Ly05L+h5oGvXG4gICAgICAgICAgICB2YXIgbnVtID0gZW1wbG95RGF0YS5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnRleHRfZW1wb2x5X251bS5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB2YXIgc3RyID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5LuK5pel5bey6ZuH5L2j77yaICVkLyVkXCIpLG51bSwzKTtcbiAgICAgICAgICAgIHRoaXMudGV4dF9lbXBvbHlfbnVtLnN0cmluZyA9IHN0cjtcbiAgICAgICAgICAgIGlmKHRoaXMuZW1wbG95X2RhdGEgJiYgVXRpbHMubmV4dCh0aGlzLmVtcGxveV9kYXRhKSAhPSBudWxsKXtcbiAgICAgICAgICAgICAgICB2YXIgdGFiID0ge31cbiAgICAgICAgICAgICAgICB0YWIubnVtID0gbnVtXG4gICAgICAgICAgICAgICAgdGFiLmluZGV4ID0gMVxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbVNjcm9sbHZpZXcuc2V0RGF0YSh0aGlzLmVtcGxveV9kYXRhLG51bGwsdGFiKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1wdHlfYmcubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbVNjcm9sbHZpZXcuc2V0RGF0YShbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXB0eV9iZy5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNlIGlmKGluZGV4ID09IDIpe1xuICAgICAgICAgICAgdGhpcy50ZXh0X2VtcG9seV9udW0ubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfYmcubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmKHRoaXMuc2VuZF9kYXRhICYmIFV0aWxzLm5leHQodGhpcy5zZW5kX2RhdGEpICE9IG51bGwpe1xuICAgICAgICAgICAgICAgIHZhciBudW0gPSB0aGlzLnNlbmRfZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdmFyIHRhYiA9IHt9O1xuICAgICAgICAgICAgICAgIHRhYi5udW0gPSBudW07XG4gICAgICAgICAgICAgICAgdGFiLmluZGV4ID0gMjtcbiAgICAgICAgICAgICAgICB0aGlzLmhlcm9fbGlzdC5zb3J0KFV0aWxzLnRhYmxlVXBwZXJTb3J0ZXIoW1wicG93ZXJcIl0pKTtcbiAgICAgICAgICAgICAgICBpZihVdGlscy5uZXh0KHRoaXMuc2VuZF9kYXRhKSAhPW51bGwpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSB0aGlzLmhlcm9fbGlzdC5sZW5ndGgtMTsgaT49MDtpLS0pe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5oZXJvX2xpc3RbaV0uaWQgPT0gdGhpcy5zZW5kX2RhdGFbMF0uaWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0aGlzLmhlcm9fbGlzdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlcm9fbGlzdC5zcGxpY2UoaSwxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZih0ZW1wICYmIFV0aWxzLm5leHQodGVtcCkgIT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLmlzSGVscCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlcm9fbGlzdC51bnNoaWZ0KHRlbXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFiLm51bSA9IG51bTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWIubnVtID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1TY3JvbGx2aWV3LnNldERhdGEodGhpcy5oZXJvX2xpc3QsbnVsbCx0YWIpO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjI0NDA1KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgIC8vIOaUr+aPtOaIkeeahFxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEhlcm9FeHBlZGl0RXZlbnQuRW1wbG95RXZlbnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGVtcGxveURhdGEgPSB0aGlzLm1vZGVsLmdldFBhcnRuZXJNZXNzYWdlKCkgLy/lt7Lnu4/lgJ/nlKjnmoRcbiAgICAgICAgICAgIHZhciBlbXBsb3lQYXJ0bmVyID0gdGhpcy5tb2RlbC5nZXRFbXBsb3lQYXJ0bmVyKCkgLy/lj6/ku6XpgInmi6nnmoTkvJnkvLRcbiAgICAgICAgICAgIGVtcGxveVBhcnRuZXIuc29ydChmdW5jdGlvbihhLGIpe1xuICAgICAgICAgICAgICAgIHJldHVybiBhLnBvd2VyID4gYi5wb3dlcjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmb3IodmFyIGkgPSBlbXBsb3lQYXJ0bmVyLmxlbmd0aC0xOyBpPj0wO2ktLSl7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBqID0gZW1wbG95RGF0YS5sZW5ndGgtMTsgaj49MDtqLS0pe1xuICAgICAgICAgICAgICAgICAgICBpZihlbXBsb3lQYXJ0bmVyW2ldLmJpZCAmJiBlbXBsb3lEYXRhW2pdLmJpZCAmJiBlbXBsb3lQYXJ0bmVyW2ldLmlkICYmIGVtcGxveURhdGFbal0uaWQgJiYgZW1wbG95UGFydG5lcltpXS5zcnZfaWQgJiYgZW1wbG95RGF0YVtqXS5zcnZfaWQgJiYgZW1wbG95UGFydG5lcltpXS5yaWQgJiYgZW1wbG95RGF0YVtqXS5yaWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1wbG95UGFydG5lcltpXS5iaWQgPT0gZW1wbG95RGF0YVtqXS5iaWQgJiYgZW1wbG95UGFydG5lcltpXS5pZCA9PSBlbXBsb3lEYXRhW2pdLmlkICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcGxveVBhcnRuZXJbaV0uc3J2X2lkID09IGVtcGxveURhdGFbal0uc3J2X2lkICYmIGVtcGxveVBhcnRuZXJbaV0ucmlkID09IGVtcGxveURhdGFbal0ucmlkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wbG95UGFydG5lci5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG51bSA9IGVtcGxveURhdGEubGVuZ3RoO1xuICAgICAgICAgICAgaWYoZW1wbG95UGFydG5lci5sZW5ndGggPT0gMCAmJiBudW0gPT0gMCl7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXB0eV9iZy5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLmVtcHR5X2JnLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IodmFyIGsgaW4gZW1wbG95RGF0YSl7XG4gICAgICAgICAgICAgICAgZW1wbG95RGF0YVtrXS5pc0hlbHAgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGVtcGxveVBhcnRuZXIudW5zaGlmdChlbXBsb3lEYXRhW2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGV4dF9lbXBvbHlfbnVtLm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBzdHIgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCLku4rml6Xlt7Lpm4fkvaPvvJogJWQvJWRcIiksbnVtLDMpXG4gICAgICAgICAgICB0aGlzLnRleHRfZW1wb2x5X251bS5zdHJpbmcgPSBzdHI7XG4gICAgICAgICAgICB0aGlzLmVtcGxveV9kYXRhID0gZW1wbG95UGFydG5lciB8fCBbXTtcblxuICAgICAgICAgICAgdmFyIHRhYiA9IHt9XG4gICAgICAgICAgICB0YWIubnVtID0gbnVtXG4gICAgICAgICAgICB0YWIuaW5kZXggPSAxXG4gICAgICAgICAgICB0aGlzLml0ZW1TY3JvbGx2aWV3LnNldERhdGEodGhpcy5lbXBsb3lfZGF0YSxudWxsLHRhYilcbiAgICAgICAgfS5iaW5kKHRoaXMpKSAgICAgICAgXG5cbiAgICAgICAgLy8g5oiR55qE5pSv5o+0XG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoSGVyb0V4cGVkaXRFdmVudC5FbXBsb3lTZW5kRXZlbnQsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlUmVkUG9pbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc2VuZF9kYXRhID0gZGF0YS5saXN0O1xuICAgICAgICAgICAgdGhpcy50ZXh0X2VtcG9seV9udW0ubm9kZS5hY3RpdmUgPWZhbHNlO1xuICAgICAgICBcbiAgICAgICAgICAgIHZhciBudW0gPSB0aGlzLnNlbmRfZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIHZhciB0YWIgPSB7fVxuICAgICAgICAgICAgdGFiLm51bSA9IG51bTtcbiAgICAgICAgICAgIHRhYi5pbmRleCA9IDI7XG4gICAgICAgICAgICB0aGlzLmhlcm9fbGlzdC5zb3J0KFV0aWxzLnRhYmxlVXBwZXJTb3J0ZXIoW1wicG93ZXJcIl0pKTtcbiAgICAgICAgICAgIGlmKFV0aWxzLm5leHQodGhpcy5zZW5kX2RhdGEpIT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSB0aGlzLmhlcm9fbGlzdC5sZW5ndGgtMTsgaT49MDtpLS0pe1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmhlcm9fbGlzdFtpXS5pZCA9PSBkYXRhLmxpc3RbMF0uaWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRoaXMuaGVyb19saXN0W2ldXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlcm9fbGlzdC5zcGxpY2UoaSwxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih0ZW1wICYmIFV0aWxzLm5leHQodGVtcCkhPW51bGwpe1xuICAgICAgICAgICAgICAgICAgICB0ZW1wLmlzSGVscCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVyb19saXN0LnVuc2hpZnQodGVtcCk7XG4gICAgICAgICAgICAgICAgICAgIHRhYi5udW0gPSBudW07XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRhYi5udW0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5pdGVtU2Nyb2xsdmlldy5zZXREYXRhKHRoaXMuaGVyb19saXN0LG51bGwsdGFiKVxuICAgICAgICB9LmJpbmQodGhpcykpICAgICAgICBcblxuICAgICAgICAvLyDmiJHnmoTmlK/mj7TmiJDlip/ov5Tlm55cbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChIZXJvRXhwZWRpdEV2ZW50LkVtcGxveVNlbmRFdmVudF9TdWNjZXNzLCBmdW5jdGlvbihoZXJvX2lkKSB7XG4gICAgICAgICAgICB2YXIgbnVtID0gdGhpcy5zZW5kX2RhdGEubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHRhYiA9IHt9XG4gICAgICAgICAgICB0YWIubnVtID0gbnVtXG4gICAgICAgICAgICB0YWIuaW5kZXggPSAyXG4gICAgICAgICAgICB0aGlzLmhlcm9fbGlzdC5zb3J0KFV0aWxzLnRhYmxlVXBwZXJTb3J0ZXIoW1wicG93ZXJcIl0pKTtcbiAgICAgICAgICAgIGlmKFV0aWxzLm5leHQodGhpcy5zZW5kX2RhdGEpIT1udWxsKXtcbiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHt9O1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IHRoaXMuaGVyb19saXN0Lmxlbmd0aC0xOyBpPj0wO2ktLSl7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuaGVyb19saXN0W2ldLmlkID09IGhlcm9faWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRoaXMuaGVyb19saXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZXJvX2xpc3Quc3BsaWNlKGksMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGVtcC5pc0hlbHAgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVyb19saXN0LnVuc2hpZnQodGVtcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuaXRlbVNjcm9sbHZpZXcuc2V0RGF0YSh0aGlzLmhlcm9fbGlzdCxudWxsLHRhYilcbiAgICAgICAgfS5iaW5kKHRoaXMpKSAgIFxuXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5iYWNrZ3JvdW5kLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkVtcG9seVBhbmVsVmlldyhmYWxzZSk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMik7XG5cbiAgICAgICAgZm9yKHZhciBpIGluIHRoaXMudGFiX2xpc3Qpe1xuICAgICAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLnRhYl9saXN0W2ldLmJ0biwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYkNoYW5nZVZpZXcodi5pbmRleCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcyx0aGlzLnRhYl9saXN0W2ldKSwgMSk7XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihwYXJhbXMpe1xuICAgICAgICB0aGlzLnRhYkNoYW5nZVZpZXcoMSk7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlUmVkUG9pbnQoKTtcbiAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjI0NDA2KCk7XG4gICAgICAgIHRoaXMuY3RybC5zZW5kZXIyNDQwNCgpO1xuICAgIH0sXG5cbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLml0ZW1TY3JvbGx2aWV3KXtcbiAgICAgICAgICAgIHRoaXMuaXRlbVNjcm9sbHZpZXcuZGVsZXRlTWUoKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbVNjcm9sbHZpZXcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJfaW5kZXggPSBudWxsO1xuICAgICAgICB0aGlzLnJld2FyZF9saXN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy50YWJfbGlzdCA9IG51bGw7XG4gICAgICAgIHRoaXMuZW1wbG95X2RhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbmRfZGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMuaGVyb19saXN0ID0gbnVsbDtcblxuXHQgICAgdGhpcy5jdHJsLm9wZW5FbXBvbHlQYW5lbFZpZXcoZmFsc2UpO1xuICAgIH0sXG59KSJdfQ==
|