|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/action/view/action_main_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, 'd08cbyACEhKK734Odnrhx6G', 'action_main_window');
|
// Scripts/mod/action/view/action_main_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 活动主界面
|
// <br/>Create: 2019-04-18 16:29:40
|
// --------------------------------------------------------------------
|
var ActionConst = require("action_const");
|
|
var PathTool = require("pathtool");
|
|
var ActionController = require("action_controller");
|
|
var ActionEvent = require("action_event");
|
|
var MainuiConst = require("mainui_const");
|
|
var Action_mainWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("welfare", "welfare_main_view"); // this.viewTag = SCENE_TAG.ui; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Full; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.ctrl = ActionController.getInstance();
|
this.model = this.ctrl.getModel();
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
this.sub_list = [];
|
this.tab_list = {};
|
this.panel_list = {};
|
this.tab_width = 78;
|
this.off_space = 50;
|
this.selected_tab = null;
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
this.background = this.seekChild("background");
|
this.background.scale = this.background.scale * FIT_SCALE;
|
this.main_container_nd = this.seekChild("main_container");
|
this.main_panel_nd = this.seekChild(this.main_container_nd, "main_panel");
|
this.container_nd = this.seekChild(this.main_panel_nd, "container");
|
this.close_btn_nd = this.seekChild(this.main_container_nd, "close_btn");
|
this.tab_container_nd = this.seekChild(this.main_container_nd, "tab_container");
|
this.tab_scroll_nd = this.seekChild(this.tab_container_nd, "tab_scroll");
|
this.tab_scroll_sv = this.seekChild(this.tab_container_nd, "tab_scroll", cc.ScrollView);
|
this.tab_scroll_content_nd = this.seekChild(this.tab_scroll_nd, "content");
|
this.loadRes(PathTool.getBigBg("welfare/welfare_bg", "jpg"), function (res) {
|
this.background.getComponent(cc.Sprite).spriteFrame = res;
|
}.bind(this));
|
this.loadRes(PathTool.getBigBg("welfare/welfare_bg_1"), function (res) {
|
this.main_panel_nd.getChildByName("tab_sprite_bg").getComponent(cc.Sprite).spriteFrame = res;
|
}.bind(this));
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
Utils.onTouchEnd(this.close_btn_nd, function () {
|
Utils.playButtonSound(2);
|
this.ctrl.openActionMainPanel(false);
|
}.bind(this), 1);
|
this.addGlobalEvent(ActionEvent.UPDATE_HOLIDAY_TAB_STATUS, function (function_id, vo) {
|
if (function_id != this.function_id) return;
|
this.setTabStatus(vo.bid);
|
}.bind(this));
|
this.addGlobalEvent(ActionEvent.SHOW_ACTIVITY_RED_POINT, function (bid, status) {
|
this.setSpecialTabStatus(bid, status);
|
}.bind(this));
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(params) {
|
this.function_id = params.function_id || MainuiConst.icon.action;
|
this.sub_list = this.ctrl.getActionSubList(this.function_id);
|
this.action_bid = params.action_bid;
|
this.createSubType();
|
},
|
createSubType: function createSubType() {
|
var self = this;
|
|
if (this.sub_list == null || Utils.next(this.sub_list) == null) {} else {
|
var sum = self.sub_list.length;
|
var max_width = sum * (this.tab_width + this.off_space) + 110;
|
this.max_width = Math.max(this.tab_scroll_nd.width, max_width);
|
this.tab_scroll_content_nd.width = this.max_width;
|
this.tab_scroll_sv.scrollToLeft(0);
|
|
var call_back = function (item) {
|
this.handleSelectedTab(item);
|
}.bind(this);
|
|
var index_selected = 0;
|
var tab_item = null;
|
var _x = null;
|
var data = null;
|
|
for (var i = 0; i < sum; i++) {
|
data = this.sub_list[i];
|
|
if (data != null && data.bid != null && this.tab_list[data.bid] == null) {
|
var WelfareTab = require("welfare_tab_panel");
|
|
tab_item = new WelfareTab();
|
tab_item.show();
|
tab_item.setData(data);
|
_x = i * (this.tab_width + this.off_space) + 110;
|
tab_item.setPosition(_x, -68);
|
tab_item.setClickCallBack(call_back);
|
tab_item.setParent(this.tab_scroll_content_nd);
|
this.tab_list[data.bid] = tab_item; //设置红点状态
|
|
this.setTabStatus(data.bid);
|
}
|
} //手动设置选中第一个
|
|
|
if (this.action_bid) {
|
this.handleSelectedTab(this.tab_list[this.action_bid]);
|
} else {
|
this.handleSelectedTab(this.tab_list[this.sub_list[0].bid]);
|
}
|
}
|
},
|
handleSelectedTab: function handleSelectedTab(tab) {
|
if (this.selected_tab != null && this.selected_tab == tab) return;
|
|
if (this.selected_tab != null) {
|
this.selected_tab.setSelected(false);
|
}
|
|
this.selected_tab = tab;
|
|
if (this.selected_tab != null) {
|
this.selected_tab.setSelected(true);
|
}
|
|
this.changePanelByTab();
|
},
|
changePanelByTab: function changePanelByTab() {
|
if (this.selected_tab == null || this.selected_tab.data == null) return;
|
var data = this.selected_tab.data;
|
if (data.bid == null || data.bid == 0) return;
|
|
if (this.selected_panel != null) {
|
if (this.selected_panel.setVisibleStatus) {
|
this.selected_panel.setVisibleStatus(false);
|
} else {
|
this.selected_panel.setVisible(false);
|
}
|
|
this.selected_panel = null;
|
}
|
|
if (this.panel_list[data.bid] == null) {
|
var panel_type = data.panel_type;
|
|
if (data.panel_type == 18 || data.panel_type == 12 || data.panel_type == 21 || data.panel_type == 23 || data.panel_type == 22) {
|
panel_type = 16;
|
}
|
|
var view_str = ActionConst.ActionPanelTypeView[panel_type];
|
|
if (view_str) {
|
if (this.panel_list[data.bid] == null) {
|
this.panel_list[data.bid] = Utils.createClass(view_str, data.bid);
|
this.panel_list[data.bid].show({
|
bid: data.bid,
|
function_id: this.function_id
|
});
|
this.panel_list[data.bid].setParent(this.container_nd);
|
}
|
}
|
}
|
|
this.selected_panel = this.panel_list[data.bid];
|
|
if (this.selected_panel != null) {
|
if (this.selected_panel.setVisibleStatus) {
|
this.selected_panel.setVisibleStatus(true);
|
} else {
|
this.selected_panel.setVisible(true);
|
}
|
}
|
},
|
setTabStatus: function setTabStatus(bid) {
|
var vo = this.ctrl.getHolidayAweradsStatus(bid);
|
var tab_item = this.tab_list[bid];
|
if (tab_item == null) return;
|
|
if (vo == null || vo.status == false) {
|
if (tab_item.updateTipsStatus) {
|
tab_item.updateTipsStatus(false);
|
}
|
} else {
|
if (tab_item.updateTipsStatus) {
|
tab_item.updateTipsStatus(true);
|
}
|
} //特殊活动红点
|
|
|
var status = this.model.getGiftRedStatusByBid(bid);
|
this.setSpecialTabStatus(bid, status);
|
},
|
isSpecialTabByBid: function isSpecialTabByBid(bid) {
|
return bid == ActionConst.ActionRankCommonType.high_value_gift || bid == ActionConst.ActionRankCommonType.mysterious_store;
|
},
|
setSpecialTabStatus: function setSpecialTabStatus(bid, status) {
|
if (this.specail_tab_status && this.specail_tab_status == status) return;
|
this.specail_tab_status = status;
|
|
if (this.isSpecialTabByBid(bid)) {
|
var tab_item = this.tab_list[bid];
|
if (tab_item == null) return;
|
|
if (!status) {
|
if (tab_item.updateTipsStatus) {
|
tab_item.updateTipsStatus(false);
|
}
|
} else {
|
if (tab_item.updateTipsStatus) {
|
tab_item.updateTipsStatus(true);
|
}
|
}
|
}
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
for (var k in this.tab_list) {
|
if (this.tab_list[k].deleteMe) {
|
this.tab_list[k].deleteMe();
|
this.tab_list[k] = null;
|
}
|
}
|
|
this.tab_list = null;
|
|
for (var k in this.panel_list) {
|
if (this.panel_list[k].deleteMe) {
|
this.panel_list[k].deleteMe();
|
this.panel_list[k] = null;
|
}
|
}
|
|
this.panel_list = null;
|
this.selected_tab = null;
|
this.ctrl.openActionMainPanel(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxhY3Rpb25cXHZpZXdcXGFjdGlvbl9tYWluX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJBY3Rpb25Db25zdCIsInJlcXVpcmUiLCJQYXRoVG9vbCIsIkFjdGlvbkNvbnRyb2xsZXIiLCJBY3Rpb25FdmVudCIsIk1haW51aUNvbnN0IiwiQWN0aW9uX21haW5XaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJGdWxsIiwiY3RybCIsImdldEluc3RhbmNlIiwibW9kZWwiLCJnZXRNb2RlbCIsImluaXRDb25maWciLCJzdWJfbGlzdCIsInRhYl9saXN0IiwicGFuZWxfbGlzdCIsInRhYl93aWR0aCIsIm9mZl9zcGFjZSIsInNlbGVjdGVkX3RhYiIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJzZWVrQ2hpbGQiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsIm1haW5fY29udGFpbmVyX25kIiwibWFpbl9wYW5lbF9uZCIsImNvbnRhaW5lcl9uZCIsImNsb3NlX2J0bl9uZCIsInRhYl9jb250YWluZXJfbmQiLCJ0YWJfc2Nyb2xsX25kIiwidGFiX3Njcm9sbF9zdiIsIlNjcm9sbFZpZXciLCJ0YWJfc2Nyb2xsX2NvbnRlbnRfbmQiLCJsb2FkUmVzIiwiZ2V0QmlnQmciLCJyZXMiLCJnZXRDb21wb25lbnQiLCJTcHJpdGUiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJnZXRDaGlsZEJ5TmFtZSIsInJlZ2lzdGVyRXZlbnQiLCJVdGlscyIsIm9uVG91Y2hFbmQiLCJwbGF5QnV0dG9uU291bmQiLCJvcGVuQWN0aW9uTWFpblBhbmVsIiwiYWRkR2xvYmFsRXZlbnQiLCJVUERBVEVfSE9MSURBWV9UQUJfU1RBVFVTIiwiZnVuY3Rpb25faWQiLCJ2byIsInNldFRhYlN0YXR1cyIsImJpZCIsIlNIT1dfQUNUSVZJVFlfUkVEX1BPSU5UIiwic3RhdHVzIiwic2V0U3BlY2lhbFRhYlN0YXR1cyIsIm9wZW5Sb290V25kIiwicGFyYW1zIiwiaWNvbiIsImFjdGlvbiIsImdldEFjdGlvblN1Ykxpc3QiLCJhY3Rpb25fYmlkIiwiY3JlYXRlU3ViVHlwZSIsInNlbGYiLCJuZXh0Iiwic3VtIiwibGVuZ3RoIiwibWF4X3dpZHRoIiwiTWF0aCIsIm1heCIsIndpZHRoIiwic2Nyb2xsVG9MZWZ0IiwiY2FsbF9iYWNrIiwiaXRlbSIsImhhbmRsZVNlbGVjdGVkVGFiIiwiaW5kZXhfc2VsZWN0ZWQiLCJ0YWJfaXRlbSIsIl94IiwiZGF0YSIsImkiLCJXZWxmYXJlVGFiIiwic2hvdyIsInNldERhdGEiLCJzZXRQb3NpdGlvbiIsInNldENsaWNrQ2FsbEJhY2siLCJzZXRQYXJlbnQiLCJ0YWIiLCJzZXRTZWxlY3RlZCIsImNoYW5nZVBhbmVsQnlUYWIiLCJzZWxlY3RlZF9wYW5lbCIsInNldFZpc2libGVTdGF0dXMiLCJzZXRWaXNpYmxlIiwicGFuZWxfdHlwZSIsInZpZXdfc3RyIiwiQWN0aW9uUGFuZWxUeXBlVmlldyIsImNyZWF0ZUNsYXNzIiwiZ2V0SG9saWRheUF3ZXJhZHNTdGF0dXMiLCJ1cGRhdGVUaXBzU3RhdHVzIiwiZ2V0R2lmdFJlZFN0YXR1c0J5QmlkIiwiaXNTcGVjaWFsVGFiQnlCaWQiLCJBY3Rpb25SYW5rQ29tbW9uVHlwZSIsImhpZ2hfdmFsdWVfZ2lmdCIsIm15c3RlcmlvdXNfc3RvcmUiLCJzcGVjYWlsX3RhYl9zdGF0dXMiLCJjbG9zZUNhbGxCYWNrIiwiayIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFdBQVcsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsSUFBSUMsUUFBUSxHQUFHRCxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJRSxnQkFBZ0IsR0FBR0YsT0FBTyxDQUFDLG1CQUFELENBQTlCOztB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O0FBeE40QixDQUFULENBQXhCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg5rS75Yqo5Li755WM6Z2iXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wNC0xOCAxNjoyOTo0MFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBBY3Rpb25Db25zdCA9IHJlcXVpcmUoXCJhY3Rpb25fY29uc3RcIik7XG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQWN0aW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpb25fY29udHJvbGxlclwiKVxudmFyIEFjdGlvbkV2ZW50ID0gcmVxdWlyZShcImFjdGlvbl9ldmVudFwiKTtcbnZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG5cbnZhciBBY3Rpb25fbWFpbldpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJ3ZWxmYXJlXCIsIFwid2VsZmFyZV9tYWluX3ZpZXdcIik7XG4gICAgICAgIC8vIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy51aTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkZ1bGw7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN1Yl9saXN0ID0gW107XG4gICAgICAgIHRoaXMudGFiX2xpc3QgPSB7fTtcbiAgICAgICAgdGhpcy5wYW5lbF9saXN0ID0ge31cbiAgICAgICAgdGhpcy50YWJfd2lkdGggPSA3ODtcbiAgICAgICAgdGhpcy5vZmZfc3BhY2UgPSA1MDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZF90YWIgPSBudWxsO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMuc2Vla0NoaWxkKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gdGhpcy5iYWNrZ3JvdW5kLnNjYWxlICogRklUX1NDQUxFO1xuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyX25kID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX2NvbnRhaW5lclwiKTtcblxuICAgICAgICB0aGlzLm1haW5fcGFuZWxfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fY29udGFpbmVyX25kLCBcIm1haW5fcGFuZWxcIik7XG4gICAgICAgIHRoaXMuY29udGFpbmVyX25kID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3BhbmVsX25kLCBcImNvbnRhaW5lclwiKTtcblxuICAgICAgICB0aGlzLmNsb3NlX2J0bl9uZCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9jb250YWluZXJfbmQsIFwiY2xvc2VfYnRuXCIpO1xuICAgICAgICB0aGlzLnRhYl9jb250YWluZXJfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fY29udGFpbmVyX25kLCBcInRhYl9jb250YWluZXJcIik7XG4gICAgICAgIHRoaXMudGFiX3Njcm9sbF9uZCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMudGFiX2NvbnRhaW5lcl9uZCwgXCJ0YWJfc2Nyb2xsXCIpO1xuICAgICAgICB0aGlzLnRhYl9zY3JvbGxfc3YgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnRhYl9jb250YWluZXJfbmQsIFwidGFiX3Njcm9sbFwiLCBjYy5TY3JvbGxWaWV3KTtcbiAgICAgICAgdGhpcy50YWJfc2Nyb2xsX2NvbnRlbnRfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnRhYl9zY3JvbGxfbmQsIFwiY29udGVudFwiKTtcblxuICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0QmlnQmcoXCJ3ZWxmYXJlL3dlbGZhcmVfYmdcIixcImpwZ1wiKSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gcmVzXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEJpZ0JnKFwid2VsZmFyZS93ZWxmYXJlX2JnXzFcIiksIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMubWFpbl9wYW5lbF9uZC5nZXRDaGlsZEJ5TmFtZShcInRhYl9zcHJpdGVfYmdcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY2xvc2VfYnRuX25kLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMilcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuQWN0aW9uTWFpblBhbmVsKGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEFjdGlvbkV2ZW50LlVQREFURV9IT0xJREFZX1RBQl9TVEFUVVMsIGZ1bmN0aW9uIChmdW5jdGlvbl9pZCwgdm8pIHtcbiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9pZCAhPSB0aGlzLmZ1bmN0aW9uX2lkKSByZXR1cm5cbiAgICAgICAgICAgIHRoaXMuc2V0VGFiU3RhdHVzKHZvLmJpZClcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEFjdGlvbkV2ZW50LlNIT1dfQUNUSVZJVFlfUkVEX1BPSU5ULCBmdW5jdGlvbiAoYmlkLCBzdGF0dXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BlY2lhbFRhYlN0YXR1cyhiaWQsIHN0YXR1cylcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB0aGlzLmZ1bmN0aW9uX2lkID0gcGFyYW1zLmZ1bmN0aW9uX2lkIHx8IE1haW51aUNvbnN0Lmljb24uYWN0aW9uO1xuICAgICAgICB0aGlzLnN1Yl9saXN0ID0gdGhpcy5jdHJsLmdldEFjdGlvblN1Ykxpc3QodGhpcy5mdW5jdGlvbl9pZCk7XG4gICAgICAgIHRoaXMuYWN0aW9uX2JpZCA9IHBhcmFtcy5hY3Rpb25fYmlkO1xuICAgICAgICB0aGlzLmNyZWF0ZVN1YlR5cGUoKTtcbiAgICB9LFxuICAgIGNyZWF0ZVN1YlR5cGUoKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBpZiAodGhpcy5zdWJfbGlzdCA9PSBudWxsIHx8IFV0aWxzLm5leHQodGhpcy5zdWJfbGlzdCkgPT0gbnVsbCkge1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgc3VtID0gc2VsZi5zdWJfbGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgbWF4X3dpZHRoID0gc3VtICogKHRoaXMudGFiX3dpZHRoICsgdGhpcy5vZmZfc3BhY2UpICsgMTEwO1xuICAgICAgICAgICAgdGhpcy5tYXhfd2lkdGggPSBNYXRoLm1heCh0aGlzLnRhYl9zY3JvbGxfbmQud2lkdGgsIG1heF93aWR0aCk7XG4gICAgICAgICAgICB0aGlzLnRhYl9zY3JvbGxfY29udGVudF9uZC53aWR0aCA9IHRoaXMubWF4X3dpZHRoXG4gICAgICAgICAgICB0aGlzLnRhYl9zY3JvbGxfc3Yuc2Nyb2xsVG9MZWZ0KDApO1xuICAgICAgICAgICAgdmFyIGNhbGxfYmFjayA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RlZFRhYihpdGVtKVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICAgICBsZXQgaW5kZXhfc2VsZWN0ZWQgPSAwO1xuICAgICAgICAgICAgbGV0IHRhYl9pdGVtID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBfeCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1bTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuc3ViX2xpc3RbaV07XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiBkYXRhLmJpZCAhPSBudWxsICYmIHRoaXMudGFiX2xpc3RbZGF0YS5iaWRdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFdlbGZhcmVUYWIgPSByZXF1aXJlKFwid2VsZmFyZV90YWJfcGFuZWxcIik7XG4gICAgICAgICAgICAgICAgICAgIHRhYl9pdGVtID0gbmV3IFdlbGZhcmVUYWIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGFiX2l0ZW0uc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICB0YWJfaXRlbS5zZXREYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBfeCA9IChpKSAqICh0aGlzLnRhYl93aWR0aCArIHRoaXMub2ZmX3NwYWNlKSArIDExMDtcbiAgICAgICAgICAgICAgICAgICAgdGFiX2l0ZW0uc2V0UG9zaXRpb24oX3gsIC02OCk7XG4gICAgICAgICAgICAgICAgICAgIHRhYl9pdGVtLnNldENsaWNrQ2FsbEJhY2soY2FsbF9iYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGFiX2l0ZW0uc2V0UGFyZW50KHRoaXMudGFiX3Njcm9sbF9jb250ZW50X25kKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJfbGlzdFtkYXRhLmJpZF0gPSB0YWJfaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgLy/orr7nva7nuqLngrnnirbmgIFcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJTdGF0dXMoZGF0YS5iaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5omL5Yqo6K6+572u6YCJ5Lit56ys5LiA5LiqXG4gICAgICAgICAgICBpZih0aGlzLmFjdGlvbl9iaWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0ZWRUYWIodGhpcy50YWJfbGlzdFt0aGlzLmFjdGlvbl9iaWRdKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0ZWRUYWIodGhpcy50YWJfbGlzdFt0aGlzLnN1Yl9saXN0WzBdLmJpZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVTZWxlY3RlZFRhYjogZnVuY3Rpb24gKHRhYikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZF90YWIgIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkX3RhYiA9PSB0YWIpIHJldHVyblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZF90YWIgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZF90YWIuc2V0U2VsZWN0ZWQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRfdGFiID0gdGFiO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZF90YWIgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZF90YWIuc2V0U2VsZWN0ZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VQYW5lbEJ5VGFiKCk7XG4gICAgfSxcbiAgICBjaGFuZ2VQYW5lbEJ5VGFiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkX3RhYiA9PSBudWxsIHx8IHRoaXMuc2VsZWN0ZWRfdGFiLmRhdGEgPT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5zZWxlY3RlZF90YWIuZGF0YTtcbiAgICAgICAgaWYgKGRhdGEuYmlkID09IG51bGwgfHwgZGF0YS5iaWQgPT0gMCkgcmV0dXJuXG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRfcGFuZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRfcGFuZWwuc2V0VmlzaWJsZVN0YXR1cykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRfcGFuZWwuc2V0VmlzaWJsZVN0YXR1cyhmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRfcGFuZWwuc2V0VmlzaWJsZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRfcGFuZWwgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFuZWxfbGlzdFtkYXRhLmJpZF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IHBhbmVsX3R5cGUgPSBkYXRhLnBhbmVsX3R5cGVcbiAgICAgICAgICAgIGlmIChkYXRhLnBhbmVsX3R5cGUgPT0gMTggfHwgZGF0YS5wYW5lbF90eXBlID09IDEyIHx8IGRhdGEucGFuZWxfdHlwZSA9PSAyMSB8fCBkYXRhLnBhbmVsX3R5cGUgPT0gMjMgfHwgZGF0YS5wYW5lbF90eXBlID09IDIyKSB7XG4gICAgICAgICAgICAgICAgcGFuZWxfdHlwZSA9IDE2XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmlld19zdHIgPSBBY3Rpb25Db25zdC5BY3Rpb25QYW5lbFR5cGVWaWV3W3BhbmVsX3R5cGVdO1xuICAgICAgICAgICAgaWYgKHZpZXdfc3RyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFuZWxfbGlzdFtkYXRhLmJpZF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVsX2xpc3RbZGF0YS5iaWRdID0gVXRpbHMuY3JlYXRlQ2xhc3Modmlld19zdHIsZGF0YS5iaWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVsX2xpc3RbZGF0YS5iaWRdLnNob3coe2JpZDpkYXRhLmJpZCxmdW5jdGlvbl9pZDp0aGlzLmZ1bmN0aW9uX2lkfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZWxfbGlzdFtkYXRhLmJpZF0uc2V0UGFyZW50KHRoaXMuY29udGFpbmVyX25kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkX3BhbmVsID0gdGhpcy5wYW5lbF9saXN0W2RhdGEuYmlkXTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZF9wYW5lbCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZF9wYW5lbC5zZXRWaXNpYmxlU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZF9wYW5lbC5zZXRWaXNpYmxlU3RhdHVzKHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkX3BhbmVsLnNldFZpc2libGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0VGFiU3RhdHVzKGJpZCkge1xuICAgICAgICBsZXQgdm8gPSB0aGlzLmN0cmwuZ2V0SG9saWRheUF3ZXJhZHNTdGF0dXMoIGJpZClcbiAgICAgICAgbGV0IHRhYl9pdGVtID0gdGhpcy50YWJfbGlzdFtiaWRdXG4gICAgICAgIGlmICh0YWJfaXRlbSA9PSBudWxsKSByZXR1cm47XG4gICAgICAgIGlmICh2byA9PSBudWxsIHx8IHZvLnN0YXR1cyA9PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRhYl9pdGVtLnVwZGF0ZVRpcHNTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICB0YWJfaXRlbS51cGRhdGVUaXBzU3RhdHVzKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRhYl9pdGVtLnVwZGF0ZVRpcHNTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICB0YWJfaXRlbS51cGRhdGVUaXBzU3RhdHVzKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/nibnmrormtLvliqjnuqLngrlcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMubW9kZWwuZ2V0R2lmdFJlZFN0YXR1c0J5QmlkKGJpZCk7XG4gICAgICAgIHRoaXMuc2V0U3BlY2lhbFRhYlN0YXR1cyhiaWQsIHN0YXR1cylcbiAgICB9LFxuXG4gICAgaXNTcGVjaWFsVGFiQnlCaWQ6ZnVuY3Rpb24oYmlkKXtcbiAgICAgICAgcmV0dXJuIGJpZCA9PSBBY3Rpb25Db25zdC5BY3Rpb25SYW5rQ29tbW9uVHlwZS5oaWdoX3ZhbHVlX2dpZnQgfHwgYmlkID09IEFjdGlvbkNvbnN0LkFjdGlvblJhbmtDb21tb25UeXBlLm15c3RlcmlvdXNfc3RvcmVcbiAgICB9LFxuXG4gICAgc2V0U3BlY2lhbFRhYlN0YXR1czpmdW5jdGlvbihiaWQsc3RhdHVzKXtcbiAgICAgICAgaWYodGhpcy5zcGVjYWlsX3RhYl9zdGF0dXMgJiYgdGhpcy5zcGVjYWlsX3RhYl9zdGF0dXMgPT0gc3RhdHVzKSAgcmV0dXJuXG5cbiAgICAgICAgdGhpcy5zcGVjYWlsX3RhYl9zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIGlmKHRoaXMuaXNTcGVjaWFsVGFiQnlCaWQoYmlkKSl7XG4gICAgICAgICAgICB2YXIgdGFiX2l0ZW0gPSB0aGlzLnRhYl9saXN0W2JpZF07XG4gICAgICAgICAgICBpZih0YWJfaXRlbSA9PSBudWxsKXJldHVyblxuICAgICAgICAgICAgaWYoIXN0YXR1cyl7XG4gICAgICAgICAgICAgICAgaWYodGFiX2l0ZW0udXBkYXRlVGlwc1N0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgIHRhYl9pdGVtLnVwZGF0ZVRpcHNTdGF0dXMoZmFsc2UpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgaWYodGFiX2l0ZW0udXBkYXRlVGlwc1N0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgIHRhYl9pdGVtLnVwZGF0ZVRpcHNTdGF0dXModHJ1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5YWz6Zet56qX5L2T5Zue6LCDLOmcgOimgeWcqOi/memHjOiwg+eUqOivpeeql+S9k+aJgOWxnmNvbnRyb2xsZXLnmoRjbG9zZeaWueazleayoeeUqOS6jue9ruepuuivpeeql+S9k+WunuS+i+WvueixoVxuICAgIGNsb3NlQ2FsbEJhY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnRhYl9saXN0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy50YWJfbGlzdFtrXS5kZWxldGVNZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFiX2xpc3Rba10uZGVsZXRlTWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9saXN0W2tdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYl9saXN0ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnBhbmVsX2xpc3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhbmVsX2xpc3Rba10uZGVsZXRlTWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsX2xpc3Rba10uZGVsZXRlTWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsX2xpc3Rba10gPSBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYW5lbF9saXN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZF90YWIgPSBudWxsO1xuICAgICAgICB0aGlzLmN0cmwub3BlbkFjdGlvbk1haW5QYW5lbChmYWxzZSk7XG4gICAgfSxcbn0pIl19
|