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
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/role/role_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, '2dffcv8hD1O0I8pPJXBDgcT', 'role_controller');
// Scripts/mod/role/role_controller.js
 
"use strict";
 
/*-----------------------------------------------------+
 * 角色控制模块
 * @author whjing2012@163.com
 +-----------------------------------------------------*/
// var MainSceneController = require("mainscene_controller");
var RoleEvent = require("role_event");
 
var RoleController = cc.Class({
  "extends": BaseController,
  ctor: function ctor() {},
  // 初始化配置数据
  initConfig: function initConfig() {
    var RoleModel = require("role_model");
 
    this.model = new RoleModel();
    this.model.initConfig();
    this.is_re_connect = false;
    this.apk_data = null; // SDK_.get_apk_url(function(data){
    //     cc.log(data)
    //     this.apk_data = data;
    // }.bind(this))
  },
  getModel: function getModel() {
    return this.model;
  },
  getRoleVo: function getRoleVo() {
    if (this.model) {
      return this.model.getRoleVo();
    }
  },
  // 注册监听事件
  registerEvents: function registerEvents() {
    this.re_link_game_event = gcore.GlobalEvent.bind(EventId.LOADING_FINISH, function () {
      if (this.need_set_name) this.openRoleSetNameView(true);
    }.bind(this));
  },
  // 注册协议接受事件
  registerProtocals: function registerProtocals() {
    this.RegisterProtocal(10301, this.on10301); // 角色基本信息
 
    this.RegisterProtocal(10302, this.on10302); // 资产信息
 
    this.RegisterProtocal(10315, this.on10315); // 查看角色信息
 
    this.RegisterProtocal(10306, this.on10306); // 战力变更推送
 
    this.RegisterProtocal(10318, this.on10318); // 允许切磋状态
 
    this.RegisterProtocal(10325, this.on10325); // 头像列表信息
 
    this.RegisterProtocal(10327, this.on10327); // 头像变更
 
    this.RegisterProtocal(10345, this.on10345); // 形象信息
 
    this.RegisterProtocal(10346, this.on10346); // 形象使用
 
    this.RegisterProtocal(10347, this.on10347); // 形象激活
 
    this.RegisterProtocal(10342, this.on10342); // 强制改名
 
    this.RegisterProtocal(10343, this.on10343); // 角色改名
 
    this.RegisterProtocal(10317, this.on10317); // 形象激活                
 
    this.RegisterProtocal(10316, this.on10316); // 膜拜角色
    // this.RegisterProtocal(12741, this.on12741); // 能用提示信息
 
    this.RegisterProtocal(12745, this.on12745); // 道具不足通用协议
 
    this.RegisterProtocal(10906, this.on10906); // 开服天数
 
    this.RegisterProtocal(10994, this.on10994); // 服务端通知整点更新
 
    this.RegisterProtocal(10945, this.on10945); // 媒体卡兑换
 
    this.RegisterProtocal(21500, this.on21500); // 头像框获取
 
    this.RegisterProtocal(21501, this.on21501); // 使用头像框 
 
    this.RegisterProtocal(21502, this.on21502); // 更新头像框 
 
    this.RegisterProtocal(21503, this.on21503); // 激活头像框 
 
    this.RegisterProtocal(23300, this.on23300); // 称号信息
 
    this.RegisterProtocal(23301, this.on23301); // 使用称号
 
    this.RegisterProtocal(23302, this.on23302); // 更新称号数据
 
    this.RegisterProtocal(23303, this.on23303); // 激活称号
 
    this.RegisterProtocal(24500, this.on24500); // 当前特权情况
 
    this.RegisterProtocal(10350, this.handle10350); //-- 获取活动资产id
 
    this.RegisterProtocal(10351, this.handle10351); //-- 推送活动资产id 
 
    this.RegisterProtocal(12770, this.handle12770); // -- 发送举报协议
 
    this.RegisterProtocal(12771, this.handle12771); //-- 获取举报协议信息
 
    this.RegisterProtocal(10905, this.handle10905); //-- 世界等级
    //成长之路
    // this.RegisterProtocal(25830, this.handle25830);  //查看成长之路
    // this.RegisterProtocal(25831, this.handle25831);  //成长之路分享
    // this.RegisterProtocal(25832, this.handle25832);  //查看成长之路分享
  },
  setReconnect: function setReconnect(status) {
    this.is_re_connect = status;
  },
  //判断别人srv_id是不是与自己是不是同服
  isTheSameSvr: function isTheSameSvr(srv_id) {
    var is_same = this.model.isTheSame(srv_id);
 
    if (srv_id && is_same) {
      return true;
    } else {
      return false;
    }
  },
  // 角色基本信息
  on10301: function on10301(data) {
    cc.log("角色基本信息");
    cc.log(data);
 
    if (!this.init_role) {
      this.init_role = true; //先实例化
 
      this.model.initRoleBaseData(data); // 这里会有很多信息需要请求
 
      this.requestOpenSrvDay(); // 开服天数
 
      if (PLATFORM_TYPR == "SH_SDK") {
        SDK.roleUpLevel(this.getRoleVo().lev);
      }
 
      if (data.lev <= 5) {
        game.addGuideRes();
 
        if (data.sex == 2) {
          game.addRenameRes();
        }
      }
 
      game.addChapterRes(data.chapter_id);
 
      if (data.lev < 10) {
        window.hide_loading = true;
      }
 
      var SysController = require("sys_controller").getInstance();
 
      game.preloadRes(function () {
        // this.model.initRoleBaseData(data);
        SysController.requestLoginProtocals(function () {
          var MainUiController = require("mainui_controller");
 
          MainUiController.getInstance().openMainUI(true);
 
          var MainSceneController = require("mainscene_controller");
 
          MainSceneController.getInstance().enterMainScene(true);
        }.bind(this));
      }.bind(this));
      gcore.GlobalEvent.fire(EventId.EVT_ROLE_CREATE_SUCCESS); // -- sdk等级计算
 
      if (IS_SUBMIT) {
        SDK.sdkSubmitUserData(3);
      }
 
      game.initMsgView();
    } else {
      this.model.initRoleBaseData(data);
    } // 断线重连抛出事件
 
 
    if (this.is_re_connect) {
      gcore.GlobalEvent.fire(EventId.EVT_RE_LINK_GAME);
      this.is_re_connect = false;
    }
  },
  // 角色资产信息
  on10302: function on10302(data) {
    this.model.initRoleAssetsData(data);
  },
  //查看角色信息
  requestRoleInfo: function requestRoleInfo(rid, srv_id) {
    if (rid == 0 || !srv_id) return;
    var protocal = {};
    protocal.rid = rid;
    protocal.srv_id = srv_id;
    this.SendProtocal(10315, protocal);
  },
  //查看角色信息
  on10315: function on10315(data) {
    gcore.GlobalEvent.fire(RoleEvent.DISPATCH_PLAYER_VO_EVENT, data);
  },
  // 膜拜
  sender10316: function sender10316(rid, srv_id, index, type) {
    if (!rid) return;
    index = index || 0;
    type = type || 0;
    var protocal = {};
    protocal.type = type;
    protocal.rid = rid;
    protocal.srv_id = srv_id;
    protocal.idx = index;
    this.SendProtocal(10316, protocal);
  },
  on10316: function on10316(data) {
    message(data.msg);
 
    if (data.code == 1) {
      gcore.GlobalEvent.fire(RoleEvent.WorshipOtherRole, data);
    }
  },
  // 更新切磋状态
  send10318: function send10318(auto_pk) {
    this.SendProtocal(10318, {
      auto_pk: auto_pk
    });
  },
  // 更新切磋状态结果
  on10318: function on10318(data) {
    message(data.msg);
 
    if (data.code == 1) {
      this.model.setRoleAttribute("auto_pk", data.auto_pk);
    }
  },
  // 请求头像列表信息
  send10325: function send10325() {
    this.SendProtocal(10325, {});
  },
  on10325: function on10325(data) {
    this.model.setRoleAttribute("face_list", data.face_list);
  },
  // 头像变更
  send10327: function send10327(face_id) {
    this.SendProtocal(10327, {
      face_id: face_id
    });
  },
  on10327: function on10327(data) {
    message(data.msg);
 
    if (data.code == 1) {
      this.model.setRoleAttribute("face_id", data.face_id);
    }
  },
  // 通用提示信息
  on12741: function on12741(data) {// message(data.msg);
  },
  // 道具不足通用提示
  on12745: function on12745(data) {
    var item_config = Utils.getItemConfig(data.bid);
 
    if (item_config) {
      if (data.bid == Config.item_data.data_assets_label2id.gold || data.bid == Config.item_data.data_assets_label2id.gold) {
        if (IS_SHOW_CHARGE == false) {
          message(Utils.TI18N("钻石不足"));
        } else {
          var fun = function () {
            require("vip_controller").getInstance().openVipMainWindow(true, VIPTABCONST.CHARGE);
          }.bind(this);
 
          var str = cc.js.formatStr(Utils.TI18N('%s不足,是否前往充值'), item_config.name);
 
          var CommonAlert = require("commonalert");
 
          CommonAlert.show(str, Utils.TI18N('确定'), fun, Utils.TI18N('取消'), null, CommonAlert.type.rich, null, null);
        }
      } else if (data.bid == Config.item_data.data_assets_label2id.energy) {
        message(Utils.TI18N("情报不足"));
      } else {
        var config = Utils.getItemConfig(data.bid);
 
        if (config) {
          var BackpackController = require("backpack_controller");
 
          BackpackController.getInstance().openTipsSource(true, config.id);
        }
      }
    }
  },
  on10994: function on10994(data) {
    if (data.type == 6 || data.type == 18) {
      require("mainscene_controller").getInstance().changeMainCityTimeType(data.type);
    } else if (data.type == 0) {
      this.requestOpenSrvDay(); // require("primus_controller").getInstance().sender20706() //星河神殿请求红点
 
      require("action_controller").getInstance().requestActionRedStatus(); //部分活动请求红点
 
 
      require("startower_controller").getInstance().sender11320();
    }
  },
  // 改名
  changeRoleName: function changeRoleName(name, sex) {
    this.SendProtocal(10343, {
      name: name,
      sex: sex
    });
  },
  // 改名结果
  on10343: function on10343(data) {
    message(data.msg);
 
    if (data.code == 1) {
      this.model.setRoleAttribute("name", data.name);
      this.model.setRoleAttribute("sex", data.sex);
      this.model.setRoleAttribute("is_first_rename", 0);
      this.openRoleSetNameView(false);
    }
  },
  // 形象信息请求
  send10345: function send10345() {
    this.SendProtocal(10345, {});
  },
  on10345: function on10345(data) {
    gcore.GlobalEvent.fire(RoleEvent.GetModelList, data);
  },
  // 形象使用
  send10346: function send10346(id) {
    this.SendProtocal(10346, {
      id: id
    });
  },
  on10346: function on10346(data) {
    message(data.msg);
 
    if (data.code == 1) {
      gcore.GlobalEvent.fire(RoleEvent.UpdateModel, data.id);
    }
  },
  // 形象激活
  send10347: function send10347(id) {
    this.SendProtocal(10347, {
      id: id
    });
  },
  on10347: function on10347(data) {
    message(data.msg);
 
    if (data.code == 1) {
      gcore.GlobalEvent.fire(RoleEvent.ActiveModel, data.id);
    }
  },
  // 媒体卡领取
  sender10945: function sender10945(card_id) {
    this.SendProtocal(10945, {
      card_id: card_id
    });
  },
  on10945: function on10945(data) {
    message(data.msg);
  },
  // 头像框获取
  send21500: function send21500() {
    this.SendProtocal(21500);
  },
  on21500: function on21500(data) {
    gcore.GlobalEvent.fire(RoleEvent.GetFaceList, data);
  },
  // 使用头像框
  send21501: function send21501(base_id) {
    this.SendProtocal(21501, {
      base_id: base_id
    });
  },
  on21501: function on21501(data) {},
  // 更新头像框 
  on21502: function on21502(data) {
    gcore.GlobalEvent.fire(RoleEvent.GetFaceList, data);
  },
  // 激活头像框 
  send21503: function send21503(base_id) {
    this.SendProtocal(21503, {
      base_id: base_id
    });
  },
  on21503: function on21503(data) {
    gcore.GlobalEvent.fire(RoleEvent.GetFaceList, data);
  },
  // 称号列表信息
  send23300: function send23300() {
    this.SendProtocal(23300, {});
  },
  on23300: function on23300(data) {
    this.model.setRoleAttribute("title_id", data.base_id);
    this.model.setRoleAttribute("title_list", data.honor);
    gcore.GlobalEvent.fire(RoleEvent.GetTitleList, data);
  },
  // 使用称号
  send23301: function send23301(base_id) {
    this.SendProtocal(23301, {
      base_id: base_id
    });
  },
  on23301: function on23301(data) {
    this.model.setRoleAttribute("title_id", data.base_id);
    gcore.GlobalEvent.fire(RoleEvent.UseTitle, data.base_id);
  },
  // 更新称号
  on23302: function on23302(data) {
    this.model.setRoleAttribute("title_list", data.honor);
    gcore.GlobalEvent.fire(RoleEvent.UpdateTitleList, data);
  },
  // 激活称号 
  send23303: function send23303(base_id) {
    this.SendProtocal(23303, {
      base_id: base_id
    });
  },
  on23303: function on23303(data) {
    this.model.setRoleAttribute("title_list", data.honor);
    gcore.GlobalEvent.fire(RoleEvent.UpdateTitleList, data);
  },
  // 打开角色设置面板
  openRoleInfoView: function openRoleInfoView(status) {
    if (status == true) {
      if (!this.role_info_view) {
        var RoleSetWindow = require("role_set_window");
 
        this.role_info_view = new RoleSetWindow();
      }
 
      this.role_info_view.open();
    } else {
      if (this.role_info_view) {
        this.role_info_view.close();
        this.role_info_view = null;
      }
    }
  },
  // 打开更改装饰界面
  openRoleDecorateView: function openRoleDecorateView(status, index, setting) {
    if (status) {
      if (!this.role_decorate_view) {
        var RoleDecorateWindow = require("role_decorate_window");
 
        this.role_decorate_view = new RoleDecorateWindow();
      }
 
      this.role_decorate_view.open(index, setting);
    } else {
      if (this.role_decorate_view) {
        this.role_decorate_view.close();
        this.role_decorate_view = null;
      }
    }
  },
  //判断一个人是否是自己
  checkIsSelf: function checkIsSelf(srv_id, rid) {
    var role_vo = this.getRoleVo();
    if (role_vo == null) return false;else return role_vo.srv_id == srv_id && role_vo.rid == rid;
  },
  // 当前特权情况
  on24500: function on24500(data) {
    this.model.setPrivilegeData(data.list);
  },
  // 请求开服天数
  requestOpenSrvDay: function requestOpenSrvDay() {
    this.SendProtocal(10906, {});
  },
  // 开服天数返回
  on10906: function on10906(data) {
    this.model.setOpenSrvDay(data.open_day);
  },
  // 强制改名
  on10342: function on10342() {
    if (game.finish_loading) {
      this.openRoleSetNameView(true);
    } else {
      this.need_set_name = true;
    }
  },
  // 点赞数量
  on10317: function on10317() {},
  // --打开设置名称界面
  openRoleSetNameView: function openRoleSetNameView(status) {
    var self = this;
 
    if (status == true) {
      if (self.role_setname_new == null) {
        var RoleSetNameView = require("role_setname_window");
 
        self.role_setname_new = new RoleSetNameView();
      }
 
      self.role_setname_new.open();
    } else {
      if (self.role_setname_new != null) {
        self.role_setname_new.close();
        self.role_setname_new = null;
      }
    }
  },
  getRandomName: function getRandomName(sex) {
    sex = sex || 1;
    var randomName = "";
 
    for (var i in Config.random_name_data.data_list) {
      var config = Config.random_name_data.data_list[i] || {}; //     -- 取出所有符合性别要求的名称
 
      var temp_data = [];
 
      for (var k = 0; k < config.length; ++k) {
        var v = config[k];
 
        if (v && (v.sex == sex || v.sex == 0)) {
          temp_data.push(v);
        }
      }
 
      var random_data = temp_data[~~(Math.random() * temp_data.length)] || [];
      randomName = randomName + (random_data.name || "");
    }
 
    return randomName;
  },
  // --[[活动资产推送]] --登陆的时候推送
  handle10350: function handle10350(data) {
    this.model.initRoleActionAssetsData(data.holiday_assets, false);
  },
  handle10351: function handle10351(data) {
    this.model.initRoleActionAssetsData(data.holiday_assets, true);
  },
  // --打开举报界面
  openRoleReportedPanel: function openRoleReportedPanel(status, rid, srv_id, play_name) {
    var self = this;
 
    if (status == true) {
      if (self.role_reported_panel == null) {
        var RoleReportedWindow = require("role_reported_window");
 
        self.role_reported_panel = new RoleReportedWindow();
      }
 
      self.role_reported_panel.open({
        rid: rid,
        srv_id: srv_id,
        play_name: play_name
      });
    } else {
      if (self.role_reported_panel != null) {
        self.role_reported_panel.close();
        self.role_reported_panel = null;
      }
    }
  },
  // -----------------------------------------------举报功能协议和打开方法-------------------------
  send12770: function send12770(rid, srv_id, _type, msg, history) {
    var protocal = {};
    protocal.rid = rid;
    protocal.srv_id = srv_id;
    protocal.type = _type || 1;
    protocal.msg = msg || "";
    protocal.history = history || [];
    this.SendProtocal(12770, protocal);
  },
  send12771: function send12771(rid, srv_id) {
    var protocal = {};
    protocal.rid = rid;
    protocal.srv_id = srv_id;
    this.SendProtocal(12771, protocal);
  },
  handle12770: function handle12770(data) {
    message(data.msg);
  },
  handle12771: function handle12771(data) {
    gcore.GlobalEvent.fire(RoleEvent.ROLE_REPORTED_EVENT, data);
  },
  checkRoleSetNameViewIsOpen: function checkRoleSetNameViewIsOpen() {
    if (this.role_setname_new) return true;
    return false;
  },
  on10306: function on10306(data) {
    var role = this.getRoleVo();
    role.setPower(data.power);
    role.setMaxPower(data.max_power);
  },
  getApkData: function getApkData() {
    if (this.apk_data) {
      return this.apk_data;
    }
  },
  handle10905: function handle10905(data) {
    this.model.setWorldLev(data.world_lev);
  },
  //成长之路---------
  send25830: function send25830(start, num) {
    var protocal = {};
    protocal.start = start;
    protocal.num = num;
    this.SendProtocal(25830, protocal);
  },
  handle25830: function handle25830(data) {
    cc.log("25830", data); //num等于1是计算红点用途
 
    if (data.num == 1) {} // data.is_redpoint = this.model.checkGrowthWayRedPoint(data);
    // this.model.setGrowthWayData(data);
 
  },
  //成长之路分享
  send25831: function send25831(channel) {
    var protocal = {};
    protocal.channel = channel;
    this.SendProtocal(25831, protocal);
  },
  handle25831: function handle25831(data) {
    cc.log("25831", data);
  },
  //查看成长之路分享
  send25832: function send25832(rid, srv_id, start, num) {
    var protocal = {};
    protocal.rid = rid;
    protocal.srv_id = srv_id;
    protocal.start = start;
    protocal.num = num;
    this.SendProtocal(25832, protocal);
  },
  handle25832: function handle25832(data) {
    cc.log("25832", data);
  },
  //角色是否第一次创建
  isfirstRole: function isfirstRole() {
    var role_vo = this.getRoleVo();
    if (role_vo && role_vo.sex == 2) return true;
    return false;
  }
});
module.exports = RoleController;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyb2xlXFxyb2xlX2NvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiUm9sZUV2ZW50IiwicmVxdWlyZSIsIlJvbGVDb250cm9sbGVyIiwiY2MiLCJDbGFzcyIsIkJhc2VDb250cm9sbGVyIiwiY3RvciIsImluaXRDb25maWciLCJSb2xlTW9kZWwiLCJtb2RlbCIsImlzX3JlX2Nvbm5lY3QiLCJhcGtfZGF0YSIsImdldE1vZGVsIiwiZ2V0Um9sZVZvIiwicmVnaXN0ZXJFdmVudHMiLCJyZV9saW5rX2dhbWVfZXZlbnQiLCJnY29yZSIsIkdsb2JhbEV2ZW50IiwiYmluZCIsIkV2ZW50SWQiLCJMT0FESU5HX0ZJTklTSCIsIm5lZWRfc2V0X25hbWUiLCJvcGVuUm9sZVNldE5hbWVWaWV3IiwicmVnaXN0ZXJQcm90b2NhbHMiLCJSZWdpc3RlclByb3RvY2FsIiwib24xMDMwMSIsIm9uMTAzMDIiLCJvbjEwMzE1Iiwib24xMDMwNiIsIm9uMTAzMTgiLCJvbjEwMzI1Iiwib24xMDMyNyIsIm9uMTAzNDUiLCJvbjEwMzQ2Iiwib24xMDM0NyIsIm9uMTAzNDIiLCJvbjEwMzQzIiwib24xMDMxNyIsIm9uMTAzMTYiLCJvbjEyNzQ1Iiwib24xMDkwNiIsIm9uMTA5OTQiLCJvbjEwOTQ1Iiwib24yMTUwMCIsIm9uMjE1MDEiLCJvbjIxNTAyIiwib24yMTUwMyIsIm9uMjMzMDAiLCJvbjIzMzAxIiwib24yMzMwMiIsIm9uMjMzMDMiLCJvbjI0NTAwIiwiaGFuZGxlMTAzNTAiLCJoYW5kbGUxMDM1MSIsImhhbmRsZTEyNzcwIiwiaGFuZGxlMTI3NzEiLCJoYW5kbGUxMDkwNSIsInNldFJlY29ubmVjdCIsInN0YXR1cyIsImlzVGhlU2FtZVN2ciIsInNydl9pZCIsImlzX3NhbWUiLCJpc1RoZVNhbWUiLCJkYXRhIiwibG9nIiwiaW5pdF9yb2xlIiwiaW5pdFJvbGVCYXNlRGF0YSIsInJlcXVlc3RPcGVuU3J2RGF5IiwiUExBVEZPUk1fVFlQUiIsIlNESyIsInJvbGVVcExldmVsIiwibGV2IiwiZ2FtZSIsImFkZEd1aWRlUmVzIiwic2V4IiwiYWRkUmVuYW1lUmVzIiwiYWRkQ2hhcHRlclJlcyIsImNoYXB0ZXJfaWQiLCJ3aW5kb3ciLCJoaWRlX2xvYWRpbmciLCJTeXNDb250cm9sbGVyIiwiZ2V0SW5zdGFuY2UiLCJwcmVsb2FkUmVzIiwicmVxdWVzdExvZ2luUHJvdG9jYWxzIiwiTWFpblVpQ29udHJvbGxlciIsIm9wZW5NYWluVUkiLCJNYWluU2NlbmVDb250cm9sbGVyIiwiZW50ZXJNYWluU2NlbmUiLCJmaXJlIiwiRVZUX1JPTEVfQ1JFQVRFX1NVQ0NFU1MiLCJJU19TVUJNSVQiLCJzZGtTdWJtaXRVc2VyRGF0YSIsImluaXRNc2dWaWV3IiwiRVZUX1JFX0xJTktfR0FNRSIsImluaXRSb2xlQXNzZXRzRGF0YSIsInJlcXVlc3RSb2xlSW5mbyIsInJpZCIsInByb3RvY2FsIiwiU2VuZFByb3RvY2FsIiwiRElTUEFUQ0hfUExBWUVSX1ZPX0VWRU5UIiwic2VuZGVyMTAzMTYiLCJpbmRleCIsInR5cGUiLCJpZHgiLCJtZXNzYWdlIiwibXNnIiwiY29kZSIsIldvcnNoaXBPdGhlclJvbGUiLCJzZW5kMTAzMTgiLCJhdXRvX3BrIiwic2V0Um9sZUF0dHJpYnV0ZSIsInNlbmQxMDMyNSIsImZhY2VfbGlzdCIsInNlbmQxMDMyNyIsImZhY2VfaWQiLCJvbjEyNzQxIiwiaXRlbV9jb25maWciLCJVdGlscyIsImdldEl0ZW1Db25maWciLCJiaWQiLCJDb25maWciLCJpdGVtX2RhdGEiLCJkYXRhX2Fzc2V0c19sYWJlbDJpZCIsImdvbGQiLCJJU19TSE9XX0NIQVJHRSIsIlRJMThOIiwiZnVuIiwib3BlblZpcE1haW5XaW5kb3ciLCJWSVBUQUJDT05TVCIsIkNIQVJHRSIsInN0ciIsImpzIiwiZm9ybWF0U3RyIiwibmFtZSIsIkNvbW1vbkFsZXJ0Iiwic2hvdyIsInJpY2giLCJlbmVyZ3kiLCJjb25maWciLCJCYWNrcGFja0NvbnRyb2xsZXIiLCJvcGVuVGlwc1NvdXJjZSIsImlkIiwiY2hhbmdlTWFpbkNpdHlUaW1lVHlwZSIsInJlcXVlc3RBY3Rpb25SZWRTdGF0dXMiLCJzZW5kZXIxMTMyMCIsImNoYW5nZVJvbGVOYW1lIiwic2VuZDEwMzQ1IiwiR2V0TW9kZWxMaXN0Iiwic2VuZDEwMzQ2IiwiVXBkYXRlTW9kZWwiLCJzZW5kMTAzNDciLCJBY3RpdmVNb2RlbCIsInNlbmRlcjEwOTQ1IiwiY2FyZF9pZCIsInNlbmQyMTUwMCIsIkdldEZhY2VMaXN0Iiwic2VuZDIxNTAxIiwiYmFzZV9pZCIsInNlbmQyMTUwMyIsInNlbmQyMzMwMCIsImhvbm9yIiwiR2V0VGl0bGVMaXN0Iiwic2VuZDIzMzAxIiwiVXNlVGl0bGUiLCJVcGRhdGVUaXRsZUxpc3QiLCJzZW5kMjMzMDMiLCJvcGVuUm9sZUluZm9WaWV3Iiwicm9sZV9pbmZvX3ZpZXciLCJSb2xlU2V0V2luZG93Iiwib3BlbiIsImNsb3NlIiwib3BlblJvbGVEZWNvcmF0ZVZpZXciLCJzZXR0aW5nIiwicm9sZV9kZWNvcmF0ZV92aWV3IiwiUm9sZURlY29yYXRlV2luZG93IiwiY2hlY2tJc1NlbGYiLCJyb2xlX3ZvIiwic2V0UHJpdmlsZWdlRGF0YSIsImxpc3QiLCJzZXRPcGVuU3J2RGF5Iiwib3Blbl9kYXkiLCJmaW5pc2hfbG9hZGluZyIsInNlbGYiLCJyb2xlX3NldG5hbWVfbmV3IiwiUm9sZVNldE5hbWVWaWV3IiwiZ2V0UmFuZG9tTmFtZSIsInJhbmRvbU5hbWUiLCJpIiwicmFuZG9tX25hbWVfZGF0YSIsImRhdGFfbGlzdCIsInRlbXBfZGF0YSIsImsiLCJsZW5ndGgiLCJ2IiwicHVzaCIsInJhbmRvbV9kYXRhIiwiTWF0aCIsInJhbmRvbSIsImluaXRSb2xlQWN0aW9uQXNzZXRzRGF0YSIsImhvbGlkYXlfYXNzZXRzIiwib3BlblJvbGVSZXBvcnRlZFBhbmVsIiwicGxheV9uYW1lIiwicm9sZV9yZXBvcnRlZF9wYW5lbCIsIlJvbGVSZXBvcnRlZFdpbmRvdyIsInNlbmQxMjc3MCIsIl90eXBlIiwiaGlzdG9yeSIsInNlbmQxMjc3MSIsIlJPTEVfUkVQT1JURURfRVZFTlQiLCJjaGVja1JvbGVTZXROYW1lVmlld0lzT3BlbiIsInJvbGUiLCJzZXRQb3dlciIsInBvd2VyIiwic2V0TWF4UG93ZXIiLCJtYXhfcG93ZXIiLCJnZXRBcGtEYXRhIiwic2V0V29ybGRMZXYiLCJ3b3JsZF9sZXYiLCJzZW5kMjU4MzAiLCJzdGFydCIsIm51bSIsImhhbmRsZTI1ODMwIiwic2VuZDI1ODMxIiwiY2hhbm5lbCIsImhhbmRsZTI1ODMxIiwic2VuZDI1ODMyIiwiaGFuZGxlMjU4MzIiLCJpc2ZpcnN0Um9sZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFJQTtBQUNBLElBQUlBLFNBQVMsR0FBR0MsT0FBTyxDQUFDLFlBQUQsQ0FBdkI7O0FBRUEsSUFBSUMsY0FBYyxHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUMxQixhQUFTQyxjQURpQjtBQUUxQkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZLENBQ2pCLENBSHlCO0FBSzFCO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixRQUFJQyxTQUFTLEdBQUdQLE9BQU8sQ0FBQyxZQUFELENBQXZCOztBQUNBLFNBQUtRLEtBQUwsR0FBYSxJQUFJRCxTQUFKLEVBQWI7QUFDQSxTQUFLQyxLQUFMLENBQVdGLFVBQVg7QUFFQSxTQUFLRyxhQUFMLEdBQXFCLEtBQXJCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixJQUFoQixDQU5vQixDQU9wQjtBQUNBO0FBQ0E7QUFDQTtBQUNILEdBakJ5QjtBQW1CMUJDLEVBQUFBLFFBQVEsRUFBRSxvQkFBWTtBQUNsQixXQUFPLEtBQUtILEtBQVo7QUFDSCxHQXJCeUI7QUF1QjFCSSxFQUFBQSxTQUFTLEVBQUUscUJBQVk7QUFDbkIsUUFBSSxLQUFLSixLQUFULEVBQWdCO0FBQ1osYUFBTyxLQUFLQSxLQUFMLENBQVdJLFNBQVgsRUFBUDtBQUNIO0FBQ0os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dUIrSixLQUF2QixFQUE4QkMsR0FBOUIsRUFBbUM7QUFDMUMsUUFBSTNILFFBQVEsR0FBRyxFQUFmO0FBQ0FBLElBQUFBLFFBQVEsQ0FBQ0QsR0FBVCxHQUFlQSxHQUFmO0FBQ0FDLElBQUFBLFFBQVEsQ0FBQ3JDLE1BQVQsR0FBa0JBLE1BQWxCO0FBQ0FxQyxJQUFBQSxRQUFRLENBQUMwSCxLQUFULEdBQWlCQSxLQUFqQjtBQUNBMUgsSUFBQUEsUUFBUSxDQUFDMkgsR0FBVCxHQUFlQSxHQUFmO0FBQ0EsU0FBSzFILFlBQUwsQ0FBa0IsS0FBbEIsRUFBeUJELFFBQXpCO0FBQ0gsR0F2bUJ5QjtBQXltQjFCaUksRUFBQUEsV0FBVyxFQUFDLHFCQUFTbkssSUFBVCxFQUFjO0FBQ3RCNUQsSUFBQUEsRUFBRSxDQUFDNkQsR0FBSCxDQUFPLE9BQVAsRUFBZUQsSUFBZjtBQUNILEdBM21CeUI7QUE2bUIxQjtBQUNBb0ssRUFBQUEsV0FBVyxFQUFDLHVCQUFVO0FBQ2xCLFFBQUluRCxPQUFPLEdBQUcsS0FBS25LLFNBQUwsRUFBZDtBQUNBLFFBQUdtSyxPQUFPLElBQUlBLE9BQU8sQ0FBQ3RHLEdBQVIsSUFBZSxDQUE3QixFQUFnQyxPQUFPLElBQVA7QUFDaEMsV0FBTyxLQUFQO0FBQ0g7QUFsbkJ5QixDQUFULENBQXJCO0FBcW5CQTBKLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQm5PLGNBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICog6KeS6Imy5o6n5Yi25qih5Z2XXG4gKiBAYXV0aG9yIHdoamluZzIwMTJAMTYzLmNvbVxuICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vLyB2YXIgTWFpblNjZW5lQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWluc2NlbmVfY29udHJvbGxlclwiKTtcbnZhciBSb2xlRXZlbnQgPSByZXF1aXJlKFwicm9sZV9ldmVudFwiKTtcblxudmFyIFJvbGVDb250cm9sbGVyID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VDb250cm9sbGVyLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW6YWN572u5pWw5o2uXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgUm9sZU1vZGVsID0gcmVxdWlyZShcInJvbGVfbW9kZWxcIik7XG4gICAgICAgIHRoaXMubW9kZWwgPSBuZXcgUm9sZU1vZGVsKCk7XG4gICAgICAgIHRoaXMubW9kZWwuaW5pdENvbmZpZygpO1xuXG4gICAgICAgIHRoaXMuaXNfcmVfY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFwa19kYXRhID0gbnVsbDtcbiAgICAgICAgLy8gU0RLXy5nZXRfYXBrX3VybChmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgLy8gICAgIGNjLmxvZyhkYXRhKVxuICAgICAgICAvLyAgICAgdGhpcy5hcGtfZGF0YSA9IGRhdGE7XG4gICAgICAgIC8vIH0uYmluZCh0aGlzKSlcbiAgICB9LFxuXG4gICAgZ2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgfSxcblxuICAgIGdldFJvbGVWbzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZ2V0Um9sZVZvKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM55uR5ZCs5LqL5Lu2XG4gICAgcmVnaXN0ZXJFdmVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZV9saW5rX2dhbWVfZXZlbnQgPSBnY29yZS5HbG9iYWxFdmVudC5iaW5kKEV2ZW50SWQuTE9BRElOR19GSU5JU0gsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZWRfc2V0X25hbWUpXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUm9sZVNldE5hbWVWaWV3KHRydWUpO1xuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5Y2P6K6u5o6l5Y+X5LqL5Lu2XG4gICAgcmVnaXN0ZXJQcm90b2NhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwMzAxLCB0aGlzLm9uMTAzMDEpOyAvLyDop5LoibLln7rmnKzkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwMzAyLCB0aGlzLm9uMTAzMDIpOyAvLyDotYTkuqfkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwMzE1LCB0aGlzLm9uMTAzMTUpOyAvLyDmn6XnnIvop5LoibLkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwMzA2LCB0aGlzLm9uMTAzMDYpOyAvLyDmiJjlipvlj5jmm7TmjqjpgIFcblxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTAzMTgsIHRoaXMub24xMDMxOCk7IC8vIOWFgeiuuOWIh+eji+eKtuaAgVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTAzMjUsIHRoaXMub24xMDMyNSk7IC8vIOWktOWDj+WIl+ihqOS/oeaBr1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTAzMjcsIHRoaXMub24xMDMyNyk7IC8vIOWktOWDj+WPmOabtFxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTAzNDUsIHRoaXMub24xMDM0NSk7IC8vIOW9ouixoeS/oeaBr1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTAzNDYsIHRoaXMub24xMDM0Nik7IC8vIOW9ouixoeS9v+eUqFxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTAzNDcsIHRoaXMub24xMDM0Nyk7IC8vIOW9ouixoea/gOa0u1xuXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMDM0MiwgdGhpcy5vbjEwMzQyKTsgLy8g5by65Yi25pS55ZCNXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMDM0MywgdGhpcy5vbjEwMzQzKTsgLy8g6KeS6Imy5pS55ZCNXG5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwMzE3LCB0aGlzLm9uMTAzMTcpOyAvLyDlvaLosaHmv4DmtLsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwMzE2LCB0aGlzLm9uMTAzMTYpOyAvLyDohpzmi5zop5LoibJcbiAgICAgICAgLy8gdGhpcy5SZWdpc3RlclByb3RvY2FsKDEyNzQxLCB0aGlzLm9uMTI3NDEpOyAvLyDog73nlKjmj5DnpLrkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEyNzQ1LCB0aGlzLm9uMTI3NDUpOyAvLyDpgZPlhbfkuI3otrPpgJrnlKjljY/orq5cblxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTA5MDYsIHRoaXMub24xMDkwNik7IC8vIOW8gOacjeWkqeaVsFxuXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMDk5NCwgdGhpcy5vbjEwOTk0KTsgLy8g5pyN5Yqh56uv6YCa55+l5pW054K55pu05pawXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMDk0NSwgdGhpcy5vbjEwOTQ1KTsgLy8g5aqS5L2T5Y2h5YWR5o2iXG5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIxNTAwLCB0aGlzLm9uMjE1MDApOyAvLyDlpLTlg4/moYbojrflj5ZcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIxNTAxLCB0aGlzLm9uMjE1MDEpOyAvLyDkvb/nlKjlpLTlg4/moYYgXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyMTUwMiwgdGhpcy5vbjIxNTAyKTsgLy8g5pu05paw5aS05YOP5qGGIFxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjE1MDMsIHRoaXMub24yMTUwMyk7IC8vIOa/gOa0u+WktOWDj+ahhiBcblxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjMzMDAsIHRoaXMub24yMzMwMCk7IC8vIOensOWPt+S/oeaBr1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjMzMDEsIHRoaXMub24yMzMwMSk7IC8vIOS9v+eUqOensOWPt1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjMzMDIsIHRoaXMub24yMzMwMik7IC8vIOabtOaWsOensOWPt+aVsOaNrlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjMzMDMsIHRoaXMub24yMzMwMyk7IC8vIOa/gOa0u+ensOWPt1xuXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNDUwMCwgdGhpcy5vbjI0NTAwKTsgLy8g5b2T5YmN54m55p2D5oOF5Ya1XG5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwMzUwLCB0aGlzLmhhbmRsZTEwMzUwKSAgICAgLy8tLSDojrflj5bmtLvliqjotYTkuqdpZFxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTAzNTEsIHRoaXMuaGFuZGxlMTAzNTEpICAgICAvLy0tIOaOqOmAgea0u+WKqOi1hOS6p2lkIFxuXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMjc3MCwgdGhpcy5oYW5kbGUxMjc3MCkgICAgLy8gLS0g5Y+R6YCB5Li+5oql5Y2P6K6uXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMjc3MSwgdGhpcy5oYW5kbGUxMjc3MSkgICAgIC8vLS0g6I635Y+W5Li+5oql5Y2P6K6u5L+h5oGvXG5cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDEwOTA1LCB0aGlzLmhhbmRsZTEwOTA1KSAgICAgLy8tLSDkuJbnlYznrYnnuqdcblxuICAgICAgICAvL+aIkOmVv+S5i+i3r1xuICAgICAgICAvLyB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjU4MzAsIHRoaXMuaGFuZGxlMjU4MzApOyAgLy/mn6XnnIvmiJDplb/kuYvot69cbiAgICAgICAgLy8gdGhpcy5SZWdpc3RlclByb3RvY2FsKDI1ODMxLCB0aGlzLmhhbmRsZTI1ODMxKTsgIC8v5oiQ6ZW/5LmL6Lev5YiG5LqrXG4gICAgICAgIC8vIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNTgzMiwgdGhpcy5oYW5kbGUyNTgzMik7ICAvL+afpeeci+aIkOmVv+S5i+i3r+WIhuS6q1xuICAgIH0sXG5cbiAgICBzZXRSZWNvbm5lY3Q6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgdGhpcy5pc19yZV9jb25uZWN0ID0gc3RhdHVzXG4gICAgfSxcblxuICAgIC8v5Yik5pat5Yir5Lq6c3J2X2lk5piv5LiN5piv5LiO6Ieq5bex5piv5LiN5piv5ZCM5pyNXG4gICAgaXNUaGVTYW1lU3ZyOiBmdW5jdGlvbiAoc3J2X2lkKSB7XG4gICAgICAgIHZhciBpc19zYW1lID0gdGhpcy5tb2RlbC5pc1RoZVNhbWUoc3J2X2lkKTtcbiAgICAgICAgaWYgKHNydl9pZCAmJiBpc19zYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6KeS6Imy5Z+65pys5L+h5oGvXG4gICAgb24xMDMwMTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgY2MubG9nKFwi6KeS6Imy5Z+65pys5L+h5oGvXCIpO1xuICAgICAgICBjYy5sb2coZGF0YSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmluaXRfcm9sZSkge1xuICAgICAgICAgICAgdGhpcy5pbml0X3JvbGUgPSB0cnVlO1xuICAgICAgICAgICAgLy/lhYjlrp7kvovljJZcbiAgICAgICAgICAgIHRoaXMubW9kZWwuaW5pdFJvbGVCYXNlRGF0YShkYXRhKTtcbiAgICAgICAgICAgIC8vIOi/memHjOS8muacieW+iOWkmuS/oeaBr+mcgOimgeivt+axglxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0T3BlblNydkRheSgpOyAgICAgICAvLyDlvIDmnI3lpKnmlbBcbiAgICAgICAgICAgIGlmKFBMQVRGT1JNX1RZUFIgPT0gXCJTSF9TREtcIil7XG4gICAgICAgICAgICAgICAgU0RLLnJvbGVVcExldmVsKHRoaXMuZ2V0Um9sZVZvKCkubGV2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxldiA8PSA1KSB7XG4gICAgICAgICAgICAgICAgZ2FtZS5hZGRHdWlkZVJlcygpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnNleCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGdhbWUuYWRkUmVuYW1lUmVzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2FtZS5hZGRDaGFwdGVyUmVzKGRhdGEuY2hhcHRlcl9pZCk7XG4gICAgICAgIFxuICAgICAgICAgICAgaWYgKGRhdGEubGV2IDwgMTApIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuaGlkZV9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIFN5c0NvbnRyb2xsZXIgPSByZXF1aXJlKFwic3lzX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgIGdhbWUucHJlbG9hZFJlcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5tb2RlbC5pbml0Um9sZUJhc2VEYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgIFN5c0NvbnRyb2xsZXIucmVxdWVzdExvZ2luUHJvdG9jYWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1haW5VaUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIE1haW5VaUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuTWFpblVJKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBNYWluU2NlbmVDb250cm9sbGVyID0gcmVxdWlyZShcIm1haW5zY2VuZV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICBNYWluU2NlbmVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZW50ZXJNYWluU2NlbmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEV2ZW50SWQuRVZUX1JPTEVfQ1JFQVRFX1NVQ0NFU1MpO1xuXG4gICAgICAgICAgICAvLyAtLSBzZGvnrYnnuqforqHnrpdcbiAgICAgICAgICAgIGlmIChJU19TVUJNSVQpIHtcbiAgICAgICAgICAgICAgICBTREsuc2RrU3VibWl0VXNlckRhdGEoMylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdhbWUuaW5pdE1zZ1ZpZXcoKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5pbml0Um9sZUJhc2VEYXRhKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIOaWree6v+mHjei/nuaKm+WHuuS6i+S7tlxuICAgICAgICBpZiAodGhpcy5pc19yZV9jb25uZWN0KSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEV2ZW50SWQuRVZUX1JFX0xJTktfR0FNRSlcbiAgICAgICAgICAgIHRoaXMuaXNfcmVfY29ubmVjdCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6KeS6Imy6LWE5Lqn5L+h5oGvXG4gICAgb24xMDMwMjogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5pbml0Um9sZUFzc2V0c0RhdGEoZGF0YSk7XG4gICAgfSxcblxuICAgIC8v5p+l55yL6KeS6Imy5L+h5oGvXG4gICAgcmVxdWVzdFJvbGVJbmZvOiBmdW5jdGlvbiAocmlkLCBzcnZfaWQpIHtcbiAgICAgICAgaWYgKHJpZCA9PSAwIHx8ICFzcnZfaWQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLnJpZCA9IHJpZDtcbiAgICAgICAgcHJvdG9jYWwuc3J2X2lkID0gc3J2X2lkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMDMxNSwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvL+afpeeci+inkuiJsuS/oeaBr1xuICAgIG9uMTAzMTU6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoUm9sZUV2ZW50LkRJU1BBVENIX1BMQVlFUl9WT19FVkVOVCwgZGF0YSk7XG4gICAgfSxcblxuICAgIC8vIOiGnOaLnFxuICAgIHNlbmRlcjEwMzE2OiBmdW5jdGlvbiAocmlkLCBzcnZfaWQsIGluZGV4LCB0eXBlKSB7XG4gICAgICAgIGlmICghcmlkKSByZXR1cm47XG4gICAgICAgIGluZGV4ID0gaW5kZXggfHwgMDtcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgMDtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge31cbiAgICAgICAgcHJvdG9jYWwudHlwZSA9IHR5cGU7XG4gICAgICAgIHByb3RvY2FsLnJpZCA9IHJpZDtcbiAgICAgICAgcHJvdG9jYWwuc3J2X2lkID0gc3J2X2lkO1xuICAgICAgICBwcm90b2NhbC5pZHggPSBpbmRleDtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTAzMTYsIHByb3RvY2FsKVxuICAgIH0sXG5cbiAgICBvbjEwMzE2OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFJvbGVFdmVudC5Xb3JzaGlwT3RoZXJSb2xlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmm7TmlrDliIfno4vnirbmgIFcbiAgICBzZW5kMTAzMTg6IGZ1bmN0aW9uIChhdXRvX3BrKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDEwMzE4LCB7IGF1dG9fcGs6IGF1dG9fcGsgfSk7XG4gICAgfSxcblxuICAgIC8vIOabtOaWsOWIh+eji+eKtuaAgee7k+aenFxuICAgIG9uMTAzMTg6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICBpZiAoZGF0YS5jb2RlID09IDEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0Um9sZUF0dHJpYnV0ZShcImF1dG9fcGtcIiwgZGF0YS5hdXRvX3BrKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDor7fmsYLlpLTlg4/liJfooajkv6Hmga9cbiAgICBzZW5kMTAzMjU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTAzMjUsIHt9KTtcbiAgICB9LFxuXG4gICAgb24xMDMyNTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRSb2xlQXR0cmlidXRlKFwiZmFjZV9saXN0XCIsIGRhdGEuZmFjZV9saXN0KTtcbiAgICB9LFxuXG4gICAgLy8g5aS05YOP5Y+Y5pu0XG4gICAgc2VuZDEwMzI3OiBmdW5jdGlvbiAoZmFjZV9pZCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMDMyNywgeyBmYWNlX2lkOiBmYWNlX2lkIH0pO1xuICAgIH0sXG5cbiAgICBvbjEwMzI3OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldFJvbGVBdHRyaWJ1dGUoXCJmYWNlX2lkXCIsIGRhdGEuZmFjZV9pZCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6YCa55So5o+Q56S65L+h5oGvXG4gICAgb24xMjc0MTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgLy8gbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgfSxcblxuICAgIC8vIOmBk+WFt+S4jei2s+mAmueUqOaPkOekulxuICAgIG9uMTI3NDU6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBpdGVtX2NvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoZGF0YS5iaWQpO1xuICAgICAgICBpZiAoaXRlbV9jb25maWcpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmJpZCA9PSBDb25maWcuaXRlbV9kYXRhLmRhdGFfYXNzZXRzX2xhYmVsMmlkLmdvbGQgfHwgZGF0YS5iaWQgPT0gQ29uZmlnLml0ZW1fZGF0YS5kYXRhX2Fzc2V0c19sYWJlbDJpZC5nb2xkKSB7XG4gICAgICAgICAgICAgICAgaWYgKElTX1NIT1dfQ0hBUkdFID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UoVXRpbHMuVEkxOE4oXCLpkrvnn7PkuI3otrNcIikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKFwidmlwX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5vcGVuVmlwTWFpbldpbmRvdyh0cnVlLCBWSVBUQUJDT05TVC5DSEFSR0UpO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oJyVz5LiN6Laz77yM5piv5ZCm5YmN5b6A5YWF5YC8JyksIGl0ZW1fY29uZmlnLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgQ29tbW9uQWxlcnQgPSByZXF1aXJlKFwiY29tbW9uYWxlcnRcIik7XG4gICAgICAgICAgICAgICAgICAgIENvbW1vbkFsZXJ0LnNob3coc3RyLCBVdGlscy5USTE4Tign56Gu5a6aJyksIGZ1biwgVXRpbHMuVEkxOE4oJ+WPlua2iCcpLCBudWxsLCBDb21tb25BbGVydC50eXBlLnJpY2gsIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5iaWQgPT0gQ29uZmlnLml0ZW1fZGF0YS5kYXRhX2Fzc2V0c19sYWJlbDJpZC5lbmVyZ3kpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi5oOF5oql5LiN6LazXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoZGF0YS5iaWQpO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEJhY2twYWNrQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYWNrcGFja19jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICBCYWNrcGFja0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuVGlwc1NvdXJjZSh0cnVlLCBjb25maWcuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBvbjEwOTk0OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YS50eXBlID09IDYgfHwgZGF0YS50eXBlID09IDE4KSB7XG4gICAgICAgICAgICByZXF1aXJlKFwibWFpbnNjZW5lX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluQ2l0eVRpbWVUeXBlKGRhdGEudHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdE9wZW5TcnZEYXkoKTtcbiAgICAgICAgICAgIC8vIHJlcXVpcmUoXCJwcmltdXNfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLnNlbmRlcjIwNzA2KCkgLy/mmJ/msrPnpZ7mrr/or7fmsYLnuqLngrlcbiAgICAgICAgICAgIHJlcXVpcmUoXCJhY3Rpb25fY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLnJlcXVlc3RBY3Rpb25SZWRTdGF0dXMoKSAvL+mDqOWIhua0u+WKqOivt+axgue6oueCuVxuICAgICAgICAgICAgcmVxdWlyZShcInN0YXJ0b3dlcl9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkuc2VuZGVyMTEzMjAoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmlLnlkI1cbiAgICBjaGFuZ2VSb2xlTmFtZTogZnVuY3Rpb24gKG5hbWUsIHNleCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMDM0MywgeyBuYW1lOiBuYW1lLCBzZXg6IHNleCB9KTtcbiAgICB9LFxuXG4gICAgLy8g5pS55ZCN57uT5p6cXG4gICAgb24xMDM0MzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRSb2xlQXR0cmlidXRlKFwibmFtZVwiLCBkYXRhLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRSb2xlQXR0cmlidXRlKFwic2V4XCIsIGRhdGEuc2V4KTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0Um9sZUF0dHJpYnV0ZShcImlzX2ZpcnN0X3JlbmFtZVwiLCAwKTtcbiAgICAgICAgICAgIHRoaXMub3BlblJvbGVTZXROYW1lVmlldyhmYWxzZSlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDlvaLosaHkv6Hmga/or7fmsYJcbiAgICBzZW5kMTAzNDU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTAzNDUsIHt9KTtcbiAgICB9LFxuXG4gICAgb24xMDM0NTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShSb2xlRXZlbnQuR2V0TW9kZWxMaXN0LCBkYXRhKTtcbiAgICB9LFxuXG4gICAgLy8g5b2i6LGh5L2/55SoXG4gICAgc2VuZDEwMzQ2OiBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTAzNDYsIHsgaWQ6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBvbjEwMzQ2OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFJvbGVFdmVudC5VcGRhdGVNb2RlbCwgZGF0YS5pZCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5b2i6LGh5r+A5rS7XG4gICAgc2VuZDEwMzQ3OiBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTAzNDcsIHsgaWQ6IGlkIH0pXG4gICAgfSxcblxuICAgIG9uMTAzNDc6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICBpZiAoZGF0YS5jb2RlID09IDEpIHtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoUm9sZUV2ZW50LkFjdGl2ZU1vZGVsLCBkYXRhLmlkKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDlqpLkvZPljaHpooblj5ZcbiAgICBzZW5kZXIxMDk0NTogZnVuY3Rpb24gKGNhcmRfaWQpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTA5NDUsIHsgY2FyZF9pZDogY2FyZF9pZCB9KTtcbiAgICB9LFxuXG4gICAgb24xMDk0NTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgfSxcblxuICAgIC8vIOWktOWDj+ahhuiOt+WPllxuICAgIHNlbmQyMTUwMDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMTUwMCk7XG4gICAgfSxcblxuICAgIG9uMjE1MDA6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoUm9sZUV2ZW50LkdldEZhY2VMaXN0LCBkYXRhKTtcbiAgICB9LFxuXG4gICAgLy8g5L2/55So5aS05YOP5qGGXG4gICAgc2VuZDIxNTAxOiBmdW5jdGlvbiAoYmFzZV9pZCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMTUwMSwgeyBiYXNlX2lkOiBiYXNlX2lkIH0pO1xuICAgIH0sXG5cbiAgICBvbjIxNTAxOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgIH0sXG5cbiAgICAvLyDmm7TmlrDlpLTlg4/moYYgXG4gICAgb24yMTUwMjogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShSb2xlRXZlbnQuR2V0RmFjZUxpc3QsIGRhdGEpO1xuICAgIH0sXG5cbiAgICAvLyDmv4DmtLvlpLTlg4/moYYgXG4gICAgc2VuZDIxNTAzOiBmdW5jdGlvbiAoYmFzZV9pZCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMTUwMywgeyBiYXNlX2lkIH0pO1xuICAgIH0sXG5cbiAgICBvbjIxNTAzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFJvbGVFdmVudC5HZXRGYWNlTGlzdCwgZGF0YSk7XG4gICAgfSxcblxuICAgIC8vIOensOWPt+WIl+ihqOS/oeaBr1xuICAgIHNlbmQyMzMwMDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMzMwMCwge30pO1xuICAgIH0sXG5cbiAgICBvbjIzMzAwOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB0aGlzLm1vZGVsLnNldFJvbGVBdHRyaWJ1dGUoXCJ0aXRsZV9pZFwiLCBkYXRhLmJhc2VfaWQpO1xuICAgICAgICB0aGlzLm1vZGVsLnNldFJvbGVBdHRyaWJ1dGUoXCJ0aXRsZV9saXN0XCIsIGRhdGEuaG9ub3IpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFJvbGVFdmVudC5HZXRUaXRsZUxpc3QsIGRhdGEpO1xuICAgIH0sXG5cbiAgICAvLyDkvb/nlKjnp7Dlj7dcbiAgICBzZW5kMjMzMDE6IGZ1bmN0aW9uIChiYXNlX2lkKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIzMzAxLCB7IGJhc2VfaWQ6IGJhc2VfaWQgfSk7XG4gICAgfSxcblxuICAgIG9uMjMzMDE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0Um9sZUF0dHJpYnV0ZShcInRpdGxlX2lkXCIsIGRhdGEuYmFzZV9pZCk7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoUm9sZUV2ZW50LlVzZVRpdGxlLCBkYXRhLmJhc2VfaWQpO1xuICAgIH0sXG5cbiAgICAvLyDmm7TmlrDnp7Dlj7dcbiAgICBvbjIzMzAyOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB0aGlzLm1vZGVsLnNldFJvbGVBdHRyaWJ1dGUoXCJ0aXRsZV9saXN0XCIsIGRhdGEuaG9ub3IpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFJvbGVFdmVudC5VcGRhdGVUaXRsZUxpc3QsIGRhdGEpO1xuICAgIH0sXG5cbiAgICAvLyDmv4DmtLvnp7Dlj7cgXG4gICAgc2VuZDIzMzAzOiBmdW5jdGlvbiAoYmFzZV9pZCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMzMwMywgeyBiYXNlX2lkOiBiYXNlX2lkIH0pO1xuICAgIH0sXG5cbiAgICBvbjIzMzAzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB0aGlzLm1vZGVsLnNldFJvbGVBdHRyaWJ1dGUoXCJ0aXRsZV9saXN0XCIsIGRhdGEuaG9ub3IpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFJvbGVFdmVudC5VcGRhdGVUaXRsZUxpc3QsIGRhdGEpO1xuICAgIH0sXG5cbiAgICAvLyDmiZPlvIDop5LoibLorr7nva7pnaLmnb9cbiAgICBvcGVuUm9sZUluZm9WaWV3OiBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJvbGVfaW5mb192aWV3KSB7XG4gICAgICAgICAgICAgICAgdmFyIFJvbGVTZXRXaW5kb3cgPSByZXF1aXJlKFwicm9sZV9zZXRfd2luZG93XCIpO1xuICAgICAgICAgICAgICAgIHRoaXMucm9sZV9pbmZvX3ZpZXcgPSBuZXcgUm9sZVNldFdpbmRvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb2xlX2luZm9fdmlldy5vcGVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb2xlX2luZm9fdmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMucm9sZV9pbmZvX3ZpZXcuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvbGVfaW5mb192aWV3ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmiZPlvIDmm7TmlLnoo4XppbDnlYzpnaJcbiAgICBvcGVuUm9sZURlY29yYXRlVmlldzogZnVuY3Rpb24gKHN0YXR1cywgaW5kZXgsIHNldHRpbmcpIHtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJvbGVfZGVjb3JhdGVfdmlldykge1xuICAgICAgICAgICAgICAgIHZhciBSb2xlRGVjb3JhdGVXaW5kb3cgPSByZXF1aXJlKFwicm9sZV9kZWNvcmF0ZV93aW5kb3dcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX2RlY29yYXRlX3ZpZXcgPSBuZXcgUm9sZURlY29yYXRlV2luZG93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvbGVfZGVjb3JhdGVfdmlldy5vcGVuKGluZGV4LCBzZXR0aW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvbGVfZGVjb3JhdGVfdmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMucm9sZV9kZWNvcmF0ZV92aWV3LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX2RlY29yYXRlX3ZpZXcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5Yik5pat5LiA5Liq5Lq65piv5ZCm5piv6Ieq5bexXG4gICAgY2hlY2tJc1NlbGY6IGZ1bmN0aW9uIChzcnZfaWQsIHJpZCkge1xuICAgICAgICB2YXIgcm9sZV92byA9IHRoaXMuZ2V0Um9sZVZvKCk7XG4gICAgICAgIGlmIChyb2xlX3ZvID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIHJvbGVfdm8uc3J2X2lkID09IHNydl9pZCAmJiByb2xlX3ZvLnJpZCA9PSByaWRcbiAgICB9LFxuXG4gICAgLy8g5b2T5YmN54m55p2D5oOF5Ya1XG4gICAgb24yNDUwMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRQcml2aWxlZ2VEYXRhKGRhdGEubGlzdClcbiAgICB9LFxuXG4gICAgLy8g6K+35rGC5byA5pyN5aSp5pWwXG4gICAgcmVxdWVzdE9wZW5TcnZEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTA5MDYsIHt9KTtcbiAgICB9LFxuXG4gICAgLy8g5byA5pyN5aSp5pWw6L+U5ZueXG4gICAgb24xMDkwNjogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRPcGVuU3J2RGF5KGRhdGEub3Blbl9kYXkpO1xuICAgIH0sXG5cbiAgICAvLyDlvLrliLbmlLnlkI1cbiAgICBvbjEwMzQyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChnYW1lLmZpbmlzaF9sb2FkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Sb2xlU2V0TmFtZVZpZXcodHJ1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmVlZF9zZXRfbmFtZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g54K56LWe5pWw6YePXG4gICAgb24xMDMxNzogZnVuY3Rpb24gKCkge1xuXG4gICAgfSxcbiAgICAvLyAtLeaJk+W8gOiuvue9ruWQjeensOeVjOmdolxuICAgIG9wZW5Sb2xlU2V0TmFtZVZpZXcoc3RhdHVzKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHN0YXR1cyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5yb2xlX3NldG5hbWVfbmV3ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgUm9sZVNldE5hbWVWaWV3ID0gcmVxdWlyZShcInJvbGVfc2V0bmFtZV93aW5kb3dcIilcbiAgICAgICAgICAgICAgICBzZWxmLnJvbGVfc2V0bmFtZV9uZXcgPSBuZXcgUm9sZVNldE5hbWVWaWV3KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucm9sZV9zZXRuYW1lX25ldy5vcGVuKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnJvbGVfc2V0bmFtZV9uZXcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNlbGYucm9sZV9zZXRuYW1lX25ldy5jbG9zZSgpXG4gICAgICAgICAgICAgICAgc2VsZi5yb2xlX3NldG5hbWVfbmV3ID0gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBnZXRSYW5kb21OYW1lKHNleCkge1xuICAgICAgICBzZXggPSBzZXggfHwgMVxuICAgICAgICBsZXQgcmFuZG9tTmFtZSA9IFwiXCJcbiAgICAgICAgZm9yIChsZXQgaSBpbiBDb25maWcucmFuZG9tX25hbWVfZGF0YS5kYXRhX2xpc3QpIHtcbiAgICAgICAgICAgIGxldCBjb25maWcgPSBDb25maWcucmFuZG9tX25hbWVfZGF0YS5kYXRhX2xpc3RbaV0gfHwge31cbiAgICAgICAgICAgIC8vICAgICAtLSDlj5blh7rmiYDmnInnrKblkIjmgKfliKvopoHmsYLnmoTlkI3np7BcbiAgICAgICAgICAgIGxldCB0ZW1wX2RhdGEgPSBbXVxuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjb25maWcubGVuZ3RoOyArK2spIHtcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGNvbmZpZ1trXVxuICAgICAgICAgICAgICAgIGlmICh2ICYmICh2LnNleCA9PSBzZXggfHwgdi5zZXggPT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhLnB1c2godilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmFuZG9tX2RhdGEgPSB0ZW1wX2RhdGFbfn4oTWF0aC5yYW5kb20oKSAqIHRlbXBfZGF0YS5sZW5ndGgpXSB8fCBbXVxuICAgICAgICAgICAgcmFuZG9tTmFtZSA9IHJhbmRvbU5hbWUgKyAocmFuZG9tX2RhdGEubmFtZSB8fCBcIlwiKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYW5kb21OYW1lXG4gICAgfSxcblxuICAgIC8vIC0tW1vmtLvliqjotYTkuqfmjqjpgIFdXSAtLeeZu+mZhueahOaXtuWAmeaOqOmAgVxuICAgIGhhbmRsZTEwMzUwKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5pbml0Um9sZUFjdGlvbkFzc2V0c0RhdGEoZGF0YS5ob2xpZGF5X2Fzc2V0cywgZmFsc2UpXG4gICAgfSxcbiAgICBoYW5kbGUxMDM1MShkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwuaW5pdFJvbGVBY3Rpb25Bc3NldHNEYXRhKGRhdGEuaG9saWRheV9hc3NldHMsIHRydWUpXG4gICAgfSxcblxuICAgIC8vIC0t5omT5byA5Li+5oql55WM6Z2iXG4gICAgb3BlblJvbGVSZXBvcnRlZFBhbmVsKHN0YXR1cywgcmlkLCBzcnZfaWQsIHBsYXlfbmFtZSkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgaWYgKHN0YXR1cyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5yb2xlX3JlcG9ydGVkX3BhbmVsID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgUm9sZVJlcG9ydGVkV2luZG93ID0gcmVxdWlyZShcInJvbGVfcmVwb3J0ZWRfd2luZG93XCIpXG4gICAgICAgICAgICAgICAgc2VsZi5yb2xlX3JlcG9ydGVkX3BhbmVsID0gbmV3IFJvbGVSZXBvcnRlZFdpbmRvdygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLnJvbGVfcmVwb3J0ZWRfcGFuZWwub3Blbih7IHJpZDogcmlkLCBzcnZfaWQ6IHNydl9pZCwgcGxheV9uYW1lOiBwbGF5X25hbWUgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnJvbGVfcmVwb3J0ZWRfcGFuZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNlbGYucm9sZV9yZXBvcnRlZF9wYW5lbC5jbG9zZSgpXG4gICAgICAgICAgICAgICAgc2VsZi5yb2xlX3JlcG9ydGVkX3BhbmVsID0gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLeS4vuaKpeWKn+iDveWNj+iuruWSjOaJk+W8gOaWueazlS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBzZW5kMTI3NzAocmlkLCBzcnZfaWQsIF90eXBlLCBtc2csIGhpc3RvcnkpIHtcbiAgICAgICAgbGV0IHByb3RvY2FsID0ge31cbiAgICAgICAgcHJvdG9jYWwucmlkID0gcmlkXG4gICAgICAgIHByb3RvY2FsLnNydl9pZCA9IHNydl9pZFxuICAgICAgICBwcm90b2NhbC50eXBlID0gX3R5cGUgfHwgMVxuICAgICAgICBwcm90b2NhbC5tc2cgPSBtc2cgfHwgXCJcIlxuICAgICAgICBwcm90b2NhbC5oaXN0b3J5ID0gaGlzdG9yeSB8fCBbXVxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMjc3MCwgcHJvdG9jYWwpXG4gICAgfSxcbiAgICBzZW5kMTI3NzEocmlkLCBzcnZfaWQpIHtcbiAgICAgICAgbGV0IHByb3RvY2FsID0ge31cbiAgICAgICAgcHJvdG9jYWwucmlkID0gcmlkXG4gICAgICAgIHByb3RvY2FsLnNydl9pZCA9IHNydl9pZFxuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMjc3MSwgcHJvdG9jYWwpXG4gICAgfSxcbiAgICBoYW5kbGUxMjc3MChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpXG4gICAgfSxcbiAgICBoYW5kbGUxMjc3MShkYXRhKSB7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoUm9sZUV2ZW50LlJPTEVfUkVQT1JURURfRVZFTlQsIGRhdGEpXG4gICAgfSxcblxuICAgIGNoZWNrUm9sZVNldE5hbWVWaWV3SXNPcGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJvbGVfc2V0bmFtZV9uZXcpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgb24xMDMwNjogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIHJvbGUgPSB0aGlzLmdldFJvbGVWbygpO1xuICAgICAgICByb2xlLnNldFBvd2VyKGRhdGEucG93ZXIpO1xuICAgICAgICByb2xlLnNldE1heFBvd2VyKGRhdGEubWF4X3Bvd2VyKTtcbiAgICB9LFxuXG5cbiAgICBnZXRBcGtEYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmFwa19kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcGtfZGF0YVxuICAgICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGUxMDkwNShkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0V29ybGRMZXYoZGF0YS53b3JsZF9sZXYpXG4gICAgfSxcblxuICAgIC8v5oiQ6ZW/5LmL6LevLS0tLS0tLS0tXG4gICAgc2VuZDI1ODMwOiBmdW5jdGlvbiAoc3RhcnQsIG51bSkge1xuICAgICAgICBsZXQgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgcHJvdG9jYWwubnVtID0gbnVtO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNTgzMCwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICBoYW5kbGUyNTgzMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgY2MubG9nKFwiMjU4MzBcIiwgZGF0YSk7XG4gICAgICAgIC8vbnVt562J5LqOMeaYr+iuoeeul+e6oueCueeUqOmAlFxuICAgICAgICBpZiAoZGF0YS5udW0gPT0gMSkge1xuICAgICAgICAgICAgLy8gZGF0YS5pc19yZWRwb2ludCA9IHRoaXMubW9kZWwuY2hlY2tHcm93dGhXYXlSZWRQb2ludChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLm1vZGVsLnNldEdyb3d0aFdheURhdGEoZGF0YSk7XG4gICAgfSxcblxuICAgIC8v5oiQ6ZW/5LmL6Lev5YiG5LqrXG4gICAgc2VuZDI1ODMxOiBmdW5jdGlvbiAoY2hhbm5lbCkge1xuICAgICAgICBsZXQgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwuY2hhbm5lbCA9IGNoYW5uZWw7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI1ODMxLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIGhhbmRsZTI1ODMxOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBjYy5sb2coXCIyNTgzMVwiLCBkYXRhKTtcbiAgICB9LFxuXG4gICAgLy/mn6XnnIvmiJDplb/kuYvot6/liIbkuqtcbiAgICBzZW5kMjU4MzI6IGZ1bmN0aW9uIChyaWQsIHNydl9pZCwgc3RhcnQsIG51bSkge1xuICAgICAgICBsZXQgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwucmlkID0gcmlkO1xuICAgICAgICBwcm90b2NhbC5zcnZfaWQgPSBzcnZfaWQ7XG4gICAgICAgIHByb3RvY2FsLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIHByb3RvY2FsLm51bSA9IG51bTtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjU4MzIsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMjU4MzI6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIGNjLmxvZyhcIjI1ODMyXCIsZGF0YSk7XG4gICAgfSxcblxuICAgIC8v6KeS6Imy5piv5ZCm56ys5LiA5qyh5Yib5bu6XG4gICAgaXNmaXJzdFJvbGU6ZnVuY3Rpb24oKXtcbiAgICAgICAgbGV0IHJvbGVfdm8gPSB0aGlzLmdldFJvbGVWbygpO1xuICAgICAgICBpZihyb2xlX3ZvICYmIHJvbGVfdm8uc2V4ID09IDIpIHJldHVybiB0cnVlXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSb2xlQ29udHJvbGxlcjsiXX0=