|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/vedio/view/vedio_collect_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, '6b6a2Ngwu5CLaSrT9lrtvei', 'vedio_collect_window');
|
// Scripts/mod/vedio/view/vedio_collect_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 录像收藏界面
|
// <br/>Create: 2019-05-22 14:22:43
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var CommonScrollView = require("common_scrollview");
|
|
var VedioController = require("vedio_controller");
|
|
var VedioConst = require("vedio_const");
|
|
var VedioMainItem = require("vedio_item_panel");
|
|
var VedioEvent = require("vedio_event");
|
|
var RoleController = require("role_controller");
|
|
var ChatConst = require("chat_const");
|
|
var VedioCollectWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("vedio", "vedio_collect_window");
|
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.big; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.ctrl = VedioController.getInstance();
|
this._model = this.ctrl.getModel();
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
var self = this;
|
self.background = self.root_wnd.getChildByName("background");
|
var main_container = self.root_wnd.getChildByName("main_container");
|
self.main_container = main_container;
|
self.share_panel = self.root_wnd.getChildByName("share_panel");
|
self.share_panel.active = false;
|
self.share_bg = self.share_panel.getChildByName("share_bg");
|
self.btn_guild = self.share_bg.getChildByName("btn_guild");
|
self.btn_world = self.share_bg.getChildByName("btn_world");
|
self.btn_cross = self.share_bg.getChildByName("btn_cross");
|
self.share_bg.getChildByName("guild_label").getComponent(cc.Label).string = Utils.TI18N("分享到公会频道");
|
self.share_bg.getChildByName("world_label").getComponent(cc.Label).string = Utils.TI18N("分享到世界频道"); // self.share_bg.getChildByName("cross_label"):setString(TI18N("分享到跨服频道"))
|
|
var win_title = main_container.getChildByName("win_title");
|
win_title.getComponent(cc.Label).string = Utils.TI18N("个人收藏");
|
self.num_txt = main_container.getChildByName("num_txt").getComponent(cc.Label);
|
self.no_vedio_image = main_container.getChildByName("no_vedio_image");
|
self.no_vedio_image.getChildByName("label").getComponent(cc.Label).string = Utils.TI18N("暂无录像收藏");
|
var vedio_list = main_container.getChildByName("vedio_list");
|
var scroll_view_size = vedio_list.getContentSize();
|
var setting = {
|
item_class: VedioMainItem,
|
//-- 单元类
|
start_x: 0,
|
//-- 第一个单元的X起点
|
space_x: 0,
|
//-- x方向的间隔
|
start_y: 0,
|
//-- 第一个单元的Y起点
|
space_y: 5,
|
//-- y方向的间隔
|
item_width: 620,
|
//-- 单元的尺寸width
|
item_height: 374,
|
//-- 单元的尺寸height
|
row: 0,
|
//-- 行数,作用于水平滚动类型
|
col: 1,
|
//-- 列数,作用于垂直滚动类型
|
need_dynamic: true
|
};
|
this.vedio_scrollview = new CommonScrollView();
|
this.vedio_scrollview.createScroll(vedio_list, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting);
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
this.btn_guild.on('click', function () {
|
Utils.playButtonSound(1);
|
|
if (RoleController.getInstance().getRoleVo().isHasGuild() == false) {
|
message(Utils.TI18N("您暂未加入公会"));
|
return;
|
}
|
|
if (this.replay_id) {
|
this.ctrl.requestShareVedio(this.replay_id, ChatConst.Channel.Gang, this.srv_id, this.combat_type);
|
|
this._model.updateVedioData(null, this.replay_id, "share", this.share_num);
|
|
var new_data = this.updateVedioDataById(this.replay_id, "share", this.share_num);
|
gcore.GlobalEvent.fire(VedioEvent.UpdateVedioDataEvent, new_data);
|
}
|
|
this.replay_id = null;
|
this.srv_id = null;
|
this.combat_type = null;
|
this.share_panel.active = false;
|
}, this);
|
this.btn_world.on("click", function () {
|
Utils.playButtonSound(1);
|
|
if (this.replay_id) {
|
this.ctrl.requestShareVedio(this.replay_id, ChatConst.Channel.World, this.srv_id, this.combat_type);
|
|
this._model.updateVedioData(null, this.replay_id, "share", this.share_num);
|
|
var new_data = this.updateVedioDataById(this.replay_id, "share", this.share_num);
|
gcore.GlobalEvent.fire(VedioEvent.UpdateVedioDataEvent, new_data);
|
}
|
|
this.replay_id = null;
|
this.srv_id = null;
|
this.combat_type = null;
|
this.share_panel.active = false;
|
}, this);
|
this.share_panel.on("touchend", function () {
|
this.share_panel.active = false;
|
}, this);
|
this.background.on("touchend", function () {
|
Utils.playButtonSound(2);
|
this.ctrl.openVedioCollectWindow(false);
|
}, this);
|
this.addGlobalEvent(VedioEvent.UpdateCollectVedioEvent, function (data) {
|
this.setData(data);
|
}.bind(this));
|
this.addGlobalEvent(VedioEvent.CancelCollectVedioEvent, function (id) {
|
for (var i = 0; i < this.data.length; ++i) {
|
var v = this.data[i];
|
|
if (v.id == id) {
|
this.data.splice(i, 1);
|
break;
|
}
|
}
|
|
if (Utils.next(this.data) == null) {
|
this.no_vedio_image.active = true;
|
this.vedio_scrollview.setData(this.data);
|
} else {
|
this.vedio_scrollview.resetAddPosition(this.data, this._onClickShareBtn.bind(this), {
|
is_collect: true
|
});
|
this.no_vedio_image.active = false;
|
}
|
|
this.refreshCollectNum();
|
}.bind(this));
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(params) {
|
this.ctrl.requestMyVedioByType(VedioConst.MyVedio_Type.Collect);
|
this.refreshCollectNum();
|
gcore.GlobalEvent.fire(VedioEvent.OpenCollectViewEvent, true);
|
},
|
setData: function setData(data) {
|
var self = this;
|
|
if (!data || Utils.next(data) == null) {
|
self.no_vedio_image.active = true;
|
} else {
|
self.no_vedio_image.active = false;
|
self.data = data;
|
self.vedio_scrollview.setData(self.data, this._onClickShareBtn.bind(this), {
|
is_collect: true
|
}); // self.vedio_scrollview:reloadData()
|
// --self.vedio_scrollview:setData(data, handler(self, self._onClickShareBtn), nil, {is_collect = true})
|
|
self.refreshCollectNum();
|
}
|
},
|
refreshCollectNum: function refreshCollectNum() {
|
var cur_num = 0;
|
|
if (this.data) {
|
cur_num = this.data.length;
|
}
|
|
var max_num = 0;
|
var collect_cfg = Config.video_data.data_const["self_collection_limit"];
|
|
if (collect_cfg) {
|
max_num = collect_cfg.val;
|
}
|
|
this.num_txt.string = cc.js.formatStr(Utils.TI18N("收藏数:%d/%d"), cur_num, max_num);
|
},
|
_onClickShareBtn: function _onClickShareBtn(world_pos, replay_id, share_num, srv_id, combat_type) {
|
var self = this;
|
self.replay_id = replay_id;
|
self.share_num = share_num;
|
self.srv_id = srv_id;
|
self.combat_type = combat_type;
|
var node_pos = self.share_panel.convertToNodeSpaceAR(world_pos);
|
|
if (node_pos) {
|
self.share_bg.setPosition(cc.v2(node_pos.x - 60, node_pos.y + 45));
|
self.share_panel.active = true;
|
}
|
},
|
updateVedioDataById: function updateVedioDataById(id, key, val) {
|
if (!this.data) return;
|
var vedio_data = {};
|
|
for (var k = 0; k < this.data.length; ++k) {
|
var v = this.data[k];
|
|
if (v.id == id) {
|
v[key] = val;
|
vedio_data = v;
|
break;
|
}
|
}
|
|
return vedio_data;
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
if (this.vedio_scrollview) {
|
this.vedio_scrollview.DeleteMe();
|
this.vedio_scrollview = null;
|
}
|
|
gcore.GlobalEvent.fire(VedioEvent.OpenCollectViewEvent, false);
|
this.ctrl.openVedioCollectWindow(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx2ZWRpb1xcdmlld1xcdmVkaW9fY29sbGVjdF93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiQ29tbW9uU2Nyb2xsVmlldyIsIlZlZGlvQ29udHJvbGxlciIsIlZlZGlvQ29uc3QiLCJWZWRpb01haW5JdGVtIiwiVmVkaW9FdmVudCIsIlJvbGVDb250cm9sbGVyIiwiQ2hhdENvbnN0IiwiVmVkaW9Db2xsZWN0V2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiYmlnIiwiY3RybCIsImdldEluc3RhbmNlIiwiX21vZGVsIiwiZ2V0TW9kZWwiLCJpbml0Q29uZmlnIiwib3BlbkNhbGxCYWNrIiwic2VsZiIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwibWFpbl9jb250YWluZXIiLCJzaGFyZV9wYW5lbCIsImFjdGl2ZSIsInNoYXJlX2JnIiwiYnRuX2d1aWxkIiwiYnRuX3dvcmxkIiwiYnRuX2Nyb3NzIiwiZ2V0Q29tcG9uZW50IiwiTGFiZWwiLCJzdHJpbmciLCJVdGlscyIsIlRJMThOIiwid2luX3RpdGxlIiwibnVtX3R4dCIsIm5vX3ZlZGlvX2ltYWdlIiwidmVkaW9fbGlzdCIsInNjcm9sbF92aWV3X3NpemUiLCJnZXRDb250ZW50U2l6ZSIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsIm5lZWRfZHluYW1pYyIsInZlZGlvX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsInBsYXlCdXR0b25Tb3VuZCIsImdldFJvbGVWbyIsImlzSGFzR3VpbGQiLCJtZXNzYWdlIiwicmVwbGF5X2lkIiwicmVxdWVzdFNoYXJlVmVkaW8iLCJDaGFubmVsIiwiR2FuZyIsInNydl9pZCIsImNvbWJhdF90eXBlIiwidXBkYXRlVmVkaW9EYXRhIiwic2hhcmVfbnVtIiwibmV3X2RhdGEiLCJ1cGRhdGVWZWRpb0RhdGFCeUlkIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJVcGRhdGVWZWRpb0RhdGFFdmVudCIsIldvcmxkIiwib3BlblZlZGlvQ29sbGVjdFdpbmRvdyIsImFkZEdsb2JhbEV2ZW50IiwiVXBkYXRlQ29sbGVjdFZlZGlvRXZlbnQiLCJkYXRhIiwic2V0RGF0YSIsImJpbmQiLCJDYW5jZWxDb2xsZWN0VmVkaW9FdmVudCIsImlkIiwiaSIsImxlbmd0aCIsInYiLCJzcGxpY2UiLCJuZXh0IiwicmVzZXRBZGRQb3NpdGlvbiIsIl9vbkNsaWNrU2hhcmVCdG4iLCJpc19jb2xsZWN0IiwicmVmcmVzaENvbGxlY3ROdW0iLCJvcGVuUm9vdFduZCIsInBhcmFtcyIsInJlcXVlc3RNeVZlZGlvQnlUeXBlIiwiTXlWZWRpb19UeXBlIiwiQ29sbGVjdCIsIk9wZW5Db2xsZWN0Vmlld0V2ZW50IiwiY3VyX251bSIsIm1heF9udW0iLCJjb2xsZWN0X2NmZyIsIkNvbmZpZyIsInZpZGVvX2RhdGEiLCJkYXRhX2NvbnN0IiwidmFsIiwianMiLCJmb3JtYXRTdHIiLCJ3b3JsZF9wb3MiLCJub2RlX3BvcyIsImNvbnZlcnRUb05vZGVTcGFjZUFSIiwic2V0UG9zaXRpb24iLCJ4IiwieSIsImtleSIsInZlZGlvX2RhdGEiLCJrIiwiY2xvc2VDYWxsQmFjayIsIkRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FB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QUFqQztBQUNIO0FBdEw2QixDQUFULENBQXpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg5b2V5YOP5pS26JeP55WM6Z2iXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wNS0yMiAxNDoyMjo0M1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBDb21tb25TY3JvbGxWaWV3ID0gcmVxdWlyZShcImNvbW1vbl9zY3JvbGx2aWV3XCIpO1xudmFyIFZlZGlvQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ2ZWRpb19jb250cm9sbGVyXCIpXG52YXIgVmVkaW9Db25zdCA9IHJlcXVpcmUoXCJ2ZWRpb19jb25zdFwiKVxudmFyIFZlZGlvTWFpbkl0ZW0gPSByZXF1aXJlKFwidmVkaW9faXRlbV9wYW5lbFwiKVxudmFyIFZlZGlvRXZlbnQgPSByZXF1aXJlKFwidmVkaW9fZXZlbnRcIilcbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIilcbnZhciBDaGF0Q29uc3QgPSByZXF1aXJlKFwiY2hhdF9jb25zdFwiKVxudmFyIFZlZGlvQ29sbGVjdFdpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJ2ZWRpb1wiLCBcInZlZGlvX2NvbGxlY3Rfd2luZG93XCIpO1xuICAgICAgICB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcuZGlhbG9ndWU7ICAgICAgICAgICAgICAgIC8v6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5iaWc7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IFZlZGlvQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpXG4gICAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5jdHJsLmdldE1vZGVsKClcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBzZWxmLmJhY2tncm91bmQgPSBzZWxmLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKVxuICAgICAgICBsZXQgbWFpbl9jb250YWluZXIgPSBzZWxmLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIilcbiAgICAgICAgc2VsZi5tYWluX2NvbnRhaW5lciA9IG1haW5fY29udGFpbmVyXG4gICAgICAgIFxuICAgICAgICBzZWxmLnNoYXJlX3BhbmVsID0gc2VsZi5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcInNoYXJlX3BhbmVsXCIpXG4gICAgICAgIHNlbGYuc2hhcmVfcGFuZWwuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgc2VsZi5zaGFyZV9iZyA9IHNlbGYuc2hhcmVfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJzaGFyZV9iZ1wiKVxuICAgICAgICBzZWxmLmJ0bl9ndWlsZCA9IHNlbGYuc2hhcmVfYmcuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fZ3VpbGRcIilcbiAgICAgICAgc2VsZi5idG5fd29ybGQgPSBzZWxmLnNoYXJlX2JnLmdldENoaWxkQnlOYW1lKFwiYnRuX3dvcmxkXCIpXG4gICAgICAgIHNlbGYuYnRuX2Nyb3NzID0gc2VsZi5zaGFyZV9iZy5nZXRDaGlsZEJ5TmFtZShcImJ0bl9jcm9zc1wiKVxuICAgICAgICBzZWxmLnNoYXJlX2JnLmdldENoaWxkQnlOYW1lKFwiZ3VpbGRfbGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuWIhuS6q+WIsOWFrOS8mumikemBk1wiKTtcbiAgICAgICAgc2VsZi5zaGFyZV9iZy5nZXRDaGlsZEJ5TmFtZShcIndvcmxkX2xhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLliIbkuqvliLDkuJbnlYzpopHpgZNcIik7XG4gICAgICAgIC8vIHNlbGYuc2hhcmVfYmcuZ2V0Q2hpbGRCeU5hbWUoXCJjcm9zc19sYWJlbFwiKTpzZXRTdHJpbmcoVEkxOE4oXCLliIbkuqvliLDot6jmnI3popHpgZNcIikpXG5cbiAgICAgICAgbGV0IHdpbl90aXRsZSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwid2luX3RpdGxlXCIpXG4gICAgICAgIHdpbl90aXRsZS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5Liq5Lq65pS26JePXCIpXG5cbiAgICAgICAgc2VsZi5udW1fdHh0ID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJudW1fdHh0XCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgc2VsZi5ub192ZWRpb19pbWFnZSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwibm9fdmVkaW9faW1hZ2VcIilcbiAgICAgICAgc2VsZi5ub192ZWRpb19pbWFnZS5nZXRDaGlsZEJ5TmFtZShcImxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmmoLml6DlvZXlg4/mlLbol49cIik7XG5cbiAgICAgICAgbGV0IHZlZGlvX2xpc3QgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInZlZGlvX2xpc3RcIilcbiAgICAgICAgbGV0IHNjcm9sbF92aWV3X3NpemUgPSB2ZWRpb19saXN0LmdldENvbnRlbnRTaXplKClcbiAgICAgICAgbGV0IHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzIDogVmVkaW9NYWluSXRlbSwgICAgICAvLy0tIOWNleWFg+exu1xuICAgICAgICAgICAgc3RhcnRfeCA6IDAsICAgICAgICAgICAgICAgICAgLy8tLSDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICBzcGFjZV94IDogMCwgICAgICAgICAgICAgICAgICAgIC8vLS0geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeSA6IDAsICAgICAgICAgICAgICAgICAgICAvLy0tIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3kgOiA1LCAgICAgICAgICAgICAgICAgICAvLy0tIHnmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIGl0ZW1fd2lkdGggOiA2MjAsICAgICAgICAgICAgICAgLy8tLSDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQgOiAzNzQsICAgICAgICAgICAgICAvLy0tIOWNleWFg+eahOWwuuWvuGhlaWdodFxuICAgICAgICAgICAgcm93IDogMCwgICAgICAgICAgICAgICAgICAgICAgICAvLy0tIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xuICAgICAgICAgICAgY29sIDogMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8tLSDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgICAgIG5lZWRfZHluYW1pYyA6IHRydWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZlZGlvX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpO1xuICAgICAgICB0aGlzLnZlZGlvX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKHZlZGlvX2xpc3QsIGNjLnYyKDAsMCkgLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCBzY3JvbGxfdmlld19zaXplLCBzZXR0aW5nKVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJ0bl9ndWlsZC5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgICAgIGlmKFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCkuaXNIYXNHdWlsZCgpID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi5oKo5pqC5pyq5Yqg5YWl5YWs5LyaXCIpKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5yZXBsYXlfaWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuY3RybC5yZXF1ZXN0U2hhcmVWZWRpbyh0aGlzLnJlcGxheV9pZCwgQ2hhdENvbnN0LkNoYW5uZWwuR2FuZywgdGhpcy5zcnZfaWQsIHRoaXMuY29tYmF0X3R5cGUpXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWwudXBkYXRlVmVkaW9EYXRhKG51bGwsIHRoaXMucmVwbGF5X2lkLCBcInNoYXJlXCIsIHRoaXMuc2hhcmVfbnVtKVxuICAgICAgICAgICAgICAgIGxldCBuZXdfZGF0YSA9IHRoaXMudXBkYXRlVmVkaW9EYXRhQnlJZCh0aGlzLnJlcGxheV9pZCwgXCJzaGFyZVwiLCB0aGlzLnNoYXJlX251bSlcbiAgICAgICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFZlZGlvRXZlbnQuVXBkYXRlVmVkaW9EYXRhRXZlbnQsIG5ld19kYXRhKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXBsYXlfaWQgPSBudWxsXG4gICAgICAgICAgICB0aGlzLnNydl9pZCA9IG51bGxcbiAgICAgICAgICAgIHRoaXMuY29tYmF0X3R5cGUgPSBudWxsXG4gICAgICAgICAgICB0aGlzLnNoYXJlX3BhbmVsLmFjdGl2ZSA9IGZhbHNlXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5idG5fd29ybGQub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgICAgIGlmKHRoaXMucmVwbGF5X2lkKXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwucmVxdWVzdFNoYXJlVmVkaW8odGhpcy5yZXBsYXlfaWQsIENoYXRDb25zdC5DaGFubmVsLldvcmxkLCB0aGlzLnNydl9pZCwgdGhpcy5jb21iYXRfdHlwZSlcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbC51cGRhdGVWZWRpb0RhdGEobnVsbCwgdGhpcy5yZXBsYXlfaWQsIFwic2hhcmVcIiwgdGhpcy5zaGFyZV9udW0pXG4gICAgICAgICAgICAgICAgbGV0IG5ld19kYXRhID0gdGhpcy51cGRhdGVWZWRpb0RhdGFCeUlkKHRoaXMucmVwbGF5X2lkLCBcInNoYXJlXCIsIHRoaXMuc2hhcmVfbnVtKVxuICAgICAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmVkaW9FdmVudC5VcGRhdGVWZWRpb0RhdGFFdmVudCwgbmV3X2RhdGEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlcGxheV9pZCA9IG51bGxcbiAgICAgICAgICAgIHRoaXMuc3J2X2lkID0gbnVsbFxuICAgICAgICAgICAgdGhpcy5jb21iYXRfdHlwZSA9IG51bGxcbiAgICAgICAgICAgIHRoaXMuc2hhcmVfcGFuZWwuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgfSx0aGlzKVxuICAgICAgICB0aGlzLnNoYXJlX3BhbmVsLm9uKFwidG91Y2hlbmRcIixmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zaGFyZV9wYW5lbC5hY3RpdmUgPSBmYWxzZVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5vbihcInRvdWNoZW5kXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgyKVxuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5WZWRpb0NvbGxlY3RXaW5kb3coZmFsc2UpXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChWZWRpb0V2ZW50LlVwZGF0ZUNvbGxlY3RWZWRpb0V2ZW50LGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChWZWRpb0V2ZW50LkNhbmNlbENvbGxlY3RWZWRpb0V2ZW50LGZ1bmN0aW9uKGlkKXtcbiAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8dGhpcy5kYXRhLmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5kYXRhW2ldXG4gICAgICAgICAgICAgICAgaWYodi5pZCA9PSBpZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5zcGxpY2UoaSwxKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKFV0aWxzLm5leHQodGhpcy5kYXRhKSA9PSBudWxsKXtcbiAgICAgICAgICAgICAgICB0aGlzLm5vX3ZlZGlvX2ltYWdlLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgICAgICAgICB0aGlzLnZlZGlvX3Njcm9sbHZpZXcuc2V0RGF0YSh0aGlzLmRhdGEpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLnZlZGlvX3Njcm9sbHZpZXcucmVzZXRBZGRQb3NpdGlvbih0aGlzLmRhdGEsdGhpcy5fb25DbGlja1NoYXJlQnRuLmJpbmQodGhpcykse2lzX2NvbGxlY3QgOiB0cnVlfSlcbiAgICAgICAgICAgICAgICB0aGlzLm5vX3ZlZGlvX2ltYWdlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXHRcdCAgICB0aGlzLnJlZnJlc2hDb2xsZWN0TnVtKClcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihwYXJhbXMpe1xuICAgICAgICB0aGlzLmN0cmwucmVxdWVzdE15VmVkaW9CeVR5cGUoVmVkaW9Db25zdC5NeVZlZGlvX1R5cGUuQ29sbGVjdClcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29sbGVjdE51bSgpXG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmVkaW9FdmVudC5PcGVuQ29sbGVjdFZpZXdFdmVudCwgdHJ1ZSlcbiAgICB9LFxuICAgIHNldERhdGEoIGRhdGEgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmKCFkYXRhIHx8IFV0aWxzLm5leHQoZGF0YSkgPT0gbnVsbCl7XG4gICAgICAgICAgICBzZWxmLm5vX3ZlZGlvX2ltYWdlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgc2VsZi5ub192ZWRpb19pbWFnZS5hY3RpdmUgPSBmYWxzZVxuICAgICAgICAgICAgc2VsZi5kYXRhID0gZGF0YVxuICAgICAgICAgICAgc2VsZi52ZWRpb19zY3JvbGx2aWV3LnNldERhdGEoc2VsZi5kYXRhLHRoaXMuX29uQ2xpY2tTaGFyZUJ0bi5iaW5kKHRoaXMpLHtpc19jb2xsZWN0IDogdHJ1ZX0pXG4gICAgICAgICAgICAvLyBzZWxmLnZlZGlvX3Njcm9sbHZpZXc6cmVsb2FkRGF0YSgpXG4gICAgICAgICAgICAvLyAtLXNlbGYudmVkaW9fc2Nyb2xsdmlldzpzZXREYXRhKGRhdGEsIGhhbmRsZXIoc2VsZiwgc2VsZi5fb25DbGlja1NoYXJlQnRuKSwgbmlsLCB7aXNfY29sbGVjdCA9IHRydWV9KVxuICAgICAgICAgICAgc2VsZi5yZWZyZXNoQ29sbGVjdE51bSgpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHJlZnJlc2hDb2xsZWN0TnVtKCl7XG4gICAgICAgIGxldCBjdXJfbnVtID0gMFxuICAgICAgICBpZih0aGlzLmRhdGEpe1xuICAgICAgICAgICAgY3VyX251bSA9IHRoaXMuZGF0YS5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWF4X251bSA9IDBcbiAgICAgICAgbGV0IGNvbGxlY3RfY2ZnID0gQ29uZmlnLnZpZGVvX2RhdGEuZGF0YV9jb25zdFtcInNlbGZfY29sbGVjdGlvbl9saW1pdFwiXVxuICAgICAgICBpZihjb2xsZWN0X2NmZyl7XG4gICAgICAgICAgICBtYXhfbnVtID0gY29sbGVjdF9jZmcudmFsXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5udW1fdHh0LnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuaUtuiXj+aVsDolZC8lZFwiKSwgY3VyX251bSwgbWF4X251bSlcbiAgICB9LFxuICAgIF9vbkNsaWNrU2hhcmVCdG4oIHdvcmxkX3BvcywgcmVwbGF5X2lkLCBzaGFyZV9udW0sIHNydl9pZCwgY29tYmF0X3R5cGUgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIHNlbGYucmVwbGF5X2lkID0gcmVwbGF5X2lkXG4gICAgICAgIHNlbGYuc2hhcmVfbnVtID0gc2hhcmVfbnVtXG4gICAgICAgIHNlbGYuc3J2X2lkID0gc3J2X2lkXG4gICAgICAgIHNlbGYuY29tYmF0X3R5cGUgPSBjb21iYXRfdHlwZVxuICAgICAgICBsZXQgbm9kZV9wb3MgPSBzZWxmLnNoYXJlX3BhbmVsLmNvbnZlcnRUb05vZGVTcGFjZUFSKHdvcmxkX3BvcylcbiAgICAgICAgaWYobm9kZV9wb3Mpe1xuICAgICAgICAgICAgc2VsZi5zaGFyZV9iZy5zZXRQb3NpdGlvbihjYy52Mihub2RlX3Bvcy54LTYwLCBub2RlX3Bvcy55KzQ1KSlcbiAgICAgICAgICAgIHNlbGYuc2hhcmVfcGFuZWwuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlVmVkaW9EYXRhQnlJZCggaWQsIGtleSwgdmFsICl7XG4gICAgICAgIGlmKCF0aGlzLmRhdGEpICByZXR1cm47XG4gICAgICAgIGxldCB2ZWRpb19kYXRhID0ge31cbiAgICAgICAgZm9yKGxldCBrPTA7azx0aGlzLmRhdGEubGVuZ3RoOysrayl7XG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMuZGF0YVtrXVxuICAgICAgICAgICAgaWYodi5pZCA9PSBpZCl7XG4gICAgICAgICAgICAgICAgdltrZXldID0gdmFsXG4gICAgICAgICAgICAgICAgdmVkaW9fZGF0YSA9IHZcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2ZWRpb19kYXRhXG4gICAgfSxcbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLnZlZGlvX3Njcm9sbHZpZXcpe1xuICAgICAgICAgICAgdGhpcy52ZWRpb19zY3JvbGx2aWV3LkRlbGV0ZU1lKClcbiAgICAgICAgICAgIHRoaXMudmVkaW9fc2Nyb2xsdmlldyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFZlZGlvRXZlbnQuT3BlbkNvbGxlY3RWaWV3RXZlbnQsIGZhbHNlKVxuICAgICAgICB0aGlzLmN0cmwub3BlblZlZGlvQ29sbGVjdFdpbmRvdyhmYWxzZSlcbiAgICB9LFxufSkiXX0=
|