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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/onlinegift/view/onlinegift_window.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, '985de82FfdLXKVGAcr8CD9R', 'onlinegift_window');
// Scripts/mod/onlinegift/view/onlinegift_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: whjing2012@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-01-05 10:46:42
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var OnlinegiftController = require("onlinegift_controller");
 
var TimeTool = require("timetool");
 
var OnlinegiftWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("onlinegift", "onlinegift_windows");
    this.viewTag = SCENE_TAG.dialogue; // this.win_type = WinType.Full;               //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.item_list = {};
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.seekChild(this.root_wnd, "background");
    this.bg = this.seekChild(this.root_wnd, "bg", cc.Sprite);
    this.textTime = this.seekChild(this.bg.node, "textTime", cc.Label);
    this.content = this.seekChild(this.bg.node, "content");
    this.loadRes(PathTool.getBigBg("action/txt_cn_online_gift"), function (resObject) {
      this.bg.spriteFrame = resObject;
    }.bind(this));
    var y = 0;
 
    for (var i in Config.misc_data.data_get_time_items) {
      var config = Config.misc_data.data_get_time_items[i];
      var item = ItemsPool.getInstance().getItem("backpack_item");
      item.setParent(this.content);
      item.initConfig(null, 0.9, false, false);
      item.setData({
        bid: config.items[0][0],
        num: config.items[0][1]
      });
      item.show();
      item.config = config;
      var idx = config.index - 1;
      y = -(parseInt(idx / 4) * 125 + 55);
      item.setPosition(idx % 4 * 124 + 62, y);
      this.item_list[config.index] = item; // item.addCallBack((function(obj){
      //     OnlinegiftController.getInstance().send10927(config.index);
      // }).bind(this));
    }
 
    this.content.height = 55 - y;
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.background.on(cc.Node.EventType.TOUCH_END, function (event) {
      OnlinegiftController.getInstance().openOnlineGiftView(false);
    }, this);
 
    var OnlineGiftEvent = require("onlinegift_event");
 
    this.addGlobalEvent(OnlineGiftEvent.Get_Data, function (data) {
      this.updateData(data);
    }.bind(this));
    this.addGlobalEvent(OnlineGiftEvent.Update_Data, function (time) {
      for (var i in this.item_list) {
        var item = this.item_list[i];
 
        if (item && item.config.time == time) {
          item.setExtendTag(true, Utils.TI18N("已领取"));
          item.showItemEffect(false);
          break;
        }
      }
    }.bind(this));
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(params) {
    OnlinegiftController.getInstance().send10926();
  },
  updateData: function updateData(data) {
    var _this = this;
 
    var gift_data = OnlinegiftController.getInstance().getModel().getOnlineGiftData();
    var time = OnlinegiftController.getInstance().getModel().getOnlineTime();
    var has_list = {};
 
    for (var i in gift_data) {
      has_list[gift_data[i].time] = gift_data[i];
    }
 
    Log.info(gift_data, has_list);
    var lesstime = 0;
 
    var _loop = function _loop(_i) {
      item = _this.item_list[_i];
      t = item.config.time;
      var index = item.config.index;
 
      if (has_list[t]) {
        item.setExtendTag(true, Utils.TI18N("已领取"));
        item.setItemIconUnEnabled(true);
        item.showItemEffect(false);
        item.addCallBack(function (obj) {
          OnlinegiftController.getInstance().send10927(index);
        }.bind(_this));
        item.is_show_tips = false;
      } else if (time >= t) {
        // item.setExtendTag(false);
        item.showItemEffect(true, 263, PlayerAction.action_1, true, 1.1);
        item.addCallBack(function (obj) {
          OnlinegiftController.getInstance().send10927(index);
        }.bind(_this));
        item.is_show_tips = false;
      } else {
        lesstime = lesstime || item.config.time - time; // item.setExtendTag(false);
 
        item.showItemEffect(false);
        item.is_show_tips = true;
      }
    };
 
    for (var _i in this.item_list) {
      var item;
      var t;
 
      _loop(_i);
    }
 
    this.textTime.string = "";
 
    if (lesstime > 0) {
      this.ref_time = lesstime;
 
      if (this.timer) {
        gcore.Timer.del(this.timer);
        this.timer = null;
      }
 
      this.setLessTime();
    } else {
      this.textTime.string = TimeTool.getTimeFormat(0);
    }
  },
  setLessTime: function setLessTime() {
    if (!cc.isValid(this.textTime) || !this.ref_time) {
      return;
    }
 
    this.ref_time -= 1;
    var lesstime = this.ref_time; // Log.info("====>>>", lesstime, this.data, gcore.SmartSocket.getTime());
 
    if (lesstime > 0) {
      this.textTime.string = TimeTool.getTimeFormat(lesstime);
      this.timer = gcore.Timer.set(function () {
        if (this.timer) {
          gcore.Timer.del(this.timer);
          this.timer = null;
        }
 
        this.setLessTime();
      }.bind(this), 1000, 1);
    } else {
      this.textTime.string = "";
    }
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    for (var k in this.item_list) {
      this.item_list[k].deleteMe();
    }
 
    this.item_list = null;
 
    if (this.timer) {
      gcore.Timer.del(this.timer);
      this.timer = null;
    }
 
    OnlinegiftController.getInstance().openOnlineGiftView(false);
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxvbmxpbmVnaWZ0XFx2aWV3XFxvbmxpbmVnaWZ0X3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJPbmxpbmVnaWZ0Q29udHJvbGxlciIsIlRpbWVUb29sIiwiT25saW5lZ2lmdFdpbmRvdyIsImNjIiwiQ2xhc3MiLCJCYXNlVmlldyIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJkaWFsb2d1ZSIsImluaXRDb25maWciLCJpdGVtX2xpc3QiLCJvcGVuQ2FsbEJhY2siLCJiYWNrZ3JvdW5kIiwic2Vla0NoaWxkIiwicm9vdF93bmQiLCJiZyIsIlNwcml0ZSIsInRleHRUaW1lIiwibm9kZSIsIkxhYmVsIiwiY29udGVudCIsImxvYWRSZXMiLCJnZXRCaWdCZyIsInJlc09iamVjdCIsInNwcml0ZUZyYW1lIiwiYmluZCIsInkiLCJpIiwiQ29uZmlnIiwibWlzY19kYXRhIiwiZGF0YV9nZXRfdGltZV9pdGVtcyIsImNvbmZpZyIsIml0ZW0iLCJJdGVtc1Bvb2wiLCJnZXRJbnN0YW5jZSIsImdldEl0ZW0iLCJzZXRQYXJlbnQiLCJzZXREYXRhIiwiYmlkIiwiaXRlbXMiLCJudW0iLCJzaG93IiwiaWR4IiwiaW5kZXgiLCJwYXJzZUludCIsInNldFBvc2l0aW9uIiwiaGVpZ2h0IiwicmVnaXN0ZXJFdmVudCIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsImV2ZW50Iiwib3Blbk9ubGluZUdpZnRWaWV3IiwiT25saW5lR2lmdEV2ZW50IiwiYWRkR2xvYmFsRXZlbnQiLCJHZXRfRGF0YSIsImRhdGEiLCJ1cGRhdGVEYXRhIiwiVXBkYXRlX0RhdGEiLCJ0aW1lIiwic2V0RXh0ZW5kVGFnIiwiVXRpbHMiLCJUSTE4TiIsInNob3dJdGVtRWZmZWN0Iiwib3BlblJvb3RXbmQiLCJwYXJhbXMiLCJzZW5kMTA5MjYiLCJnaWZ0X2RhdGEiLCJnZXRNb2RlbCIsImdldE9ubGluZUdpZnREYXRhIiwiZ2V0T25saW5lVGltZSIsImhhc19saXN0IiwiTG9nIiwiaW5mbyIsImxlc3N0aW1lIiwidCIsInNldEl0ZW1JY29uVW5FbmFibGVkIiwiYWRkQ2FsbEJhY2siLCJvYmoiLCJzZW5kMTA5MjciLCJpc19zaG93X3RpcHMiLCJQbGF5ZXJBY3Rpb24iLCJhY3Rpb25fMSIsInN0cmluZyIsInJlZl90aW1lIiwidGltZXIiLCJnY29yZSIsIlRpbWVyIiwiZGVsIiwic2V0TGVzc1RpbWUiLCJnZXRUaW1lRm9ybWF0IiwiaXNWYWxpZCIsInNldCIsImNsb3NlQ2FsbEJhY2siLCJrIiwiZGVsZXRlTWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxvQkFBb0IsR0FBR0QsT0FBTyxDQUFDLHVCQUFELENBQWxDOztBQUNBLElBQUlFLFFBQVEsR0FBR0YsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBRUEsSUFBSUcsZ0JBQWdCLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQzVCLGFBQVNDLFFBRG1CO0FBRTVCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCVCxRQUFRLENBQUNVLGFBQVQsQ0FBdUIsWUFBdkIsRUFBcUMsb0JBQXJDLENBQWxCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQyxTQUFTLENBQUNDLFFBQXpCLENBRmMsQ0FHZDtBQUNILEdBTjJCO0FBUTVCO0FBQ0FDLEVBQUFBLFVBQVUsRUFBQyxzQkFBVTtBQUNqQixTQUFLQyxTQUFMLEdBQWlCLEVBQWpCO0FBQ0gsR0FYMkI7QUFhNUI7QUFDQUMsRUFBQUEsWUFBWSxFQUFDLHdCQUFVO0FBQ25CLFNBQUtDLFVBQUwsR0FBa0IsS0FBS0MsU0FBTCxDQUFlLEtBQUtDLFFBQXBCLEVBQThCLFlB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Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHdoamluZzIwMTJAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTAxLTA1IDEwOjQ2OjQyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIE9ubGluZWdpZnRDb250cm9sbGVyID0gcmVxdWlyZShcIm9ubGluZWdpZnRfY29udHJvbGxlclwiKTtcbnZhciBUaW1lVG9vbCA9IHJlcXVpcmUoXCJ0aW1ldG9vbFwiKTtcblxudmFyIE9ubGluZWdpZnRXaW5kb3cgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwib25saW5lZ2lmdFwiLCBcIm9ubGluZWdpZnRfd2luZG93c1wiKTtcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLmRpYWxvZ3VlO1xuICAgICAgICAvLyB0aGlzLndpbl90eXBlID0gV2luVHlwZS5GdWxsOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IHt9O1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMucm9vdF93bmQsIFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5iZyA9IHRoaXMuc2Vla0NoaWxkKHRoaXMucm9vdF93bmQsIFwiYmdcIiwgY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy50ZXh0VGltZSA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuYmcubm9kZSwgXCJ0ZXh0VGltZVwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMuY29udGVudCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuYmcubm9kZSwgXCJjb250ZW50XCIpO1xuICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0QmlnQmcoXCJhY3Rpb24vdHh0X2NuX29ubGluZV9naWZ0XCIpLCAoZnVuY3Rpb24ocmVzT2JqZWN0KXtcbiAgICAgICAgICAgIHRoaXMuYmcuc3ByaXRlRnJhbWUgPSByZXNPYmplY3Q7XG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xuICAgICAgICB2YXIgeSA9IDA7XG4gICAgICAgIGZvcihsZXQgaSBpbiBDb25maWcubWlzY19kYXRhLmRhdGFfZ2V0X3RpbWVfaXRlbXMpe1xuICAgICAgICAgICAgbGV0IGNvbmZpZyA9IENvbmZpZy5taXNjX2RhdGEuZGF0YV9nZXRfdGltZV9pdGVtc1tpXTtcbiAgICAgICAgICAgIGxldCBpdGVtID0gSXRlbXNQb29sLmdldEluc3RhbmNlKCkuZ2V0SXRlbShcImJhY2twYWNrX2l0ZW1cIik7XG4gICAgICAgICAgICBpdGVtLnNldFBhcmVudCh0aGlzLmNvbnRlbnQpO1xuICAgICAgICAgICAgaXRlbS5pbml0Q29uZmlnKG51bGwsIDAuOSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIGl0ZW0uc2V0RGF0YSh7YmlkOmNvbmZpZy5pdGVtc1swXVswXSwgbnVtOmNvbmZpZy5pdGVtc1swXVsxXX0pO1xuICAgICAgICAgICAgaXRlbS5zaG93KCk7XG4gICAgICAgICAgICBpdGVtLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgIGxldCBpZHggPSBjb25maWcuaW5kZXggLSAxO1xuICAgICAgICAgICAgeSA9IC0ocGFyc2VJbnQoaWR4IC8gNCkgKiAxMjUgKyA1NSk7XG4gICAgICAgICAgICBpdGVtLnNldFBvc2l0aW9uKGlkeCAlIDQgKiAxMjQgKyA2MiwgeSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtjb25maWcuaW5kZXhdID0gaXRlbTtcbiAgICAgICAgICAgIC8vIGl0ZW0uYWRkQ2FsbEJhY2soKGZ1bmN0aW9uKG9iail7XG4gICAgICAgICAgICAvLyAgICAgT25saW5lZ2lmdENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZW5kMTA5MjcoY29uZmlnLmluZGV4KTtcbiAgICAgICAgICAgIC8vIH0pLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGVudC5oZWlnaHQgPSA1NSAtIHk7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgIE9ubGluZWdpZnRDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3Blbk9ubGluZUdpZnRWaWV3KGZhbHNlKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIHZhciBPbmxpbmVHaWZ0RXZlbnQgPSByZXF1aXJlKFwib25saW5lZ2lmdF9ldmVudFwiKTtcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChPbmxpbmVHaWZ0RXZlbnQuR2V0X0RhdGEsIChmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YShkYXRhKTtcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoT25saW5lR2lmdEV2ZW50LlVwZGF0ZV9EYXRhLCAoZnVuY3Rpb24odGltZSl7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gdGhpcy5pdGVtX2xpc3Qpe1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5pdGVtX2xpc3RbaV07XG4gICAgICAgICAgICAgICAgaWYoaXRlbSAmJiBpdGVtLmNvbmZpZy50aW1lID09IHRpbWUpe1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEV4dGVuZFRhZyh0cnVlLCBVdGlscy5USTE4TihcIuW3sumihuWPllwiKSk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2hvd0l0ZW1FZmZlY3QoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihwYXJhbXMpe1xuICAgICAgICBPbmxpbmVnaWZ0Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNlbmQxMDkyNigpXG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGEgOiBmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdmFyIGdpZnRfZGF0YSA9IE9ubGluZWdpZnRDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRPbmxpbmVHaWZ0RGF0YSgpO1xuICAgICAgICB2YXIgdGltZSA9IE9ubGluZWdpZnRDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRPbmxpbmVUaW1lKCk7XG4gICAgICAgIHZhciBoYXNfbGlzdCA9IHt9O1xuICAgICAgICBmb3IobGV0IGkgaW4gZ2lmdF9kYXRhKXtcbiAgICAgICAgICAgIGhhc19saXN0W2dpZnRfZGF0YVtpXS50aW1lXSA9IGdpZnRfZGF0YVtpXTtcbiAgICAgICAgfVxuICAgICAgICBMb2cuaW5mbyhnaWZ0X2RhdGEsIGhhc19saXN0KTtcbiAgICAgICAgdmFyIGxlc3N0aW1lID0gMDtcbiAgICAgICAgZm9yKGxldCBpIGluIHRoaXMuaXRlbV9saXN0KXtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5pdGVtX2xpc3RbaV07XG4gICAgICAgICAgICB2YXIgdCA9IGl0ZW0uY29uZmlnLnRpbWU7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSBpdGVtLmNvbmZpZy5pbmRleFxuICAgICAgICAgICAgaWYoaGFzX2xpc3RbdF0pe1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0RXh0ZW5kVGFnKHRydWUsIFV0aWxzLlRJMThOKFwi5bey6aKG5Y+WXCIpKTtcbiAgICAgICAgICAgICAgICBpdGVtLnNldEl0ZW1JY29uVW5FbmFibGVkKHRydWUpXG4gICAgICAgICAgICAgICAgaXRlbS5zaG93SXRlbUVmZmVjdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgaXRlbS5hZGRDYWxsQmFjaygoZnVuY3Rpb24ob2JqKXtcbiAgICAgICAgICAgICAgICAgICAgT25saW5lZ2lmdENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZW5kMTA5MjcoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH0pLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIGl0ZW0uaXNfc2hvd190aXBzID0gZmFsc2VcbiAgICAgICAgICAgIH1lbHNlIGlmKHRpbWUgPj0gdCl7XG4gICAgICAgICAgICAgICAgLy8gaXRlbS5zZXRFeHRlbmRUYWcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGl0ZW0uc2hvd0l0ZW1FZmZlY3QodHJ1ZSwgMjYzLCBQbGF5ZXJBY3Rpb24uYWN0aW9uXzEsIHRydWUsIDEuMSk7XG4gICAgICAgICAgICAgICAgaXRlbS5hZGRDYWxsQmFjaygoZnVuY3Rpb24ob2JqKXtcbiAgICAgICAgICAgICAgICAgICAgT25saW5lZ2lmdENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZW5kMTA5MjcoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH0pLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIGl0ZW0uaXNfc2hvd190aXBzID0gZmFsc2VcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGxlc3N0aW1lID0gbGVzc3RpbWUgfHwgaXRlbS5jb25maWcudGltZSAtIHRpbWU7XG4gICAgICAgICAgICAgICAgLy8gaXRlbS5zZXRFeHRlbmRUYWcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGl0ZW0uc2hvd0l0ZW1FZmZlY3QoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGl0ZW0uaXNfc2hvd190aXBzID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudGV4dFRpbWUuc3RyaW5nID0gXCJcIjtcbiAgICAgICAgaWYobGVzc3RpbWUgPiAwKXtcbiAgICAgICAgICAgIHRoaXMucmVmX3RpbWUgPSBsZXNzdGltZVxuICAgICAgICAgICAgaWYodGhpcy50aW1lcil7XG4gICAgICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMudGltZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRMZXNzVGltZSgpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMudGV4dFRpbWUuc3RyaW5nID0gVGltZVRvb2wuZ2V0VGltZUZvcm1hdCgwKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRMZXNzVGltZSA6IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKCFjYy5pc1ZhbGlkKHRoaXMudGV4dFRpbWUpIHx8ICF0aGlzLnJlZl90aW1lKXtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZl90aW1lIC09IDFcbiAgICAgICAgbGV0IGxlc3N0aW1lID0gdGhpcy5yZWZfdGltZVxuICAgICAgICAvLyBMb2cuaW5mbyhcIj09PT0+Pj5cIiwgbGVzc3RpbWUsIHRoaXMuZGF0YSwgZ2NvcmUuU21hcnRTb2NrZXQuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYobGVzc3RpbWUgPiAwKXtcbiAgICAgICAgICAgIHRoaXMudGV4dFRpbWUuc3RyaW5nID0gVGltZVRvb2wuZ2V0VGltZUZvcm1hdChsZXNzdGltZSk7XG4gICAgICAgICAgICB0aGlzLnRpbWVyID0gZ2NvcmUuVGltZXIuc2V0KChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGlmKHRoaXMudGltZXIpe1xuICAgICAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy50aW1lcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldExlc3NUaW1lKCk7XG4gICAgICAgICAgICB9KS5iaW5kKHRoaXMpLCAxMDAwLCAxKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLnRleHRUaW1lLnN0cmluZyA9IFwiXCI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5YWz6Zet56qX5L2T5Zue6LCDLOmcgOimgeWcqOi/memHjOiwg+eUqOivpeeql+S9k+aJgOWxnmNvbnRyb2xsZXLnmoRjbG9zZeaWueazleayoeeUqOS6jue9ruepuuivpeeql+S9k+WunuS+i+WvueixoVxuICAgIGNsb3NlQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgZm9yKGxldCBrIGluIHRoaXMuaXRlbV9saXN0KXtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2tdLmRlbGV0ZU1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBudWxsO1xuICAgICAgICBpZih0aGlzLnRpbWVyKXtcbiAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIE9ubGluZWdpZnRDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3Blbk9ubGluZUdpZnRWaWV3KGZhbHNlKTtcbiAgICB9LFxufSlcbiJdfQ==