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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/limitexercise/view/limitexercise_panel.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, '33039X1X11J/ZivMoWPylF6', 'limitexercise_panel');
// Scripts/mod/limitexercise/view/limitexercise_panel.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-09-09 17:32:54
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var LimitexerciseController = require("limitexercise_controller");
 
var LimitExerciseEvent = require("limitexercise_event");
 
var LimitExerciseConst = require("limitExercise_const");
 
var TimeTool = require("timetool");
 
var LimitexercisePanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("limitexercise", "limitexercise_panel");
    this.holiday_bid = arguments[0];
    this.ctrl = LimitexerciseController.getInstance();
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {},
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    var x = this.getPositionX();
    this.setPosition(x, -20);
    var main_container = this.root_wnd.getChildByName("main_container");
    var load_bg = main_container.getChildByName("bg").getComponent(cc.Sprite);
    var bg_res = PathTool.getUIIconPath("bigbg/limitexercise", "txt_cn_limit_exercise");
    this.loadRes(bg_res, function (res) {
      load_bg.spriteFrame = res;
    }.bind(this));
    main_container.getChildByName("Text_1").getComponent(cc.Label).string = Utils.TI18N("活动时间:");
    this.btn_change = main_container.getChildByName("btn_change");
    this.btn_change.getChildByName("Text_4").getComponent(cc.Label).string = Utils.TI18N("前往挑战");
    main_container.getChildByName("Text_1_0").getComponent(cc.Label).string = Utils.TI18N("剩余次数:");
    main_container.getChildByName("Text_2").getComponent(cc.Label).string = Utils.TI18N("本轮剩余:");
    this.round_time = main_container.getChildByName("round_time").getComponent(cc.Label);
    this.round_time.string = "";
    main_container.getChildByName("Text_2_0").getComponent(cc.Label).string = Utils.TI18N("所在区域:");
    main_container.getChildByName("Text_2_0_0").getComponent(cc.Label).string = Utils.TI18N("挑战次数:");
    main_container.getChildByName("Text_2_0_1").getComponent(cc.Label).string = Utils.TI18N("击败怪物:");
    this.aera_text = main_container.getChildByName("aera_text").getComponent(cc.Label);
    this.aera_text.string = "";
    this.change_count = main_container.getChildByName("change_count").getComponent(cc.Label);
    this.change_count.string = "";
    this.defaet_master = main_container.getChildByName("defaet_master").getComponent(cc.Label);
    this.defaet_master.string = "";
    this.item_count = main_container.getChildByName("item_count").getComponent(cc.Label);
    this.item_count.string = "";
    this.remain_time = main_container.getChildByName("remain_time").getComponent(cc.Label);
    this.remain_time.string = "";
    this.goods_con = main_container.getChildByName("goods_con");
    this.goods_con_content = this.goods_con.getChildByName("content");
    this.setData();
    this.ctrl.send25410();
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.addGlobalEvent(LimitExerciseEvent.LimitExercise_Message_Event, function (data) {
      if (!data) return;
      this.actionHolidayData(data);
    }.bind(this));
    this.addGlobalEvent(LimitExerciseEvent.LimitExercise_BuyCount_Event, function (data) {
      if (!data) return;
 
      if (this.item_count) {
        this.item_count.string = data.count || 0;
      }
    }.bind(this));
    this.btn_change.on('click', function () {
      var MainuiController = require("mainui_controller");
 
      var BattleConst = require("battle_const");
 
      MainuiController.getInstance().requestOpenBattleRelevanceWindow(BattleConst.Fight_Type.LimitExercise);
      Utils.playButtonSound(1);
    }, this);
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow(params) {},
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  setVisibleStatus: function setVisibleStatus(bool) {
    bool = bool || false;
    this.setVisible(bool);
  },
  setData: function setData() {
    var const_data = Config.holiday_boss_new_data.data_const;
 
    if (const_data) {
      if (const_data.action_time) {
        var time_desc = const_data.action_time.desc || "";
        this.remain_time.string = time_desc;
      }
 
      if (const_data.action_pre_reward) {
        var data_list = const_data.action_pre_reward.val || [];
        var setting = {};
        setting.scale = 0.9;
        setting.max_count = 4;
        setting.is_center = true;
        setting.show_effect_id = 263;
        this.item_list = Utils.commonShowSingleRowItemList(this.goods_con, this.item_list, data_list, setting, this.goods_con_content);
      }
    }
  },
  actionHolidayData: function actionHolidayData(data) {
    var time = data.endtime || 0;
    this.setCountDownTime(this.round_time, time - gcore.SmartSocket.getTime());
    this.item_count.string = data.count || 0;
    this.aera_text.string = Utils.TI18N(LimitExerciseConst.type[data.order_type || 1]);
    this.change_count.string = data.round_combat || 0;
    this.defaet_master.string = data.round_boss || 0;
  },
  setCountDownTime: function setCountDownTime(label, less_time) {
    if (!label) {
      return;
    }
 
    if (this.time_tichet) {
      gcore.Timer.del(this.time_tichet);
      this.time_tichet = null;
    }
 
    if (less_time > 0) {
      this.setTimeFormatString(label, less_time);
      this.time_tichet = gcore.Timer.set(function () {
        less_time--;
 
        if (less_time < 0) {
          gcore.Timer.del(this.time_tichet);
          this.time_tichet = null;
          label.string = "00:00:00";
        } else {
          this.setTimeFormatString(label, less_time);
        }
      }.bind(this), 1000, -1);
    } else {
      this.setTimeFormatString(label, less_time);
    }
  },
  setTimeFormatString: function setTimeFormatString(label, time) {
    if (time > 0) {
      label.string = TimeTool.getTimeFormatDay(time);
    } else {
      label.string = "00:00:00";
    }
  },
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {
    if (this.time_tichet) {
      gcore.Timer.del(this.time_tichet);
      this.time_tichet = null;
    }
 
    if (this.item_list) {
      for (var i = 0; i < this.item_list.length; ++i) {
        if (this.item_list[i]) {
          this.item_list[i].deleteMe();
          this.item_list[i] = null;
        }
      }
 
      this.item_list = 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxsaW1pdGV4ZXJjaXNlXFx2aWV3XFxsaW1pdGV4ZXJjaXNlX3BhbmVsLmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkxpbWl0ZXhlcmNpc2VDb250cm9sbGVyIiwiTGltaXRFeGVyY2lzZUV2ZW50IiwiTGltaXRFeGVyY2lzZUNvbnN0IiwiVGltZVRvb2wiLCJMaW1pdGV4ZXJjaXNlUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiaG9saWRheV9iaWQiLCJhcmd1bWVudHMiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJpbml0Q29uZmlnIiwiaW5pdFBhbmVsIiwieCIsImdldFBvc2l0aW9uWCIsInNldFBvc2l0aW9uIiwibWFpbl9jb250YWluZXIiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwibG9hZF9iZyIsImdldENvbXBvbmVudCIsIlNwcml0ZSIsImJnX3JlcyIsImdldFVJSWNvblBhdGgiLCJsb2FkUmVzIiwicmVzIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwiTGFiZWwiLCJzdHJpbmciLCJVdGlscyIsIlRJMThOIiwiYnRuX2NoYW5nZSIsInJvdW5kX3RpbWUiLCJhZXJhX3RleHQiLCJjaGFuZ2VfY291bnQiLCJkZWZhZXRfbWFzdGVyIiwiaXRlbV9jb3VudCIsInJlbWFpbl90aW1lIiwiZ29vZHNfY29uIiwiZ29vZHNfY29uX2NvbnRlbnQiLCJzZXREYXRhIiwic2VuZDI1NDEwIiwicmVnaXN0ZXJFdmVudCIsImFkZEdsb2JhbEV2ZW50IiwiTGltaXRFeGVyY2lzZV9NZXNzYWdlX0V2ZW50IiwiZGF0YSIsImFjdGlvbkhvbGlkYXlEYXRhIiwiTGltaXRFeGVyY2lzZV9CdXlDb3VudF9FdmVudCIsImNvdW50Iiwib24iLCJNYWludWlDb250cm9sbGVyIiwiQmF0dGxlQ29uc3QiLCJyZXF1ZXN0T3BlbkJhdHRsZVJlbGV2YW5jZVdpbmRvdyIsIkZpZ2h0X1R5cGUiLCJMaW1pdEV4ZXJjaXNlIiwicGxheUJ1dHRvblNvdW5kIiwib25TaG93IiwicGFyYW1zIiwib25IaWRlIiwic2V0VmlzaWJsZVN0YXR1cyIsImJvb2wiLCJzZXRWaXNpYmxlIiwiY29uc3RfZGF0YSIsIkNvbmZpZyIsImhvbGlkYXlfYm9zc19uZXdfZGF0YSIsImRhdGFfY29uc3QiLCJhY3Rpb25fdGltZSIsInRpbWVfZGVzYyIsImRlc2MiLCJhY3Rpb25fcHJlX3Jld2FyZCIsImRhdGFfbGlzdCIsInZhbCIsInNldHRpbmciLCJzY2FsZSIsIm1heF9jb3VudCIsImlzX2NlbnRlciIsInNob3dfZWZmZWN0X2lkIiwiaXRlbV9saXN0IiwiY29tbW9uU2hvd1NpbmdsZVJvd0l0ZW1MaXN0IiwidGltZSIsImVuZHRpbWUiLCJzZXRDb3VudERvd25UaW1lIiwiZ2NvcmUiLCJTbWFydFNvY2tldCIsImdldFRpbWUiLCJ0eXBlIiwib3JkZXJfdHlwZSIsInJvdW5kX2NvbWJhdCIsInJvdW5kX2Jvc3MiLCJsYWJlbCIsImxlc3NfdGltZSIsInRpbWVfdGljaGV0IiwiVGltZXIiLCJkZWwiLCJzZXRUaW1lRm9ybWF0U3RyaW5nIiwic2V0IiwiZ2V0VGltZUZvcm1hdERheSIsIm9uRGVsZXRlIiwiaSIsImxlbmd0aCIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsdUJBQXVCLEdBQUdELE9BQU8sQ0FBQywwQkFBRCxDQUFyQzs7QUFDQSxJQUFJRSxrQkFBa0IsR0FBR0YsT0FBTyxDQUFDLHFCQUFELENBQWhDOztBQUNBLElBQUlHLGtCQUFrQixHQUFHSCxPQUFPLENBQUMscUJBQUQsQ0FBaEM7O0FBQ0EsSUFBSUksUUFBUSxHQUFHSixPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJ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LFNBQUwsQ0FBZXFCLENBQWYsSUFBb0IsSUFBcEI7QUFDSDtBQUNKOztBQUNELFdBQUtyQixTQUFMLEdBQWlCLElBQWpCO0FBQ0g7QUFDSjtBQTlKNkIsQ0FBVCxDQUF6QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDktMDkgMTc6MzI6NTRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgTGltaXRleGVyY2lzZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibGltaXRleGVyY2lzZV9jb250cm9sbGVyXCIpXG52YXIgTGltaXRFeGVyY2lzZUV2ZW50ID0gcmVxdWlyZShcImxpbWl0ZXhlcmNpc2VfZXZlbnRcIilcbnZhciBMaW1pdEV4ZXJjaXNlQ29uc3QgPSByZXF1aXJlKFwibGltaXRFeGVyY2lzZV9jb25zdFwiKVxudmFyIFRpbWVUb29sID0gcmVxdWlyZShcInRpbWV0b29sXCIpXG52YXIgTGltaXRleGVyY2lzZVBhbmVsID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VQYW5lbCxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJsaW1pdGV4ZXJjaXNlXCIsIFwibGltaXRleGVyY2lzZV9wYW5lbFwiKTtcbiAgICAgICAgdGhpcy5ob2xpZGF5X2JpZCA9IGFyZ3VtZW50c1swXVxuICAgICAgICB0aGlzLmN0cmwgPSBMaW1pdGV4ZXJjaXNlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpXG4gICAgfSxcblxuICAgIC8vIOWPr+S7peWIneWni+WMluWjsOaYjuS4gOS6m+WPmOmHj+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOmZ1bmN0aW9uKCl7XG4gICAgICAgIGxldCB4ID0gdGhpcy5nZXRQb3NpdGlvblgoKVxuICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHgsLTIwKVxuICAgICAgICBsZXQgbWFpbl9jb250YWluZXIgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIilcbiAgICAgICAgbGV0IGxvYWRfYmcgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJnXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpXG4gICAgICAgIGxldCBiZ19yZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiYmlnYmcvbGltaXRleGVyY2lzZVwiLCBcInR4dF9jbl9saW1pdF9leGVyY2lzZVwiKVxuICAgICAgICB0aGlzLmxvYWRSZXMoYmdfcmVzLGZ1bmN0aW9uKHJlcyl7XG4gICAgICAgICAgICBsb2FkX2JnLnNwcml0ZUZyYW1lID0gcmVzO1xuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiVGV4dF8xXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi5rS75Yqo5pe26Ze077yaXCIpKVxuICAgIFxuICAgICAgICB0aGlzLmJ0bl9jaGFuZ2UgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJ0bl9jaGFuZ2VcIilcbiAgICAgICAgdGhpcy5idG5fY2hhbmdlLmdldENoaWxkQnlOYW1lKFwiVGV4dF80XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi5YmN5b6A5oyR5oiYXCIpKVxuICAgIFxuICAgICAgICBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlRleHRfMV8wXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi5Ymp5L2Z5qyh5pWwOlwiKSlcbiAgICAgICAgbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzJcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSAoVXRpbHMuVEkxOE4oXCLmnKzova7liankvZk6XCIpKVxuICAgICAgICB0aGlzLnJvdW5kX3RpbWUgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInJvdW5kX3RpbWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLnJvdW5kX3RpbWUuc3RyaW5nID0oXCJcIilcbiAgICAgICAgbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzJfMFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IChVdGlscy5USTE4TihcIuaJgOWcqOWMuuWfnzpcIikpXG4gICAgICAgIG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiVGV4dF8yXzBfMFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IChVdGlscy5USTE4TihcIuaMkeaImOasoeaVsDpcIikpXG4gICAgICAgIG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiVGV4dF8yXzBfMVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IChVdGlscy5USTE4TihcIuWHu+i0peaAqueJqTpcIikpXG4gICAgICAgIHRoaXMuYWVyYV90ZXh0ID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJhZXJhX3RleHRcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLmFlcmFfdGV4dC5zdHJpbmcgPShcIlwiKVxuICAgICAgICB0aGlzLmNoYW5nZV9jb3VudCA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiY2hhbmdlX2NvdW50XCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5jaGFuZ2VfY291bnQuc3RyaW5nID0oXCJcIilcbiAgICAgICAgdGhpcy5kZWZhZXRfbWFzdGVyID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJkZWZhZXRfbWFzdGVyXCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5kZWZhZXRfbWFzdGVyLnN0cmluZyA9KFwiXCIpXG4gICAgXG4gICAgICAgIHRoaXMuaXRlbV9jb3VudCA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbV9jb3VudFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRoaXMuaXRlbV9jb3VudC5zdHJpbmcgPShcIlwiKVxuICAgICAgICB0aGlzLnJlbWFpbl90aW1lID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJyZW1haW5fdGltZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRoaXMucmVtYWluX3RpbWUuc3RyaW5nID0oXCJcIilcbiAgICAgICAgdGhpcy5nb29kc19jb24gPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImdvb2RzX2NvblwiKVxuICAgICAgICB0aGlzLmdvb2RzX2Nvbl9jb250ZW50ID0gIHRoaXMuZ29vZHNfY29uLmdldENoaWxkQnlOYW1lKFwiY29udGVudFwiKVxuICAgICAgICB0aGlzLnNldERhdGEoKVxuXG4gICAgICAgIHRoaXMuY3RybC5zZW5kMjU0MTAoKVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KExpbWl0RXhlcmNpc2VFdmVudC5MaW1pdEV4ZXJjaXNlX01lc3NhZ2VfRXZlbnQsZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICBpZighZGF0YSkgcmV0dXJuO1xuXHQgICAgICAgIHRoaXMuYWN0aW9uSG9saWRheURhdGEoZGF0YSlcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KExpbWl0RXhlcmNpc2VFdmVudC5MaW1pdEV4ZXJjaXNlX0J1eUNvdW50X0V2ZW50LGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICAgICAgaWYoIWRhdGEpIHJldHVybjtcbiAgICAgICAgICAgIGlmKHRoaXMuaXRlbV9jb3VudCl7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2NvdW50LnN0cmluZyA9IGRhdGEuY291bnQgfHwgMFxuICAgICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuYnRuX2NoYW5nZS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB2YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKVxuICAgICAgICAgICAgdmFyIEJhdHRsZUNvbnN0ID0gcmVxdWlyZShcImJhdHRsZV9jb25zdFwiKVxuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnJlcXVlc3RPcGVuQmF0dGxlUmVsZXZhbmNlV2luZG93KEJhdHRsZUNvbnN0LkZpZ2h0X1R5cGUuTGltaXRFeGVyY2lzZSlcbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKVxuICAgICAgICB9LHRoaXMpXG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIPlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvblNob3c6ZnVuY3Rpb24ocGFyYW1zKXtcblxuICAgIH0sXG5cbiAgICAvLyDpnaLmnb/orr7nva7kuI3lj6/op4HnmoTlm57osIMs6L+Z6YeM5YGa5LiA5Lqb5LiN5Y+v6KeB55qE5bGP6JS95aSE55CGXG4gICAgb25IaWRlOmZ1bmN0aW9uKCl7XG5cbiAgICB9LFxuICAgIHNldFZpc2libGVTdGF0dXM6IGZ1bmN0aW9uIChib29sKSB7XG4gICAgICAgIGJvb2wgPSBib29sIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLnNldFZpc2libGUoYm9vbCk7XG4gICAgfSxcbiAgICBzZXREYXRhKCl7XG4gICAgICAgIGxldCBjb25zdF9kYXRhID0gQ29uZmlnLmhvbGlkYXlfYm9zc19uZXdfZGF0YS5kYXRhX2NvbnN0XG4gICAgICAgIGlmKGNvbnN0X2RhdGEpe1xuICAgICAgICAgICAgaWYoY29uc3RfZGF0YS5hY3Rpb25fdGltZSl7XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVfZGVzYyA9IGNvbnN0X2RhdGEuYWN0aW9uX3RpbWUuZGVzYyB8fCBcIlwiXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1haW5fdGltZS5zdHJpbmcgPSAodGltZV9kZXNjKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoY29uc3RfZGF0YS5hY3Rpb25fcHJlX3Jld2FyZCl7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFfbGlzdCA9IGNvbnN0X2RhdGEuYWN0aW9uX3ByZV9yZXdhcmQudmFsIHx8IFtdXG4gICAgICAgICAgICAgICAgbGV0IHNldHRpbmcgPSB7fVxuICAgICAgICAgICAgICAgIHNldHRpbmcuc2NhbGUgPSAwLjlcbiAgICAgICAgICAgICAgICBzZXR0aW5nLm1heF9jb3VudCA9IDRcbiAgICAgICAgICAgICAgICBzZXR0aW5nLmlzX2NlbnRlciA9IHRydWVcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnNob3dfZWZmZWN0X2lkID0gMjYzXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBVdGlscy5jb21tb25TaG93U2luZ2xlUm93SXRlbUxpc3QodGhpcy5nb29kc19jb24sIHRoaXMuaXRlbV9saXN0LCBkYXRhX2xpc3QsIHNldHRpbmcsdGhpcy5nb29kc19jb25fY29udGVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgYWN0aW9uSG9saWRheURhdGEoZGF0YSl7XG4gICAgICAgIGxldCB0aW1lID0gZGF0YS5lbmR0aW1lIHx8IDBcbiAgICAgICAgdGhpcy5zZXRDb3VudERvd25UaW1lKHRoaXMucm91bmRfdGltZSwgdGltZSAtIGdjb3JlLlNtYXJ0U29ja2V0LmdldFRpbWUoKSk7XG4gICAgICAgIHRoaXMuaXRlbV9jb3VudC5zdHJpbmcgPSAoZGF0YS5jb3VudCB8fCAwKVxuICAgICAgICB0aGlzLmFlcmFfdGV4dC5zdHJpbmcgPSBVdGlscy5USTE4TihMaW1pdEV4ZXJjaXNlQ29uc3QudHlwZVtkYXRhLm9yZGVyX3R5cGUgfHwgMV0pXG4gICAgICAgIHRoaXMuY2hhbmdlX2NvdW50LnN0cmluZyA9IChkYXRhLnJvdW5kX2NvbWJhdCB8fCAwKVxuICAgICAgICB0aGlzLmRlZmFldF9tYXN0ZXIuc3RyaW5nID0gKGRhdGEucm91bmRfYm9zcyB8fCAwKVxuICAgIH0sXG4gICAgc2V0Q291bnREb3duVGltZShsYWJlbCxsZXNzX3RpbWUpe1xuICAgICAgICBpZighbGFiZWwpe1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy50aW1lX3RpY2hldCl7XG4gICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy50aW1lX3RpY2hldCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVfdGljaGV0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZihsZXNzX3RpbWUgPiAwKXtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZUZvcm1hdFN0cmluZyhsYWJlbCxsZXNzX3RpbWUpXG4gICAgICAgICAgICB0aGlzLnRpbWVfdGljaGV0ID0gZ2NvcmUuVGltZXIuc2V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgbGVzc190aW1lLS0gXG4gICAgICAgICAgICAgICAgaWYobGVzc190aW1lIDwgMCl7XG4gICAgICAgICAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnRpbWVfdGljaGV0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lX3RpY2hldCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsLnN0cmluZyA9IChcIjAwOjAwOjAwXCIpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZUZvcm1hdFN0cmluZyhsYWJlbCxsZXNzX3RpbWUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLDEwMDAsLTEpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lRm9ybWF0U3RyaW5nKGxhYmVsLGxlc3NfdGltZSlcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2V0VGltZUZvcm1hdFN0cmluZyhsYWJlbCAsIHRpbWUgKXtcbiAgICAgICAgaWYgKHRpbWUgPiAwKXtcbiAgICAgICAgICAgIGxhYmVsLnN0cmluZyA9IFRpbWVUb29sLmdldFRpbWVGb3JtYXREYXkodGltZSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbGFiZWwuc3RyaW5nID0gXCIwMDowMDowMFwiO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyDlvZPpnaLmnb/ku47kuLvoioLngrnph4rmlL7mjonnmoTosIPnlKjmjqXlj6Ms6ZyA6KaB5omL5Yqo6LCD55SoLOiAjOS4lOS5n+S4gOWumuimgeiwg+eUqFxuICAgIG9uRGVsZXRlOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMudGltZV90aWNoZXQpe1xuICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMudGltZV90aWNoZXQpO1xuICAgICAgICAgICAgdGhpcy50aW1lX3RpY2hldCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5pdGVtX2xpc3Qpe1xuICAgICAgICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLml0ZW1fbGlzdC5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLml0ZW1fbGlzdFtpXSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2ldLmRlbGV0ZU1lKClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RbaV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH0sXG59KSJdfQ==