|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/crossshow/view/crossshow_main_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, '223cfkCWAVNk7Dj8r84F6fv', 'crossshow_main_window');
|
// Scripts/mod/crossshow/view/crossshow_main_window.js
|
|
"use strict";
|
|
////------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 跨服时空 主界面
|
// <br/>Create: 2019-07-29 10:53:49
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var CrossshowController = require("crossshow_controller");
|
|
var RankController = require("rank_controller");
|
|
var RankConstant = require("rank_constant");
|
|
var CrossshowEvent = require("crossshow_event");
|
|
var RoleController = require("role_controller");
|
|
var CommonScrollViewSingle = require("common_scrollview_single");
|
|
var BackpackController = require("backpack_controller");
|
|
var Crossshow_mainWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("crossshow", "crossshow_main_window"); // this.viewTag = SCENE_TAG.ui; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
// this.win_type = WinType.Full; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
this.cross_name_list = {}; //跨服名字
|
|
this.ctrl = CrossshowController.getIntance();
|
this.role_ctrl = RoleController.getInstance();
|
this.black_color = new cc.Color(0x00, 0x00, 0x00, 0xff);
|
this.color_1 = new cc.Color(0x7c, 0xd7, 0x5d, 0xff);
|
this.color_2 = new cc.Color(0xff, 0xe6, 0xce, 0xff);
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
this.backgound = this.seekChild("background");
|
this.backgound.scale = FIT_SCALE;
|
this.loadRes(PathTool.getBigBg("crossshow/crhosshow_bg"), function (sp) {
|
this.backgound.getComponent(cc.Sprite).spriteFrame = sp;
|
}.bind(this));
|
this.main_container = this.seekChild("main_container");
|
this.container_size = this.main_container.getContentSize();
|
this.clost_btn = this.seekChild("close_btn");
|
this.top_panel = this.seekChild("top_panel");
|
this.title_name_lb = this.seekChild("title_name", cc.Label);
|
this.title_name_lb.string = Utils.TI18N("跨服时空");
|
this.lay_scrollview = this.seekChild(this.main_container, "lay_scrollview");
|
this.bottom_panel = this.seekChild("bottom_panel");
|
this.icon_scrollview = this.seekChild("icon_scrollview");
|
var label_cross = this.seekChild(this.bottom_panel, "label_cross", cc.Label);
|
label_cross.string = Utils.TI18N("当前跨服玩法");
|
var label_tips = this.seekChild(this.bottom_panel, "label_tips", cc.Label);
|
label_tips.string = Utils.TI18N("跨服时空每隔一段时间会重组");
|
this.rule_btn = this.seekChild("rule_btn");
|
this.rule_btn_lb = this.seekChild(this.rule_btn, "label", cc.Label);
|
this.rule_btn_lb.string = Utils.TI18N("排行榜");
|
this.adaptationScreen();
|
},
|
//设置适配屏幕
|
adaptationScreen: function adaptationScreen() {},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
Utils.onTouchEnd(this.clost_btn, function () {
|
this.ctrl.openCrossshowMainWindow(false);
|
}.bind(this), 2);
|
Utils.onTouchEnd(this.rank_btn, function () {
|
RankController.getIntance().openMainView(true, RankConstant.MainTabType.CrossRank);
|
}.bind(this), 1);
|
this.rule_btn.on(cc.Node.EventType.TOUCH_END, function (event) {
|
Utils.playButtonSound(1);
|
var config = Config.cross_show_data.data_const.game_rule;
|
var pos = event.touch.getLocation();
|
|
if (config) {
|
require("tips_controller").getInstance().showCommonTips(config.desc, pos);
|
}
|
});
|
this.addGlobalEvent(CrossshowEvent.Get_Cross_Show_Info_Event, function (scdata) {
|
if (!scdata) return;
|
this.setData(scdata);
|
});
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(params) {
|
//世界等级
|
this.world_lev = this.role_ctrl.getModel().getWorldLev() || 0; //个人等级
|
|
this.role_vo = this.role_ctrl.getRoleVo();
|
|
if (this.role_vo) {
|
this.role_lev = this.role_vo.lev || 0;
|
} else {
|
this.role_lev = 0;
|
}
|
|
this.ctrl.sender22150();
|
this.addEffect();
|
},
|
setData: function setData(data) {
|
if (!data) return;
|
var list = [];
|
|
for (var i in data.srv_list) {
|
var v = data.srv_list[i];
|
var srv_arr = Utils.getServerIndex(v.srv_id);
|
var srv_index = srv_arr[0];
|
var is_local = srv_arr[1];
|
var s_data = {};
|
|
if (srv_index == 0) {
|
s_data.sort_index = 1;
|
s_data.srv_name = Utils.TI18N("异域");
|
} else {
|
if (is_local) {
|
s_data.sort_index = 0; //本服
|
|
s_data.srv_name = cc.js.formatStr(Utils.TI18N("本服%s服"), srv_index);
|
} else {
|
s_data.sort_index = 1;
|
s_data.srv_name = cc.js.formatStr(Utils.TI18N("%s服"), srv_index);
|
}
|
}
|
|
s_data.srv_index = Number(srv_index);
|
|
if (s_data.srv_index == null) {
|
s_data.srv_index = 0;
|
}
|
|
s_data.world_name = cc.js.formatStr(Utils.TI18N("世界等级%s级"), v.world_lev);
|
list[i] = s_data;
|
}
|
|
list.sort(Utils.tableLowerSorter(["sort_index", "srv_index"]));
|
this.show_list = [];
|
var count = Math.ceil(list.length / 2);
|
|
for (var _i = 1; _i <= count; _i++) {
|
var left_data = list[_i * 2 - 1];
|
var right_data = list[_i * 2];
|
var _data = {};
|
_data.left_data = left_data;
|
_data.right_data = right_data;
|
this.show_list.push(_data);
|
}
|
|
if (this.show_list.length == 0) {
|
this.showNoInfo();
|
} else {
|
this.updateNameList();
|
}
|
|
this.initCrossInfo();
|
},
|
addEffect: function addEffect() {
|
this.size = this.main_container.getSize(); //流星
|
|
if (this.scene_effect_1 == null) {
|
this.scene_effect_1 = Utils.createEffectSpine(PathTool.getEffectRes(305), cc.v2(self.size.width * 0.5, self.size.height * 0.5), cc.v2(0.5, 0.5), true, PlayerAction.action);
|
this.scene_effect_1.setParent(this.backgound);
|
} //星星
|
|
|
if (this.scene_effect_2 == null) {
|
this.scene_effect_2 = Utils.createEffectSpine(PathTool.getEffectRes(306), cc.v2(self.size.width * 0.5, self.size.height * 0.5), cc.v2(0.5, 0.5), true, PlayerAction.action);
|
this.scene_effect_2.setParent(this.backgound);
|
}
|
},
|
showNoInfo: function showNoInfo() {
|
if (!this.role_vo) return;
|
if (this.cross_icon != null) return;
|
var lay_scrollview_size = this.lay_scrollview.getContentSize();
|
var x = lay_scrollview_size.width * 0.5;
|
var y = lay_scrollview_size.height * 0.5 + 200;
|
var icon_res = PathTool.getUIIconPath("crossshow", "crossshow_06");
|
var cell = this.lay_scrollview;
|
this.cross_icon = Utils.createImage(cell, icon_res, x, y, cc.v2(0.5, 0.5)); // this.loadRes(icon_res,function(sp){
|
// this.cross_icon.spriteFrame = sp;
|
// }.bind(this))
|
|
this.cross_effect = Utils.createEffectSpine(PathTool.getEffectRes(376), cc.v2(x, y), cc.v2(0.5, 0.5), true, PlayerAction.action);
|
this.cross_effect.setParent(cell);
|
var res = PathTool.getUIIconPath("crossshow", "crossshow_02");
|
this.left_level_bg = Utils.createImage(cell, res, x, y - 120, cc.v2(0.5, 0.5), null, null, true);
|
this.left_level_bg.setContentSize(cc.size(156, 40));
|
var arr = Utils.getServerIndex(this.role_vo.srv_id);
|
var srv_index = arr[0];
|
var is_local = arr[1]; //左边名字
|
|
var srv_name = cc.js.formatStr(Utils.TI18N("本服%s服"), srv_index);
|
this.left_name = Utils.createLabel(22, this.color_1, this.black_color, x, y - 120, srv_name, cell, 2, cc.v2(0.5, 0.5));
|
var world_name = cc.js.formatStr(Utils.TI18N("世界等级%s级"), this.world_lev);
|
this.left_world_lev = Utils.createLabel(22, this.color_2, this.black_color, x, y - 156, world_name, cell, 2, cc.v2(0.5, 0.5));
|
var tips = Utils.TI18N("该服尚未进行跨服分组(πvπ)");
|
this.cross_show_tips = Utils.createLabel(24, this.color_2, this.black_color, x, y - 200, tips, cell, 2, cc.v2(0.5, 0.5));
|
},
|
updateNameList: function updateNameList() {
|
if (!this.show_list) return;
|
if (!this.scrollview_y) return;
|
if (!this.scrollview_height) return;
|
|
if (this.list_view == null) {
|
var lay_scrollview_size = this.lay_scrollview.getContentSize();
|
var scroll_view_size = cc.size(lay_scrollview_size.width, this.scrollview_height);
|
var start_y = 135;
|
var space_y = -10;
|
var item_height = 250;
|
var content_height = this.scrollview_height - start_y;
|
var position_data_list = null;
|
var max_count = Math.floor(content_height / (item_height + space_y));
|
var count = this.numberOfCellsName();
|
|
if (max_count >= count) {
|
//如果数量不够单屏显示数量..居中显示
|
position_data_list = [];
|
var s_y = (content_height - (item_height + space_y) * count) * 0.5;
|
var x = scroll_view_size.width * 0.5;
|
|
for (var i = 0; i < count; i++) {
|
var y = content_height - s_y - ((item_height + space_y) * 0.5 + (i - 1) * (item_height + space_y));
|
position_data_list[i] = cc.v2(x, y);
|
}
|
}
|
|
var setting = {
|
start_x: 0,
|
// 第一个单元的X起点
|
space_x: 0,
|
// x方向的间隔
|
start_y: start_y,
|
// 第一个单元的Y起点
|
end_y: 0,
|
space_y: space_y,
|
// y方向的间隔
|
item_width: scroll_view_size.width,
|
// 单元的尺寸width
|
item_height: item_height,
|
// 单元的尺寸height
|
delay: 1,
|
col: 1,
|
// 列数,作用于垂直滚动类型
|
need_dynamic: true,
|
position_data_list: position_data_list
|
};
|
this.list_view = new CommonScrollViewSingle();
|
this.list_view.createScroll(this.lay_scrollview, cc.v2(scroll_view_size.width * 0.5, this.scrollview_y), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting, cc.v2(0.5, 0));
|
this.list_view.registerScriptHandlerSingle(this.createNewCellName.bind(this), ScrollViewFuncType.CreateNewCell);
|
this.list_view.registerScriptHandlerSingle(this.numberOfCellsName.bind(this), ScrollViewFuncType.NumberOfCells);
|
this.list_view.registerScriptHandlerSingle(this.updateCellByIndexName.bind(this), ScrollViewFuncType.UpdateCellByIndex);
|
|
if (max_count >= count) {
|
this.list_view.setClickEnabled(false);
|
}
|
}
|
|
this.list_view.reloadData();
|
},
|
//创建cell
|
//@width 是setting.item_width
|
//@height 是setting.item_height
|
createNewCellName: function createNewCellName(width, height) {
|
var cell = new cc.Node();
|
cell.setAnchorPoint(0, 0);
|
cell.setContentSize(cc.size(width, height));
|
cell.left_item = {};
|
cell.right_item = {}; //left_icon
|
|
var icon_res = PathTool.getUIIconPath("crossshow", "crossshow_06");
|
cell.left_item.icon = Utils.createImage(cell, icon_res, 146, 164, cc.v2(0.5, 0.5));
|
cell.left_item.icon.node.scale = 0.66; //right_icon
|
|
cell.right_item.icon = Utils.createImage(cell, icon_res, 463, 133, cc.v2(0.5, 0.5));
|
cell.right_item.icon.node.scale = 0.66;
|
var res = PathTool.getUIIconPath("crossshow", "crossshow_02");
|
cell.left_item.level_bg = Utils.createImage(cell, res, 146, 76, cc.v2(0.5, 0.5), null, null, true);
|
cell.left_item.level_bg.setContentSize(cc.size(156, 40)); // cell.left_item.level_bg.set
|
//右边背景
|
|
cell.right_item.level_bg = Utils.createImage(cell, res, 463, 47, cc.v2(0.5, 0.5), null, null, true);
|
cell.right_item.level_bg.setContentSize(cc.size(156, 40)); //左边特效
|
|
var effect_id = Utils.getEffectRes(377);
|
cell.left_item.cross_effect = Utils.createEffectSpine(effect_id, cc.v2(146, 164), cc.v2(0.5, 0.5), true, PlayerAction.action);
|
cell.left_item.cross_effect.node.scale = 0.66;
|
cell.addChild(cell.left_item.cross_effect.node, 1); //右边特效
|
|
effect_id = Utils.getEffectRes(376);
|
cell.right_item.cross_effect = Utils.createEffectSpine(effect_id, cc.v2(463, 133), cc.v2(0.5, 0.5), true, PlayerAction.action);
|
cell.right_item.cross_effect.node.scale = 0.66;
|
cell.addChild(cell.right_item.cross_effect.node, 1); //线
|
|
effect_id = Utils.getEffectRes(378);
|
cell.line_effect1 = Utils.createEffectSpine(effect_id, cc.v2(width * 0.5, 150), cc.v2(0.5, 0.5), true, PlayerAction.action);
|
cell.line_effect1.node.scale = 0.66;
|
cell.line_effect1.node.setRotation(10);
|
cell.addChild(cell.line_effect1.node, 1); //线2
|
|
effect_id = Utils.getEffectRes(378);
|
cell.line_effect2 = Utils.createEffectSpine(effect_id, cc.v2(width * 0.5, 150), cc.v2(0.5, 0.5), true, PlayerAction.action);
|
cell.line_effect2.node.scale = 0.66;
|
cell.line_effect2.node.setRotation(130);
|
cell.line_effect2.node.setScale(1.3, 1);
|
cell.addChild(cell.line_effect2.node, 1); //左边名字
|
|
cell.left_item.name = Utils.createLabel(22, this.color_2, this.black_color, 146, 76, "", cell, 2, cc.v2(0.5, 0.5));
|
cell.left_item.world_lev = Utils.createLabel(22, this.color_2, this.black_color, 146, 40, "", cell, 2, cc.v2(0.5, 0.5)); //右边名字
|
|
cell.right_item.name = Utils.createLabel(22, this.color_2, this.black_color, 463, 47, "", cell, 2, cc.v2(0.5, 0.5));
|
cell.right_item.world_lev = Utils.createLabel(22, this.color_2, this.black_color, 463, 11, "", cell, 2, cc.v2(0.5, 0.5));
|
|
cell.deleteMe = function () {
|
if (cell.left_item.cross_effect) {
|
cell.left_item.cross_effect.setToSetupPose();
|
cell.left_item.cross_effect.clearTracks();
|
cell.left_item.cross_effect.node.removeFromParent();
|
cell.left_item.cross_effect.node.destroy();
|
cell.left_item.cross_effect = null;
|
}
|
|
if (cell.right_item.cross_effect) {
|
cell.right_item.cross_effect.setToSetupPose();
|
cell.right_item.cross_effect.clearTracks();
|
cell.right_item.cross_effect.node.removeFromParent();
|
cell.right_item.cross_effect.node.destroy();
|
cell.right_item.cross_effect = null;
|
}
|
|
if (cell.line_effect1) {
|
cell.line_effect1.setToSetupPose();
|
cell.line_effect1.clearTracks();
|
cell.line_effect1.node.removeFromParent();
|
cell.line_effect1.node.destroy();
|
cell.line_effect1 = null;
|
}
|
|
if (cell.line_effect2) {
|
cell.line_effect2.setToSetupPose();
|
cell.line_effect2.clearTracks();
|
cell.line_effect2.node.removeFromParent();
|
cell.line_effect2.node.destroy();
|
cell.line_effect2 = null;
|
}
|
}.bind(this);
|
|
cell.DeleteMe = cell.deleteMe;
|
return cell;
|
},
|
//获取数据数量
|
numberOfCellsName: function numberOfCellsName() {
|
if (!this.show_list) return 0;
|
return this.show_list.length;
|
},
|
//更新cell
|
//cell :createNewCell的返回的对象
|
//inde :数据的索引
|
updateCellByIndexName: function updateCellByIndexName(cell, index) {
|
var data = this.show_list[index];
|
|
if (data) {
|
if (data.left_data) {
|
if (data.left_data.sort_index == 0) {
|
cell.left_item.name.node.color = this.color_1;
|
} else {
|
cell.left_item.name.node.color = this.color_2;
|
}
|
|
cell.left_item.name.string = data.left_data.srv_name;
|
cell.left_item.world_lev.string = data.left_data.world_name;
|
}
|
|
if (data.right_data) {
|
if (data.right_data.sort_index == 0) {
|
cell.right_item.name.node.color = this.color_1;
|
} else {
|
cell.right_item.name.node.color = this.color_2;
|
}
|
|
cell.right_item.name.string = data.right_data.srv_name;
|
cell.right_item.world_lev.string = data.right_data.world_name;
|
|
for (var k in cell.right_item) {
|
cell.right_item[k].node.active = true;
|
}
|
|
cell.line_effect1.node.active = true;
|
} else {
|
for (var _k in cell.right_item) {
|
cell.right_item[_k].node.active = false;
|
}
|
|
cell.line_effect1.node.active = false;
|
}
|
|
if (index == this.numberOfCellsName()) {
|
//最后一个了..最后一条线不显示
|
cell.line_effect2.node.active = false;
|
} else {
|
cell.line_effect2.node.active = true;
|
}
|
}
|
},
|
//初始化 icon信息
|
initCrossInfo: function initCrossInfo() {
|
var config = Config.cross_show_data.data_base;
|
this.cross_list = [];
|
|
if (config) {
|
for (var k in config) {
|
this.cross_list.push(config[k]);
|
}
|
}
|
|
this.cross_list.sort(Utils.tableLowerSorter(["id"]));
|
this.updateCrossList();
|
},
|
updateCrossList: function updateCrossList() {
|
if (!this.cross_list) return;
|
|
if (this.cross_list_view == null) {
|
var scroll_view_size = this.icon_scrollview.getContentSize();
|
var item_width = 150;
|
var item_height = 120;
|
var position_data_list = null;
|
var max_count = Math.floor(scroll_view_size.width / item_width);
|
var count = this.numberOfCells();
|
|
if (max_count >= count) {
|
position_data_list = [];
|
var s_x = 50;
|
var y = item_height * 0.5;
|
|
for (var i = 0; i < count; i++) {
|
var x = s_x + item_width * 0.5 + (i - 1) * item_width;
|
position_data_list[i] = cc.v2(x, y);
|
}
|
}
|
|
var setting = {
|
start_x: 0,
|
// 第一个单元的X起点
|
space_x: 0,
|
// x方向的间隔
|
start_y: 0,
|
// 第一个单元的Y起点
|
space_y: 0,
|
// y方向的间隔
|
item_width: 150,
|
// 单元的尺寸width
|
item_height: item_height,
|
// 单元的尺寸height
|
delay: 1,
|
col: 1,
|
// 列数,作用于垂直滚动类型
|
need_dynamic: true,
|
position_data_list: position_data_list
|
};
|
this.cross_list_view = new CommonScrollViewSingle();
|
this.cross_list_view.createScroll(this.icon_scrollview, cc.v2(scroll_view_size.width * 0.5, scroll_view_size.height * 0.5), ScrollViewDir.horizontal, ScrollViewStartPos.top, scroll_view_size, setting, cc.v2(0.5, 0));
|
this.cross_list_view.registerScriptHandlerSingle(this.createNewCell.bind(this), ScrollViewFuncType.CreateNewCell);
|
this.cross_list_view.registerScriptHandlerSingle(this.numberOfCells.bind(this), ScrollViewFuncType.NumberOfCells);
|
this.cross_list_view.registerScriptHandlerSingle(this.updateCellByIndex.bind(this), ScrollViewFuncType.UpdateCellByIndex);
|
this.cross_list_view.registerScriptHandlerSingle(this.onCellTouched.bind(this), ScrollViewFuncType.OnCellTouched);
|
|
if (max_count >= count) {
|
this.cross_list_view.setClickEnabled(false);
|
}
|
}
|
|
this.cross_list_view.reloadData();
|
},
|
//创建cell
|
createNewCell: function createNewCell(width, height) {
|
var cell = new cc.Node();
|
cell.setAnchorPoint(0, 0);
|
cell.setContentSize(cc.size(width, height));
|
var res = PathTool.getUIIconPath("common", "common_90083");
|
cell.icon = Utils.createImage(cell, res, width * 0.5, height * 0.5, cc.v2(0.5, 0.5));
|
cell.goto_info = Utils.createLabel(18, this.color_1, this.black_color, width * 0.5 - 2, 36, "", cell, 2, cc.v2(0.5, 0.5));
|
cell.goto_info_lo = cell.goto_info.node.getComponent(cc.LabelOutline);
|
cell.btn = cell.addComponet(cc.Button);
|
cell.btn.transition = cc.Button.Transition.SCALE; //点击事件
|
|
cell.on("click", function () {
|
if (cell.is_lock) return;
|
Utils.playButtonSound(1);
|
this.onCellTouched(cell);
|
}, this); //回收用
|
|
cell.deleteMe = function () {
|
if (cell.item_load != null) {// cell.item_load.deleteMe();
|
// cell.item_load = null
|
}
|
};
|
|
return cell;
|
},
|
//获取数据数量
|
numberOfCells: function numberOfCells() {
|
return this.cross_list.length;
|
},
|
//更新cell
|
updateCellByIndex: function updateCellByIndex(cell, index) {
|
cell.index = index;
|
var data = this.cross_list[index];
|
|
if (data) {
|
var arr = this.checkIconLockInfo(data.open_limit);
|
var is_lock = arr[0];
|
var lock_str = arr[1];
|
|
if (is_lock) {
|
cell.goto_info_lo.enabled = false;
|
cell.btn.interactable = false;
|
cell.goto_info.string = lock_str;
|
} else {
|
cell.goto_info_lo.enabled = true;
|
cell.btn.interactable = true;
|
cell.goto_info.string = Utils.TI18N("点击前往");
|
}
|
|
cell.is_lock = is_lock;
|
var icon_name = cc.js.formatStr("txt_cn_cross_icon_%s", data.icon);
|
var bg_res = PathTool.getUIIconPath("crossshow/cross_icon", icon_name);
|
|
if (cell.record_icon_res != bg_res) {
|
cell.record_icon_res = bg_res;
|
|
if (!cell.item_load) {
|
cell.item_load = this.loadRes(bg_res, function (sp) {
|
cell.icon.spriteFrame = sp;
|
|
if (is_lock) {
|
cell.btn.interactable = false;
|
}
|
}.bind(this));
|
}
|
}
|
}
|
},
|
//点击cell .需要在 createNewCell 设置点击事件
|
onCellTouched: function onCellTouched(cell) {
|
var index = cell.index;
|
var data = this.cross_list[index];
|
var arr = this.checkIconLockInfo(data.open_limit);
|
var is_lock = arr[0];
|
var lock_str = arr[1];
|
|
if (is_lock) {
|
message(lock_str);
|
return;
|
}
|
|
var config = Config.source_data.data_source_data[data.source_id];
|
|
if (config) {
|
BackpackController.getInstance().gotoItemSources(config.evt_type, config.extend);
|
}
|
},
|
checkIconLockInfo: function checkIconLockInfo(open_limit) {
|
if (!open_limit) return;
|
var is_lock = false;
|
var lock_str = "";
|
|
for (var i in open_limit) {
|
var v = open_limit[i];
|
|
if (v[0] == "world_lev") {
|
if (this.world_lev < v[1]) {
|
is_lock = true;
|
lock_str = cc.js.formatStr(Utils.TI18N("%s世界等级解锁"), v[1]);
|
break;
|
}
|
} else if (v[0] == "lev") {
|
if (this.role_lev < v[1]) {
|
is_lock = true;
|
lock_str = cc.js.formatStr(Utils.TI18N("%s级解锁"), v[1]);
|
break;
|
}
|
} else if (v[0] == "guild_war") {}
|
}
|
|
return [is_lock, lock_str];
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
if (this.list_view) {
|
this.list_view.deleteMe();
|
this.list_view = null;
|
}
|
|
if (this.cross_list_view) {
|
this.cross_list_view.deleteMe();
|
this.cross_list_view = null;
|
}
|
|
if (this.cross_effect) {
|
this.cross_effect.clearTracks();
|
this.cross_effect.node.removeFromParent();
|
this.cross_effect.node.destroy();
|
this.cross_effect = null;
|
}
|
|
if (this.scene_effect_1) {
|
this.scene_effect_1.clearTracks();
|
this.scene_effect_1.node.removeFromParent();
|
this.scene_effect_1.node.destroy();
|
this.scene_effect_1 = null;
|
}
|
|
if (this.scene_effect_2) {
|
this.scene_effect_2.clearTracks();
|
this.scene_effect_2.node.removeFromParent();
|
this.scene_effect_2.node.destroy();
|
this.scene_effect_2 = null;
|
}
|
|
this.ctrl.openCrossshowMainWindow(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxjcm9zc3Nob3dcXHZpZXdcXGNyb3Nzc2hvd19tYWluX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJDcm9zc3Nob3dDb250cm9sbGVyIiwiUmFua0NvbnRyb2xsZXIiLCJSYW5rQ29uc3RhbnQiLCJDcm9zc3Nob3dFdmVudCIsIlJvbGVDb250cm9sbGVyIiwiQ29tbW9uU2Nyb2xsVmlld1NpbmdsZSIsIkJhY2twYWNrQ29udHJvbGxlciIsIkNyb3Nzc2hvd19tYWluV2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiaW5pdENvbmZpZyIsImNyb3NzX25hbWVfbGlzdCIsImN0cmwiLCJnZXRJbnRhbmNlIiwicm9sZV9jdHJsIiwiZ2V0SW5zdGFuY2UiLCJibGFja19jb2xvciIsIkNvbG9yIiwiY29sb3JfMSIsImNvbG9yXzIiLCJvcGVuQ2FsbEJhY2siLCJiYWNrZ291bmQiLCJzZWVrQ2hpbGQiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsImxvYWRSZXMiLCJnZXRCaWdCZyIsInNwIiwiZ2V0Q29tcG9uZW50IiwiU3ByaXRlIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwibWFpbl9jb250YWluZXIiLCJjb250YWluZXJfc2l6ZSIsImdldENvbnRlbnRTaXplIiwiY2xvc3RfYnRuIiwidG9wX3BhbmVsIiwidGl0bGVfbmFtZV9sYiIsIkxhYmVsIiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsImxheV9zY3JvbGx2aWV3IiwiYm90dG9tX3BhbmVsIiwiaWNvbl9zY3JvbGx2aWV3IiwibGFiZWxfY3Jvc3MiLCJsYWJlbF90aXBzIiwicnVsZV9idG4iLCJydWxlX2J0bl9sYiIsImFkYXB0YXRpb25TY3JlZW4iLCJyZWdpc3RlckV2ZW50Iiwib25Ub3VjaEVuZCIsIm9wZW5Dcm9zc3Nob3dNYWluV2luZG93IiwicmFua19idG4iLCJvcGVuTWFpblZpZXciLCJNYWluVGFiVHlwZSIsIkNyb3NzUmFuayIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsImV2ZW50IiwicGxheUJ1dHRvblNvdW5kIiwiY29uZmlnIiwiQ29uZmlnIiwiY3Jvc3Nfc2hvd19kYXRhIiwiZGF0YV9jb25zdCIsImdhbWVfcnVsZSIsInBvcyIsInRvdWNoIiwiZ2V0TG9jYXRpb24iLCJzaG93Q29tbW9uVGlwcyIsImRlc2MiLCJhZGRHbG9iYWxFdmVudCIsIkdldF9Dcm9zc19TaG93X0luZm9fRXZlbnQiLCJzY2RhdGEiLCJzZXREYXRhIiwib3BlblJvb3RXbmQiLCJwYXJhbXMiLCJ3b3JsZF9sZXYiLCJnZXRNb2RlbCIsImdldFdvcmxkTGV2Iiwicm9sZV92byIsImdldFJvbGVWbyIsInJvbGVfbGV2IiwibGV2Iiwic2VuZGVyMjIxNTAiLCJhZGRFZmZlY3QiLCJkYXRhIiwibGlzdCIsImkiLCJzcnZfbGlzdCIsInYiLCJzcnZfYXJyIiwiZ2V0U2VydmVySW5kZXgiLCJzcnZfaWQiLCJzcnZfaW5kZXgiLCJpc19sb2NhbCIsInNfZGF0YSIsInNvcnRfaW5kZXgiLCJzcnZfbmFtZSIsImpzIiwiZm9ybWF0U3RyIiwiTnVtYmVyIiwid29ybGRfbmFtZSIsInNvcnQiLCJ0YWJsZUxvd2VyU29ydGVyIiwic2hvd19saXN0IiwiY291bnQiLCJNYXRoIiwiY2VpbCIsImxlbmd0aCIsImxlZnRfZGF0YSIsInJpZ2h0X2RhdGEiLCJwdXNoIiwic2hvd05vSW5mbyIsInVwZGF0ZU5hbWVMaXN0IiwiaW5pdENyb3NzSW5mbyIsInNpemUiLCJnZXRTaXplIiwic2NlbmVfZWZmZWN0XzEiLCJjcmVhdGVFZmZlY3RTcGluZSIsImdldEVmZmVjdFJlcyIsInYyIiwic2VsZiIsIndpZHRoIiwiaGVpZ2h0IiwiUGxheWVyQWN0aW9uIiwiYWN0aW9uIiwic2V0UGFyZW50Iiwic2NlbmVfZWZmZWN0XzIiLCJjcm9zc19pY29uIiwibGF5X3Njcm9sbHZpZXdfc2l6ZSIsIngiLCJ5IiwiaWNvbl9yZXMiLCJnZXRVSUljb25QYXRoIiwiY2VsbCIsImNyZWF0ZUltYWdlIiwiY3Jvc3NfZWZmZWN0IiwicmVzIiwibGVmdF9sZXZlbF9iZyIsInNldENvbnRlbnRTaXplIiwiYXJyIiwibGVmdF9uYW1lIiwiY3JlYXRlTGFiZWwiLCJsZWZ0X3dvcmxkX2xldiIsInRpcHMiLCJjcm9zc19zaG93X3RpcHMiLCJzY3JvbGx2aWV3X3kiLCJzY3JvbGx2aWV3X2hlaWdodCIsImxpc3RfdmlldyIsInNjcm9sbF92aWV3X3NpemUiLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1faGVpZ2h0IiwiY29udGVudF9oZWlnaHQiLCJwb3NpdGlvbl9kYXRhX2xpc3QiLCJtYXhfY291bnQiLCJmbG9vciIsIm51bWJlck9mQ2VsbHNOYW1lIiwic195Iiwic2V0dGluZyIsInN0YXJ0X3giLCJzcGFjZV94IiwiZW5kX3kiLCJpdGVtX3dpZHRoIiwiZGVsYXkiLCJjb2wiLCJuZWVkX2R5bmFtaWMiLCJjcmVhdGVTY3JvbGwiLCJTY3JvbGxWaWV3RGlyIiwidmVydGljYWwiLCJTY3JvbGxWaWV3U3RhcnRQb3MiLCJ0b3AiLCJyZWdpc3RlclNjcmlwdEhhbmRsZXJTaW5nbGUiLCJjcmVhdGVOZXdDZWxsTmFtZSIsIlNjcm9sbFZpZXdGdW5jVHlwZSIsIkNyZWF0ZU5ld0NlbGwiLCJOdW1iZXJPZkNlbGxzIiwidXBkYXRlQ2VsbEJ5SW5kZXhOYW1lIiwiVXBkYXRlQ2VsbEJ5SW5kZXgiLCJzZXRDbGlja0VuYWJsZWQiLCJyZWxvYWREYXRhIiwic2V0QW5jaG9yUG9pbnQiLCJsZWZ0X2l0ZW0iLCJyaWdodF9pdGVtIiwiaWNvbiIsIm5vZGUiLCJsZXZlbF9iZyIsImVmZmVjdF9pZCIsImFkZENoaWxkIiwibGluZV9lZmZlY3QxIiwic2V0Um90YXRpb24iLCJsaW5lX2VmZmVjdDIiLCJzZXRTY2FsZSIsIm5hbWUiLCJkZWxldGVNZSIsInNldFRvU2V0dXBQb3NlIiwiY2xlYXJUcmFja3MiLCJyZW1vdmVGcm9tUGFyZW50IiwiZGVzdHJveSIsIkRlbGV0ZU1lIiwiaW5kZXgiLCJjb2xvciIsImsiLCJhY3RpdmUiLCJkYXRhX2Jhc2UiLCJjcm9zc19saXN0IiwidXBkYXRlQ3Jvc3NMaXN0IiwiY3Jvc3NfbGlzdF92aWV3IiwibnVtYmVyT2ZDZWxscyIsInNfeCIsImhvcml6b250YWwiLCJjcmVhdGVOZXdDZWxsIiwidXBkYXRlQ2VsbEJ5SW5kZXgiLCJvbkNlbGxUb3VjaGVkIiwiT25DZWxsVG91Y2hlZCIsImdvdG9faW5mbyIsImdvdG9faW5mb19sbyIsIkxhYmVsT3V0bGluZSIsImJ0biIsImFkZENvbXBvbmV0IiwiQnV0dG9uIiwidHJhbnNpdGlvbiIsIlRyYW5zaXRpb24iLCJTQ0FMRSIsImlzX2xvY2siLCJpdGVtX2xvYWQiLCJjaGVja0ljb25Mb2NrSW5mbyIsIm9wZW5fbGltaXQiLCJsb2NrX3N0ciIsImVuYWJsZWQiLCJpbnRlcmFjdGFibGUiLCJpY29uX25hbWUiLCJiZ19yZXMiLCJyZWNvcmRfaWNvbl9yZXMiLCJtZXNzYWdlIiwic291cmNlX2RhdGEiLCJkYXRhX3NvdXJjZV9kYXRhIiwic291cmNlX2lkIiwiZ290b0l0ZW1Tb3VyY2VzIiwiZXZ0X3R5cGUiLCJleHRlbmQiLCJjbG9zZUNhbGxCYWNrIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsbUJBQW1CLEdBQUdELE9BQU8sQ0FBQyxzQkFBRCxDQUFqQzs7QUFDQSxJQUFJRSxjQUFjLEdBQUdGLE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJRyxZQUFZLEdBQUdILE9BQU8sQ0FBQyxlQUFELENBQTFCOztBQUNBLElBQUlJLGNBQWMsR0FBR0osT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlLLGNBQWMsR0FBR0wsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNB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QUs1RCxZQUFMLENBQWtCaUQsSUFBbEIsQ0FBdUJZLGdCQUF2QjtBQUNBLFdBQUs3RCxZQUFMLENBQWtCaUQsSUFBbEIsQ0FBdUJhLE9BQXZCO0FBQ0EsV0FBSzlELFlBQUwsR0FBb0IsSUFBcEI7QUFDSDs7QUFDRCxRQUFJLEtBQUtuQixjQUFULEVBQXlCO0FBQ3JCLFdBQUtBLGNBQUwsQ0FBb0IrRSxXQUFwQjtBQUNBLFdBQUsvRSxjQUFMLENBQW9Cb0UsSUFBcEIsQ0FBeUJZLGdCQUF6QjtBQUNBLFdBQUtoRixjQUFMLENBQW9Cb0UsSUFBcEIsQ0FBeUJhLE9BQXpCO0FBQ0EsV0FBS2pGLGNBQUwsR0FBc0IsSUFBdEI7QUFDSDs7QUFDRCxRQUFJLEtBQUtVLGNBQVQsRUFBeUI7QUFDckIsV0FBS0EsY0FBTCxDQUFvQnFFLFdBQXBCO0FBQ0EsV0FBS3JFLGNBQUwsQ0FBb0IwRCxJQUFwQixDQUF5QlksZ0JBQXpCO0FBQ0EsV0FBS3RFLGNBQUwsQ0FBb0IwRCxJQUFwQixDQUF5QmEsT0FBekI7QUFDQSxXQUFLdkUsY0FBTCxHQUFzQixJQUF0QjtBQUNIOztBQUNELFNBQUt0SCxJQUFMLENBQVV3Qyx1QkFBVixDQUFrQyxLQUFsQztBQUNIO0FBaG1CK0IsQ0FBVCxDQUEzQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6Leo5pyN5pe256m6IOS4u+eVjOmdoiBcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA3LTI5IDEwOjUzOjQ5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIENyb3Nzc2hvd0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiY3Jvc3NzaG93X2NvbnRyb2xsZXJcIik7XG52YXIgUmFua0NvbnRyb2xsZXIgPSByZXF1aXJlKFwicmFua19jb250cm9sbGVyXCIpO1xudmFyIFJhbmtDb25zdGFudCA9IHJlcXVpcmUoXCJyYW5rX2NvbnN0YW50XCIpO1xudmFyIENyb3Nzc2hvd0V2ZW50ID0gcmVxdWlyZShcImNyb3Nzc2hvd19ldmVudFwiKTtcbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XG52YXIgQ29tbW9uU2Nyb2xsVmlld1NpbmdsZSA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld19zaW5nbGVcIik7XG52YXIgQmFja3BhY2tDb250cm9sbGVyID0gcmVxdWlyZShcImJhY2twYWNrX2NvbnRyb2xsZXJcIik7XG5cbnZhciBDcm9zc3Nob3dfbWFpbldpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJjcm9zc3Nob3dcIiwgXCJjcm9zc3Nob3dfbWFpbl93aW5kb3dcIik7XG4gICAgICAgIC8vIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy51aTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIC8vIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkZ1bGw7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY3Jvc3NfbmFtZV9saXN0ID0ge307Ly/ot6jmnI3lkI3lrZdcbiAgICAgICAgdGhpcy5jdHJsID0gQ3Jvc3NzaG93Q29udHJvbGxlci5nZXRJbnRhbmNlKCk7XG4gICAgICAgIHRoaXMucm9sZV9jdHJsID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5ibGFja19jb2xvciA9IG5ldyBjYy5Db2xvcigweDAwLCAweDAwLCAweDAwLCAweGZmKTtcbiAgICAgICAgdGhpcy5jb2xvcl8xID0gbmV3IGNjLkNvbG9yKDB4N2MsIDB4ZDcsIDB4NWQsIDB4ZmYpO1xuICAgICAgICB0aGlzLmNvbG9yXzIgPSBuZXcgY2MuQ29sb3IoMHhmZiwgMHhlNiwgMHhjZSwgMHhmZik7XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjueahOWbnuiwgyzlj6/ku6XlnKjov5nph4zmjZXojrfnm7jlhbPoioLngrnmiJbogIXnu4Tku7ZcbiAgICBvcGVuQ2FsbEJhY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5iYWNrZ291bmQgPSB0aGlzLnNlZWtDaGlsZChcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMuYmFja2dvdW5kLnNjYWxlID0gRklUX1NDQUxFO1xuICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0QmlnQmcoXCJjcm9zc3Nob3cvY3Job3NzaG93X2JnXCIpLCBmdW5jdGlvbiAoc3ApIHtcbiAgICAgICAgICAgIHRoaXMuYmFja2dvdW5kLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gc3A7XG4gICAgICAgIH0uYmluZCh0aGlzKSlcblxuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX2NvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJfc2l6ZSA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdGhpcy5jbG9zdF9idG4gPSB0aGlzLnNlZWtDaGlsZChcImNsb3NlX2J0blwiKTtcblxuICAgICAgICB0aGlzLnRvcF9wYW5lbCA9IHRoaXMuc2Vla0NoaWxkKFwidG9wX3BhbmVsXCIpO1xuICAgICAgICB0aGlzLnRpdGxlX25hbWVfbGIgPSB0aGlzLnNlZWtDaGlsZChcInRpdGxlX25hbWVcIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLnRpdGxlX25hbWVfbGIuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLot6jmnI3ml7bnqbpcIik7XG5cbiAgICAgICAgdGhpcy5sYXlfc2Nyb2xsdmlldyA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9jb250YWluZXIsIFwibGF5X3Njcm9sbHZpZXdcIik7XG5cbiAgICAgICAgdGhpcy5ib3R0b21fcGFuZWwgPSB0aGlzLnNlZWtDaGlsZChcImJvdHRvbV9wYW5lbFwiKTtcbiAgICAgICAgdGhpcy5pY29uX3Njcm9sbHZpZXcgPSB0aGlzLnNlZWtDaGlsZChcImljb25fc2Nyb2xsdmlld1wiKTtcblxuICAgICAgICBsZXQgbGFiZWxfY3Jvc3MgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmJvdHRvbV9wYW5lbCwgXCJsYWJlbF9jcm9zc1wiLCBjYy5MYWJlbCk7XG4gICAgICAgIGxhYmVsX2Nyb3NzLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5b2T5YmN6Leo5pyN546p5rOVXCIpO1xuXG4gICAgICAgIGxldCBsYWJlbF90aXBzID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5ib3R0b21fcGFuZWwsIFwibGFiZWxfdGlwc1wiLCBjYy5MYWJlbCk7XG4gICAgICAgIGxhYmVsX3RpcHMuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLot6jmnI3ml7bnqbrmr4/pmpTkuIDmrrXml7bpl7TkvJrph43nu4RcIik7XG5cbiAgICAgICAgdGhpcy5ydWxlX2J0biA9IHRoaXMuc2Vla0NoaWxkKFwicnVsZV9idG5cIik7XG4gICAgICAgIHRoaXMucnVsZV9idG5fbGIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnJ1bGVfYnRuLCBcImxhYmVsXCIsIGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5ydWxlX2J0bl9sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIuaOkuihjOamnFwiKTtcblxuICAgICAgICB0aGlzLmFkYXB0YXRpb25TY3JlZW4oKTtcbiAgICB9LFxuXG4gICAgLy/orr7nva7pgILphY3lsY/luZVcbiAgICBhZGFwdGF0aW9uU2NyZWVuOiBmdW5jdGlvbiAoKSB7XG5cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmNsb3N0X2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5Dcm9zc3Nob3dNYWluV2luZG93KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKVxuXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5yYW5rX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgUmFua0NvbnRyb2xsZXIuZ2V0SW50YW5jZSgpLm9wZW5NYWluVmlldyh0cnVlLCBSYW5rQ29uc3RhbnQuTWFpblRhYlR5cGUuQ3Jvc3NSYW5rKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuXG5cbiAgICAgICAgdGhpcy5ydWxlX2J0bi5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDEpO1xuICAgICAgICAgICAgbGV0IGNvbmZpZyA9IENvbmZpZy5jcm9zc19zaG93X2RhdGEuZGF0YV9jb25zdC5nYW1lX3J1bGU7XG4gICAgICAgICAgICB2YXIgcG9zID0gZXZlbnQudG91Y2guZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgICAgICByZXF1aXJlKFwidGlwc19jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkuc2hvd0NvbW1vblRpcHMoY29uZmlnLmRlc2MsIHBvcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoQ3Jvc3NzaG93RXZlbnQuR2V0X0Nyb3NzX1Nob3dfSW5mb19FdmVudCwgZnVuY3Rpb24gKHNjZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFzY2RhdGEpIHJldHVyblxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKHNjZGF0YSk7XG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIMs5Lmf5bCx5piv5LiA5Liq56qX5L2T55qE5q2j5byP5YWl5Y+jLOWPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9wZW5Sb290V25kOiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIC8v5LiW55WM562J57qnXG4gICAgICAgIHRoaXMud29ybGRfbGV2ID0gdGhpcy5yb2xlX2N0cmwuZ2V0TW9kZWwoKS5nZXRXb3JsZExldigpIHx8IDA7XG4gICAgICAgIC8v5Liq5Lq6562J57qnXG4gICAgICAgIHRoaXMucm9sZV92byA9IHRoaXMucm9sZV9jdHJsLmdldFJvbGVWbygpO1xuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvKSB7XG4gICAgICAgICAgICB0aGlzLnJvbGVfbGV2ID0gdGhpcy5yb2xlX3ZvLmxldiB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb2xlX2xldiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjIyMTUwKCk7XG4gICAgICAgIHRoaXMuYWRkRWZmZWN0KCk7XG4gICAgfSxcblxuICAgIHNldERhdGE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuXG4gICAgICAgIGxldCBsaXN0ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgaW4gZGF0YS5zcnZfbGlzdCkge1xuICAgICAgICAgICAgbGV0IHYgPSBkYXRhLnNydl9saXN0W2ldO1xuICAgICAgICAgICAgbGV0IHNydl9hcnIgPSBVdGlscy5nZXRTZXJ2ZXJJbmRleCh2LnNydl9pZCk7XG4gICAgICAgICAgICBsZXQgc3J2X2luZGV4ID0gc3J2X2FyclswXTtcbiAgICAgICAgICAgIGxldCBpc19sb2NhbCA9IHNydl9hcnJbMV07XG4gICAgICAgICAgICBsZXQgc19kYXRhID0ge307XG4gICAgICAgICAgICBpZiAoc3J2X2luZGV4ID09IDApIHtcbiAgICAgICAgICAgICAgICBzX2RhdGEuc29ydF9pbmRleCA9IDE7XG4gICAgICAgICAgICAgICAgc19kYXRhLnNydl9uYW1lID0gVXRpbHMuVEkxOE4oXCLlvILln59cIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc19sb2NhbCkge1xuICAgICAgICAgICAgICAgICAgICBzX2RhdGEuc29ydF9pbmRleCA9IDA7Ly/mnKzmnI1cbiAgICAgICAgICAgICAgICAgICAgc19kYXRhLnNydl9uYW1lID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5pys5pyNJXPmnI1cIiksIHNydl9pbmRleCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc19kYXRhLnNvcnRfaW5kZXggPSAxO1xuICAgICAgICAgICAgICAgICAgICBzX2RhdGEuc3J2X25hbWUgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCIlc+acjVwiKSwgc3J2X2luZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzX2RhdGEuc3J2X2luZGV4ID0gTnVtYmVyKHNydl9pbmRleCk7XG4gICAgICAgICAgICBpZiAoc19kYXRhLnNydl9pbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc19kYXRhLnNydl9pbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzX2RhdGEud29ybGRfbmFtZSA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuS4lueVjOetiee6pyVz57qnXCIpLCB2LndvcmxkX2xldik7XG4gICAgICAgICAgICBsaXN0W2ldID0gc19kYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdC5zb3J0KFV0aWxzLnRhYmxlTG93ZXJTb3J0ZXIoW1wic29ydF9pbmRleFwiLCBcInNydl9pbmRleFwiXSkpO1xuXG4gICAgICAgIHRoaXMuc2hvd19saXN0ID0gW107XG4gICAgICAgIGxldCBjb3VudCA9IE1hdGguY2VpbChsaXN0Lmxlbmd0aCAvIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbGVmdF9kYXRhID0gbGlzdFtpICogMiAtIDFdO1xuICAgICAgICAgICAgbGV0IHJpZ2h0X2RhdGEgPSBsaXN0W2kgKiAyXTtcbiAgICAgICAgICAgIGxldCBkYXRhID0ge307XG4gICAgICAgICAgICBkYXRhLmxlZnRfZGF0YSA9IGxlZnRfZGF0YTtcbiAgICAgICAgICAgIGRhdGEucmlnaHRfZGF0YSA9IHJpZ2h0X2RhdGE7XG4gICAgICAgICAgICB0aGlzLnNob3dfbGlzdC5wdXNoKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNob3dfbGlzdC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zaG93Tm9JbmZvKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5hbWVMaXN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0Q3Jvc3NJbmZvKCk7XG4gICAgfSxcblxuICAgIGFkZEVmZmVjdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNpemUgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldFNpemUoKTtcbiAgICAgICAgLy/mtYHmmJ9cbiAgICAgICAgaWYgKHRoaXMuc2NlbmVfZWZmZWN0XzEgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zY2VuZV9lZmZlY3RfMSA9IFV0aWxzLmNyZWF0ZUVmZmVjdFNwaW5lKFBhdGhUb29sLmdldEVmZmVjdFJlcygzMDUpLCBjYy52MihzZWxmLnNpemUud2lkdGggKiAwLjUsIHNlbGYuc2l6ZS5oZWlnaHQgKiAwLjUpLCBjYy52MigwLjUsIDAuNSksIHRydWUsIFBsYXllckFjdGlvbi5hY3Rpb24pXG4gICAgICAgICAgICB0aGlzLnNjZW5lX2VmZmVjdF8xLnNldFBhcmVudCh0aGlzLmJhY2tnb3VuZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvL+aYn+aYn1xuICAgICAgICBpZiAodGhpcy5zY2VuZV9lZmZlY3RfMiA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNjZW5lX2VmZmVjdF8yID0gVXRpbHMuY3JlYXRlRWZmZWN0U3BpbmUoUGF0aFRvb2wuZ2V0RWZmZWN0UmVzKDMwNiksIGNjLnYyKHNlbGYuc2l6ZS53aWR0aCAqIDAuNSwgc2VsZi5zaXplLmhlaWdodCAqIDAuNSksIGNjLnYyKDAuNSwgMC41KSwgdHJ1ZSwgUGxheWVyQWN0aW9uLmFjdGlvbilcbiAgICAgICAgICAgIHRoaXMuc2NlbmVfZWZmZWN0XzIuc2V0UGFyZW50KHRoaXMuYmFja2dvdW5kKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93Tm9JbmZvOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5yb2xlX3ZvKSByZXR1cm5cbiAgICAgICAgaWYgKHRoaXMuY3Jvc3NfaWNvbiAhPSBudWxsKSByZXR1cm5cbiAgICAgICAgbGV0IGxheV9zY3JvbGx2aWV3X3NpemUgPSB0aGlzLmxheV9zY3JvbGx2aWV3LmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIGxldCB4ID0gbGF5X3Njcm9sbHZpZXdfc2l6ZS53aWR0aCAqIDAuNTtcbiAgICAgICAgbGV0IHkgPSBsYXlfc2Nyb2xsdmlld19zaXplLmhlaWdodCAqIDAuNSArIDIwMDtcbiAgICAgICAgbGV0IGljb25fcmVzID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNyb3Nzc2hvd1wiLCBcImNyb3Nzc2hvd18wNlwiKTtcbiAgICAgICAgbGV0IGNlbGwgPSB0aGlzLmxheV9zY3JvbGx2aWV3O1xuICAgICAgICB0aGlzLmNyb3NzX2ljb24gPSBVdGlscy5jcmVhdGVJbWFnZShjZWxsLCBpY29uX3JlcywgeCwgeSwgY2MudjIoMC41LCAwLjUpKTtcbiAgICAgICAgLy8gdGhpcy5sb2FkUmVzKGljb25fcmVzLGZ1bmN0aW9uKHNwKXtcbiAgICAgICAgLy8gICAgIHRoaXMuY3Jvc3NfaWNvbi5zcHJpdGVGcmFtZSA9IHNwO1xuICAgICAgICAvLyB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgdGhpcy5jcm9zc19lZmZlY3QgPSBVdGlscy5jcmVhdGVFZmZlY3RTcGluZShQYXRoVG9vbC5nZXRFZmZlY3RSZXMoMzc2KSwgY2MudjIoeCwgeSksIGNjLnYyKDAuNSwgMC41KSwgdHJ1ZSwgUGxheWVyQWN0aW9uLmFjdGlvbilcbiAgICAgICAgdGhpcy5jcm9zc19lZmZlY3Quc2V0UGFyZW50KGNlbGwpO1xuXG4gICAgICAgIGxldCByZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY3Jvc3NzaG93XCIsIFwiY3Jvc3NzaG93XzAyXCIpO1xuICAgICAgICB0aGlzLmxlZnRfbGV2ZWxfYmcgPSBVdGlscy5jcmVhdGVJbWFnZShjZWxsLCByZXMsIHgsIHkgLSAxMjAsIGNjLnYyKDAuNSwgMC41KSwgbnVsbCwgbnVsbCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMubGVmdF9sZXZlbF9iZy5zZXRDb250ZW50U2l6ZShjYy5zaXplKDE1NiwgNDApKTtcblxuICAgICAgICBsZXQgYXJyID0gVXRpbHMuZ2V0U2VydmVySW5kZXgodGhpcy5yb2xlX3ZvLnNydl9pZCk7XG4gICAgICAgIGxldCBzcnZfaW5kZXggPSBhcnJbMF07XG4gICAgICAgIGxldCBpc19sb2NhbCA9IGFyclsxXTtcbiAgICAgICAgLy/lt6bovrnlkI3lrZdcbiAgICAgICAgbGV0IHNydl9uYW1lID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5pys5pyNJXPmnI1cIiksIHNydl9pbmRleCk7XG4gICAgICAgIHRoaXMubGVmdF9uYW1lID0gVXRpbHMuY3JlYXRlTGFiZWwoMjIsIHRoaXMuY29sb3JfMSwgdGhpcy5ibGFja19jb2xvciwgeCwgeSAtIDEyMCwgc3J2X25hbWUsIGNlbGwsIDIsIGNjLnYyKDAuNSwgMC41KSlcblxuICAgICAgICBsZXQgd29ybGRfbmFtZSA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuS4lueVjOetiee6pyVz57qnXCIpLCB0aGlzLndvcmxkX2xldik7XG4gICAgICAgIHRoaXMubGVmdF93b3JsZF9sZXYgPSBVdGlscy5jcmVhdGVMYWJlbCgyMiwgdGhpcy5jb2xvcl8yLCB0aGlzLmJsYWNrX2NvbG9yLCB4LCB5IC0gMTU2LCB3b3JsZF9uYW1lLCBjZWxsLCAyLCBjYy52MigwLjUsIDAuNSkpO1xuXG4gICAgICAgIGxldCB0aXBzID0gVXRpbHMuVEkxOE4oXCLor6XmnI3lsJrmnKrov5vooYzot6jmnI3liIbnu4Qoz4B2z4ApXCIpO1xuICAgICAgICB0aGlzLmNyb3NzX3Nob3dfdGlwcyA9IFV0aWxzLmNyZWF0ZUxhYmVsKDI0LCB0aGlzLmNvbG9yXzIsIHRoaXMuYmxhY2tfY29sb3IsIHgsIHkgLSAyMDAsIHRpcHMsIGNlbGwsIDIsIGNjLnYyKDAuNSwgMC41KSk7XG4gICAgfSxcblxuICAgIHVwZGF0ZU5hbWVMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG93X2xpc3QpIHJldHVyblxuICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsdmlld195KSByZXR1cm5cbiAgICAgICAgaWYgKCF0aGlzLnNjcm9sbHZpZXdfaGVpZ2h0KSByZXR1cm5cbiAgICAgICAgaWYgKHRoaXMubGlzdF92aWV3ID09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBsYXlfc2Nyb2xsdmlld19zaXplID0gdGhpcy5sYXlfc2Nyb2xsdmlldy5nZXRDb250ZW50U2l6ZSgpO1xuICAgICAgICAgICAgbGV0IHNjcm9sbF92aWV3X3NpemUgPSBjYy5zaXplKGxheV9zY3JvbGx2aWV3X3NpemUud2lkdGgsIHRoaXMuc2Nyb2xsdmlld19oZWlnaHQpO1xuXG4gICAgICAgICAgICBsZXQgc3RhcnRfeSA9IDEzNTtcbiAgICAgICAgICAgIGxldCBzcGFjZV95ID0gLTEwO1xuICAgICAgICAgICAgbGV0IGl0ZW1faGVpZ2h0ID0gMjUwO1xuICAgICAgICAgICAgbGV0IGNvbnRlbnRfaGVpZ2h0ID0gdGhpcy5zY3JvbGx2aWV3X2hlaWdodCAtIHN0YXJ0X3k7XG5cbiAgICAgICAgICAgIGxldCBwb3NpdGlvbl9kYXRhX2xpc3QgPSBudWxsO1xuICAgICAgICAgICAgbGV0IG1heF9jb3VudCA9IE1hdGguZmxvb3IoY29udGVudF9oZWlnaHQgLyAoaXRlbV9oZWlnaHQgKyBzcGFjZV95KSk7XG4gICAgICAgICAgICBsZXQgY291bnQgPSB0aGlzLm51bWJlck9mQ2VsbHNOYW1lKCk7XG4gICAgICAgICAgICBpZiAobWF4X2NvdW50ID49IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgLy/lpoLmnpzmlbDph4/kuI3lpJ/ljZXlsY/mmL7npLrmlbDph48uLuWxheS4reaYvuekulxuICAgICAgICAgICAgICAgIHBvc2l0aW9uX2RhdGFfbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBzX3kgPSAoY29udGVudF9oZWlnaHQgLSAoaXRlbV9oZWlnaHQgKyBzcGFjZV95KSAqIGNvdW50KSAqIDAuNTtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IHNjcm9sbF92aWV3X3NpemUud2lkdGggKiAwLjU7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB5ID0gY29udGVudF9oZWlnaHQgLSBzX3kgLSAoKGl0ZW1faGVpZ2h0ICsgc3BhY2VfeSkgKiAwLjUgKyAoaSAtIDEpICogKGl0ZW1faGVpZ2h0ICsgc3BhY2VfeSkpO1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbl9kYXRhX2xpc3RbaV0gPSBjYy52Mih4LCB5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzZXR0aW5nID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0X3g6IDAsICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWOi1t+eCuVxuICAgICAgICAgICAgICAgIHNwYWNlX3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICAgICAgc3RhcnRfeTogc3RhcnRfeSwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgICAgICBlbmRfeTogMCxcbiAgICAgICAgICAgICAgICBzcGFjZV95OiBzcGFjZV95LCAgICAgICAgICAgICAgICAgICAvLyB55pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICAgICAgaXRlbV93aWR0aDogc2Nyb2xsX3ZpZXdfc2l6ZS53aWR0aCwgICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiBpdGVtX2hlaWdodCwgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuGhlaWdodFxuICAgICAgICAgICAgICAgIGRlbGF5OiAxLFxuICAgICAgICAgICAgICAgIGNvbDogMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXG4gICAgICAgICAgICAgICAgbmVlZF9keW5hbWljOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uX2RhdGFfbGlzdDogcG9zaXRpb25fZGF0YV9saXN0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubGlzdF92aWV3ID0gbmV3IENvbW1vblNjcm9sbFZpZXdTaW5nbGUoKTtcbiAgICAgICAgICAgIHRoaXMubGlzdF92aWV3LmNyZWF0ZVNjcm9sbCh0aGlzLmxheV9zY3JvbGx2aWV3LCBjYy52MihzY3JvbGxfdmlld19zaXplLndpZHRoICogMC41LCB0aGlzLnNjcm9sbHZpZXdfeSksIFNjcm9sbFZpZXdEaXIudmVydGljYWwsIFNjcm9sbFZpZXdTdGFydFBvcy50b3AsIHNjcm9sbF92aWV3X3NpemUsIHNldHRpbmcsIGNjLnYyKDAuNSwgMCkpXG5cbiAgICAgICAgICAgIHRoaXMubGlzdF92aWV3LnJlZ2lzdGVyU2NyaXB0SGFuZGxlclNpbmdsZSh0aGlzLmNyZWF0ZU5ld0NlbGxOYW1lLmJpbmQodGhpcyksIFNjcm9sbFZpZXdGdW5jVHlwZS5DcmVhdGVOZXdDZWxsKVxuICAgICAgICAgICAgdGhpcy5saXN0X3ZpZXcucmVnaXN0ZXJTY3JpcHRIYW5kbGVyU2luZ2xlKHRoaXMubnVtYmVyT2ZDZWxsc05hbWUuYmluZCh0aGlzKSwgU2Nyb2xsVmlld0Z1bmNUeXBlLk51bWJlck9mQ2VsbHMpXG4gICAgICAgICAgICB0aGlzLmxpc3Rfdmlldy5yZWdpc3RlclNjcmlwdEhhbmRsZXJTaW5nbGUodGhpcy51cGRhdGVDZWxsQnlJbmRleE5hbWUuYmluZCh0aGlzKSwgU2Nyb2xsVmlld0Z1bmNUeXBlLlVwZGF0ZUNlbGxCeUluZGV4KVxuXG4gICAgICAgICAgICBpZiAobWF4X2NvdW50ID49IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0X3ZpZXcuc2V0Q2xpY2tFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3Rfdmlldy5yZWxvYWREYXRhKCk7XG4gICAgfSxcblxuICAgIC8v5Yib5bu6Y2VsbFxuICAgIC8vQHdpZHRoIOaYr3NldHRpbmcuaXRlbV93aWR0aFxuICAgIC8vQGhlaWdodCDmmK9zZXR0aW5nLml0ZW1faGVpZ2h0XG4gICAgY3JlYXRlTmV3Q2VsbE5hbWU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGxldCBjZWxsID0gbmV3IGNjLk5vZGUoKTtcbiAgICAgICAgY2VsbC5zZXRBbmNob3JQb2ludCgwLCAwKTtcbiAgICAgICAgY2VsbC5zZXRDb250ZW50U2l6ZShjYy5zaXplKHdpZHRoLCBoZWlnaHQpKTtcblxuICAgICAgICBjZWxsLmxlZnRfaXRlbSA9IHt9O1xuICAgICAgICBjZWxsLnJpZ2h0X2l0ZW0gPSB7fTtcblxuICAgICAgICAvL2xlZnRfaWNvblxuICAgICAgICBsZXQgaWNvbl9yZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY3Jvc3NzaG93XCIsIFwiY3Jvc3NzaG93XzA2XCIpO1xuICAgICAgICBjZWxsLmxlZnRfaXRlbS5pY29uID0gVXRpbHMuY3JlYXRlSW1hZ2UoY2VsbCwgaWNvbl9yZXMsIDE0NiwgMTY0LCBjYy52MigwLjUsIDAuNSkpO1xuICAgICAgICBjZWxsLmxlZnRfaXRlbS5pY29uLm5vZGUuc2NhbGUgPSAwLjY2O1xuXG4gICAgICAgIC8vcmlnaHRfaWNvblxuICAgICAgICBjZWxsLnJpZ2h0X2l0ZW0uaWNvbiA9IFV0aWxzLmNyZWF0ZUltYWdlKGNlbGwsIGljb25fcmVzLCA0NjMsIDEzMywgY2MudjIoMC41LCAwLjUpKTtcbiAgICAgICAgY2VsbC5yaWdodF9pdGVtLmljb24ubm9kZS5zY2FsZSA9IDAuNjY7XG5cbiAgICAgICAgbGV0IHJlcyA9IFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJjcm9zc3Nob3dcIiwgXCJjcm9zc3Nob3dfMDJcIik7XG4gICAgICAgIGNlbGwubGVmdF9pdGVtLmxldmVsX2JnID0gVXRpbHMuY3JlYXRlSW1hZ2UoY2VsbCwgcmVzLCAxNDYsIDc2LCBjYy52MigwLjUsIDAuNSksIG51bGwsIG51bGwsIHRydWUpO1xuICAgICAgICBjZWxsLmxlZnRfaXRlbS5sZXZlbF9iZy5zZXRDb250ZW50U2l6ZShjYy5zaXplKDE1NiwgNDApKTtcbiAgICAgICAgLy8gY2VsbC5sZWZ0X2l0ZW0ubGV2ZWxfYmcuc2V0XG4gICAgICAgIC8v5Y+z6L656IOM5pmvXG4gICAgICAgIGNlbGwucmlnaHRfaXRlbS5sZXZlbF9iZyA9IFV0aWxzLmNyZWF0ZUltYWdlKGNlbGwsIHJlcywgNDYzLCA0NywgY2MudjIoMC41LCAwLjUpLCBudWxsLCBudWxsLCB0cnVlKTtcbiAgICAgICAgY2VsbC5yaWdodF9pdGVtLmxldmVsX2JnLnNldENvbnRlbnRTaXplKGNjLnNpemUoMTU2LCA0MCkpO1xuXG4gICAgICAgIC8v5bem6L6554m55pWIXG4gICAgICAgIGxldCBlZmZlY3RfaWQgPSBVdGlscy5nZXRFZmZlY3RSZXMoMzc3KTtcbiAgICAgICAgY2VsbC5sZWZ0X2l0ZW0uY3Jvc3NfZWZmZWN0ID0gVXRpbHMuY3JlYXRlRWZmZWN0U3BpbmUoZWZmZWN0X2lkLCBjYy52MigxNDYsIDE2NCksIGNjLnYyKDAuNSwgMC41KSwgdHJ1ZSwgUGxheWVyQWN0aW9uLmFjdGlvbik7XG4gICAgICAgIGNlbGwubGVmdF9pdGVtLmNyb3NzX2VmZmVjdC5ub2RlLnNjYWxlID0gMC42NjtcbiAgICAgICAgY2VsbC5hZGRDaGlsZChjZWxsLmxlZnRfaXRlbS5jcm9zc19lZmZlY3Qubm9kZSwgMSk7XG5cbiAgICAgICAgLy/lj7PovrnnibnmlYhcbiAgICAgICAgZWZmZWN0X2lkID0gVXRpbHMuZ2V0RWZmZWN0UmVzKDM3Nik7XG4gICAgICAgIGNlbGwucmlnaHRfaXRlbS5jcm9zc19lZmZlY3QgPSBVdGlscy5jcmVhdGVFZmZlY3RTcGluZShlZmZlY3RfaWQsIGNjLnYyKDQ2MywgMTMzKSwgY2MudjIoMC41LCAwLjUpLCB0cnVlLCBQbGF5ZXJBY3Rpb24uYWN0aW9uKTtcbiAgICAgICAgY2VsbC5yaWdodF9pdGVtLmNyb3NzX2VmZmVjdC5ub2RlLnNjYWxlID0gMC42NjtcbiAgICAgICAgY2VsbC5hZGRDaGlsZChjZWxsLnJpZ2h0X2l0ZW0uY3Jvc3NfZWZmZWN0Lm5vZGUsIDEpO1xuXG4gICAgICAgIC8v57q/XG4gICAgICAgIGVmZmVjdF9pZCA9IFV0aWxzLmdldEVmZmVjdFJlcygzNzgpO1xuICAgICAgICBjZWxsLmxpbmVfZWZmZWN0MSA9IFV0aWxzLmNyZWF0ZUVmZmVjdFNwaW5lKGVmZmVjdF9pZCwgY2MudjIod2lkdGggKiAwLjUsIDE1MCksIGNjLnYyKDAuNSwgMC41KSwgdHJ1ZSwgUGxheWVyQWN0aW9uLmFjdGlvbik7XG4gICAgICAgIGNlbGwubGluZV9lZmZlY3QxLm5vZGUuc2NhbGUgPSAwLjY2O1xuICAgICAgICBjZWxsLmxpbmVfZWZmZWN0MS5ub2RlLnNldFJvdGF0aW9uKDEwKTtcbiAgICAgICAgY2VsbC5hZGRDaGlsZChjZWxsLmxpbmVfZWZmZWN0MS5ub2RlLCAxKTtcblxuICAgICAgICAvL+e6vzJcbiAgICAgICAgZWZmZWN0X2lkID0gVXRpbHMuZ2V0RWZmZWN0UmVzKDM3OCk7XG4gICAgICAgIGNlbGwubGluZV9lZmZlY3QyID0gVXRpbHMuY3JlYXRlRWZmZWN0U3BpbmUoZWZmZWN0X2lkLCBjYy52Mih3aWR0aCAqIDAuNSwgMTUwKSwgY2MudjIoMC41LCAwLjUpLCB0cnVlLCBQbGF5ZXJBY3Rpb24uYWN0aW9uKTtcbiAgICAgICAgY2VsbC5saW5lX2VmZmVjdDIubm9kZS5zY2FsZSA9IDAuNjY7XG4gICAgICAgIGNlbGwubGluZV9lZmZlY3QyLm5vZGUuc2V0Um90YXRpb24oMTMwKTtcbiAgICAgICAgY2VsbC5saW5lX2VmZmVjdDIubm9kZS5zZXRTY2FsZSgxLjMsIDEpO1xuICAgICAgICBjZWxsLmFkZENoaWxkKGNlbGwubGluZV9lZmZlY3QyLm5vZGUsIDEpO1xuXG4gICAgICAgIC8v5bem6L655ZCN5a2XXG4gICAgICAgIGNlbGwubGVmdF9pdGVtLm5hbWUgPSBVdGlscy5jcmVhdGVMYWJlbCgyMiwgdGhpcy5jb2xvcl8yLCB0aGlzLmJsYWNrX2NvbG9yLCAxNDYsIDc2LCBcIlwiLCBjZWxsLCAyLCBjYy52MigwLjUsIDAuNSkpXG4gICAgICAgIGNlbGwubGVmdF9pdGVtLndvcmxkX2xldiA9IFV0aWxzLmNyZWF0ZUxhYmVsKDIyLCB0aGlzLmNvbG9yXzIsIHRoaXMuYmxhY2tfY29sb3IsIDE0NiwgNDAsIFwiXCIsIGNlbGwsIDIsIGNjLnYyKDAuNSwgMC41KSlcblxuICAgICAgICAvL+WPs+i+ueWQjeWtl1xuICAgICAgICBjZWxsLnJpZ2h0X2l0ZW0ubmFtZSA9IFV0aWxzLmNyZWF0ZUxhYmVsKDIyLCB0aGlzLmNvbG9yXzIsIHRoaXMuYmxhY2tfY29sb3IsIDQ2MywgNDcsIFwiXCIsIGNlbGwsIDIsIGNjLnYyKDAuNSwgMC41KSlcbiAgICAgICAgY2VsbC5yaWdodF9pdGVtLndvcmxkX2xldiA9IFV0aWxzLmNyZWF0ZUxhYmVsKDIyLCB0aGlzLmNvbG9yXzIsIHRoaXMuYmxhY2tfY29sb3IsIDQ2MywgMTEsIFwiXCIsIGNlbGwsIDIsIGNjLnYyKDAuNSwgMC41KSlcblxuICAgICAgICBjZWxsLmRlbGV0ZU1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGNlbGwubGVmdF9pdGVtLmNyb3NzX2VmZmVjdCkge1xuICAgICAgICAgICAgICAgIGNlbGwubGVmdF9pdGVtLmNyb3NzX2VmZmVjdC5zZXRUb1NldHVwUG9zZSgpO1xuICAgICAgICAgICAgICAgIGNlbGwubGVmdF9pdGVtLmNyb3NzX2VmZmVjdC5jbGVhclRyYWNrcygpO1xuICAgICAgICAgICAgICAgIGNlbGwubGVmdF9pdGVtLmNyb3NzX2VmZmVjdC5ub2RlLnJlbW92ZUZyb21QYXJlbnQoKTtcbiAgICAgICAgICAgICAgICBjZWxsLmxlZnRfaXRlbS5jcm9zc19lZmZlY3Qubm9kZS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgY2VsbC5sZWZ0X2l0ZW0uY3Jvc3NfZWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNlbGwucmlnaHRfaXRlbS5jcm9zc19lZmZlY3QpIHtcbiAgICAgICAgICAgICAgICBjZWxsLnJpZ2h0X2l0ZW0uY3Jvc3NfZWZmZWN0LnNldFRvU2V0dXBQb3NlKCk7XG4gICAgICAgICAgICAgICAgY2VsbC5yaWdodF9pdGVtLmNyb3NzX2VmZmVjdC5jbGVhclRyYWNrcygpO1xuICAgICAgICAgICAgICAgIGNlbGwucmlnaHRfaXRlbS5jcm9zc19lZmZlY3Qubm9kZS5yZW1vdmVGcm9tUGFyZW50KCk7XG4gICAgICAgICAgICAgICAgY2VsbC5yaWdodF9pdGVtLmNyb3NzX2VmZmVjdC5ub2RlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBjZWxsLnJpZ2h0X2l0ZW0uY3Jvc3NfZWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNlbGwubGluZV9lZmZlY3QxKSB7XG4gICAgICAgICAgICAgICAgY2VsbC5saW5lX2VmZmVjdDEuc2V0VG9TZXR1cFBvc2UoKTtcbiAgICAgICAgICAgICAgICBjZWxsLmxpbmVfZWZmZWN0MS5jbGVhclRyYWNrcygpO1xuICAgICAgICAgICAgICAgIGNlbGwubGluZV9lZmZlY3QxLm5vZGUucmVtb3ZlRnJvbVBhcmVudCgpO1xuICAgICAgICAgICAgICAgIGNlbGwubGluZV9lZmZlY3QxLm5vZGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIGNlbGwubGluZV9lZmZlY3QxID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNlbGwubGluZV9lZmZlY3QyKSB7XG4gICAgICAgICAgICAgICAgY2VsbC5saW5lX2VmZmVjdDIuc2V0VG9TZXR1cFBvc2UoKTtcbiAgICAgICAgICAgICAgICBjZWxsLmxpbmVfZWZmZWN0Mi5jbGVhclRyYWNrcygpO1xuICAgICAgICAgICAgICAgIGNlbGwubGluZV9lZmZlY3QyLm5vZGUucmVtb3ZlRnJvbVBhcmVudCgpO1xuICAgICAgICAgICAgICAgIGNlbGwubGluZV9lZmZlY3QyLm5vZGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIGNlbGwubGluZV9lZmZlY3QyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpXG5cbiAgICAgICAgY2VsbC5EZWxldGVNZSA9IGNlbGwuZGVsZXRlTWU7XG5cbiAgICAgICAgcmV0dXJuIGNlbGxcbiAgICB9LFxuXG4gICAgLy/ojrflj5bmlbDmja7mlbDph49cbiAgICBudW1iZXJPZkNlbGxzTmFtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd19saXN0KSByZXR1cm4gMFxuICAgICAgICByZXR1cm4gdGhpcy5zaG93X2xpc3QubGVuZ3RoXG4gICAgfSxcblxuICAgIC8v5pu05pawY2VsbFxuICAgIC8vY2VsbCA6Y3JlYXRlTmV3Q2VsbOeahOi/lOWbnueahOWvueixoVxuICAgIC8vaW5kZSA65pWw5o2u55qE57Si5byVXG4gICAgdXBkYXRlQ2VsbEJ5SW5kZXhOYW1lOiBmdW5jdGlvbiAoY2VsbCwgaW5kZXgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNob3dfbGlzdFtpbmRleF07XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZWZ0X2RhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5sZWZ0X2RhdGEuc29ydF9pbmRleCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwubGVmdF9pdGVtLm5hbWUubm9kZS5jb2xvciA9IHRoaXMuY29sb3JfMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLmxlZnRfaXRlbS5uYW1lLm5vZGUuY29sb3IgPSB0aGlzLmNvbG9yXzI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNlbGwubGVmdF9pdGVtLm5hbWUuc3RyaW5nID0gZGF0YS5sZWZ0X2RhdGEuc3J2X25hbWU7XG4gICAgICAgICAgICAgICAgY2VsbC5sZWZ0X2l0ZW0ud29ybGRfbGV2LnN0cmluZyA9IGRhdGEubGVmdF9kYXRhLndvcmxkX25hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnJpZ2h0X2RhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5yaWdodF9kYXRhLnNvcnRfaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLnJpZ2h0X2l0ZW0ubmFtZS5ub2RlLmNvbG9yID0gdGhpcy5jb2xvcl8xO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwucmlnaHRfaXRlbS5uYW1lLm5vZGUuY29sb3IgPSB0aGlzLmNvbG9yXzI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNlbGwucmlnaHRfaXRlbS5uYW1lLnN0cmluZyA9IGRhdGEucmlnaHRfZGF0YS5zcnZfbmFtZTtcbiAgICAgICAgICAgICAgICBjZWxsLnJpZ2h0X2l0ZW0ud29ybGRfbGV2LnN0cmluZyA9IGRhdGEucmlnaHRfZGF0YS53b3JsZF9uYW1lO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayBpbiBjZWxsLnJpZ2h0X2l0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5yaWdodF9pdGVtW2tdLm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2VsbC5saW5lX2VmZmVjdDEubm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrIGluIGNlbGwucmlnaHRfaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLnJpZ2h0X2l0ZW1ba10ubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2VsbC5saW5lX2VmZmVjdDEubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluZGV4ID09IHRoaXMubnVtYmVyT2ZDZWxsc05hbWUoKSkge1xuICAgICAgICAgICAgICAgIC8v5pyA5ZCO5LiA5Liq5LqGLi7mnIDlkI7kuIDmnaHnur/kuI3mmL7npLpcbiAgICAgICAgICAgICAgICBjZWxsLmxpbmVfZWZmZWN0Mi5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjZWxsLmxpbmVfZWZmZWN0Mi5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/liJ3lp4vljJYgaWNvbuS/oeaBr1xuICAgIGluaXRDcm9zc0luZm86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbmZpZyA9IENvbmZpZy5jcm9zc19zaG93X2RhdGEuZGF0YV9iYXNlO1xuICAgICAgICB0aGlzLmNyb3NzX2xpc3QgPSBbXTtcbiAgICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICAgICAgZm9yIChsZXQgayBpbiBjb25maWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3NzX2xpc3QucHVzaChjb25maWdba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3Jvc3NfbGlzdC5zb3J0KFV0aWxzLnRhYmxlTG93ZXJTb3J0ZXIoW1wiaWRcIl0pKTtcbiAgICAgICAgdGhpcy51cGRhdGVDcm9zc0xpc3QoKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlQ3Jvc3NMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jcm9zc19saXN0KSByZXR1cm5cbiAgICAgICAgaWYgKHRoaXMuY3Jvc3NfbGlzdF92aWV3ID09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBzY3JvbGxfdmlld19zaXplID0gdGhpcy5pY29uX3Njcm9sbHZpZXcuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgICAgIGxldCBpdGVtX3dpZHRoID0gMTUwO1xuICAgICAgICAgICAgbGV0IGl0ZW1faGVpZ2h0ID0gMTIwO1xuICAgICAgICAgICAgbGV0IHBvc2l0aW9uX2RhdGFfbGlzdCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgbWF4X2NvdW50ID0gTWF0aC5mbG9vcihzY3JvbGxfdmlld19zaXplLndpZHRoIC8gaXRlbV93aWR0aCk7XG4gICAgICAgICAgICBsZXQgY291bnQgPSB0aGlzLm51bWJlck9mQ2VsbHMoKTtcblxuICAgICAgICAgICAgaWYgKG1heF9jb3VudCA+PSBjb3VudCkge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uX2RhdGFfbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBzX3ggPSA1MDtcbiAgICAgICAgICAgICAgICBsZXQgeSA9IGl0ZW1faGVpZ2h0ICogMC41O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IHNfeCArIGl0ZW1fd2lkdGggKiAwLjUgKyAoaSAtIDEpICogaXRlbV93aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25fZGF0YV9saXN0W2ldID0gY2MudjIoeCwgeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgc2V0dGluZyA9IHtcbiAgICAgICAgICAgICAgICBzdGFydF94OiAwLCAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcbiAgICAgICAgICAgICAgICBzcGFjZV94OiAwLCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgICAgIHN0YXJ0X3k6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRZ6LW354K5XG4gICAgICAgICAgICAgICAgc3BhY2VfeTogMCwgICAgICAgICAgICAgICAgICAgLy8geeaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgICAgIGl0ZW1fd2lkdGg6IDE1MCwgICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiBpdGVtX2hlaWdodCwgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuGhlaWdodFxuICAgICAgICAgICAgICAgIGRlbGF5OiAxLFxuICAgICAgICAgICAgICAgIGNvbDogMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXG4gICAgICAgICAgICAgICAgbmVlZF9keW5hbWljOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uX2RhdGFfbGlzdDogcG9zaXRpb25fZGF0YV9saXN0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3Jvc3NfbGlzdF92aWV3ID0gbmV3IENvbW1vblNjcm9sbFZpZXdTaW5nbGUoKTtcbiAgICAgICAgICAgIHRoaXMuY3Jvc3NfbGlzdF92aWV3LmNyZWF0ZVNjcm9sbCh0aGlzLmljb25fc2Nyb2xsdmlldywgY2MudjIoc2Nyb2xsX3ZpZXdfc2l6ZS53aWR0aCAqIDAuNSwgc2Nyb2xsX3ZpZXdfc2l6ZS5oZWlnaHQgKiAwLjUpLCBTY3JvbGxWaWV3RGlyLmhvcml6b250YWwsIFNjcm9sbFZpZXdTdGFydFBvcy50b3AsIHNjcm9sbF92aWV3X3NpemUsIHNldHRpbmcsIGNjLnYyKDAuNSwgMCkpXG5cbiAgICAgICAgICAgIHRoaXMuY3Jvc3NfbGlzdF92aWV3LnJlZ2lzdGVyU2NyaXB0SGFuZGxlclNpbmdsZSh0aGlzLmNyZWF0ZU5ld0NlbGwuYmluZCh0aGlzKSwgU2Nyb2xsVmlld0Z1bmNUeXBlLkNyZWF0ZU5ld0NlbGwpXG4gICAgICAgICAgICB0aGlzLmNyb3NzX2xpc3Rfdmlldy5yZWdpc3RlclNjcmlwdEhhbmRsZXJTaW5nbGUodGhpcy5udW1iZXJPZkNlbGxzLmJpbmQodGhpcyksIFNjcm9sbFZpZXdGdW5jVHlwZS5OdW1iZXJPZkNlbGxzKVxuICAgICAgICAgICAgdGhpcy5jcm9zc19saXN0X3ZpZXcucmVnaXN0ZXJTY3JpcHRIYW5kbGVyU2luZ2xlKHRoaXMudXBkYXRlQ2VsbEJ5SW5kZXguYmluZCh0aGlzKSwgU2Nyb2xsVmlld0Z1bmNUeXBlLlVwZGF0ZUNlbGxCeUluZGV4KVxuICAgICAgICAgICAgdGhpcy5jcm9zc19saXN0X3ZpZXcucmVnaXN0ZXJTY3JpcHRIYW5kbGVyU2luZ2xlKHRoaXMub25DZWxsVG91Y2hlZC5iaW5kKHRoaXMpLCBTY3JvbGxWaWV3RnVuY1R5cGUuT25DZWxsVG91Y2hlZClcblxuICAgICAgICAgICAgaWYgKG1heF9jb3VudCA+PSBjb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3Jvc3NfbGlzdF92aWV3LnNldENsaWNrRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcm9zc19saXN0X3ZpZXcucmVsb2FkRGF0YSgpO1xuICAgIH0sXG5cbiAgICAvL+WIm+W7umNlbGxcbiAgICBjcmVhdGVOZXdDZWxsOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgICAgICBsZXQgY2VsbCA9IG5ldyBjYy5Ob2RlKCk7XG4gICAgICAgIGNlbGwuc2V0QW5jaG9yUG9pbnQoMCwgMCk7XG4gICAgICAgIGNlbGwuc2V0Q29udGVudFNpemUoY2Muc2l6ZSh3aWR0aCwgaGVpZ2h0KSk7XG4gICAgICAgIGxldCByZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY29tbW9uXCIsIFwiY29tbW9uXzkwMDgzXCIpO1xuICAgICAgICBjZWxsLmljb24gPSBVdGlscy5jcmVhdGVJbWFnZShjZWxsLCByZXMsIHdpZHRoICogMC41LCBoZWlnaHQgKiAwLjUsIGNjLnYyKDAuNSwgMC41KSk7XG4gICAgICAgIGNlbGwuZ290b19pbmZvID0gVXRpbHMuY3JlYXRlTGFiZWwoMTgsIHRoaXMuY29sb3JfMSwgdGhpcy5ibGFja19jb2xvciwgd2lkdGggKiAwLjUgLSAyLCAzNiwgXCJcIiwgY2VsbCwgMiwgY2MudjIoMC41LCAwLjUpKTtcbiAgICAgICAgY2VsbC5nb3RvX2luZm9fbG8gPSBjZWxsLmdvdG9faW5mby5ub2RlLmdldENvbXBvbmVudChjYy5MYWJlbE91dGxpbmUpO1xuICAgICAgICBjZWxsLmJ0biA9IGNlbGwuYWRkQ29tcG9uZXQoY2MuQnV0dG9uKTtcbiAgICAgICAgY2VsbC5idG4udHJhbnNpdGlvbiA9IGNjLkJ1dHRvbi5UcmFuc2l0aW9uLlNDQUxFO1xuXG4gICAgICAgIC8v54K55Ye75LqL5Lu2XG4gICAgICAgIGNlbGwub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoY2VsbC5pc19sb2NrKSByZXR1cm5cbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKTtcbiAgICAgICAgICAgIHRoaXMub25DZWxsVG91Y2hlZChjZWxsKTtcbiAgICAgICAgfSwgdGhpcylcblxuICAgICAgICAvL+WbnuaUtueUqFxuICAgICAgICBjZWxsLmRlbGV0ZU1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGNlbGwuaXRlbV9sb2FkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBjZWxsLml0ZW1fbG9hZC5kZWxldGVNZSgpO1xuICAgICAgICAgICAgICAgIC8vIGNlbGwuaXRlbV9sb2FkID0gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNlbGxcbiAgICB9LFxuXG4gICAgLy/ojrflj5bmlbDmja7mlbDph49cbiAgICBudW1iZXJPZkNlbGxzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyb3NzX2xpc3QubGVuZ3RoXG4gICAgfSxcblxuICAgIC8v5pu05pawY2VsbFxuICAgIHVwZGF0ZUNlbGxCeUluZGV4OiBmdW5jdGlvbiAoY2VsbCwgaW5kZXgpIHtcbiAgICAgICAgY2VsbC5pbmRleCA9IGluZGV4O1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuY3Jvc3NfbGlzdFtpbmRleF07XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5jaGVja0ljb25Mb2NrSW5mbyhkYXRhLm9wZW5fbGltaXQpO1xuICAgICAgICAgICAgbGV0IGlzX2xvY2sgPSBhcnJbMF07XG4gICAgICAgICAgICBsZXQgbG9ja19zdHIgPSBhcnJbMV07XG4gICAgICAgICAgICBpZiAoaXNfbG9jaykge1xuICAgICAgICAgICAgICAgIGNlbGwuZ290b19pbmZvX2xvLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjZWxsLmJ0bi5pbnRlcmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjZWxsLmdvdG9faW5mby5zdHJpbmcgPSBsb2NrX3N0cjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2VsbC5nb3RvX2luZm9fbG8uZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2VsbC5idG4uaW50ZXJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjZWxsLmdvdG9faW5mby5zdHJpbmcgPSBVdGlscy5USTE4TihcIueCueWHu+WJjeW+gFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbGwuaXNfbG9jayA9IGlzX2xvY2s7XG5cbiAgICAgICAgICAgIGxldCBpY29uX25hbWUgPSBjYy5qcy5mb3JtYXRTdHIoXCJ0eHRfY25fY3Jvc3NfaWNvbl8lc1wiLCBkYXRhLmljb24pO1xuICAgICAgICAgICAgbGV0IGJnX3JlcyA9IFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJjcm9zc3Nob3cvY3Jvc3NfaWNvblwiLCBpY29uX25hbWUpO1xuXG4gICAgICAgICAgICBpZiAoY2VsbC5yZWNvcmRfaWNvbl9yZXMgIT0gYmdfcmVzKSB7XG4gICAgICAgICAgICAgICAgY2VsbC5yZWNvcmRfaWNvbl9yZXMgPSBiZ19yZXM7XG4gICAgICAgICAgICAgICAgaWYgKCFjZWxsLml0ZW1fbG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLml0ZW1fbG9hZCA9IHRoaXMubG9hZFJlcyhiZ19yZXMsIGZ1bmN0aW9uIChzcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5pY29uLnNwcml0ZUZyYW1lID0gc3A7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuYnRuLmludGVyYWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v54K55Ye7Y2VsbCAu6ZyA6KaB5ZyoIGNyZWF0ZU5ld0NlbGwg6K6+572u54K55Ye75LqL5Lu2XG4gICAgb25DZWxsVG91Y2hlZDogZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gY2VsbC5pbmRleDtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmNyb3NzX2xpc3RbaW5kZXhdO1xuXG4gICAgICAgIGxldCBhcnIgPSB0aGlzLmNoZWNrSWNvbkxvY2tJbmZvKGRhdGEub3Blbl9saW1pdCk7XG4gICAgICAgIGxldCBpc19sb2NrID0gYXJyWzBdO1xuICAgICAgICBsZXQgbG9ja19zdHIgPSBhcnJbMV07XG4gICAgICAgIGlmIChpc19sb2NrKSB7XG4gICAgICAgICAgICBtZXNzYWdlKGxvY2tfc3RyKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29uZmlnID0gQ29uZmlnLnNvdXJjZV9kYXRhLmRhdGFfc291cmNlX2RhdGFbZGF0YS5zb3VyY2VfaWRdO1xuICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICBCYWNrcGFja0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nb3RvSXRlbVNvdXJjZXMoY29uZmlnLmV2dF90eXBlLCBjb25maWcuZXh0ZW5kKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGVja0ljb25Mb2NrSW5mbzogZnVuY3Rpb24gKG9wZW5fbGltaXQpIHtcbiAgICAgICAgaWYgKCFvcGVuX2xpbWl0KSByZXR1cm5cbiAgICAgICAgbGV0IGlzX2xvY2sgPSBmYWxzZTtcbiAgICAgICAgbGV0IGxvY2tfc3RyID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBvcGVuX2xpbWl0KSB7XG4gICAgICAgICAgICBsZXQgdiA9IG9wZW5fbGltaXRbaV07XG4gICAgICAgICAgICBpZiAodlswXSA9PSBcIndvcmxkX2xldlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud29ybGRfbGV2IDwgdlsxXSkge1xuICAgICAgICAgICAgICAgICAgICBpc19sb2NrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbG9ja19zdHIgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCIlc+S4lueVjOetiee6p+ino+mUgVwiKSwgdlsxXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh2WzBdID09IFwibGV2XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb2xlX2xldiA8IHZbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXNfbG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGxvY2tfc3RyID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiJXPnuqfop6PplIFcIiksIHZbMV0pO1xuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodlswXSA9PSBcImd1aWxkX3dhclwiKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtpc19sb2NrLCBsb2NrX3N0cl1cbiAgICB9LFxuXG4gICAgLy8g5YWz6Zet56qX5L2T5Zue6LCDLOmcgOimgeWcqOi/memHjOiwg+eUqOivpeeql+S9k+aJgOWxnmNvbnRyb2xsZXLnmoRjbG9zZeaWueazleayoeeUqOS6jue9ruepuuivpeeql+S9k+WunuS+i+WvueixoVxuICAgIGNsb3NlQ2FsbEJhY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdF92aWV3KSB7XG4gICAgICAgICAgICB0aGlzLmxpc3Rfdmlldy5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5saXN0X3ZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNyb3NzX2xpc3Rfdmlldykge1xuICAgICAgICAgICAgdGhpcy5jcm9zc19saXN0X3ZpZXcuZGVsZXRlTWUoKTtcbiAgICAgICAgICAgIHRoaXMuY3Jvc3NfbGlzdF92aWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jcm9zc19lZmZlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuY3Jvc3NfZWZmZWN0LmNsZWFyVHJhY2tzKCk7XG4gICAgICAgICAgICB0aGlzLmNyb3NzX2VmZmVjdC5ub2RlLnJlbW92ZUZyb21QYXJlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuY3Jvc3NfZWZmZWN0Lm5vZGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jcm9zc19lZmZlY3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNjZW5lX2VmZmVjdF8xKSB7XG4gICAgICAgICAgICB0aGlzLnNjZW5lX2VmZmVjdF8xLmNsZWFyVHJhY2tzKCk7XG4gICAgICAgICAgICB0aGlzLnNjZW5lX2VmZmVjdF8xLm5vZGUucmVtb3ZlRnJvbVBhcmVudCgpO1xuICAgICAgICAgICAgdGhpcy5zY2VuZV9lZmZlY3RfMS5ub2RlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuc2NlbmVfZWZmZWN0XzEgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNjZW5lX2VmZmVjdF8yKSB7XG4gICAgICAgICAgICB0aGlzLnNjZW5lX2VmZmVjdF8yLmNsZWFyVHJhY2tzKCk7XG4gICAgICAgICAgICB0aGlzLnNjZW5lX2VmZmVjdF8yLm5vZGUucmVtb3ZlRnJvbVBhcmVudCgpO1xuICAgICAgICAgICAgdGhpcy5zY2VuZV9lZmZlY3RfMi5ub2RlLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuc2NlbmVfZWZmZWN0XzIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3RybC5vcGVuQ3Jvc3NzaG93TWFpbldpbmRvdyhmYWxzZSlcbiAgICB9LFxufSkiXX0=
|