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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/action/view/action_common_Item.js';
                    var __require = nodeEnv ? function (request) {
                        return cc.require(request);
                    } : function (request) {
                        return __quick_compile_project__.require(request, __filename);
                    };
                    function __define (exports, require, module) {
                        if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, '9667dtEtadAro1E6zRz2+9f', 'action_common_Item');
// Scripts/mod/action/view/action_common_Item.js
 
"use strict";
 
var PathTool = require("pathtool");
 
var ActionController = require("action_controller");
 
var ActionConst = require("action_const");
 
var StrongerController = require("stronger_controller");
 
var CommonScrollView = require("common_scrollview");
 
var VipController = require("vip_controller");
 
var HeroController = require("hero_controller");
 
var HeroConst = require("hero_const");
 
var ActionCommonItem = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("welfare", "luxury_item");
    this.ctrl = ActionController.getInstance();
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {},
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    var self = this;
    var main_container = self.root_wnd.getChildByName("main_container");
    self.btn_goto = main_container.getChildByName("btn_goto");
    self.btn_goto_label = self.btn_goto.getChildByName("Text_7_0");
    self.btn_goto_label.getComponent(cc.Label).string = Utils.TI18N("前往");
    self.btn_goto.active = false;
    self.btn_get = main_container.getChildByName("btn_get");
    self.btn_get_label = self.btn_get.getChildByName("Text_7");
    self.btn_get_ui = main_container.getChildByName("btn_get").getComponent(cc.Button);
    self.btn_get.active = false;
    self.has_get = main_container.getChildByName("has_get");
    self.has_get.active = false;
    self.text_tesk = main_container.getChildByName("text_tesk");
    self.text_tesk.getComponent(cc.Label).string = "";
    self.goods_con = main_container.getChildByName("good_cons");
    var scroll_view_size = self.goods_con.getContentSize();
    var setting = {
      item_class: "backpack_item",
      //-- 单元类
      start_x: 3,
      //-- 第一个单元的X起点
      space_x: 5,
      //-- x方向的间隔
      start_y: 4,
      //-- 第一个单元的Y起点
      space_y: 4,
      //-- y方向的间隔
      item_width: 120 * 0.80,
      //-- 单元的尺寸width
      item_height: 120 * 0.80,
      //-- 单元的尺寸height
      row: 1,
      // -- 行数,作用于水平滚动类型
      col: 0,
      //-- 列数,作用于垂直滚动类型
      scale: 0.80 //-- 缩放
 
    };
    self.item_scrollview = new CommonScrollView();
    self.item_scrollview.createScroll(self.goods_con, cc.v2(0, 0), ScrollViewDir.horizontal, ScrollViewStartPos.top, scroll_view_size, setting); // self.item_scrollview:setSwallowTouches(false)
 
    self.title_desc = main_container.getChildByName("title_desc");
 
    if (this.data) {
      this.setData(this.data);
    }
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    var self = this;
    this.btn_goto.on('click', this.gotoSpecificView, this);
    this.btn_get.on('click', function () {
      Utils.playButtonSound(1);
 
      if (this.holiday_item_bid && this.data) {
        this.ctrl.cs16604(this.holiday_item_bid, this.data.aim);
      }
    }, this);
  },
  gotoSpecificView: function gotoSpecificView() {
    Utils.playButtonSound(1);
    var self = this; // --直接跳转到充值界面的
 
    if (self.holiday_item_bid && (self.holiday_item_bid == ActionConst.ActionRankCommonType.acc_luxury || self.holiday_item_bid == ActionConst.ActionRankCommonType.totle_charge || self.holiday_item_bid == ActionConst.ActionRankCommonType.limit_charge)) {
      VipController.getInstance().openVipMainWindow(true, VIPTABCONST.CHARGE);
    } else if (self.holiday_item_bid && self.holiday_item_bid == ActionConst.ActionRankCommonType.luckly_egg) {
      // --砸蛋的跳转是特殊的
      var id = ActionRankCommonType.smashegg;
      var tab_vo = this.ctrl.getActionSubTabVo(id);
 
      if (tab_vo) {
        if (this.ctrl.action_operate) {
          this.ctrl.action_operate.handleSelectedTab(this.ctrl.action_operate.tab_list[id]);
        }
      }
    } else if (self.holiday_item_bid && self.holiday_item_bid == ActionConst.ActionRankCommonType.hero_awake) {
      // --觉醒豪礼特殊处理
      var hero_vo = HeroController.getInstance().getModel().getTopLevHeroInfoByBid(self.cur_bid);
      var all_role_list = HeroController.getInstance().getModel().getAllHeroArray(); // --无指定英雄则前往限时召唤获取
 
      if (!hero_vo || !all_role_list || all_role_list.size == 0) {
        StrongerController.getInstance().clickCallBack(411);
      } else {
        HeroController.getInstance().openHeroMainInfoWindow(true, hero_vo, all_role_list.items, {
          show_model_type: HeroConst.BagTab.eBagHero
        });
      }
    } else {
      var num;
 
      if (self.holiday_item_bid == ActionConst.ActionRankCommonType.speed_fight || self.holiday_item_bid == ActionConst.ActionRankCommonType.speed_fight1) {
        num = 132;
      } else if (self.holiday_item_bid == ActionConst.ActionRankCommonType.voyage || self.holiday_item_bid == ActionConst.ActionRankCommonType.voyage1) {
        num = 126;
      } else if (self.holiday_item_bid == ActionConst.ActionRankCommonType.hero_expedit || self.holiday_item_bid == ActionConst.ActionRankCommonType.hero_expedit1) {
        num = 151;
      } else if (self.holiday_item_bid == ActionConst.ActionRankCommonType.epoint_gold || self.holiday_item_bid == ActionConst.ActionRankCommonType.epoint_gold1) {
        num = 123;
      } else if (self.holiday_item_bid == ActionConst.ActionRankCommonType.adventure) {
        num = 407;
      } else if (self.holiday_item_bid == ActionConst.ActionRankCommonType.updata_star) {
        num = 404;
      }
 
      if (num) {
        StrongerController.getInstance().clickCallBack(num);
      }
    }
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow(params) {},
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  setExtendData: function setExtendData(tab) {
    this.holiday_item_bid = tab.bid;
    this.is_activity_end = tab.time_end;
    this.finish = tab.finish;
  },
  setData: function setData(data) {
    if (!data) return;
    this.data = data;
    var self = this;
 
    if (this.root_wnd) {
      self.getButtonTeskProgress(data);
      self.title_desc.getComponent(cc.RichText).string = StringUtil.parse(data.aim_str);
 
      if (self.holiday_item_bid != ActionConst.ActionRankCommonType.longin_gift) {
        self.btn_goto.active = data.status == 0;
      } else {
        if (data.status == 0) {
          self.btn_get.active = true;
          self.btn_get_ui.interactable = false;
          self.btn_get_ui.enableAutoGrayEffect = true;
          self.btn_get_label.color = new cc.Color(255, 255, 255);
        } else {
          self.btn_get_ui.interactable = true;
          self.btn_get_ui.enableAutoGrayEffect = false;
          self.btn_get_label.color = new cc.Color(113, 40, 4);
        }
      } // self.btn_get.active = (data.status == 1)
      // self.btn_goto.active = (data.status == 0)
      // self.has_get.active = (data.status == 2)
 
 
      if (self.is_activity_end == true && data.status == 0) {
        self.btn_goto_label.getComponent(cc.Label).string = "已结束";
        self.btn_goto_label.color = new cc.Color(255, 255, 255);
        Utils.setGreyButton(this.btn_goto.getComponent(cc.Button), true);
      } // -- 物品列表
 
 
      var item_list = data.item_list;
      var list = [];
 
      for (var k = 0; k < item_list.length; ++k) {
        var v = item_list[k];
 
        if (v && v.bid) {
          list.push(v);
        }
      }
 
      self.item_scrollview.setData(list);
      self.item_scrollview.addEndCallBack(function () {
        self.item_scrollview.scroll_view_compend.enabled = false;
        var itemList = self.item_scrollview.getItemList();
 
        for (var _k = 0; _k < itemList.length; ++_k) {
          var _v = itemList[_k];
 
          _v.setDefaultTip(true, false);
        }
      }.bind(this));
    }
  },
  getButtonTeskProgress: function getButtonTeskProgress(data) {
    var self = this;
    var str = "";
 
    if (self.holiday_item_bid != ActionConst.ActionRankCommonType.longin_gift) {
      var totle_count, current_count;
      var totle_list = Utils.keyfind('aim_args_key', 4, data.aim_args) || null;
 
      if (totle_list) {
        totle_count = totle_list.aim_args_val || 0;
      }
 
      var current_list = Utils.keyfind('aim_args_key', 5, data.aim_args) || null;
 
      if (current_list) {
        current_count = current_list.aim_args_val || 0;
      }
 
      if (totle_count >= 0 && current_count >= 0) {
        str = "(" + current_count + "/" + totle_count + ")";
      } // --升星有礼、融合祝福、觉醒豪礼
 
 
      var count;
      var count_list = Utils.keyfind('aim_args_key', 6, data.aim_args) || null;
 
      if (count_list) {
        count = count_list.aim_args_val || 0;
      }
 
      if (count >= 0 && totle_count >= 0) {
        str = "(" + count + "/" + totle_count + ")";
 
        if (count >= totle_count && data.status == 0) {
          data.status = 2;
        }
      } // --觉醒豪礼所用
 
 
      var bid_list = Utils.keyfind('aim_args_key', 18, data.aim_args) || null;
 
      if (bid_list) {
        self.cur_bid = bid_list.aim_args_val || 0;
      } // --充值类型的
 
 
      if (self.holiday_item_bid == ActionConst.ActionRankCommonType.acc_luxury) {
        if (data.status == 0) {
          str = "(0/1)";
        } else {
          str = "(1/1)";
        }
      } else if (self.holiday_item_bid == ActionConst.ActionRankCommonType.totle_charge || self.holiday_item_bid == ActionConst.ActionRankCommonType.totle_consume || self.holiday_item_bid == ActionConst.ActionRankCommonType.limit_charge) {
        // --累充和累消的
        str = "(" + self.finish + "/" + data.aim + ")";
      }
    } else {
      str = "(" + self.finish + "/" + data.aim + ")";
    }
 
    self.text_tesk.getComponent(cc.Label).string = str;
    self.btn_get.active = data.status == 1;
    self.has_get.active = data.status == 2;
  },
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {
    if (this.item_scrollview) {
      this.item_scrollview.deleteMe();
      this.item_scrollview = null;
    }
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxhY3Rpb25cXHZpZXdcXGFjdGlvbl9jb21tb25fSXRlbS5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJBY3Rpb25Db250cm9sbGVyIiwiQWN0aW9uQ29uc3QiLCJTdHJvbmdlckNvbnRyb2xsZXIiLCJDb21tb25TY3JvbGxWaWV3IiwiVmlwQ29udHJvbGxlciIsIkhlcm9Db250cm9sbGVyIiwiSGVyb0NvbnN0IiwiQWN0aW9uQ29tbW9uSXRlbSIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJpbml0Q29uZmlnIiwiaW5pdFBhbmVsIiwic2VsZiIsIm1haW5fY29udGFpbmVyIiwicm9vdF93bmQiLCJnZXRDaGlsZEJ5TmFtZSIsImJ0bl9nb3RvIiwiYnRuX2dvdG9fbGFiZWwiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJhY3RpdmUiLCJidG5fZ2V0IiwiYnRuX2dldF9sYWJlbCIsImJ0bl9nZXRfdWkiLCJCdXR0b24iLCJoYXNfZ2V0IiwidGV4dF90ZXNrIiwiZ29vZHNfY29uIiwic2Nyb2xsX3ZpZXdfc2l6ZSIsImdldENvbnRlbnRTaXplIiwic2V0dGluZyIsIml0ZW1fY2xhc3MiLCJzdGFydF94Iiwic3BhY2VfeCIsInN0YXJ0X3kiLCJzcGFjZV95IiwiaXRlbV93aWR0aCIsIml0ZW1faGVpZ2h0Iiwicm93IiwiY29sIiwic2NhbGUiLCJpdGVtX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJob3Jpem9udGFsIiwiU2Nyb2xsVmlld1N0YXJ0UG9zIiwidG9wIiwidGl0bGVfZGVzYyIsImRhdGEiLCJzZXREYXRhIiwicmVnaXN0ZXJFdmVudCIsIm9uIiwiZ290b1NwZWNpZmljVmlldyIsInBsYXlCdXR0b25Tb3VuZCIsImhvbGlkYXlfaXRlbV9iaWQiLCJjczE2NjA0IiwiYWltIiwiQWN0aW9uUmFua0NvbW1vblR5cGUiLCJhY2NfbHV4dXJ5IiwidG90bGVfY2hhcmdlIiwibGltaXRfY2hhcmdlIiwib3BlblZpcE1haW5XaW5kb3ciLCJWSVBUQUJDT05TVCIsIkNIQVJHRSIsImx1Y2tseV9lZ2ciLCJpZCIsInNtYXNoZWdnIiwidGFiX3ZvIiwiZ2V0QWN0aW9uU3ViVGFiVm8iLCJhY3Rpb25fb3BlcmF0ZSIsImhhbmRsZVNlbGVjdGVkVGFiIiwidGFiX2xpc3QiLCJoZXJvX2F3YWtlIiwiaGVyb192byIsImdldE1vZGVsIiwiZ2V0VG9wTGV2SGVyb0luZm9CeUJpZCIsImN1cl9iaWQiLCJhbGxfcm9sZV9saXN0IiwiZ2V0QWxsSGVyb0FycmF5Iiwic2l6ZSIsImNsaWNrQ2FsbEJhY2siLCJvcGVuSGVyb01haW5JbmZvV2luZG93IiwiaXRlbXMiLCJzaG93X21vZGVsX3R5cGUiLCJCYWdUYWIiLCJlQmFnSGVybyIsIm51bSIsInNwZWVkX2ZpZ2h0Iiwic3BlZWRfZmlnaHQxIiwidm95YWdlIiwidm95YWdlMSIsImhlcm9fZXhwZWRpdCIsImhlcm9fZXhwZWRpdDEiLCJlcG9pbnRfZ29sZCIsImVwb2ludF9nb2xkMSIsImFkdmVudHVyZSIsInVwZGF0YV9zdGFyIiwib25TaG93IiwicGFyYW1zIiwib25IaWRlIiwic2V0RXh0ZW5kRGF0YSIsInRhYiIsImJpZCIsImlzX2FjdGl2aXR5X2VuZCIsInRpbWVfZW5kIiwiZmluaXNoIiwiZ2V0QnV0dG9uVGVza1Byb2dyZXNzIiwiUmljaFRleHQiLCJTdHJpbmdVdGlsIiwicGFyc2UiLCJhaW1fc3RyIiwibG9uZ2luX2dpZnQiLCJzdGF0dXMiLCJpbnRlcmFjdGFibGUiLCJlbmFibGVBdXRvR3JheUVmZmVjdCIsImNvbG9yIiwiQ29sb3IiLCJzZXRHcmV5QnV0dG9uIiwiaXRlbV9saXN0IiwibGlzdCIsImsiLCJsZW5ndGgiLCJ2IiwicHVzaCIsImFkZEVuZENhbGxCYWNrIiwic2Nyb2xsX3ZpZXdfY29tcGVuZCIsImVuYWJsZWQiLCJpdGVtTGlzdCIsImdldEl0ZW1MaXN0Iiwic2V0RGVmYXVsdFRpcCIsImJpbmQiLCJzdHIiLCJ0b3RsZV9jb3VudCIsImN1cnJlbnRfY291bnQiLCJ0b3RsZV9saXN0Iiwia2V5ZmluZCIsImFpbV9hcmdzIiwiYWltX2FyZ3NfdmFsIiwiY3VycmVudF9saXN0IiwiY291bnQiLCJjb3VudF9saXN0IiwiYmlkX2xpc3QiLCJ0b3RsZV9jb25zdW1lIiwib25EZWxldGUiLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGdCQUFnQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUUsV0FBVyxHQUFHRixPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxJQUFJRyxrQkFBa0IsR0FBR0gsT0FBTyxDQUFDLHFCQUFELENBQWhDOztBQUNBLElBQUlJLGdCQUFnQixHQUFHSixPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUssYUFBYSxHQUFHTCxPQUFPLENBQUMsZ0JBQUQsQ0FBM0I7O0FBQ0EsSUFBSU0sY0FBYyxHQUFHTixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSU8sU0FBUyxHQUFRUCxPQUFPLENBQUMsWUFBRCxDQUE1Qjs7QUFFQSxJQUFJUSxnQkFBZ0IsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDNUIsYUFBU0MsU0FEbUI7QUFFNUJDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JkLFFBQVEsQ0FBQ2UsYUFBVCxDQUF1QixTQUF2QixFQUFrQyxhQUFsQyxDQUFsQjtBQUNBLFNBQUtDLElBQUwsR0FBWWQsZ0JBQWdCLENBQUNlLFdBQWpCLEVBQVo7QUFDSCxHQUwyQjtBQU81QjtBQUNBQyxFQUFBQSxVQUFVLEVBQUMsc0JBQVUs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InNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xyXG52YXIgQWN0aW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpb25fY29udHJvbGxlclwiKVxyXG52YXIgQWN0aW9uQ29uc3QgPSByZXF1aXJlKFwiYWN0aW9uX2NvbnN0XCIpO1xyXG52YXIgU3Ryb25nZXJDb250cm9sbGVyID0gcmVxdWlyZShcInN0cm9uZ2VyX2NvbnRyb2xsZXJcIilcclxudmFyIENvbW1vblNjcm9sbFZpZXcgPSByZXF1aXJlKFwiY29tbW9uX3Njcm9sbHZpZXdcIik7XHJcbnZhciBWaXBDb250cm9sbGVyID0gcmVxdWlyZShcInZpcF9jb250cm9sbGVyXCIpXHJcbnZhciBIZXJvQ29udHJvbGxlciA9IHJlcXVpcmUoXCJoZXJvX2NvbnRyb2xsZXJcIilcclxudmFyIEhlcm9Db25zdCAgICAgID0gcmVxdWlyZShcImhlcm9fY29uc3RcIik7XHJcblxyXG52YXIgQWN0aW9uQ29tbW9uSXRlbSA9IGNjLkNsYXNzKHtcclxuICAgIGV4dGVuZHM6IEJhc2VQYW5lbCxcclxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwid2VsZmFyZVwiLCBcImx1eHVyeV9pdGVtXCIpO1xyXG4gICAgICAgIHRoaXMuY3RybCA9IEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyDlj6/ku6XliJ3lp4vljJblo7DmmI7kuIDkupvlj5jph4/nmoRcclxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcclxuICAgIGluaXRQYW5lbDpmdW5jdGlvbigpe1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBsZXQgbWFpbl9jb250YWluZXIgPSBzZWxmLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIilcclxuICAgICAgICBzZWxmLmJ0bl9nb3RvID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fZ290b1wiKVxyXG4gICAgICAgIHNlbGYuYnRuX2dvdG9fbGFiZWwgPSBzZWxmLmJ0bl9nb3RvLmdldENoaWxkQnlOYW1lKFwiVGV4dF83XzBcIilcclxuICAgICAgICBzZWxmLmJ0bl9nb3RvX2xhYmVsLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLliY3lvoBcIilcclxuICAgICAgICBzZWxmLmJ0bl9nb3RvLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHNlbGYuYnRuX2dldCA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYnRuX2dldFwiKVxyXG4gICAgICAgIHNlbGYuYnRuX2dldF9sYWJlbCA9IHNlbGYuYnRuX2dldC5nZXRDaGlsZEJ5TmFtZShcIlRleHRfN1wiKVxyXG4gICAgICAgIHNlbGYuYnRuX2dldF91aSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYnRuX2dldFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKVxyXG4gICAgICAgIHNlbGYuYnRuX2dldC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBzZWxmLmhhc19nZXQgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImhhc19nZXRcIilcclxuICAgICAgICBzZWxmLmhhc19nZXQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgc2VsZi50ZXh0X3Rlc2sgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRleHRfdGVza1wiKVxyXG4gICAgICAgIHNlbGYudGV4dF90ZXNrLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAgICAgc2VsZi5nb29kc19jb24gPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImdvb2RfY29uc1wiKVxyXG4gICAgICAgIGxldCBzY3JvbGxfdmlld19zaXplID0gc2VsZi5nb29kc19jb24uZ2V0Q29udGVudFNpemUoKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0ge1xyXG4gICAgICAgICAgICBpdGVtX2NsYXNzIDogXCJiYWNrcGFja19pdGVtXCIsICAgICAgLy8tLSDljZXlhYPnsbtcclxuICAgICAgICAgICAgc3RhcnRfeCA6IDMsICAgICAgICAgICAgICAgICAgLy8tLSDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XHJcbiAgICAgICAgICAgIHNwYWNlX3ggOiA1LCAgICAgICAgICAgICAgICAgICAgLy8tLSB45pa55ZCR55qE6Ze06ZqUXHJcbiAgICAgICAgICAgIHN0YXJ0X3kgOiA0LCAgICAgICAgICAgICAgICAgICAgLy8tLSDnrKzkuIDkuKrljZXlhYPnmoRZ6LW354K5XHJcbiAgICAgICAgICAgIHNwYWNlX3kgOiA0LCAgICAgICAgICAgICAgICAgICAvLy0tIHnmlrnlkJHnmoTpl7TpmpRcclxuICAgICAgICAgICAgaXRlbV93aWR0aCA6IDEyMCowLjgwLCAgICAgICAgICAgICAgIC8vLS0g5Y2V5YWD55qE5bC65a+4d2lkdGhcclxuICAgICAgICAgICAgaXRlbV9oZWlnaHQgOiAxMjAqMC44MCwgICAgICAgICAgICAgIC8vLS0g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XHJcbiAgICAgICAgICAgIHJvdyA6IDEsICAgICAgICAgICAgICAgICAgICAgICAvLyAtLSDooYzmlbDvvIzkvZznlKjkuo7msLTlubPmu5rliqjnsbvlnotcclxuICAgICAgICAgICAgY29sIDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgLy8tLSDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcclxuICAgICAgICAgICAgc2NhbGUgOiAwLjgwICAgICAgICAgICAgICAgICAgICAgLy8tLSDnvKnmlL5cclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZi5pdGVtX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpO1xyXG4gICAgICAgIHNlbGYuaXRlbV9zY3JvbGx2aWV3IC5jcmVhdGVTY3JvbGwoc2VsZi5nb29kc19jb24sIGNjLnYyKDAsMCkgLCBTY3JvbGxWaWV3RGlyLmhvcml6b250YWwsIFNjcm9sbFZpZXdTdGFydFBvcy50b3AsIHNjcm9sbF92aWV3X3NpemUsIHNldHRpbmcpXHJcbiAgICAgICAgLy8gc2VsZi5pdGVtX3Njcm9sbHZpZXc6c2V0U3dhbGxvd1RvdWNoZXMoZmFsc2UpXHJcbiAgICAgICAgc2VsZi50aXRsZV9kZXNjID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXRsZV9kZXNjXCIpXHJcbiAgICAgICAgaWYodGhpcy5kYXRhKXtcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKHRoaXMuZGF0YSlcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcclxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuYnRuX2dvdG8ub24oJ2NsaWNrJyx0aGlzLmdvdG9TcGVjaWZpY1ZpZXcsdGhpcylcclxuICAgICAgICB0aGlzLmJ0bl9nZXQub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcclxuICAgICAgICAgICAgaWYodGhpcy5ob2xpZGF5X2l0ZW1fYmlkICYmIHRoaXMuZGF0YSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwuY3MxNjYwNCh0aGlzLmhvbGlkYXlfaXRlbV9iaWQsdGhpcy5kYXRhLmFpbSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sdGhpcylcclxuICAgIH0sXHJcbiAgICBnb3RvU3BlY2lmaWNWaWV3KCl7XHJcbiAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDEpXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIC0t55u05o6l6Lez6L2s5Yiw5YWF5YC855WM6Z2i55qEXHJcbiAgICAgICAgaWYoc2VsZi5ob2xpZGF5X2l0ZW1fYmlkICYmIChzZWxmLmhvbGlkYXlfaXRlbV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUuYWNjX2x1eHVyeSB8fCBzZWxmLmhvbGlkYXlfaXRlbV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUudG90bGVfY2hhcmdlIHx8XHJcbiAgICAgICAgICAgIHNlbGYuaG9saWRheV9pdGVtX2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5saW1pdF9jaGFyZ2UpKXtcclxuICAgICAgICAgICAgVmlwQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5WaXBNYWluV2luZG93KHRydWUsIFZJUFRBQkNPTlNULkNIQVJHRSlcclxuICAgICAgICB9ZWxzZSBpZihzZWxmLmhvbGlkYXlfaXRlbV9iaWQgJiYgc2VsZi5ob2xpZGF5X2l0ZW1fYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmx1Y2tseV9lZ2cpey8vIC0t56C46JuL55qE6Lez6L2s5piv54m55q6K55qEXHJcbiAgICAgICAgICAgIGxldCBpZCA9IEFjdGlvblJhbmtDb21tb25UeXBlLnNtYXNoZWdnXHJcbiAgICAgICAgICAgIGxldCB0YWJfdm8gPSB0aGlzLmN0cmwuZ2V0QWN0aW9uU3ViVGFiVm8oaWQpXHJcbiAgICAgICAgICAgIGlmICh0YWJfdm8pe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jdHJsLmFjdGlvbl9vcGVyYXRlKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuYWN0aW9uX29wZXJhdGUuaGFuZGxlU2VsZWN0ZWRUYWIodGhpcy5jdHJsLmFjdGlvbl9vcGVyYXRlLnRhYl9saXN0W2lkXSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmKHNlbGYuaG9saWRheV9pdGVtX2JpZCAmJiBzZWxmLmhvbGlkYXlfaXRlbV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUuaGVyb19hd2FrZSl7IC8vIC0t6KeJ6YaS6LGq56S854m55q6K5aSE55CGXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVyb192byA9IEhlcm9Db250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRUb3BMZXZIZXJvSW5mb0J5QmlkKHNlbGYuY3VyX2JpZClcclxuICAgICAgICAgICAgICAgIGxldCBhbGxfcm9sZV9saXN0ID0gSGVyb0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldEFsbEhlcm9BcnJheSgpXHJcbiAgICAgICAgICAgICAgICAvLyAtLeaXoOaMh+WumuiLsembhOWImeWJjeW+gOmZkOaXtuWPrOWUpOiOt+WPllxyXG4gICAgICAgICAgICAgICAgaWYgKCFoZXJvX3ZvIHx8ICAhYWxsX3JvbGVfbGlzdCB8fCBhbGxfcm9sZV9saXN0LnNpemUgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgU3Ryb25nZXJDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2xpY2tDYWxsQmFjayg0MTEpXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBIZXJvQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5IZXJvTWFpbkluZm9XaW5kb3codHJ1ZSwgaGVyb192bywgYWxsX3JvbGVfbGlzdC5pdGVtcywge3Nob3dfbW9kZWxfdHlwZSA6IEhlcm9Db25zdC5CYWdUYWIuZUJhZ0hlcm99KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBsZXQgbnVtXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmhvbGlkYXlfaXRlbV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUuc3BlZWRfZmlnaHQgfHwgc2VsZi5ob2xpZGF5X2l0ZW1fYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLnNwZWVkX2ZpZ2h0MSl7XHJcbiAgICAgICAgICAgICAgICBudW0gPSAxMzJcclxuICAgICAgICAgICAgfWVsc2UgaWYoc2VsZi5ob2xpZGF5X2l0ZW1fYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLnZveWFnZSB8fCBzZWxmLmhvbGlkYXlfaXRlbV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUudm95YWdlMSl7XHJcbiAgICAgICAgICAgICAgICBudW0gPSAxMjZcclxuICAgICAgICAgICAgfWVsc2UgaWYoc2VsZi5ob2xpZGF5X2l0ZW1fYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmhlcm9fZXhwZWRpdCB8fCBzZWxmLmhvbGlkYXlfaXRlbV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUuaGVyb19leHBlZGl0MSl7XHJcbiAgICAgICAgICAgICAgICBudW0gPSAxNTFcclxuICAgICAgICAgICAgfWVsc2UgaWYoc2VsZi5ob2xpZGF5X2l0ZW1fYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmVwb2ludF9nb2xkIHx8IHNlbGYuaG9saWRheV9pdGVtX2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5lcG9pbnRfZ29sZDEpe1xyXG4gICAgICAgICAgICAgICAgbnVtID0gMTIzXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHNlbGYuaG9saWRheV9pdGVtX2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5hZHZlbnR1cmUpe1xyXG4gICAgICAgICAgICAgICAgbnVtID0gNDA3XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHNlbGYuaG9saWRheV9pdGVtX2JpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS51cGRhdGFfc3Rhcil7XHJcbiAgICAgICAgICAgICAgICBudW0gPSA0MDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYobnVtKXtcclxuICAgICAgICAgICAgICAgIFN0cm9uZ2VyQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNsaWNrQ2FsbEJhY2sobnVtKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXHJcbiAgICBvblNob3c6ZnVuY3Rpb24ocGFyYW1zKXtcclxuICAgIH0sXHJcblxyXG4gICAgLy8g6Z2i5p2/6K6+572u5LiN5Y+v6KeB55qE5Zue6LCDLOi/memHjOWBmuS4gOS6m+S4jeWPr+ingeeahOWxj+iUveWkhOeQhlxyXG4gICAgb25IaWRlOmZ1bmN0aW9uKCl7XHJcblxyXG4gICAgfSxcclxuICAgIHNldEV4dGVuZERhdGEodGFiKXtcclxuICAgICAgICB0aGlzLmhvbGlkYXlfaXRlbV9iaWQgPSB0YWIuYmlkXHJcbiAgICAgICAgdGhpcy5pc19hY3Rpdml0eV9lbmQgPSB0YWIudGltZV9lbmRcclxuICAgICAgICB0aGlzLmZpbmlzaCA9IHRhYi5maW5pc2hcclxuICAgIH0sXHJcbiAgICBzZXREYXRhKGRhdGEpe1xyXG4gICAgICAgIGlmKCFkYXRhKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcclxuICAgICAgICBpZih0aGlzLnJvb3Rfd25kKXtcclxuICAgICAgICAgICAgc2VsZi5nZXRCdXR0b25UZXNrUHJvZ3Jlc3MoZGF0YSlcclxuICAgICAgICAgICAgc2VsZi50aXRsZV9kZXNjLmdldENvbXBvbmVudChjYy5SaWNoVGV4dCkuc3RyaW5nID0gU3RyaW5nVXRpbC5wYXJzZShkYXRhLmFpbV9zdHIpIFxyXG4gICAgICAgICAgICBpZihzZWxmLmhvbGlkYXlfaXRlbV9iaWQgIT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUubG9uZ2luX2dpZnQpe1xyXG4gICAgICAgICAgICAgICAgc2VsZi5idG5fZ290by5hY3RpdmUgPSAoZGF0YS5zdGF0dXMgPT0gMClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN0YXR1cyA9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmJ0bl9nZXQuYWN0aXZlID0gKHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5idG5fZ2V0X3VpLmludGVyYWN0YWJsZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5idG5fZ2V0X3VpLmVuYWJsZUF1dG9HcmF5RWZmZWN0ID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYnRuX2dldF9sYWJlbC5jb2xvciA9IG5ldyBjYy5Db2xvcigyNTUsMjU1LDI1NSk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmJ0bl9nZXRfdWkuaW50ZXJhY3RhYmxlID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYnRuX2dldF91aS5lbmFibGVBdXRvR3JheUVmZmVjdCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5idG5fZ2V0X2xhYmVsLmNvbG9yID0gbmV3IGNjLkNvbG9yKDExMyw0MCw0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZWxmLmJ0bl9nZXQuYWN0aXZlID0gKGRhdGEuc3RhdHVzID09IDEpXHJcbiAgICAgICAgICAgIC8vIHNlbGYuYnRuX2dvdG8uYWN0aXZlID0gKGRhdGEuc3RhdHVzID09IDApXHJcbiAgICAgICAgICAgIC8vIHNlbGYuaGFzX2dldC5hY3RpdmUgPSAoZGF0YS5zdGF0dXMgPT0gMilcclxuICAgICAgICAgICAgaWYgKHNlbGYuaXNfYWN0aXZpdHlfZW5kID09IHRydWUgJiYgZGF0YS5zdGF0dXMgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmJ0bl9nb3RvX2xhYmVsLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXCLlt7Lnu5PmnZ9cIjtcclxuICAgICAgICAgICAgICAgIHNlbGYuYnRuX2dvdG9fbGFiZWwuY29sb3IgPSBuZXcgY2MuQ29sb3IoMjU1LDI1NSwyNTUpO1xyXG4gICAgICAgICAgICAgICAgVXRpbHMuc2V0R3JleUJ1dHRvbih0aGlzLmJ0bl9nb3RvLmdldENvbXBvbmVudChjYy5CdXR0b24pLHRydWUpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIC0tIOeJqeWTgeWIl+ihqFxyXG4gICAgICAgICAgICBsZXQgaXRlbV9saXN0ID0gZGF0YS5pdGVtX2xpc3RcclxuICAgICAgICAgICAgbGV0IGxpc3QgPSBbXVxyXG4gICAgICAgICAgICBmb3IobGV0IGs9MDtrPGl0ZW1fbGlzdC5sZW5ndGg7KytrKXtcclxuICAgICAgICAgICAgICAgIGxldCB2ID0gaXRlbV9saXN0W2tdXHJcbiAgICAgICAgICAgICAgICBpZiAodiAmJiB2LmJpZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKHYpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5pdGVtX3Njcm9sbHZpZXcuc2V0RGF0YShsaXN0KVxyXG4gICAgICAgICAgICBzZWxmLml0ZW1fc2Nyb2xsdmlldy5hZGRFbmRDYWxsQmFjayhmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgc2VsZi5pdGVtX3Njcm9sbHZpZXcuc2Nyb2xsX3ZpZXdfY29tcGVuZC5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtTGlzdCA9IHNlbGYuaXRlbV9zY3JvbGx2aWV3LmdldEl0ZW1MaXN0KClcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaz0wO2s8aXRlbUxpc3QubGVuZ3RoOysrayl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSBpdGVtTGlzdFtrXVxyXG4gICAgICAgICAgICAgICAgICAgIHYuc2V0RGVmYXVsdFRpcCh0cnVlLGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldEJ1dHRvblRlc2tQcm9ncmVzcyhkYXRhKXtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbGV0IHN0ciA9IFwiXCJcclxuICAgICAgICBpZiAoc2VsZi5ob2xpZGF5X2l0ZW1fYmlkICE9IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmxvbmdpbl9naWZ0KXtcclxuICAgICAgICAgICAgbGV0IHRvdGxlX2NvdW50LGN1cnJlbnRfY291bnQ7XHJcbiAgICAgICAgICAgIGxldCB0b3RsZV9saXN0ID0gVXRpbHMua2V5ZmluZCgnYWltX2FyZ3Nfa2V5JywgNCwgZGF0YS5haW1fYXJncykgfHwgbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRvdGxlX2xpc3Qpe1xyXG4gICAgICAgICAgICAgICAgdG90bGVfY291bnQgPSB0b3RsZV9saXN0LmFpbV9hcmdzX3ZhbCB8fCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50X2xpc3QgPSBVdGlscy5rZXlmaW5kKCdhaW1fYXJnc19rZXknLCA1LCBkYXRhLmFpbV9hcmdzKSB8fCBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudF9saXN0KXtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRfY291bnQgPSBjdXJyZW50X2xpc3QuYWltX2FyZ3NfdmFsIHx8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRvdGxlX2NvdW50Pj0wICYmIGN1cnJlbnRfY291bnQ+PTApe1xyXG4gICAgICAgICAgICAgICAgc3RyID0gXCIoXCIrY3VycmVudF9jb3VudCArIFwiL1wiKyB0b3RsZV9jb3VudCArXCIpXCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIC0t5Y2H5pif5pyJ56S844CB6J6N5ZCI56Wd56aP44CB6KeJ6YaS6LGq56S8XHJcbiAgICAgICAgICAgIGxldCBjb3VudFxyXG4gICAgICAgICAgICBsZXQgY291bnRfbGlzdCA9IFV0aWxzLmtleWZpbmQoJ2FpbV9hcmdzX2tleScsIDYsIGRhdGEuYWltX2FyZ3MpIHx8IG51bGxcclxuICAgICAgICAgICAgaWYgKGNvdW50X2xpc3Qpe1xyXG4gICAgICAgICAgICAgICAgY291bnQgPSBjb3VudF9saXN0LmFpbV9hcmdzX3ZhbCB8fCAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvdW50Pj0wICYmIHRvdGxlX2NvdW50Pj0wKXtcclxuICAgICAgICAgICAgICAgIHN0ciA9IFwiKFwiK2NvdW50ICsgXCIvXCIrIHRvdGxlX2NvdW50ICtcIilcIjtcclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+PSB0b3RsZV9jb3VudCAmJiBkYXRhLnN0YXR1cyA9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnN0YXR1cyA9IDI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gLS3op4nphpLosarnpLzmiYDnlKhcclxuICAgICAgICAgICAgbGV0IGJpZF9saXN0ID0gVXRpbHMua2V5ZmluZCgnYWltX2FyZ3Nfa2V5JywgMTgsIGRhdGEuYWltX2FyZ3MpIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChiaWRfbGlzdCl7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmN1cl9iaWQgPSBiaWRfbGlzdC5haW1fYXJnc192YWwgfHwgMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIC0t5YWF5YC857G75Z6L55qEXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmhvbGlkYXlfaXRlbV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUuYWNjX2x1eHVyeSl7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0dXMgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gXCIoMC8xKVwiXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBcIigxLzEpXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2UgaWYoc2VsZi5ob2xpZGF5X2l0ZW1fYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLnRvdGxlX2NoYXJnZSB8fCBzZWxmLmhvbGlkYXlfaXRlbV9iaWQgPT0gQWN0aW9uQ29uc3QuQWN0aW9uUmFua0NvbW1vblR5cGUudG90bGVfY29uc3VtZSB8fFxyXG4gICAgICAgICAgICAgICAgc2VsZi5ob2xpZGF5X2l0ZW1fYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLmxpbWl0X2NoYXJnZSl7Ly8gLS3ntK/lhYXlkozntK/mtojnmoRcclxuICAgICAgICAgICAgICAgIHN0ciA9IFwiKFwiK3NlbGYuZmluaXNoICsgXCIvXCIrIGRhdGEuYWltICtcIilcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzdHIgPSBcIihcIisgc2VsZi5maW5pc2ggKyBcIi9cIisgZGF0YS5haW0gK1wiKVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLnRleHRfdGVzay5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IHN0cjtcclxuICAgICAgICBzZWxmLmJ0bl9nZXQuYWN0aXZlID0gKGRhdGEuc3RhdHVzID09IDEpO1xyXG4gICAgICAgIHNlbGYuaGFzX2dldC5hY3RpdmUgPSAoZGF0YS5zdGF0dXMgPT0gMik7XHJcbiAgICB9LFxyXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcclxuICAgIG9uRGVsZXRlOmZ1bmN0aW9uKCl7XHJcbiAgICAgICAgaWYodGhpcy5pdGVtX3Njcm9sbHZpZXcpe1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5kZWxldGVNZSgpO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufSkiXX0=