|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/task/task_controller.js';
|
var __require = nodeEnv ? function (request) {
|
return cc.require(request);
|
} : function (request) {
|
return __quick_compile_project__.require(request, __filename);
|
};
|
function __define (exports, require, module) {
|
if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
|
cc._RF.push(module, '4f6bfKZYWRDXpwlXMiaunHe', 'task_controller');
|
// Scripts/mod/task/task_controller.js
|
|
"use strict";
|
|
// ////////////////////////////////////////////////////////////////////
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 任务,日常,成就
|
// <br/>Create: 2019-01-09 11:26:10
|
// ////////////////////////////////////////////////////////////////////
|
var RoleController = require("role_controller");
|
|
var TaskConst = require("task_const");
|
|
var MainuiConst = require("mainui_const");
|
|
var MainuiController = require("mainui_controller");
|
|
var JumpController = require("jump_controller");
|
|
var TaskController = cc.Class({
|
"extends": BaseController,
|
ctor: function ctor() {},
|
// 初始化配置数据
|
initConfig: function initConfig() {
|
var TaskModel = require("task_model");
|
|
this.model = new TaskModel(this);
|
this.model.initConfig();
|
},
|
// 返回当前的model
|
getModel: function getModel() {
|
return this.model;
|
},
|
// 注册监听事件
|
registerEvents: function registerEvents() {
|
if (this.init_quest_event == null) {
|
this.init_quest_event = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () {
|
gcore.GlobalEvent.unbind(this.init_quest_event);
|
this.init_quest_event = null;
|
|
if (this.notice_view == null) {
|
var TaskNoticeView = require("task_notice_view");
|
|
this.notice_view = new TaskNoticeView();
|
this.notice_view.open();
|
} //角色更新之后请求3条任务相关数据
|
// this.requestBaseQuestData();
|
|
|
this.role_vo = RoleController.getInstance().getRoleVo();
|
|
if (this.role_assets_event == null) {
|
this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
|
if (key == "activity") this.model.checkQuestAndFeatStatus(TaskConst.update_type.activity);
|
}.bind(this));
|
}
|
}.bind(this));
|
}
|
|
if (this.re_link_game_event == null) {
|
this.re_link_game_event = gcore.GlobalEvent.bind(EventId.EVT_RE_LINK_GAME, function () {
|
var GuideController = require("guide_controller");
|
|
if (!GuideController.getInstance().isInGuide()) this.openTaskMainWindow(false); // this.requestBaseQuestData();
|
}.bind(this));
|
}
|
},
|
requestBaseQuestData: function requestBaseQuestData() {
|
this.SendProtocal(10400, {}); //请求所有任务列表
|
|
this.SendProtocal(16400, {}); //请求当前所有的成就列表
|
|
this.requestActivityInfo(); //请求活跃度
|
},
|
// 注册协议接受事件
|
registerProtocals: function registerProtocals() {
|
this.RegisterProtocal(10400, this.on10400); //全部任务列表
|
|
this.RegisterProtocal(10403, this.on10403); //增加已接任务
|
|
this.RegisterProtocal(10406, this.on10406); //提交任务返回,客户端自己更新内存缓存数据
|
|
this.RegisterProtocal(10409, this.on10409); //更新已接任务进度
|
|
this.RegisterProtocal(16400, this.on16400); //全部成就列表
|
|
this.RegisterProtocal(16401, this.on16401); //更新成就进度,也可能是新增成就
|
|
this.RegisterProtocal(16402, this.on16402); //提交成就返回
|
|
this.RegisterProtocal(20300, this.on20300); //已领取的活跃宝箱
|
|
this.RegisterProtocal(20301, this.on20301); //请求领取活跃宝箱
|
//新主线
|
|
this.RegisterProtocal(30001, this.on30001); //进度更新时返回
|
|
this.RegisterProtocal(30002, this.on30002); //提交任务返回
|
},
|
// @desc:打开日常任务主界面
|
// author:{author}
|
// time:2018-05-22 11:32:35
|
// //@status:打开或者关闭
|
// //@index:自动跳转到
|
// return
|
openTaskMainWindow: function openTaskMainWindow(status, index) {
|
if (status == false) {
|
if (this.task_main_window != null) {
|
this.task_main_window.close();
|
this.task_main_window = null;
|
}
|
} else {
|
if (this.task_main_window == null) {
|
var TaskMainWindow = require("task_main_window");
|
|
this.task_main_window = new TaskMainWindow();
|
} // if (this.task_main_window.isOpen() == false)
|
// this.task_main_window.open(index);
|
|
|
this.task_main_window.open(index);
|
}
|
},
|
// @desc:点击任务前往
|
// author:{author}
|
// time:2018-05-22 21:00:26
|
// //@data:
|
// //@index:
|
// //@open_type:
|
// return
|
handleTaskProgress: function handleTaskProgress(data, index, open_type) {
|
index = index || 1;
|
|
if (data.config.progress == null || Utils.next(data.config.progress) == null) {
|
if (data.id != null) cc.log("=================> 处理任务进度时出错,任务id为 " + data.id + " 的没有配置任务进度");
|
return;
|
}
|
|
var progressConfig = data.config.progress[index];
|
|
if (progressConfig == null) {
|
if (data.id != null) cc.log("=================> 处理任务id为 " + data.id + " 的第 " + index + " 个进度要求时出错");
|
return;
|
} //拓展参数用于跳转
|
|
|
var extra = data.config.extra;
|
this.gotoTagertFun(progressConfig, extra, open_type);
|
},
|
//desc:任务和成就的跳转
|
//time:2018-07-07 03:57:59
|
//@progressConfig:
|
//@extra:
|
//@open_type:
|
//@return
|
gotoTagertFun: function gotoTagertFun(progressConfig, extra, open_type) {
|
// this.openTaskMainWindow(false)
|
if (progressConfig == null) return;
|
var _progress = Config.quest_data.data_progress_lable;
|
|
if (progressConfig.cli_label == _progress.evt_recruit) {
|
//进行X次英雄召唤
|
JumpController.getInstance().jumpViewByEvtData([1]);
|
} else if (progressConfig.cli_label == _progress.evt_partner) {
|
//获得1个SS英雄2.获得XX个英雄3.集齐冰雪领域(图书馆XX类型收集)的所有英雄4.获得XX个SS英雄
|
if (extra && Utils.next(extra)) {
|
var extra_type = extra[0];
|
var extra_val = extra[1];
|
JumpController.getInstance().jumpViewByEvtData([2, extra_type, extra_val]);
|
} else {
|
var PartnersummonController = require("partnersummon_controller");
|
|
PartnersummonController.getInstance().openPartnerSummonWindow(true);
|
}
|
} else if (progressConfig.cli_label == _progress.evt_arena_fight || //竞技场挑战X次(无论成败)
|
progressConfig.cli_label == _progress.evt_arena_fight_result || //竞技场挑战胜利X次
|
progressConfig.cli_label == _progress.evt_arena_score || //竞技场
|
progressConfig.cli_label == _progress.evt_arena_rank) {
|
//竞技场排行达到前XX名
|
JumpController.getInstance().jumpViewByEvtData([3]);
|
} else if (progressConfig.cli_label == _progress.evt_friend_present || //向好友赠送
|
progressConfig.cli_label == _progress.evt_friend) {
|
//拥有XX个好友
|
JumpController.getInstance().jumpViewByEvtData([4]);
|
} else if (progressConfig.cli_label == _progress.evt_dungeon_pass) {
|
//通过指定副本id
|
JumpController.getInstance().jumpViewByEvtData([5]);
|
} else if (progressConfig.cli_label == _progress.evt_levup || //人物角色达到XX级
|
progressConfig.cli_label == _progress.evt_get_item || // 获得一个物品
|
progressConfig.cli_label == _progress.evt_dungeon_enter) {
|
//每日挑战X次地下城副本
|
JumpController.getInstance().jumpViewByEvtData([5]);
|
} else if (progressConfig.cli_label == _progress.evt_loss_silver_coin) {
|
//累计消耗xx银币 elseif progressConfig.cli_label == _progress.evt_loss_coin then --累计消耗xx金币,
|
JumpController.getInstance().jumpViewByEvtData([6]);
|
} else if (progressConfig.cli_label == _progress.evt_gain_gold) {
|
//拥有xx蓝钻
|
JumpController.getInstance().jumpViewByEvtData([7]);
|
} else if (progressConfig.cli_label == _progress.evt_eqm_sell) {
|
//装备熔炼
|
JumpController.getInstance().jumpViewByEvtData([8]);
|
} else if (progressConfig.cli_label == _progress.evt_say) {
|
//世界聊天
|
JumpController.getInstance().jumpViewByEvtData([9]);
|
} else if (progressConfig.cli_label == _progress.evt_friend_sns) {
|
//私聊
|
JumpController.getInstance().jumpViewByEvtData([10]);
|
} else if (progressConfig.cli_label == _progress.evt_dungeon_fast_combat) {
|
//快速作战X次
|
JumpController.getInstance().jumpViewByEvtData([11]);
|
} else if (progressConfig.cli_label == _progress.evt_adventure_explore || //探险X间未探索的房间
|
progressConfig.cli_label == _progress.evt_adventure_plunder || //任意掠夺他人X次(无论成败
|
progressConfig.cli_label == _progress.evt_adventure_goto_floor || //进入神界冒险第X层
|
progressConfig.cli_label == _progress.evt_adventure_box || //开启宝箱XX次(宝箱总数)7.宝箱开出X次神器
|
progressConfig.cli_label == _progress.evt_adventure_finger_guessing || //猜拳累计获胜X次8.猜拳累计失败X次
|
progressConfig.cli_label == _progress.evt_adventure_answer_all_right || //智力大乱斗答题全对累计X次
|
progressConfig.cli_label == _progress.evt_adventure_plunder_result || //累计成功掠夺X次
|
progressConfig.cli_label == _progress.evt_adventure_kill_mon) {//累计击败小怪X次
|
} else if (progressConfig.cli_label == _progress.evt_boss_fight || //挑战X次个人BOSS
|
progressConfig.cli_label == _progress.evt_boss_fight_result) {//击败XX级个人BOSS(指定类)
|
} else if (progressConfig.cli_label == _progress.evt_world_boss_fight || //挑战X次世界BOSS3.累计挑战XX次世界BOSS
|
progressConfig.cli_label == _progress.evt_world_boss_fight_ko) {//完成一次任意世界BOSS的击杀(最后一击)
|
} else if (progressConfig.cli_label == _progress.evt_star_tower_pass) {
|
//扫荡或挑战星命塔任意一层X次
|
JumpController.getInstance().jumpViewByEvtData([12]);
|
} else if (progressConfig.cli_label == _progress.evt_guild_dun_fight || //挑战任意公会bossX次
|
progressConfig.cli_label == _progress.evt_guild_dun_fight_ko) {
|
//对公会Boss的最后一击达到x次
|
JumpController.getInstance().jumpViewByEvtData([31]);
|
} else if (progressConfig.cli_label == _progress.evt_guild_donate) {
|
//2.公会任意种类捐献X次3.公会XX类型捐献达到X次4.公会所以类型捐献总共达到XX次
|
JumpController.getInstance().jumpViewByEvtData([13]);
|
} else if (progressConfig.cli_label == _progress.evt_partner_enchant_eqm || //精炼装备X次
|
progressConfig.cli_label == _progress.evt_partner_levelup || //升级英雄X次
|
progressConfig.cli_label == _progress.evt_partner_eqm || //装备X套橙色装备(即武器、衣服、头盔、鞋子都为橙色)
|
progressConfig.cli_label == _progress.evt_partner_artifact || //装备1件神器
|
progressConfig.cli_label == _progress.evt_eqm_compound) {
|
//进阶x装备
|
JumpController.getInstance().jumpViewByEvtData([19]);
|
} else if (progressConfig.cli_label == _progress.evt_star_divination) {
|
//任意进行X次观星(普通观星和皇家观星)
|
AuguryController.getInstance().openMainView(true);
|
} else if (progressConfig.cli_label == _progress.evt_dungeon_auto) {
|
//扫荡剧情副本
|
JumpController.getInstance().jumpViewByEvtData([5]);
|
} else if (progressConfig.cli_label == _progress.evt_guild_join) {
|
//加入一个公会
|
JumpController.getInstance().jumpViewByEvtData([14]);
|
} else if (progressConfig.cli_label == _progress.evt_gain_guild) {
|
//公会贡献达到
|
JumpController.getInstance().jumpViewByEvtData([14]);
|
} else if (progressConfig.cli_label == _progress.evt_loss_guild) {
|
//累计消耗XX贡献点
|
JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.UnionShop]);
|
} else if (progressConfig.cli_label == _progress.evt_power) {
|
//战力达到多少
|
JumpController.getInstance().jumpViewByEvtData([16]);
|
} else if (progressConfig.cli_label == _progress.evt_star_natal || //集齐X套星命3.装备X套紫/红/橙命格
|
progressConfig.cli_label == _progress.evt_star_level_up || //X套星命升到X级
|
progressConfig.cli_label == _progress.evt_star_natal_level_up) {
|
//X个红色命格升星到X星
|
StarlifeController.getInstance().openMainView(true);
|
} else if (progressConfig.cli_label == _progress.evt_formation_open || //已学习的阵法达到X个
|
progressConfig.cli_label == _progress.evt_formation_level_up) {//X个阵法达到X级
|
} else if (progressConfig.cli_label == _progress.evt_dungeon_stone_fight) {
|
//1.参与x次宝石副本2.参与x次圣器副本,
|
JumpController.getInstance().jumpViewByEvtData([17]);
|
} else if (progressConfig.cli_label == _progress.evt_shipping) {
|
//参与远航,
|
JumpController.getInstance().jumpViewByEvtData([18]);
|
} else if (progressConfig.cli_label == _progress.evt_escort_enter || progressConfig.cli_label == _progress.evt_escort_fight) {
|
// 萌兽
|
MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.escort);
|
} else if (progressConfig.cli_label == _progress.evt_endless_fight) {
|
// 无尽试炼
|
JumpController.getInstance().jumpViewByEvtData([43]);
|
} else if (progressConfig.cli_label == _progress.evt_mystery_buy) {
|
// 打开商城
|
var MallController = require("mall_controller");
|
|
if (progressConfig.target == 1) {
|
JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.GodShop]);
|
} else if (progressConfig.target == 2) {
|
JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.Recovery]);
|
} else if (progressConfig.target == 3) {
|
JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.ScoreShop]);
|
} else if (progressConfig.target == 4) {
|
// 杂货店
|
JumpController.getInstance().jumpViewByEvtData([6]);
|
} else {
|
JumpController.getInstance().jumpViewByEvtData([15, MallConst.MallType.Recovery]);
|
}
|
} else if (progressConfig.cli_label == _progress.evt_partner_star) {
|
// 打开英雄主界面升星
|
JumpController.getInstance().jumpViewByEvtData([19]);
|
} else if (progressConfig.cli_label == _progress.evt_hallows_all_step || progressConfig.cli_label == _progress.evt_hallows_step || progressConfig.cli_label == _progress.evt_hallows_activate) {
|
// 打开提升圣器
|
JumpController.getInstance().jumpViewByEvtData([20]);
|
} else if (progressConfig.cli_label == _progress.evt_guild_war) {
|
// 打开公会站
|
JumpController.getInstance().jumpViewByEvtData([21]);
|
} else if (progressConfig.cli_label == _progress.evt_endless_pass) {
|
// 打开无尽之塔
|
Endless_trailController.getInstance().openEndlessMainWindow(true);
|
} else if (progressConfig.cli_label == _progress.evt_partner_decompose) {
|
// 祭祀小屋
|
JumpController.getInstance().jumpViewByEvtData([22]);
|
} else if (progressConfig.cli_label == _progress.evt_partner_star_up) {
|
// 融合祭坛
|
JumpController.getInstance().jumpViewByEvtData([23]);
|
} else if (progressConfig.cli_label == _progress.evt_star_tower_floor_pass) {
|
// 试练塔
|
JumpController.getInstance().jumpViewByEvtData([12]);
|
} else if (progressConfig.cli_label == _progress.evt_recruit_high) {
|
// 先知殿
|
JumpController.getInstance().jumpViewByEvtData([24]);
|
} else if (progressConfig.cli_label == _progress.evt_expedition_fight) {
|
//远征
|
JumpController.getInstance().jumpViewByEvtData([25]);
|
} else if (progressConfig.cli_label == _progress.evt_primus_fight) {
|
//星河
|
JumpController.getInstance().jumpViewByEvtData([27]);
|
} else if (progressConfig.cli_label == _progress.evt_equipment_compound) {
|
//锻造
|
JumpController.getInstance().jumpViewByEvtData([26]);
|
} else if (progressConfig.cli_label == _progress.evt_fragment_synthesis) {
|
//背包碎片页签
|
JumpController.getInstance().jumpViewByEvtData([8, 3]);
|
} else if (progressConfig.cli_label == _progress.evt_dungeon_ext_reward) {
|
//通关奖励
|
JumpController.getInstance().jumpViewByEvtData([46]);
|
} else if (progressConfig.cli_label == _progress.evt_artifact_compose) {
|
//符文锻造
|
JumpController.getInstance().jumpViewByEvtData([26, 2]);
|
}
|
},
|
///---------------------------任务相关 start
|
on10400: function on10400(data) {
|
this.model.addTaskList(data.quest_list, false, true);
|
},
|
on10403: function on10403(data) {
|
this.model.addTaskList(data.quest_list);
|
},
|
on10409: function on10409(data) {
|
this.model.addTaskList(data.quest_list, true);
|
},
|
on10406: function on10406(data) {
|
message(data.msg);
|
if (data.flag == 1) this.model.setTaskCompleted(data.id);
|
},
|
requestSubmitTask: function requestSubmitTask(id) {
|
var protocal = {};
|
protocal.id = id;
|
this.SendProtocal(10406, protocal);
|
},
|
//------------------------任务相关 end
|
//------------------------成就相关 start
|
on16400: function on16400(data) {
|
this.model.addFeatList(data.feat_list, false, true);
|
},
|
on16401: function on16401(data) {
|
this.model.addFeatList(data.feat_list, true);
|
},
|
on16402: function on16402(data) {
|
message(data.msg);
|
|
if (data.code == 1) {
|
this.model.setFeatCompleted(data.id);
|
}
|
},
|
requestSubmitFeat: function requestSubmitFeat(id) {
|
var protocal = {};
|
protocal.id = id;
|
this.SendProtocal(16402, protocal);
|
},
|
//------------------------成就相关 end
|
//------------------------活跃度相关 start
|
requestActivityInfo: function requestActivityInfo() {
|
this.SendProtocal(20300, {});
|
},
|
on20300: function on20300(data) {
|
this.model.updateActivityData(data.activity_box);
|
},
|
requestGetActivityAwards: function requestGetActivityAwards(activity) {
|
var proto = {};
|
proto.activity = activity;
|
this.SendProtocal(20301, proto);
|
},
|
on20301: function on20301(data) {
|
message(data.msg);
|
if (data.code == 1) this.model.updateSingleActivityData(data.activity);
|
},
|
//------------------------活跃度相关 end
|
//-----------------------新主线
|
send30001: function send30001() {
|
this.SendProtocal(30001, {});
|
},
|
on30001: function on30001(data) {
|
cc.log("30001", data);
|
this.model.setMainTaskData(data);
|
},
|
send30002: function send30002(task_id) {
|
var proto = {};
|
proto.id = task_id;
|
this.SendProtocal(30002, proto);
|
},
|
on30002: function on30002(data) {
|
cc.log("3002", data);
|
message(data.msg);
|
|
if (data.code == 1) {}
|
}
|
});
|
module.exports = TaskController;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx0YXNrXFx0YXNrX2NvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiUm9sZUNvbnRyb2xsZXIiLCJyZXF1aXJlIiwiVGFza0NvbnN0IiwiTWFpbnVpQ29uc3QiLCJNYWludWlDb250cm9sbGVyIiwiSnVtcENvbnRyb2xsZXIiLCJUYXNrQ29udHJvbGxlciIsImNjIiwiQ2xhc3MiLCJCYXNlQ29udHJvbGxlciIsImN0b3IiLCJpbml0Q29uZmlnIiwiVGFza01vZGVsIiwibW9kZWwiLCJnZXRNb2RlbCIsInJlZ2lzdGVyRXZlbnRzIiwiaW5pdF9xdWVzdF9ldmVudCIsImdjb3JlIiwiR2xvYmFsRXZlbnQiLCJiaW5kIiwiRXZlbnRJZCIsIkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTIiwidW5iaW5kIiwibm90aWNlX3ZpZXciLCJUYXNrTm90aWNlVmlldyIsIm9wZW4iLCJyb2xlX3ZvIiwiZ2V0SW5zdGFuY2UiLCJnZXRSb2xlVm8iLCJyb2xlX2Fzc2V0c19ldmVudCIsIlVQREFURV9ST0xFX0FUVFJJQlVURSIsImtleSIsInZhbHVlIiwiY2hlY2tRdWVzdEFuZEZlYXRTdGF0dXMiLCJ1cGRhdGVfdHlwZSIsImFjdGl2aXR5IiwicmVfbGlua19nYW1lX2V2ZW50IiwiRVZUX1JFX0xJTktfR0FNRSIsIkd1aWRlQ29udHJvbGxlciIsImlzSW5HdWlkZSIsIm9wZW5UYXNrTWFpbldpbmRvdyIsInJlcXVlc3RCYXNlUXVlc3REYXRhIiwiU2VuZFByb3RvY2FsIiwicmVxdWVzdEFjdGl2aXR5SW5mbyIsInJlZ2lzdGVyUHJvdG9jYWxzIiwiUmVnaXN0ZXJQcm90b2NhbCIsIm9uMTA0MDAiLCJvbjEwNDAzIiwib24xMDQwNiIsIm9uMTA0MDkiLCJvbjE2NDAwIiwib24xNjQwMSIsIm9uMTY0MDIiLCJvbjIwMzAwIiwib24yMDMwMSIsIm9uMzAwMDEiLCJvbjMwMDAyIiwic3RhdHVzIiwiaW5kZXgiLCJ0YXNrX21haW5fd2luZG93IiwiY2xvc2UiLCJUYXNrTWFpbldpbmRvdyIsImhhbmRsZVRhc2tQcm9ncmVzcyIsImRhdGEiLCJvcGVuX3R5cGUiLCJjb25maWciLCJwcm9ncmVzcyIsIlV0aWxzIiwibmV4dCIsImlkIiwibG9nIiwicHJvZ3Jlc3NDb25maWciLCJleHRyYSIsImdvdG9UYWdlcnRGdW4iLCJfcHJvZ3Jlc3MiLCJDb25maWciLCJxdWVzdF9kYXRhIiwiZGF0YV9wcm9ncmVzc19sYWJsZSIsImNsaV9sYWJlbCIsImV2dF9yZWNydWl0IiwianVtcFZpZXdCeUV2dERhdGEiLCJldnRfcGFydG5lciIsImV4dHJhX3R5cGUiLCJleHRyYV92YWwiLCJQYXJ0bmVyc3VtbW9uQ29udHJvbGxlciIsIm9wZW5QYXJ0bmVyU3VtbW9uV2luZG93IiwiZXZ0X2FyZW5hX2ZpZ2h0IiwiZXZ0X2FyZW5hX2ZpZ2h0X3Jlc3VsdCIsImV2dF9hcmVuYV9zY29yZSIsImV2dF9hcmVuYV9yYW5rIiwiZXZ0X2ZyaWVuZF9wcmVzZW50IiwiZXZ0X2ZyaWVuZCIsImV2dF9kdW5nZW9uX3Bhc3MiLCJldnRfbGV2dXAiLCJldnRfZ2V0X2l0ZW0iLCJldnRfZHVuZ2Vvbl9lbnRlciIsImV2dF9sb3NzX3NpbHZlcl9jb2luIiwiZXZ0X2dhaW5fZ29sZCIsImV2dF9lcW1fc2VsbCIsImV2dF9zYXkiLCJldnRfZnJpZW5kX3NucyIsImV2dF9kdW5nZW9uX2Zhc3RfY29tYmF0IiwiZXZ0X2FkdmVudHVyZV9leHBsb3JlIiwiZXZ0X2FkdmVudHVyZV9wbHVuZGVyIiwiZXZ0X2FkdmVudHVyZV9nb3RvX2Zsb29yIiwiZXZ0X2FkdmVudHVyZV9ib3giLCJldnRfYWR2ZW50dXJlX2Zpbmdlcl9ndWVzc2luZyIsImV2dF9hZHZlbnR1cmVfYW5zd2VyX2FsbF9yaWdodCIsImV2dF9hZHZlbnR1cmVfcGx1bmRlcl9yZXN1bHQiLCJldnRfYWR2ZW50dXJlX2tpbGxfbW9uIiwiZXZ0X2Jvc3NfZmlnaHQiLCJldnRfYm9zc19maWdodF9yZXN1bHQiLCJldnRfd29ybGRfYm9zc19maWdodCIsImV2dF93b3JsZF9ib3NzX2ZpZ2h0X2tvIiwiZXZ0X3N0YXJfdG93ZXJfcGFzcyIsImV2dF9ndWlsZF9kdW5fZmlnaHQiLCJldnRfZ3VpbGRfZHVuX2ZpZ2h0X2tvIiwiZXZ0X2d1aWxkX2RvbmF0ZSIsImV2dF9wYXJ0bmVyX2VuY2hhbnRfZXFtIiwiZXZ0X3BhcnRuZXJfbGV2ZWx1cCIsImV2dF9wYXJ0bmVyX2VxbSIsImV2dF9wYXJ0bmVyX2FydGlmYWN0IiwiZXZ0X2VxbV9jb21wb3VuZCIsImV2dF9zdGFyX2RpdmluYXRpb24iLCJBdWd1cnlDb250cm9sbGVyIiwib3Blbk1haW5WaWV3IiwiZXZ0X2R1bmdlb25fYXV0byIsImV2dF9ndWlsZF9qb2luIiwiZXZ0X2dhaW5fZ3VpbGQiLCJldnRfbG9zc19ndWlsZCIsIk1hbGxDb25zdCIsIk1hbGxUeXBlIiwiVW5pb25TaG9wIiwiZXZ0X3Bvd2VyIiwiZXZ0X3N0YXJfbmF0YWwiLCJldnRfc3Rhcl9sZXZlbF91cCIsImV2dF9zdGFyX25hdGFsX2xldmVsX3VwIiwiU3RhcmxpZmVDb250cm9sbGVyIiwiZXZ0X2Zvcm1hdGlvbl9vcGVuIiwiZXZ0X2Zvcm1hdGlvbl9sZXZlbF91cCIsImV2dF9kdW5nZW9uX3N0b25lX2ZpZ2h0IiwiZXZ0X3NoaXBwaW5nIiwiZXZ0X2VzY29ydF9lbnRlciIsImV2dF9lc2NvcnRfZmlnaHQiLCJjaGFuZ2VNYWluVUlTdGF0dXMiLCJidG5faW5kZXgiLCJtYWluX3NjZW5lIiwic3ViX3R5cGUiLCJlc2NvcnQiLCJldnRfZW5kbGVzc19maWdodCIsImV2dF9teXN0ZXJ5X2J1eSIsIk1hbGxDb250cm9sbGVyIiwidGFyZ2V0IiwiR29kU2hvcCIsIlJlY292ZXJ5IiwiU2NvcmVTaG9wIiwiZXZ0X3BhcnRuZXJfc3RhciIsImV2dF9oYWxsb3dzX2FsbF9zdGVwIiwiZXZ0X2hhbGxvd3Nfc3RlcCIsImV2dF9oYWxsb3dzX2FjdGl2YXRlIiwiZXZ0X2d1aWxkX3dhciIsImV2dF9lbmRsZXNzX3Bhc3MiLCJFbmRsZXNzX3RyYWlsQ29udHJvbGxlciIsIm9wZW5FbmRsZXNzTWFpbldpbmRvdyIsImV2dF9wYXJ0bmVyX2RlY29tcG9zZSIsImV2dF9wYXJ0bmVyX3N0YXJfdXAiLCJldnRfc3Rhcl90b3dlcl9mbG9vcl9wYXNzIiwiZXZ0X3JlY3J1aXRfaGlnaCIsImV2dF9leHBlZGl0aW9uX2ZpZ2h0IiwiZXZ0X3ByaW11c19maWdodCIsImV2dF9lcXVpcG1lbnRfY29tcG91bmQiLCJldnRfZnJhZ21lbnRfc3ludGhlc2lzIiwiZXZ0X2R1bmdlb25fZXh0X3Jld2FyZCIsImV2dF9hcnRpZmFjdF9jb21wb3NlIiwiYWRkVGFza0xpc3QiLCJxdWVzdF9saXN0IiwibWVzc2FnZSIsIm1zZyIsImZsYWciLCJzZXRUYXNrQ29tcGxldGVkIiwicmVxdWVzdFN1Ym1pdFRhc2siLCJwcm90b2NhbCIsImFkZEZlYXRMaXN0IiwiZmVhdF9saXN0IiwiY29kZSIsInNldEZlYXRDb21wbGV0ZWQiLCJyZXF1ZXN0U3VibWl0RmVhdCIsInVwZGF0ZUFjdGl2aXR5RGF0YSIsImFjdGl2aXR5X2JveCIsInJlcXVlc3RHZXRBY3Rpdml0eUF3YXJkcyIsInByb3RvIiwidXBkYXRlU2luZ2xlQWN0aXZpdHlEYXRhIiwic2VuZDMwMDAxIiwic2V0TWFpblRhc2tEYXRhIiwic2VuZDMwMDAyIiwidGFza19pZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsY0FBYyxHQUFHQyxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUMsU0FBUyxHQUFHRCxPQUFPLENBQUMsWUFBRCxDQUF2Qjs7QUFDQSxJQUFJRSxXQUFXLEdBQUdGLE9BQU8sQ0FBQyxjQUFELENBQXpCOztBQUNBLElBQUlHLGdCQUFnQixHQUFHSCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUksY0FBYyxHQUFHSixPQUFPLENBQUMsaUJBQUQsQ0FB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LElBQUwsSUFBYSxDQUFqQixFQUFvQixDQUVuQjtBQUNKO0FBcFh5QixDQUFULENBQXJCO0FBdVhBWSxNQUFNLENBQUNDLE9BQVAsR0FBaUIvTCxjQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDku7vliqHvvIzml6XluLjvvIzmiJDlsLFcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTAxLTA5IDExOjI2OjEwXG4vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcbnZhciBUYXNrQ29uc3QgPSByZXF1aXJlKFwidGFza19jb25zdFwiKTtcbnZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG52YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcbnZhciBKdW1wQ29udHJvbGxlciA9IHJlcXVpcmUoXCJqdW1wX2NvbnRyb2xsZXJcIik7XG5cbnZhciBUYXNrQ29udHJvbGxlciA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ29udHJvbGxlcixcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMlumFjee9ruaVsOaNrlxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIFRhc2tNb2RlbCA9IHJlcXVpcmUoXCJ0YXNrX21vZGVsXCIpO1xuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IFRhc2tNb2RlbCh0aGlzKTtcbiAgICAgICAgdGhpcy5tb2RlbC5pbml0Q29uZmlnKCk7XG4gICAgfSxcblxuICAgIC8vIOi/lOWbnuW9k+WJjeeahG1vZGVsXG4gICAgZ2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOebkeWQrOS6i+S7tlxuICAgIHJlZ2lzdGVyRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRfcXVlc3RfZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pbml0X3F1ZXN0X2V2ZW50ID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChFdmVudElkLkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQudW5iaW5kKHRoaXMuaW5pdF9xdWVzdF9ldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0X3F1ZXN0X2V2ZW50ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5vdGljZV92aWV3ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFRhc2tOb3RpY2VWaWV3ID0gcmVxdWlyZShcInRhc2tfbm90aWNlX3ZpZXdcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWNlX3ZpZXcgPSBuZXcgVGFza05vdGljZVZpZXcoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpY2Vfdmlldy5vcGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy/op5LoibLmm7TmlrDkuYvlkI7or7fmsYIz5p2h5Lu75Yqh55u45YWz5pWw5o2uXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5yZXF1ZXN0QmFzZVF1ZXN0RGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb2xlX2Fzc2V0c19ldmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gXCJhY3Rpdml0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuY2hlY2tRdWVzdEFuZEZlYXRTdGF0dXMoVGFza0NvbnN0LnVwZGF0ZV90eXBlLmFjdGl2aXR5KTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKHRoaXMucmVfbGlua19nYW1lX2V2ZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMucmVfbGlua19nYW1lX2V2ZW50ID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChFdmVudElkLkVWVF9SRV9MSU5LX0dBTUUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgR3VpZGVDb250cm9sbGVyID0gcmVxdWlyZShcImd1aWRlX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCFHdWlkZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5pc0luR3VpZGUoKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuVGFza01haW5XaW5kb3coZmFsc2UpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMucmVxdWVzdEJhc2VRdWVzdERhdGEoKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZXF1ZXN0QmFzZVF1ZXN0RGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMDQwMCwge30pOyAgICAgICAgICAgICAgICAvL+ivt+axguaJgOacieS7u+WKoeWIl+ihqFxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjQwMCwge30pOyAgICAgICAgICAgICAgICAvL+ivt+axguW9k+WJjeaJgOacieeahOaIkOWwseWIl+ihqFxuICAgICAgICB0aGlzLnJlcXVlc3RBY3Rpdml0eUluZm8oKTsgICAgICAgICAgICAgICAgLy/or7fmsYLmtLvot4PluqZcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5Y2P6K6u5o6l5Y+X5LqL5Lu2XG4gICAgcmVnaXN0ZXJQcm90b2NhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwNDAwLCB0aGlzLm9uMTA0MDApOyAgICAgICAgIC8v5YWo6YOo5Lu75Yqh5YiX6KGoXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMDQwMywgdGhpcy5vbjEwNDAzKSAgICAgICAgICAgICAvL+WinuWKoOW3suaOpeS7u+WKoVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTA0MDYsIHRoaXMub24xMDQwNikgICAgICAgICAgICAgLy/mj5DkuqTku7vliqHov5Tlm57vvIzlrqLmiLfnq6/oh6rlt7Hmm7TmlrDlhoXlrZjnvJPlrZjmlbDmja5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwNDA5LCB0aGlzLm9uMTA0MDkpICAgICAgICAgICAgIC8v5pu05paw5bey5o6l5Lu75Yqh6L+b5bqmXG5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDE2NDAwLCB0aGlzLm9uMTY0MDApICAgICAgICAgICAgIC8v5YWo6YOo5oiQ5bCx5YiX6KGoXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjQwMSwgdGhpcy5vbjE2NDAxKSAgICAgICAgICAgICAvL+abtOaWsOaIkOWwsei/m+W6pu+8jOS5n+WPr+iDveaYr+aWsOWinuaIkOWwsVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY0MDIsIHRoaXMub24xNjQwMikgICAgICAgICAgICAgLy/mj5DkuqTmiJDlsLHov5Tlm55cblxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjAzMDAsIHRoaXMub24yMDMwMCkgICAgICAgICAgICAgLy/lt7Lpooblj5bnmoTmtLvot4Plrp3nrrFcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIwMzAxLCB0aGlzLm9uMjAzMDEpICAgICAgICAgICAgIC8v6K+35rGC6aKG5Y+W5rS76LeD5a6d566xXG5cbiAgICAgICAgLy/mlrDkuLvnur9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDMwMDAxLCB0aGlzLm9uMzAwMDEpICAgICAgICAgICAgIC8v6L+b5bqm5pu05paw5pe26L+U5ZueXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgzMDAwMiwgdGhpcy5vbjMwMDAyKSAgICAgICAgICAgICAvL+aPkOS6pOS7u+WKoei/lOWbnlxuICAgIH0sXG5cbiAgICAvLyBAZGVzYzrmiZPlvIDml6XluLjku7vliqHkuLvnlYzpnaJcbiAgICAvLyBhdXRob3I6e2F1dGhvcn1cbiAgICAvLyB0aW1lOjIwMTgtMDUtMjIgMTE6MzI6MzVcbiAgICAvLyAvL0BzdGF0dXM65omT5byA5oiW6ICF5YWz6ZetXG4gICAgLy8gLy9AaW5kZXg66Ieq5Yqo6Lez6L2s5YiwXG4gICAgLy8gcmV0dXJuXG4gICAgb3BlblRhc2tNYWluV2luZG93OiBmdW5jdGlvbiAoc3RhdHVzLCBpbmRleCkge1xuICAgICAgICBpZiAoc3RhdHVzID09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50YXNrX21haW5fd2luZG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tfbWFpbl93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tfbWFpbl93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudGFza19tYWluX3dpbmRvdyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIFRhc2tNYWluV2luZG93ID0gcmVxdWlyZShcInRhc2tfbWFpbl93aW5kb3dcIik7XG4gICAgICAgICAgICAgICAgdGhpcy50YXNrX21haW5fd2luZG93ID0gbmV3IFRhc2tNYWluV2luZG93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiAodGhpcy50YXNrX21haW5fd2luZG93LmlzT3BlbigpID09IGZhbHNlKVxuICAgICAgICAgICAgLy8gICAgIHRoaXMudGFza19tYWluX3dpbmRvdy5vcGVuKGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudGFza19tYWluX3dpbmRvdy5vcGVuKGluZGV4KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAZGVzYzrngrnlh7vku7vliqHliY3lvoBcbiAgICAvLyBhdXRob3I6e2F1dGhvcn1cbiAgICAvLyB0aW1lOjIwMTgtMDUtMjIgMjE6MDA6MjZcbiAgICAvLyAvL0BkYXRhOlxuICAgIC8vIC8vQGluZGV4OlxuICAgIC8vIC8vQG9wZW5fdHlwZTogXG4gICAgLy8gcmV0dXJuXG4gICAgaGFuZGxlVGFza1Byb2dyZXNzOiBmdW5jdGlvbiAoZGF0YSwgaW5kZXgsIG9wZW5fdHlwZSkge1xuICAgICAgICBpbmRleCA9IGluZGV4IHx8IDE7XG4gICAgICAgIGlmIChkYXRhLmNvbmZpZy5wcm9ncmVzcyA9PSBudWxsIHx8IFV0aWxzLm5leHQoZGF0YS5jb25maWcucHJvZ3Jlc3MpID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmlkICE9IG51bGwpXG4gICAgICAgICAgICAgICAgY2MubG9nKFwiPT09PT09PT09PT09PT09PT0+IOWkhOeQhuS7u+WKoei/m+W6puaXtuWHuumUmSzku7vliqFpZOS4uiBcIiArIGRhdGEuaWQgKyBcIiDnmoTmsqHmnInphY3nva7ku7vliqHov5vluqZcIik7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJvZ3Jlc3NDb25maWcgPSBkYXRhLmNvbmZpZy5wcm9ncmVzc1tpbmRleF07XG4gICAgICAgIGlmIChwcm9ncmVzc0NvbmZpZyA9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5pZCAhPSBudWxsKVxuICAgICAgICAgICAgICAgIGNjLmxvZyhcIj09PT09PT09PT09PT09PT09PiDlpITnkIbku7vliqFpZOS4uiBcIiArIGRhdGEuaWQgKyBcIiDnmoTnrKwgXCIgKyBpbmRleCArIFwiIOS4qui/m+W6puimgeaxguaXtuWHuumUmVwiKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy/mi5PlsZXlj4LmlbDnlKjkuo7ot7PovaxcbiAgICAgICAgdmFyIGV4dHJhID0gZGF0YS5jb25maWcuZXh0cmE7XG4gICAgICAgIHRoaXMuZ290b1RhZ2VydEZ1bihwcm9ncmVzc0NvbmZpZywgZXh0cmEsIG9wZW5fdHlwZSk7XG4gICAgfSxcblxuICAgIC8vZGVzYzrku7vliqHlkozmiJDlsLHnmoTot7PovaxcbiAgICAvL3RpbWU6MjAxOC0wNy0wNyAwMzo1Nzo1OVxuICAgIC8vQHByb2dyZXNzQ29uZmlnOlxuICAgIC8vQGV4dHJhOlxuICAgIC8vQG9wZW5fdHlwZTpcbiAgICAvL0ByZXR1cm4gXG4gICAgZ290b1RhZ2VydEZ1bjogZnVuY3Rpb24gKHByb2dyZXNzQ29uZmlnLCBleHRyYSwgb3Blbl90eXBlKSB7XG4gICAgICAgIC8vIHRoaXMub3BlblRhc2tNYWluV2luZG93KGZhbHNlKVxuICAgICAgICBpZiAocHJvZ3Jlc3NDb25maWcgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB2YXIgX3Byb2dyZXNzID0gQ29uZmlnLnF1ZXN0X2RhdGEuZGF0YV9wcm9ncmVzc19sYWJsZTtcblxuICAgICAgICBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcmVjcnVpdCkgeyAgLy/ov5vooYxY5qyh6Iux6ZuE5Y+s5ZSkXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcGFydG5lcikgeyAgICAgICAvL+iOt+W+lzHkuKpTU+iLsembhDIu6I635b6XWFjkuKroi7Hpm4QzLumbhum9kOWGsOmbqumihuWfn++8iOWbvuS5pummhlhY57G75Z6L5pS26ZuG77yJ55qE5omA5pyJ6Iux6ZuENC7ojrflvpdYWOS4qlNT6Iux6ZuEXG4gICAgICAgICAgICBpZiAoZXh0cmEgJiYgVXRpbHMubmV4dChleHRyYSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFfdHlwZSA9IGV4dHJhWzBdO1xuICAgICAgICAgICAgICAgIHZhciBleHRyYV92YWwgPSBleHRyYVsxXTtcbiAgICAgICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsyLCBleHRyYV90eXBlLCBleHRyYV92YWxdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIFBhcnRuZXJzdW1tb25Db250cm9sbGVyID0gcmVxdWlyZShcInBhcnRuZXJzdW1tb25fY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgICAgICBQYXJ0bmVyc3VtbW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5QYXJ0bmVyU3VtbW9uV2luZG93KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2FyZW5hX2ZpZ2h0IHx8ICAgICAgICAgLy/nq57mioDlnLrmjJHmiJhY5qyh77yI5peg6K665oiQ6LSl77yJXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hcmVuYV9maWdodF9yZXN1bHQgfHwgICAgICAgICAvL+ernuaKgOWcuuaMkeaImOiDnOWIqVjmrKFcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2FyZW5hX3Njb3JlIHx8ICAgICAgICAgICAgICAgIC8v56ue5oqA5Zy6XG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hcmVuYV9yYW5rKSB7ICAgICAgICAgICAgICAgICAvL+ernuaKgOWcuuaOkuihjOi+vuWIsOWJjVhY5ZCNXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFszXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZnJpZW5kX3ByZXNlbnQgfHwgLy/lkJHlpb3lj4votaDpgIFcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2ZyaWVuZCkgeyAvL+aLpeaciVhY5Liq5aW95Y+LXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFs0XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZHVuZ2Vvbl9wYXNzKSB7IC8v6YCa6L+H5oyH5a6a5Ymv5pysaWRcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzVdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9sZXZ1cCB8fCAgIC8v5Lq654mp6KeS6Imy6L6+5YiwWFjnuqdcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2dldF9pdGVtIHx8ICAgLy8g6I635b6X5LiA5Liq54mp5ZOBXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9kdW5nZW9uX2VudGVyKSB7IC8v5q+P5pel5oyR5oiYWOasoeWcsOS4i+WfjuWJr+acrFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2xvc3Nfc2lsdmVyX2NvaW4pIHsvL+e0r+iuoea2iOiAl3h46ZO25biBICAgIGVsc2VpZiBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9sb3NzX2NvaW4gdGhlbiAtLee0r+iuoea2iOiAl3h46YeR5biBLFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2dhaW5fZ29sZCkgeyAvL+aLpeaciXh46JOd6ZK7XG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFs3XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZXFtX3NlbGwpIHsgLy/oo4XlpIfnhpTngrxcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzhdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9zYXkpIHsgLy/kuJbnlYzogYrlpKlcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzldKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9mcmllbmRfc25zKSB7IC8v56eB6IGKXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxMF0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2R1bmdlb25fZmFzdF9jb21iYXQpIHsgLy/lv6vpgJ/kvZzmiJhY5qyhXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2FkdmVudHVyZV9leHBsb3JlIHx8IC8v5o6i6ZmpWOmXtOacquaOoue0oueahOaIv+mXtFxuICAgICAgICAgICAgcHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfYWR2ZW50dXJlX3BsdW5kZXIgfHwgLy/ku7vmhI/mjqDlpLrku5bkurpY5qyh77yI5peg6K665oiQ6LSlXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hZHZlbnR1cmVfZ290b19mbG9vciB8fCAvL+i/m+WFpeelnueVjOWGkumZqeesrFjlsYJcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2FkdmVudHVyZV9ib3ggfHwgLy/lvIDlkK/lrp3nrrFYWOasoSjlrp3nrrHmgLvmlbApNy7lrp3nrrHlvIDlh7pY5qyh56We5ZmoXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hZHZlbnR1cmVfZmluZ2VyX2d1ZXNzaW5nIHx8IC8v54yc5ouz57Sv6K6h6I636IOcWOasoTgu54yc5ouz57Sv6K6h5aSx6LSlWOasoVxuICAgICAgICAgICAgcHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfYWR2ZW50dXJlX2Fuc3dlcl9hbGxfcmlnaHQgfHwgLy/mmbrlipvlpKfkubHmlpfnrZTpopjlhajlr7nntK/orqFY5qyhXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hZHZlbnR1cmVfcGx1bmRlcl9yZXN1bHQgfHwgLy/ntK/orqHmiJDlip/mjqDlpLpY5qyhXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hZHZlbnR1cmVfa2lsbF9tb24pIHsgLy/ntK/orqHlh7votKXlsI/mgKpY5qyhXG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfYm9zc19maWdodCB8fCAvL+aMkeaImFjmrKHkuKrkurpCT1NTXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9ib3NzX2ZpZ2h0X3Jlc3VsdCkgeyAvL+WHu+i0pVhY57qn5Liq5Lq6Qk9TU++8iOaMh+WumuexuylcblxuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X3dvcmxkX2Jvc3NfZmlnaHQgfHwgLy/mjJHmiJhY5qyh5LiW55WMQk9TUzMu57Sv6K6h5oyR5oiYWFjmrKHkuJbnlYxCT1NTXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF93b3JsZF9ib3NzX2ZpZ2h0X2tvKSB7ICAgLy/lrozmiJDkuIDmrKHku7vmhI/kuJbnlYxCT1NT55qE5Ye75p2A77yI5pyA5ZCO5LiA5Ye777yJXG5cbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9zdGFyX3Rvd2VyX3Bhc3MpIHsgLy/miavojaHmiJbmjJHmiJjmmJ/lkb3loZTku7vmhI/kuIDlsYJY5qyhXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxMl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2d1aWxkX2R1bl9maWdodCB8fCAvL+aMkeaImOS7u+aEj+WFrOS8mmJvc3NY5qyhXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9ndWlsZF9kdW5fZmlnaHRfa28pIHsgLy/lr7nlhazkvJpCb3Nz55qE5pyA5ZCO5LiA5Ye76L6+5YiweOasoVxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMzFdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9ndWlsZF9kb25hdGUpIHsgLy8yLuWFrOS8muS7u+aEj+enjeexu+aNkOeMrljmrKEzLuWFrOS8mlhY57G75Z6L5o2Q54yu6L6+5YiwWOasoTQu5YWs5Lya5omA5Lul57G75Z6L5o2Q54yu5oC75YWx6L6+5YiwWFjmrKFcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzEzXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcGFydG5lcl9lbmNoYW50X2VxbSB8fCAvL+eyvueCvOijheWkh1jmrKFcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X3BhcnRuZXJfbGV2ZWx1cCB8fCAvL+WNh+e6p+iLsembhFjmrKFcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X3BhcnRuZXJfZXFtIHx8IC8v6KOF5aSHWOWll+apmeiJsuijheWkh++8iOWNs+atpuWZqOOAgeiho+acjeOAgeWktOeblOOAgemei+WtkOmDveS4uuapmeiJsu+8iVxuICAgICAgICAgICAgcHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcGFydG5lcl9hcnRpZmFjdCB8fCAvL+ijheWkhzHku7bnpZ7lmahcbiAgICAgICAgICAgIHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2VxbV9jb21wb3VuZCkgeyAvL+i/m+mYtnjoo4XlpIdcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE5XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfc3Rhcl9kaXZpbmF0aW9uKSB7IC8v5Lu75oSP6L+b6KGMWOasoeinguaYn++8iOaZrumAmuinguaYn+WSjOeah+WutuinguaYn++8iVxuICAgICAgICAgICAgQXVndXJ5Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5NYWluVmlldyh0cnVlKVxuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2R1bmdlb25fYXV0bykgeyAvL+aJq+iNoeWJp+aDheWJr+acrFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2d1aWxkX2pvaW4pIHsgLy/liqDlhaXkuIDkuKrlhazkvJpcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE0XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZ2Fpbl9ndWlsZCkgeyAvL+WFrOS8mui0oeeMrui+vuWIsFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTRdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9sb3NzX2d1aWxkKSB7IC8v57Sv6K6h5raI6ICXWFjotKHnjK7ngrlcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE1LCBNYWxsQ29uc3QuTWFsbFR5cGUuVW5pb25TaG9wXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcG93ZXIpIHsgLy/miJjlipvovr7liLDlpJrlsJFcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE2XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfc3Rhcl9uYXRhbCB8fCAvL+mbhum9kFjlpZfmmJ/lkb0zLuijheWkh1jlpZfntKsv57qiL+apmeWRveagvFxuICAgICAgICAgICAgcHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfc3Rhcl9sZXZlbF91cCB8fCAvL1jlpZfmmJ/lkb3ljYfliLBY57qnXG4gICAgICAgICAgICBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9zdGFyX25hdGFsX2xldmVsX3VwKSB7IC8vWOS4que6ouiJsuWRveagvOWNh+aYn+WIsFjmmJ9cbiAgICAgICAgICAgIFN0YXJsaWZlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5NYWluVmlldyh0cnVlKVxuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2Zvcm1hdGlvbl9vcGVuIHx8IC8v5bey5a2m5Lmg55qE6Zi15rOV6L6+5YiwWOS4qlxuICAgICAgICAgICAgcHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZm9ybWF0aW9uX2xldmVsX3VwKSB7IC8vWOS4qumYteazlei+vuWIsFjnuqdcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9kdW5nZW9uX3N0b25lX2ZpZ2h0KSB7IC8vMS7lj4LkuI545qyh5a6d55+z5Ymv5pysMi7lj4LkuI545qyh5Zyj5Zmo5Ymv5pysLFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTddKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9zaGlwcGluZykgeyAvL+WPguS4jui/nOiIqixcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzE4XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZXNjb3J0X2VudGVyIHx8IHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2VzY29ydF9maWdodCkgeyAvLyDokIzlhb1cbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lm1haW5fc2NlbmUsIE1haW51aUNvbnN0LnN1Yl90eXBlLmVzY29ydClcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9lbmRsZXNzX2ZpZ2h0KSB7IC8vIOaXoOWwveivleeCvFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNDNdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9teXN0ZXJ5X2J1eSkgeyAvLyDmiZPlvIDllYbln45cbiAgICAgICAgICAgIHZhciBNYWxsQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWxsX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NDb25maWcudGFyZ2V0ID09IDEpIHtcbiAgICAgICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxNSwgTWFsbENvbnN0Lk1hbGxUeXBlLkdvZFNob3BdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcudGFyZ2V0ID09IDIpIHtcbiAgICAgICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxNSwgTWFsbENvbnN0Lk1hbGxUeXBlLlJlY292ZXJ5XSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLnRhcmdldCA9PSAzKSB7XG4gICAgICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTUsIE1hbGxDb25zdC5NYWxsVHlwZS5TY29yZVNob3BdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcudGFyZ2V0ID09IDQpIHsgLy8g5p2C6LSn5bqXXG4gICAgICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNl0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsxNSwgTWFsbENvbnN0Lk1hbGxUeXBlLlJlY292ZXJ5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcGFydG5lcl9zdGFyKSB7IC8vIOaJk+W8gOiLsembhOS4u+eVjOmdouWNh+aYn1xuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTldKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9oYWxsb3dzX2FsbF9zdGVwIHx8IHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2hhbGxvd3Nfc3RlcCB8fCBwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9oYWxsb3dzX2FjdGl2YXRlKSB7IC8vIOaJk+W8gOaPkOWNh+Wco+WZqFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9ndWlsZF93YXIpIHsgLy8g5omT5byA5YWs5Lya56uZXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsyMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X2VuZGxlc3NfcGFzcykgeyAvLyDmiZPlvIDml6DlsL3kuYvloZRcbiAgICAgICAgICAgIEVuZGxlc3NfdHJhaWxDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkVuZGxlc3NNYWluV2luZG93KHRydWUpXG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcGFydG5lcl9kZWNvbXBvc2UpIHsgLy8g56Wt56WA5bCP5bGLXG4gICAgICAgICAgICBKdW1wQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmp1bXBWaWV3QnlFdnREYXRhKFsyMl0pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2dyZXNzQ29uZmlnLmNsaV9sYWJlbCA9PSBfcHJvZ3Jlc3MuZXZ0X3BhcnRuZXJfc3Rhcl91cCkgeyAvLyDono3lkIjnpa3lnZtcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzIzXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfc3Rhcl90b3dlcl9mbG9vcl9wYXNzKSB7IC8vIOivlee7g+WhlFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMTJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9yZWNydWl0X2hpZ2gpIHsgLy8g5YWI55+l5q6/IFxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbMjRdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9leHBlZGl0aW9uX2ZpZ2h0KSB7Ly/ov5zlvoFcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzI1XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfcHJpbXVzX2ZpZ2h0KSB7Ly/mmJ/msrNcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzI3XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZXF1aXBtZW50X2NvbXBvdW5kKSB7Ly/plLvpgKBcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzI2XSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3NDb25maWcuY2xpX2xhYmVsID09IF9wcm9ncmVzcy5ldnRfZnJhZ21lbnRfc3ludGhlc2lzKSB7Ly/og4zljIXnoo7niYfpobXnrb5cbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzgsIDNdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9kdW5nZW9uX2V4dF9yZXdhcmQpIHsvL+mAmuWFs+WlluWKsVxuICAgICAgICAgICAgSnVtcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5qdW1wVmlld0J5RXZ0RGF0YShbNDZdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9ncmVzc0NvbmZpZy5jbGlfbGFiZWwgPT0gX3Byb2dyZXNzLmV2dF9hcnRpZmFjdF9jb21wb3NlKSB7Ly/nrKbmlofplLvpgKBcbiAgICAgICAgICAgIEp1bXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkuanVtcFZpZXdCeUV2dERhdGEoWzI2LDJdKTtcbiAgICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLeS7u+WKoeebuOWFsyBzdGFydFxuICAgIG9uMTA0MDA6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwuYWRkVGFza0xpc3QoZGF0YS5xdWVzdF9saXN0LCBmYWxzZSwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIG9uMTA0MDM6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwuYWRkVGFza0xpc3QoZGF0YS5xdWVzdF9saXN0KTtcbiAgICB9LFxuXG4gICAgb24xMDQwOTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGRUYXNrTGlzdChkYXRhLnF1ZXN0X2xpc3QsIHRydWUpO1xuICAgIH0sXG5cbiAgICBvbjEwNDA2OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuZmxhZyA9PSAxKVxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRUYXNrQ29tcGxldGVkKGRhdGEuaWQpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0U3VibWl0VGFzazogZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5pZCA9IGlkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMDQwNiwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLeS7u+WKoeebuOWFsyBlbmRcblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t5oiQ5bCx55u45YWzIHN0YXJ0XG4gICAgb24xNjQwMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGRGZWF0TGlzdChkYXRhLmZlYXRfbGlzdCwgZmFsc2UsIHRydWUpO1xuICAgIH0sXG4gICAgb24xNjQwMTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGRGZWF0TGlzdChkYXRhLmZlYXRfbGlzdCwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIG9uMTY0MDI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICBpZiAoZGF0YS5jb2RlID09IDEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0RmVhdENvbXBsZXRlZChkYXRhLmlkKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZXF1ZXN0U3VibWl0RmVhdDogZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5pZCA9IGlkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjQwMiwgcHJvdG9jYWwpO1xuICAgIH0sXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS3miJDlsLHnm7jlhbMgZW5kXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLea0u+i3g+W6puebuOWFsyBzdGFydFxuICAgIHJlcXVlc3RBY3Rpdml0eUluZm86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjAzMDAsIHt9KTtcbiAgICB9LFxuXG4gICAgb24yMDMwMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC51cGRhdGVBY3Rpdml0eURhdGEoZGF0YS5hY3Rpdml0eV9ib3gpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0R2V0QWN0aXZpdHlBd2FyZHM6IGZ1bmN0aW9uIChhY3Rpdml0eSkge1xuICAgICAgICB2YXIgcHJvdG8gPSB7fVxuICAgICAgICBwcm90by5hY3Rpdml0eSA9IGFjdGl2aXR5XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIwMzAxLCBwcm90byk7XG4gICAgfSxcblxuICAgIG9uMjAzMDE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICBpZiAoZGF0YS5jb2RlID09IDEpXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnVwZGF0ZVNpbmdsZUFjdGl2aXR5RGF0YShkYXRhLmFjdGl2aXR5KTtcbiAgICB9LFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t5rS76LeD5bqm55u45YWzIGVuZFxuXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t5paw5Li757q/IFxuXG4gICAgc2VuZDMwMDAxOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDMwMDAxLCB7fSk7XG4gICAgfSxcblxuICAgIG9uMzAwMDE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGNjLmxvZyhcIjMwMDAxXCIsIGRhdGEpO1xuICAgICAgICB0aGlzLm1vZGVsLnNldE1haW5UYXNrRGF0YShkYXRhKTtcbiAgICB9LFxuXG4gICAgc2VuZDMwMDAyOiBmdW5jdGlvbiAodGFza19pZCkge1xuICAgICAgICBsZXQgcHJvdG8gPSB7fTtcbiAgICAgICAgcHJvdG8uaWQgPSB0YXNrX2lkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgzMDAwMiwgcHJvdG8pO1xuICAgIH0sXG5cbiAgICBvbjMwMDAyOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBjYy5sb2coXCIzMDAyXCIsIGRhdGEpO1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKSB7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRhc2tDb250cm9sbGVyOyJdfQ==
|