|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/role/view/role_face_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, '6f7a4HH5PZG+IeBgXRTKB+T', 'role_face_panel');
|
// Scripts/mod/role/view/role_face_panel.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: whjing2012@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 头像框
|
// <br/>Create: new Date().toISOString()
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var TimeTool = require("timetool");
|
|
var RoleController = require("role_controller");
|
|
var BackpackController = require("backpack_controller");
|
|
var TipsController = require("tips_controller");
|
|
var RoleFacePanel = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("roleinfo", "role_face_panel");
|
this.x = 0; //必须设置的两个变量
|
|
this.y = 0;
|
this.data = null;
|
this.has_list = {};
|
this.item_list = {};
|
},
|
initPanel: function initPanel() {
|
this.setPosition(0, 0);
|
this.scroll_con = this.root_wnd.getChildByName("scroll_con");
|
this.view = this.scroll_con.getChildByName("view");
|
this.content = this.view.getChildByName("content");
|
this.ok_btn = this.root_wnd.getChildByName("ok_btn");
|
this.ok_label = this.ok_btn.getChildByName("Label").getComponent(cc.Label);
|
this.item = this.root_wnd.getChildByName("item");
|
RoleController.getInstance().send21500();
|
},
|
registerEvent: function registerEvent() {
|
this.ok_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
if (this.select_item) {
|
if (this.select_item.v.status == 1) {
|
RoleController.getInstance().send21501(this.select_bid);
|
} else {
|
RoleController.getInstance().send21503(this.select_bid);
|
}
|
}
|
}, this);
|
this.roleVo = RoleController.getInstance().getRoleVo();
|
|
if (!this.role_update_evt) {
|
var RoleEvent = require("role_event");
|
|
this.role_update_evt = this.roleVo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, val) {
|
if (key == "avatar_base_id") {
|
this.updateList();
|
}
|
}, this);
|
this.addGlobalEvent(RoleEvent.GetFaceList, function (data) {
|
this.updateList(data.avatar_frame);
|
});
|
}
|
},
|
onShow: function onShow() {},
|
// 更新头像框列表信息
|
updateList: function updateList(has_list) {
|
if (has_list) {
|
this.has_list = this.has_list || {};
|
|
for (var k in has_list) {
|
this.has_list[has_list[k].base_id] = has_list[k];
|
}
|
}
|
|
this.list = [];
|
|
for (var k in Config.avatar_data.data_avatar) {
|
var v = Config.avatar_data.data_avatar[k];
|
|
if (v.is_show != 1) {} else if (v.base_id == this.roleVo.avatar_base_id) {
|
this.list.push({
|
bid: v.base_id,
|
use: 1,
|
status: 1,
|
sort: 1100000 - v.base_id
|
});
|
} else if (this.has_list[v.base_id]) {
|
this.list.push({
|
bid: v.base_id,
|
use: 0,
|
status: 1,
|
sort: 100000 - v.base_id
|
});
|
} else if (v.loss && v.loss[0]) {
|
if (BackpackController.getInstance().getModel().getBackPackItemNumByBid(v.loss[0][0]) >= v.loss[0][1]) {
|
this.list.push({
|
bid: v.base_id,
|
use: 0,
|
status: 2,
|
sort: 2000000 - v.base_id
|
});
|
} else {
|
this.list.push({
|
bid: v.base_id,
|
use: 0,
|
status: 0,
|
sort: -v.base_id
|
});
|
}
|
} else {
|
this.list.push({
|
bid: v.base_id,
|
use: 0,
|
status: 2,
|
sort: 2000000 - v.base_id
|
});
|
}
|
} // Log.info(has_list, this.has_list, this.list, this.roleVo);
|
|
|
this.list.sort(Utils.tableUpperSorter(["has", "base_id"]));
|
var i = 0;
|
|
var func = function (num) {
|
if (!this.list || !this.item_list || this.list.length == 0) {
|
return;
|
}
|
|
num = num || 2;
|
|
for (var j = 0; j < num; j++) {
|
if (this.list.length == 0) {
|
return;
|
}
|
|
this.createItem(i, this.list.pop());
|
i++;
|
}
|
|
gcore.Timer.set(func, 20, 1, "role_face_panel_timer");
|
}.bind(this);
|
|
func(10);
|
},
|
// 创建更新一个头像框
|
createItem: function createItem(i, v) {
|
var item = this.item_list[v.bid];
|
|
if (!item) {
|
var config = Config.avatar_data.data_avatar[v.bid];
|
item = cc.instantiate(this.item);
|
this.content.addChild(item);
|
this.item_list[v.bid] = item;
|
item.active = true;
|
item.icon = item.getChildByName("icon").getComponent(cc.Sprite);
|
item.use = item.getChildByName("use");
|
item.select = item.getChildByName("select");
|
item.active_node = item.getChildByName("active");
|
item.label = item.getChildByName("label").getComponent(cc.Label);
|
item.label.string = config.name;
|
item.icon_bg = item.getChildByName("icon_bg");
|
|
if (config.offy) {
|
item.icon_bg.y = item.icon_bg.y - config.offy;
|
}
|
|
item.on(cc.Node.EventType.TOUCH_END, function () {
|
this.setSelected(v.bid); // TipsController.getInstance().showHeadCircleTips({bid:v.bid});
|
}.bind(this));
|
this.loadRes(PathTool.getHeadcircle(config.res_id), function (resObject) {
|
item.icon.spriteFrame = resObject;
|
}.bind(this));
|
}
|
|
item.v = v;
|
var y = -(parseInt(i / 4) * 170 + 70);
|
item.setPosition(i % 4 * 150 + 75, y); // this.content.height = 55-y;
|
|
if (v.use == 1) {
|
item.use.active = true;
|
this.setSelected(v.bid);
|
} else {
|
item.use.active = false;
|
}
|
|
item.active_node.active = v.status == 2;
|
|
if (v.status == 1) {
|
item.icon.setState(cc.Sprite.State.NORMAL);
|
} else {
|
item.icon.setState(cc.Sprite.State.GRAY);
|
}
|
},
|
// 设置选择状态
|
setSelected: function setSelected(bid) {
|
if (this.select_bid == bid) {
|
return;
|
}
|
|
this.select_bid = bid;
|
|
if (this.select_item) {
|
this.select_item.select.active = false;
|
}
|
|
this.select_item = this.item_list[bid];
|
|
if (this.select_item) {
|
this.select_item.select.active = true;
|
|
if (this.select_item.v.status == 1) {
|
this.ok_label.string = Utils.TI18N("更 换");
|
} else {
|
this.ok_label.string = Utils.TI18N("激 活");
|
}
|
}
|
},
|
onHide: function onHide() {},
|
onDelete: function onDelete() {
|
if (this.role_update_evt) {
|
this.roleVo.unbind(this.role_update_evt);
|
}
|
|
this.list = null;
|
this.item_list = null;
|
}
|
});
|
module.exports = RoleFacePanel;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyb2xlXFx2aWV3XFxyb2xlX2ZhY2VfcGFuZWwuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiVGltZVRvb2wiLCJSb2xlQ29udHJvbGxlciIsIkJhY2twYWNrQ29udHJvbGxlciIsIlRpcHNDb250cm9sbGVyIiwiUm9sZUZhY2VQYW5lbCIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ4IiwieSIsImRhdGEiLCJoYXNfbGlzdCIsIml0ZW1fbGlzdCIsImluaXRQYW5lbCIsInNldFBvc2l0aW9uIiwic2Nyb2xsX2NvbiIsInJvb3Rfd25kIiwiZ2V0Q2hpbGRCeU5hbWUiLCJ2aWV3IiwiY29udGVudCIsIm9rX2J0biIsIm9rX2xhYmVsIiwiZ2V0Q29tcG9uZW50IiwiTGFiZWwiLCJpdGVtIiwiZ2V0SW5zdGFuY2UiLCJzZW5kMjE1MDAiLCJyZWdpc3RlckV2ZW50Iiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfRU5EIiwic2VsZWN0X2l0ZW0iLCJ2Iiwic3RhdHVzIiwic2VuZDIxNTAxIiwic2VsZWN0X2JpZCIsInNlbmQyMTUwMyIsInJvbGVWbyIsImdldFJvbGVWbyIsInJvbGVfdXBkYXRlX2V2dCIsIlJvbGVFdmVudCIsImJpbmQiLCJFdmVudElkIiwiVVBEQVRFX1JPTEVfQVRUUklCVVRFIiwia2V5IiwidmFsIiwidXBkYXRlTGlzdCIsImFkZEdsb2JhbEV2ZW50IiwiR2V0RmFjZUxpc3QiLCJhdmF0YXJfZnJhbWUiLCJvblNob3ciLCJrIiwiYmFzZV9pZCIsImxpc3QiLCJDb25maWciLCJhdmF0YXJfZGF0YSIsImRhdGFfYXZhdGFyIiwiaXNfc2hvdyIsImF2YXRhcl9iYXNlX2lkIiwicHVzaCIsImJpZCIsInVzZSIsInNvcnQiLCJsb3NzIiwiZ2V0TW9kZWwiLCJnZXRCYWNrUGFja0l0ZW1OdW1CeUJpZCIsIlV0aWxzIiwidGFibGVVcHBlclNvcnRlciIsImkiLCJmdW5jIiwibnVtIiwibGVuZ3RoIiwiaiIsImNyZWF0ZUl0ZW0iLCJwb3AiLCJnY29yZSIsIlRpbWVyIiwic2V0IiwiY29uZmlnIiwiaW5zdGFudGlhdGUiLCJhZGRDaGlsZCIsImFjdGl2ZSIsImljb24iLCJTcHJpdGUiLCJzZWxlY3QiLCJhY3RpdmVfbm9kZSIsImxhYmVsIiwic3RyaW5nIiwibmFtZSIsImljb25fYmciLCJvZmZ5Iiwic2V0U2VsZWN0ZWQiLCJsb2FkUmVzIiwiZ2V0SGVhZGNpcmNsZSIsInJlc19pZCIsInJlc09iamVjdCIsInNwcml0ZUZyYW1lIiwicGFyc2VJbnQiLCJzZXRTdGF0ZSIsIlN0YXRlIiwiTk9STUFMIiwiR1JBWSIsIlRJMThOIiwib25IaWRlIiwib25EZWxldGUiLCJ1bmJpbmQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsUUFBUSxHQUFHRCxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJRSxjQUFjLEdBQUdGLE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJRyxrQkFBa0IsR0FBR0gsT0FBTyxDQUFDLHFCQUFELENBQWhDOztBQUNBLElBQUlJLGNBQWMsR0FBR0osT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUVBLElBQUlLLGFBQWEsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDekIsYUFBU0MsU0FEZ0I7QUFFekJDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JYLFFBQVEsQ0FBQ1ksYUFBVCxDQUF1QixVQUF2QixFQUFtQyxpQkFBbkMsQ0FBbEI7QUFDQSxTQUFLQyxDQUFMLEdBQVMsQ0FBVCxDQUZjLENBRUg7O0FBQ1gsU0FBS0MsQ0FBTCxHQUFTLENBQVQ7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d0IsQ0FBVCxDQUFwQjtBQThLQStGLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjNHLGFBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogd2hqaW5nMjAxMkBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDlpLTlg4/moYZcbi8vIDxici8+Q3JlYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBUaW1lVG9vbCA9IHJlcXVpcmUoXCJ0aW1ldG9vbFwiKTtcbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XG52YXIgQmFja3BhY2tDb250cm9sbGVyID0gcmVxdWlyZShcImJhY2twYWNrX2NvbnRyb2xsZXJcIik7XG52YXIgVGlwc0NvbnRyb2xsZXIgPSByZXF1aXJlKFwidGlwc19jb250cm9sbGVyXCIpO1xuXG52YXIgUm9sZUZhY2VQYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwicm9sZWluZm9cIiwgXCJyb2xlX2ZhY2VfcGFuZWxcIik7XG4gICAgICAgIHRoaXMueCA9IDA7Ly/lv4Xpobvorr7nva7nmoTkuKTkuKrlj5jph49cbiAgICAgICAgdGhpcy55ID0gMDtcbiAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICAgICAgdGhpcy5oYXNfbGlzdCA9IHt9O1xuICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IHt9O1xuICAgIH0sXG5cbiAgICBpbml0UGFuZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbigwLCAwKTtcbiAgICAgICAgdGhpcy5zY3JvbGxfY29uID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcInNjcm9sbF9jb25cIik7XG4gICAgICAgIHRoaXMudmlldyA9IHRoaXMuc2Nyb2xsX2Nvbi5nZXRDaGlsZEJ5TmFtZShcInZpZXdcIik7XG4gICAgICAgIHRoaXMuY29udGVudCA9IHRoaXMudmlldy5nZXRDaGlsZEJ5TmFtZShcImNvbnRlbnRcIik7XG4gICAgICAgIHRoaXMub2tfYnRuID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm9rX2J0blwiKTtcbiAgICAgICAgdGhpcy5va19sYWJlbCA9IHRoaXMub2tfYnRuLmdldENoaWxkQnlOYW1lKFwiTGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5pdGVtID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIml0ZW1cIik7XG4gICAgICAgIFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2VuZDIxNTAwKCk7XG4gICAgfSxcblxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5va19idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RfaXRlbSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdF9pdGVtLnYuc3RhdHVzID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZW5kMjE1MDEodGhpcy5zZWxlY3RfYmlkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNlbmQyMTUwMyh0aGlzLnNlbGVjdF9iaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIHRoaXMucm9sZVZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgaWYgKCF0aGlzLnJvbGVfdXBkYXRlX2V2dCkge1xuICAgICAgICAgICAgdmFyIFJvbGVFdmVudCA9IHJlcXVpcmUoXCJyb2xlX2V2ZW50XCIpO1xuICAgICAgICAgICAgdGhpcy5yb2xlX3VwZGF0ZV9ldnQgPSB0aGlzLnJvbGVWby5iaW5kKEV2ZW50SWQuVVBEQVRFX1JPTEVfQVRUUklCVVRFLCAoZnVuY3Rpb24gKGtleSwgdmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PSBcImF2YXRhcl9iYXNlX2lkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChSb2xlRXZlbnQuR2V0RmFjZUxpc3QsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0KGRhdGEuYXZhdGFyX2ZyYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIG9uU2hvdzogZnVuY3Rpb24gKCkge1xuICAgIH0sXG5cbiAgICAvLyDmm7TmlrDlpLTlg4/moYbliJfooajkv6Hmga9cbiAgICB1cGRhdGVMaXN0OiBmdW5jdGlvbiAoaGFzX2xpc3QpIHtcbiAgICAgICAgaWYgKGhhc19saXN0KSB7XG4gICAgICAgICAgICB0aGlzLmhhc19saXN0ID0gdGhpcy5oYXNfbGlzdCB8fCB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gaGFzX2xpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc19saXN0W2hhc19saXN0W2tdLmJhc2VfaWRdID0gaGFzX2xpc3Rba107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0ID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gQ29uZmlnLmF2YXRhcl9kYXRhLmRhdGFfYXZhdGFyKSB7XG4gICAgICAgICAgICB2YXIgdiA9IENvbmZpZy5hdmF0YXJfZGF0YS5kYXRhX2F2YXRhcltrXTtcbiAgICAgICAgICAgIGlmICh2LmlzX3Nob3cgIT0gMSkge1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2LmJhc2VfaWQgPT0gdGhpcy5yb2xlVm8uYXZhdGFyX2Jhc2VfaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QucHVzaCh7IGJpZDogdi5iYXNlX2lkLCB1c2U6IDEsIHN0YXR1czogMSwgc29ydDogMTEwMDAwMCAtIHYuYmFzZV9pZCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNfbGlzdFt2LmJhc2VfaWRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0LnB1c2goeyBiaWQ6IHYuYmFzZV9pZCwgdXNlOiAwLCBzdGF0dXM6IDEsIHNvcnQ6IDEwMDAwMCAtIHYuYmFzZV9pZCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi5sb3NzICYmIHYubG9zc1swXSkge1xuICAgICAgICAgICAgICAgIGlmIChCYWNrcGFja0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldEJhY2tQYWNrSXRlbU51bUJ5QmlkKHYubG9zc1swXVswXSkgPj0gdi5sb3NzWzBdWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5wdXNoKHsgYmlkOiB2LmJhc2VfaWQsIHVzZTogMCwgc3RhdHVzOiAyLCBzb3J0OiAyMDAwMDAwIC0gdi5iYXNlX2lkIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5wdXNoKHsgYmlkOiB2LmJhc2VfaWQsIHVzZTogMCwgc3RhdHVzOiAwLCBzb3J0OiAtdi5iYXNlX2lkIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0LnB1c2goeyBiaWQ6IHYuYmFzZV9pZCwgdXNlOiAwLCBzdGF0dXM6IDIsIHNvcnQ6IDIwMDAwMDAgLSB2LmJhc2VfaWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTG9nLmluZm8oaGFzX2xpc3QsIHRoaXMuaGFzX2xpc3QsIHRoaXMubGlzdCwgdGhpcy5yb2xlVm8pO1xuICAgICAgICB0aGlzLmxpc3Quc29ydChVdGlscy50YWJsZVVwcGVyU29ydGVyKFtcImhhc1wiLCBcImJhc2VfaWRcIl0pKTtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgZnVuYyA9IChmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdCB8fCAhdGhpcy5pdGVtX2xpc3QgfHwgdGhpcy5saXN0Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbnVtID0gbnVtIHx8IDI7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlSXRlbShpLCB0aGlzLmxpc3QucG9wKCkpO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdjb3JlLlRpbWVyLnNldChmdW5jLCAyMCwgMSwgXCJyb2xlX2ZhY2VfcGFuZWxfdGltZXJcIik7XG4gICAgICAgIH0pLmJpbmQodGhpcyk7XG4gICAgICAgIGZ1bmMoMTApO1xuICAgIH0sXG5cbiAgICAvLyDliJvlu7rmm7TmlrDkuIDkuKrlpLTlg4/moYZcbiAgICBjcmVhdGVJdGVtOiBmdW5jdGlvbiAoaSwgdikge1xuICAgICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbV9saXN0W3YuYmlkXTtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICB2YXIgY29uZmlnID0gQ29uZmlnLmF2YXRhcl9kYXRhLmRhdGFfYXZhdGFyW3YuYmlkXTtcbiAgICAgICAgICAgIGl0ZW0gPSBjYy5pbnN0YW50aWF0ZSh0aGlzLml0ZW0pO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50LmFkZENoaWxkKGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3Rbdi5iaWRdID0gaXRlbTtcbiAgICAgICAgICAgIGl0ZW0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGl0ZW0uaWNvbiA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xuICAgICAgICAgICAgaXRlbS51c2UgPSBpdGVtLmdldENoaWxkQnlOYW1lKFwidXNlXCIpO1xuICAgICAgICAgICAgaXRlbS5zZWxlY3QgPSBpdGVtLmdldENoaWxkQnlOYW1lKFwic2VsZWN0XCIpO1xuICAgICAgICAgICAgaXRlbS5hY3RpdmVfbm9kZSA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJhY3RpdmVcIik7XG4gICAgICAgICAgICBpdGVtLmxhYmVsID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcImxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgICAgICBpdGVtLmxhYmVsLnN0cmluZyA9IGNvbmZpZy5uYW1lO1xuICAgICAgICAgICAgaXRlbS5pY29uX2JnID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcImljb25fYmdcIik7XG4gICAgICAgICAgICBpZiAoY29uZmlnLm9mZnkpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmljb25fYmcueSA9IGl0ZW0uaWNvbl9iZy55IC0gY29uZmlnLm9mZnlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZCh2LmJpZCk7XG4gICAgICAgICAgICAgICAgLy8gVGlwc0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zaG93SGVhZENpcmNsZVRpcHMoe2JpZDp2LmJpZH0pO1xuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0SGVhZGNpcmNsZShjb25maWcucmVzX2lkKSwgKGZ1bmN0aW9uIChyZXNPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmljb24uc3ByaXRlRnJhbWUgPSByZXNPYmplY3Q7XG4gICAgICAgICAgICB9KS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtLnYgPSB2O1xuICAgICAgICB2YXIgeSA9IC0ocGFyc2VJbnQoaSAvIDQpICogMTcwICsgNzApO1xuICAgICAgICBpdGVtLnNldFBvc2l0aW9uKGkgJSA0ICogMTUwICsgNzUsIHkpO1xuICAgICAgICAvLyB0aGlzLmNvbnRlbnQuaGVpZ2h0ID0gNTUteTtcbiAgICAgICAgaWYgKHYudXNlID09IDEpIHtcbiAgICAgICAgICAgIGl0ZW0udXNlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkKHYuYmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0udXNlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0uYWN0aXZlX25vZGUuYWN0aXZlID0gKHYuc3RhdHVzID09IDIpO1xuICAgICAgICBpZiAodi5zdGF0dXMgPT0gMSkge1xuICAgICAgICAgICAgaXRlbS5pY29uLnNldFN0YXRlKGNjLlNwcml0ZS5TdGF0ZS5OT1JNQUwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5pY29uLnNldFN0YXRlKGNjLlNwcml0ZS5TdGF0ZS5HUkFZKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDorr7nva7pgInmi6nnirbmgIEgXG4gICAgc2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uIChiaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0X2JpZCA9PSBiaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdF9iaWQgPSBiaWQ7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdF9pdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdF9pdGVtLnNlbGVjdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdF9pdGVtID0gdGhpcy5pdGVtX2xpc3RbYmlkXTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0X2l0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0X2l0ZW0uc2VsZWN0LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RfaXRlbS52LnN0YXR1cyA9PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5va19sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuabtCDmjaJcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub2tfbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmv4Ag5rS7XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIG9uSGlkZTogZnVuY3Rpb24gKCkge1xuXG4gICAgfSxcblxuICAgIG9uRGVsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJvbGVfdXBkYXRlX2V2dCkge1xuICAgICAgICAgICAgdGhpcy5yb2xlVm8udW5iaW5kKHRoaXMucm9sZV91cGRhdGVfZXZ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3QgPSBudWxsO1xuICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IG51bGw7XG4gICAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUm9sZUZhY2VQYW5lbDsiXX0=
|