difenduandada
2024-12-31 34abe6963b344c882358274957f4b992456fee40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/guild/view/guild_main_window.js';
                    var __require = nodeEnv ? function (request) {
                        return cc.require(request);
                    } : function (request) {
                        return __quick_compile_project__.require(request, __filename);
                    };
                    function __define (exports, require, module) {
                        if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, 'ae30fDIOj1A/53G+jrrGUOn', 'guild_main_window');
// Scripts/mod/guild/view/guild_main_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: shiraho@syg.com(必填, 创建模块的人员)
// @description:
//      公会主窗体
// <br/>Create: new Date().toISOString()
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var GuildController = require("guild_controller");
 
var GuildBossController = require("guildboss_controller");
 
var GuildskillController = require("guildskill_controller");
 
var RedbagController = require("redbag_controller");
 
var GuildWarController = require("guildwar_controller");
 
var RoleController = require("role_controller");
 
var GuildConst = require("guild_const");
 
var GuildEvent = require("guild_event");
 
var RoleEvent = require("role_event");
 
var TaskMainWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("guild", "guild_main_window");
    this.win_type = WinType.Full;
    this.viewTag = SCENE_TAG.ui; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.rleasePrefab = false;
    this.ctrl = GuildController.getInstance();
    this.model = this.ctrl.getModel();
    this.role_vo = RoleController.getInstance().getRoleVo();
    this.gb_model = GuildBossController.getInstance().getModel();
    this.skill_model = GuildskillController.getInstance().getModel();
    this.redbag_model = RedbagController.getInstance().getModel();
    this.gw_model = GuildWarController.getInstance().getModel();
  },
  openCallBack: function openCallBack() {
    var main_container = this.seekChild("main_container");
    var main_panel = this.seekChild(main_container, "main_panel");
    this.main_view = this.seekChild(main_panel, "container");
    this.sign_btn = this.seekChild(this.main_view, "sign_btn", cc.Button);
    this.guild_sign_value = this.seekChild(this.main_view, "guild_sign_value", cc.Label);
    this.background = this.seekChild("background");
    this.background.scale = FIT_SCALE;
    this.loadRes(PathTool.getBigBg("bigbg_2"), function (res) {
      this.background.getComponent(cc.Sprite).spriteFrame = res;
    }.bind(this));
    this.change_name_btn = this.seekChild(this.main_view, "change_name_btn", cc.Button);
    this.action_goal_btn = this.seekChild(this.main_view, "action_goal_btn", cc.Button);
    this.redpacket_btn = this.seekChild(this.main_view, "redpacket_btn", cc.Button);
    this.redpacket_btn.tips = this.seekChild(this.redpacket_btn.node, "tips");
    this.donate_btn = this.seekChild(this.main_view, "donate_btn", cc.Button);
    this.donate_btn.tips = this.seekChild(this.donate_btn.node, "tips");
    this.rank_btn = this.seekChild(this.main_view, "skill_btn", cc.Button);
    this.shop_container = this.seekChild(this.main_view, "shop_container"); //公会商店标签
 
    this.shop_container.notice = this.seekChild(this.main_view, "guild_shop_notice", cc.Label);
    this.shop_container.tips = this.seekChild(this.shop_container, "tips"); //红点状态
 
    this.shop_container.tips.active = false;
    this.shop_container.is_unlock = true; //解锁状态
 
    this.war_container = this.seekChild(this.main_view, "war_container");
    this.war_container.notice = this.seekChild(this.main_view, "guild_war_notice", cc.Label);
    this.war_container.tips = this.seekChild(this.war_container, "tips");
    this.war_container.is_unlock = false;
    this.war_container.notice.node.active = false;
    this.war_container.notice.string = Utils.TI18N("敬请期待");
    this.dungeon_container = this.seekChild(this.main_view, "dungeon_container");
    this.dungeon_container.notice = this.seekChild(this.main_view, "guild_dun_notice", cc.Label);
    this.dungeon_container.tips = this.seekChild(this.dungeon_container, "tips");
    this.dungeon_container.is_unlock = false;
    this.skill_container = this.seekChild(this.main_view, "voyage_container");
    this.skill_container.notice = this.seekChild(this.main_view, "guild_voyage_notice", cc.Label);
    this.skill_container.tips = this.seekChild(this.skill_container, "tips");
    this.skill_container.is_unlock = false;
    this.check_member_btn = this.seekChild(this.main_view, "rank_btn", cc.Button);
    this.recruit_btn = this.seekChild(this.main_view, "recruit_btn", cc.Button);
    this.checkapply_btn = this.seekChild(this.main_view, "checkapply_btn", cc.Button);
    this.joinset_btn = this.seekChild(this.main_view, "joinset_btn", cc.Button);
    this.checkapply_btn.tips = this.seekChild(this.checkapply_btn.node, "tips");
    this.guild_name_value = this.seekChild(this.main_view, "guild_name_value", cc.Label);
    this.guild_leader_value = this.seekChild(this.main_view, "guild_leader_value", cc.Label);
    this.guild_lev_value = this.seekChild(this.main_view, "guild_lev_value", cc.Label);
    this.guild_exp_value = this.seekChild(this.main_view, "guild_exp_value", cc.Label);
    this.guild_member_value = this.seekChild(this.main_view, "guild_member_value", cc.Label);
  },
  registerEvent: function registerEvent() {
    this.sign_btn.node.on("click", function () {
      this.ctrl.openGuildChangeSignWindow(true);
    }, this);
    this.change_name_btn.node.on("click", function () {
      this.ctrl.openGuildChangeNameWindow(true);
    }, this);
    this.action_goal_btn.node.on("click", function () {
      require("mall_controller").getInstance().openMallPanel(true, require("mall_const").MallType.UnionShop);
    }, this);
    this.redpacket_btn.node.on("click", function () {
      RedbagController.getInstance().openMainView(true);
    }, this);
    this.donate_btn.node.on("click", function () {
      this.ctrl.openGuildDonateWindow(true);
    }, this);
    this.rank_btn.node.on("click", function () {
      require("rank_controller").getInstance().openRankView(true, require("rank_constant").RankType.union);
    }, this);
    this.shop_container.on("click", function () {
      if (this.role_vo != null) {
        var lev = gdata("guild_quest_data", "data_guild_action_data", "open_glev").val;
        if (this.role_vo.guild_lev >= lev) this.ctrl.openGuildActionGoalWindow(true);else message(cc.js.formatStr(Utils.TI18N("联盟达到%d级后开启"), lev));
      }
    }, this);
    this.war_container.on("click", function () {
      require("mainui_controller").getInstance().requestOpenBattleRelevanceWindow(require("battle_const").Fight_Type.GuildWar); //清除掉联盟战开启的红点
 
 
      this.gw_model.updateGuildWarRedStatus(GuildConst.red_index.guildwar_start, false);
    }, this);
    this.dungeon_container.on("click", function () {
      require("mainui_controller").getInstance().requestOpenBattleRelevanceWindow(require("battle_const").Fight_Type.GuildDun);
    }, this);
    this.skill_container.on("click", function () {
      GuildskillController.getInstance().openGuildSkillMainWindow(true);
    }, this);
    this.check_member_btn.node.on("click", function () {
      this.ctrl.openGuildMemberWindow(true);
    }, this);
    this.recruit_btn.node.on("click", function () {
      this.ctrl.requestGuildRecruit();
    }, this);
    this.checkapply_btn.node.on("click", function () {
      this.ctrl.openGuildApplyWindow(true);
    }, this);
    this.joinset_btn.node.on("click", function () {
      this.ctrl.openGuildApplySetWindow(true);
    }, this);
 
    if (this.role_vo != null) {
      if (this.role_assets_event == null) {
        this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
          if (key == "position") this.updateJurisdiction();
        }, this);
      }
    }
 
    this.addGlobalEvent(GuildEvent.UpdateGuildRedStatus, function (type, status) {
      this.updateSomeRedStatus(type, status);
    }, this); //监听开服天数变化
 
    this.addGlobalEvent(RoleEvent.OPEN_SRV_DAY, function (type, status) {
      this.checkGuildWarStatus();
    }, this);
  },
  openRootWnd: function openRootWnd() {
    if (this.my_guild_info == null) {
      this.my_guild_info = this.model.getMyGuildInfo();
 
      if (this.my_guild_info != null) {
        this.addGlobalEvent(GuildEvent.UpdateMyInfoEvent, function (key, value) {
          if (key == "sign") {
            this.updateGuildSignInfo();
          } else if (key == "members_num") {
            this.updateGuildMemberInfo();
          } else if (key == "lev" || key == "exp") {
            this.updateGuildBaseInfo();
          } else if (key == "name") {
            this.updateGuildNameInfo();
          } else if (key == "leader_name") {
            this.updateGuildLeaderInfo();
          }
        }, this);
      }
 
      this.updateGuildNameInfo();
      this.updateGuildSignInfo();
      this.updateGuildBaseInfo();
      this.updateGuildLeaderInfo();
      this.updateGuildMemberInfo();
      this.updateSomeRedStatus();
    }
 
    this.updateJurisdiction();
  },
  //一些权限控制
  updateJurisdiction: function updateJurisdiction() {
    if (this.role_vo == null) return;
 
    if (this.role_vo.position == GuildConst.post_type.member) {
      this.sign_btn.node.active = false;
      this.change_name_btn.node.active = false;
      Utils.setGreyButton(this.joinset_btn, true);
      Utils.setGreyButton(this.recruit_btn, true);
      Utils.setGreyButton(this.checkapply_btn, true);
    } else {
      this.sign_btn.node.active = true;
      this.change_name_btn.node.active = true;
      Utils.setGreyButton(this.joinset_btn, false);
      Utils.setGreyButton(this.recruit_btn, false);
      Utils.setGreyButton(this.checkapply_btn, false);
    }
  },
  //更新宣言
  updateGuildSignInfo: function updateGuildSignInfo() {
    if (this.my_guild_info == null) return;
    this.guild_sign_value.string = this.my_guild_info.sign;
  },
  //更新基础信息,等级,经验,成员数量,都是和等级相关的,所以在这里统一处理
  updateGuildBaseInfo: function updateGuildBaseInfo() {
    if (this.my_guild_info == null) return;
    this.guild_lev_value.string = cc.js.formatStr("%s级", this.my_guild_info.lev);
    var config = gdata("guild_data", "data_guild_lev", [this.my_guild_info.lev]);
 
    if (config != null) {
      if (config.exp == 0) this.guild_lev_value.string = Utils.TI18N("已满级");else this.guild_exp_value.string = cc.js.formatStr("%s/%s", this.my_guild_info.exp, config.exp);
    }
 
    this.guild_member_value.string = cc.js.formatStr("%s/%s", this.my_guild_info.members_num, this.my_guild_info.members_max); //一些按钮权限开启的东西
 
    this.checkGuildDunLockStatus();
    this.checkGuildWarStatus();
  },
  //更新公会名称
  updateGuildNameInfo: function updateGuildNameInfo() {
    if (this.my_guild_info == null) return;
    this.guild_name_value.string = this.my_guild_info.name;
  },
  //监测公会副本开启状态
  checkGuildDunLockStatus: function checkGuildDunLockStatus() {
    var is_unlock = false;
 
    if (this.dungeon_container.is_unlock == false) {
      var config = gdata("guild_dun_data", "data_const", "guild_lev");
 
      if (config) {
        is_unlock = this.my_guild_info && this.my_guild_info.lev >= config.val;
        this.dungeon_container.is_unlock = is_unlock;
        this.dungeon_container.notice.node.active = !is_unlock;
        Utils.setGreyButton(this.dungeon_container.getComponent(cc.Button), !is_unlock);
        if (is_unlock == false) this.dungeon_container.notice.string = config.desc;
      }
    }
  },
  //公会战开启状态
  checkGuildWarStatus: function checkGuildWarStatus() {
    var is_unlock = false;
 
    if (this.war_container.is_unlock == false) {
      var config_lv = gdata("guild_war_data", "data_const", "limit_lev"); //公会等级显示
 
      var config_day = gdata("guild_war_data", "data_const", "limit_open_time"); //开服天数限制
 
      if (config_lv && config_day) {
        is_unlock = this.my_guild_info && this.my_guild_info.lev >= config_lv.val;
        var tips_str = "";
 
        if (is_unlock == true) {
          var open_srv_day = RoleController.getInstance().getModel().getOpenSrvDay();
          is_unlock = open_srv_day > config_day.val;
          tips_str = config_day.desc;
        } else tips_str = config_lv.desc;
 
        if (IS_SHOW_CHARGE == false) {
          is_unlock = false;
          tips_str = Utils.TI18N("敬请期待!");
        }
 
        this.war_container.is_unlock = is_unlock;
        this.war_container.notice.node.active = !is_unlock;
        Utils.setGreyButton(this.war_container.getComponent(cc.Button), !is_unlock);
        if (is_unlock == false) this.war_container.notice.string = tips_str;
      }
    }
  },
  //更新公会帮主
  updateGuildLeaderInfo: function updateGuildLeaderInfo() {
    if (this.my_guild_info == null) return;
    this.guild_leader_value.string = this.my_guild_info.leader_name;
  },
  //更新成员数量
  updateGuildMemberInfo: function updateGuildMemberInfo() {
    if (this.my_guild_info == null) return;
    this.guild_member_value.string = cc.js.formatStr("%s/%s", this.my_guild_info.members_num, this.my_guild_info.members_max);
  },
  //更新红点状态,如果type未指定,则全部更新
  updateSomeRedStatus: function updateSomeRedStatus(type, status) {
    var red_status = false;
 
    if (type == GuildConst.red_index.apply) {
      this.checkapply_btn.tips.active = status;
    } else if (type == GuildConst.red_index.boss_times) {
      red_status = this.gb_model.checkGuildDunRedStatus();
      this.dungeon_container.tips.active = red_status;
    } else if (type == GuildConst.red_index.donate || type == GuildConst.red_index.donate_activity) {
      red_status = this.model.getDonateRedStatus();
      this.donate_btn.tips.active = red_status;
    } else if (type == GuildConst.red_index.skill_2 || type == GuildConst.red_index.skill_3 || type == GuildConst.red_index.skill_4 || type == GuildConst.red_index.skill_5) {
      this.skill_container.tips.active = this.skill_model.getRedTotalStatus();
    } else if (type == GuildConst.red_index.red_bag) {
      this.redpacket_btn.tips.active = status;
    } else if (type == GuildConst.red_index.goal_action) {
      this.shop_container.tips.active = status;
    } else if (type == GuildConst.red_index.guildwar_start || type == GuildConst.red_index.guildwar_match || type == GuildConst.red_index.guildwar_count) {
      this.war_container.tips.active = this.gw_model.checkGuildGuildWarRedStatus();
    } else {
      this.checkapply_btn.tips.active = this.model.getRedStatus(GuildConst.red_index.apply);
      this.donate_btn.tips.active = this.model.getDonateRedStatus();
      this.dungeon_container.tips.active = this.gb_model.checkGuildDunRedStatus();
      this.war_container.tips.active = this.gw_model.checkGuildGuildWarRedStatus();
      this.skill_container.tips.active = this.skill_model.getRedTotalStatus();
      this.redpacket_btn.tips.active = this.redbag_model.getAllRedBagStatus();
      this.shop_container.tips.active = this.model.getGoalRedStatus();
    }
  },
  closeCallBack: function closeCallBack() {
    if (this.role_vo != null) {
      if (this.role_assets_event != null) {
        this.role_vo.unbind(this.role_assets_event);
        this.role_assets_event = null;
      }
 
      this.role_vo = null;
    }
 
    this.ctrl.openGuildMainWindow(false);
  }
});
module.exports = TaskMainWindow;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxndWlsZFxcdmlld1xcZ3VpbGRfbWFpbl93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiR3VpbGRDb250cm9sbGVyIiwiR3VpbGRCb3NzQ29udHJvbGxlciIsIkd1aWxkc2tpbGxDb250cm9sbGVyIiwiUmVkYmFnQ29udHJvbGxlciIsIkd1aWxkV2FyQ29udHJvbGxlciIsIlJvbGVDb250cm9sbGVyIiwiR3VpbGRDb25zdCIsIkd1aWxkRXZlbnQiLCJSb2xlRXZlbnQiLCJUYXNrTWFpbldpbmRvdyIsImNjIiwiQ2xhc3MiLCJCYXNlVmlldyIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsIndpbl90eXBlIiwiV2luVHlwZSIsIkZ1bGwiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwidWkiLCJybGVhc2VQcmVmYWIiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJtb2RlbCIsImdldE1vZGVsIiwicm9sZV92byIsImdldFJvbGVWbyIsImdiX21vZGVsIiwic2tpbGxfbW9kZWwiLCJyZWRiYWdfbW9kZWwiLCJnd19tb2RlbCIsIm9wZW5DYWxsQmFjayIsIm1haW5fY29udGFpbmVyIiwic2Vla0NoaWxkIiwibWFpbl9wYW5lbCIsIm1haW5fdmlldyIsInNpZ25fYnRuIiwiQnV0dG9uIiwiZ3VpbGRfc2lnbl92YWx1ZSIsIkxhYmVsIiwiYmFja2dyb3VuZCIsInNjYWxlIiwiRklUX1NDQUxFIiwibG9hZFJlcyIsImdldEJpZ0JnIiwicmVzIiwiZ2V0Q29tcG9uZW50IiwiU3ByaXRlIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwiY2hhbmdlX25hbWVfYnRuIiwiYWN0aW9uX2dvYWxfYnRuIiwicmVkcGFja2V0X2J0biIsInRpcHMiLCJub2RlIiwiZG9uYXRlX2J0biIsInJhbmtfYnRuIiwic2hvcF9jb250YWluZXIiLCJub3RpY2UiLCJhY3RpdmUiLCJpc191bmxvY2siLCJ3YXJfY29udGFpbmVyIiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsImR1bmdlb25fY29udGFpbmVyIiwic2tpbGxfY29udGFpbmVyIiwiY2hlY2tfbWVtYmVyX2J0biIsInJlY3J1aXRfYnRuIiwiY2hlY2thcHBseV9idG4iLCJqb2luc2V0X2J0biIsImd1aWxkX25hbWVfdmFsdWUiLCJndWlsZF9sZWFkZXJfdmFsdWUiLCJndWlsZF9sZXZfdmFsdWUiLCJndWlsZF9leHBfdmFsdWUiLCJndWlsZF9tZW1iZXJfdmFsdWUiLCJyZWdpc3RlckV2ZW50Iiwib24iLCJvcGVuR3VpbGRDaGFuZ2VTaWduV2luZG93Iiwib3Blbkd1aWxkQ2hhbmdlTmFtZVdpbmRvdyIsIm9wZW5NYWxsUGFuZWwiLCJNYWxsVHlwZSIsIlVuaW9uU2hvcCIsIm9wZW5NYWluVmlldyIsIm9wZW5HdWlsZERvbmF0ZVdpbmRvdyIsIm9wZW5SYW5rVmlldyIsIlJhbmtUeXBlIiwidW5pb24iLCJsZXYiLCJnZGF0YSIsInZhbCIsImd1aWxkX2xldiIsIm9wZW5HdWlsZEFjdGlvbkdvYWxXaW5kb3ciLCJtZXNzYWdlIiwianMiLCJmb3JtYXRTdHIiLCJyZXF1ZXN0T3BlbkJhdHRsZVJlbGV2YW5jZVdpbmRvdyIsIkZpZ2h0X1R5cGUiLCJHdWlsZFdhciIsInVwZGF0ZUd1aWxkV2FyUmVkU3RhdHVzIiwicmVkX2luZGV4IiwiZ3VpbGR3YXJfc3RhcnQiLCJHdWlsZER1biIsIm9wZW5HdWlsZFNraWxsTWFpbldpbmRvdyIsIm9wZW5HdWlsZE1lbWJlcldpbmRvdyIsInJlcXVlc3RHdWlsZFJlY3J1aXQiLCJvcGVuR3VpbGRBcHBseVdpbmRvdyIsIm9wZW5HdWlsZEFwcGx5U2V0V2luZG93Iiwicm9sZV9hc3NldHNfZXZlbnQiLCJFdmVudElkIiwiVVBEQVRFX1JPTEVfQVRUUklCVVRFIiwia2V5IiwidmFsdWUiLCJ1cGRhdGVKdXJpc2RpY3Rpb24iLCJhZGRHbG9iYWxFdmVudCIsIlVwZGF0ZUd1aWxkUmVkU3RhdHVzIiwidHlwZSIsInN0YXR1cyIsInVwZGF0ZVNvbWVSZWRTdGF0dXMiLCJPUEVOX1NSVl9EQVkiLCJjaGVja0d1aWxkV2FyU3RhdHVzIiwib3BlblJvb3RXbmQiLCJteV9ndWlsZF9pbmZvIiwiZ2V0TXlHdWlsZEluZm8iLCJVcGRhdGVNeUluZm9FdmVudCIsInVwZGF0ZUd1aWxkU2lnbkluZm8iLCJ1cGRhdGVHdWlsZE1lbWJlckluZm8iLCJ1cGRhdGVHdWlsZEJhc2VJbmZvIiwidXBkYXRlR3VpbGROYW1lSW5mbyIsInVwZGF0ZUd1aWxkTGVhZGVySW5mbyIsInBvc2l0aW9uIiwicG9zdF90eXBlIiwibWVtYmVyIiwic2V0R3JleUJ1dHRvbiIsInNpZ24iLCJjb25maWciLCJleHAiLCJtZW1iZXJzX251bSIsIm1lbWJlcnNfbWF4IiwiY2hlY2tHdWlsZER1bkxvY2tTdGF0dXMiLCJuYW1lIiwiZGVzYyIsImNvbmZpZ19sdiIsImNvbmZpZ19kYXkiLCJ0aXBzX3N0ciIsIm9wZW5fc3J2X2RheSIsImdldE9wZW5TcnZEYXkiLCJJU19TSE9XX0NIQVJHRSIsImxlYWRlcl9uYW1lIiwicmVkX3N0YXR1cyIsImFwcGx5IiwiYm9zc190aW1lcyIsImNoZWNrR3VpbGREdW5SZWRTdGF0dXMiLCJkb25hdGUiLCJkb25hdGVfYWN0aXZpdHkiLCJnZXREb25hdGVSZWRTdGF0dXMiLCJza2lsbF8yIiwic2tpbGxfMyIsInNraWxsXzQiLCJza2lsbF81IiwiZ2V0UmVkVG90YWxTdGF0dXMiLCJyZWRfYmFnIiwiZ29hbF9hY3Rpb24iLCJndWlsZHdhcl9tYXRjaCIsImd1aWxkd2FyX2NvdW50IiwiY2hlY2tHdWlsZEd1aWxkV2FyUmVkU3RhdHVzIiwiZ2V0UmVkU3RhdHVzIiwiZ2V0QWxsUmVkQmFnU3RhdHVzIiwiZ2V0R29hbFJlZFN0YXR1cyIsImNsb3NlQ2FsbEJhY2siLCJ1bmJpbmQiLCJvcGVuR3VpbGRNYWluV2luZG93IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtB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LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBAYXV0aG9yOiBzaGlyYWhvQHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXHJcbi8vIEBkZXNjcmlwdGlvbjpcclxuLy8gICAgICDlhazkvJrkuLvnqpfkvZNcclxuLy8gPGJyLz5DcmVhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xyXG52YXIgR3VpbGRDb250cm9sbGVyID0gcmVxdWlyZShcImd1aWxkX2NvbnRyb2xsZXJcIik7XHJcbnZhciBHdWlsZEJvc3NDb250cm9sbGVyID0gcmVxdWlyZShcImd1aWxkYm9zc19jb250cm9sbGVyXCIpO1xyXG52YXIgR3VpbGRza2lsbENvbnRyb2xsZXIgPSByZXF1aXJlKFwiZ3VpbGRza2lsbF9jb250cm9sbGVyXCIpO1xyXG52YXIgUmVkYmFnQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyZWRiYWdfY29udHJvbGxlclwiKTtcclxudmFyIEd1aWxkV2FyQ29udHJvbGxlciA9IHJlcXVpcmUoXCJndWlsZHdhcl9jb250cm9sbGVyXCIpO1xyXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xyXG52YXIgR3VpbGRDb25zdCA9IHJlcXVpcmUoXCJndWlsZF9jb25zdFwiKTtcclxudmFyIEd1aWxkRXZlbnQgPSByZXF1aXJlKFwiZ3VpbGRfZXZlbnRcIik7XHJcbnZhciBSb2xlRXZlbnQgPSByZXF1aXJlKFwicm9sZV9ldmVudFwiKTtcclxuXHJcbnZhciBUYXNrTWFpbldpbmRvdyA9IGNjLkNsYXNzKHtcclxuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxyXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJndWlsZFwiLCBcImd1aWxkX21haW5fd2luZG93XCIpO1xyXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkZ1bGw7XHJcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLnVpOyAgICAgICAgICAgICAgICAvL+ivpeeql+S9k+aJgOWxnnVp5bGC57qnLOWFqOWxj3Vp6ZyA6KaB5ZyodWnlsYIs6Z2e5YWo5bGPdWnlnKhkaWFsb2d1ZeWxgizov5nkuKropoHms6jmhI9cclxuICAgICAgICB0aGlzLnJsZWFzZVByZWZhYiA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmN0cmwgPSBHdWlsZENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcclxuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdHJsLmdldE1vZGVsKCk7XHJcbiAgICAgICAgdGhpcy5yb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcclxuICAgICAgICB0aGlzLmdiX21vZGVsID0gR3VpbGRCb3NzQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCk7XHJcbiAgICAgICAgdGhpcy5za2lsbF9tb2RlbCA9IEd1aWxkc2tpbGxDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKTtcclxuICAgICAgICB0aGlzLnJlZGJhZ19tb2RlbCA9IFJlZGJhZ0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpO1xyXG4gICAgICAgIHRoaXMuZ3dfbW9kZWwgPSBHdWlsZFdhckNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpO1xyXG4gICAgfSxcclxuXHJcblxyXG5cclxuICAgIG9wZW5DYWxsQmFjazogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtYWluX2NvbnRhaW5lciA9IHRoaXMuc2Vla0NoaWxkKFwibWFpbl9jb250YWluZXJcIik7XHJcbiAgICAgICAgdmFyIG1haW5fcGFuZWwgPSB0aGlzLnNlZWtDaGlsZChtYWluX2NvbnRhaW5lciwgXCJtYWluX3BhbmVsXCIpO1xyXG4gICAgICAgIHRoaXMubWFpbl92aWV3ID0gdGhpcy5zZWVrQ2hpbGQobWFpbl9wYW5lbCwgXCJjb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5zaWduX2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcInNpZ25fYnRuXCIsIGNjLkJ1dHRvbik7XHJcbiAgICAgICAgdGhpcy5ndWlsZF9zaWduX3ZhbHVlID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3ZpZXcsIFwiZ3VpbGRfc2lnbl92YWx1ZVwiLCBjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5zZWVrQ2hpbGQoXCJiYWNrZ3JvdW5kXCIpO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSA9IEZJVF9TQ0FMRTtcclxuICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0QmlnQmcoXCJiaWdiZ18yXCIpLGZ1bmN0aW9uKHJlcyl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHJlc1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSlcclxuICAgICAgICB0aGlzLmNoYW5nZV9uYW1lX2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcImNoYW5nZV9uYW1lX2J0blwiLCBjYy5CdXR0b24pO1xyXG5cclxuICAgICAgICB0aGlzLmFjdGlvbl9nb2FsX2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcImFjdGlvbl9nb2FsX2J0blwiLCBjYy5CdXR0b24pO1xyXG4gICAgICAgIHRoaXMucmVkcGFja2V0X2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcInJlZHBhY2tldF9idG5cIiwgY2MuQnV0dG9uKTtcclxuICAgICAgICB0aGlzLnJlZHBhY2tldF9idG4udGlwcyA9IHRoaXMuc2Vla0NoaWxkKHRoaXMucmVkcGFja2V0X2J0bi5ub2RlLCBcInRpcHNcIik7XHJcbiAgICAgICAgdGhpcy5kb25hdGVfYnRuID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3ZpZXcsIFwiZG9uYXRlX2J0blwiLCBjYy5CdXR0b24pO1xyXG4gICAgICAgIHRoaXMuZG9uYXRlX2J0bi50aXBzID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5kb25hdGVfYnRuLm5vZGUsIFwidGlwc1wiKTtcclxuICAgICAgICB0aGlzLnJhbmtfYnRuID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3ZpZXcsIFwic2tpbGxfYnRuXCIsIGNjLkJ1dHRvbik7XHJcblxyXG4gICAgICAgIHRoaXMuc2hvcF9jb250YWluZXIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fdmlldywgXCJzaG9wX2NvbnRhaW5lclwiKTsvL+WFrOS8muWVhuW6l+agh+etvlxyXG4gICAgICAgIHRoaXMuc2hvcF9jb250YWluZXIubm90aWNlID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3ZpZXcsIFwiZ3VpbGRfc2hvcF9ub3RpY2VcIiwgY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMuc2hvcF9jb250YWluZXIudGlwcyA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuc2hvcF9jb250YWluZXIsIFwidGlwc1wiKTsvL+e6oueCueeKtuaAgVxyXG4gICAgICAgIHRoaXMuc2hvcF9jb250YWluZXIudGlwcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3BfY29udGFpbmVyLmlzX3VubG9jayA9IHRydWU7Ly/op6PplIHnirbmgIFcclxuXHJcbiAgICAgICAgdGhpcy53YXJfY29udGFpbmVyID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3ZpZXcsIFwid2FyX2NvbnRhaW5lclwiKTtcclxuICAgICAgICB0aGlzLndhcl9jb250YWluZXIubm90aWNlID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3ZpZXcsIFwiZ3VpbGRfd2FyX25vdGljZVwiLCBjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy53YXJfY29udGFpbmVyLnRpcHMgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLndhcl9jb250YWluZXIsIFwidGlwc1wiKTtcclxuICAgICAgICB0aGlzLndhcl9jb250YWluZXIuaXNfdW5sb2NrID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53YXJfY29udGFpbmVyLm5vdGljZS5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2FyX2NvbnRhaW5lci5ub3RpY2Uuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmlazor7fmnJ/lvoVcIik7XHJcblxyXG4gICAgICAgIHRoaXMuZHVuZ2Vvbl9jb250YWluZXIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fdmlldywgXCJkdW5nZW9uX2NvbnRhaW5lclwiKTtcclxuICAgICAgICB0aGlzLmR1bmdlb25fY29udGFpbmVyLm5vdGljZSA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcImd1aWxkX2R1bl9ub3RpY2VcIiwgY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMuZHVuZ2Vvbl9jb250YWluZXIudGlwcyA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuZHVuZ2Vvbl9jb250YWluZXIsIFwidGlwc1wiKTtcclxuICAgICAgICB0aGlzLmR1bmdlb25fY29udGFpbmVyLmlzX3VubG9jayA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNraWxsX2NvbnRhaW5lciA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcInZveWFnZV9jb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5za2lsbF9jb250YWluZXIubm90aWNlID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3ZpZXcsIFwiZ3VpbGRfdm95YWdlX25vdGljZVwiLCBjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5za2lsbF9jb250YWluZXIudGlwcyA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuc2tpbGxfY29udGFpbmVyLCBcInRpcHNcIik7XHJcbiAgICAgICAgdGhpcy5za2lsbF9jb250YWluZXIuaXNfdW5sb2NrID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tfbWVtYmVyX2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcInJhbmtfYnRuXCIsIGNjLkJ1dHRvbik7XHJcbiAgICAgICAgdGhpcy5yZWNydWl0X2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcInJlY3J1aXRfYnRuXCIsIGNjLkJ1dHRvbik7XHJcbiAgICAgICAgdGhpcy5jaGVja2FwcGx5X2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcImNoZWNrYXBwbHlfYnRuXCIsIGNjLkJ1dHRvbik7XHJcbiAgICAgICAgdGhpcy5qb2luc2V0X2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcImpvaW5zZXRfYnRuXCIsIGNjLkJ1dHRvbik7XHJcbiAgICAgICAgdGhpcy5jaGVja2FwcGx5X2J0bi50aXBzID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5jaGVja2FwcGx5X2J0bi5ub2RlLCBcInRpcHNcIik7XHJcblxyXG4gICAgICAgIHRoaXMuZ3VpbGRfbmFtZV92YWx1ZSA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcImd1aWxkX25hbWVfdmFsdWVcIiwgY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRfbGVhZGVyX3ZhbHVlID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3ZpZXcsIFwiZ3VpbGRfbGVhZGVyX3ZhbHVlXCIsIGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLmd1aWxkX2xldl92YWx1ZSA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl92aWV3LCBcImd1aWxkX2xldl92YWx1ZVwiLCBjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5ndWlsZF9leHBfdmFsdWUgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fdmlldywgXCJndWlsZF9leHBfdmFsdWVcIiwgY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRfbWVtYmVyX3ZhbHVlID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3ZpZXcsIFwiZ3VpbGRfbWVtYmVyX3ZhbHVlXCIsIGNjLkxhYmVsKTtcclxuXHJcblxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuc2lnbl9idG4ubm9kZS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5HdWlsZENoYW5nZVNpZ25XaW5kb3codHJ1ZSk7XHJcbiAgICAgICAgfSwgdGhpcylcclxuICAgICAgICB0aGlzLmNoYW5nZV9uYW1lX2J0bi5ub2RlLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN0cmwub3Blbkd1aWxkQ2hhbmdlTmFtZVdpbmRvdyh0cnVlKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgIHRoaXMuYWN0aW9uX2dvYWxfYnRuLm5vZGUub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJlcXVpcmUoXCJtYWxsX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5vcGVuTWFsbFBhbmVsKHRydWUsIHJlcXVpcmUoXCJtYWxsX2NvbnN0XCIpLk1hbGxUeXBlLlVuaW9uU2hvcCk7XHJcbiAgICAgICAgfSwgdGhpcylcclxuICAgICAgICB0aGlzLnJlZHBhY2tldF9idG4ubm9kZS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgUmVkYmFnQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5NYWluVmlldyh0cnVlKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgIHRoaXMuZG9uYXRlX2J0bi5ub2RlLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN0cmwub3Blbkd1aWxkRG9uYXRlV2luZG93KHRydWUpO1xyXG4gICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgdGhpcy5yYW5rX2J0bi5ub2RlLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXF1aXJlKFwicmFua19jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkub3BlblJhbmtWaWV3KHRydWUsIHJlcXVpcmUoXCJyYW5rX2NvbnN0YW50XCIpLlJhbmtUeXBlLnVuaW9uKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgIHRoaXMuc2hvcF9jb250YWluZXIub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvbGVfdm8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxldiA9IGdkYXRhKFwiZ3VpbGRfcXVlc3RfZGF0YVwiLCBcImRhdGFfZ3VpbGRfYWN0aW9uX2RhdGFcIiwgXCJvcGVuX2dsZXZcIikudmFsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm9sZV92by5ndWlsZF9sZXYgPj0gbGV2KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuR3VpbGRBY3Rpb25Hb2FsV2luZG93KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UoY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi6IGU55uf6L6+5YiwJWTnuqflkI7lvIDlkK9cIiksIGxldikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcylcclxuICAgICAgICB0aGlzLndhcl9jb250YWluZXIub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLnJlcXVlc3RPcGVuQmF0dGxlUmVsZXZhbmNlV2luZG93KHJlcXVpcmUoXCJiYXR0bGVfY29uc3RcIikuRmlnaHRfVHlwZS5HdWlsZFdhcik7XHJcbiAgICAgICAgICAgIC8v5riF6Zmk5o6J6IGU55uf5oiY5byA5ZCv55qE57qi54K5XHJcbiAgICAgICAgICAgIHRoaXMuZ3dfbW9kZWwudXBkYXRlR3VpbGRXYXJSZWRTdGF0dXMoR3VpbGRDb25zdC5yZWRfaW5kZXguZ3VpbGR3YXJfc3RhcnQsIGZhbHNlKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgIHRoaXMuZHVuZ2Vvbl9jb250YWluZXIub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLnJlcXVlc3RPcGVuQmF0dGxlUmVsZXZhbmNlV2luZG93KHJlcXVpcmUoXCJiYXR0bGVfY29uc3RcIikuRmlnaHRfVHlwZS5HdWlsZER1bik7XHJcbiAgICAgICAgfSwgdGhpcylcclxuICAgICAgICB0aGlzLnNraWxsX2NvbnRhaW5lci5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgR3VpbGRza2lsbENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuR3VpbGRTa2lsbE1haW5XaW5kb3codHJ1ZSk7XHJcbiAgICAgICAgfSwgdGhpcylcclxuICAgICAgICB0aGlzLmNoZWNrX21lbWJlcl9idG4ubm9kZS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5HdWlsZE1lbWJlcldpbmRvdyh0cnVlKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgIHRoaXMucmVjcnVpdF9idG4ubm9kZS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdHJsLnJlcXVlc3RHdWlsZFJlY3J1aXQoKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgIHRoaXMuY2hlY2thcHBseV9idG4ubm9kZS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5HdWlsZEFwcGx5V2luZG93KHRydWUpO1xyXG4gICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgdGhpcy5qb2luc2V0X2J0bi5ub2RlLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN0cmwub3Blbkd1aWxkQXBwbHlTZXRXaW5kb3codHJ1ZSk7XHJcbiAgICAgICAgfSwgdGhpcylcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucm9sZV92byAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvbGVfYXNzZXRzX2V2ZW50ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09IFwicG9zaXRpb25cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVKdXJpc2RpY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoR3VpbGRFdmVudC5VcGRhdGVHdWlsZFJlZFN0YXR1cywgZnVuY3Rpb24gKHR5cGUsIHN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNvbWVSZWRTdGF0dXModHlwZSwgc3RhdHVzKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG5cclxuICAgICAgICAvL+ebkeWQrOW8gOacjeWkqeaVsOWPmOWMllxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoUm9sZUV2ZW50Lk9QRU5fU1JWX0RBWSwgZnVuY3Rpb24gKHR5cGUsIHN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrR3VpbGRXYXJTdGF0dXMoKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG4gICAgfSxcclxuXHJcblxyXG5cclxuICAgIG9wZW5Sb290V25kOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubXlfZ3VpbGRfaW5mbyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXlfZ3VpbGRfaW5mbyA9IHRoaXMubW9kZWwuZ2V0TXlHdWlsZEluZm8oKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubXlfZ3VpbGRfaW5mbyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEd1aWxkRXZlbnQuVXBkYXRlTXlJbmZvRXZlbnQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PSBcInNpZ25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUd1aWxkU2lnbkluZm8oKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSBcIm1lbWJlcnNfbnVtXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHdWlsZE1lbWJlckluZm8oKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSBcImxldlwiIHx8IGtleSA9PSBcImV4cFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR3VpbGRCYXNlSW5mbygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09IFwibmFtZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR3VpbGROYW1lSW5mbygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09IFwibGVhZGVyX25hbWVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUd1aWxkTGVhZGVySW5mbygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlR3VpbGROYW1lSW5mbygpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUd1aWxkU2lnbkluZm8oKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVHdWlsZEJhc2VJbmZvKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlR3VpbGRMZWFkZXJJbmZvKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlR3VpbGRNZW1iZXJJbmZvKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU29tZVJlZFN0YXR1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZUp1cmlzZGljdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvL+S4gOS6m+adg+mZkOaOp+WItlxyXG4gICAgdXBkYXRlSnVyaXNkaWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucm9sZV92byA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvLnBvc2l0aW9uID09IEd1aWxkQ29uc3QucG9zdF90eXBlLm1lbWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNpZ25fYnRuLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlX25hbWVfYnRuLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5qb2luc2V0X2J0biwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5yZWNydWl0X2J0biwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5jaGVja2FwcGx5X2J0biwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaWduX2J0bi5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlX25hbWVfYnRuLm5vZGUuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgVXRpbHMuc2V0R3JleUJ1dHRvbih0aGlzLmpvaW5zZXRfYnRuLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5yZWNydWl0X2J0biwgZmFsc2UpO1xyXG4gICAgICAgICAgICBVdGlscy5zZXRHcmV5QnV0dG9uKHRoaXMuY2hlY2thcHBseV9idG4sIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5pu05paw5a6j6KiAXHJcbiAgICB1cGRhdGVHdWlsZFNpZ25JbmZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubXlfZ3VpbGRfaW5mbyA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB0aGlzLmd1aWxkX3NpZ25fdmFsdWUuc3RyaW5nID0gdGhpcy5teV9ndWlsZF9pbmZvLnNpZ247XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5pu05paw5Z+656GA5L+h5oGv77yM562J57qn77yM57uP6aqM77yM5oiQ5ZGY5pWw6YeP77yM6YO95piv5ZKM562J57qn55u45YWz55qE77yM5omA5Lul5Zyo6L+Z6YeM57uf5LiA5aSE55CGXHJcbiAgICB1cGRhdGVHdWlsZEJhc2VJbmZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubXlfZ3VpbGRfaW5mbyA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB0aGlzLmd1aWxkX2xldl92YWx1ZS5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoXCIlc+e6p1wiLCB0aGlzLm15X2d1aWxkX2luZm8ubGV2KTtcclxuICAgICAgICB2YXIgY29uZmlnID0gZ2RhdGEoXCJndWlsZF9kYXRhXCIsIFwiZGF0YV9ndWlsZF9sZXZcIiwgW3RoaXMubXlfZ3VpbGRfaW5mby5sZXZdKTtcclxuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5leHAgPT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3VpbGRfbGV2X3ZhbHVlLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5bey5ruh57qnXCIpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmd1aWxkX2V4cF92YWx1ZS5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoXCIlcy8lc1wiLCB0aGlzLm15X2d1aWxkX2luZm8uZXhwLCBjb25maWcuZXhwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ndWlsZF9tZW1iZXJfdmFsdWUuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFwiJXMvJXNcIiwgdGhpcy5teV9ndWlsZF9pbmZvLm1lbWJlcnNfbnVtLCB0aGlzLm15X2d1aWxkX2luZm8ubWVtYmVyc19tYXgpXHJcbiAgICAgICAgLy/kuIDkupvmjInpkq7mnYPpmZDlvIDlkK/nmoTkuJzopb9cclxuICAgICAgICB0aGlzLmNoZWNrR3VpbGREdW5Mb2NrU3RhdHVzKCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0d1aWxkV2FyU3RhdHVzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5pu05paw5YWs5Lya5ZCN56ewXHJcbiAgICB1cGRhdGVHdWlsZE5hbWVJbmZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubXlfZ3VpbGRfaW5mbyA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB0aGlzLmd1aWxkX25hbWVfdmFsdWUuc3RyaW5nID0gdGhpcy5teV9ndWlsZF9pbmZvLm5hbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8v55uR5rWL5YWs5Lya5Ymv5pys5byA5ZCv54q25oCBXHJcbiAgICBjaGVja0d1aWxkRHVuTG9ja1N0YXR1czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpc191bmxvY2sgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5kdW5nZW9uX2NvbnRhaW5lci5pc191bmxvY2sgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGdkYXRhKFwiZ3VpbGRfZHVuX2RhdGFcIiwgXCJkYXRhX2NvbnN0XCIsIFwiZ3VpbGRfbGV2XCIpO1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBpc191bmxvY2sgPSB0aGlzLm15X2d1aWxkX2luZm8gJiYgdGhpcy5teV9ndWlsZF9pbmZvLmxldiA+PSBjb25maWcudmFsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kdW5nZW9uX2NvbnRhaW5lci5pc191bmxvY2sgPSBpc191bmxvY2s7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmR1bmdlb25fY29udGFpbmVyLm5vdGljZS5ub2RlLmFjdGl2ZSA9ICFpc191bmxvY2s7XHJcbiAgICAgICAgICAgICAgICBVdGlscy5zZXRHcmV5QnV0dG9uKHRoaXMuZHVuZ2Vvbl9jb250YWluZXIuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbiksICFpc191bmxvY2spO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzX3VubG9jayA9PSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmR1bmdlb25fY29udGFpbmVyLm5vdGljZS5zdHJpbmcgPSBjb25maWcuZGVzYztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/lhazkvJrmiJjlvIDlkK/nirbmgIFcclxuICAgIGNoZWNrR3VpbGRXYXJTdGF0dXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaXNfdW5sb2NrID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMud2FyX2NvbnRhaW5lci5pc191bmxvY2sgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZ19sdiA9IGdkYXRhKFwiZ3VpbGRfd2FyX2RhdGFcIiwgXCJkYXRhX2NvbnN0XCIsIFwibGltaXRfbGV2XCIpOyAgIC8v5YWs5Lya562J57qn5pi+56S6XHJcbiAgICAgICAgICAgIHZhciBjb25maWdfZGF5ID0gZ2RhdGEoXCJndWlsZF93YXJfZGF0YVwiLCBcImRhdGFfY29uc3RcIiwgXCJsaW1pdF9vcGVuX3RpbWVcIik7ICAgIC8v5byA5pyN5aSp5pWw6ZmQ5Yi2XHJcbiAgICAgICAgICAgIGlmIChjb25maWdfbHYgJiYgY29uZmlnX2RheSkge1xyXG4gICAgICAgICAgICAgICAgaXNfdW5sb2NrID0gdGhpcy5teV9ndWlsZF9pbmZvICYmIHRoaXMubXlfZ3VpbGRfaW5mby5sZXYgPj0gY29uZmlnX2x2LnZhbDtcclxuICAgICAgICAgICAgICAgIHZhciB0aXBzX3N0ciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNfdW5sb2NrID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgb3Blbl9zcnZfZGF5ID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldE9wZW5TcnZEYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpc191bmxvY2sgPSBvcGVuX3Nydl9kYXkgPiBjb25maWdfZGF5LnZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aXBzX3N0ciA9IGNvbmZpZ19kYXkuZGVzYztcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRpcHNfc3RyID0gY29uZmlnX2x2LmRlc2M7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKElTX1NIT1dfQ0hBUkdFID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNfdW5sb2NrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGlwc19zdHIgPSBVdGlscy5USTE4TihcIuaVrOivt+acn+W+hSFcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJfY29udGFpbmVyLmlzX3VubG9jayA9IGlzX3VubG9jaztcclxuICAgICAgICAgICAgICAgIHRoaXMud2FyX2NvbnRhaW5lci5ub3RpY2Uubm9kZS5hY3RpdmUgPSAhaXNfdW5sb2NrO1xyXG4gICAgICAgICAgICAgICAgVXRpbHMuc2V0R3JleUJ1dHRvbih0aGlzLndhcl9jb250YWluZXIuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbiksICFpc191bmxvY2spO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzX3VubG9jayA9PSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndhcl9jb250YWluZXIubm90aWNlLnN0cmluZyA9IHRpcHNfc3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+abtOaWsOWFrOS8muW4ruS4u1xyXG4gICAgdXBkYXRlR3VpbGRMZWFkZXJJbmZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubXlfZ3VpbGRfaW5mbyA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB0aGlzLmd1aWxkX2xlYWRlcl92YWx1ZS5zdHJpbmcgPSB0aGlzLm15X2d1aWxkX2luZm8ubGVhZGVyX25hbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5pu05paw5oiQ5ZGY5pWw6YePXHJcbiAgICB1cGRhdGVHdWlsZE1lbWJlckluZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5teV9ndWlsZF9pbmZvID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIHRoaXMuZ3VpbGRfbWVtYmVyX3ZhbHVlLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihcIiVzLyVzXCIsIHRoaXMubXlfZ3VpbGRfaW5mby5tZW1iZXJzX251bSwgdGhpcy5teV9ndWlsZF9pbmZvLm1lbWJlcnNfbWF4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLy/mm7TmlrDnuqLngrnnirbmgIEs5aaC5p6cdHlwZeacquaMh+Wumu+8jOWImeWFqOmDqOabtOaWsFxyXG4gICAgdXBkYXRlU29tZVJlZFN0YXR1czogZnVuY3Rpb24gKHR5cGUsIHN0YXR1cykge1xyXG4gICAgICAgIHZhciByZWRfc3RhdHVzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHR5cGUgPT0gR3VpbGRDb25zdC5yZWRfaW5kZXguYXBwbHkpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2FwcGx5X2J0bi50aXBzLmFjdGl2ZSA9IHN0YXR1cztcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3VpbGRDb25zdC5yZWRfaW5kZXguYm9zc190aW1lcykge1xyXG4gICAgICAgICAgICByZWRfc3RhdHVzID0gdGhpcy5nYl9tb2RlbC5jaGVja0d1aWxkRHVuUmVkU3RhdHVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZHVuZ2Vvbl9jb250YWluZXIudGlwcy5hY3RpdmUgPSByZWRfc3RhdHVzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHdWlsZENvbnN0LnJlZF9pbmRleC5kb25hdGUgfHwgdHlwZSA9PSBHdWlsZENvbnN0LnJlZF9pbmRleC5kb25hdGVfYWN0aXZpdHkpIHtcclxuICAgICAgICAgICAgcmVkX3N0YXR1cyA9IHRoaXMubW9kZWwuZ2V0RG9uYXRlUmVkU3RhdHVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZG9uYXRlX2J0bi50aXBzLmFjdGl2ZSA9IHJlZF9zdGF0dXM7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IEd1aWxkQ29uc3QucmVkX2luZGV4LnNraWxsXzIgfHwgdHlwZSA9PSBHdWlsZENvbnN0LnJlZF9pbmRleC5za2lsbF8zIHx8XHJcbiAgICAgICAgICAgIHR5cGUgPT0gR3VpbGRDb25zdC5yZWRfaW5kZXguc2tpbGxfNCB8fCB0eXBlID09IEd1aWxkQ29uc3QucmVkX2luZGV4LnNraWxsXzUpIHtcclxuICAgICAgICAgICAgdGhpcy5za2lsbF9jb250YWluZXIudGlwcy5hY3RpdmUgPSB0aGlzLnNraWxsX21vZGVsLmdldFJlZFRvdGFsU3RhdHVzKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IEd1aWxkQ29uc3QucmVkX2luZGV4LnJlZF9iYWcpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWRwYWNrZXRfYnRuLnRpcHMuYWN0aXZlID0gc3RhdHVzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHdWlsZENvbnN0LnJlZF9pbmRleC5nb2FsX2FjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnNob3BfY29udGFpbmVyLnRpcHMuYWN0aXZlID0gc3RhdHVzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHdWlsZENvbnN0LnJlZF9pbmRleC5ndWlsZHdhcl9zdGFydCB8fCB0eXBlID09IEd1aWxkQ29uc3QucmVkX2luZGV4Lmd1aWxkd2FyX21hdGNoIHx8IHR5cGUgPT0gR3VpbGRDb25zdC5yZWRfaW5kZXguZ3VpbGR3YXJfY291bnQpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJfY29udGFpbmVyLnRpcHMuYWN0aXZlID0gdGhpcy5nd19tb2RlbC5jaGVja0d1aWxkR3VpbGRXYXJSZWRTdGF0dXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrYXBwbHlfYnRuLnRpcHMuYWN0aXZlID0gdGhpcy5tb2RlbC5nZXRSZWRTdGF0dXMoR3VpbGRDb25zdC5yZWRfaW5kZXguYXBwbHkpO1xyXG4gICAgICAgICAgICB0aGlzLmRvbmF0ZV9idG4udGlwcy5hY3RpdmUgPSB0aGlzLm1vZGVsLmdldERvbmF0ZVJlZFN0YXR1cygpO1xyXG4gICAgICAgICAgICB0aGlzLmR1bmdlb25fY29udGFpbmVyLnRpcHMuYWN0aXZlID0gdGhpcy5nYl9tb2RlbC5jaGVja0d1aWxkRHVuUmVkU3RhdHVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMud2FyX2NvbnRhaW5lci50aXBzLmFjdGl2ZSA9IHRoaXMuZ3dfbW9kZWwuY2hlY2tHdWlsZEd1aWxkV2FyUmVkU3RhdHVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2tpbGxfY29udGFpbmVyLnRpcHMuYWN0aXZlID0gdGhpcy5za2lsbF9tb2RlbC5nZXRSZWRUb3RhbFN0YXR1cygpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZHBhY2tldF9idG4udGlwcy5hY3RpdmUgPSB0aGlzLnJlZGJhZ19tb2RlbC5nZXRBbGxSZWRCYWdTdGF0dXMoKTtcclxuICAgICAgICAgICAgdGhpcy5zaG9wX2NvbnRhaW5lci50aXBzLmFjdGl2ZSA9IHRoaXMubW9kZWwuZ2V0R29hbFJlZFN0YXR1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY2xvc2VDYWxsQmFjazogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJvbGVfdm8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yb2xlX2Fzc2V0c19ldmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvbGVfdm8udW5iaW5kKHRoaXMucm9sZV9hc3NldHNfZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX2Fzc2V0c19ldmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yb2xlX3ZvID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN0cmwub3Blbkd1aWxkTWFpbldpbmRvdyhmYWxzZSk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBUYXNrTWFpbldpbmRvdzsiXX0=