(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/partnersummon/view/partnersummon_item.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, '76fa1lOvMxNcJfkOOcmVqR2', 'partnersummon_item'); // Scripts/mod/partnersummon/view/partnersummon_item.js "use strict"; var _properties; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里是描述这个窗体的作用的 //
Create: 2019-01-14 09:29:03 // -------------------------------------------------------------------- var PathTool = require("pathtool"); var PartnersummonConst = require("partnersummon_const"); var GuideEvent = require("guide_event"); var PartnersummonEvent = require("partnersummon_event"); var PartnersSummonItem = cc.Class({ "extends": ViewClass, properties: (_properties = { summon_data: null, parent: null }, _defineProperty(_properties, "summon_data", null), _defineProperty(_properties, "sprite_frmas", null), _defineProperty(_properties, "height", 228), _defineProperty(_properties, "recruit_once_staus", null), _defineProperty(_properties, "recruit_more_staus", null), _defineProperty(_properties, "item_enough", false), _defineProperty(_properties, "cur_timer", null), _defineProperty(_properties, "final_once_use_item", null), _defineProperty(_properties, "final_once_use_num", null), _defineProperty(_properties, "final_more_use_item", null), _defineProperty(_properties, "final_more_use_num", null), _properties), ctor: function ctor() { this.parent = arguments[0]; this.index = arguments[1]; this.recruit_cb = arguments[2]; var PartnersummonController = require("partnersummon_controller"); this.ctrl = PartnersummonController.getInstance(); this.rleasePrefab = false; this.prefabPath = PathTool.getPrefabPath("partnersummon", "partnersummon_item"); this.initConfig(); this.registerEvent(); this.initWindRoot(); }, initConfig: function initConfig() { var RoleController = require("role_controller"); this.role_vo = RoleController.getInstance().getRoleVo(); var BackPackController = require("backpack_controller"); this.backpack_ctrl = BackPackController.getInstance(); this.backpack_model = BackPackController.getInstance().getModel(); }, initWindRoot: function initWindRoot() { LoaderManager.getInstance().loadRes(this.prefabPath, function (res_object) { this.root_wnd = res_object; this.root_wnd.y = -this.index * this.height; this.parent.addChild(this.root_wnd); this.initWidget(); }.bind(this)); }, registerEvent: function registerEvent() { // 道具数量更新 this.addGlobalEvent(EventId.ADD_GOODS, function (bag_code, item_list) { if (this.summon_data.group_id != PartnersummonConst.Summon_Type.Friend) this.updateWidgets(); }.bind(this)); this.addGlobalEvent(EventId.DELETE_GOODS, function (bag_code, item_list) { if (this.summon_data.group_id != PartnersummonConst.Summon_Type.Friend) this.updateWidgets(); }.bind(this)); this.addGlobalEvent(EventId.MODIFY_GOODS_NUM, function (bag_code, item_list) { if (this.summon_data.group_id != PartnersummonConst.Summon_Type.Friend) this.updateWidgets(); }.bind(this)); // 友情点数更新 if (this.role_vo && !this.role_vo_friend) { this.role_vo_friend = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) { if (key == "friend_point" && this.summon_data.group_id == PartnersummonConst.Summon_Type.Friend) this.updateWidgets(); }.bind(this)); } if (this.five_star_event == null) { this.five_star_event = gcore.GlobalEvent.bind(PartnersummonEvent.PartnerSummonFiveStar, function (data) { if (this.summon_data.group_id == PartnersummonConst.Summon_Type.Advanced && this.desc_lb) { if (data && data.need_times > 0) { if (PLATFORM_TYPR == "QQ_SDK" || PLATFORM_TYPR == "SH_SDK" || PLATFORM_TYPR == "WX_SDK") { this.desc_lb.string = Utils.TI18N(" 次内召唤必得 星英雄"); } else { this.desc_lb.string = Utils.TI18N(" 次内召唤必得 星英雄"); } this.updateFiveStarSp(data.need_times); } else { this.desc_lb.string = Utils.TI18N("随机召唤1个或10个3~5星英雄"); this.desc_lb.node.y = -84; if (this.five_nd.active == true) this.five_nd.active = false; if (this.five_star_event) { gcore.GlobalEvent.unbind(this.five_star_event); this.five_star_event = null; } } } }.bind(this)); } }, initWidget: function initWidget() { this.item_bg_sp = this.seekChild("item_bg", cc.Sprite); // 物品数量 this.good_bg_sp = this.seekChild("good_bg", cc.Sprite); this.good_sp = this.seekChild("good", cc.Sprite); this.good_num_lb = this.seekChild("good_num_label", cc.Label); // 召募一次 this.recruit_btn_one_nd = this.seekChild("recruit_btn_one"); this.recruit_btn_one_nd.tag_1 = 1; this.l_item_icon_nd = this.seekChild("l_item_icon"); this.l_item_icon_sp = this.seekChild("l_item_icon", cc.Sprite); this.l_item_num_lb = this.seekChild("l_item_num", cc.Label); this.l_free_recruit_nd = this.seekChild("l_free_recruit"); this.l_item_recruit_nd = this.seekChild("l_item_recruit"); // 召募十次 this.recruit_but_ten_nd = this.seekChild("recruit_but_ten"); this.recruit_but_ten_nd.tag_1 = 2; this.r_item_icon_nd = this.seekChild("r_item_icon"); this.r_item_icon_sp = this.seekChild("r_item_icon", cc.Sprite); this.r_item_num_lb = this.seekChild("r_item_num", cc.Label); //下次免费时间 this.next_free_time_nd = this.seekChild("next_free_time"); this.next_free_time_rt = this.seekChild("next_free_time", cc.RichText); this.discount_nd = this.seekChild("discount"); this.desc_lb = this.seekChild("desc_lb", cc.Label); this.desc_lo = this.seekChild("desc_lb", cc.LabelOutline); this.five_nd = this.seekChild("five_nd"); this.five_sp_1 = this.seekChild(this.five_nd, "five_sp_1").getComponent("CusRichText"); this.five_sp_2 = this.seekChild(this.five_nd, "five_sp_2").getComponent("CusRichText"); this.recruit_btn_one_nd.on(cc.Node.EventType.TOUCH_END, this.onClickOnceBtn, this); this.recruit_but_ten_nd.on(cc.Node.EventType.TOUCH_END, this.onClickMoreBtn, this); if (this.summon_data) this.updateWidgets(); }, updateWidgets: function updateWidgets() { var item_bg_res = this.summon_data.config_data.card_bg_res; var item_bg_path = PathTool.getBigBg(item_bg_res, null, "partnersummon"); this.loadRes(item_bg_path, function (sp_obj) { this.item_bg_sp.spriteFrame = sp_obj; }.bind(this)); if (this.summon_data.group_id == PartnersummonConst.Summon_Type.Normal) { this.desc_lb.string = Utils.TI18N("随机召唤1个或10个1~5星英雄"); this.desc_lo.color = new cc.Color(26, 36, 124, 255); } else if (this.summon_data.group_id == PartnersummonConst.Summon_Type.Advanced) { var five_data = this.ctrl.getFiveStarData(); if (five_data && five_data.need_times > 0) { if (PLATFORM_TYPR == "QQ_SDK" || PLATFORM_TYPR == "SH_SDK" || PLATFORM_TYPR == "WX_SDK") { this.desc_lb.string = Utils.TI18N(" 次内召唤必得 星英雄"); } else { this.desc_lb.string = Utils.TI18N(" 次内召唤必得 星英雄"); } this.updateFiveStarSp(five_data.need_times); this.desc_lb.node.y = -89; } else { this.desc_lb.string = Utils.TI18N("随机召唤1个或10个3~5星英雄"); this.desc_lb.node.y = -84; } this.desc_lo.color = new cc.Color(143, 28, 0, 255); } else if (this.summon_data.group_id == PartnersummonConst.Summon_Type.Friend) { this.desc_lb.string = Utils.TI18N("随机召唤1个或10个2~5星英雄"); this.desc_lo.color = new cc.Color(90, 0, 159, 255); } // 道具相关 this.l_item_icon_nd.scale = 0.35; this.r_item_icon_nd.scale = 0.35; this.once_good_id = this.summon_data.config_data.item_once[0][0]; // 当前材料所需的item_id var goods_need = this.summon_data.config_data.item_once[0][1]; var good_res_config = Utils.getItemConfig(this.once_good_id); var good_res_path = PathTool.getItemRes(good_res_config.icon); // if (!this.item_sf) { this.loadRes(good_res_path, function (res_object) { this.good_sp.spriteFrame = res_object; // this.l_item_icon_sp.spriteFrame = res_object; // this.r_item_icon_sp.spriteFrame = res_object; // this.item_sf = res_object; }.bind(this)); // } else { // this.l_item_icon_sp.spriteFrame = this.item_sf; // this.r_item_icon_sp.spriteFrame = this.item_sf; // } // 引导标记tag if (this.summon_data.group_id == PartnersummonConst.Summon_Type.Normal) { this.recruit_btn_one_nd.ui_tag = "recruit_btn_one_1"; } else if (this.summon_data.group_id == PartnersummonConst.Summon_Type.Advanced) { this.recruit_btn_one_nd.ui_tag = "recruit_btn_one_3"; } // 道具数量 var goods_num = 0; if (this.summon_data.group_id == PartnersummonConst.Summon_Type.Friend) { goods_num = this.role_vo.friend_point; } else { goods_num = this.backpack_model.getBackPackItemNumByBid(this.once_good_id); } this.good_num_lb.string = goods_num; // 单次召募设置 var free_info = this.getFreeInfo(1); if (free_info.free_times > 0) { this.stopTimer(); this.l_free_recruit_nd.active = true; this.l_item_recruit_nd.active = false; this.recruit_once_staus = PartnersummonConst.Status.Free; } else { this.startTimer(free_info); this.l_free_recruit_nd.active = false; this.l_item_recruit_nd.active = true; // 道具召唤 this.l_item_num_lb.string = goods_need; if (goods_num >= goods_need) { this.recruit_once_staus = PartnersummonConst.Status.Item; this.item_enough = true; this.loadRes(good_res_path, function (res_object) { this.l_item_icon_sp.spriteFrame = res_object; }.bind(this)); } else { // 钻石召唤 this.l_item_icon_nd.scale = 0.3; if (this.summon_data.group_id == PartnersummonConst.Summon_Type.Advanced) { var exchange_info = this.summon_data.config_data.exchange_once[0][0]; var exchange_num = this.summon_data.config_data.exchange_once[0][1]; this.l_item_num_lb.string = exchange_num; var good_res_config = Utils.getItemConfig(exchange_info); var good_res_path = PathTool.getItemRes(good_res_config.icon); this.loadRes(good_res_path, function (res_object) { this.l_item_icon_sp.spriteFrame = res_object; }.bind(this)); this.recruit_once_staus = PartnersummonConst.Status.Gold; } else { this.recruit_once_staus = PartnersummonConst.Status.Item; this.item_enough = false; this.loadRes(good_res_path, function (res_object) { this.l_item_icon_sp.spriteFrame = res_object; }.bind(this)); } } } // 多次召唤 var more_good_info = this.summon_data.config_data.item_five[0][0]; var more_goods_need = this.summon_data.config_data.item_five[0][1]; this.r_item_num_lb.string = more_goods_need; if (goods_num >= more_goods_need) { this.recruit_more_staus = PartnersummonConst.Status.Item; this.item_more_enough = true; this.loadRes(good_res_path, function (res_object) { this.r_item_icon_sp.spriteFrame = res_object; }.bind(this)); } else { // 多次钻石召唤 this.r_item_icon_nd.scale = 0.3; if (this.summon_data.group_id == PartnersummonConst.Summon_Type.Advanced) { var exchange_info = this.summon_data.config_data.exchange_five[0][0]; var exchange_num = this.summon_data.config_data.exchange_five[0][1]; var good_res_config = Utils.getItemConfig(exchange_info); var good_res_path = PathTool.getItemRes(good_res_config.icon); this.loadRes(good_res_path, function (res_object) { this.r_item_icon_sp.spriteFrame = res_object; }.bind(this)); this.r_item_num_lb.string = exchange_num; this.recruit_more_staus = PartnersummonConst.Status.Gold; // 折扣 this.discount_nd.active = true; CommonAction.breatheShineAction3(this.discount_nd); } else { this.recruit_more_staus = PartnersummonConst.Status.Item; this.item_more_enough = false; this.loadRes(good_res_path, function (res_object) { this.r_item_icon_sp.spriteFrame = res_object; }.bind(this)); } } // 其他纹理相关 // if (!this.sprite_frmas) { // var sprite_path = PathTool.getResFrame("partnersummon", "partnersummon"); // this.loadRes(sprite_path, function(sp_obj){ // this.sprite_frmas = sp_obj; // this.updateSprites(); // }.bind(this)) // } else { this.updateSprites(); // } }, startTimer: function startTimer(free_info) { if (!free_info && free_info.surplus_time > 0) return; this.time_interval = Utils.getTimeInterval(free_info.surplus_time); this.surplus_time = Utils.changeIntevalToDate(this.time_interval); if (!this.surplus_time) return; this.next_free_time_nd.active = true; this.cur_timer = gcore.Timer.set(function () { if (this.cur_timer) { this.time_interval = Utils.getTimeInterval(free_info.surplus_time); this.surplus_time = Utils.changeIntevalToDate(this.time_interval); var final_time = this.surplus_time.H + ":" + this.surplus_time.M + ":" + this.surplus_time.S; var final_str = Utils.TI18N(cc.js.formatStr(Lang.FREE_RECRUIT, final_time)); this.next_free_time_rt.string = final_str; } }.bind(this), 1000, -1); }, stopTimer: function stopTimer() { this.next_free_time_nd.active = false; gcore.Timer.del(this.cur_timer); this.cur_timer = null; }, updateSprites: function updateSprites() { var good_bg_res = PartnersummonConst.Good_Bg[this.summon_data.group_id]; var good_bg_path = PathTool.getUIIconPath("partnersummon", good_bg_res); this.loadRes(good_bg_path, function (sf_obj) { this.good_bg_sp.spriteFrame = sf_obj; }.bind(this)); }, updateData: function updateData(summon_data) { if (!summon_data) return; this.summon_data = summon_data; if (this.root_wnd) this.updateWidgets(); }, onClickOnceBtn: function onClickOnceBtn(event) { var times = 1; this.sendRecruit(times); if (window.TASK_TIPS) gcore.GlobalEvent.fire(GuideEvent.TaskNextStep, "recruit_btn_one_3"); //任务引导用到 }, onClickMoreBtn: function onClickMoreBtn() { var times = 10; this.sendRecruit(times); }, sendRecruit: function sendRecruit(times) { Utils.playButtonSound(ButtonSound.Normal); // 判断英雄背包空间 var HeroController = require("hero_controller"); var hero_model = HeroController.getInstance().getModel(); var hero_bag_info = hero_model.getHeroMaxCount(); var limit_num = hero_bag_info.max_count - hero_bag_info.have_coutn; if (times > limit_num) { var str = Utils.TI18N("英雄列表已满,可通过提升贵族等级或购买增加英雄携带数量,是否前往购买?"); var CommonAlert = require("commonalert"); CommonAlert.show(str, Utils.TI18N("确定"), function () { var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); var ActionController = require("action_controller"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.partner); ActionController.getInstance().openActionMainPanel(false); }, Utils.TI18N("取消"), function () {}); return; } var recruit_type = null; // if ((this.recruit_more_staus == PartnersummonConst.Status.Free && times == 10) || (this.recruit_once_staus == PartnersummonConst.Status.Free && times == 1)) { // recruit_type = 1; // } else if (this.recruit_more_staus == PartnersummonConst.Status.Item || this.recruit_once_staus == PartnersummonConst.Status.Item) { // recruit_type = 4; // if ((!this.item_more_enough && times === 10) || (!this.item_enough && times === 1)) { // this.showGetPath(); // return // } // } else if ((this.recruit_more_staus == PartnersummonConst.Status.Gold && times === 10) || (this.recruit_once_staus == PartnersummonConst.Status.Gold && times === 1)) { // recruit_type = 3; // this.showGoldTips(times); // return // } if (times == 1) { if (this.recruit_once_staus == PartnersummonConst.Status.Free) { recruit_type = 1; } else if (this.recruit_once_staus == PartnersummonConst.Status.Item) { recruit_type = 4; if (!this.item_enough) { this.showGetPath(); return; } } else if (this.recruit_once_staus == PartnersummonConst.Status.Gold) { recruit_type = 3; this.showGoldTips(times); return; } } else if (times == 10) { if (this.recruit_more_staus == PartnersummonConst.Status.Free) { recruit_type = 1; } else if (this.recruit_more_staus == PartnersummonConst.Status.Item) { recruit_type = 4; if (!this.item_more_enough) { this.showGetPath(); return; } } else if (this.recruit_more_staus == PartnersummonConst.Status.Gold) { recruit_type = 3; this.showGoldTips(times); return; } } if (!recruit_type) return; if (this.recruit_cb) this.recruit_cb(this.summon_data.group_id, times, recruit_type); }, showGoldTips: function showGoldTips(times) { var good_res_config = Utils.getItemConfig(this.summon_data.config_data.exchange_once[0][0]); var good_res_path = "3"; var need_num = this.summon_data.config_data.exchange_once[0][1]; var hvae_num = this.role_vo.gold; var val_str = Utils.getItemConfig(this.summon_data.config_data.exchange_once_gain[0][0]).name; var val_num = this.summon_data.config_data.exchange_once_gain[0][1]; var call_num = this.summon_data.recruit_data.draw_list[1].times || 1; if (times === 10) { need_num = this.summon_data.config_data.exchange_five[0][1]; val_str = Utils.getItemConfig(this.summon_data.config_data.exchange_five_gain[0][0]).name; val_num = this.summon_data.config_data.exchange_five_gain[0][1]; call_num = this.summon_data.recruit_data.draw_list[0].times || 10; } var buy_ori = cc.js.formatStr(StringUtil.parseStr(Lang.DIAMOND_CONSUME).string, good_res_path, need_num, hvae_num); var get_ori = cc.js.formatStr(StringUtil.parseStr(Lang.BUY_DES).string, val_num, val_str, call_num); var des_str = buy_ori + get_ori; var frame_arrays = []; var good_path = PathTool.getIconPath("item", "3"); frame_arrays.push(good_path); var CommonAlert = require("commonalert"); var common_aler_view = CommonAlert.show(des_str, "确定", this.configUseGold.bind(this, times), "取消", null, null, null, { resArr: frame_arrays, maxWidth: 450, align: cc.macro.TextAlignment.LEFT }); }, configUseGold: function configUseGold(times, event) { var group_id = this.summon_data.group_id; var times = times; var recruit_type = 3; if (this.recruit_cb) this.recruit_cb(group_id, times, recruit_type); }, // 显示获取途径 showGetPath: function showGetPath() { this.backpack_ctrl.openTipsSource(true, this.once_good_id); // this.once_good_id }, // 获取免费召唤次数 getFreeInfo: function getFreeInfo(times) { if (times === null) return; var draw_list = this.summon_data.recruit_data.draw_list; if (!draw_list) return; var times_list = null; var times_info = {}; for (var draw_i in draw_list) { if (draw_list[draw_i].times == times) times_list = draw_list[draw_i]; } if (times_list) { for (var key_i in times_list.kv_list) { if (times_list.kv_list[key_i].key === PartnersummonConst.Recruit_Key.Free_Count) { times_info.free_times = times_list.kv_list[key_i].val; } if (times_list.kv_list[key_i].key === PartnersummonConst.Recruit_Key.Free_Time) { times_info.surplus_time = times_list.kv_list[key_i].val; } } } return times_info; }, deleteMe: function deleteMe() { this._super(); this.stopTimer(); if (this.five_star_event) { gcore.GlobalEvent.unbind(this.five_star_event); this.five_star_event = null; } }, getSummonItemRoot: function getSummonItemRoot(name, get_cb) { if (this.root_wnd) { var tar_root = this.seekChild(this.root_wnd, name); get_cb(tar_root); } else { this.get_root_name = name; this.get_root_cb = get_cb; } }, regainRecruit: function regainRecruit() { var goods_num = this.backpack_model.getBackPackItemNumByBid(this.once_good_id); if (goods_num > 0) { if (this.recruit_cb) this.recruit_cb(this.summon_data.group_id, 1, 4); } else { if (this.summon_data.group_id == PartnersummonConst.Summon_Type.Advanced) { this.showGoldTips(1); } else { this.showGetPath(); } } }, //更新5星必出 updateFiveStarSp: function updateFiveStarSp(num) { if (num <= 0) return; if (this.five_nd == null) return; this.five_nd.active = true; // if (this.five_bg_sp == null) { // this.five_bg_sp = Utils.createImage(this.five_nd, null, 0, 0, cc.v2(0.5, 0.5), null, 0, true); // this.five_bg_sp.node.setContentSize(330, 40); // this.loadRes(PathTool.getUIIconPath("partnersummon", "bg_1"), function (sp) { // this.five_bg_sp.spriteFrame = sp; // }.bind(this)) this.five_sp_2.setNum(5); // } this.five_sp_1.setNum(num); } }); 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxwYXJ0bmVyc3VtbW9uXFx2aWV3XFxwYXJ0bmVyc3VtbW9uX2l0ZW0uanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiUGFydG5lcnN1bW1vbkNvbnN0IiwiR3VpZGVFdmVudCIsIlBhcnRuZXJzdW1tb25FdmVudCIsIlBhcnRuZXJzU3VtbW9uSXRlbSIsImNjIiwiQ2xhc3MiLCJWaWV3Q2xhc3MiLCJwcm9wZXJ0aWVzIiwic3VtbW9uX2RhdGEiLCJwYXJlbnQiLCJjdG9yIiwiYXJndW1lbnRzIiwiaW5kZXgiLCJyZWNydWl0X2NiIiwiUGFydG5lcnN1bW1vbkNvbnRyb2xsZXIiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJybGVhc2VQcmVmYWIiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsImluaXRDb25maWciLCJyZWdpc3RlckV2ZW50IiwiaW5pdFdpbmRSb290IiwiUm9sZUNvbnRyb2xsZXIiLCJyb2xlX3ZvIiwiZ2V0Um9sZVZvIiwiQmFja1BhY2tDb250cm9sbGVyIiwiYmFja3BhY2tfY3RybCIsImJhY2twYWNrX21vZGVsIiwiZ2V0TW9kZWwiLCJMb2FkZXJNYW5hZ2VyIiwibG9hZFJlcyIsInJlc19vYmplY3QiLCJyb290X3duZCIsInkiLCJoZWlnaHQiLCJhZGRDaGlsZCIsImluaXRXaWRnZXQiLCJiaW5kIiwiYWRkR2xvYmFsRXZlbnQiLCJFdmVudElkIiwiQUREX0dPT0RTIiwiYmFnX2NvZGUiLCJpdGVtX2xpc3QiLCJncm91cF9pZCIsIlN1bW1vbl9UeXBlIiwiRnJpZW5kIiwidXBkYXRlV2lkZ2V0cyIsIkRFTEVURV9HT09EUyIsIk1PRElGWV9HT09EU19OVU0iLCJyb2xlX3ZvX2ZyaWVuZCIsIlVQREFURV9ST0xFX0FUVFJJQlVURSIsImtleSIsInZhbHVlIiwiZml2ZV9zdGFyX2V2ZW50IiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsIlBhcnRuZXJTdW1tb25GaXZlU3RhciIsImRhdGEiLCJBZHZhbmNlZCIsImRlc2NfbGIiLCJuZWVkX3RpbWVzIiwiUExBVEZPUk1fVFlQUiIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJ1cGRhdGVGaXZlU3RhclNwIiwibm9kZSIsImZpdmVfbmQiLCJhY3RpdmUiLCJ1bmJpbmQiLCJpdGVtX2JnX3NwIiwic2Vla0NoaWxkIiwiU3ByaXRlIiwiZ29vZF9iZ19zcCIsImdvb2Rfc3AiLCJnb29kX251bV9sYiIsIkxhYmVsIiwicmVjcnVpdF9idG5fb25lX25kIiwidGFnXzEiLCJsX2l0ZW1faWNvbl9uZCIsImxfaXRlbV9pY29uX3NwIiwibF9pdGVtX251bV9sYiIsImxfZnJlZV9yZWNydWl0X25kIiwibF9pdGVtX3JlY3J1aXRfbmQiLCJyZWNydWl0X2J1dF90ZW5fbmQiLCJyX2l0ZW1faWNvbl9uZCIsInJfaXRlbV9pY29uX3NwIiwicl9pdGVtX251bV9sYiIsIm5leHRfZnJlZV90aW1lX25kIiwibmV4dF9mcmVlX3RpbWVfcnQiLCJSaWNoVGV4dCIsImRpc2NvdW50X25kIiwiZGVzY19sbyIsIkxhYmVsT3V0bGluZSIsImZpdmVfc3BfMSIsImdldENvbXBvbmVudCIsImZpdmVfc3BfMiIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsIm9uQ2xpY2tPbmNlQnRuIiwib25DbGlja01vcmVCdG4iLCJpdGVtX2JnX3JlcyIsImNvbmZpZ19kYXRhIiwiY2FyZF9iZ19yZXMiLCJpdGVtX2JnX3BhdGgiLCJnZXRCaWdCZyIsInNwX29iaiIsInNwcml0ZUZyYW1lIiwiTm9ybWFsIiwiY29sb3IiLCJDb2xvciIsImZpdmVfZGF0YSIsImdldEZpdmVTdGFyRGF0YSIsInNjYWxlIiwib25jZV9nb29kX2lkIiwiaXRlbV9vbmNlIiwiZ29vZHNfbmVlZCIsImdvb2RfcmVzX2NvbmZpZyIsImdldEl0ZW1Db25maWciLCJnb29kX3Jlc19wYXRoIiwiZ2V0SXRlbVJlcyIsImljb24iLCJ1aV90YWciLCJnb29kc19udW0iLCJmcmllbmRfcG9pbnQiLCJnZXRCYWNrUGFja0l0ZW1OdW1CeUJpZCIsImZyZWVfaW5mbyIsImdldEZyZWVJbmZvIiwiZnJlZV90aW1lcyIsInN0b3BUaW1lciIsInJlY3J1aXRfb25jZV9zdGF1cyIsIlN0YXR1cyIsIkZyZWUiLCJzdGFydFRpbWVyIiwiSXRlbSIsIml0ZW1fZW5vdWdoIiwiZXhjaGFuZ2VfaW5mbyIsImV4Y2hhbmdlX29uY2UiLCJleGNoYW5nZV9udW0iLCJHb2xkIiwibW9yZV9nb29kX2luZm8iLCJpdGVtX2ZpdmUiLCJtb3JlX2dvb2RzX25lZWQiLCJyZWNydWl0X21vcmVfc3RhdXMiLCJpdGVtX21vcmVfZW5vdWdoIiwiZXhjaGFuZ2VfZml2ZSIsIkNvbW1vbkFjdGlvbiIsImJyZWF0aGVTaGluZUFjdGlvbjMiLCJ1cGRhdGVTcHJpdGVzIiwic3VycGx1c190aW1lIiwidGltZV9pbnRlcnZhbCIsImdldFRpbWVJbnRlcnZhbCIsImNoYW5nZUludGV2YWxUb0RhdGUiLCJjdXJfdGltZXIiLCJUaW1lciIsInNldCIsImZpbmFsX3RpbWUiLCJIIiwiTSIsIlMiLCJmaW5hbF9zdHIiLCJqcyIsImZvcm1hdFN0ciIsIkxhbmciLCJGUkVFX1JFQ1JVSVQiLCJkZWwiLCJnb29kX2JnX3JlcyIsIkdvb2RfQmciLCJnb29kX2JnX3BhdGgiLCJnZXRVSUljb25QYXRoIiwic2Zfb2JqIiwidXBkYXRlRGF0YSIsImV2ZW50IiwidGltZXMiLCJzZW5kUmVjcnVpdCIsIndpbmRvdyIsIlRBU0tfVElQUyIsImZpcmUiLCJUYXNrTmV4dFN0ZXAiLCJwbGF5QnV0dG9uU291bmQiLCJCdXR0b25Tb3VuZCIsIkhlcm9Db250cm9sbGVyIiwiaGVyb19tb2RlbCIsImhlcm9fYmFnX2luZm8iLCJnZXRIZXJvTWF4Q291bnQiLCJsaW1pdF9udW0iLCJtYXhfY291bnQiLCJoYXZlX2NvdXRuIiwic3RyIiwiQ29tbW9uQWxlcnQiLCJzaG93IiwiTWFpbnVpQ29udHJvbGxlciIsIk1haW51aUNvbnN0IiwiQWN0aW9uQ29udHJvbGxlciIsImNoYW5nZU1haW5VSVN0YXR1cyIsImJ0bl9pbmRleCIsInBhcnRuZXIiLCJvcGVuQWN0aW9uTWFpblBhbmVsIiwicmVjcnVpdF90eXBlIiwic2hvd0dldFBhdGgiLCJzaG93R29sZFRpcHMiLCJuZWVkX251bSIsImh2YWVfbnVtIiwiZ29sZCIsInZhbF9zdHIiLCJleGNoYW5nZV9vbmNlX2dhaW4iLCJuYW1lIiwidmFsX251bSIsImNhbGxfbnVtIiwicmVjcnVpdF9kYXRhIiwiZHJhd19saXN0IiwiZXhjaGFuZ2VfZml2ZV9nYWluIiwiYnV5X29yaSIsIlN0cmluZ1V0aWwiLCJwYXJzZVN0ciIsIkRJQU1PTkRfQ09OU1VNRSIsImdldF9vcmkiLCJCVVlfREVTIiwiZGVzX3N0ciIsImZyYW1lX2FycmF5cyIsImdvb2RfcGF0aCIsImdldEljb25QYXRoIiwicHVzaCIsImNvbW1vbl9hbGVyX3ZpZXciLCJjb25maWdVc2VHb2xkIiwicmVzQXJyIiwibWF4V2lkdGgiLCJhbGlnbiIsIm1hY3JvIiwiVGV4dEFsaWdubWVudCIsIkxFRlQiLCJvcGVuVGlwc1NvdXJjZSIsInRpbWVzX2xpc3QiLCJ0aW1lc19pbmZvIiwiZHJhd19pIiwia2V5X2kiLCJrdl9saXN0IiwiUmVjcnVpdF9LZXkiLCJGcmVlX0NvdW50IiwidmFsIiwiRnJlZV9UaW1lIiwiZGVsZXRlTWUiLCJfc3VwZXIiLCJnZXRTdW1tb25JdGVtUm9vdCIsImdldF9jYiIsInRhcl9yb290IiwiZ2V0X3Jvb3RfbmFtZSIsImdldF9yb290X2NiIiwicmVnYWluUmVjcnVpdCIsIm51bSIsInNldE51bSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxrQkFBa0IsR0FBR0QsT0FBTyxDQUFDLHFCQUFELENBQWhDOztBQUNBLElBQUlFLFVBQVUsR0FBR0YsT0FBTyxDQUFDLGFBQUQsQ0FB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QUFLeEwsT0FBTCxJQUFnQixJQUFwQixFQUEwQjtBQUMxQixTQUFLQSxPQUFMLENBQWFDLE1BQWIsR0FBc0IsSUFBdEIsQ0FINkIsQ0FJN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNJLFNBQUs0QixTQUFMLENBQWU0SixNQUFmLENBQXNCLENBQXRCLEVBVnlCLENBVzdCOztBQUNBLFNBQUs5SixTQUFMLENBQWU4SixNQUFmLENBQXNCRCxHQUF0QjtBQUNIO0FBeGhCNkIsQ0FBVCxDQUF6QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXHJcbi8vIEBkZXNjcmlwdGlvbjpcclxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxyXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMS0xNCAwOToyOTowM1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XHJcbnZhciBQYXJ0bmVyc3VtbW9uQ29uc3QgPSByZXF1aXJlKFwicGFydG5lcnN1bW1vbl9jb25zdFwiKTtcclxudmFyIEd1aWRlRXZlbnQgPSByZXF1aXJlKFwiZ3VpZGVfZXZlbnRcIik7XHJcbnZhciBQYXJ0bmVyc3VtbW9uRXZlbnQgPSByZXF1aXJlKFwicGFydG5lcnN1bW1vbl9ldmVudFwiKTtcclxuXHJcbnZhciBQYXJ0bmVyc1N1bW1vbkl0ZW0gPSBjYy5DbGFzcyh7XHJcbiAgICBleHRlbmRzOiBWaWV3Q2xhc3MsXHJcblxyXG4gICAgcHJvcGVydGllczoge1xyXG4gICAgICAgIHN1bW1vbl9kYXRhOiBudWxsLFxyXG4gICAgICAgIHBhcmVudDogbnVsbCxcclxuICAgICAgICBzdW1tb25fZGF0YTogbnVsbCxcclxuICAgICAgICBzcHJpdGVfZnJtYXM6IG51bGwsXHJcbiAgICAgICAgaGVpZ2h0OiAyMjgsXHJcbiAgICAgICAgcmVjcnVpdF9vbmNlX3N0YXVzOiBudWxsLCAgLy8g5Y2V5qyh5Y+s5ZSk54q25oCBXHJcbiAgICAgICAgcmVjcnVpdF9tb3JlX3N0YXVzOiBudWxsLCAgLy8g5aSa5qyh5Y+s5ZSk54q25oCBXHJcbiAgICAgICAgaXRlbV9lbm91Z2g6IGZhbHNlLCAgICAgICAgLy8g6YGT5YW35YWF6LazXHJcbiAgICAgICAgY3VyX3RpbWVyOiBudWxsLFxyXG4gICAgICAgIGZpbmFsX29uY2VfdXNlX2l0ZW06IG51bGwsICAgICAgLy8g5pyA57uI5L2/55So55qEXHJcbiAgICAgICAgZmluYWxfb25jZV91c2VfbnVtOiBudWxsLCAgICAgICAvLyDmnIDnu4jkvb/nlKjnmoTmlbDph49cclxuICAgICAgICBmaW5hbF9tb3JlX3VzZV9pdGVtOiBudWxsLCAgICAgIC8vIOacgOe7iOS9v+eUqOeahFxyXG4gICAgICAgIGZpbmFsX21vcmVfdXNlX251bTogbnVsbCwgICAgICAgLy8g5pyA57uI5L2/55So55qE5pWw6YePICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgdGhpcy5yZWNydWl0X2NiID0gYXJndW1lbnRzWzJdO1xyXG4gICAgICAgIHZhciBQYXJ0bmVyc3VtbW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJwYXJ0bmVyc3VtbW9uX2NvbnRyb2xsZXJcIik7XHJcbiAgICAgICAgdGhpcy5jdHJsID0gUGFydG5lcnN1bW1vbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcclxuICAgICAgICB0aGlzLnJsZWFzZVByZWZhYiA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwicGFydG5lcnN1bW1vblwiLCBcInBhcnRuZXJzdW1tb25faXRlbVwiKTtcclxuICAgICAgICB0aGlzLmluaXRDb25maWcoKTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoKTtcclxuICAgICAgICB0aGlzLmluaXRXaW5kUm9vdCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKVxyXG4gICAgICAgIHRoaXMucm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XHJcbiAgICAgICAgdmFyIEJhY2tQYWNrQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYWNrcGFja19jb250cm9sbGVyXCIpO1xyXG4gICAgICAgIHRoaXMuYmFja3BhY2tfY3RybCA9IEJhY2tQYWNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xyXG4gICAgICAgIHRoaXMuYmFja3BhY2tfbW9kZWwgPSBCYWNrUGFja0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBpbml0V2luZFJvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBMb2FkZXJNYW5hZ2VyLmdldEluc3RhbmNlKCkubG9hZFJlcyh0aGlzLnByZWZhYlBhdGgsIGZ1bmN0aW9uIChyZXNfb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdF93bmQgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnkgPSAtIHRoaXMuaW5kZXggKiB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuYWRkQ2hpbGQodGhpcy5yb290X3duZCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFdpZGdldCgpO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSlcclxuICAgIH0sXHJcblxyXG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIOmBk+WFt+aVsOmHj+abtOaWsFxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoRXZlbnRJZC5BRERfR09PRFMsIGZ1bmN0aW9uIChiYWdfY29kZSwgaXRlbV9saXN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN1bW1vbl9kYXRhLmdyb3VwX2lkICE9IFBhcnRuZXJzdW1tb25Db25zdC5TdW1tb25fVHlwZS5GcmllbmQpIHRoaXMudXBkYXRlV2lkZ2V0cygpO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSlcclxuXHJcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChFdmVudElkLkRFTEVURV9HT09EUywgZnVuY3Rpb24gKGJhZ19jb2RlLCBpdGVtX2xpc3QpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3VtbW9uX2RhdGEuZ3JvdXBfaWQgIT0gUGFydG5lcnN1bW1vbkNvbnN0LlN1bW1vbl9UeXBlLkZyaWVuZCkgdGhpcy51cGRhdGVXaWRnZXRzKCk7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG5cclxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEV2ZW50SWQuTU9ESUZZX0dPT0RTX05VTSwgZnVuY3Rpb24gKGJhZ19jb2RlLCBpdGVtX2xpc3QpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3VtbW9uX2RhdGEuZ3JvdXBfaWQgIT0gUGFydG5lcnN1bW1vbkNvbnN0LlN1bW1vbl9UeXBlLkZyaWVuZCkgdGhpcy51cGRhdGVXaWRnZXRzKCk7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG5cclxuICAgICAgICAvLyDlj4vmg4XngrnmlbDmm7TmlrBcclxuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvICYmICF0aGlzLnJvbGVfdm9fZnJpZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9sZV92b19mcmllbmQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gXCJmcmllbmRfcG9pbnRcIiAmJiB0aGlzLnN1bW1vbl9kYXRhLmdyb3VwX2lkID09IFBhcnRuZXJzdW1tb25Db25zdC5TdW1tb25fVHlwZS5GcmllbmQpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRzKCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHRoaXMuZml2ZV9zdGFyX2V2ZW50ID09IG51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLmZpdmVfc3Rhcl9ldmVudCA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoUGFydG5lcnN1bW1vbkV2ZW50LlBhcnRuZXJTdW1tb25GaXZlU3RhciwgZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3VtbW9uX2RhdGEuZ3JvdXBfaWQgPT0gUGFydG5lcnN1bW1vbkNvbnN0LlN1bW1vbl9UeXBlLkFkdmFuY2VkICYmIHRoaXMuZGVzY19sYikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubmVlZF90aW1lcyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoUExBVEZPUk1fVFlQUiA9PSBcIlFRX1NES1wiIHx8IFBMQVRGT1JNX1RZUFIgPT0gXCJTSF9TREtcIiB8fCBQTEFURk9STV9UWVBSID09IFwiV1hfU0RLXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjX2xiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwiICAgICAgICAg5qyh5YaF5Y+s5ZSk5b+F5b6XICAgICAgICDmmJ/oi7Hpm4RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjX2xiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwiICAgICAgICDmrKHlhoXlj6zllKTlv4XlvpcgICAgICDmmJ/oi7Hpm4RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRml2ZVN0YXJTcChkYXRhLm5lZWRfdGltZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzY19sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIumaj+acuuWPrOWUpDHkuKrmiJYxMOS4qjN+NeaYn+iLsembhFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjX2xiLm5vZGUueSA9IC04NDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5maXZlX25kLmFjdGl2ZSA9PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXZlX25kLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZpdmVfc3Rhcl9ldmVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC51bmJpbmQodGhpcy5maXZlX3N0YXJfZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXZlX3N0YXJfZXZlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpbml0V2lkZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtX2JnX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJpdGVtX2JnXCIsIGNjLlNwcml0ZSk7XHJcblxyXG4gICAgICAgIC8vIOeJqeWTgeaVsOmHj1xyXG4gICAgICAgIHRoaXMuZ29vZF9iZ19zcCA9IHRoaXMuc2Vla0NoaWxkKFwiZ29vZF9iZ1wiLCBjYy5TcHJpdGUpO1xyXG4gICAgICAgIHRoaXMuZ29vZF9zcCA9IHRoaXMuc2Vla0NoaWxkKFwiZ29vZFwiLCBjYy5TcHJpdGUpO1xyXG4gICAgICAgIHRoaXMuZ29vZF9udW1fbGIgPSB0aGlzLnNlZWtDaGlsZChcImdvb2RfbnVtX2xhYmVsXCIsIGNjLkxhYmVsKTtcclxuXHJcbiAgICAgICAgLy8g5Y+s5Yuf5LiA5qyhXHJcbiAgICAgICAgdGhpcy5yZWNydWl0X2J0bl9vbmVfbmQgPSB0aGlzLnNlZWtDaGlsZChcInJlY3J1aXRfYnRuX29uZVwiKTtcclxuICAgICAgICB0aGlzLnJlY3J1aXRfYnRuX29uZV9uZC50YWdfMSA9IDE7XHJcbiAgICAgICAgdGhpcy5sX2l0ZW1faWNvbl9uZCA9IHRoaXMuc2Vla0NoaWxkKFwibF9pdGVtX2ljb25cIik7XHJcbiAgICAgICAgdGhpcy5sX2l0ZW1faWNvbl9zcCA9IHRoaXMuc2Vla0NoaWxkKFwibF9pdGVtX2ljb25cIiwgY2MuU3ByaXRlKTtcclxuICAgICAgICB0aGlzLmxfaXRlbV9udW1fbGIgPSB0aGlzLnNlZWtDaGlsZChcImxfaXRlbV9udW1cIiwgY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMubF9mcmVlX3JlY3J1aXRfbmQgPSB0aGlzLnNlZWtDaGlsZChcImxfZnJlZV9yZWNydWl0XCIpO1xyXG4gICAgICAgIHRoaXMubF9pdGVtX3JlY3J1aXRfbmQgPSB0aGlzLnNlZWtDaGlsZChcImxfaXRlbV9yZWNydWl0XCIpO1xyXG5cclxuICAgICAgICAvLyDlj6zli5/ljYHmrKFcclxuICAgICAgICB0aGlzLnJlY3J1aXRfYnV0X3Rlbl9uZCA9IHRoaXMuc2Vla0NoaWxkKFwicmVjcnVpdF9idXRfdGVuXCIpO1xyXG4gICAgICAgIHRoaXMucmVjcnVpdF9idXRfdGVuX25kLnRhZ18xID0gMjtcclxuICAgICAgICB0aGlzLnJfaXRlbV9pY29uX25kID0gdGhpcy5zZWVrQ2hpbGQoXCJyX2l0ZW1faWNvblwiKTtcclxuICAgICAgICB0aGlzLnJfaXRlbV9pY29uX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJyX2l0ZW1faWNvblwiLCBjYy5TcHJpdGUpO1xyXG4gICAgICAgIHRoaXMucl9pdGVtX251bV9sYiA9IHRoaXMuc2Vla0NoaWxkKFwicl9pdGVtX251bVwiLCBjYy5MYWJlbCk7XHJcblxyXG4gICAgICAgIC8v5LiL5qyh5YWN6LS55pe26Ze0XHJcbiAgICAgICAgdGhpcy5uZXh0X2ZyZWVfdGltZV9uZCA9IHRoaXMuc2Vla0NoaWxkKFwibmV4dF9mcmVlX3RpbWVcIik7XHJcbiAgICAgICAgdGhpcy5uZXh0X2ZyZWVfdGltZV9ydCA9IHRoaXMuc2Vla0NoaWxkKFwibmV4dF9mcmVlX3RpbWVcIiwgY2MuUmljaFRleHQpO1xyXG5cclxuICAgICAgICB0aGlzLmRpc2NvdW50X25kID0gdGhpcy5zZWVrQ2hpbGQoXCJkaXNjb3VudFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5kZXNjX2xiID0gdGhpcy5zZWVrQ2hpbGQoXCJkZXNjX2xiXCIsIGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLmRlc2NfbG8gPSB0aGlzLnNlZWtDaGlsZChcImRlc2NfbGJcIiwgY2MuTGFiZWxPdXRsaW5lKTtcclxuICAgICAgICB0aGlzLmZpdmVfbmQgPSB0aGlzLnNlZWtDaGlsZChcImZpdmVfbmRcIik7XHJcbiAgICAgICAgdGhpcy5maXZlX3NwXzEgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmZpdmVfbmQsIFwiZml2ZV9zcF8xXCIpLmdldENvbXBvbmVudChcIkN1c1JpY2hUZXh0XCIpO1xyXG4gICAgICAgIHRoaXMuZml2ZV9zcF8yID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5maXZlX25kLCBcImZpdmVfc3BfMlwiKS5nZXRDb21wb25lbnQoXCJDdXNSaWNoVGV4dFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWNydWl0X2J0bl9vbmVfbmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCB0aGlzLm9uQ2xpY2tPbmNlQnRuLCB0aGlzKTtcclxuICAgICAgICB0aGlzLnJlY3J1aXRfYnV0X3Rlbl9uZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIHRoaXMub25DbGlja01vcmVCdG4sIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdW1tb25fZGF0YSkgdGhpcy51cGRhdGVXaWRnZXRzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVdpZGdldHM6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIGl0ZW1fYmdfcmVzID0gdGhpcy5zdW1tb25fZGF0YS5jb25maWdfZGF0YS5jYXJkX2JnX3JlcztcclxuICAgICAgICB2YXIgaXRlbV9iZ19wYXRoID0gUGF0aFRvb2wuZ2V0QmlnQmcoaXRlbV9iZ19yZXMsIG51bGwsIFwicGFydG5lcnN1bW1vblwiKTtcclxuICAgICAgICB0aGlzLmxvYWRSZXMoaXRlbV9iZ19wYXRoLCBmdW5jdGlvbiAoc3Bfb2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbV9iZ19zcC5zcHJpdGVGcmFtZSA9IHNwX29iajtcclxuICAgICAgICB9LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdW1tb25fZGF0YS5ncm91cF9pZCA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3VtbW9uX1R5cGUuTm9ybWFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzY19sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIumaj+acuuWPrOWUpDHkuKrmiJYxMOS4qjF+NeaYn+iLsembhFwiKTtcclxuICAgICAgICAgICAgdGhpcy5kZXNjX2xvLmNvbG9yID0gbmV3IGNjLkNvbG9yKDI2LCAzNiwgMTI0LCAyNTUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdW1tb25fZGF0YS5ncm91cF9pZCA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3VtbW9uX1R5cGUuQWR2YW5jZWQpIHtcclxuICAgICAgICAgICAgdmFyIGZpdmVfZGF0YSA9IHRoaXMuY3RybC5nZXRGaXZlU3RhckRhdGEoKTtcclxuICAgICAgICAgICAgaWYgKGZpdmVfZGF0YSAmJiBmaXZlX2RhdGEubmVlZF90aW1lcyA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmKFBMQVRGT1JNX1RZUFIgPT0gXCJRUV9TREtcIiB8fCBQTEFURk9STV9UWVBSID09IFwiU0hfU0RLXCIgfHwgUExBVEZPUk1fVFlQUiA9PSBcIldYX1NES1wiKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2NfbGIuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCIgICAgICAgICDmrKHlhoXlj6zllKTlv4XlvpcgICAgICAgIOaYn+iLsembhFwiKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzY19sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIiAgICAgICAg5qyh5YaF5Y+s5ZSk5b+F5b6XICAgICAg5pif6Iux6ZuEXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGaXZlU3RhclNwKGZpdmVfZGF0YS5uZWVkX3RpbWVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVzY19sYi5ub2RlLnkgPSAtODk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2NfbGIuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLpmo/mnLrlj6zllKQx5Liq5oiWMTDkuKozfjXmmJ/oi7Hpm4RcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2NfbGIubm9kZS55ID0gLTg0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVzY19sby5jb2xvciA9IG5ldyBjYy5Db2xvcigxNDMsIDI4LCAwLCAyNTUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdW1tb25fZGF0YS5ncm91cF9pZCA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3VtbW9uX1R5cGUuRnJpZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzY19sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIumaj+acuuWPrOWUpDHkuKrmiJYxMOS4qjJ+NeaYn+iLsembhFwiKTtcclxuICAgICAgICAgICAgdGhpcy5kZXNjX2xvLmNvbG9yID0gbmV3IGNjLkNvbG9yKDkwLCAwLCAxNTksIDI1NSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDpgZPlhbfnm7jlhbNcclxuICAgICAgICB0aGlzLmxfaXRlbV9pY29uX25kLnNjYWxlID0gMC4zNTtcclxuICAgICAgICB0aGlzLnJfaXRlbV9pY29uX25kLnNjYWxlID0gMC4zNTtcclxuICAgICAgICB0aGlzLm9uY2VfZ29vZF9pZCA9IHRoaXMuc3VtbW9uX2RhdGEuY29uZmlnX2RhdGEuaXRlbV9vbmNlWzBdWzBdOyAgICAvLyDlvZPliY3mnZDmlpnmiYDpnIDnmoRpdGVtX2lkXHJcbiAgICAgICAgdmFyIGdvb2RzX25lZWQgPSB0aGlzLnN1bW1vbl9kYXRhLmNvbmZpZ19kYXRhLml0ZW1fb25jZVswXVsxXVxyXG4gICAgICAgIHZhciBnb29kX3Jlc19jb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKHRoaXMub25jZV9nb29kX2lkKTtcclxuICAgICAgICB2YXIgZ29vZF9yZXNfcGF0aCA9IFBhdGhUb29sLmdldEl0ZW1SZXMoZ29vZF9yZXNfY29uZmlnLmljb24pXHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLml0ZW1fc2YpIHsgICAgICAgIFxyXG4gICAgICAgIHRoaXMubG9hZFJlcyhnb29kX3Jlc19wYXRoLCBmdW5jdGlvbiAocmVzX29iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLmdvb2Rfc3Auc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMubF9pdGVtX2ljb25fc3Auc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMucl9pdGVtX2ljb25fc3Auc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuaXRlbV9zZiA9IHJlc19vYmplY3Q7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMubF9pdGVtX2ljb25fc3Auc3ByaXRlRnJhbWUgPSB0aGlzLml0ZW1fc2Y7XHJcbiAgICAgICAgLy8gICAgIHRoaXMucl9pdGVtX2ljb25fc3Auc3ByaXRlRnJhbWUgPSB0aGlzLml0ZW1fc2Y7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIOW8leWvvOagh+iusHRhZ1xyXG4gICAgICAgIGlmICh0aGlzLnN1bW1vbl9kYXRhLmdyb3VwX2lkID09IFBhcnRuZXJzdW1tb25Db25zdC5TdW1tb25fVHlwZS5Ob3JtYWwpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNydWl0X2J0bl9vbmVfbmQudWlfdGFnID0gXCJyZWNydWl0X2J0bl9vbmVfMVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdW1tb25fZGF0YS5ncm91cF9pZCA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3VtbW9uX1R5cGUuQWR2YW5jZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNydWl0X2J0bl9vbmVfbmQudWlfdGFnID0gXCJyZWNydWl0X2J0bl9vbmVfM1wiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g6YGT5YW35pWw6YePXHJcbiAgICAgICAgdmFyIGdvb2RzX251bSA9IDA7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VtbW9uX2RhdGEuZ3JvdXBfaWQgPT0gUGFydG5lcnN1bW1vbkNvbnN0LlN1bW1vbl9UeXBlLkZyaWVuZCkge1xyXG4gICAgICAgICAgICBnb29kc19udW0gPSB0aGlzLnJvbGVfdm8uZnJpZW5kX3BvaW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdvb2RzX251bSA9IHRoaXMuYmFja3BhY2tfbW9kZWwuZ2V0QmFja1BhY2tJdGVtTnVtQnlCaWQodGhpcy5vbmNlX2dvb2RfaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdvb2RfbnVtX2xiLnN0cmluZyA9IGdvb2RzX251bTtcclxuXHJcbiAgICAgICAgLy8g5Y2V5qyh5Y+s5Yuf6K6+572uXHJcbiAgICAgICAgdmFyIGZyZWVfaW5mbyA9IHRoaXMuZ2V0RnJlZUluZm8oMSk7XHJcbiAgICAgICAgaWYgKGZyZWVfaW5mby5mcmVlX3RpbWVzID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgICAgICAgICB0aGlzLmxfZnJlZV9yZWNydWl0X25kLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubF9pdGVtX3JlY3J1aXRfbmQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmVjcnVpdF9vbmNlX3N0YXVzID0gUGFydG5lcnN1bW1vbkNvbnN0LlN0YXR1cy5GcmVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcihmcmVlX2luZm8pO1xyXG4gICAgICAgICAgICB0aGlzLmxfZnJlZV9yZWNydWl0X25kLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxfaXRlbV9yZWNydWl0X25kLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIOmBk+WFt+WPrOWUpFxyXG4gICAgICAgICAgICB0aGlzLmxfaXRlbV9udW1fbGIuc3RyaW5nID0gZ29vZHNfbmVlZDtcclxuICAgICAgICAgICAgaWYgKGdvb2RzX251bSA+PSBnb29kc19uZWVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY3J1aXRfb25jZV9zdGF1cyA9IFBhcnRuZXJzdW1tb25Db25zdC5TdGF0dXMuSXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9lbm91Z2ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKGdvb2RfcmVzX3BhdGgsIGZ1bmN0aW9uIChyZXNfb2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sX2l0ZW1faWNvbl9zcC5zcHJpdGVGcmFtZSA9IHJlc19vYmplY3Q7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyDpkrvnn7Plj6zllKRcclxuICAgICAgICAgICAgICAgIHRoaXMubF9pdGVtX2ljb25fbmQuc2NhbGUgPSAwLjM7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdW1tb25fZGF0YS5ncm91cF9pZCA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3VtbW9uX1R5cGUuQWR2YW5jZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXhjaGFuZ2VfaW5mbyA9IHRoaXMuc3VtbW9uX2RhdGEuY29uZmlnX2RhdGEuZXhjaGFuZ2Vfb25jZVswXVswXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXhjaGFuZ2VfbnVtID0gdGhpcy5zdW1tb25fZGF0YS5jb25maWdfZGF0YS5leGNoYW5nZV9vbmNlWzBdWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubF9pdGVtX251bV9sYi5zdHJpbmcgPSBleGNoYW5nZV9udW07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdvb2RfcmVzX2NvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoZXhjaGFuZ2VfaW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdvb2RfcmVzX3BhdGggPSBQYXRoVG9vbC5nZXRJdGVtUmVzKGdvb2RfcmVzX2NvbmZpZy5pY29uKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhnb29kX3Jlc19wYXRoLCBmdW5jdGlvbiAocmVzX29iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxfaXRlbV9pY29uX3NwLnNwcml0ZUZyYW1lID0gcmVzX29iamVjdDtcclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNydWl0X29uY2Vfc3RhdXMgPSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3RhdHVzLkdvbGQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjcnVpdF9vbmNlX3N0YXVzID0gUGFydG5lcnN1bW1vbkNvbnN0LlN0YXR1cy5JdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9lbm91Z2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMoZ29vZF9yZXNfcGF0aCwgZnVuY3Rpb24gKHJlc19vYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sX2l0ZW1faWNvbl9zcC5zcHJpdGVGcmFtZSA9IHJlc19vYmplY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDlpJrmrKHlj6zllKRcclxuICAgICAgICB2YXIgbW9yZV9nb29kX2luZm8gPSB0aGlzLnN1bW1vbl9kYXRhLmNvbmZpZ19kYXRhLml0ZW1fZml2ZVswXVswXTtcclxuICAgICAgICB2YXIgbW9yZV9nb29kc19uZWVkID0gdGhpcy5zdW1tb25fZGF0YS5jb25maWdfZGF0YS5pdGVtX2ZpdmVbMF1bMV07XHJcbiAgICAgICAgdGhpcy5yX2l0ZW1fbnVtX2xiLnN0cmluZyA9IG1vcmVfZ29vZHNfbmVlZDtcclxuICAgICAgICBpZiAoZ29vZHNfbnVtID49IG1vcmVfZ29vZHNfbmVlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlY3J1aXRfbW9yZV9zdGF1cyA9IFBhcnRuZXJzdW1tb25Db25zdC5TdGF0dXMuSXRlbTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtX21vcmVfZW5vdWdoID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKGdvb2RfcmVzX3BhdGgsIGZ1bmN0aW9uIChyZXNfb2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJfaXRlbV9pY29uX3NwLnNwcml0ZUZyYW1lID0gcmVzX29iamVjdDtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIOWkmuasoemSu+efs+WPrOWUpFxyXG4gICAgICAgICAgICB0aGlzLnJfaXRlbV9pY29uX25kLnNjYWxlID0gMC4zO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdW1tb25fZGF0YS5ncm91cF9pZCA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3VtbW9uX1R5cGUuQWR2YW5jZWQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBleGNoYW5nZV9pbmZvID0gdGhpcy5zdW1tb25fZGF0YS5jb25maWdfZGF0YS5leGNoYW5nZV9maXZlWzBdWzBdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGV4Y2hhbmdlX251bSA9IHRoaXMuc3VtbW9uX2RhdGEuY29uZmlnX2RhdGEuZXhjaGFuZ2VfZml2ZVswXVsxXTtcclxuICAgICAgICAgICAgICAgIHZhciBnb29kX3Jlc19jb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGV4Y2hhbmdlX2luZm8pO1xyXG4gICAgICAgICAgICAgICAgdmFyIGdvb2RfcmVzX3BhdGggPSBQYXRoVG9vbC5nZXRJdGVtUmVzKGdvb2RfcmVzX2NvbmZpZy5pY29uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKGdvb2RfcmVzX3BhdGgsIGZ1bmN0aW9uIChyZXNfb2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yX2l0ZW1faWNvbl9zcC5zcHJpdGVGcmFtZSA9IHJlc19vYmplY3Q7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJfaXRlbV9udW1fbGIuc3RyaW5nID0gZXhjaGFuZ2VfbnVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNydWl0X21vcmVfc3RhdXMgPSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3RhdHVzLkdvbGQ7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8g5oqY5omjXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2NvdW50X25kLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb21tb25BY3Rpb24uYnJlYXRoZVNoaW5lQWN0aW9uMyh0aGlzLmRpc2NvdW50X25kKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVjcnVpdF9tb3JlX3N0YXVzID0gUGFydG5lcnN1bW1vbkNvbnN0LlN0YXR1cy5JdGVtO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX21vcmVfZW5vdWdoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMoZ29vZF9yZXNfcGF0aCwgZnVuY3Rpb24gKHJlc19vYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJfaXRlbV9pY29uX3NwLnNwcml0ZUZyYW1lID0gcmVzX29iamVjdDtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5YW25LuW57q555CG55u45YWzXHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLnNwcml0ZV9mcm1hcykge1xyXG4gICAgICAgIC8vICAgICB2YXIgc3ByaXRlX3BhdGggPSBQYXRoVG9vbC5nZXRSZXNGcmFtZShcInBhcnRuZXJzdW1tb25cIiwgXCJwYXJ0bmVyc3VtbW9uXCIpO1xyXG4gICAgICAgIC8vICAgICB0aGlzLmxvYWRSZXMoc3ByaXRlX3BhdGgsIGZ1bmN0aW9uKHNwX29iail7XHJcbiAgICAgICAgLy8gICAgICAgICB0aGlzLnNwcml0ZV9mcm1hcyA9IHNwX29iajtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMudXBkYXRlU3ByaXRlcygpO1xyXG4gICAgICAgIC8vICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNwcml0ZXMoKTtcclxuICAgICAgICAvLyB9XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICBzdGFydFRpbWVyOiBmdW5jdGlvbiAoZnJlZV9pbmZvKSB7XHJcbiAgICAgICAgaWYgKCFmcmVlX2luZm8gJiYgZnJlZV9pbmZvLnN1cnBsdXNfdGltZSA+IDApIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRpbWVfaW50ZXJ2YWwgPSBVdGlscy5nZXRUaW1lSW50ZXJ2YWwoZnJlZV9pbmZvLnN1cnBsdXNfdGltZSk7XHJcbiAgICAgICAgdGhpcy5zdXJwbHVzX3RpbWUgPSBVdGlscy5jaGFuZ2VJbnRldmFsVG9EYXRlKHRoaXMudGltZV9pbnRlcnZhbCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN1cnBsdXNfdGltZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubmV4dF9mcmVlX3RpbWVfbmQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmN1cl90aW1lciA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cl90aW1lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aW1lX2ludGVydmFsID0gVXRpbHMuZ2V0VGltZUludGVydmFsKGZyZWVfaW5mby5zdXJwbHVzX3RpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdXJwbHVzX3RpbWUgPSBVdGlscy5jaGFuZ2VJbnRldmFsVG9EYXRlKHRoaXMudGltZV9pbnRlcnZhbCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmluYWxfdGltZSA9IHRoaXMuc3VycGx1c190aW1lLkggKyBcIjpcIiArIHRoaXMuc3VycGx1c190aW1lLk0gKyBcIjpcIiArIHRoaXMuc3VycGx1c190aW1lLlM7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmluYWxfc3RyID0gVXRpbHMuVEkxOE4oY2MuanMuZm9ybWF0U3RyKExhbmcuRlJFRV9SRUNSVUlULCBmaW5hbF90aW1lKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRfZnJlZV90aW1lX3J0LnN0cmluZyA9IGZpbmFsX3N0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0uYmluZCh0aGlzKSwgMTAwMCwgLTEpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgc3RvcFRpbWVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5uZXh0X2ZyZWVfdGltZV9uZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy5jdXJfdGltZXIpO1xyXG4gICAgICAgIHRoaXMuY3VyX3RpbWVyID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlU3ByaXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBnb29kX2JnX3JlcyA9IFBhcnRuZXJzdW1tb25Db25zdC5Hb29kX0JnW3RoaXMuc3VtbW9uX2RhdGEuZ3JvdXBfaWRdO1xyXG4gICAgICAgIHZhciBnb29kX2JnX3BhdGggPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwicGFydG5lcnN1bW1vblwiLCBnb29kX2JnX3Jlcyk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZFJlcyhnb29kX2JnX3BhdGgsIGZ1bmN0aW9uIChzZl9vYmopIHtcclxuICAgICAgICAgICAgdGhpcy5nb29kX2JnX3NwLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSlcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZURhdGE6IGZ1bmN0aW9uIChzdW1tb25fZGF0YSkge1xyXG4gICAgICAgIGlmICghc3VtbW9uX2RhdGEpIHJldHVyblxyXG4gICAgICAgIHRoaXMuc3VtbW9uX2RhdGEgPSBzdW1tb25fZGF0YTtcclxuICAgICAgICBpZiAodGhpcy5yb290X3duZCkgdGhpcy51cGRhdGVXaWRnZXRzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uQ2xpY2tPbmNlQnRuOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICB2YXIgdGltZXMgPSAxO1xyXG4gICAgICAgIHRoaXMuc2VuZFJlY3J1aXQodGltZXMpO1xyXG4gICAgICAgIGlmICh3aW5kb3cuVEFTS19USVBTKVxyXG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEd1aWRlRXZlbnQuVGFza05leHRTdGVwLCBcInJlY3J1aXRfYnRuX29uZV8zXCIpOy8v5Lu75Yqh5byV5a+855So5YiwXHJcbiAgICB9LFxyXG5cclxuICAgIG9uQ2xpY2tNb3JlQnRuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRpbWVzID0gMTA7XHJcbiAgICAgICAgdGhpcy5zZW5kUmVjcnVpdCh0aW1lcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNlbmRSZWNydWl0OiBmdW5jdGlvbiAodGltZXMpIHtcclxuICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoQnV0dG9uU291bmQuTm9ybWFsKTtcclxuICAgICAgICAvLyDliKTmlq3oi7Hpm4Tog4zljIXnqbrpl7RcclxuICAgICAgICB2YXIgSGVyb0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiaGVyb19jb250cm9sbGVyXCIpO1xyXG4gICAgICAgIHZhciBoZXJvX21vZGVsID0gSGVyb0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpO1xyXG4gICAgICAgIHZhciBoZXJvX2JhZ19pbmZvID0gaGVyb19tb2RlbC5nZXRIZXJvTWF4Q291bnQoKTtcclxuICAgICAgICB2YXIgbGltaXRfbnVtID0gaGVyb19iYWdfaW5mby5tYXhfY291bnQgLSBoZXJvX2JhZ19pbmZvLmhhdmVfY291dG47XHJcblxyXG4gICAgICAgIGlmICh0aW1lcyA+IGxpbWl0X251bSkge1xyXG4gICAgICAgICAgICB2YXIgc3RyID0gVXRpbHMuVEkxOE4oXCLoi7Hpm4TliJfooajlt7Lmu6HvvIzlj6/pgJrov4fmj5DljYfotLXml4/nrYnnuqfmiJbotK3kubDlop7liqDoi7Hpm4TmkLrluKbmlbDph4/vvIzmmK/lkKbliY3lvoDotK3kubDvvJ9cIilcclxuICAgICAgICAgICAgdmFyIENvbW1vbkFsZXJ0ID0gcmVxdWlyZShcImNvbW1vbmFsZXJ0XCIpO1xyXG4gICAgICAgICAgICBDb21tb25BbGVydC5zaG93KHN0ciwgVXRpbHMuVEkxOE4oXCLnoa7lrppcIiksIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBNYWludWlDb250cm9sbGVyID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpXHJcbiAgICAgICAgICAgICAgICB2YXIgTWFpbnVpQ29uc3QgPSByZXF1aXJlKFwibWFpbnVpX2NvbnN0XCIpXHJcbiAgICAgICAgICAgICAgICB2YXIgQWN0aW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpb25fY29udHJvbGxlclwiKVxyXG4gICAgICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoYW5nZU1haW5VSVN0YXR1cyhNYWludWlDb25zdC5idG5faW5kZXgucGFydG5lcilcclxuICAgICAgICAgICAgICAgIEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuQWN0aW9uTWFpblBhbmVsKGZhbHNlKVxyXG4gICAgICAgICAgICB9LCBVdGlscy5USTE4TihcIuWPlua2iFwiKSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlY3J1aXRfdHlwZSA9IG51bGw7XHJcbiAgICAgICAgLy8gaWYgKCh0aGlzLnJlY3J1aXRfbW9yZV9zdGF1cyA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3RhdHVzLkZyZWUgJiYgdGltZXMgPT0gMTApIHx8ICh0aGlzLnJlY3J1aXRfb25jZV9zdGF1cyA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3RhdHVzLkZyZWUgJiYgdGltZXMgPT0gMSkpIHtcclxuICAgICAgICAvLyAgICAgcmVjcnVpdF90eXBlID0gMTtcclxuICAgICAgICAvLyB9IGVsc2UgaWYgKHRoaXMucmVjcnVpdF9tb3JlX3N0YXVzID09IFBhcnRuZXJzdW1tb25Db25zdC5TdGF0dXMuSXRlbSB8fCB0aGlzLnJlY3J1aXRfb25jZV9zdGF1cyA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3RhdHVzLkl0ZW0pIHtcclxuICAgICAgICAvLyAgICAgcmVjcnVpdF90eXBlID0gNDtcclxuICAgICAgICAvLyAgICAgaWYgKCghdGhpcy5pdGVtX21vcmVfZW5vdWdoICYmIHRpbWVzID09PSAxMCkgfHwgKCF0aGlzLml0ZW1fZW5vdWdoICYmIHRpbWVzID09PSAxKSkge1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5zaG93R2V0UGF0aCgpO1xyXG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyB9IGVsc2UgaWYgKCh0aGlzLnJlY3J1aXRfbW9yZV9zdGF1cyA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3RhdHVzLkdvbGQgJiYgdGltZXMgPT09IDEwKSB8fCAodGhpcy5yZWNydWl0X29uY2Vfc3RhdXMgPT0gUGFydG5lcnN1bW1vbkNvbnN0LlN0YXR1cy5Hb2xkICYmIHRpbWVzID09PSAxKSkge1xyXG4gICAgICAgIC8vICAgICByZWNydWl0X3R5cGUgPSAzO1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNob3dHb2xkVGlwcyh0aW1lcyk7XHJcbiAgICAgICAgLy8gICAgIHJldHVyblxyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbWVzID09IDEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVjcnVpdF9vbmNlX3N0YXVzID09IFBhcnRuZXJzdW1tb25Db25zdC5TdGF0dXMuRnJlZSkge1xyXG4gICAgICAgICAgICAgICAgcmVjcnVpdF90eXBlID0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlY3J1aXRfb25jZV9zdGF1cyA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3RhdHVzLkl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJlY3J1aXRfdHlwZSA9IDQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXRlbV9lbm91Z2gpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dHZXRQYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVjcnVpdF9vbmNlX3N0YXVzID09IFBhcnRuZXJzdW1tb25Db25zdC5TdGF0dXMuR29sZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjcnVpdF90eXBlID0gMztcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0dvbGRUaXBzKHRpbWVzKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aW1lcyA9PSAxMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZWNydWl0X21vcmVfc3RhdXMgPT0gUGFydG5lcnN1bW1vbkNvbnN0LlN0YXR1cy5GcmVlKSB7XHJcbiAgICAgICAgICAgICAgICByZWNydWl0X3R5cGUgPSAxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVjcnVpdF9tb3JlX3N0YXVzID09IFBhcnRuZXJzdW1tb25Db25zdC5TdGF0dXMuSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmVjcnVpdF90eXBlID0gNDtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pdGVtX21vcmVfZW5vdWdoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93R2V0UGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlY3J1aXRfbW9yZV9zdGF1cyA9PSBQYXJ0bmVyc3VtbW9uQ29uc3QuU3RhdHVzLkdvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJlY3J1aXRfdHlwZSA9IDM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dHb2xkVGlwcyh0aW1lcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVjcnVpdF90eXBlKSByZXR1cm5cclxuICAgICAgICBpZiAodGhpcy5yZWNydWl0X2NiKSB0aGlzLnJlY3J1aXRfY2IodGhpcy5zdW1tb25fZGF0YS5ncm91cF9pZCwgdGltZXMsIHJlY3J1aXRfdHlwZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3dHb2xkVGlwczogZnVuY3Rpb24gKHRpbWVzKSB7XHJcbiAgICAgICAgdmFyIGdvb2RfcmVzX2NvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcodGhpcy5zdW1tb25fZGF0YS5jb25maWdfZGF0YS5leGNoYW5nZV9vbmNlWzBdWzBdKTtcclxuICAgICAgICB2YXIgZ29vZF9yZXNfcGF0aCA9IFwiM1wiO1xyXG4gICAgICAgIHZhciBuZWVkX251bSA9IHRoaXMuc3VtbW9uX2RhdGEuY29uZmlnX2RhdGEuZXhjaGFuZ2Vfb25jZVswXVsxXTtcclxuICAgICAgICB2YXIgaHZhZV9udW0gPSB0aGlzLnJvbGVfdm8uZ29sZDtcclxuICAgICAgICB2YXIgdmFsX3N0ciA9IFV0aWxzLmdldEl0ZW1Db25maWcodGhpcy5zdW1tb25fZGF0YS5jb25maWdfZGF0YS5leGNoYW5nZV9vbmNlX2dhaW5bMF1bMF0pLm5hbWVcclxuICAgICAgICB2YXIgdmFsX251bSA9IHRoaXMuc3VtbW9uX2RhdGEuY29uZmlnX2RhdGEuZXhjaGFuZ2Vfb25jZV9nYWluWzBdWzFdO1xyXG4gICAgICAgIHZhciBjYWxsX251bSA9IHRoaXMuc3VtbW9uX2RhdGEucmVjcnVpdF9kYXRhLmRyYXdfbGlzdFsxXS50aW1lcyB8fCAxO1xyXG5cclxuICAgICAgICBpZiAodGltZXMgPT09IDEwKSB7XHJcbiAgICAgICAgICAgIG5lZWRfbnVtID0gdGhpcy5zdW1tb25fZGF0YS5jb25maWdfZGF0YS5leGNoYW5nZV9maXZlWzBdWzFdO1xyXG4gICAgICAgICAgICB2YWxfc3RyID0gVXRpbHMuZ2V0SXRlbUNvbmZpZyh0aGlzLnN1bW1vbl9kYXRhLmNvbmZpZ19kYXRhLmV4Y2hhbmdlX2ZpdmVfZ2FpblswXVswXSkubmFtZVxyXG4gICAgICAgICAgICB2YWxfbnVtID0gdGhpcy5zdW1tb25fZGF0YS5jb25maWdfZGF0YS5leGNoYW5nZV9maXZlX2dhaW5bMF1bMV07XHJcbiAgICAgICAgICAgIGNhbGxfbnVtID0gdGhpcy5zdW1tb25fZGF0YS5yZWNydWl0X2RhdGEuZHJhd19saXN0WzBdLnRpbWVzIHx8IDEwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGJ1eV9vcmkgPSBjYy5qcy5mb3JtYXRTdHIoU3RyaW5nVXRpbC5wYXJzZVN0cihMYW5nLkRJQU1PTkRfQ09OU1VNRSkuc3RyaW5nLCBnb29kX3Jlc19wYXRoLCBuZWVkX251bSwgaHZhZV9udW0pO1xyXG4gICAgICAgIHZhciBnZXRfb3JpID0gY2MuanMuZm9ybWF0U3RyKFN0cmluZ1V0aWwucGFyc2VTdHIoTGFuZy5CVVlfREVTKS5zdHJpbmcsIHZhbF9udW0sIHZhbF9zdHIsIGNhbGxfbnVtKTtcclxuICAgICAgICB2YXIgZGVzX3N0ciA9IGJ1eV9vcmkgKyBnZXRfb3JpO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWVfYXJyYXlzID0gW107XHJcbiAgICAgICAgdmFyIGdvb2RfcGF0aCA9IFBhdGhUb29sLmdldEljb25QYXRoKFwiaXRlbVwiLCBcIjNcIik7XHJcbiAgICAgICAgZnJhbWVfYXJyYXlzLnB1c2goZ29vZF9wYXRoKTtcclxuICAgICAgICB2YXIgQ29tbW9uQWxlcnQgPSByZXF1aXJlKFwiY29tbW9uYWxlcnRcIik7XHJcbiAgICAgICAgdmFyIGNvbW1vbl9hbGVyX3ZpZXcgPSBDb21tb25BbGVydC5zaG93KGRlc19zdHIsIFwi56Gu5a6aXCIsIHRoaXMuY29uZmlnVXNlR29sZC5iaW5kKHRoaXMsIHRpbWVzKSwgXCLlj5bmtohcIiwgbnVsbCwgbnVsbCwgbnVsbCwgeyByZXNBcnI6IGZyYW1lX2FycmF5cywgbWF4V2lkdGg6IDQ1MCwgYWxpZ246IGNjLm1hY3JvLlRleHRBbGlnbm1lbnQuTEVGVCB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgY29uZmlnVXNlR29sZDogZnVuY3Rpb24gKHRpbWVzLCBldmVudCkge1xyXG4gICAgICAgIHZhciBncm91cF9pZCA9IHRoaXMuc3VtbW9uX2RhdGEuZ3JvdXBfaWQ7XHJcbiAgICAgICAgdmFyIHRpbWVzID0gdGltZXM7XHJcbiAgICAgICAgdmFyIHJlY3J1aXRfdHlwZSA9IDM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlY3J1aXRfY2IpIHRoaXMucmVjcnVpdF9jYihncm91cF9pZCwgdGltZXMsIHJlY3J1aXRfdHlwZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIOaYvuekuuiOt+WPlumAlOW+hFxyXG4gICAgc2hvd0dldFBhdGg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmJhY2twYWNrX2N0cmwub3BlblRpcHNTb3VyY2UodHJ1ZSwgdGhpcy5vbmNlX2dvb2RfaWQpO1xyXG4gICAgICAgIC8vIHRoaXMub25jZV9nb29kX2lkXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIOiOt+WPluWFjei0ueWPrOWUpOasoeaVsFxyXG4gICAgZ2V0RnJlZUluZm86IGZ1bmN0aW9uICh0aW1lcykge1xyXG4gICAgICAgIGlmICh0aW1lcyA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgZHJhd19saXN0ID0gdGhpcy5zdW1tb25fZGF0YS5yZWNydWl0X2RhdGEuZHJhd19saXN0XHJcbiAgICAgICAgaWYgKCFkcmF3X2xpc3QpIHJldHVyblxyXG5cclxuICAgICAgICB2YXIgdGltZXNfbGlzdCA9IG51bGw7XHJcbiAgICAgICAgdmFyIHRpbWVzX2luZm8gPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBkcmF3X2kgaW4gZHJhd19saXN0KSB7XHJcbiAgICAgICAgICAgIGlmIChkcmF3X2xpc3RbZHJhd19pXS50aW1lcyA9PSB0aW1lcylcclxuICAgICAgICAgICAgICAgIHRpbWVzX2xpc3QgPSBkcmF3X2xpc3RbZHJhd19pXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lc19saXN0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleV9pIGluIHRpbWVzX2xpc3Qua3ZfbGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVzX2xpc3Qua3ZfbGlzdFtrZXlfaV0ua2V5ID09PSBQYXJ0bmVyc3VtbW9uQ29uc3QuUmVjcnVpdF9LZXkuRnJlZV9Db3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVzX2luZm8uZnJlZV90aW1lcyA9IHRpbWVzX2xpc3Qua3ZfbGlzdFtrZXlfaV0udmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVzX2xpc3Qua3ZfbGlzdFtrZXlfaV0ua2V5ID09PSBQYXJ0bmVyc3VtbW9uQ29uc3QuUmVjcnVpdF9LZXkuRnJlZV9UaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZXNfaW5mby5zdXJwbHVzX3RpbWUgPSB0aW1lc19saXN0Lmt2X2xpc3Rba2V5X2ldLnZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRpbWVzX2luZm9cclxuICAgIH0sXHJcblxyXG4gICAgZGVsZXRlTWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9zdXBlcigpO1xyXG4gICAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICAgICAgaWYodGhpcy5maXZlX3N0YXJfZXZlbnQpe1xyXG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC51bmJpbmQodGhpcy5maXZlX3N0YXJfZXZlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLmZpdmVfc3Rhcl9ldmVudCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRTdW1tb25JdGVtUm9vdDogZnVuY3Rpb24gKG5hbWUsIGdldF9jYikge1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKSB7XHJcbiAgICAgICAgICAgIHZhciB0YXJfcm9vdCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMucm9vdF93bmQsIG5hbWUpO1xyXG4gICAgICAgICAgICBnZXRfY2IodGFyX3Jvb3QpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRfcm9vdF9uYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgdGhpcy5nZXRfcm9vdF9jYiA9IGdldF9jYjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlZ2FpblJlY3J1aXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZ29vZHNfbnVtID0gdGhpcy5iYWNrcGFja19tb2RlbC5nZXRCYWNrUGFja0l0ZW1OdW1CeUJpZCh0aGlzLm9uY2VfZ29vZF9pZCk7XHJcbiAgICAgICAgaWYgKGdvb2RzX251bSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVjcnVpdF9jYikgdGhpcy5yZWNydWl0X2NiKHRoaXMuc3VtbW9uX2RhdGEuZ3JvdXBfaWQsIDEsIDQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN1bW1vbl9kYXRhLmdyb3VwX2lkID09IFBhcnRuZXJzdW1tb25Db25zdC5TdW1tb25fVHlwZS5BZHZhbmNlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93R29sZFRpcHMoMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dHZXRQYXRoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5pu05pawNeaYn+W/heWHulxyXG4gICAgdXBkYXRlRml2ZVN0YXJTcDogZnVuY3Rpb24gKG51bSkge1xyXG4gICAgICAgIGlmIChudW0gPD0gMCkgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMuZml2ZV9uZCA9PSBudWxsKSByZXR1cm5cclxuICAgICAgICB0aGlzLmZpdmVfbmQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAvLyBpZiAodGhpcy5maXZlX2JnX3NwID09IG51bGwpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5maXZlX2JnX3NwID0gVXRpbHMuY3JlYXRlSW1hZ2UodGhpcy5maXZlX25kLCBudWxsLCAwLCAwLCBjYy52MigwLjUsIDAuNSksIG51bGwsIDAsIHRydWUpO1xyXG4gICAgICAgIC8vICAgICB0aGlzLmZpdmVfYmdfc3Aubm9kZS5zZXRDb250ZW50U2l6ZSgzMzAsIDQwKTtcclxuICAgICAgICAvLyAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJwYXJ0bmVyc3VtbW9uXCIsIFwiYmdfMVwiKSwgZnVuY3Rpb24gKHNwKSB7XHJcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmZpdmVfYmdfc3Auc3ByaXRlRnJhbWUgPSBzcDtcclxuICAgICAgICAvLyAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICB0aGlzLmZpdmVfc3BfMi5zZXROdW0oNSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMuZml2ZV9zcF8xLnNldE51bShudW0pO1xyXG4gICAgfSxcclxufSkiXX0=