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
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/limitexercise/view/limitexercise_change_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, '701d9osPbtPM4uKA0jC/rqE', 'limitexercise_change_window');
// Scripts/mod/limitexercise/view/limitexercise_change_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-09-10 09:45:10
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var LimitExerciseEvent = require("limitexercise_event");
 
var TimeTool = require("timetool");
 
var LimitExerciseConstants = require("limitExercise_const");
 
var LimitExerciseChangeItem = require("limitexercise_change_item_panel");
 
var MainuiController = require("mainui_controller");
 
var Limitexercise_changeWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("limitexercise", "limitexercise_change_window"); // this.viewTag = SCENE_TAG.ui;                //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Full; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
 
    this.ctrl = arguments[0];
    this.model = this.ctrl.getModel();
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.reward_list = Config.holiday_boss_new_data.data_lev_reward_list;
    this.change_boss_list = Config.holiday_boss_new_data.data_change_boss_list;
    this.cur_order_type = null;
    this.cur_order_id = null;
    this.cur_box_status = null;
    this.scrollview_bar = null;
    this.item_list_panel = [];
    this.pos_interval = [[0, 320], [320, 1047], [1047, 1500]];
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    var main_container = this.root_wnd.getChildByName("main_container");
    var load_bg = main_container.getChildByName("bg").getComponent(cc.Sprite);
    load_bg.node.scale = FIT_SCALE;
    var bg_res = PathTool.getUIIconPath("bigbg/limitexercise", "limit_exercise_bg1", "jpg");
    this.loadRes(bg_res, function (res) {
      load_bg.spriteFrame = res;
    });
    main_container.getChildByName("Text_10").getComponent(cc.Label).string = Utils.TI18N("本轮挑战剩余:");
    this.ramain_time = main_container.getChildByName("ramain_time").getComponent(cc.Label);
    this.ramain_time.string = "";
    this.level_area_text = main_container.getChildByName("level_area_text").getComponent(cc.Label);
    this.level_area_text.string = ""; // --左边滑动
 
    this.left_scrollview_pos = {};
 
    for (var i = 1; i <= 3; ++i) {
      var spr = main_container.getChildByName("sroll_spr_" + i);
      this.left_scrollview_pos[i] = spr.y;
    }
 
    this.sroll_main_spr = main_container.getChildByName("sroll_main_spr");
    this.sroll_main_spr.opacity = 0; // --难度
 
    this.level_num = main_container.getChildByName("level_num").getComponent(cc.Label);
    this.level_num.string = "";
    main_container.getChildByName("level_area_text_0_0").getComponent(cc.Label).string = Utils.TI18N("难度");
    this.item_area = main_container.getChildByName("item_area"); // --关卡信息
 
    this.level_msg = main_container.getChildByName("level_msg");
    this.btn_change = this.level_msg.getChildByName("btn_change");
    this.btn_change_btn = this.btn_change.getComponent(cc.Button);
    this.btn_change_text = this.btn_change.getChildByName("Text_4").getComponent(cc.Label);
    this.btn_change_text.string = Utils.TI18N("挑战");
    this.change_outline = this.btn_change.getChildByName("Text_4").getComponent(cc.LabelOutline);
    this.btn_box = this.level_msg.getChildByName("btn_box");
    this.box_sprite = this.btn_box.getChildByName("box_sprite").getComponent(cc.Sprite); // this.box_sprite:setAnchorPoint(0.5,0.5)
    // this.box_sprite:setPositionY(49)
 
    this.level_msg.getChildByName("Text_8").getComponent(cc.Label).string = Utils.TI18N("下一阶段奖励");
    this.level_text = this.level_msg.getChildByName("level_text").getComponent(cc.Label); //第几关
 
    this.level_text.string = "";
    this.level_msg.getChildByName("level_tips_text").getComponent(cc.Label).string = Utils.TI18N("关卡效果");
    this.level_effect_desc = this.level_msg.getChildByName("level_effect_desc").getComponent(cc.Label);
    this.power = this.level_msg.getChildByName("power").getComponent(cc.Label);
    this.power.string = Utils.TI18N("推荐战力:");
    this.change_item = this.level_msg.getChildByName("change_item");
    this.change_item_content = this.change_item.getChildByName("content"); // this.change_item:setScrollBarEnabled(false)
 
    this.btn_rule = main_container.getChildByName("btn_rule");
    var bottom_panel = main_container.getChildByName("bottom_panel");
    bottom_panel.getChildByName("count_title").getComponent(cc.Label).string = Utils.TI18N("挑战次数:");
    this.remain_count = bottom_panel.getChildByName("remain_count").getComponent(cc.Label);
    this.remain_count.string = "剩余购买次数:";
    this.change_count = bottom_panel.getChildByName("count_label").getComponent(cc.Label);
    this.change_count.string = "";
    this.add_btn = bottom_panel.getChildByName("add_btn");
    this.btn_close = bottom_panel.getChildByName("btn_close");
    this.item_scrollview = this.item_area.getComponent(cc.ScrollView);
    this.item_area.on('scrolling', this.updateSlideShowByVertical, this);
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.btn_change.on('click', function () {
      var HeroController = require("hero_controller");
 
      var PartnerConst = require("partner_const");
 
      HeroController.getInstance().openFormGoFightPanel(true, PartnerConst.Fun_Form.LimitExercise);
    }, this);
    this.btn_box.on('click', function () {
      if (this.model.getBoxStatus() == 1) {
        this.ctrl.send25412();
      } else {
        this.ctrl.openLimitExerciseRewardView(true);
      }
    }, this);
    this.btn_rule.on('click', function () {
      MainuiController.getInstance().openCommonExplainView(true, Config.holiday_boss_new_data.data_explain, Utils.TI18N("规则说明"));
    }, this);
    this.btn_close.on("click", function () {
      this.ctrl.openLimitExerciseChangeView(false);
      Utils.playButtonSound(2);
    }, this);
    this.add_btn.on('click', function () {
      Utils.playButtonSound(1);
      var const_data = Config.holiday_boss_new_data.data_const;
      if (!const_data) return;
      var cur_count = this.model.getDayBuyCount();
      var max_count = const_data.fight_buy_max_count.val;
 
      if (cur_count >= max_count) {
        message(Utils.TI18N("已达今日购买最大值"));
        return;
      }
 
      var CommonAlert = require("commonalert");
 
      var str = cc.js.formatStr("是否花费<img src='%s' scale=0.3 />%s购买一次挑战次数?", Config.item_data.data_assets_label2id.gold, const_data.action_num_espensive.val);
      var res = PathTool.getItemRes(Config.item_data.data_assets_label2id.gold);
 
      var call_back = function () {
        this.ctrl.send25411();
      }.bind(this);
 
      CommonAlert.show(str, Utils.TI18N("确认"), call_back, Utils.TI18N("取消"), null, 2, null, {
        resArr: [res]
      });
    }, this);
    this.addGlobalEvent(LimitExerciseEvent.LimitExercise_Message_Event, function (data) {
      this.setRoundHero(data.difficulty, data.count);
      this.remainBuyCount(data.buy_count);
      this.setCountDownTime(this.ramain_time, data.endtime - gcore.SmartSocket.getTime());
      this.levelBoxStatus(data.status, data.order);
      this.showBossMessageItem(data.difficulty);
      this.getLevelMessage(data.order_type, data.order);
    }.bind(this));
    this.addGlobalEvent(LimitExerciseEvent.LimitExercise_BuyCount_Event, function (data) {
      if (data) {
        var difficulty = this.model.getCurrentDiff();
        this.setRoundHero(difficulty, data.count);
        this.remainBuyCount(data.buy_count);
      }
    }.bind(this));
    this.addGlobalEvent(LimitExerciseEvent.LimitExercise_GetBox_Event, function (data) {
      if (data) {
        if (data.code == 1) {
          this.levelBoxStatus(2, 15);
        }
      }
    }.bind(this));
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(params) {
    if (this.model.getLimitExerciseData() == null) {
      this.ctrl.send25410();
    } else {
      var data = this.model.getLimitExerciseData();
      this.setRoundHero(data.difficulty, data.count);
      this.remainBuyCount(data.buy_count);
      this.setCountDownTime(data.endtime - gcore.SmartSocket.getTime());
      this.levelBoxStatus(data.status, data.order);
      this.showBossMessageItem(data.difficulty);
      var container_y = this.item_scrollview.content.y;
      var cur_pos = this.getCurrentPos(Math.abs(container_y));
      this.scrollviewSprintBar(cur_pos);
    }
 
    this.ctrl.send25414();
  },
  createAreaList: function createAreaList() {
    if (this.item_list_panel.length == 0) {
      this.timer = this.startUpdate(this.area_list.length, function (index) {
        var item = new LimitExerciseChangeItem();
        item.setParent(this.item_scrollview.content);
        item.show();
        item.setPosition(0, index * item.HeightItem);
        item.setData(this.area_list[index]);
        item.addCallBack(function (cell, order_type, order_id, index) {
          this.onCellTouched(cell, order_type, order_id, index);
        }.bind(this));
        this.item_list_panel.push(item);
      }.bind(this), 100);
    } else {
      for (var i = 0; i < this.area_list.length; ++i) {
        var item = this.item_list_panel[i];
 
        if (!item) {
          var _item = new LimitExerciseChangeItem();
 
          _item.setParent(this.item_scrollview.content);
 
          _item.show();
 
          _item.setPosition(0, index * _item.HeightItem);
 
          _item.addCallBack(function (cell, order_type, order_id, index) {
            this.onCellTouched(cell, order_type, order_id, index);
          }.bind(this));
 
          this.item_list_panel[i] = _item;
        }
 
        item.setData(this.area_list[i]);
        item.setItemIndex();
      }
    }
 
    this.item_scrollview.content.height = this.area_list.length * 568;
  },
  setRoundHero: function setRoundHero(change_id, count) {
    this.level_num.string = change_id || 1;
    this.change_count.string = count || 0;
  },
  //剩余购买次数
  remainBuyCount: function remainBuyCount(buy_count) {
    buy_count = buy_count || 0;
 
    if (this.remain_count) {
      var count = 0;
      var const_data = Config.holiday_boss_new_data.data_const.fight_buy_max_count;
 
      if (const_data && const_data.val) {
        count = const_data.val - buy_count;
 
        if (count <= 0) {
          count = 0;
        }
 
        this.remain_count.string = "剩余购买次数:" + count;
      }
    }
  },
  setCountDownTime: function setCountDownTime(less_time) {
    if (this.ramain_time) {
      if (this.time_tichet) {
        gcore.Timer.del(this.time_tichet);
        this.time_tichet = null;
      }
 
      if (less_time > 0) {
        this.setTimeFormatString(less_time);
        this.time_tichet = gcore.Timer.set(function () {
          less_time--;
 
          if (less_time < 0) {
            gcore.Timer.del(this.time_tichet);
            this.time_tichet = null;
            this.ramain_time.string = "00:00:00";
          } else {
            this.setTimeFormatString(less_time);
          }
        }.bind(this), 1000, -1);
      } else {
        this.setTimeFormatString(less_time);
      }
    }
  },
  setTimeFormatString: function setTimeFormatString(time) {
    if (time > 0) {
      this.ramain_time.string = TimeTool.getTimeFormatDay(time);
    } else {
      this.ramain_time.string = "00:00:00";
    }
  },
  //宝箱状态
  levelBoxStatus: function levelBoxStatus(status, ord_id) {
    if (this.cur_box_status == status) return;
    this.cur_box_status = status;
    var id = this.getBoxRewardID(ord_id);
    this.loadRes(PathTool.getUIIconPath("limitexercise", "limitexercise_box" + id), function (res) {
      this.box_sprite.spriteFrame = res;
    }.bind(this));
 
    if (status == 1) {
      this.box_sprite.node.stopAllActions();
      var skewto_1 = cc.rotateTo(0.1, 10);
      var skewto_2 = cc.rotateTo(0.1, -10);
      var skewto_3 = cc.rotateTo(0.1, 0);
      var seq = cc.sequence(skewto_1, skewto_2, skewto_1, skewto_2, skewto_1, skewto_2, skewto_3, cc.delayTime(1));
      var repeatForever = cc.repeatForever(seq);
      this.box_sprite.node.runAction(repeatForever);
    } else if (status == 2) {
      this.box_sprite.node.stopAllActions();
    }
  },
  getBoxRewardID: function getBoxRewardID(ord_id) {
    var diff = this.model.getCurrentDiff(ord_id);
    var count = 1;
 
    if (this.reward_list[diff]) {
      for (var i = 1; i <= 3; ++i) {
        if (ord_id <= this.reward_list[diff][1].order_id) {
          count = 1;
        } else if (ord_id > this.reward_list[diff][1].order_id && ord_id <= this.reward_list[diff][2].order_id) {
          count = 2;
        } else if (ord_id > this.reward_list[diff][2].order_id) {
          count = 3;
        }
      }
    }
 
    return count;
  },
  //显示boss信息  轮次,难度
  showBossMessageItem: function showBossMessageItem(diff) {
    var round = this.model.getCurrentRound();
    diff = diff || 1;
 
    if (this.item_scrollview) {
      if (this.change_boss_list[round] && this.change_boss_list[round][diff]) {
        this.area_list = [];
 
        for (var i in this.change_boss_list[round][diff]) {
          var v = this.change_boss_list[round][diff][i];
          this.area_list.push(v);
        }
 
        cc.log(this.area_list);
        var level_type = this.model.getCurrentType();
        var count = 1;
 
        if (level_type) {
          count = level_type;
        }
 
        this.item_scrollview.content.y = (count - 1) * -568;
        this.sroll_main_spr.y = this.left_scrollview_pos[count];
      }
    }
 
    this.createAreaList();
  },
  //关卡信息  (关卡类型、关卡id)
  getLevelMessage: function getLevelMessage(ord_type, ord_id) {
    ord_type = ord_type || 1;
    ord_id = ord_id || this.model.getCurrentChangeID();
 
    if (this.cur_order_type == ord_type && this.cur_order_id == ord_id) {
      return;
    }
 
    var round = this.model.getCurrentRound();
    var diff = this.model.getCurrentDiff();
    if (!round) return;
    this.level_area_text.string = LimitExerciseConstants.type[ord_type];
 
    if (this.change_boss_list[round] && this.change_boss_list[round][diff]) {
      var lev_data = this.change_boss_list[round][diff];
 
      if (ord_id >= 15) {
        ord_id = 15;
      }
 
      if (lev_data[ord_type] && lev_data[ord_type][ord_id]) {
        var lev_count = lev_data[ord_type][ord_id].order_id;
        this.level_text.string = Utils.TI18N("第") + lev_count + Utils.TI18N("关");
 
        if (lev_count == this.model.getCurrentChangeID()) {
          this.btn_change_btn.interactable = true;
          this.btn_change_btn.enableAutoGrayEffect = false;
          this.change_outline.enabled = true;
        } else {
          this.btn_change_btn.interactable = false;
          this.btn_change_btn.enableAutoGrayEffect = true;
          this.change_outline.enabled = false;
        }
 
        var str = "";
        var desc = lev_data[ord_type][ord_id].add_skill_decs || [];
 
        for (var i = 0; i < desc.length; ++i) {
          str = str + desc[i] + "\n";
        }
 
        this.level_effect_desc.string = str;
        var power = lev_data[ord_type][ord_id].power || 0;
        this.power.string = Utils.TI18N("推荐战力:") + power;
 
        if (this.cur_order_type != ord_type) {
          var count = this.getBoxRewardID(ord_id);
 
          if (this.reward_list[diff] && this.reward_list[diff][count]) {
            //获取奖励
            var data_list = this.reward_list[diff][count].reward || [];
            var setting = {};
            setting.scale = 0.6;
            setting.max_count = 3;
            setting.is_center = true;
            setting.show_effect_id = 263;
            this.level_item_list = Utils.commonShowSingleRowItemList(this.change_item, this.level_item_list, data_list, setting, this.change_item_content);
          }
        }
      }
    }
 
    this.cur_order_type = ord_type;
    this.cur_order_id = ord_id;
  },
  onCellTouched: function onCellTouched(cell, order_type, order_id, index) {
    if (this.touch_kuang == null) {
      this.touch_kuang = new cc.Node();
      var image = this.touch_kuang.addComponent(cc.Sprite);
      image.type = cc.Sprite.Type.SLICED;
      image.sizeMode = cc.Sprite.SizeMode.CUSTOM;
      this.touch_kuang.setContentSize(110, 110);
      this.item_scrollview.content.addChild(this.touch_kuang, 99);
      this.loadRes(PathTool.getUIIconPath("common", "common_90019"), function (res) {
        image.spriteFrame = res;
      }.bind(this));
    }
 
    var item = cell.getBtnMaster(index);
 
    if (item) {
      var worldPos = item.convertToWorldSpaceAR(cc.v2(0, 0));
      var pos = this.item_scrollview.content.convertToNodeSpace(worldPos);
      this.touch_kuang.setPosition(pos.x - 25, pos.y - 4);
    }
 
    this.getLevelMessage(order_type, order_id);
  },
  updateSlideShowByVertical: function updateSlideShowByVertical() {
    var container_y = this.item_scrollview.content.y;
 
    if (this.item_scrollview) {
      var cur_pos = this.getCurrentPos(Math.abs(container_y));
      this.scrollviewSprintBar(cur_pos);
      this.level_area_text.string = LimitExerciseConstants.type[cur_pos];
    }
  },
  //判断当前位置
  getCurrentPos: function getCurrentPos(pos) {
    var cur_pos = 1;
 
    if (pos >= this.pos_interval[0][0] && pos <= this.pos_interval[0][1]) {
      cur_pos = 1;
    } else if (pos >= this.pos_interval[1][0] && pos <= this.pos_interval[1][1]) {
      cur_pos = 2;
    } else if (pos >= this.pos_interval[2][0] && pos <= this.pos_interval[2][1]) {
      cur_pos = 3;
    }
 
    return cur_pos;
  },
  //滑动的动作处理
  scrollviewSprintBar: function scrollviewSprintBar(cur_pos) {
    if (this.scrollview_bar == cur_pos) return;
    this.scrollview_bar = cur_pos;
    this.sroll_main_spr.stopAllActions(); // doStopAllActions(this.sroll_main_spr)
 
    var fadeout = cc.fadeOut(0.3);
    var fadein = cc.fadeIn(0.3);
    var move_to = cc.moveTo(0.1, cc.v2(-319, this.left_scrollview_pos[cur_pos]));
    var scaleto1 = cc.scaleTo(0.1, 1.2);
    var scaleto2 = cc.scaleTo(0.1, 1);
    var spawn = cc.spawn(fadein, move_to);
    var seq = cc.sequence(fadeout, spawn, scaleto1, scaleto2);
    this.sroll_main_spr.runAction(seq);
  },
  setItemIndex: function setItemIndex() {//默认点击
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.time_tichet) {
      gcore.Timer.del(this.time_tichet);
      this.time_tichet = null;
    }
 
    if (this.timer) {
      this.stopUpdate(this.timer);
      this.timer = null;
    }
 
    if (this.item_list_panel) {
      for (var i = 0; i < this.item_list_panel.length; ++i) {
        if (this.item_list_panel[i]) {
          this.item_list_panel[i].deleteMe();
          this.item_list_panel[i] = null;
        }
      }
 
      this.item_list_panel = null;
    }
 
    if (this.level_item_list) {
      for (var _i = 0; _i < this.level_item_list.length; ++_i) {
        if (this.level_item_list[_i]) {
          this.level_item_list[_i].deleteMe();
 
          this.level_item_list[_i] = null;
        }
      }
 
      this.level_item_list = null;
    }
 
    this.ctrl.openLimitExerciseChangeView(false);
  }
});
 
cc._RF.pop();
                    }
                    if (nodeEnv) {
                        __define(__module.exports, __require, __module);
                    }
                    else {
                        __quick_compile_project__.registerModuleFunc(__filename, function () {
                            __define(__module.exports, __require, __module);
                        });
                    }
                })();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxsaW1pdGV4ZXJjaXNlXFx2aWV3XFxsaW1pdGV4ZXJjaXNlX2NoYW5nZV93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiTGltaXRFeGVyY2lzZUV2ZW50IiwiVGltZVRvb2wiLCJMaW1pdEV4ZXJjaXNlQ29uc3RhbnRzIiwiTGltaXRFeGVyY2lzZUNoYW5nZUl0ZW0iLCJNYWludWlDb250cm9sbGVyIiwiTGltaXRleGVyY2lzZV9jaGFuZ2VXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJGdWxsIiwiY3RybCIsImFyZ3VtZW50cyIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJpbml0Q29uZmlnIiwicmV3YXJkX2xpc3QiLCJDb25maWciLCJob2xpZGF5X2Jvc3NfbmV3X2RhdGEiLCJkYXRhX2xldl9yZXdhcmRfbGlzdCIsImNoYW5nZV9ib3NzX2xpc3QiLCJkYXRhX2NoYW5nZV9ib3NzX2xpc3QiLCJjdXJfb3JkZXJfdHlwZSIsImN1cl9vcmRlcl9pZCIsImN1cl9ib3hfc3RhdHVzIiwic2Nyb2xsdmlld19iYXIiLCJpdGVtX2xpc3RfcGFuZWwiLCJwb3NfaW50ZXJ2YWwiLCJvcGVuQ2FsbEJhY2siLCJtYWluX2NvbnRhaW5lciIsInJvb3Rfd25kIiwiZ2V0Q2hpbGRCeU5hbWUiLCJsb2FkX2JnIiwiZ2V0Q29tcG9uZW50IiwiU3ByaXRlIiwibm9kZSIsInNjYWxlIiwiRklUX1NDQUxFIiwiYmdfcmVzIiwiZ2V0VUlJY29uUGF0aCIsImxvYWRSZXMiLCJyZXMiLCJzcHJpdGVGcmFtZSIsIkxhYmVsIiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsInJhbWFpbl90aW1lIiwibGV2ZWxfYXJlYV90ZXh0IiwibGVmdF9zY3JvbGx2aWV3X3BvcyIsImkiLCJzcHIiLCJ5Iiwic3JvbGxfbWFpbl9zcHIiLCJvcGFjaXR5IiwibGV2ZWxfbnVtIiwiaXRlbV9hcmVhIiwibGV2ZWxfbXNnIiwiYnRuX2NoYW5nZSIsImJ0bl9jaGFuZ2VfYnRuIiwiQnV0dG9uIiwiYnRuX2NoYW5nZV90ZXh0IiwiY2hhbmdlX291dGxpbmUiLCJMYWJlbE91dGxpbmUiLCJidG5fYm94IiwiYm94X3Nwcml0ZSIsImxldmVsX3RleHQiLCJsZXZlbF9lZmZlY3RfZGVzYyIsInBvd2VyIiwiY2hhbmdlX2l0ZW0iLCJjaGFuZ2VfaXRlbV9jb250ZW50IiwiYnRuX3J1bGUiLCJib3R0b21fcGFuZWwiLCJyZW1haW5fY291bnQiLCJjaGFuZ2VfY291bnQiLCJhZGRfYnRuIiwiYnRuX2Nsb3NlIiwiaXRlbV9zY3JvbGx2aWV3IiwiU2Nyb2xsVmlldyIsIm9uIiwidXBkYXRlU2xpZGVTaG93QnlWZXJ0aWNhbCIsInJlZ2lzdGVyRXZlbnQiLCJIZXJvQ29udHJvbGxlciIsIlBhcnRuZXJDb25zdCIsImdldEluc3RhbmNlIiwib3BlbkZvcm1Hb0ZpZ2h0UGFuZWwiLCJGdW5fRm9ybSIsIkxpbWl0RXhlcmNpc2UiLCJnZXRCb3hTdGF0dXMiLCJzZW5kMjU0MTIiLCJvcGVuTGltaXRFeGVyY2lzZVJld2FyZFZpZXciLCJvcGVuQ29tbW9uRXhwbGFpblZpZXciLCJkYXRhX2V4cGxhaW4iLCJvcGVuTGltaXRFeGVyY2lzZUNoYW5nZVZpZXciLCJwbGF5QnV0dG9uU291bmQiLCJjb25zdF9kYXRhIiwiZGF0YV9jb25zdCIsImN1cl9jb3VudCIsImdldERheUJ1eUNvdW50IiwibWF4X2NvdW50IiwiZmlnaHRfYnV5X21heF9jb3VudCIsInZhbCIsIm1lc3NhZ2UiLCJDb21tb25BbGVydCIsInN0ciIsImpzIiwiZm9ybWF0U3RyIiwiaXRlbV9kYXRhIiwiZGF0YV9hc3NldHNfbGFiZWwyaWQiLCJnb2xkIiwiYWN0aW9uX251bV9lc3BlbnNpdmUiLCJnZXRJdGVtUmVzIiwiY2FsbF9iYWNrIiwic2VuZDI1NDExIiwiYmluZCIsInNob3ciLCJyZXNBcnIiLCJhZGRHbG9iYWxFdmVudCIsIkxpbWl0RXhlcmNpc2VfTWVzc2FnZV9FdmVudCIsImRhdGEiLCJzZXRSb3VuZEhlcm8iLCJkaWZmaWN1bHR5IiwiY291bnQiLCJyZW1haW5CdXlDb3VudCIsImJ1eV9jb3VudCIsInNldENvdW50RG93blRpbWUiLCJlbmR0aW1lIiwiZ2NvcmUiLCJTbWFydFNvY2tldCIsImdldFRpbWUiLCJsZXZlbEJveFN0YXR1cyIsInN0YXR1cyIsIm9yZGVyIiwic2hvd0Jvc3NNZXNzYWdlSXRlbSIsImdldExldmVsTWVzc2FnZSIsIm9yZGVyX3R5cGUiLCJMaW1pdEV4ZXJjaXNlX0J1eUNvdW50X0V2ZW50IiwiZ2V0Q3VycmVudERpZmYiLCJMaW1pdEV4ZXJjaXNlX0dldEJveF9FdmVudCIsImNvZGUiLCJvcGVuUm9vdFduZCIsInBhcmFtcyIsImdldExpbWl0RXhlcmNpc2VEYXRhIiwic2VuZDI1NDEwIiwiY29udGFpbmVyX3kiLCJjb250ZW50IiwiY3VyX3BvcyIsImdldEN1cnJlbnRQb3MiLCJNYXRoIiwiYWJzIiwic2Nyb2xsdmlld1NwcmludEJhciIsInNlbmQyNTQxNCIsImNyZWF0ZUFyZWFMaXN0IiwibGVuZ3RoIiwidGltZXIiLCJzdGFydFVwZGF0ZSIsImFyZWFfbGlzdCIsImluZGV4IiwiaXRlbSIsInNldFBhcmVudCIsInNldFBvc2l0aW9uIiwiSGVpZ2h0SXRlbSIsInNldERhdGEiLCJhZGRDYWxsQmFjayIsImNlbGwiLCJvcmRlcl9pZCIsIm9uQ2VsbFRvdWNoZWQiLCJwdXNoIiwic2V0SXRlbUluZGV4IiwiaGVpZ2h0IiwiY2hhbmdlX2lkIiwibGVzc190aW1lIiwidGltZV90aWNoZXQiLCJUaW1lciIsImRlbCIsInNldFRpbWVGb3JtYXRTdHJpbmciLCJzZXQiLCJ0aW1lIiwiZ2V0VGltZUZvcm1hdERheSIsIm9yZF9pZCIsImlkIiwiZ2V0Qm94UmV3YXJkSUQiLCJzdG9wQWxsQWN0aW9ucyIsInNrZXd0b18xIiwicm90YXRlVG8iLCJza2V3dG9fMiIsInNrZXd0b18zIiwic2VxIiwic2VxdWVuY2UiLCJkZWxheVRpbWUiLCJyZXBlYXRGb3JldmVyIiwicnVuQWN0aW9uIiwiZGlmZiIsInJvdW5kIiwiZ2V0Q3VycmVudFJvdW5kIiwidiIsImxvZyIsImxldmVsX3R5cGUiLCJnZXRDdXJyZW50VHlwZSIsIm9yZF90eXBlIiwiZ2V0Q3VycmVudENoYW5nZUlEIiwidHlwZSIsImxldl9kYXRhIiwibGV2X2NvdW50IiwiaW50ZXJhY3RhYmxlIiwiZW5hYmxlQXV0b0dyYXlFZmZlY3QiLCJlbmFibGVkIiwiZGVzYyIsImFkZF9za2lsbF9kZWNzIiwiZGF0YV9saXN0IiwicmV3YXJkIiwic2V0dGluZyIsImlzX2NlbnRlciIsInNob3dfZWZmZWN0X2lkIiwibGV2ZWxfaXRlbV9saXN0IiwiY29tbW9uU2hvd1NpbmdsZVJvd0l0ZW1MaXN0IiwidG91Y2hfa3VhbmciLCJOb2RlIiwiaW1hZ2UiLCJhZGRDb21wb25lbnQiLCJUeXBlIiwiU0xJQ0VEIiwic2l6ZU1vZGUiLCJTaXplTW9kZSIsIkNVU1RPTSIsInNldENvbnRlbnRTaXplIiwiYWRkQ2hpbGQiLCJnZXRCdG5NYXN0ZXIiLCJ3b3JsZFBvcyIsImNvbnZlcnRUb1dvcmxkU3BhY2VBUiIsInYyIiwicG9zIiwiY29udmVydFRvTm9kZVNwYWNlIiwieCIsImZhZGVvdXQiLCJmYWRlT3V0IiwiZmFkZWluIiwiZmFkZUluIiwibW92ZV90byIsIm1vdmVUbyIsInNjYWxldG8xIiwic2NhbGVUbyIsInNjYWxldG8yIiwic3Bhd24iLCJjbG9zZUNhbGxCYWNrIiwic3RvcFVwZGF0ZSIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsa0JBQWtCLEdBQUdELE9BQU8sQ0FBQyxxQkFBRCxDQUFoQzs7QUFDQSxJQUFJRSxRQUFRLEdBQUdG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QUwsQ0FBZ0IsS0FBSzNGLEtBQXJCO0FBQ0EsV0FBS0EsS0FBTCxHQUFhLElBQWI7QUFDSDs7QUFDRCxRQUFHLEtBQUtoSSxlQUFSLEVBQXdCO0FBQ3BCLFdBQUksSUFBSXdCLENBQUMsR0FBQyxDQUFWLEVBQVlBLENBQUMsR0FBQyxLQUFLeEIsZUFBTCxDQUFxQitILE1BQW5DLEVBQTBDLEVBQUV2RyxDQUE1QyxFQUE4QztBQUMxQyxZQUFHLEtBQUt4QixlQUFMLENBQXFCd0IsQ0FBckIsQ0FBSCxFQUEyQjtBQUN2QixlQUFLeEIsZUFBTCxDQUFxQndCLENBQXJCLEVBQXdCb00sUUFBeEI7QUFDQSxlQUFLNU4sZUFBTCxDQUFxQndCLENBQXJCLElBQTBCLElBQTFCO0FBQ0g7QUFDSjs7QUFDRCxXQUFLeEIsZUFBTCxHQUF1QixJQUF2QjtBQUNIOztBQUNELFFBQUcsS0FBSzRMLGVBQVIsRUFBd0I7QUFDcEIsV0FBSSxJQUFJcEssRUFBQyxHQUFDLENBQVYsRUFBWUEsRUFBQyxHQUFDLEtBQUtvSyxlQUFMLENBQXFCN0QsTUFBbkMsRUFBMEMsRUFBRXZHLEVBQTVDLEVBQThDO0FBQzFDLFlBQUcsS0FBS29LLGVBQUwsQ0FBcUJwSyxFQUFyQixDQUFILEVBQTJCO0FBQ3ZCLGVBQUtvSyxlQUFMLENBQXFCcEssRUFBckIsRUFBd0JvTSxRQUF4Qjs7QUFDQSxlQUFLaEMsZUFBTCxDQUFxQnBLLEVBQXJCLElBQTBCLElBQTFCO0FBQ0g7QUFDSjs7QUFDRCxXQUFLb0ssZUFBTCxHQUF1QixJQUF2QjtBQUNIOztBQUNELFNBQUszTSxJQUFMLENBQVVrRiwyQkFBVixDQUFzQyxLQUF0QztBQUNIO0FBNWNxQyxDQUFULENBQWpDIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wOS0xMCAwOTo0NToxMFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBMaW1pdEV4ZXJjaXNlRXZlbnQgPSByZXF1aXJlKFwibGltaXRleGVyY2lzZV9ldmVudFwiKVxudmFyIFRpbWVUb29sID0gcmVxdWlyZShcInRpbWV0b29sXCIpXG52YXIgTGltaXRFeGVyY2lzZUNvbnN0YW50cyA9IHJlcXVpcmUoXCJsaW1pdEV4ZXJjaXNlX2NvbnN0XCIpXG52YXIgTGltaXRFeGVyY2lzZUNoYW5nZUl0ZW0gPSByZXF1aXJlKFwibGltaXRleGVyY2lzZV9jaGFuZ2VfaXRlbV9wYW5lbFwiKVxudmFyIE1haW51aUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIilcbnZhciBMaW1pdGV4ZXJjaXNlX2NoYW5nZVdpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJsaW1pdGV4ZXJjaXNlXCIsIFwibGltaXRleGVyY2lzZV9jaGFuZ2Vfd2luZG93XCIpO1xuICAgICAgICAvLyB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcudWk7ICAgICAgICAgICAgICAgIC8v6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5GdWxsOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgICAgICB0aGlzLmN0cmwgPSBhcmd1bWVudHNbMF1cbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMucmV3YXJkX2xpc3QgPSBDb25maWcuaG9saWRheV9ib3NzX25ld19kYXRhLmRhdGFfbGV2X3Jld2FyZF9saXN0XG4gICAgICAgIHRoaXMuY2hhbmdlX2Jvc3NfbGlzdCA9IENvbmZpZy5ob2xpZGF5X2Jvc3NfbmV3X2RhdGEuZGF0YV9jaGFuZ2VfYm9zc19saXN0XG4gICAgICAgIHRoaXMuY3VyX29yZGVyX3R5cGUgPSBudWxsXG4gICAgICAgIHRoaXMuY3VyX29yZGVyX2lkID0gbnVsbFxuICAgICAgICB0aGlzLmN1cl9ib3hfc3RhdHVzID0gbnVsbFxuICAgICAgICB0aGlzLnNjcm9sbHZpZXdfYmFyID0gbnVsbFxuICAgICAgICB0aGlzLml0ZW1fbGlzdF9wYW5lbCA9IFtdXG4gICAgICAgIHRoaXMucG9zX2ludGVydmFsID0gW1swLDMyMF0sWzMyMCwxMDQ3XSxbMTA0NywxNTAwXV1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBsZXQgbWFpbl9jb250YWluZXIgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIilcbiAgICAgICAgbGV0IGxvYWRfYmcgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJnXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpXG4gICAgICAgIGxvYWRfYmcubm9kZS5zY2FsZSA9IEZJVF9TQ0FMRVxuICAgICAgICBsZXQgYmdfcmVzID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImJpZ2JnL2xpbWl0ZXhlcmNpc2VcIiwgXCJsaW1pdF9leGVyY2lzZV9iZzFcIixcImpwZ1wiKVxuICAgICAgICB0aGlzLmxvYWRSZXMoYmdfcmVzLGZ1bmN0aW9uKHJlcyl7XG4gICAgICAgICAgICBsb2FkX2JnLnNwcml0ZUZyYW1lID0gcmVzO1xuICAgICAgICB9KVxuICAgICAgICBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlRleHRfMTBcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSAoVXRpbHMuVEkxOE4oXCLmnKzova7mjJHmiJjliankvZnvvJpcIikpXG4gICAgICAgIHRoaXMucmFtYWluX3RpbWUgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInJhbWFpbl90aW1lXCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5yYW1haW5fdGltZS5zdHJpbmcgPSAoXCJcIilcbiAgICAgICAgdGhpcy5sZXZlbF9hcmVhX3RleHQgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImxldmVsX2FyZWFfdGV4dFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRoaXMubGV2ZWxfYXJlYV90ZXh0LnN0cmluZyA9IChcIlwiKVxuICAgIFxuICAgICAgICAvLyAtLeW3pui+uea7keWKqFxuICAgICAgICB0aGlzLmxlZnRfc2Nyb2xsdmlld19wb3MgPSB7fVxuICAgICAgICBmb3IobGV0IGk9MTtpPD0zOysraSl7XG4gICAgICAgICAgICBsZXQgc3ByID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJzcm9sbF9zcHJfXCIraSlcbiAgICAgICAgICAgIHRoaXMubGVmdF9zY3JvbGx2aWV3X3Bvc1tpXSA9IHNwci55XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zcm9sbF9tYWluX3NwciA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwic3JvbGxfbWFpbl9zcHJcIilcbiAgICAgICAgdGhpcy5zcm9sbF9tYWluX3Nwci5vcGFjaXR5ID0gKDApXG4gICAgICAgIC8vIC0t6Zq+5bqmXG4gICAgICAgIHRoaXMubGV2ZWxfbnVtID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJsZXZlbF9udW1cIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLmxldmVsX251bS5zdHJpbmcgPSAoXCJcIilcbiAgICAgICAgbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJsZXZlbF9hcmVhX3RleHRfMF8wXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi6Zq+5bqmXCIpKVxuICAgIFxuICAgICAgICB0aGlzLml0ZW1fYXJlYSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbV9hcmVhXCIpXG4gICAgICAgIC8vIC0t5YWz5Y2h5L+h5oGvXG4gICAgICAgIHRoaXMubGV2ZWxfbXNnID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJsZXZlbF9tc2dcIilcbiAgICAgICAgdGhpcy5idG5fY2hhbmdlID0gdGhpcy5sZXZlbF9tc2cuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fY2hhbmdlXCIpXG4gICAgICAgIHRoaXMuYnRuX2NoYW5nZV9idG4gPSB0aGlzLmJ0bl9jaGFuZ2UuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbilcbiAgICAgICAgdGhpcy5idG5fY2hhbmdlX3RleHQgPSB0aGlzLmJ0bl9jaGFuZ2UuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzRcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLmJ0bl9jaGFuZ2VfdGV4dC5zdHJpbmcgPSAoVXRpbHMuVEkxOE4oXCLmjJHmiJhcIikpXG4gICAgICAgIHRoaXMuY2hhbmdlX291dGxpbmUgPSB0aGlzLmJ0bl9jaGFuZ2UuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzRcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsT3V0bGluZSlcbiAgICAgICAgdGhpcy5idG5fYm94ID0gdGhpcy5sZXZlbF9tc2cuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fYm94XCIpXG4gICAgICAgIHRoaXMuYm94X3Nwcml0ZSA9IHRoaXMuYnRuX2JveC5nZXRDaGlsZEJ5TmFtZShcImJveF9zcHJpdGVcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSlcbiAgICAgICAgLy8gdGhpcy5ib3hfc3ByaXRlOnNldEFuY2hvclBvaW50KDAuNSwwLjUpXG4gICAgICAgIC8vIHRoaXMuYm94X3Nwcml0ZTpzZXRQb3NpdGlvblkoNDkpXG4gICAgICAgIHRoaXMubGV2ZWxfbXNnLmdldENoaWxkQnlOYW1lKFwiVGV4dF84XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi5LiL5LiA6Zi25q615aWW5YqxXCIpKVxuICAgICAgICB0aGlzLmxldmVsX3RleHQgPSB0aGlzLmxldmVsX21zZy5nZXRDaGlsZEJ5TmFtZShcImxldmVsX3RleHRcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKSAvL+esrOWHoOWFs1xuICAgICAgICB0aGlzLmxldmVsX3RleHQuc3RyaW5nID0gKFwiXCIpXG4gICAgXG4gICAgICAgIHRoaXMubGV2ZWxfbXNnLmdldENoaWxkQnlOYW1lKFwibGV2ZWxfdGlwc190ZXh0XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi5YWz5Y2h5pWI5p6cXCIpKVxuICAgICAgICB0aGlzLmxldmVsX2VmZmVjdF9kZXNjID0gdGhpcy5sZXZlbF9tc2cuZ2V0Q2hpbGRCeU5hbWUoXCJsZXZlbF9lZmZlY3RfZGVzY1wiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRoaXMucG93ZXIgPSB0aGlzLmxldmVsX21zZy5nZXRDaGlsZEJ5TmFtZShcInBvd2VyXCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5wb3dlci5zdHJpbmcgPSAoVXRpbHMuVEkxOE4oXCLmjqjojZDmiJjlipvvvJpcIikpXG4gICAgICAgIHRoaXMuY2hhbmdlX2l0ZW0gPSB0aGlzLmxldmVsX21zZy5nZXRDaGlsZEJ5TmFtZShcImNoYW5nZV9pdGVtXCIpXG4gICAgICAgIHRoaXMuY2hhbmdlX2l0ZW1fY29udGVudCA9IHRoaXMuY2hhbmdlX2l0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJjb250ZW50XCIpXG4gICAgICAgIC8vIHRoaXMuY2hhbmdlX2l0ZW06c2V0U2Nyb2xsQmFyRW5hYmxlZChmYWxzZSlcbiAgICAgICAgXG4gICAgICAgIHRoaXMuYnRuX3J1bGUgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJ0bl9ydWxlXCIpXG4gICAgICAgIGxldCBib3R0b21fcGFuZWwgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJvdHRvbV9wYW5lbFwiKVxuICAgICAgICBib3R0b21fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJjb3VudF90aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IChVdGlscy5USTE4TihcIuaMkeaImOasoeaVsDpcIikpXG4gICAgICAgIHRoaXMucmVtYWluX2NvdW50ID0gYm90dG9tX3BhbmVsLmdldENoaWxkQnlOYW1lKFwicmVtYWluX2NvdW50XCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5yZW1haW5fY291bnQuc3RyaW5nID0gKFwi5Ymp5L2Z6LSt5Lmw5qyh5pWw77yaXCIpXG4gICAgICAgIHRoaXMuY2hhbmdlX2NvdW50ID0gYm90dG9tX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiY291bnRfbGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLmNoYW5nZV9jb3VudC5zdHJpbmcgPSAoXCJcIilcbiAgICBcbiAgICAgICAgdGhpcy5hZGRfYnRuID0gYm90dG9tX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiYWRkX2J0blwiKVxuICAgICAgICB0aGlzLmJ0bl9jbG9zZSA9IGJvdHRvbV9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9jbG9zZVwiKVxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldyA9IHRoaXMuaXRlbV9hcmVhLmdldENvbXBvbmVudChjYy5TY3JvbGxWaWV3KVxuXG4gICAgICAgIHRoaXMuaXRlbV9hcmVhLm9uKCdzY3JvbGxpbmcnLCB0aGlzLnVwZGF0ZVNsaWRlU2hvd0J5VmVydGljYWwsIHRoaXMpO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJ0bl9jaGFuZ2Uub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xuICAgICAgICAgICAgdmFyIEhlcm9Db250cm9sbGVyID0gcmVxdWlyZShcImhlcm9fY29udHJvbGxlclwiKVxuICAgICAgICAgICAgdmFyIFBhcnRuZXJDb25zdCA9IHJlcXVpcmUoXCJwYXJ0bmVyX2NvbnN0XCIpXG4gICAgICAgICAgICBIZXJvQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5Gb3JtR29GaWdodFBhbmVsKHRydWUsUGFydG5lckNvbnN0LkZ1bl9Gb3JtLkxpbWl0RXhlcmNpc2UpXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5idG5fYm94Lm9uKCdjbGljaycsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKHRoaXMubW9kZWwuZ2V0Qm94U3RhdHVzKCkgPT0gMSl7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmQyNTQxMigpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3BlbkxpbWl0RXhlcmNpc2VSZXdhcmRWaWV3KHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5idG5fcnVsZS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkNvbW1vbkV4cGxhaW5WaWV3KHRydWUsQ29uZmlnLmhvbGlkYXlfYm9zc19uZXdfZGF0YS5kYXRhX2V4cGxhaW4sVXRpbHMuVEkxOE4oXCLop4TliJnor7TmmI5cIikpXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5idG5fY2xvc2Uub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkxpbWl0RXhlcmNpc2VDaGFuZ2VWaWV3KGZhbHNlKVxuICAgICAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDIpXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5hZGRfYnRuLm9uKCdjbGljaycsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKVxuICAgICAgICAgICAgbGV0IGNvbnN0X2RhdGEgPSBDb25maWcuaG9saWRheV9ib3NzX25ld19kYXRhLmRhdGFfY29uc3RcbiAgICAgICAgICAgIGlmKCFjb25zdF9kYXRhKSByZXR1cm47XG4gICAgICAgICAgICBsZXQgY3VyX2NvdW50ID0gdGhpcy5tb2RlbC5nZXREYXlCdXlDb3VudCgpXG4gICAgICAgICAgICBsZXQgbWF4X2NvdW50ID0gY29uc3RfZGF0YS5maWdodF9idXlfbWF4X2NvdW50LnZhbFxuICAgICAgICAgICAgaWYoY3VyX2NvdW50ID49IG1heF9jb3VudCl7XG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuW3sui+vuS7iuaXpei0reS5sOacgOWkp+WAvFwiKSlcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBDb21tb25BbGVydCA9IHJlcXVpcmUoXCJjb21tb25hbGVydFwiKTtcbiAgICAgICAgICAgIHZhciBzdHIgPSBjYy5qcy5mb3JtYXRTdHIoXCLmmK/lkKboirHotLk8aW1nIHNyYz0nJXMnIHNjYWxlPTAuMyAvPiVz6LSt5Lmw5LiA5qyh5oyR5oiY5qyh5pWw77yfXCIsIENvbmZpZy5pdGVtX2RhdGEuZGF0YV9hc3NldHNfbGFiZWwyaWQuZ29sZCxjb25zdF9kYXRhLmFjdGlvbl9udW1fZXNwZW5zaXZlLnZhbClcbiAgICAgICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRJdGVtUmVzKENvbmZpZy5pdGVtX2RhdGEuZGF0YV9hc3NldHNfbGFiZWwyaWQuZ29sZClcbiAgICAgICAgICAgIHZhciBjYWxsX2JhY2sgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kMjU0MTEoKVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICAgICBDb21tb25BbGVydC5zaG93KHN0ciwgVXRpbHMuVEkxOE4oXCLnoa7orqRcIiksIGNhbGxfYmFjaywgVXRpbHMuVEkxOE4oXCLlj5bmtohcIiksIG51bGwsIDIsIG51bGwsIHsgcmVzQXJyOiBbcmVzXSB9KVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoTGltaXRFeGVyY2lzZUV2ZW50LkxpbWl0RXhlcmNpc2VfTWVzc2FnZV9FdmVudCxmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgIHRoaXMuc2V0Um91bmRIZXJvKGRhdGEuZGlmZmljdWx0eSxkYXRhLmNvdW50KVxuICAgICAgICAgICAgdGhpcy5yZW1haW5CdXlDb3VudChkYXRhLmJ1eV9jb3VudClcbiAgICAgICAgICAgIHRoaXMuc2V0Q291bnREb3duVGltZSh0aGlzLnJhbWFpbl90aW1lLGRhdGEuZW5kdGltZSAtIGdjb3JlLlNtYXJ0U29ja2V0LmdldFRpbWUoKSlcbiAgICAgICAgICAgIHRoaXMubGV2ZWxCb3hTdGF0dXMoZGF0YS5zdGF0dXMsZGF0YS5vcmRlcilcbiAgICAgICAgICAgIHRoaXMuc2hvd0Jvc3NNZXNzYWdlSXRlbShkYXRhLmRpZmZpY3VsdHkpXG4gICAgICAgICAgICB0aGlzLmdldExldmVsTWVzc2FnZShkYXRhLm9yZGVyX3R5cGUsZGF0YS5vcmRlcilcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KExpbWl0RXhlcmNpc2VFdmVudC5MaW1pdEV4ZXJjaXNlX0J1eUNvdW50X0V2ZW50LGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICAgICAgaWYoZGF0YSl7XG4gICAgICAgICAgICAgICAgbGV0IGRpZmZpY3VsdHkgPSB0aGlzLm1vZGVsLmdldEN1cnJlbnREaWZmKClcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJvdW5kSGVybyhkaWZmaWN1bHR5LGRhdGEuY291bnQpXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1haW5CdXlDb3VudChkYXRhLmJ1eV9jb3VudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KExpbWl0RXhlcmNpc2VFdmVudC5MaW1pdEV4ZXJjaXNlX0dldEJveF9FdmVudCxmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgIGlmKGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGEuY29kZSA9PSAxKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXZlbEJveFN0YXR1cygyLDE1KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihwYXJhbXMpe1xuICAgICAgICBpZih0aGlzLm1vZGVsLmdldExpbWl0RXhlcmNpc2VEYXRhKCkgPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLmN0cmwuc2VuZDI1NDEwKClcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMubW9kZWwuZ2V0TGltaXRFeGVyY2lzZURhdGEoKVxuICAgICAgICAgICAgdGhpcy5zZXRSb3VuZEhlcm8oZGF0YS5kaWZmaWN1bHR5LGRhdGEuY291bnQpXG4gICAgICAgICAgICB0aGlzLnJlbWFpbkJ1eUNvdW50KGRhdGEuYnV5X2NvdW50KVxuICAgICAgICAgICAgdGhpcy5zZXRDb3VudERvd25UaW1lKGRhdGEuZW5kdGltZSAtZ2NvcmUuU21hcnRTb2NrZXQuZ2V0VGltZSgpKVxuICAgICAgICAgICAgdGhpcy5sZXZlbEJveFN0YXR1cyhkYXRhLnN0YXR1cyxkYXRhLm9yZGVyKVxuICAgICAgICAgICAgdGhpcy5zaG93Qm9zc01lc3NhZ2VJdGVtKGRhdGEuZGlmZmljdWx0eSlcblxuICAgICAgICAgICAgbGV0IGNvbnRhaW5lcl95ID0gdGhpcy5pdGVtX3Njcm9sbHZpZXcuY29udGVudC55XG4gICAgICAgICAgICBsZXQgY3VyX3BvcyA9IHRoaXMuZ2V0Q3VycmVudFBvcyhNYXRoLmFicyhjb250YWluZXJfeSkpXG4gICAgICAgICAgICB0aGlzLnNjcm9sbHZpZXdTcHJpbnRCYXIoY3VyX3BvcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwuc2VuZDI1NDE0KClcbiAgICB9LFxuICAgIGNyZWF0ZUFyZWFMaXN0KCl7XG4gICAgICAgIGlmKHRoaXMuaXRlbV9saXN0X3BhbmVsLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSAgdGhpcy5zdGFydFVwZGF0ZSh0aGlzLmFyZWFfbGlzdC5sZW5ndGgsZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gbmV3IExpbWl0RXhlcmNpc2VDaGFuZ2VJdGVtKClcbiAgICAgICAgICAgICAgICBpdGVtLnNldFBhcmVudCh0aGlzLml0ZW1fc2Nyb2xsdmlldy5jb250ZW50KVxuICAgICAgICAgICAgICAgIGl0ZW0uc2hvdygpXG4gICAgICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbigwLGluZGV4Kml0ZW0uSGVpZ2h0SXRlbSlcbiAgICAgICAgICAgICAgICBpdGVtLnNldERhdGEodGhpcy5hcmVhX2xpc3RbaW5kZXhdKVxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkQ2FsbEJhY2soZnVuY3Rpb24oY2VsbCxvcmRlcl90eXBlLG9yZGVyX2lkLGluZGV4KXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNlbGxUb3VjaGVkKGNlbGwsb3JkZXJfdHlwZSxvcmRlcl9pZCxpbmRleClcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RfcGFuZWwucHVzaChpdGVtKVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLDEwMClcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBmb3IobGV0IGk9MDtpPHRoaXMuYXJlYV9saXN0Lmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gdGhpcy5pdGVtX2xpc3RfcGFuZWxbaV1cbiAgICAgICAgICAgICAgICBpZighaXRlbSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gbmV3IExpbWl0RXhlcmNpc2VDaGFuZ2VJdGVtKClcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQYXJlbnQodGhpcy5pdGVtX3Njcm9sbHZpZXcuY29udGVudClcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zaG93KClcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbigwLGluZGV4Kml0ZW0uSGVpZ2h0SXRlbSlcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5hZGRDYWxsQmFjayhmdW5jdGlvbihjZWxsLG9yZGVyX3R5cGUsb3JkZXJfaWQsaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNlbGxUb3VjaGVkKGNlbGwsb3JkZXJfdHlwZSxvcmRlcl9pZCxpbmRleClcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdF9wYW5lbFtpXSA9IGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0RGF0YSh0aGlzLmFyZWFfbGlzdFtpXSlcbiAgICAgICAgICAgICAgICBpdGVtLnNldEl0ZW1JbmRleCgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuY29udGVudC5oZWlnaHQgPSB0aGlzLmFyZWFfbGlzdC5sZW5ndGggKiA1NjhcbiAgICB9LFxuICAgIHNldFJvdW5kSGVybyhjaGFuZ2VfaWQsY291bnQpe1xuICAgICAgICB0aGlzLmxldmVsX251bS5zdHJpbmcgPSAoY2hhbmdlX2lkIHx8IDEpXG4gICAgICAgIHRoaXMuY2hhbmdlX2NvdW50LnN0cmluZyA9IChjb3VudCB8fCAwKVxuICAgIH0sXG4gICAgLy/liankvZnotK3kubDmrKHmlbBcbiAgICByZW1haW5CdXlDb3VudChidXlfY291bnQpe1xuICAgICAgICBidXlfY291bnQgPSBidXlfY291bnQgfHwgMFxuICAgICAgICBpZih0aGlzLnJlbWFpbl9jb3VudCl7XG4gICAgICAgICAgICBsZXQgY291bnQgPSAwXG4gICAgICAgICAgICBsZXQgY29uc3RfZGF0YSA9IENvbmZpZy5ob2xpZGF5X2Jvc3NfbmV3X2RhdGEuZGF0YV9jb25zdC5maWdodF9idXlfbWF4X2NvdW50XG4gICAgICAgICAgICBpZihjb25zdF9kYXRhICYmIGNvbnN0X2RhdGEudmFsKXtcbiAgICAgICAgICAgICAgICBjb3VudCA9IGNvbnN0X2RhdGEudmFsIC0gYnV5X2NvdW50XG4gICAgICAgICAgICAgICAgaWYoY291bnQgPD0gMCl7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlbWFpbl9jb3VudC5zdHJpbmcgPSAoXCLliankvZnotK3kubDmrKHmlbDvvJpcIitjb3VudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2V0Q291bnREb3duVGltZShsZXNzX3RpbWUpe1xuICAgICAgICBpZih0aGlzLnJhbWFpbl90aW1lKXtcbiAgICAgICAgICAgIGlmKHRoaXMudGltZV90aWNoZXQpe1xuICAgICAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnRpbWVfdGljaGV0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVfdGljaGV0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGxlc3NfdGltZSA+IDApe1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZUZvcm1hdFN0cmluZyhsZXNzX3RpbWUpXG4gICAgICAgICAgICAgICAgdGhpcy50aW1lX3RpY2hldCA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICBsZXNzX3RpbWUtLSBcbiAgICAgICAgICAgICAgICAgICAgaWYobGVzc190aW1lIDwgMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy50aW1lX3RpY2hldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVfdGljaGV0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFtYWluX3RpbWUuc3RyaW5nID0gKFwiMDA6MDA6MDBcIilcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVGb3JtYXRTdHJpbmcobGVzc190aW1lKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLDEwMDAsLTEpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVGb3JtYXRTdHJpbmcobGVzc190aW1lKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXRUaW1lRm9ybWF0U3RyaW5nKHRpbWUpe1xuICAgICAgICBpZih0aW1lID4gMCl7XG4gICAgICAgICAgICB0aGlzLnJhbWFpbl90aW1lLnN0cmluZyA9IChUaW1lVG9vbC5nZXRUaW1lRm9ybWF0RGF5KHRpbWUpKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMucmFtYWluX3RpbWUuc3RyaW5nID0gKFwiMDA6MDA6MDBcIilcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy/lrp3nrrHnirbmgIFcbiAgICBsZXZlbEJveFN0YXR1cyhzdGF0dXMsb3JkX2lkKXtcbiAgICAgICAgaWYodGhpcy5jdXJfYm94X3N0YXR1cyA9PSBzdGF0dXMpIHJldHVybjtcblxuICAgICAgICB0aGlzLmN1cl9ib3hfc3RhdHVzID0gc3RhdHVzXG5cbiAgICAgICAgbGV0IGlkID0gdGhpcy5nZXRCb3hSZXdhcmRJRChvcmRfaWQpXG4gICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwibGltaXRleGVyY2lzZVwiLFwibGltaXRleGVyY2lzZV9ib3hcIitpZCksZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgIHRoaXMuYm94X3Nwcml0ZS5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgaWYoc3RhdHVzID09IDEpe1xuICAgICAgICAgICAgdGhpcy5ib3hfc3ByaXRlLm5vZGUuc3RvcEFsbEFjdGlvbnMoKVxuICAgICAgICAgICAgbGV0IHNrZXd0b18xID0gY2Mucm90YXRlVG8oMC4xLCAxMClcbiAgICAgICAgICAgIGxldCBza2V3dG9fMiA9IGNjLnJvdGF0ZVRvKDAuMSwgLTEwKVxuICAgICAgICAgICAgbGV0IHNrZXd0b18zID0gY2Mucm90YXRlVG8oMC4xLCAwKVxuICAgICAgICAgICAgbGV0IHNlcSA9IGNjLnNlcXVlbmNlKHNrZXd0b18xLHNrZXd0b18yLCBza2V3dG9fMSxza2V3dG9fMiwgc2tld3RvXzEsc2tld3RvXzIsc2tld3RvXzMsY2MuZGVsYXlUaW1lKDEpKVxuICAgICAgICAgICAgbGV0IHJlcGVhdEZvcmV2ZXIgPSBjYy5yZXBlYXRGb3JldmVyKHNlcSlcbiAgICAgICAgICAgIHRoaXMuYm94X3Nwcml0ZS5ub2RlLnJ1bkFjdGlvbihyZXBlYXRGb3JldmVyKVxuICAgICAgICB9ZWxzZSBpZihzdGF0dXMgPT0gMil7XG4gICAgICAgICAgICB0aGlzLmJveF9zcHJpdGUubm9kZS5zdG9wQWxsQWN0aW9ucygpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGdldEJveFJld2FyZElEKG9yZF9pZCl7XG4gICAgICAgIGxldCBkaWZmID0gdGhpcy5tb2RlbC5nZXRDdXJyZW50RGlmZihvcmRfaWQpXG4gICAgICAgIGxldCBjb3VudCA9IDFcbiAgICAgICAgaWYodGhpcy5yZXdhcmRfbGlzdFtkaWZmXSl7XG4gICAgICAgICAgICBmb3IobGV0IGk9MTtpPD0zOysraSl7XG4gICAgICAgICAgICAgICAgaWYob3JkX2lkIDw9IHRoaXMucmV3YXJkX2xpc3RbZGlmZl1bMV0ub3JkZXJfaWQpe1xuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDFcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihvcmRfaWQgPiB0aGlzLnJld2FyZF9saXN0W2RpZmZdWzFdLm9yZGVyX2lkICYmIG9yZF9pZCA8PSB0aGlzLnJld2FyZF9saXN0W2RpZmZdWzJdLm9yZGVyX2lkKXtcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSAyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYob3JkX2lkID4gdGhpcy5yZXdhcmRfbGlzdFtkaWZmXVsyXS5vcmRlcl9pZCl7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gM1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnRcbiAgICB9LFxuICAgIC8v5pi+56S6Ym9zc+S/oeaBryAg6L2u5qyh77yM6Zq+5bqmXG4gICAgc2hvd0Jvc3NNZXNzYWdlSXRlbShkaWZmKXtcbiAgICAgICAgbGV0IHJvdW5kID0gdGhpcy5tb2RlbC5nZXRDdXJyZW50Um91bmQoKVxuICAgICAgICBkaWZmID0gZGlmZiB8fCAxXG4gICAgICAgIGlmKHRoaXMuaXRlbV9zY3JvbGx2aWV3KXtcbiAgICAgICAgICAgIGlmKHRoaXMuY2hhbmdlX2Jvc3NfbGlzdFtyb3VuZF0gJiYgdGhpcy5jaGFuZ2VfYm9zc19saXN0W3JvdW5kXVtkaWZmXSl7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmVhX2xpc3QgPSBbXVxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiB0aGlzLmNoYW5nZV9ib3NzX2xpc3Rbcm91bmRdW2RpZmZdKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmNoYW5nZV9ib3NzX2xpc3Rbcm91bmRdW2RpZmZdW2ldXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJlYV9saXN0LnB1c2godilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2MubG9nKHRoaXMuYXJlYV9saXN0KVxuICAgICAgICAgICAgICAgIGxldCBsZXZlbF90eXBlID0gdGhpcy5tb2RlbC5nZXRDdXJyZW50VHlwZSgpXG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gMVxuICAgICAgICAgICAgICAgIGlmKGxldmVsX3R5cGUpe1xuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGxldmVsX3R5cGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuY29udGVudC55ID0gKGNvdW50IC0gMSkgKiAtNTY4XG4gICAgICAgICAgICAgICAgdGhpcy5zcm9sbF9tYWluX3Nwci55ID0gKHRoaXMubGVmdF9zY3JvbGx2aWV3X3Bvc1tjb3VudF0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVBcmVhTGlzdCgpXG4gICAgfSxcbiAgICAvL+WFs+WNoeS/oeaBryAgKOWFs+WNoeexu+Wei+OAgeWFs+WNoWlkKVxuICAgIGdldExldmVsTWVzc2FnZShvcmRfdHlwZSxvcmRfaWQpe1xuICAgICAgICBvcmRfdHlwZSA9IG9yZF90eXBlIHx8IDFcbiAgICAgICAgb3JkX2lkID0gb3JkX2lkIHx8IHRoaXMubW9kZWwuZ2V0Q3VycmVudENoYW5nZUlEKClcbiAgICAgICAgaWYodGhpcy5jdXJfb3JkZXJfdHlwZSA9PSBvcmRfdHlwZSAmJiB0aGlzLmN1cl9vcmRlcl9pZCA9PSBvcmRfaWQpe1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJvdW5kID0gdGhpcy5tb2RlbC5nZXRDdXJyZW50Um91bmQoKVxuICAgICAgICBsZXQgZGlmZiA9IHRoaXMubW9kZWwuZ2V0Q3VycmVudERpZmYoKVxuICAgICAgICBpZighcm91bmQpIHJldHVybjtcblxuICAgICAgICB0aGlzLmxldmVsX2FyZWFfdGV4dC5zdHJpbmcgPSAoTGltaXRFeGVyY2lzZUNvbnN0YW50cy50eXBlW29yZF90eXBlXSlcblxuICAgICAgICBpZih0aGlzLmNoYW5nZV9ib3NzX2xpc3Rbcm91bmRdICYmIHRoaXMuY2hhbmdlX2Jvc3NfbGlzdFtyb3VuZF1bZGlmZl0pe1xuICAgICAgICAgICAgbGV0IGxldl9kYXRhID0gdGhpcy5jaGFuZ2VfYm9zc19saXN0W3JvdW5kXVtkaWZmXVxuICAgICAgICAgICAgaWYob3JkX2lkID49IDE1KSB7XG4gICAgICAgICAgICAgICAgb3JkX2lkID0gMTVcbiAgICAgICAgICAgIH0gIFxuICAgICAgICAgICAgaWYobGV2X2RhdGFbb3JkX3R5cGVdICYmIGxldl9kYXRhW29yZF90eXBlXVtvcmRfaWRdKXtcbiAgICAgICAgICAgICAgICBsZXQgbGV2X2NvdW50ID0gbGV2X2RhdGFbb3JkX3R5cGVdW29yZF9pZF0ub3JkZXJfaWRcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsX3RleHQuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi56ysXCIpK2xldl9jb3VudCtVdGlscy5USTE4TihcIuWFs1wiKSlcblxuICAgICAgICAgICAgICAgIGlmKGxldl9jb3VudCA9PSB0aGlzLm1vZGVsLmdldEN1cnJlbnRDaGFuZ2VJRCgpKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idG5fY2hhbmdlX2J0bi5pbnRlcmFjdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ0bl9jaGFuZ2VfYnRuLmVuYWJsZUF1dG9HcmF5RWZmZWN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlX291dGxpbmUuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnRuX2NoYW5nZV9idG4uaW50ZXJhY3RhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnRuX2NoYW5nZV9idG4uZW5hYmxlQXV0b0dyYXlFZmZlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZV9vdXRsaW5lLmVuYWJsZWQgPSBmYWxzZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBzdHIgPSBcIlwiXG4gICAgICAgICAgICAgICAgbGV0IGRlc2MgPSBsZXZfZGF0YVtvcmRfdHlwZV1bb3JkX2lkXS5hZGRfc2tpbGxfZGVjcyB8fCBbXVxuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8ZGVzYy5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyK2Rlc2NbaV0rXCJcXG5cIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsX2VmZmVjdF9kZXNjLnN0cmluZyA9IChzdHIpXG4gICAgICAgICAgICAgICAgbGV0IHBvd2VyID0gbGV2X2RhdGFbb3JkX3R5cGVdW29yZF9pZF0ucG93ZXIgfHwgMFxuICAgICAgICAgICAgICAgIHRoaXMucG93ZXIuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi5o6o6I2Q5oiY5Yqb77yaXCIpK3Bvd2VyKVxuXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jdXJfb3JkZXJfdHlwZSAhPSBvcmRfdHlwZSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IHRoaXMuZ2V0Qm94UmV3YXJkSUQob3JkX2lkKVxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnJld2FyZF9saXN0W2RpZmZdICYmIHRoaXMucmV3YXJkX2xpc3RbZGlmZl1bY291bnRdKXtcbiAgICAgICAgICAgICAgICAgICAgLy/ojrflj5blpZblirFcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhX2xpc3QgPSB0aGlzLnJld2FyZF9saXN0W2RpZmZdW2NvdW50XS5yZXdhcmQgfHwgW11cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZXR0aW5nID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuc2NhbGUgPSAwLjZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcubWF4X2NvdW50ID0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5pc19jZW50ZXIgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nLnNob3dfZWZmZWN0X2lkID0gMjYzXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsX2l0ZW1fbGlzdCA9IFV0aWxzLmNvbW1vblNob3dTaW5nbGVSb3dJdGVtTGlzdCh0aGlzLmNoYW5nZV9pdGVtLCB0aGlzLmxldmVsX2l0ZW1fbGlzdCwgZGF0YV9saXN0LCBzZXR0aW5nLHRoaXMuY2hhbmdlX2l0ZW1fY29udGVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cl9vcmRlcl90eXBlID0gb3JkX3R5cGVcbiAgICAgICAgdGhpcy5jdXJfb3JkZXJfaWQgPSBvcmRfaWRcbiAgICB9LFxuICAgIG9uQ2VsbFRvdWNoZWQoY2VsbCxvcmRlcl90eXBlLG9yZGVyX2lkLGluZGV4KXtcbiAgICAgICAgaWYodGhpcy50b3VjaF9rdWFuZyA9PSBudWxsKXsgXG4gICAgICAgICAgICB0aGlzLnRvdWNoX2t1YW5nID0gbmV3IGNjLk5vZGUoKVxuICAgICAgICAgICAgbGV0IGltYWdlID0gdGhpcy50b3VjaF9rdWFuZy5hZGRDb21wb25lbnQoY2MuU3ByaXRlKVxuICAgICAgICAgICAgaW1hZ2UudHlwZSA9IGNjLlNwcml0ZS5UeXBlLlNMSUNFRDtcbiAgICAgICAgICAgIGltYWdlLnNpemVNb2RlID0gY2MuU3ByaXRlLlNpemVNb2RlLkNVU1RPTTtcbiAgICAgICAgICAgIHRoaXMudG91Y2hfa3Vhbmcuc2V0Q29udGVudFNpemUoMTEwLDExMClcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LmNvbnRlbnQuYWRkQ2hpbGQodGhpcy50b3VjaF9rdWFuZyw5OSlcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY29tbW9uXCIsXCJjb21tb25fOTAwMTlcIiksZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgICAgICBpbWFnZS5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB9XG4gICAgICAgIGxldCBpdGVtID0gY2VsbC5nZXRCdG5NYXN0ZXIoaW5kZXgpXG4gICAgICAgIGlmKGl0ZW0pe1xuICAgICAgICAgICAgbGV0IHdvcmxkUG9zID0gaXRlbS5jb252ZXJ0VG9Xb3JsZFNwYWNlQVIoY2MudjIoMCwwKSlcbiAgICAgICAgICAgIGxldCBwb3MgPSB0aGlzLml0ZW1fc2Nyb2xsdmlldy5jb250ZW50LmNvbnZlcnRUb05vZGVTcGFjZSh3b3JsZFBvcylcbiAgICAgICAgICAgIHRoaXMudG91Y2hfa3Vhbmcuc2V0UG9zaXRpb24ocG9zLngtMjUscG9zLnktNClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldExldmVsTWVzc2FnZShvcmRlcl90eXBlLG9yZGVyX2lkKVxuICAgIH0sXG4gICAgdXBkYXRlU2xpZGVTaG93QnlWZXJ0aWNhbCgpe1xuICAgICAgICBsZXQgY29udGFpbmVyX3kgPSB0aGlzLml0ZW1fc2Nyb2xsdmlldy5jb250ZW50LnlcbiAgICAgICAgaWYodGhpcy5pdGVtX3Njcm9sbHZpZXcpe1xuICAgICAgICAgICAgbGV0IGN1cl9wb3MgPSB0aGlzLmdldEN1cnJlbnRQb3MoTWF0aC5hYnMoY29udGFpbmVyX3kpKVxuICAgICAgICAgICAgdGhpcy5zY3JvbGx2aWV3U3ByaW50QmFyKGN1cl9wb3MpXG4gICAgICAgICAgICB0aGlzLmxldmVsX2FyZWFfdGV4dC5zdHJpbmcgPSBMaW1pdEV4ZXJjaXNlQ29uc3RhbnRzLnR5cGVbY3VyX3Bvc11cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy/liKTmlq3lvZPliY3kvY3nva5cbiAgICBnZXRDdXJyZW50UG9zKHBvcyl7XG4gICAgICAgIGxldCBjdXJfcG9zID0gMVxuICAgICAgICBpZihwb3MgPj0gdGhpcy5wb3NfaW50ZXJ2YWxbMF1bMF0gJiYgcG9zIDw9IHRoaXMucG9zX2ludGVydmFsWzBdWzFdKXtcbiAgICAgICAgICAgIGN1cl9wb3MgPSAxXG4gICAgICAgIH1lbHNlIGlmKHBvcyA+PSB0aGlzLnBvc19pbnRlcnZhbFsxXVswXSAmJiBwb3MgPD0gdGhpcy5wb3NfaW50ZXJ2YWxbMV1bMV0pe1xuICAgICAgICAgICAgY3VyX3BvcyA9IDJcbiAgICAgICAgfWVsc2UgaWYocG9zID49IHRoaXMucG9zX2ludGVydmFsWzJdWzBdICYmIHBvcyA8PSB0aGlzLnBvc19pbnRlcnZhbFsyXVsxXSl7XG4gICAgICAgICAgICBjdXJfcG9zID0gM1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJfcG9zXG4gICAgfSxcbiAgICAvL+a7keWKqOeahOWKqOS9nOWkhOeQhlxuICAgIHNjcm9sbHZpZXdTcHJpbnRCYXIoY3VyX3Bvcyl7XG4gICAgICAgIGlmKHRoaXMuc2Nyb2xsdmlld19iYXIgPT0gY3VyX3BvcykgcmV0dXJuO1xuICAgICAgICB0aGlzLnNjcm9sbHZpZXdfYmFyID0gY3VyX3Bvc1xuICAgICAgICB0aGlzLnNyb2xsX21haW5fc3ByLnN0b3BBbGxBY3Rpb25zKClcbiAgICAgICAgLy8gZG9TdG9wQWxsQWN0aW9ucyh0aGlzLnNyb2xsX21haW5fc3ByKVxuXG4gICAgICAgIGxldCBmYWRlb3V0ID0gY2MuZmFkZU91dCgwLjMpXG4gICAgICAgIGxldCBmYWRlaW4gPSBjYy5mYWRlSW4oMC4zKVxuICAgICAgICBsZXQgbW92ZV90byA9IGNjLm1vdmVUbygwLjEsY2MudjIoLTMxOSwgdGhpcy5sZWZ0X3Njcm9sbHZpZXdfcG9zW2N1cl9wb3NdKSlcbiAgICAgICAgbGV0IHNjYWxldG8xID0gY2Muc2NhbGVUbygwLjEsIDEuMilcbiAgICAgICAgbGV0IHNjYWxldG8yID0gY2Muc2NhbGVUbygwLjEsIDEpXG4gICAgICAgIGxldCBzcGF3biA9IGNjLnNwYXduKGZhZGVpbixtb3ZlX3RvKVxuICAgICAgICBsZXQgc2VxID0gY2Muc2VxdWVuY2UoZmFkZW91dCxzcGF3bixzY2FsZXRvMSxzY2FsZXRvMilcbiAgICAgICAgdGhpcy5zcm9sbF9tYWluX3Nwci5ydW5BY3Rpb24oc2VxKVxuICAgIH0sXG4gICAgc2V0SXRlbUluZGV4KCl7XG4gICAgICAgIC8v6buY6K6k54K55Ye7XG4gICAgfSxcbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLnRpbWVfdGljaGV0KXtcbiAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnRpbWVfdGljaGV0KTtcbiAgICAgICAgICAgIHRoaXMudGltZV90aWNoZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMudGltZXIpe1xuICAgICAgICAgICAgdGhpcy5zdG9wVXBkYXRlKHRoaXMudGltZXIpXG4gICAgICAgICAgICB0aGlzLnRpbWVyID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuaXRlbV9saXN0X3BhbmVsKXtcbiAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8dGhpcy5pdGVtX2xpc3RfcGFuZWwubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5pdGVtX2xpc3RfcGFuZWxbaV0pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdF9wYW5lbFtpXS5kZWxldGVNZSgpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0X3BhbmVsW2ldID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1fbGlzdF9wYW5lbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5sZXZlbF9pdGVtX2xpc3Qpe1xuICAgICAgICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLmxldmVsX2l0ZW1fbGlzdC5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmxldmVsX2l0ZW1fbGlzdFtpXSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxfaXRlbV9saXN0W2ldLmRlbGV0ZU1lKClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXZlbF9pdGVtX2xpc3RbaV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGV2ZWxfaXRlbV9saXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwub3BlbkxpbWl0RXhlcmNpc2VDaGFuZ2VWaWV3KGZhbHNlKVxuICAgIH0sXG59KSJdfQ==