|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/common/basepanel.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, 'fbdb9UbFnJAFp1QhzS6W3lv', 'basepanel');
|
// Scripts/common/basepanel.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: shiraho@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 基础标签页或者独立的panel
|
// <br/>Create: new Date().toISOString()
|
// --------------------------------------------------------------------
|
var LoaderManager = require("loadermanager");
|
|
var ViewClass = require("viewclass");
|
|
window.BasePanel = cc.Class({
|
"extends": ViewClass,
|
ctor: function ctor() {
|
this.scale = 1;
|
this.x = 0;
|
this.y = 0;
|
this.initConfig();
|
this.root_wnd = null;
|
},
|
wating: false,
|
prefabPath: "",
|
// 预设路径
|
loading: false,
|
// 是否在加载中
|
fastShowThenHide: false,
|
// 还没有异步加载完成,就要隐藏掉了
|
isFirstOpen: false,
|
// 是否是第一次打开
|
setParent: function setParent(parent) {
|
this._super(parent);
|
|
this.isInLoading = false, this.fastShowThenHide = false, this.isFirstOpen = true;
|
this.base_view_event_list = {};
|
this.res_list = {};
|
this.visible = true;
|
|
if (this.root_wnd && parent instanceof cc.Node) {
|
this.root_wnd.parent = parent;
|
}
|
},
|
// 子类实现具体的,比如说监听事件,或者其他
|
initConfig: function initConfig() {},
|
initPanel: function initPanel() {},
|
registerEvent: function registerEvent() {},
|
onShow: function onShow() {},
|
onHide: function onHide() {},
|
onDelete: function onDelete() {},
|
// 加载预设
|
onLoadPanel: function onLoadPanel() {
|
var self = this;
|
|
if (!this.waiting_timer && this.wating && !window.hide_loading) {
|
this.waiting_timer = gcore.Timer.set(function () {
|
this.is_wating = true;
|
game.updateWaitingStatus(WaitingStaus.LOADING);
|
}.bind(this), 1500, 1);
|
}
|
|
LoaderManager.getInstance().loadRes(this.prefabPath, function (res_object) {
|
// if (error) {
|
// cc.log("加载Prefab失败,原因:" + error);
|
// return;
|
// }
|
if (self.waiting_timer) {
|
gcore.Timer.del(self.waiting_timer);
|
self.waiting_timer = null;
|
}
|
|
if (self.is_wating) {
|
game.updateWaitingStatus();
|
self.is_wating = false;
|
}
|
|
if (self["delete"] || !self.parent._children) {
|
return;
|
}
|
|
self.root_wnd = res_object;
|
self.root_wnd.parent = self.parent;
|
self.root_wnd.scale = self.scale;
|
|
if (self.zIndex) {
|
self.setZIndex(self.zIndex);
|
}
|
|
if (!self.visible) {
|
self.setVisible(false);
|
} // self.root_wnd.active = self.visible;
|
|
|
if (self.zIndex && self.zIndex >= 0) {
|
self.root_wnd.zIndex = self.zIndex;
|
} // 缓存位置
|
|
|
if (self.cache_x != null && self.cache_y != null) {
|
self.root_wnd.setPosition(self.cache_x, self.cache_y);
|
self.cache_x = null;
|
self.cache_y = null;
|
}
|
|
if (self.cache_ap_y != null && self.cache_ap_x != null) {
|
self.root_wnd.setAnchorPoint(self.cache_ap_x, self.cache_ap_y);
|
self.cache_ap_x = null;
|
self.cache_ap_y = null;
|
} // 第一次打开直接回调初始化.获取对象或者组件
|
|
|
if (self.isFirstOpen == true) {
|
self.isFirstOpen = false;
|
self.initPanel();
|
self.registerEvent();
|
}
|
|
self.isInLoading = false; // 加载完成之后,需要判断是否有逻辑隐藏掉
|
|
if (self.fastShowThenHide == true) {
|
self.fastShowThenHide = false; // self.root_wnd.active = false;
|
|
self.setVisible(false);
|
} else {
|
self.onShow(self.open_params);
|
}
|
|
if (self.root_wnd && self.root_wnd.getComponent(cc.Widget)) {
|
self.roow_wdg = self.root_wnd.getComponent(cc.Widget);
|
}
|
|
if (self.root_wnd_cb) self.root_wnd_cb(self.root_wnd);
|
});
|
},
|
// 显示窗体处理
|
show: function show(params) {
|
if (this.isInLoading == true) {
|
return;
|
}
|
|
this.open_params = params;
|
|
if (this.root_wnd == null) {
|
this.isInLoading = true;
|
this.onLoadPanel();
|
} else {
|
this.isInLoading = false; // this.root_wnd.active = true;
|
|
if (this.root_wnd.active) this.setVisible(true);
|
this.onShow(params);
|
}
|
},
|
// 关掉窗体
|
hide: function hide() {
|
if (this.root_wnd) {
|
this.setVisible(false); // this.root_wnd.active = false;
|
|
this.onHide();
|
} else {
|
this.fastShowThenHide = true;
|
}
|
},
|
// 是否可见
|
setVisible: function setVisible(status, dir) {
|
this.visible = status;
|
|
if (this.root_wnd) {
|
if (status) {
|
if (this.roow_wdg) {
|
this.roow_wdg.alignMode = cc.Widget.AlignMode.ON_WINDOW_RESIZE;
|
}
|
|
this.setPosition(this.x, this.y);
|
this.cur_visible = false;
|
} else {
|
if (!this.cur_visible) {
|
if (this.roow_wdg) {
|
this.roow_wdg.alignMode = cc.Widget.AlignMode.ONCE;
|
}
|
|
if (dir == ScrollViewDir.vertical) {
|
this.root_wnd.x -= cc.winSize.width * 2;
|
} else if (dir == ScrollViewDir.horizontal) {
|
this.root_wnd.x -= cc.winSize.height * 2;
|
this.root_wnd.y -= cc.winSize.height * 2;
|
} else {
|
this.root_wnd.x -= cc.winSize.width * 2;
|
} // this.visible_x = this.root_wnd.x;
|
|
|
this.cur_visible = true;
|
}
|
} // this.root_wnd.active = status;
|
|
|
if (this.onVisible) this.onVisible(status);
|
}
|
},
|
//新增一些不受cur_visible控制的显隐
|
setActive: function setActive(status) {
|
this.visible = status;
|
|
if (this.root_wnd) {
|
if (status) {
|
this.setPosition(this.x, this.y);
|
} else {
|
this.root_wnd.x -= cc.winSize.width * 2;
|
}
|
}
|
},
|
isOpen: function isOpen() {
|
if (this.root_wnd && !this.cur_visible) return true;
|
return false;
|
},
|
setPosVisible: function setPosVisible() {
|
if (this.root_wnd) this.root_wnd.x -= 1000;
|
},
|
getVisible: function getVisible() {
|
return this.visible;
|
},
|
setScale: function setScale(scale) {
|
this.scale = scale;
|
if (this.root_wnd) this.root_wnd.scale = scale;
|
},
|
setZIndex: function setZIndex(zIndex) {
|
this.zIndex = zIndex;
|
if (this.root_wnd) this.root_wnd.zIndex = zIndex;
|
},
|
deleteMe: function deleteMe() {
|
this["delete"] = true;
|
this.onDelete();
|
|
this._super(); // this.removeGlobalEvent();
|
// if(this.root_wnd){
|
// this.root_wnd.destroyAllChildren();
|
// this.root_wnd.destroy();
|
// this.root_wnd = null;
|
// }
|
// // LoaderManager.getInstance().deleteRes(this.prefabPath);
|
// LoaderManager.getInstance().releasePrefab(this.prefabPath);
|
// for(var key in this.res_list){
|
// LoaderManager.getInstance().releaseRes(key)
|
// }
|
|
},
|
// 设置坐标位置
|
setPosition: function setPosition(x, y) {
|
if (x == null || y == null) return;
|
this.x = x;
|
this.y = y;
|
|
if (this.root_wnd) {
|
this.root_wnd.setPosition(x, y);
|
} else {
|
this.cache_x = x;
|
this.cache_y = y;
|
}
|
},
|
// 设置锚点
|
setAnchorPoint: function setAnchorPoint(x, y) {
|
this.ap_x = x;
|
this.ap_y = y;
|
|
if (this.root_wnd) {
|
this.root_wnd.setAnchorPoint(0.5, 0.5);
|
} else {
|
this.cache_ap_x = x;
|
this.cache_ap_y = y;
|
}
|
},
|
getPositionX: function getPositionX() {
|
return this.x;
|
},
|
getPositionY: function getPositionY() {
|
return this.y;
|
},
|
getRootWnd: function getRootWnd(cb) {
|
this.root_wnd_cb = cb;
|
if (this.root_wnd) this.root_wnd_cb(this.root_wnd);
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcY29tbW9uXFxiYXNlcGFuZWwuanMiXSwibmFtZXMiOlsiTG9hZGVyTWFuYWdlciIsInJlcXVpcmUiLCJWaWV3Q2xhc3MiLCJ3aW5kb3ciLCJCYXNlUGFuZWwiLCJjYyIsIkNsYXNzIiwiY3RvciIsInNjYWxlIiwieCIsInkiLCJpbml0Q29uZmlnIiwicm9vdF93bmQiLCJ3YXRpbmciLCJwcmVmYWJQYXRoIiwibG9hZGluZyIsImZhc3RTaG93VGhlbkhpZGUiLCJpc0ZpcnN0T3BlbiIsInNldFBhcmVudCIsInBhcmVudCIsIl9zdXBlciIsImlzSW5Mb2FkaW5nIiwiYmFzZV92aWV3X2V2ZW50X2xpc3QiLCJyZXNfbGlzdCIsInZpc2libGUiLCJOb2RlIiwiaW5pdFBhbmVsIiwicmVnaXN0ZXJFdmVudCIsIm9uU2hvdyIsIm9uSGlkZSIsIm9uRGVsZXRlIiwib25Mb2FkUGFuZWwiLCJzZWxmIiwid2FpdGluZ190aW1lciIsImhpZGVfbG9hZGluZyIsImdjb3JlIiwiVGltZXIiLCJzZXQiLCJpc193YXRpbmciLCJnYW1lIiwidXBkYXRlV2FpdGluZ1N0YXR1cyIsIldhaXRpbmdTdGF1cyIsIkxPQURJTkciLCJiaW5kIiwiZ2V0SW5zdGFuY2UiLCJsb2FkUmVzIiwicmVzX29iamVjdCIsImRlbCIsIl9jaGlsZHJlbiIsInpJbmRleCIsInNldFpJbmRleCIsInNldFZpc2libGUiLCJjYWNoZV94IiwiY2FjaGVfeSIsInNldFBvc2l0aW9uIiwiY2FjaGVfYXBfeSIsImNhY2hlX2FwX3giLCJzZXRBbmNob3JQb2ludCIsIm9wZW5fcGFyYW1zIiwiZ2V0Q29tcG9uZW50IiwiV2lkZ2V0Iiwicm9vd193ZGciLCJyb290X3duZF9jYiIsInNob3ciLCJwYXJhbXMiLCJhY3RpdmUiLCJoaWRlIiwic3RhdHVzIiwiZGlyIiwiYWxpZ25Nb2RlIiwiQWxpZ25Nb2RlIiwiT05fV0lORE9XX1JFU0laRSIsImN1cl92aXNpYmxlIiwiT05DRSIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIndpblNpemUiLCJ3aWR0aCIsImhvcml6b250YWwiLCJoZWlnaHQiLCJvblZpc2libGUiLCJzZXRBY3RpdmUiLCJpc09wZW4iLCJzZXRQb3NWaXNpYmxlIiwiZ2V0VmlzaWJsZSIsInNldFNjYWxlIiwiZGVsZXRlTWUiLCJhcF94IiwiYXBfeSIsImdldFBvc2l0aW9uWCIsImdldFBvc2l0aW9uWSIsImdldFJvb3RXbmQiLCJjYiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxhQUFhLEdBQUdDLE9BQU8sQ0FBQyxlQUFELENBQTNCOztBQUNBLElBQUlDLFNBQVMsR0FBR0QsT0FBTyxDQUFDLFdBQUQsQ0FBdkI7O0FBRUFFLE1BQU0sQ0FBQ0MsU0FBUCxHQUFtQkMsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDeEIsYUFBU0osU0FEZTtBQUV4QkssRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsS0FBTCxHQUFhLENBQWI7QUFDQSxTQUFLQyxDQUFMLEdBQVMsQ0FBVDtBQUNBLFNBQUtDLENBQUwsR0FBUyxDQUFUO0FBQ0EsU0FBS0MsVUFBTDtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsSUFBaEI7QUFDSCxHQVJ1QjtBQVN4QkMsRUFBQUEsTUFBTSxFQUFFLEtBVGdCO0FBVXhCQyxFQUFBQSxVQUFVLEVBQUUsRUFWWTtBQVVJO0FBQzVCQyxFQUFBQSxPQUFPLEVBQUUsS0FYZTtBQVdJO0FBQzVCQyxFQUFBQSxnQkFBZ0IsRUFBRSxLQVpNO0FBWUk7QUFDNUJDLEVBQUFBLFdBQVcsRUFBRSxLQWJXO0FBYUk7QUFFNUJDLEVBQUFBLFNBQVMsRUFBRSxtQkFBVUMsTUFBVixFQUFrQjtBQUN6QixTQUFLQyxNQUFMLENBQVlELE1BQVo7O0FBQ0EsU0FBS0UsV0FBTCxHQUFtQixLQUFuQixFQUNJLEtBQUtMLGdCQUFMLEdBQXdCLEtBRDVCLEVBRUksS0FBS0MsV0FBTCxHQUFtQixJ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QUFsQjtBQUNBLFdBQUs4QyxVQUFMLEdBQWtCN0MsQ0FBbEI7QUFDSDtBQUNKLEdBclF1QjtBQXVReEIrRSxFQUFBQSxZQUFZLEVBQUUsd0JBQVk7QUFDdEIsV0FBTyxLQUFLaEYsQ0FBWjtBQUNILEdBelF1QjtBQTJReEJpRixFQUFBQSxZQUFZLEVBQUUsd0JBQVk7QUFDdEIsV0FBTyxLQUFLaEYsQ0FBWjtBQUNILEdBN1F1QjtBQStReEJpRixFQUFBQSxVQUFVLEVBQUUsb0JBQVVDLEVBQVYsRUFBYztBQUN0QixTQUFLOUIsV0FBTCxHQUFtQjhCLEVBQW5CO0FBQ0EsUUFBSSxLQUFLaEYsUUFBVCxFQUNJLEtBQUtrRCxXQUFMLENBQWlCLEtBQUtsRCxRQUF0QjtBQUNQO0FBblJ1QixDQUFULENBQW5CIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogc2hpcmFob0BzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDln7rnoYDmoIfnrb7pobXmiJbogIXni6znq4vnmoRwYW5lbFxuLy8gPGJyLz5DcmVhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBMb2FkZXJNYW5hZ2VyID0gcmVxdWlyZShcImxvYWRlcm1hbmFnZXJcIik7XG52YXIgVmlld0NsYXNzID0gcmVxdWlyZShcInZpZXdjbGFzc1wiKTtcblxud2luZG93LkJhc2VQYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBWaWV3Q2xhc3MsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNjYWxlID0gMTtcbiAgICAgICAgdGhpcy54ID0gMDtcbiAgICAgICAgdGhpcy55ID0gMDtcbiAgICAgICAgdGhpcy5pbml0Q29uZmlnKClcbiAgICAgICAgdGhpcy5yb290X3duZCA9IG51bGw7XG4gICAgfSxcbiAgICB3YXRpbmc6IGZhbHNlLFxuICAgIHByZWZhYlBhdGg6IFwiXCIsICAgICAgICAgICAgIC8vIOmihOiuvui3r+W+hFxuICAgIGxvYWRpbmc6IGZhbHNlLCAgICAgICAgICAgICAvLyDmmK/lkKblnKjliqDovb3kuK1cbiAgICBmYXN0U2hvd1RoZW5IaWRlOiBmYWxzZSwgICAgLy8g6L+Y5rKh5pyJ5byC5q2l5Yqg6L295a6M5oiQLOWwseimgemakOiXj+aOieS6hlxuICAgIGlzRmlyc3RPcGVuOiBmYWxzZSwgICAgICAgICAvLyDmmK/lkKbmmK/nrKzkuIDmrKHmiZPlvIBcblxuICAgIHNldFBhcmVudDogZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB0aGlzLl9zdXBlcihwYXJlbnQpO1xuICAgICAgICB0aGlzLmlzSW5Mb2FkaW5nID0gZmFsc2UsXG4gICAgICAgICAgICB0aGlzLmZhc3RTaG93VGhlbkhpZGUgPSBmYWxzZSxcbiAgICAgICAgICAgIHRoaXMuaXNGaXJzdE9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmJhc2Vfdmlld19ldmVudF9saXN0ID0ge307XG4gICAgICAgIHRoaXMucmVzX2xpc3QgPSB7fVxuICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCAmJiBwYXJlbnQgaW5zdGFuY2VvZiBjYy5Ob2RlKSB7XG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnBhcmVudCA9IHBhcmVudFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWtkOexu+WunueOsOWFt+S9k+eahCzmr5TlpoLor7Tnm5HlkKzkuovku7Ys5oiW6ICF5YW25LuWXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkgeyB9LFxuICAgIGluaXRQYW5lbDogZnVuY3Rpb24gKCkgeyB9LFxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICBvblNob3c6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICBvbkhpZGU6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkgeyB9LFxuXG4gICAgLy8g5Yqg6L296aKE6K6+XG4gICAgb25Mb2FkUGFuZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgICAgICAgaWYgKCF0aGlzLndhaXRpbmdfdGltZXIgJiYgdGhpcy53YXRpbmcgJiYgIXdpbmRvdy5oaWRlX2xvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMud2FpdGluZ190aW1lciA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc193YXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGdhbWUudXBkYXRlV2FpdGluZ1N0YXR1cyhXYWl0aW5nU3RhdXMuTE9BRElORyk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcyksIDE1MDAsIDEpXG4gICAgICAgIH1cbiAgICAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRSZXModGhpcy5wcmVmYWJQYXRoLCBmdW5jdGlvbiAocmVzX29iamVjdCkge1xuICAgICAgICAgICAgLy8gaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgICAgY2MubG9nKFwi5Yqg6L29UHJlZmFi5aSx6LSlLOWOn+WboDpcIiArIGVycm9yKTtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIGlmIChzZWxmLndhaXRpbmdfdGltZXIpIHtcbiAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5kZWwoc2VsZi53YWl0aW5nX3RpbWVyKTtcbiAgICAgICAgICAgICAgICBzZWxmLndhaXRpbmdfdGltZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5pc193YXRpbmcpIHtcbiAgICAgICAgICAgICAgICBnYW1lLnVwZGF0ZVdhaXRpbmdTdGF0dXMoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlzX3dhdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5kZWxldGUgfHwgIXNlbGYucGFyZW50Ll9jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZi5yb290X3duZCA9IHJlc19vYmplY3Q7XG4gICAgICAgICAgICBzZWxmLnJvb3Rfd25kLnBhcmVudCA9IHNlbGYucGFyZW50O1xuICAgICAgICAgICAgc2VsZi5yb290X3duZC5zY2FsZSA9IHNlbGYuc2NhbGU7XG4gICAgICAgICAgICBpZiAoc2VsZi56SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldFpJbmRleChzZWxmLnpJbmRleClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNlbGYucm9vdF93bmQuYWN0aXZlID0gc2VsZi52aXNpYmxlO1xuXG4gICAgICAgICAgICBpZiAoc2VsZi56SW5kZXggJiYgc2VsZi56SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYucm9vdF93bmQuekluZGV4ID0gc2VsZi56SW5kZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOe8k+WtmOS9jee9rlxuICAgICAgICAgICAgaWYgKHNlbGYuY2FjaGVfeCAhPSBudWxsICYmIHNlbGYuY2FjaGVfeSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yb290X3duZC5zZXRQb3NpdGlvbihzZWxmLmNhY2hlX3gsIHNlbGYuY2FjaGVfeSlcbiAgICAgICAgICAgICAgICBzZWxmLmNhY2hlX3ggPSBudWxsO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVfeSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxmLmNhY2hlX2FwX3kgIT0gbnVsbCAmJiBzZWxmLmNhY2hlX2FwX3ggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNlbGYucm9vdF93bmQuc2V0QW5jaG9yUG9pbnQoc2VsZi5jYWNoZV9hcF94LCBzZWxmLmNhY2hlX2FwX3kpXG4gICAgICAgICAgICAgICAgc2VsZi5jYWNoZV9hcF94ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzZWxmLmNhY2hlX2FwX3kgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDnrKzkuIDmrKHmiZPlvIDnm7TmjqXlm57osIPliJ3lp4vljJYu6I635Y+W5a+56LGh5oiW6ICF57uE5Lu2XG4gICAgICAgICAgICBpZiAoc2VsZi5pc0ZpcnN0T3BlbiA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pc0ZpcnN0T3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgc2VsZi5pbml0UGFuZWwoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnJlZ2lzdGVyRXZlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuaXNJbkxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8g5Yqg6L295a6M5oiQ5LmL5ZCOLOmcgOimgeWIpOaWreaYr+WQpuaciemAu+i+kemakOiXj+aOiVxuICAgICAgICAgICAgaWYgKHNlbGYuZmFzdFNob3dUaGVuSGlkZSA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5mYXN0U2hvd1RoZW5IaWRlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAvLyBzZWxmLnJvb3Rfd25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNlbGYuc2V0VmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYub25TaG93KHNlbGYub3Blbl9wYXJhbXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5yb290X3duZCAmJiBzZWxmLnJvb3Rfd25kLmdldENvbXBvbmVudChjYy5XaWRnZXQpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yb293X3dkZyA9IHNlbGYucm9vdF93bmQuZ2V0Q29tcG9uZW50KGNjLldpZGdldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxmLnJvb3Rfd25kX2NiKVxuICAgICAgICAgICAgICAgIHNlbGYucm9vdF93bmRfY2Ioc2VsZi5yb290X3duZCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvLyDmmL7npLrnqpfkvZPlpITnkIZcbiAgICBzaG93OiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5Mb2FkaW5nID09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgIHRoaXMub3Blbl9wYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5vbkxvYWRQYW5lbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0luTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gdGhpcy5yb290X3duZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMucm9vdF93bmQuYWN0aXZlKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmlzaWJsZSh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMub25TaG93KHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5YWz5o6J56qX5L2TXG4gICAgaGlkZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgICAgIC8vIHRoaXMucm9vdF93bmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9uSGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mYXN0U2hvd1RoZW5IaWRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmmK/lkKblj6/op4FcbiAgICBzZXRWaXNpYmxlOiBmdW5jdGlvbiAoc3RhdHVzLCBkaXIpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gc3RhdHVzO1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvb3dfd2RnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vd193ZGcuYWxpZ25Nb2RlID0gY2MuV2lkZ2V0LkFsaWduTW9kZS5PTl9XSU5ET1dfUkVTSVpFO1xuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih0aGlzLngsIHRoaXMueSlcbiAgICAgICAgICAgICAgICB0aGlzLmN1cl92aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJfdmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yb293X3dkZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb293X3dkZy5hbGlnbk1vZGUgPSBjYy5XaWRnZXQuQWxpZ25Nb2RlLk9OQ0U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlyID09IFNjcm9sbFZpZXdEaXIudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdF93bmQueCAtPSBjYy53aW5TaXplLndpZHRoICogMjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaXIgPT0gU2Nyb2xsVmlld0Rpci5ob3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnggLT0gY2Mud2luU2l6ZS5oZWlnaHQgKiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290X3duZC55IC09IGNjLndpblNpemUuaGVpZ2h0ICogMjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdF93bmQueCAtPSBjYy53aW5TaXplLndpZHRoICogMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMudmlzaWJsZV94ID0gdGhpcy5yb290X3duZC54O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cl92aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGlzLnJvb3Rfd25kLmFjdGl2ZSA9IHN0YXR1cztcbiAgICAgICAgICAgIGlmICh0aGlzLm9uVmlzaWJsZSlcbiAgICAgICAgICAgICAgICB0aGlzLm9uVmlzaWJsZShzdGF0dXMpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5paw5aKe5LiA5Lqb5LiN5Y+XY3VyX3Zpc2libGXmjqfliLbnmoTmmL7pmpBcbiAgICBzZXRBY3RpdmU6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gc3RhdHVzO1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24odGhpcy54LCB0aGlzLnkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnggLT0gY2Mud2luU2l6ZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNPcGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kICYmICF0aGlzLmN1cl92aXNpYmxlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzZXRQb3NWaXNpYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKVxuICAgICAgICAgICAgdGhpcy5yb290X3duZC54IC09IDEwMDA7XG4gICAgfSxcblxuICAgIGdldFZpc2libGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVxuICAgIH0sXG5cbiAgICBzZXRTY2FsZTogZnVuY3Rpb24gKHNjYWxlKSB7XG4gICAgICAgIHRoaXMuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpXG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnNjYWxlID0gc2NhbGU7XG4gICAgfSxcblxuICAgIHNldFpJbmRleDogZnVuY3Rpb24gKHpJbmRleCkge1xuICAgICAgICB0aGlzLnpJbmRleCA9IHpJbmRleDtcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpXG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnpJbmRleCA9IHpJbmRleDtcbiAgICB9LFxuXG4gICAgZGVsZXRlTWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uRGVsZXRlKCk7XG4gICAgICAgIHRoaXMuX3N1cGVyKCk7XG4gICAgICAgIC8vIHRoaXMucmVtb3ZlR2xvYmFsRXZlbnQoKTtcbiAgICAgICAgLy8gaWYodGhpcy5yb290X3duZCl7XG4gICAgICAgIC8vICAgICB0aGlzLnJvb3Rfd25kLmRlc3Ryb3lBbGxDaGlsZHJlbigpO1xuICAgICAgICAvLyAgICAgdGhpcy5yb290X3duZC5kZXN0cm95KCk7XG4gICAgICAgIC8vICAgICB0aGlzLnJvb3Rfd25kID0gbnVsbDtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyAvLyBMb2FkZXJNYW5hZ2VyLmdldEluc3RhbmNlKCkuZGVsZXRlUmVzKHRoaXMucHJlZmFiUGF0aCk7XG4gICAgICAgIC8vIExvYWRlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZWxlYXNlUHJlZmFiKHRoaXMucHJlZmFiUGF0aCk7XG4gICAgICAgIC8vIGZvcih2YXIga2V5IGluIHRoaXMucmVzX2xpc3Qpe1xuICAgICAgICAvLyAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlbGVhc2VSZXMoa2V5KVxuICAgICAgICAvLyB9XG4gICAgfSxcblxuICAgIC8vIOiuvue9ruWdkOagh+S9jee9rlxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICBpZiAoeCA9PSBudWxsIHx8IHkgPT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIHRoaXMueCA9IHhcbiAgICAgICAgdGhpcy55ID0geVxuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgdGhpcy5yb290X3duZC5zZXRQb3NpdGlvbih4LCB5KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYWNoZV94ID0geDtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfeSA9IHlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDorr7nva7plJrngrlcbiAgICBzZXRBbmNob3JQb2ludDogZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgdGhpcy5hcF94ID0geDtcbiAgICAgICAgdGhpcy5hcF95ID0geTtcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdF93bmQuc2V0QW5jaG9yUG9pbnQoMC41LCAwLjUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYWNoZV9hcF94ID0geDtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfYXBfeSA9IHk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UG9zaXRpb25YOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnhcbiAgICB9LFxuXG4gICAgZ2V0UG9zaXRpb25ZOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnlcbiAgICB9LFxuXG4gICAgZ2V0Um9vdFduZDogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIHRoaXMucm9vdF93bmRfY2IgPSBjYjtcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpXG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kX2NiKHRoaXMucm9vdF93bmQpO1xuICAgIH0sXG59KVxuIl19
|