|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/backpack/view/backpack_sell_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, '9095fKXR8FCVLm8dnTW5vou', 'backpack_sell_window');
|
// Scripts/mod/backpack/view/backpack_sell_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 背包内出售物品的面板
|
// <br/>Create: 2019-04-15 16:31:04
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var BackPackConst = require("backpack_const");
|
|
var Backpack_sellWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("backpack", "backpack_sell_window");
|
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Mini; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.ctrl = arguments[0];
|
this.model = this.ctrl.getModel();
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
this.item_list = [];
|
this.wait_sell_list = [];
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
this.background = this.root_wnd.getChildByName("background");
|
this.container = this.root_wnd.getChildByName("container");
|
this.total_width = this.container.getContentSize().width;
|
this.cell_resoult = this.container.getChildByName("cell_resoult"); // img是资产图片节点,是个image value 是值
|
|
this.cell_resoult.active = false;
|
var aaaa = cc.instantiate(this.cell_resoult);
|
this.container.addChild(aaaa);
|
this.cancel_btn = this.container.getChildByName("cancel_btn");
|
this.confirm_btn = this.container.getChildByName("confirm_btn");
|
var label = this.cancel_btn.getChildByName("label").getComponent(cc.Label);
|
label.string = Utils.TI18N("取消");
|
this.cell_label = this.confirm_btn.getChildByName("label");
|
this.win_title = this.container.getChildByName("win_title").getComponent(cc.Label);
|
this.sell_desc = this.container.getChildByName("sell_desc").getComponent(cc.Label);
|
this.sell_title = this.container.getChildByName("sell_title").getComponent(cc.Label);
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
Utils.onTouchEnd(this.cancel_btn, function () {
|
this.ctrl.openSellWindow(false);
|
}.bind(this), 1);
|
Utils.onTouchEnd(this.background, function () {
|
this.ctrl.openSellWindow(false);
|
}.bind(this), 2);
|
Utils.onTouchEnd(this.confirm_btn, function () {
|
if (Utils.next(this.wait_sell_list) && this.bag_code) {
|
this.ctrl.sender10522(this.bag_code, this.wait_sell_list);
|
}
|
}.bind(this), 1);
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(info) {
|
var bag_code = info[0];
|
this.bag_code = bag_code;
|
this.wait_sell_list = [];
|
var sell_value_list = [];
|
var list = info[1];
|
|
for (var i in list) {
|
var v = list[i];
|
|
if (v.id != null && v.config != null && v.config.value && Utils.next(v.config.value)) {
|
this.wait_sell_list.push({
|
id: v.id,
|
bid: v.base_id,
|
num: v.quantity
|
});
|
|
for (var j in v.config.value) {
|
var value = v.config.value[j];
|
|
if (sell_value_list[value[0]] == nil) {
|
sell_value_list[value[0]] = {
|
id: value[0],
|
num: 0
|
};
|
}
|
|
sell_value_list[value[0]].num = sell_value_list[value[0]].num + value[1] * v.quantity;
|
} // 如果是装备,则还需要判断他的精炼附加
|
|
|
if (this.bag_code == BackPackConst.Bag_Code.EQUIPS) {
|
if (v.enchant != 0) {
|
var config = gdata("partner_eqm_data", "data_partner_eqm", Utils.getNorKey(v.config.type, v.enchant));
|
|
if (config != null && config.sell != null && Utils.next(config.sell) != null) {
|
for (var j in config.sell) {
|
var value = config.sell[j];
|
|
if (sell_value_list[value[0]] == null) {
|
sell_value_list[value[0]] = {
|
id: value[0],
|
num: 0
|
};
|
}
|
|
sell_value_list[value[0]].num = sell_value_list[value[0]].num + value[1] * v.quantity;
|
}
|
}
|
}
|
|
var stone_id = 0;
|
var stone_count = 0;
|
|
for (var j in v.gemstones) {
|
var key = Utils.getNorKey(v.config.type, d.lev);
|
var stone_config = Config.partner_gemstone_data.data_upgrade[key];
|
|
if (stone_config && Utils.next(stone_config.add)) {
|
stone_id = stone_config.add[0][0];
|
stone_count = stone_count + stone_config.add[0][1];
|
}
|
}
|
|
if (stone_count > 0) {
|
if (sell_value_list[stone_id] == null) {
|
sell_value_list[stone_id] = {
|
id: stone_id,
|
num: 0
|
};
|
}
|
|
sell_value_list[stone_id].num = sell_value_list[stone_id].num + stone_count;
|
}
|
}
|
}
|
}
|
|
this.showSellItemValue(sell_value_list);
|
var title = "";
|
|
if (bag_code == BackPackConst.Bag_Code.BACKPACK) {
|
title = Utils.TI18N("分解");
|
} else if (bag_code == BackPackConst.Bag_Code.EQUIPS) {
|
title = Utils.TI18N("熔炼");
|
}
|
|
this.win_title.string = title;
|
this.cell_label.string = title;
|
this.sell_desc.string = cc.js.formatStr(Utils.TI18N("%s后物品将不可找回"), title);
|
this.sell_title.string = cc.js.formatStr(Utils.TI18N("%s后将获得下列物品:"), title);
|
},
|
|
/**
|
* desc:展示待出售物品可获得资产
|
* author:{author}
|
* list
|
* return
|
*/
|
showSellItemValue: function showSellItemValue(list) {
|
if (list == null) return;
|
if (!this.cell_resoult) return;
|
var sum = 0;
|
var sell_item = null;
|
var sell_list = [];
|
var max_column = 3; //最大列数
|
|
var total_width = 0;
|
var init_y = this.cell_resoult.y;
|
var width = this.cell_resoult.getContentSize().width;
|
var height = this.cell_resoult.getContentSize().height;
|
|
for (var i in list) {
|
var v = list[i];
|
var config = Utils.getItemConfig(v.id);
|
|
if (config != null) {
|
sum = sum + 1;
|
sell_item = cc.instantiate(this.cell_resoult);
|
sell_item.active = true;
|
this.container.addChild(sell_item);
|
sell_item.img = sell_item.getChildByName("item_img").getComponent(cc.Sprite);
|
this.loadRes(PathTool.getItemRes(config.icon), function (sf_obj) {
|
sell_item.img.spriteFrame = sf_obj;
|
}.bind(this));
|
sell_item.value = sell_item.getChildByName("value").getComponent(cc.Label);
|
sell_item.value.string = Math.floor(v.num); // -- sell_item:setPositionY(this.init_y)
|
|
sell_list.push(sell_item);
|
|
if (sum < 4) {
|
total_width = total_width + sell_item.getContentSize().width;
|
}
|
}
|
}
|
|
var row_count = Math.floor((sell_list.length - 1) / max_column) + 1;
|
var start_x = (this.total_width - (sell_list.length - 1) * 18 - total_width) * 0.5;
|
var start_y = init_y + (row_count - 1) * height;
|
|
if (row_count >= 2) {
|
start_y = start_y - 10;
|
}
|
|
for (var i in sell_list) {
|
var x = start_x + (i - 1) % max_column * (width + 18);
|
var y = start_y - Math.floor((i - 1) / max_column) * (height + 10);
|
item.setPosition(x, y);
|
}
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
this.ctrl.openSellWindow(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYWNrcGFja1xcdmlld1xcYmFja3BhY2tfc2VsbF93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiQmFja1BhY2tDb25zdCIsIkJhY2twYWNrX3NlbGxXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJNaW5pIiwiY3RybCIsImFyZ3VtZW50cyIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJpbml0Q29uZmlnIiwiaXRlbV9saXN0Iiwid2FpdF9zZWxsX2xpc3QiLCJvcGVuQ2FsbEJhY2siLCJiYWNrZ3JvdW5kIiwicm9vdF93bmQiLCJnZXRDaGlsZEJ5TmFtZSIsImNvbnRhaW5lciIsInRvdGFsX3dpZHRoIiwiZ2V0Q29udGVudFNpemUiLCJ3aWR0aCIsImNlbGxfcmVzb3VsdCIsImFjdGl2ZSIsImFhYWEiLCJpbnN0YW50aWF0ZSIsImFkZENoaWxkIiwiY2FuY2VsX2J0biIsImNvbmZpcm1fYnRuIiwibGFiZWwiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJjZWxsX2xhYmVsIiwid2luX3RpdGxlIiwic2VsbF9kZXNjIiwic2VsbF90aXRsZSIsInJlZ2lzdGVyRXZlbnQiLCJvblRvdWNoRW5kIiwib3BlblNlbGxXaW5kb3ciLCJiaW5kIiwibmV4dCIsImJhZ19jb2RlIiwic2VuZGVyMTA1MjIiLCJvcGVuUm9vdFduZCIsImluZm8iLCJzZWxsX3ZhbHVlX2xpc3QiLCJsaXN0IiwiaSIsInYiLCJpZCIsImNvbmZpZyIsInZhbHVlIiwicHVzaCIsImJpZCIsImJhc2VfaWQiLCJudW0iLCJxdWFudGl0eSIsImoiLCJuaWwiLCJCYWdfQ29kZSIsIkVRVUlQUyIsImVuY2hhbnQiLCJnZGF0YSIsImdldE5vcktleSIsInR5cGUiLCJzZWxsIiwic3RvbmVfaWQiLCJzdG9uZV9jb3VudCIsImdlbXN0b25lcyIsImtleSIsImQiLCJsZXYiLCJzdG9uZV9jb25maWciLCJDb25maWciLCJwYXJ0bmVyX2dlbXN0b25lX2RhdGEiLCJkYXRhX3VwZ3JhZGUiLCJhZGQiLCJzaG93U2VsbEl0ZW1WYWx1ZSIsInRpdGxlIiwiQkFDS1BBQ0siLCJqcyIsImZvcm1hdFN0ciIsInN1bSIsInNlbGxfaXRlbSIsInNlbGxfbGlzdCIsIm1heF9jb2x1bW4iLCJpbml0X3kiLCJ5IiwiaGVpZ2h0IiwiZ2V0SXRlbUNvbmZpZyIsImltZyIsIlNwcml0ZSIsImxvYWRSZXMiLCJnZXRJdGVtUmVzIiwiaWNvbiIsInNmX29iaiIsInNwcml0ZUZyYW1lIiwiTWF0aCIsImZsb29yIiwicm93X2NvdW50IiwibGVuZ3RoIiwic3RhcnRfeCIsInN0YXJ0X3kiLCJ4IiwiaXRlbSIsInNldFBvc2l0aW9uIiwiY2xvc2VDYWxsQmFjayJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGFBQWEsR0FBR0QsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUVBLElBQUlFLG1CQUFtQixHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUMvQixhQUFTQyxRQURzQjtBQUUvQkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsVUFBTCxHQUFrQlIsUUFBUSxDQUFDUyxhQUFULENBQXVCLFVBQXZCLEVBQW1DLHNCQUFuQyxDQUFsQjtBQUNBLFNBQUtDLE9BQUwsR0FBZUMsU0FBUyxDQUFDQyxRQUF6QixDQUZjLENBRW9DOztBQUNsRCxTQUFLQyxRQUFMLEdBQWdCQyxPQUFPLENBQUNDLElBQXhCLENBSGMsQ0FHOEI7O0FBQzVDLFNBQUtDLElBQUwsR0FBWUMsU0FBUyxDQUFD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TUFBeEM7O0FBQ0EsUUFBR1csU0FBUyxJQUFJLENBQWhCLEVBQWtCO0FBQ2RHLE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxHQUFHLEVBQXBCO0FBQ0g7O0FBQ0QsU0FBSSxJQUFJdkQsQ0FBUixJQUFhcUMsU0FBYixFQUF1QjtBQUNuQixVQUFJbUIsQ0FBQyxHQUFHRixPQUFPLEdBQUksQ0FBQ3RELENBQUMsR0FBQyxDQUFILElBQU9zQyxVQUFSLElBQXFCbkUsS0FBSyxHQUFDLEVBQTNCLENBQWxCO0FBQ0EsVUFBSXFFLENBQUMsR0FBR2UsT0FBTyxHQUFHTCxJQUFJLENBQUNDLEtBQUwsQ0FBVyxDQUFDbkQsQ0FBQyxHQUFDLENBQUgsSUFBTXNDLFVBQWpCLEtBQWdDRyxNQUFNLEdBQUcsRUFBekMsQ0FBbEI7QUFDQWdCLE1BQUFBLElBQUksQ0FBQ0MsV0FBTCxDQUFpQkYsQ0FBakIsRUFBb0JoQixDQUFwQjtBQUNIO0FBQ0osR0FoTDhCO0FBa0wvQjtBQUNBbUIsRUFBQUEsYUFBYSxFQUFDLHlCQUFVO0FBQ3BCLFNBQUt0RyxJQUFMLENBQVVrQyxjQUFWLENBQXlCLEtBQXpCO0FBQ0g7QUFyTDhCLENBQVQsQ0FBMUIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDog4zljIXlhoXlh7rllK7nianlk4HnmoTpnaLmnb9cbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTE1IDE2OjMxOjA0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIEJhY2tQYWNrQ29uc3QgPSByZXF1aXJlKFwiYmFja3BhY2tfY29uc3RcIik7XG5cbnZhciBCYWNrcGFja19zZWxsV2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImJhY2twYWNrXCIsIFwiYmFja3BhY2tfc2VsbF93aW5kb3dcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLk1pbmk7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IFtdO1xuICAgICAgICB0aGlzLndhaXRfc2VsbF9saXN0ID0gW107XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjueahOWbnuiwgyzlj6/ku6XlnKjov5nph4zmjZXojrfnm7jlhbPoioLngrnmiJbogIXnu4Tku7ZcbiAgICBvcGVuQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XG4gICAgXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImNvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy50b3RhbF93aWR0aCA9IHRoaXMuY29udGFpbmVyLmdldENvbnRlbnRTaXplKCkud2lkdGg7XG4gICAgXG4gICAgICAgIHRoaXMuY2VsbF9yZXNvdWx0ID0gdGhpcy5jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJjZWxsX3Jlc291bHRcIikgIC8vIGltZ+aYr+i1hOS6p+WbvueJh+iKgueCue+8jOaYr+S4qmltYWdlICB2YWx1ZSDmmK/lgLxcbiAgICAgICAgdGhpcy5jZWxsX3Jlc291bHQuYWN0aXZlID0gZmFsc2U7XG4gICAgXG4gICAgICAgIHZhciBhYWFhID0gY2MuaW5zdGFudGlhdGUodGhpcy5jZWxsX3Jlc291bHQpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDaGlsZChhYWFhKTtcbiAgICBcbiAgICAgICAgdGhpcy5jYW5jZWxfYnRuID0gdGhpcy5jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJjYW5jZWxfYnRuXCIpO1xuICAgICAgICB0aGlzLmNvbmZpcm1fYnRuID0gdGhpcy5jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJjb25maXJtX2J0blwiKTtcbiAgICBcbiAgICAgICAgdmFyIGxhYmVsID0gdGhpcy5jYW5jZWxfYnRuLmdldENoaWxkQnlOYW1lKFwibGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlj5bmtohcIik7XG4gICAgXG4gICAgICAgIHRoaXMuY2VsbF9sYWJlbCA9IHRoaXMuY29uZmlybV9idG4uZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKTtcbiAgICAgICAgdGhpcy53aW5fdGl0bGUgPSB0aGlzLmNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIndpbl90aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgIFxuICAgICAgICB0aGlzLnNlbGxfZGVzYyA9IHRoaXMuY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwic2VsbF9kZXNjXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMuc2VsbF90aXRsZSA9IHRoaXMuY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwic2VsbF90aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY2FuY2VsX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5TZWxsV2luZG93KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYmFja2dyb3VuZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5TZWxsV2luZG93KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY29uZmlybV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmKFV0aWxzLm5leHQodGhpcy53YWl0X3NlbGxfbGlzdCkgJiYgdGhpcy5iYWdfY29kZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjEwNTIyKHRoaXMuYmFnX2NvZGUsIHRoaXMud2FpdF9zZWxsX2xpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcyksIDEpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihpbmZvKXtcbiAgICAgICAgdmFyIGJhZ19jb2RlID0gaW5mb1swXTtcbiAgICAgICAgdGhpcy5iYWdfY29kZSA9IGJhZ19jb2RlO1xuICAgICAgICB0aGlzLndhaXRfc2VsbF9saXN0ID0gW107XG4gICAgICAgIHZhciBzZWxsX3ZhbHVlX2xpc3QgPSBbXTtcbiAgICAgICAgdmFyIGxpc3QgPSBpbmZvWzFdO1xuICAgICAgICBmb3IodmFyIGkgaW4gbGlzdCl7XG4gICAgICAgICAgICB2YXIgdiA9IGxpc3RbaV07XG4gICAgICAgICAgICBpZih2LmlkICE9IG51bGwgJiYgdi5jb25maWcgIT0gbnVsbCAmJiB2LmNvbmZpZy52YWx1ZSAmJiBVdGlscy5uZXh0KHYuY29uZmlnLnZhbHVlKSl7XG4gICAgICAgICAgICAgICAgdGhpcy53YWl0X3NlbGxfbGlzdC5wdXNoKHtpZDogdi5pZCwgYmlkOiB2LmJhc2VfaWQsIG51bTogdi5xdWFudGl0eX0pO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaiBpbiB2LmNvbmZpZy52YWx1ZSl7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHYuY29uZmlnLnZhbHVlW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZihzZWxsX3ZhbHVlX2xpc3RbdmFsdWVbMF1dID09IG5pbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxsX3ZhbHVlX2xpc3RbdmFsdWVbMF1dID0ge2lkOnZhbHVlWzBdLCBudW06MH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2VsbF92YWx1ZV9saXN0W3ZhbHVlWzBdXS5udW0gPSBzZWxsX3ZhbHVlX2xpc3RbdmFsdWVbMF1dLm51bSArIHZhbHVlWzFdICogdi5xdWFudGl0eTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzmmK/oo4XlpIfvvIzliJnov5jpnIDopoHliKTmlq3ku5bnmoTnsr7ngrzpmYTliqBcbiAgICAgICAgICAgICAgICBpZih0aGlzLmJhZ19jb2RlID09IEJhY2tQYWNrQ29uc3QuQmFnX0NvZGUuRVFVSVBTKXtcbiAgICAgICAgICAgICAgICAgICAgaWYodi5lbmNoYW50ICE9IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGdkYXRhKFwicGFydG5lcl9lcW1fZGF0YVwiLFwiZGF0YV9wYXJ0bmVyX2VxbVwiLFV0aWxzLmdldE5vcktleSh2LmNvbmZpZy50eXBlLCB2LmVuY2hhbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbmZpZyAhPSBudWxsICYmIGNvbmZpZy5zZWxsICE9IG51bGwgJiYgVXRpbHMubmV4dChjb25maWcuc2VsbCkgIT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBqIGluIGNvbmZpZy5zZWxsKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY29uZmlnLnNlbGxbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNlbGxfdmFsdWVfbGlzdFt2YWx1ZVswXV0gPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxsX3ZhbHVlX2xpc3RbdmFsdWVbMF1dID0ge2lkOiB2YWx1ZVswXSwgbnVtOiAwfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxsX3ZhbHVlX2xpc3RbdmFsdWVbMF1dLm51bSA9IHNlbGxfdmFsdWVfbGlzdFt2YWx1ZVswXV0ubnVtICsgdmFsdWVbMV0gKiB2LnF1YW50aXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvbmVfaWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvbmVfY291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGogaW4gdi5nZW1zdG9uZXMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IFV0aWxzLmdldE5vcktleSh2LmNvbmZpZy50eXBlLCBkLmxldik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RvbmVfY29uZmlnID0gQ29uZmlnLnBhcnRuZXJfZ2Vtc3RvbmVfZGF0YS5kYXRhX3VwZ3JhZGVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0b25lX2NvbmZpZyAmJiBVdGlscy5uZXh0KHN0b25lX2NvbmZpZy5hZGQpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9uZV9pZCA9IHN0b25lX2NvbmZpZy5hZGRbMF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvbmVfY291bnQgPSBzdG9uZV9jb3VudCArIHN0b25lX2NvbmZpZy5hZGRbMF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYoc3RvbmVfY291bnQgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNlbGxfdmFsdWVfbGlzdFtzdG9uZV9pZF0gPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsbF92YWx1ZV9saXN0W3N0b25lX2lkXSA9IHtpZDogc3RvbmVfaWQsIG51bTogMH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxsX3ZhbHVlX2xpc3Rbc3RvbmVfaWRdLm51bSA9IHNlbGxfdmFsdWVfbGlzdFtzdG9uZV9pZF0ubnVtICsgc3RvbmVfY291bnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93U2VsbEl0ZW1WYWx1ZShzZWxsX3ZhbHVlX2xpc3QpO1xuICAgICAgICB2YXIgdGl0bGUgPSBcIlwiO1xuICAgICAgICBpZihiYWdfY29kZSA9PSBCYWNrUGFja0NvbnN0LkJhZ19Db2RlLkJBQ0tQQUNLKXtcbiAgICAgICAgICAgIHRpdGxlID0gVXRpbHMuVEkxOE4oXCLliIbop6NcIik7XG4gICAgICAgIH1lbHNlIGlmKGJhZ19jb2RlID09IEJhY2tQYWNrQ29uc3QuQmFnX0NvZGUuRVFVSVBTKXtcbiAgICAgICAgICAgIHRpdGxlID0gVXRpbHMuVEkxOE4oXCLnhpTngrxcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndpbl90aXRsZS5zdHJpbmcgPSB0aXRsZTtcbiAgICAgICAgdGhpcy5jZWxsX2xhYmVsLnN0cmluZyA9IHRpdGxlO1xuICAgICAgICB0aGlzLnNlbGxfZGVzYy5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCIlc+WQjueJqeWTgeWwhuS4jeWPr+aJvuWbnlwiKSwgdGl0bGUpO1xuICAgICAgICB0aGlzLnNlbGxfdGl0bGUuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiJXPlkI7lsIbojrflvpfkuIvliJfnianlk4HvvJpcIiksIHRpdGxlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZGVzYzrlsZXnpLrlvoXlh7rllK7nianlk4Hlj6/ojrflvpfotYTkuqdcbiAgICAgKiBhdXRob3I6e2F1dGhvcn1cbiAgICAgKiBsaXN0XG4gICAgICogcmV0dXJuXG4gICAgICovXG4gICAgc2hvd1NlbGxJdGVtVmFsdWU6ZnVuY3Rpb24obGlzdCl7XG4gICAgICAgIGlmKGxpc3QgPT0gbnVsbClyZXR1cm47XG4gICAgICAgIGlmKCF0aGlzLmNlbGxfcmVzb3VsdClyZXR1cm47XG4gICAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgICB2YXIgc2VsbF9pdGVtID0gbnVsbDtcbiAgICAgICAgdmFyIHNlbGxfbGlzdCA9IFtdO1xuICAgICAgICB2YXIgbWF4X2NvbHVtbiA9IDM7IC8v5pyA5aSn5YiX5pWwXG4gICAgICAgIHZhciB0b3RhbF93aWR0aCA9IDA7XG4gICAgICAgIHZhciBpbml0X3kgPSB0aGlzLmNlbGxfcmVzb3VsdC55O1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmNlbGxfcmVzb3VsdC5nZXRDb250ZW50U2l6ZSgpLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5jZWxsX3Jlc291bHQuZ2V0Q29udGVudFNpemUoKS5oZWlnaHQ7XG5cbiAgICAgICAgZm9yKHZhciBpIGluIGxpc3Qpe1xuICAgICAgICAgICAgdmFyIHYgPSBsaXN0W2ldO1xuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcodi5pZCk7XG4gICAgICAgICAgICBpZihjb25maWchPW51bGwpe1xuICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIDE7XG4gICAgICAgICAgICAgICAgc2VsbF9pdGVtID0gY2MuaW5zdGFudGlhdGUodGhpcy5jZWxsX3Jlc291bHQpO1xuICAgICAgICAgICAgICAgIHNlbGxfaXRlbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENoaWxkKHNlbGxfaXRlbSk7XG4gICAgICAgICAgICAgICAgc2VsbF9pdGVtLmltZyA9IHNlbGxfaXRlbS5nZXRDaGlsZEJ5TmFtZShcIml0ZW1faW1nXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRJdGVtUmVzKGNvbmZpZy5pY29uKSwgZnVuY3Rpb24oc2Zfb2JqKXtcbiAgICAgICAgICAgICAgICAgICAgc2VsbF9pdGVtLmltZy5zcHJpdGVGcmFtZSAgPSBzZl9vYmo7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICBzZWxsX2l0ZW0udmFsdWUgPSBzZWxsX2l0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJ2YWx1ZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICAgICAgICAgIHNlbGxfaXRlbS52YWx1ZS5zdHJpbmcgPSBNYXRoLmZsb29yKHYubnVtKTtcbiAgICAgICAgICAgICAgICAvLyAtLSBzZWxsX2l0ZW06c2V0UG9zaXRpb25ZKHRoaXMuaW5pdF95KVxuICAgICAgICAgICAgICAgIHNlbGxfbGlzdC5wdXNoKHNlbGxfaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYoc3VtIDwgNCl7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsX3dpZHRoID0gdG90YWxfd2lkdGggKyBzZWxsX2l0ZW0uZ2V0Q29udGVudFNpemUoKS53aWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm93X2NvdW50ID0gTWF0aC5mbG9vcigoc2VsbF9saXN0Lmxlbmd0aCAtIDEpL21heF9jb2x1bW4pICsgMTtcbiAgICAgICAgdmFyIHN0YXJ0X3ggPSAoIHRoaXMudG90YWxfd2lkdGggLSAgKHNlbGxfbGlzdC5sZW5ndGggLSAxKSAqIDE4IC0gdG90YWxfd2lkdGggKSAqIDAuNTtcbiAgICAgICAgdmFyIHN0YXJ0X3kgPSBpbml0X3kgKyAocm93X2NvdW50IC0gMSkqIGhlaWdodDtcbiAgICAgICAgaWYocm93X2NvdW50ID49IDIpe1xuICAgICAgICAgICAgc3RhcnRfeSA9IHN0YXJ0X3kgLSAxMDtcbiAgICAgICAgfVxuICAgICAgICBmb3IodmFyIGkgaW4gc2VsbF9saXN0KXtcbiAgICAgICAgICAgIHZhciB4ID0gc3RhcnRfeCArICgoaS0xKSUgbWF4X2NvbHVtbikqKHdpZHRoKzE4KTtcbiAgICAgICAgICAgIHZhciB5ID0gc3RhcnRfeSAtIE1hdGguZmxvb3IoKGktMSkvbWF4X2NvbHVtbikgKiAoaGVpZ2h0ICsgMTApO1xuICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbih4LCB5KVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuY3RybC5vcGVuU2VsbFdpbmRvdyhmYWxzZSk7XG4gICAgfSxcbn0pIl19
|