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
552
553
554
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/sys/sys_controller.js';
                    var __require = nodeEnv ? function (request) {
                        return cc.require(request);
                    } : function (request) {
                        return __quick_compile_project__.require(request, __filename);
                    };
                    function __define (exports, require, module) {
                        if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, '46939PBCCVJr6c6VCwcZI01', 'sys_controller');
// Scripts/sys/sys_controller.js
 
"use strict";
 
var PartnerConst = require("partner_const");
 
var ActionConst = require("action_const");
 
var RoleController = require("role_controller");
 
var RoleEvent = require("role_event");
 
var AdventureActivityController = require("adventureactivity_controller");
 
var AdventureActivityConst = require("adventureactivity_const");
 
var SysController = cc.Class({
  "extends": BaseController,
  ctor: function ctor() {
    this.initAttrProtocalsFunList();
  },
  registerEvents: function registerEvents() {
    this.role_vo = RoleController.getInstance().getRoleVo();
 
    if (this.role_vo) {
      this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
        if (key == "lev" || key == "open_day") {
          this.requestAttrProtocals();
        }
      }.bind(this));
    }
 
    this.login_event_success = gcore.GlobalEvent.bind(EventId.EVT_RE_LINK_GAME, function () {
      var GuideController = require("guide_controller");
 
      if (!RoleController.getInstance().checkRoleSetNameViewIsOpen() && !GuideController.getInstance().isInGuide()) {
        // 取名界面没打开,并且不在引导中,则跳到主城
        var MainuiController = require("mainui_controller");
 
        var MainuiConst = require("mainui_const");
 
        MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene);
      }
 
      this.resetAttrProtocals();
      this.requestReLinkProtocals();
    }.bind(this));
  },
  // 登陆时请求的协议
  requestLoginProtocals: function requestLoginProtocals(finish_cb) {
    var function_list = [// function () { this.SendProtocal(10906, {}) }.bind(this),   // 开服天数
    // function () { this.SendProtocal(10380, {}) }.bind(this),   // 开服时间
    function () {
      this.SendProtocal(24600, {});
    }.bind(this), // 问卷
    function () {
      var id = 0;
 
      if (PLATFORM_TYPR == "SH_SDK") {
        //深海小程序
        id = 1;
      }
 
      this.SendProtocal(16691, {
        id: id
      });
    }.bind(this), // 爱微游分享状态
    function () {
      var id = 0;
 
      if (PLATFORM_TYPR == "SH_SDK") {
        //深海小程序
        id = 1;
      }
 
      this.SendProtocal(16693, {
        id: id
      });
    }.bind(this), // 爱微游关注状态
    function () {
      if (PLATFORM_TYPR == "SH_SDK") {
        //深海小程序
        this.SendProtocal(16695, {});
      }
    }.bind(this), // 深海小程序收藏状态
    function () {
      this.SendProtocal(10500, {});
    }.bind(this), // 背包
    function () {
      this.SendProtocal(10501, {});
    }.bind(this), // 背包
    function () {
      this.SendProtocal(10325, {});
    }.bind(this), // 头像信息
    function () {
      this.SendProtocal(13006, {});
    }.bind(this), // 剧情副本基础信息
    function () {
      this.SendProtocal(13008, {});
    }.bind(this), // 剧情副本通关奖励
    function () {
      this.SendProtocal(13011, {});
    }.bind(this), // 剧情副本Buff数据
    function () {
      this.SendProtocal(13017, {});
    }.bind(this), // 剧情副本挂机数据
    // function () { this.SendProtocal(10905, {}) }.bind(this),   // 世界等级
    function () {
      this.SendProtocal(20700, {});
    }.bind(this), // 星河神殿挑战次数
    function () {
      this.SendProtocal(30001, {});
    }.bind(this), // 新主线任务
    function () {
      this.SendProtocal(10317, {});
    }.bind(this), // 点赞数量
    function () {
      this.SendProtocal(21100, {});
    }.bind(this), // 七天登陆
    function () {
      this.SendProtocal(13601, {});
    }.bind(this), // 七日目标
    function () {
      this.SendProtocal(16637, {});
    }.bind(this), // 探宝
    function () {
      this.SendProtocal(24700, {});
    }.bind(this), // 基金
    function () {
      this.SendProtocal(21012, {});
    }.bind(this), // 首充
    function () {
      this.SendProtocal(21010, {});
    }.bind(this), // 每日首充
    // function () { this.SendProtocal(25000, {}) }.bind(this),   // 元素圣殿
    function () {
      this.SendProtocal(23606, {});
    }.bind(this), // 点金
    function () {
      this.SendProtocal(24204, {});
    }.bind(this), // 公会战状态
    function () {
      this.SendProtocal(24220, {});
    }.bind(this), // 公会战宝箱
    // function () { this.SendProtocal(22200, {}) }.bind(this),   // 圣物
    // function () { this.SendProtocal(24125, {}) }.bind(this),   // 神器幻化
    // function () { this.SendProtocal(24128, {}) }.bind(this),   // 神器任务
    function () {
      this.SendProtocal(11000, {});
    }.bind(this), // 英雄数据
    function () {
      this.SendProtocal(11040, {});
    }.bind(this), // 英雄图鉴
    function () {
      this.SendProtocal(11037, {});
    }.bind(this), // 符文祝福
    function () {
      this.SendProtocal(11213, {
        type_list: [{
          type: PartnerConst.Fun_Form.Drama
        }, {
          type: PartnerConst.Fun_Form.Arena
        }]
      });
    }.bind(this), // 阵法
    function () {
      this.SendProtocal(24410, {});
    }.bind(this), // 远征红点
    // function () { this.SendProtocal(24411, {}) }.bind(this),   // 远征派遣红点
    function () {
      this.SendProtocal(24400, {});
    }.bind(this), // 远征数据
    function () {
      this.SendProtocal(24405, {});
    }.bind(this), // 远征支援
    function () {
      this.SendProtocal(19807, {});
    }.bind(this), // 邀请码(自己绑定的角色)
    function () {
      this.SendProtocal(19804, {});
    }.bind(this), // 邀请码红点
    function () {
      this.SendProtocal(19800, {});
    }.bind(this), // 邀请码
    function () {
      this.SendProtocal(19802, {});
    }.bind(this), // 邀请码
    // function () { this.SendProtocal(24312, {}) }.bind(this),   // 天梯是否开启
    function () {
      this.SendProtocal(10800, {});
    }.bind(this), // 邮件
    function () {
      this.SendProtocal(10926, {});
    }.bind(this), // 在线奖励
    function () {
      this.SendProtocal(23200, {});
    }.bind(this), // 召唤数据
    function () {
      this.SendProtocal(23214, {});
    }.bind(this), // 英雄置换
    // function () { this.SendProtocal(13604, {}) }.bind(this),   // 七日目标任务
    // function () { this.SendProtocal(13607, {}) }.bind(this),   // 七日目标等级奖励
    function () {
      this.SendProtocal(13030, {});
    }.bind(this), // 材料副本
    function () {
      this.SendProtocal(10400, {});
    }.bind(this), // 任务列表
    function () {
      this.SendProtocal(16400, {});
    }.bind(this), // 成就列表
    function () {
      this.SendProtocal(20300, {});
    }.bind(this), // 活跃度
    function () {
      this.SendProtocal(19906, {});
    }.bind(this), // 录像馆点赞
    function () {
      this.SendProtocal(16707, {});
    }.bind(this), // 月卡奖励
    function () {
      this.SendProtocal(16710, {});
    }.bind(this), // VIP礼包红点
    function () {
      this.SendProtocal(16712, {});
    }.bind(this), // 累充红点
    function () {
      this.SendProtocal(30102, {});
    }.bind(this), // 皮肤购买红点
    function () {
      this.SendProtocal(21006, {});
    }.bind(this), // 每日礼包
    function () {
      this.SendProtocal(24502, {});
    }.bind(this), // 特权礼包
    function () {
      this.SendProtocal(14100, {});
    }.bind(this), // 签到红点
    function () {
      this.SendProtocal(16705, {});
    }.bind(this), // 月卡信息
    function () {
      this.SendProtocal(21008, {});
    }.bind(this), // 每日礼
    function () {
      this.SendProtocal(16635, {});
    }.bind(this), // 手机绑定奖励状态
    function () {
      this.SendProtocal(16697, {});
    }.bind(this), // 手机绑定奖励状态
    function () {
      this.SendProtocal(16633, {});
    }.bind(this), // 微信公众号状态
    function () {
      this.SendProtocal(23205, {});
    }.bind(this), // 召唤5星必出
    function () {
      this.SendProtocal(13040, {});
    }.bind(this), // 快速作战
    function () {
      this.SendProtocal(11320, {});
    }.bind(this), // 星命塔数据
    // function () { this.SendProtocal(20706, {}) }.bind(this),   // 星河神殿每天第一次登录红点
    function () {
      this.SendProtocal(16687, {
        bid: ActionConst.ActionRankCommonType.open_server
      });
    }.bind(this), // 新服限购
    function () {
      this.SendProtocal(16687, {
        bid: ActionConst.ActionRankCommonType.high_value_gift
      });
    }.bind(this), // 小额礼包
    function () {
      this.SendProtocal(16687, {
        bid: ActionConst.ActionRankCommonType.mysterious_store
      });
    }.bind(this), // 神秘杂货店
    function () {
      this.SendProtocal(21020, {});
    }.bind(this), // 每日1元
    // function () { this.SendProtocal(25200, {}) }.bind(this),   // 天界副本
    // function () { this.SendProtocal(25219, {}) }.bind(this),   // 神装转盘
    function () {
      this.SendProtocal(25300, {});
    }.bind(this), // 战令活动
    function () {
      this.SendProtocal(25303, {});
    }.bind(this), function () {
      this.SendProtocal(16730, {});
    }.bind(this), //赠送VIP
    function () {
      this.guildRedBagProtocal();
    }.bind(this), // 公会红包
    function () {
      this.adventrueProtocal();
    }.bind(this), // 冒险
    function () {
      this.endlessProtocal();
    }.bind(this), // 无尽试炼
    function () {
      this.voyageProtocal();
    }.bind(this), // 远航     
    function () {
      this.SendProtocal(19804, {});
    }.bind(this) // 邀请码红点     
    ];
    var cur_index = 0;
    this.ping_timer_id = gcore.Timer.set(function () {
      function_list[cur_index]();
      cur_index++; // game.updateProtoProgress(cur_index / function_list.length);
 
      if (cur_index == function_list.length - 1) {
        if (finish_cb) finish_cb();
      }
    }.bind(this), 20, function_list.length);
  },
  requestReLinkProtocals: function requestReLinkProtocals() {
    var function_list = [function () {
      this.SendProtocal(10500, {});
    }.bind(this), // 开服天数
    function () {
      this.SendProtocal(10501, {});
    }.bind(this), // 开服时间
    function () {
      this.SendProtocal(13006, {});
    }.bind(this), // 问卷
    function () {
      this.SendProtocal(13008, {});
    }.bind(this), // 开服天数
    function () {
      this.SendProtocal(13011, {});
    }.bind(this), // 开服时间
    function () {
      this.SendProtocal(13017, {});
    }.bind(this), // 问卷
    // function () { this.SendProtocal(25000, {}) }.bind(this),   // 开服时间
    function () {
      this.SendProtocal(24204, {});
    }.bind(this), // 问卷
    function () {
      this.SendProtocal(11000, {});
    }.bind(this), // 开服时间
    function () {
      this.SendProtocal(11040, {});
    }.bind(this), // 问卷
    function () {
      this.SendProtocal(11037, {});
    }.bind(this), // 开服天数
    function () {
      this.SendProtocal(11213, {
        type_list: [{
          type: PartnerConst.Fun_Form.Drama
        }, {
          type: PartnerConst.Fun_Form.Arena
        }]
      });
    }.bind(this), // 阵法
    function () {
      this.SendProtocal(24410, {});
    }.bind(this), // 问卷
    // function () { this.SendProtocal(24411, {}) }.bind(this),   // 开服天数
    function () {
      this.SendProtocal(24400, {});
    }.bind(this), // 开服时间
    function () {
      this.SendProtocal(24405, {});
    }.bind(this), // 问卷
    // function () { this.SendProtocal(24312, {}) }.bind(this),   // 开服时间
    function () {
      this.SendProtocal(23200, {});
    }.bind(this), // 问卷
    function () {
      this.SendProtocal(10400, {});
    }.bind(this), // 开服时间
    function () {
      this.SendProtocal(16400, {});
    }.bind(this), // 问卷
    function () {
      this.SendProtocal(20300, {});
    }.bind(this), // 开服天数
    // function () { this.SendProtocal(19906, {}) }.bind(this),   // 开服时间
    function () {
      this.SendProtocal(21006, {});
    }.bind(this), // 问卷
    function () {
      this.SendProtocal(16705, {});
    }.bind(this), // 开服天数
    function () {
      this.SendProtocal(24700, {});
    }.bind(this), // 开服时间
    function () {
      this.SendProtocal(25300, {});
    }.bind(this), // 战令任务红点
    function () {
      this.guildRedBagProtocal();
    }.bind(this), // 公会红包
    function () {
      this.adventrueProtocal();
    }.bind(this), // 冒险
    function () {
      this.endlessProtocal();
    }.bind(this), // 无尽试炼
    function () {
      this.voyageProtocal();
    }.bind(this), // 远航
    function () {
      this.arenaProtocal();
    }.bind(this), // 竞技场
    function () {
      this.SendProtocal(30001, {});
    }.bind(this) // 新主线任务
    ];
    var cur_index = 0;
    this.ping_timer_id = gcore.Timer.set(function () {
      function_list[cur_index]();
      cur_index++;
    }.bind(this), 10, function_list.length);
  },
 
  /******************以下是一些特殊的协议请求*********************/
  initAttrProtocalsFunList: function initAttrProtocalsFunList(force) {
    if (force || !this.attr_fun_list) {
      this.attr_fun_list = [{
        func: function () {
          this.adventrueProtocal();
        }.bind(this),
        req_flag: false
      }, {
        func: function () {
          this.arenaProtocal();
        }.bind(this),
        req_flag: false
      }, {
        func: function () {
          this.endlessProtocal();
        }.bind(this),
        req_flag: false
      }, {
        func: function () {
          this.voyageProtocal();
        }.bind(this),
        req_flag: false
      }];
    }
  },
  // 检测是否请求过数据
  checkProtocalIsCanRequest: function checkProtocalIsCanRequest(id) {
    if (this.attr_fun_list && this.attr_fun_list[id] && !this.attr_fun_list[id].req_flag) return true;
    return false;
  },
  // 公会红包(只需要登陆和断线时请求,加入公会时,后端会主动推)
  guildRedBagProtocal: function guildRedBagProtocal() {
    if (this.role_vo && this.role_vo.gid != 0 && this.role_vo.gsrv_id != "") this.SendProtocal(13534, {});
  },
  // 冒险的协议请求
  adventrueProtocal: function adventrueProtocal(forces) {
    var is_open = forces;
 
    if (is_open == null) {
      is_open = AdventureActivityController.getInstance().isOpenActivity(AdventureActivityConst.Ground_Type.adventure);
    }
 
    if (is_open == false) return;
    if (!this.checkProtocalIsCanRequest(0)) return;
    this.SendProtocal(20600, {}); // 冒险基础信息
 
    this.SendProtocal(20601, {}); // 冒险buff信息
 
    this.SendProtocal(20604, {}); // 冒险伙伴信息数据
 
    this.SendProtocal(20634, {}); // 冒险宝箱
 
    if (this.attr_fun_list[0]) {
      this.attr_fun_list[0].req_flag = true;
    }
  },
  endlessProtocal: function endlessProtocal() {
    var open_config = Config.endless_data.data_const.open_lev;
    if (!open_config) return;
 
    var MainuiController = require("mainui_controller");
 
    var is_open = MainuiController.getInstance().checkIsOpenByActivate(open_config.val);
    if (!is_open) return;
    if (!this.checkProtocalIsCanRequest(2)) return;
    this.SendProtocal(23900, {});
    this.SendProtocal(23903, {});
    this.SendProtocal(23906, {});
    if (this.attr_fun_list[2]) this.attr_fun_list[2].req_flag = true;
  },
  // 远航协议请求
  voyageProtocal: function voyageProtocal() {
    var lev_config = Config.shipping_data.data_const["guild_lev"];
    if (!lev_config || !this.role_vo || lev_config.val > this.role_vo.lev) return;
    if (!this.checkProtocalIsCanRequest(3)) return;
    this.SendProtocal(23800, {});
    this.SendProtocal(23805, {});
    this.SendProtocal(23821, {});
    if (this.attr_fun_list[3]) this.attr_fun_list[3].req_flag = true;
  },
  resetAttrProtocals: function resetAttrProtocals() {
    this.initAttrProtocalsFunList(true);
  },
  requestAttrProtocals: function requestAttrProtocals() {
    if (!this.attr_fun_list) return;
 
    for (var fun_i in this.attr_fun_list) {
      var fun_info = this.attr_fun_list[fun_i];
 
      if (!fun_info.req_flag) {
        fun_info.func();
      }
    }
  },
  //竞技场的协议请求
  arenaProtocal: function arenaProtocal() {
    var config = Config.arena_data.data_const.limit_lev;
    if (!config || !this.role_vo || this.role_vo.lev < config.val) return;
    if (!this.checkProtocalIsCanRequest(1)) return;
    this.SendProtocal(20208, {});
    this.SendProtocal(20200, {});
    this.SendProtocal(20250, {});
    this.SendProtocal(20223, {});
    if (this.attr_fun_list[1]) this.attr_fun_list[1].req_flag = true;
  }
});
module.exports = SysController;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcc3lzXFxzeXNfY29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJQYXJ0bmVyQ29uc3QiLCJyZXF1aXJlIiwiQWN0aW9uQ29uc3QiLCJSb2xlQ29udHJvbGxlciIsIlJvbGVFdmVudCIsIkFkdmVudHVyZUFjdGl2aXR5Q29udHJvbGxlciIsIkFkdmVudHVyZUFjdGl2aXR5Q29uc3QiLCJTeXNDb250cm9sbGVyIiwiY2MiLCJDbGFzcyIsIkJhc2VDb250cm9sbGVyIiwiY3RvciIsImluaXRBdHRyUHJvdG9jYWxzRnVuTGlzdCIsInJlZ2lzdGVyRXZlbnRzIiwicm9sZV92byIsImdldEluc3RhbmNlIiwiZ2V0Um9sZVZvIiwicm9sZV9hc3NldHNfZXZlbnQiLCJiaW5kIiwiRXZlbnRJZCIsIlVQREFURV9ST0xFX0FUVFJJQlVURSIsImtleSIsInZhbHVlIiwicmVxdWVzdEF0dHJQcm90b2NhbHMiLCJsb2dpbl9ldmVudF9zdWNjZXNzIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsIkVWVF9SRV9MSU5LX0dBTUUiLCJHdWlkZUNvbnRyb2xsZXIiLCJjaGVja1JvbGVTZXROYW1lVmlld0lzT3BlbiIsImlzSW5HdWlkZSIsIk1haW51aUNvbnRyb2xsZXIiLCJNYWludWlDb25zdCIsImNoYW5nZU1haW5VSVN0YXR1cyIsImJ0bl9pbmRleCIsIm1haW5fc2NlbmUiLCJyZXNldEF0dHJQcm90b2NhbHMiLCJyZXF1ZXN0UmVMaW5rUHJvdG9jYWxzIiwicmVxdWVzdExvZ2luUHJvdG9jYWxzIiwiZmluaXNoX2NiIiwiZnVuY3Rpb25fbGlzdCIsIlNlbmRQcm90b2NhbCIsImlkIiwiUExBVEZPUk1fVFlQUiIsInR5cGVfbGlzdCIsInR5cGUiLCJGdW5fRm9ybSIsIkRyYW1hIiwiQXJlbmEiLCJiaWQiLCJBY3Rpb25SYW5rQ29tbW9uVHlwZSIsIm9wZW5fc2VydmVyIiwiaGlnaF92YWx1ZV9naWZ0IiwibXlzdGVyaW91c19zdG9yZSIsImd1aWxkUmVkQmFnUHJvdG9jYWwiLCJhZHZlbnRydWVQcm90b2NhbCIsImVuZGxlc3NQcm90b2NhbCIsInZveWFnZVByb3RvY2FsIiwiY3VyX2luZGV4IiwicGluZ190aW1lcl9pZCIsIlRpbWVyIiwic2V0IiwibGVuZ3RoIiwiYXJlbmFQcm90b2NhbCIsImZvcmNlIiwiYXR0cl9mdW5fbGlzdCIsImZ1bmMiLCJyZXFfZmxhZyIsImNoZWNrUHJvdG9jYWxJc0NhblJlcXVlc3QiLCJnaWQiLCJnc3J2X2lkIiwiZm9yY2VzIiwiaXNfb3BlbiIsImlzT3BlbkFjdGl2aXR5IiwiR3JvdW5kX1R5cGUiLCJhZHZlbnR1cmUiLCJvcGVuX2NvbmZpZyIsIkNvbmZpZyIsImVuZGxlc3NfZGF0YSIsImRhdGFfY29uc3QiLCJvcGVuX2xldiIsImNoZWNrSXNPcGVuQnlBY3RpdmF0ZSIsInZhbCIsImxldl9jb25maWciLCJzaGlwcGluZ19kYXRhIiwibGV2IiwiZnVuX2kiLCJmdW5faW5mbyIsImNvbmZpZyIsImFyZW5hX2RhdGEiLCJsaW1pdF9sZXYiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUlBLFlBQVksR0FBR0MsT0FBTyxDQUFDLGVBQUQsQ0FBMUI7O0FBQ0EsSUFBSUMsV0FBVyxHQUFHRCxPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxJQUFJRSxjQUFjLEdBQUdGLE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJRyxTQUFTLEdBQUdILE9BQU8sQ0FBQyxZQUFELENBQXZCOztBQUNBLElBQUlJLDJCQUEyQixHQUFHSixPQUFPLENBQUMsOEJBQUQsQ0FBekM7O0FBQ0EsSUFBSUssc0JBQXNCLEdBQUVMLE9BQU8sQ0FBQyx5QkFBRCxDQUFuQzs7QUFFQSxJQUFJTSxhQUFhLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQ3pCLGFBQVNDLGNBRGdCO0FBR3pCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyx3QkFBTDtBQUNILEdBTHdC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VixFQUF5Qjs7QUFFekIsU0FBSyxJQUFJcUIsS0FBVCxJQUFrQixLQUFLckIsYUFBdkIsRUFBc0M7QUFDbEMsVUFBSXNCLFFBQVEsR0FBRyxLQUFLdEIsYUFBTCxDQUFtQnFCLEtBQW5CLENBQWY7O0FBQ0EsVUFBSSxDQUFDQyxRQUFRLENBQUNwQixRQUFkLEVBQXdCO0FBQ3BCb0IsUUFBQUEsUUFBUSxDQUFDckIsSUFBVDtBQUNIO0FBQ0o7QUFDSixHQWhTd0I7QUFpU3pCO0FBQ0FILEVBQUFBLGFBQWEsRUFBRSx5QkFBVztBQUN0QixRQUFJeUIsTUFBTSxHQUFHWCxNQUFNLENBQUNZLFVBQVAsQ0FBa0JWLFVBQWxCLENBQTZCVyxTQUExQztBQUNBLFFBQUksQ0FBQ0YsTUFBRCxJQUFXLENBQUMsS0FBSzFFLE9BQWpCLElBQTRCLEtBQUtBLE9BQUwsQ0FBYXVFLEdBQWIsR0FBbUJHLE1BQU0sQ0FBQ04sR0FBMUQsRUFDSTtBQUVKLFFBQUksQ0FBQyxLQUFLZCx5QkFBTCxDQUErQixDQUEvQixDQUFMLEVBQXdDO0FBRXhDLFNBQUszQixZQUFMLENBQWtCLEtBQWxCLEVBQXlCLEVBQXpCO0FBQ0EsU0FBS0EsWUFBTCxDQUFrQixLQUFsQixFQUF5QixFQUF6QjtBQUNBLFNBQUtBLFlBQUwsQ0FBa0IsS0FBbEIsRUFBeUIsRUFBekI7QUFDQSxTQUFLQSxZQUFMLENBQWtCLEtBQWxCLEVBQXlCLEVBQXpCO0FBQ0EsUUFBSSxLQUFLd0IsYUFBTCxDQUFtQixDQUFuQixDQUFKLEVBQ0ksS0FBS0EsYUFBTCxDQUFtQixDQUFuQixFQUFzQkUsUUFBdEIsR0FBaUMsSUFBakM7QUFDUDtBQS9Td0IsQ0FBVCxDQUFwQjtBQWtUQXdCLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnJGLGFBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgUGFydG5lckNvbnN0ID0gcmVxdWlyZShcInBhcnRuZXJfY29uc3RcIilcclxudmFyIEFjdGlvbkNvbnN0ID0gcmVxdWlyZShcImFjdGlvbl9jb25zdFwiKTtcclxudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcclxudmFyIFJvbGVFdmVudCA9IHJlcXVpcmUoXCJyb2xlX2V2ZW50XCIpO1xyXG52YXIgQWR2ZW50dXJlQWN0aXZpdHlDb250cm9sbGVyID0gcmVxdWlyZShcImFkdmVudHVyZWFjdGl2aXR5X2NvbnRyb2xsZXJcIik7XHJcbnZhciBBZHZlbnR1cmVBY3Rpdml0eUNvbnN0PSByZXF1aXJlKFwiYWR2ZW50dXJlYWN0aXZpdHlfY29uc3RcIik7XHJcblxyXG52YXIgU3lzQ29udHJvbGxlciA9IGNjLkNsYXNzKHtcclxuICAgIGV4dGVuZHM6IEJhc2VDb250cm9sbGVyLFxyXG5cclxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmluaXRBdHRyUHJvdG9jYWxzRnVuTGlzdCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZWdpc3RlckV2ZW50czogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5yb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcclxuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSwgZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XHJcbiAgICAgICAgICAgICAgICBpZihrZXkgPT0gXCJsZXZcIiB8fCBrZXkgPT0gXCJvcGVuX2RheVwiKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RBdHRyUHJvdG9jYWxzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9naW5fZXZlbnRfc3VjY2VzcyA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoRXZlbnRJZC5FVlRfUkVfTElOS19HQU1FLCAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgR3VpZGVDb250cm9sbGVyID0gcmVxdWlyZShcImd1aWRlX2NvbnRyb2xsZXJcIik7XHJcbiAgICAgICAgICAgIGlmICAoIVJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hlY2tSb2xlU2V0TmFtZVZpZXdJc09wZW4oKSAmJiAhR3VpZGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuaXNJbkd1aWRlKCkpeyAvLyDlj5blkI3nlYzpnaLmsqHmiZPlvIDvvIzlubbkuJTkuI3lnKjlvJXlr7zkuK3vvIzliJnot7PliLDkuLvln45cclxuICAgICAgICAgICAgICAgIHZhciBNYWludWlDb250cm9sbGVyID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcclxuICAgICAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lm1haW5fc2NlbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRBdHRyUHJvdG9jYWxzKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFJlTGlua1Byb3RvY2FscygpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0pLmJpbmQodGhpcykpICAgICAgICBcclxuICAgIH0sXHJcblxyXG4gICAgLy8g55m76ZmG5pe26K+35rGC55qE5Y2P6K6uXHJcbiAgICByZXF1ZXN0TG9naW5Qcm90b2NhbHM6IGZ1bmN0aW9uKGZpbmlzaF9jYikge1xyXG4gICAgXHR2YXIgZnVuY3Rpb25fbGlzdCA9IFtcclxuICAgICAgICAgICAgLy8gZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMDkwNiwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3lpKnmlbBcclxuICAgICAgICAgICAgLy8gZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMDM4MCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3ml7bpl7RcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyNDYwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDpl67ljbdcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gMDtcclxuICAgICAgICAgICAgICAgIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfU0RLXCIpIHsvL+a3sea1t+Wwj+eoi+W6j1xyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2NjkxLCB7aWQ6aWR9KVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyksICAgLy8g54ix5b6u5ri45YiG5Lqr54q25oCBXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpZCA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAoUExBVEZPUk1fVFlQUiA9PSBcIlNIX1NES1wiKSB7Ly/mt7HmtbflsI/nqIvluo9cclxuICAgICAgICAgICAgICAgICAgICBpZCA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjY5Mywge2lkOmlkfSlcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAgIC8vIOeIseW+rua4uOWFs+azqOeKtuaAgVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFBMQVRGT1JNX1RZUFIgPT0gXCJTSF9TREtcIikgey8v5rex5rW35bCP56iL5bqPXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTY2OTUsIHt9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyksICAgLy8g5rex5rW35bCP56iL5bqP5pS26JeP54q25oCBXHJcblxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMDUwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDog4zljIVcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMDUwMSwge30pIH0uYmluZCh0aGlzKSwgICAvLyDog4zljIVcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMDMyNSwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlpLTlg4/kv6Hmga9cclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMzAwNiwge30pIH0uYmluZCh0aGlzKSwgICAvLyDliafmg4Xlia/mnKzln7rnoYDkv6Hmga9cclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMzAwOCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDliafmg4Xlia/mnKzpgJrlhbPlpZblirFcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMzAxMSwge30pIH0uYmluZCh0aGlzKSwgICAvLyDliafmg4Xlia/mnKxCdWZm5pWw5o2uXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTMwMTcsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5Ymn5oOF5Ymv5pys5oyC5py65pWw5o2uXHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTA5MDUsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5LiW55WM562J57qnXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjA3MDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5pif5rKz56We5q6/5oyR5oiY5qyh5pWwXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMzAwMDEsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5paw5Li757q/5Lu75YqhXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTAzMTcsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g54K56LWe5pWw6YePXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjExMDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5LiD5aSp55m76ZmGXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTM2MDEsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5LiD5pel55uu5qCHXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTY2MzcsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5o6i5a6dXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQ3MDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5Z+66YeRXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjEwMTIsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6aaW5YWFXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjEwMTAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5q+P5pel6aaW5YWFXHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjUwMDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5YWD57Sg5Zyj5q6/XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjM2MDYsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g54K56YeRXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQyMDQsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5YWs5Lya5oiY54q25oCBXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQyMjAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5YWs5Lya5oiY5a6d566xXHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjIyMDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5Zyj54mpXHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQxMjUsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g56We5Zmo5bm75YyWXHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQxMjgsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g56We5Zmo5Lu75YqhXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTEwMDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6Iux6ZuE5pWw5o2uXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTEwNDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6Iux6ZuE5Zu+6Ym0XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTEwMzcsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g56ym5paH56Wd56aPXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTEyMTMsIHt0eXBlX2xpc3Q6IFt7dHlwZTogUGFydG5lckNvbnN0LkZ1bl9Gb3JtLkRyYW1hfSwge3R5cGU6IFBhcnRuZXJDb25zdC5GdW5fRm9ybS5BcmVuYX1dfSkgfS5iaW5kKHRoaXMpLCAgICAgLy8g6Zi15rOVXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MTAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6L+c5b6B57qi54K5XHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MTEsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6L+c5b6B5rS+6YGj57qi54K5XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6L+c5b6B5pWw5o2uXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MDUsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6L+c5b6B5pSv5o+0XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTk4MDcsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6YKA6K+356CB77yI6Ieq5bex57uR5a6a55qE6KeS6Imy77yJXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTk4MDQsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6YKA6K+356CB57qi54K5XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTk4MDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6YKA6K+356CBXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTk4MDIsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6YKA6K+356CBXHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQzMTIsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5aSp5qKv5piv5ZCm5byA5ZCvXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTA4MDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6YKu5Lu2XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTA5MjYsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5Zyo57q/5aWW5YqxXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjMyMDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5Y+s5ZSk5pWw5o2uXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjMyMTQsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g6Iux6ZuE572u5o2iXHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTM2MDQsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5LiD5pel55uu5qCH5Lu75YqhXHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTM2MDcsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5LiD5pel55uu5qCH562J57qn5aWW5YqxXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTMwMzAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5p2Q5paZ5Ymv5pysXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTA0MDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5Lu75Yqh5YiX6KGoXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTY0MDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5oiQ5bCx5YiX6KGoXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjAzMDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5rS76LeD5bqmXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTk5MDYsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5b2V5YOP6aaG54K56LWeXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTY3MDcsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5pyI5Y2h5aWW5YqxXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTY3MTAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8gVklQ56S85YyF57qi54K5XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTY3MTIsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g57Sv5YWF57qi54K5XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMzAxMDIsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g55qu6IKk6LSt5Lmw57qi54K5XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjEwMDYsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5q+P5pel56S85YyFXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjQ1MDIsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g54m55p2D56S85YyFXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTQxMDAsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g562+5Yiw57qi54K5XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTY3MDUsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5pyI5Y2h5L+h5oGvXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjEwMDgsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5q+P5pel56S8XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTY2MzUsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5omL5py657uR5a6a5aWW5Yqx54q25oCBXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTY2OTcsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5omL5py657uR5a6a5aWW5Yqx54q25oCBXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTY2MzMsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5b6u5L+h5YWs5LyX5Y+354q25oCBXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMjMyMDUsIHt9KSB9LmJpbmQodGhpcyksICAgLy8g5Y+s5ZSkNeaYn+W/heWHulxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHRoaXMuU2VuZFByb3RvY2FsKDEzMDQwLCB7fSkgfS5iaW5kKHRoaXMpLCAgIC8vIOW/q+mAn+S9nOaImFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMTMyMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDmmJ/lkb3loZTmlbDmja5cclxuICAgICAgICAgICAgLy8gZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyMDcwNiwge30pIH0uYmluZCh0aGlzKSwgICAvLyDmmJ/msrPnpZ7mrr/mr4/lpKnnrKzkuIDmrKHnmbvlvZXnuqLngrlcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxNjY4Nywge2JpZDogQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUub3Blbl9zZXJ2ZXJ9KSB9LmJpbmQodGhpcyksICAgICAgLy8g5paw5pyN6ZmQ6LStXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTY2ODcsIHtiaWQ6IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmhpZ2hfdmFsdWVfZ2lmdH0pIH0uYmluZCh0aGlzKSwgIC8vIOWwj+mineekvOWMhVxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHRoaXMuU2VuZFByb3RvY2FsKDE2Njg3LCB7YmlkOiBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5teXN0ZXJpb3VzX3N0b3JlfSkgfS5iaW5kKHRoaXMpLCAvLyDnpZ7np5jmnYLotKflupdcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyMTAyMCwge30gKX0uYmluZCh0aGlzKSwgLy8g5q+P5pelMeWFg1xyXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiAoKSB7IHRoaXMuU2VuZFByb3RvY2FsKDI1MjAwLCB7fSkgfS5iaW5kKHRoaXMpLCAgIC8vIOWkqeeVjOWJr+acrFxyXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiAoKSB7IHRoaXMuU2VuZFByb3RvY2FsKDI1MjE5LCB7fSkgfS5iaW5kKHRoaXMpLCAgIC8vIOelnuijhei9rOebmFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHRoaXMuU2VuZFByb3RvY2FsKDI1MzAwLCB7fSkgfS5iaW5kKHRoaXMpLCAgIC8vIOaImOS7pOa0u+WKqFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHRoaXMuU2VuZFByb3RvY2FsKDI1MzAzLCB7fSkgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHRoaXMuU2VuZFByb3RvY2FsKDE2NzMwLCB7fSkgfS5iaW5kKHRoaXMpLCAvL+i1oOmAgVZJUFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge3RoaXMuZ3VpbGRSZWRCYWdQcm90b2NhbCgpIH0uYmluZCh0aGlzKSwgICAgIC8vIOWFrOS8mue6ouWMhVxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7dGhpcy5hZHZlbnRydWVQcm90b2NhbCgpIH0uYmluZCh0aGlzKSwgICAgICAgLy8g5YaS6ZmpXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHt0aGlzLmVuZGxlc3NQcm90b2NhbCgpIH0uYmluZCh0aGlzKSwgICAgICAgICAvLyDml6DlsL3or5XngrxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge3RoaXMudm95YWdlUHJvdG9jYWwoKSB9LmJpbmQodGhpcyksICAgICAgICAgIC8vIOi/nOiIqiAgICAgXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5TZW5kUHJvdG9jYWwoMTk4MDQsIHt9KSB9LmJpbmQodGhpcyksICAgICAgICAgIC8vIOmCgOivt+eggee6oueCuSAgICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgXHRdXHJcblxyXG4gICAgXHR2YXIgY3VyX2luZGV4ID0gMDtcclxuICAgIFx0dGhpcy5waW5nX3RpbWVyX2lkID0gZ2NvcmUuVGltZXIuc2V0KGZ1bmN0aW9uKCkge1xyXG4gICAgXHRcdGZ1bmN0aW9uX2xpc3RbY3VyX2luZGV4XSgpO1xyXG4gICAgICAgICAgICBjdXJfaW5kZXggKys7XHJcbiAgICAgICAgICAgIC8vIGdhbWUudXBkYXRlUHJvdG9Qcm9ncmVzcyhjdXJfaW5kZXggLyBmdW5jdGlvbl9saXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChjdXJfaW5kZXggPT0gZnVuY3Rpb25fbGlzdC5sZW5ndGggLTEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmaW5pc2hfY2IpXHJcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoX2NiKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICBcdH0uYmluZCh0aGlzKSwgMjAsIGZ1bmN0aW9uX2xpc3QubGVuZ3RoKVxyXG4gICAgfSxcclxuXHJcbiAgICByZXF1ZXN0UmVMaW5rUHJvdG9jYWxzOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgZnVuY3Rpb25fbGlzdCA9IFtcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMDUwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3lpKnmlbBcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMDUwMSwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3ml7bpl7RcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMzAwNiwge30pIH0uYmluZCh0aGlzKSwgICAvLyDpl67ljbdcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMzAwOCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3lpKnmlbBcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMzAxMSwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3ml7bpl7RcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMzAxNywge30pIH0uYmluZCh0aGlzKSwgICAvLyDpl67ljbdcclxuICAgICAgICAgICAgLy8gZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyNTAwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3ml7bpl7RcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyNDIwNCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDpl67ljbdcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMTAwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3ml7bpl7RcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMTA0MCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDpl67ljbdcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMTAzNywge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3lpKnmlbBcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMTIxMywge3R5cGVfbGlzdDogW3t0eXBlOiBQYXJ0bmVyQ29uc3QuRnVuX0Zvcm0uRHJhbWF9LCB7dHlwZTogUGFydG5lckNvbnN0LkZ1bl9Gb3JtLkFyZW5hfV19KSB9LmJpbmQodGhpcyksICAgICAvLyDpmLXms5VcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyNDQxMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDpl67ljbdcclxuICAgICAgICAgICAgLy8gZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyNDQxMSwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3lpKnmlbBcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyNDQwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3ml7bpl7RcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyNDQwNSwge30pIH0uYmluZCh0aGlzKSwgICAvLyDpl67ljbdcclxuICAgICAgICAgICAgLy8gZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyNDMxMiwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3ml7bpl7RcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyMzIwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDpl67ljbdcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxMDQwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3ml7bpl7RcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxNjQwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDpl67ljbdcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyMDMwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3lpKnmlbBcclxuICAgICAgICAgICAgLy8gZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxOTkwNiwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3ml7bpl7RcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyMTAwNiwge30pIH0uYmluZCh0aGlzKSwgICAvLyDpl67ljbdcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgxNjcwNSwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3lpKnmlbBcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyNDcwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDlvIDmnI3ml7bpl7RcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLlNlbmRQcm90b2NhbCgyNTMwMCwge30pIH0uYmluZCh0aGlzKSwgICAvLyDmiJjku6Tku7vliqHnuqLngrlcclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5ndWlsZFJlZEJhZ1Byb3RvY2FsKCkgfS5iaW5kKHRoaXMpLCAgICAgLy8g5YWs5Lya57qi5YyFXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5hZHZlbnRydWVQcm90b2NhbCgpIH0uYmluZCh0aGlzKSwgICAgICAgLy8g5YaS6ZmpXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5lbmRsZXNzUHJvdG9jYWwoKSB9LmJpbmQodGhpcyksICAgICAgICAgLy8g5peg5bC96K+V54K8XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy52b3lhZ2VQcm90b2NhbCgpIH0uYmluZCh0aGlzKSwgICAgICAgICAgIC8vIOi/nOiIqlxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHRoaXMuYXJlbmFQcm90b2NhbCgpIH0uYmluZCh0aGlzKSwgICAgICAgICAgIC8vIOernuaKgOWculxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHRoaXMuU2VuZFByb3RvY2FsKDMwMDAxLCB7fSkgfS5iaW5kKHRoaXMpLCAgIC8vIOaWsOS4u+e6v+S7u+WKoVxyXG4gICAgICAgICAgICBcclxuICAgICAgICBdXHJcblxyXG4gICAgICAgIHZhciBjdXJfaW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMucGluZ190aW1lcl9pZCA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb25fbGlzdFtjdXJfaW5kZXhdKCk7XHJcbiAgICAgICAgICAgIGN1cl9pbmRleCArKztcclxuICAgICAgICB9LmJpbmQodGhpcyksIDEwLCBmdW5jdGlvbl9saXN0Lmxlbmd0aClcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKioqKioqKioqKioqKioqKirku6XkuIvmmK/kuIDkupvnibnmrornmoTljY/orq7or7fmsYIqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4gICAgaW5pdEF0dHJQcm90b2NhbHNGdW5MaXN0OiBmdW5jdGlvbihmb3JjZSkge1xyXG4gICAgICAgIGlmIChmb3JjZSB8fCAhdGhpcy5hdHRyX2Z1bl9saXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cl9mdW5fbGlzdCA9IFtcclxuICAgICAgICAgICAgICAgIHtmdW5jOiBmdW5jdGlvbiAoKSB7dGhpcy5hZHZlbnRydWVQcm90b2NhbCgpfS5iaW5kKHRoaXMpLCByZXFfZmxhZzogZmFsc2V9LFxyXG4gICAgICAgICAgICAgICAge2Z1bmM6IGZ1bmN0aW9uICgpIHt0aGlzLmFyZW5hUHJvdG9jYWwoKSB9LmJpbmQodGhpcyksIHJlcV9mbGFnOiBmYWxzZX0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB7ZnVuYzogZnVuY3Rpb24gKCkge3RoaXMuZW5kbGVzc1Byb3RvY2FsKCkgfS5iaW5kKHRoaXMpLCByZXFfZmxhZzogZmFsc2V9LCAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAge2Z1bmM6IGZ1bmN0aW9uICgpIHt0aGlzLnZveWFnZVByb3RvY2FsKCkgfS5iaW5kKHRoaXMpLCByZXFfZmxhZzogZmFsc2V9LFxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyDmo4DmtYvmmK/lkKbor7fmsYLov4fmlbDmja5cclxuICAgIGNoZWNrUHJvdG9jYWxJc0NhblJlcXVlc3Q6IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXR0cl9mdW5fbGlzdCAmJiB0aGlzLmF0dHJfZnVuX2xpc3RbaWRdICYmICF0aGlzLmF0dHJfZnVuX2xpc3RbaWRdLnJlcV9mbGFnKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyDlhazkvJrnuqLljIUo5Y+q6ZyA6KaB55m76ZmG5ZKM5pat57q/5pe26K+35rGC77yM5Yqg5YWl5YWs5Lya5pe277yM5ZCO56uv5Lya5Li75Yqo5o6oKVxyXG4gICAgZ3VpbGRSZWRCYWdQcm90b2NhbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucm9sZV92byAmJiB0aGlzLnJvbGVfdm8uZ2lkICE9IDAgJiYgdGhpcy5yb2xlX3ZvLmdzcnZfaWQgIT0gXCJcIilcclxuICAgICAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTM1MzQsIHt9KVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyDlhpLpmannmoTljY/orq7or7fmsYJcclxuICAgIGFkdmVudHJ1ZVByb3RvY2FsOiBmdW5jdGlvbihmb3JjZXMpIHtcclxuICAgICAgICB2YXIgaXNfb3BlbiA9IGZvcmNlcztcclxuICAgICAgICBpZihpc19vcGVuID09IG51bGwpe1xyXG4gICAgICAgICAgICBpc19vcGVuID0gQWR2ZW50dXJlQWN0aXZpdHlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuaXNPcGVuQWN0aXZpdHkoQWR2ZW50dXJlQWN0aXZpdHlDb25zdC5Hcm91bmRfVHlwZS5hZHZlbnR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpc19vcGVuID09IGZhbHNlKXJldHVybjtcclxuICAgICAgICBpZighdGhpcy5jaGVja1Byb3RvY2FsSXNDYW5SZXF1ZXN0KDApKXJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMDYwMCwge30pICAvLyDlhpLpmanln7rnoYDkv6Hmga9cclxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMDYwMSwge30pICAvLyDlhpLpmalidWZm5L+h5oGvXHJcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjA2MDQsIHt9KSAgLy8g5YaS6Zmp5LyZ5Ly05L+h5oGv5pWw5o2uXHJcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjA2MzQsIHt9KSAgLy8g5YaS6Zmp5a6d566xXHJcbiAgICAgICAgaWYodGhpcy5hdHRyX2Z1bl9saXN0WzBdKXtcclxuICAgICAgICAgICAgdGhpcy5hdHRyX2Z1bl9saXN0WzBdLnJlcV9mbGFnID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGVuZGxlc3NQcm90b2NhbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIG9wZW5fY29uZmlnID0gQ29uZmlnLmVuZGxlc3NfZGF0YS5kYXRhX2NvbnN0Lm9wZW5fbGV2O1xyXG4gICAgICAgIGlmICghb3Blbl9jb25maWcpIHJldHVybjtcclxuICAgICAgICB2YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcclxuICAgICAgICB2YXIgaXNfb3BlbiA9IE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGVja0lzT3BlbkJ5QWN0aXZhdGUob3Blbl9jb25maWcudmFsKTtcclxuICAgICAgICBpZiAoIWlzX29wZW4pIHJldHVyblxyXG4gICAgICAgIGlmICghdGhpcy5jaGVja1Byb3RvY2FsSXNDYW5SZXF1ZXN0KDIpKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIzOTAwLCB7fSlcclxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMzkwMywge30pXHJcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjM5MDYsIHt9KVxyXG4gICAgICAgIGlmICh0aGlzLmF0dHJfZnVuX2xpc3RbMl0pXHJcbiAgICAgICAgICAgIHRoaXMuYXR0cl9mdW5fbGlzdFsyXS5yZXFfZmxhZyA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIOi/nOiIquWNj+iuruivt+axglxyXG4gICAgdm95YWdlUHJvdG9jYWw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsZXZfY29uZmlnID0gQ29uZmlnLnNoaXBwaW5nX2RhdGEuZGF0YV9jb25zdFtcImd1aWxkX2xldlwiXTtcclxuICAgICAgICBpZiAoIWxldl9jb25maWcgfHwgIXRoaXMucm9sZV92byB8fCBsZXZfY29uZmlnLnZhbCA+IHRoaXMucm9sZV92by5sZXYpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tQcm90b2NhbElzQ2FuUmVxdWVzdCgzKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMzgwMCwge30pXHJcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjM4MDUsIHt9KVxyXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIzODIxLCB7fSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXR0cl9mdW5fbGlzdFszXSlcclxuICAgICAgICAgICAgdGhpcy5hdHRyX2Z1bl9saXN0WzNdLnJlcV9mbGFnID0gdHJ1ZTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHJlc2V0QXR0clByb3RvY2FsczogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5pbml0QXR0clByb3RvY2Fsc0Z1bkxpc3QodHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlcXVlc3RBdHRyUHJvdG9jYWxzOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYXR0cl9mdW5fbGlzdCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBmdW5faSBpbiB0aGlzLmF0dHJfZnVuX2xpc3QpIHtcclxuICAgICAgICAgICAgdmFyIGZ1bl9pbmZvID0gdGhpcy5hdHRyX2Z1bl9saXN0W2Z1bl9pXTtcclxuICAgICAgICAgICAgaWYgKCFmdW5faW5mby5yZXFfZmxhZykge1xyXG4gICAgICAgICAgICAgICAgZnVuX2luZm8uZnVuYygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8v56ue5oqA5Zy655qE5Y2P6K6u6K+35rGCXHJcbiAgICBhcmVuYVByb3RvY2FsOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY29uZmlnID0gQ29uZmlnLmFyZW5hX2RhdGEuZGF0YV9jb25zdC5saW1pdF9sZXY7XHJcbiAgICAgICAgaWYgKCFjb25maWcgfHwgIXRoaXMucm9sZV92byB8fCB0aGlzLnJvbGVfdm8ubGV2IDwgY29uZmlnLnZhbClcclxuICAgICAgICAgICAgcmV0dXJuXHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaGVja1Byb3RvY2FsSXNDYW5SZXF1ZXN0KDEpKSByZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjAyMDgsIHt9KVxyXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIwMjAwLCB7fSlcclxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMDI1MCwge30pXHJcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjAyMjMsIHt9KVxyXG4gICAgICAgIGlmICh0aGlzLmF0dHJfZnVuX2xpc3RbMV0pXHJcbiAgICAgICAgICAgIHRoaXMuYXR0cl9mdW5fbGlzdFsxXS5yZXFfZmxhZyA9IHRydWVcclxuICAgIH0sXHJcbn0pXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFN5c0NvbnRyb2xsZXI7Il19