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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/heroexpedit/heroexpedit_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, 'f7c5aZEqeBGzoV1Dxl18Q+q', 'heroexpedit_controller');
// Scripts/mod/heroexpedit/heroexpedit_controller.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//      这里填写详细说明,主要填写该模块的功能简要
// <br/>Create: 2019-03-11 14:13:49
// --------------------------------------------------------------------
var LoginEvent = require("login_event");
 
var HeroController = require("hero_controller");
 
var EsecsiceConst = require("esecsice_const");
 
var HeroExpeditEvent = require("heroexpedit_event");
 
var MainuiController = require("mainui_controller");
 
var HeroexpeditController = cc.Class({
  "extends": BaseController,
  ctor: function ctor() {},
  // 初始化配置数据
  initConfig: function initConfig() {
    var HeroexpeditModel = require("heroexpedit_model");
 
    this.model = new HeroexpeditModel();
    this.model.initConfig();
  },
  // 返回当前的model
  getModel: function getModel() {
    return this.model;
  },
  // 注册监听事件
  registerEvents: function registerEvents() {
    if (this.role_event == null) {
      this.role_event = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () {
        gcore.GlobalEvent.unbind(this.role_event);
        this.role_event = null; // this.sender24410();
        // this.sender24405();
        // this.sender24400();
      }.bind(this));
    }
 
    if (this.re_link_game_event == null) {
      this.re_link_game_event = gcore.GlobalEvent.bind(EventId.EVT_RE_LINK_GAME, function () {
        this.openHeroExpeditView(false);
        this.openHeroExpeditLevelView(false);
        this.openEmpolyPanelView(false);
        this.openBrowsePanelView(false); // this.sender24405();
        // this.sender24410();
        // this.sender24400();
      }.bind(this));
    }
  },
  // 注册协议接受事件
  registerProtocals: function registerProtocals() {
    this.RegisterProtocal(24400, this.handle24400);
    this.RegisterProtocal(24401, this.handle24401);
    this.RegisterProtocal(24402, this.handle24402);
    this.RegisterProtocal(24403, this.hander24403);
    this.RegisterProtocal(24404, this.hander24404);
    this.RegisterProtocal(24405, this.hander24405);
    this.RegisterProtocal(24406, this.hander24406);
    this.RegisterProtocal(24407, this.hander24407);
    this.RegisterProtocal(24408, this.hander24408);
    this.RegisterProtocal(24409, this.hander24409);
    this.RegisterProtocal(24410, this.hander24410);
  },
  // 请求远征数据
  sender24400: function sender24400() {
    this.SendProtocal(24400, {});
  },
  handle24400: function handle24400(data) {
    this.model.setExpeditData(data);
    this.grard_id = data.guard_id;
    gcore.GlobalEvent.fire(HeroExpeditEvent.HeroExpeditViewEvent, data);
    gcore.GlobalEvent.fire(HeroExpeditEvent.Red_Point_Event);
  },
  // 获取关卡
  getGrardID: function getGrardID() {
    return this.grard_id || 1;
  },
  // 获取关卡守将信息
  sender24401: function sender24401(id) {
    var proto = {};
    proto.id = id;
    this.SendProtocal(24401, proto);
  },
  handle24401: function handle24401(data) {
    if (!data) return;
    var box_pos = this.model.getExpeditBoxData();
    var status = false;
 
    for (var i in box_pos) {
      if (box_pos[i] == data.id) {
        status = true;
        break;
      }
    }
 
    if (status == true) {
      this.openBrowsePanelView(true, data);
    } else {
      if (data.id <= this.grard_id) {
        this.openHeroExpeditLevelView(true, data);
        gcore.GlobalEvent.fire(HeroExpeditEvent.levelMessageEvent, data);
      } else {
        message(Utils.TI18N("先通关前置关卡"));
      }
    }
  },
  // 领取关卡宝箱
  sender24402: function sender24402(id) {
    var proto = {};
    proto.id = id;
    this.SendProtocal(24402, proto);
  },
  handle24402: function handle24402(data) {
    message(data.msg);
 
    if (data.code == 1) {
      var expedit_data = this.model.getExpeditData();
      expedit_data.reward.push({
        reward_id: data.id
      });
      gcore.GlobalEvent.fire(HeroExpeditEvent.Get_Box_Event, data.id);
    }
  },
  // 挑战
  sender24403: function sender24403(formation_type, pos_info, hallows_id) {
    var proto = {};
    proto.formation_type = formation_type;
    proto.pos_info = pos_info;
    proto.hallows_id = hallows_id;
    this.SendProtocal(24403, proto);
  },
  hander24403: function hander24403(data) {
    message(data.msg);
 
    if (data.code == 1) {
      HeroController.getInstance().openFormGoFightPanel(false);
    }
  },
  // 伙伴信息
  sender24404: function sender24404() {
    this.SendProtocal(24404, {});
  },
  hander24404: function hander24404(data) {
    this.model.setPartnerMessage(data.list);
    gcore.GlobalEvent.fire(HeroExpeditEvent.EmployEvent);
  },
  // 已派出伙伴信息
  sender24405: function sender24405() {
    this.SendProtocal(24405, {});
  },
  hander24405: function hander24405(data) {
    this.model.setHeroSendRedPoint(data.list.length);
    gcore.GlobalEvent.fire(HeroExpeditEvent.EmploySendEvent, data);
  },
  // 雇佣伙伴
  sender24406: function sender24406() {
    this.SendProtocal(24406, {});
  },
  hander24406: function hander24406(data) {
    this.model.setEmployPartner(data.list);
  },
  // 派出伙伴
  sender24407: function sender24407(id) {
    var proto = {};
    proto.id = id;
    this.SendProtocal(24407, proto);
  },
  hander24407: function hander24407(data) {
    message(data.msg);
 
    if (data.code == 1) {
      gcore.GlobalEvent.fire(HeroExpeditEvent.EmploySendEvent_Success, data.id);
    }
  },
  // 英雄出战
  sender24409: function sender24409() {
    this.SendProtocal(24409, {});
  },
  hander24409: function hander24409(data) {
    this.model.setHeroBloodById(data);
  },
  // 远征红点,仅限过关
  sender24410: function sender24410() {
    this.SendProtocal(24410, {});
  },
  hander24410: function hander24410(data) {
    this.model.setLevelRedPoint(data.is_show);
  },
  // 雇佣伙伴
  sender24408: function sender24408(rid, srv_id, id) {
    var proto = {};
    proto.rid = rid;
    proto.srv_id = srv_id;
    proto.id = id;
    this.SendProtocal(24408, proto);
  },
  hander24408: function hander24408(data) {
    message(data.msg);
  },
  // 打开远征界面
  openHeroExpeditView: function openHeroExpeditView(bool) {
    if (bool == true) {
      var open_data = Config.dailyplay_data.data_exerciseactivity[EsecsiceConst.execsice_index.heroexpedit];
 
      if (open_data == null) {
        message(Utils.TI18N("远征数据异常"));
        return;
      }
 
      var bool = MainuiController.getInstance().checkIsOpenByActivate(open_data.activate);
 
      if (bool == false) {
        message(open_data.lock_desc);
        return;
      }
 
      if (!this.heroExpeditView) {
        this.heroExpeditView = Utils.createClass("heroexpedit_window", this);
      }
 
      if (this.heroExpeditView && this.heroExpeditView.isOpen() == false) {
        this.heroExpeditView.open();
      }
    } else {
      if (this.heroExpeditView) {
        this.heroExpeditView.close();
        this.heroExpeditView = null;
      }
    }
  },
  // 打开远征关卡信息界面
  openHeroExpeditLevelView: function openHeroExpeditLevelView(bool, data) {
    if (bool == true) {
      if (!this.heroExpeditLevelView) {
        this.heroExpeditLevelView = Utils.createClass("heroexpedit_level_window", this);
      }
 
      if (this.heroExpeditLevelView && this.heroExpeditLevelView.isOpen() == false) {
        this.heroExpeditLevelView.open(data);
      }
    } else {
      if (this.heroExpeditLevelView) {
        this.heroExpeditLevelView.close();
        this.heroExpeditLevelView = null;
      }
    }
  },
  // 打开远征雇佣界面
  openEmpolyPanelView: function openEmpolyPanelView(bool) {
    if (bool == true) {
      if (!this.empolyPanelView) {
        this.empolyPanelView = Utils.createClass("empoly_window", this);
      }
 
      if (this.empolyPanelView && this.empolyPanelView.isOpen() == false) {
        this.empolyPanelView.open();
      }
    } else {
      if (this.empolyPanelView) {
        this.empolyPanelView.close();
        this.empolyPanelView = null;
      }
    }
  },
  // 打开查看宝箱奖励
  openBrowsePanelView: function openBrowsePanelView(bool, data) {
    if (bool == true && data) {
      if (!this.browsePanelView) {
        this.browsePanelView = Utils.createClass("browse_window", this);
      }
 
      if (this.browsePanelView && this.browsePanelView.isOpen() == false) {
        this.browsePanelView.open(data);
      }
    } else {
      if (this.browsePanelView) {
        this.browsePanelView.close();
        this.browsePanelView = null;
      }
    }
  },
  __delete: function __delete() {}
});
module.exports = HeroexpeditController;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxoZXJvZXhwZWRpdFxcaGVyb2V4cGVkaXRfY29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJMb2dpbkV2ZW50IiwicmVxdWlyZSIsIkhlcm9Db250cm9sbGVyIiwiRXNlY3NpY2VDb25zdCIsIkhlcm9FeHBlZGl0RXZlbnQiLCJNYWludWlDb250cm9sbGVyIiwiSGVyb2V4cGVkaXRDb250cm9sbGVyIiwiY2MiLCJDbGFzcyIsIkJhc2VDb250cm9sbGVyIiwiY3RvciIsImluaXRDb25maWciLCJIZXJvZXhwZWRpdE1vZGVsIiwibW9kZWwiLCJnZXRNb2RlbCIsInJlZ2lzdGVyRXZlbnRzIiwicm9sZV9ldmVudCIsImdjb3JlIiwiR2xvYmFsRXZlbnQiLCJiaW5kIiwiRXZlbnRJZCIsIkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTIiwidW5iaW5kIiwicmVfbGlua19nYW1lX2V2ZW50IiwiRVZUX1JFX0xJTktfR0FNRSIsIm9wZW5IZXJvRXhwZWRpdFZpZXciLCJvcGVuSGVyb0V4cGVkaXRMZXZlbFZpZXciLCJvcGVuRW1wb2x5UGFuZWxWaWV3Iiwib3BlbkJyb3dzZVBhbmVsVmlldyIsInJlZ2lzdGVyUHJvdG9jYWxzIiwiUmVnaXN0ZXJQcm90b2NhbCIsImhhbmRsZTI0NDAwIiwiaGFuZGxlMjQ0MDEiLCJoYW5kbGUyNDQwMiIsImhhbmRlcjI0NDAzIiwiaGFuZGVyMjQ0MDQiLCJoYW5kZXIyNDQwNSIsImhhbmRlcjI0NDA2IiwiaGFuZGVyMjQ0MDciLCJoYW5kZXIyNDQwOCIsImhhbmRlcjI0NDA5IiwiaGFuZGVyMjQ0MTAiLCJzZW5kZXIyNDQwMCIsIlNlbmRQcm90b2NhbCIsImRhdGEiLCJzZXRFeHBlZGl0RGF0YSIsImdyYXJkX2lkIiwiZ3VhcmRfaWQiLCJmaXJlIiwiSGVyb0V4cGVkaXRWaWV3RXZlbnQiLCJSZWRfUG9pbnRfRXZlbnQiLCJnZXRHcmFyZElEIiwic2VuZGVyMjQ0MDEiLCJpZCIsInByb3RvIiwiYm94X3BvcyIsImdldEV4cGVkaXRCb3hEYXRhIiwic3RhdHVzIiwiaSIsImxldmVsTWVzc2FnZUV2ZW50IiwibWVzc2FnZSIsIlV0aWxzIiwiVEkxOE4iLCJzZW5kZXIyNDQwMiIsIm1zZyIsImNvZGUiLCJleHBlZGl0X2RhdGEiLCJnZXRFeHBlZGl0RGF0YSIsInJld2FyZCIsInB1c2giLCJyZXdhcmRfaWQiLCJHZXRfQm94X0V2ZW50Iiwic2VuZGVyMjQ0MDMiLCJmb3JtYXRpb25fdHlwZSIsInBvc19pbmZvIiwiaGFsbG93c19pZCIsImdldEluc3RhbmNlIiwib3BlbkZvcm1Hb0ZpZ2h0UGFuZWwiLCJzZW5kZXIyNDQwNCIsInNldFBhcnRuZXJNZXNzYWdlIiwibGlzdCIsIkVtcGxveUV2ZW50Iiwic2VuZGVyMjQ0MDUiLCJzZXRIZXJvU2VuZFJlZFBvaW50IiwibGVuZ3RoIiwiRW1wbG95U2VuZEV2ZW50Iiwic2VuZGVyMjQ0MDYiLCJzZXRFbXBsb3lQYXJ0bmVyIiwic2VuZGVyMjQ0MDciLCJFbXBsb3lTZW5kRXZlbnRfU3VjY2VzcyIsInNlbmRlcjI0NDA5Iiwic2V0SGVyb0Jsb29kQnlJZCIsInNlbmRlcjI0NDEwIiwic2V0TGV2ZWxSZWRQb2ludCIsImlzX3Nob3ciLCJzZW5kZXIyNDQwOCIsInJpZCIsInNydl9pZCIsImJvb2wiLCJvcGVuX2RhdGEiLCJDb25maWciLCJkYWlseXBsYXlfZGF0YSIsImRhdGFfZXhlcmNpc2VhY3Rpdml0eSIsImV4ZWNzaWNlX2luZGV4IiwiaGVyb2V4cGVkaXQiLCJjaGVja0lzT3BlbkJ5QWN0aXZhdGUiLCJhY3RpdmF0ZSIsImxvY2tfZGVzYyIsImhlcm9FeHBlZGl0VmlldyIsImNyZWF0ZUNsYXNzIiwiaXNPcGVuIiwib3BlbiIsImNsb3NlIiwiaGVyb0V4cGVkaXRMZXZlbFZpZXciLCJlbXBvbHlQYW5lbFZpZXciLCJicm93c2VQYW5lbFZpZXciLCJfX2RlbGV0ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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QUEwQm5FLElBQTFCO0FBQ0g7QUFFSixLQVJELE1BUUs7QUFDRCxVQUFHLEtBQUt1RSxlQUFSLEVBQXdCO0FBQ3BCLGFBQUtBLGVBQUwsQ0FBcUJILEtBQXJCO0FBQ0EsYUFBS0csZUFBTCxHQUF1QixJQUF2QjtBQUNIO0FBQ0o7QUFDSixHQXBTZ0M7QUFzU2pDQyxFQUFBQSxRQUFRLEVBQUMsb0JBQVUsQ0FFbEI7QUF4U2dDLENBQVQsQ0FBNUI7QUEyU0FDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQmhILHFCQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDov5nph4zloavlhpnor6bnu4bor7TmmI4s5Li76KaB5aGr5YaZ6K+l5qih5Z2X55qE5Yqf6IO9566A6KaBXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMy0xMSAxNDoxMzo0OVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBMb2dpbkV2ZW50ID0gcmVxdWlyZShcImxvZ2luX2V2ZW50XCIpO1xudmFyIEhlcm9Db250cm9sbGVyID0gcmVxdWlyZShcImhlcm9fY29udHJvbGxlclwiKTtcbnZhciBFc2Vjc2ljZUNvbnN0ID0gcmVxdWlyZShcImVzZWNzaWNlX2NvbnN0XCIpO1xudmFyIEhlcm9FeHBlZGl0RXZlbnQgPSByZXF1aXJlKFwiaGVyb2V4cGVkaXRfZXZlbnRcIik7XG52YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcblxudmFyIEhlcm9leHBlZGl0Q29udHJvbGxlciA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ29udHJvbGxlcixcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMlumFjee9ruaVsOaNrlxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIEhlcm9leHBlZGl0TW9kZWwgPSByZXF1aXJlKFwiaGVyb2V4cGVkaXRfbW9kZWxcIik7XG5cbiAgICAgICAgdGhpcy5tb2RlbCA9IG5ldyBIZXJvZXhwZWRpdE1vZGVsKCk7XG4gICAgICAgIHRoaXMubW9kZWwuaW5pdENvbmZpZygpO1xuICAgIH0sXG5cbiAgICAvLyDov5Tlm57lvZPliY3nmoRtb2RlbFxuICAgIGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhoznm5HlkKzkuovku7ZcbiAgICByZWdpc3RlckV2ZW50czogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZih0aGlzLnJvbGVfZXZlbnQgPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLnJvbGVfZXZlbnQgPSBnY29yZS5HbG9iYWxFdmVudC5iaW5kKEV2ZW50SWQuRVZUX1JPTEVfQ1JFQVRFX1NVQ0NFU1MsKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQudW5iaW5kKHRoaXMucm9sZV9ldmVudClcbiAgICAgICAgICAgICAgICB0aGlzLnJvbGVfZXZlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuc2VuZGVyMjQ0MTAoKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNlbmRlcjI0NDA1KCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5zZW5kZXIyNDQwMCgpO1xuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5yZV9saW5rX2dhbWVfZXZlbnQgPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLnJlX2xpbmtfZ2FtZV9ldmVudCA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoRXZlbnRJZC5FVlRfUkVfTElOS19HQU1FLChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbkhlcm9FeHBlZGl0VmlldyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSGVyb0V4cGVkaXRMZXZlbFZpZXcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkVtcG9seVBhbmVsVmlldyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQnJvd3NlUGFuZWxWaWV3KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNlbmRlcjI0NDA1KCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5zZW5kZXIyNDQxMCgpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuc2VuZGVyMjQ0MDAoKTtcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcykpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5Y2P6K6u5o6l5Y+X5LqL5Lu2XG4gICAgcmVnaXN0ZXJQcm90b2NhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDAwLCB0aGlzLmhhbmRsZTI0NDAwKTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDAxLCB0aGlzLmhhbmRsZTI0NDAxKTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDAyLCB0aGlzLmhhbmRsZTI0NDAyKTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDAzLCB0aGlzLmhhbmRlcjI0NDAzKTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA0LCB0aGlzLmhhbmRlcjI0NDA0KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA1LCB0aGlzLmhhbmRlcjI0NDA1KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA2LCB0aGlzLmhhbmRlcjI0NDA2KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA3LCB0aGlzLmhhbmRlcjI0NDA3KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA4LCB0aGlzLmhhbmRlcjI0NDA4KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDA5LCB0aGlzLmhhbmRlcjI0NDA5KTtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NDEwLCB0aGlzLmhhbmRlcjI0NDEwKTtcbiAgICB9LFxuXG4gICAgLy8g6K+35rGC6L+c5b6B5pWw5o2uXG4gICAgc2VuZGVyMjQ0MDA6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MDAsIHt9KTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMjQ0MDA6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0RXhwZWRpdERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuZ3JhcmRfaWQgPSBkYXRhLmd1YXJkX2lkO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEhlcm9FeHBlZGl0RXZlbnQuSGVyb0V4cGVkaXRWaWV3RXZlbnQsIGRhdGEpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEhlcm9FeHBlZGl0RXZlbnQuUmVkX1BvaW50X0V2ZW50KTtcbiAgICB9LFxuXG4gICAgLy8g6I635Y+W5YWz5Y2hXG4gICAgZ2V0R3JhcmRJRDpmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5ncmFyZF9pZCB8fCAxO1xuICAgIH0sXG5cbiAgICAvLyDojrflj5blhbPljaHlrojlsIbkv6Hmga9cbiAgICBzZW5kZXIyNDQwMTpmdW5jdGlvbihpZCl7XG4gICAgICAgIHZhciBwcm90byA9IHt9O1xuICAgICAgICBwcm90by5pZCA9IGlkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDQwMSwgcHJvdG8pO1xuICAgIH0sXG5cbiAgICBoYW5kbGUyNDQwMTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgaWYoIWRhdGEpcmV0dXJuO1xuICAgICAgICB2YXIgYm94X3BvcyA9IHRoaXMubW9kZWwuZ2V0RXhwZWRpdEJveERhdGEoKTtcbiAgICAgICAgdmFyIHN0YXR1cyA9IGZhbHNlO1xuICAgICAgICBmb3IodmFyIGkgaW4gYm94X3Bvcyl7XG4gICAgICAgICAgICBpZihib3hfcG9zW2ldID09IGRhdGEuaWQpe1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoc3RhdHVzID09IHRydWUpe1xuICAgICAgICAgICAgdGhpcy5vcGVuQnJvd3NlUGFuZWxWaWV3KHRydWUsIGRhdGEpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKGRhdGEuaWQgPD0gdGhpcy5ncmFyZF9pZCl7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSGVyb0V4cGVkaXRMZXZlbFZpZXcodHJ1ZSxkYXRhKTtcbiAgICAgICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEhlcm9FeHBlZGl0RXZlbnQubGV2ZWxNZXNzYWdlRXZlbnQsIGRhdGEpO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuWFiOmAmuWFs+WJjee9ruWFs+WNoVwiKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpooblj5blhbPljaHlrp3nrrFcbiAgICBzZW5kZXIyNDQwMjpmdW5jdGlvbihpZCl7XG4gICAgICAgIHZhciBwcm90byA9IHt9XG4gICAgICAgIHByb3RvLmlkID0gaWRcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MDIscHJvdG8pO1xuICAgIH0sXG5cbiAgICBoYW5kbGUyNDQwMjpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmKGRhdGEuY29kZSA9PSAxKXtcbiAgICAgICAgICAgIHZhciBleHBlZGl0X2RhdGEgPSB0aGlzLm1vZGVsLmdldEV4cGVkaXREYXRhKCk7XG4gICAgICAgICAgICBleHBlZGl0X2RhdGEucmV3YXJkLnB1c2goe3Jld2FyZF9pZDogZGF0YS5pZH0pO1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShIZXJvRXhwZWRpdEV2ZW50LkdldF9Cb3hfRXZlbnQsIGRhdGEuaWQpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOaMkeaImFxuICAgIHNlbmRlcjI0NDAzOmZ1bmN0aW9uKGZvcm1hdGlvbl90eXBlLHBvc19pbmZvLGhhbGxvd3NfaWQpe1xuICAgICAgICB2YXIgcHJvdG8gPSB7fVxuICAgICAgICBwcm90by5mb3JtYXRpb25fdHlwZSA9IGZvcm1hdGlvbl90eXBlO1xuICAgICAgICBwcm90by5wb3NfaW5mbyA9IHBvc19pbmZvO1xuICAgICAgICBwcm90by5oYWxsb3dzX2lkID0gaGFsbG93c19pZDtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MDMsIHByb3RvKTtcbiAgICB9LFxuXG4gICAgaGFuZGVyMjQ0MDM6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpXG4gICAgICAgIGlmKGRhdGEuY29kZSA9PSAxKXtcbiAgICAgICAgICAgIEhlcm9Db250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkZvcm1Hb0ZpZ2h0UGFuZWwoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOS8meS8tOS/oeaBr1xuICAgIHNlbmRlcjI0NDA0OmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0NDA0LHt9KTtcbiAgICB9LFxuXG4gICAgaGFuZGVyMjQ0MDQ6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0UGFydG5lck1lc3NhZ2UoZGF0YS5saXN0KTtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShIZXJvRXhwZWRpdEV2ZW50LkVtcGxveUV2ZW50KTtcbiAgICB9LFxuXG4gICAgLy8g5bey5rS+5Ye65LyZ5Ly05L+h5oGvXG4gICAgc2VuZGVyMjQ0MDU6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ0MDUse30pO1xuICAgIH0sXG5cbiAgICBoYW5kZXIyNDQwNTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRIZXJvU2VuZFJlZFBvaW50KGRhdGEubGlzdC5sZW5ndGgpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEhlcm9FeHBlZGl0RXZlbnQuRW1wbG95U2VuZEV2ZW50LGRhdGEpO1xuICAgIH0sXG5cbiAgICAvLyDpm4fkvaPkvJnkvLRcbiAgICBzZW5kZXIyNDQwNjpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDQwNix7fSk7ICAgIFxuICAgIH0sXG5cbiAgICBoYW5kZXIyNDQwNjpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRFbXBsb3lQYXJ0bmVyKGRhdGEubGlzdCk7XG4gICAgfSxcblxuICAgIC8vIOa0vuWHuuS8meS8tFxuICAgIHNlbmRlcjI0NDA3OmZ1bmN0aW9uKGlkKXtcbiAgICAgICAgdmFyIHByb3RvID0ge307XG4gICAgICAgIHByb3RvLmlkID0gaWQgXG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0NDA3LHByb3RvKVxuICAgIH0sXG5cbiAgICBoYW5kZXIyNDQwNzpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmKGRhdGEuY29kZSA9PSAxKXtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoSGVyb0V4cGVkaXRFdmVudC5FbXBsb3lTZW5kRXZlbnRfU3VjY2VzcyxkYXRhLmlkKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDoi7Hpm4Tlh7rmiJhcbiAgICBzZW5kZXIyNDQwOTpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDQwOSx7fSk7XG4gICAgfSxcblxuICAgIGhhbmRlcjI0NDA5OmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICB0aGlzLm1vZGVsLnNldEhlcm9CbG9vZEJ5SWQoZGF0YSk7XG4gICAgfSxcblxuICAgIC8vIOi/nOW+gee6oueCuSzku4XpmZDov4flhbNcbiAgICBzZW5kZXIyNDQxMDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDQxMCx7fSk7XG4gICAgfSxcblxuICAgIGhhbmRlcjI0NDEwOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICB0aGlzLm1vZGVsLnNldExldmVsUmVkUG9pbnQoZGF0YS5pc19zaG93KVxuICAgIH0sXG5cbiAgICAvLyDpm4fkvaPkvJnkvLRcbiAgICBzZW5kZXIyNDQwODpmdW5jdGlvbihyaWQsc3J2X2lkLGlkKXtcbiAgICAgICAgdmFyIHByb3RvID0ge307XG4gICAgICAgIHByb3RvLnJpZCA9IHJpZDtcbiAgICAgICAgcHJvdG8uc3J2X2lkID0gc3J2X2lkO1xuICAgICAgICBwcm90by5pZCA9IGlkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyNDQwOCxwcm90byk7XG4gICAgfSxcblxuICAgIGhhbmRlcjI0NDA4OmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKVxuICAgIH0sXG5cbiAgICAvLyDmiZPlvIDov5zlvoHnlYzpnaJcbiAgICBvcGVuSGVyb0V4cGVkaXRWaWV3OmZ1bmN0aW9uKGJvb2wpe1xuICAgICAgICBpZihib29sID09IHRydWUpe1xuICAgICAgICAgICAgdmFyIG9wZW5fZGF0YSA9IENvbmZpZy5kYWlseXBsYXlfZGF0YS5kYXRhX2V4ZXJjaXNlYWN0aXZpdHlbRXNlY3NpY2VDb25zdC5leGVjc2ljZV9pbmRleC5oZXJvZXhwZWRpdF07XG4gICAgICAgICAgICBpZihvcGVuX2RhdGEgPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIui/nOW+geaVsOaNruW8guW4uFwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGJvb2wgPSBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hlY2tJc09wZW5CeUFjdGl2YXRlKG9wZW5fZGF0YS5hY3RpdmF0ZSk7XG4gICAgICAgICAgICBpZihib29sID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICBtZXNzYWdlKG9wZW5fZGF0YS5sb2NrX2Rlc2MpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoIXRoaXMuaGVyb0V4cGVkaXRWaWV3KXtcbiAgICAgICAgICAgICAgICB0aGlzLmhlcm9FeHBlZGl0VmlldyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwiaGVyb2V4cGVkaXRfd2luZG93XCIsdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLmhlcm9FeHBlZGl0VmlldyAmJiB0aGlzLmhlcm9FeHBlZGl0Vmlldy5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5oZXJvRXhwZWRpdFZpZXcub3BlbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcblxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHRoaXMuaGVyb0V4cGVkaXRWaWV3KXtcbiAgICAgICAgICAgICAgICB0aGlzLmhlcm9FeHBlZGl0Vmlldy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVyb0V4cGVkaXRWaWV3ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmiZPlvIDov5zlvoHlhbPljaHkv6Hmga/nlYzpnaJcbiAgICBvcGVuSGVyb0V4cGVkaXRMZXZlbFZpZXc6ZnVuY3Rpb24oYm9vbCxkYXRhKXtcbiAgICAgICAgaWYoYm9vbCA9PSB0cnVlKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmhlcm9FeHBlZGl0TGV2ZWxWaWV3KXtcbiAgICAgICAgICAgICAgICB0aGlzLmhlcm9FeHBlZGl0TGV2ZWxWaWV3ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJoZXJvZXhwZWRpdF9sZXZlbF93aW5kb3dcIix0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMuaGVyb0V4cGVkaXRMZXZlbFZpZXcgJiYgdGhpcy5oZXJvRXhwZWRpdExldmVsVmlldy5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5oZXJvRXhwZWRpdExldmVsVmlldy5vcGVuKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYodGhpcy5oZXJvRXhwZWRpdExldmVsVmlldyl7XG4gICAgICAgICAgICAgICAgdGhpcy5oZXJvRXhwZWRpdExldmVsVmlldy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVyb0V4cGVkaXRMZXZlbFZpZXcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOaJk+W8gOi/nOW+gembh+S9o+eVjOmdolxuICAgIG9wZW5FbXBvbHlQYW5lbFZpZXc6ZnVuY3Rpb24oYm9vbCl7XG4gICAgICAgIGlmKGJvb2wgPT0gdHJ1ZSkgICB7XG4gICAgICAgICAgICBpZighdGhpcy5lbXBvbHlQYW5lbFZpZXcpe1xuICAgICAgICAgICAgICAgIHRoaXMuZW1wb2x5UGFuZWxWaWV3ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJlbXBvbHlfd2luZG93XCIsdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLmVtcG9seVBhbmVsVmlldyAmJiB0aGlzLmVtcG9seVBhbmVsVmlldy5pc09wZW4oKSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXBvbHlQYW5lbFZpZXcub3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYodGhpcy5lbXBvbHlQYW5lbFZpZXcpe1xuICAgICAgICAgICAgICAgIHRoaXMuZW1wb2x5UGFuZWxWaWV3LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXBvbHlQYW5lbFZpZXcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOaJk+W8gOafpeeci+WuneeuseWlluWKsVxuICAgIG9wZW5Ccm93c2VQYW5lbFZpZXc6ZnVuY3Rpb24oYm9vbCwgZGF0YSl7XG4gICAgICAgIGlmKGJvb2wgPT0gdHJ1ZSAmJiBkYXRhKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmJyb3dzZVBhbmVsVmlldyl7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VQYW5lbFZpZXcgPSBVdGlscy5jcmVhdGVDbGFzcyhcImJyb3dzZV93aW5kb3dcIix0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMuYnJvd3NlUGFuZWxWaWV3ICYmIHRoaXMuYnJvd3NlUGFuZWxWaWV3LmlzT3BlbigpID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZVBhbmVsVmlldy5vcGVuKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYodGhpcy5icm93c2VQYW5lbFZpZXcpe1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlUGFuZWxWaWV3LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VQYW5lbFZpZXcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9fZGVsZXRlOmZ1bmN0aW9uKCl7XG4gICAgICAgXG4gICAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhlcm9leHBlZGl0Q29udHJvbGxlcjsiXX0=