(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/mainscene/element/build_item.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, '4087cw7cgRHz4WRkcpMHcJf', 'build_item'); // Scripts/mod/mainscene/element/build_item.js "use strict"; var SceneConst = require("scene_const"); var PathTool = require("pathtool"); var BuildItem = cc.Class({ "extends": BaseClass, properties: { data: null, build_is_lock: null, can_click: false, isBuild: false, config: null, build_type: null, root_wnd: cc.Node, iconSP: cc.Sprite, red_state: null, red_nd: cc.Node }, ctor: function ctor() { this.data = arguments[0]; this.type = arguments[1]; this.createRootWind(); if (this.type == SceneConst.BuildItemType.build) { this.build_type = this.data.config.type; this.isBuild = this.build_type == SceneConst.BuildItemType.build; this.config = this.data.config; this.createIcon(); } else if (this.type == SceneConst.BuildItemType.effect) { this.createEffect(); } else if (this.type == SceneConst.BuildItemType.npc) { this.createNPC(); } }, createRootWind: function createRootWind() { this.con_size = cc.v2(83, 80); var build_name = ""; if (this.type == SceneConst.BuildItemType.build) { build_name = "guidesign_build_" + this.data.config.bid; } this.root_wnd = new cc.Node(build_name); this.root_wnd.setContentSize(83, 80); this.root_wnd.setAnchorPoint(0.5, 0); var root_x = typeof this.data.x == "number" ? this.data.x : this.data.config.x; var root_y = typeof this.data.y == "number" ? this.data.y : this.data.config.y; this.root_wnd.setPosition(root_x, root_y); }, createIcon: function createIcon() { // this.iconSP = this.root_wnd.addComponent(cc.Sprite); var sp_nd = new cc.Node(); sp_nd.setAnchorPoint(0.5, 0); this.iconSP = sp_nd.addComponent(cc.Sprite); this.root_wnd.addChild(sp_nd); this.button = this.root_wnd.addComponent(cc.Button); this.button.interactable = true; this.button.transition = cc.Button.Transition.SCALE; this.button.duration = 0.1; this.button.zoomScale = 0.9; if (this.isBuild) { this.createBuild(); } // 红点 this.red_nd = new cc.Node(); this.red_nd.position = cc.v2(this.root_wnd.width * 0.3, this.root_wnd.height * 0.8); this.root_wnd.addChild(this.red_nd); this.red_sp = this.red_nd.addComponent(cc.Sprite); var red_res = PathTool.getUIIconPath("centerscene", "scene_0"); LoaderManager.getInstance().loadRes(red_res, function (red_sf) { this.red_sp.spriteFrame = red_sf; }.bind(this)); this.red_nd.active = false; this.setTipStatus(); }, registerEvent: function registerEvent() { if (this.data && this.isBuild) { this.root_wnd.on(cc.Node.EventType.TOUCH_END, function (event) { var tochInfo = event.touch; var startPos = event.touch.getStartLocation(); var localPos = event.touch.getLocation(); var dis = Math.sqrt(Math.pow(startPos.x - localPos.x, 2) + Math.pow(startPos.y - localPos.y, 2)); if (dis < 40) this.clickBbuildItem(); }.bind(this)); this.build_vo_update = this.data.bind(this.data.Update_self_event, function (key) { if (key == "lock_status") { this.setLockStatus(); } else if (key == "tips_status") { this.setTipStatus(); } else if (key == "fight_status") { this.fightStatus(); } }.bind(this)); } }, createBuild: function createBuild() { var iconName = "scene_" + this.config.res; var atlasPath = "ui_res/centerscene/" + iconName + ".png"; LoaderManager.getInstance().loadRes(atlasPath, function (res_object) { this.iconSP.spriteFrame = res_object; }.bind(this)); this.setLockStatus(); this.registerEvent(); }, createEffect: function createEffect() { var sp_node = new cc.Node(""); sp_node.position = cc.v2(0, this.con_size.y * 0.5); this.root_wnd.addChild(sp_node); this.spine = sp_node.addComponent(sp.Skeleton); this.spinePath = PathTool.getSpinePath(this.data.res, "action"); LoaderManager.getInstance().loadRes(this.spinePath, function (res) { this.spine.skeletonData = res; this.spine.setAnimation(0, "action", true); }.bind(this)); }, createNPC: function createNPC() { var sp_node = new cc.Node(""); sp_node.setContentSize(cc.v2(90, 90)); sp_node.position = cc.v2(0, this.con_size.y * 0.5); if (this.data.bid !== 102 && this.data.bid !== 152) { // sp_node.addComponent(cc.BlockInputEvents); sp_node.on(cc.Node.EventType.TOUCH_END, this.onTouchNpc.bind(this), this); } sp_node.test_res = this.data; this.root_wnd.addChild(sp_node); this.spine = sp_node.addComponent(sp.Skeleton); this.spinePath = PathTool.getSpinePath(this.data.res, "action"); this.spine.setEndListener(this.animaComplete.bind(this)); LoaderManager.getInstance().loadRes(this.spinePath, function (res) { this.spine.skeletonData = res; this.spine.setAnimation(0, "action1", true); }.bind(this)); }, onTouchNpc: function onTouchNpc(event) {// cc.log(event); // cc.log("TTTTTTTTTTTTTTTTTTTTTTTTTTT"); }, animaComplete: function animaComplete(tes1, tes2) {// cc.log("IIIIIIIIIIIIIIIIIIIII"); // cc.log(tes1); // cc.log(tes2); }, setLockStatus: function setLockStatus() { if (this.build_is_lock === null || this.build_is_lock !== this.data.is_lock) { this.build_is_lock = this.data.is_lock; if (!this.data.is_lock) { this.iconSP.setState(cc.Sprite.State.NORMAL); // 解锁的时候设置下红点 } else { this.iconSP.setState(cc.Sprite.State.GRAY); } } }, clickBbuildItem: function clickBbuildItem() { if (!this.data) return; if (this.data.is_lock) { message(this.data.desc); } else { if (this.data.group_id != 0) {} // message(Utils.TI18N(this.data.config.name + "未开发")); var mainSceneController = require("mainscene_controller").getInstance(); mainSceneController.openBuild(this.data.config.bid); } }, setRedPoint: function setRedPoint() { if (this.data.is_lock || !this.data) return; var tipInfo = this.data.getTipsStatus(); }, setTipStatus: function setTipStatus() { if (this.data.is_lock || !this.data) { this.red_nd.active = false; return; } var status = this.data.getTipsStatus(); this.red_nd.active = status; }, deleteMe: function deleteMe() { if (this.type = SceneConst.BuildItemType.effect) { this.root_wnd.destroy(); LoaderManager.getInstance().releaseRes(this.spinePath); } }, fightStatus: function fightStatus() { var status = this.data.getFightStatus(); if (status) { if (!this.fight_nd) { this.initFightEffent(); } else { this.fight_nd.active = true; } } else { if (this.fight_nd) this.fight_nd.active = false; } }, initFightEffent: function initFightEffent() { var fight_nd = this.fight_nd = new cc.Node(); fight_nd.y = this.root_wnd.height; this.root_wnd.addChild(fight_nd); this.fight_effect = fight_nd.addComponent(sp.Skeleton); var effect_res = PathTool.getEffectRes(186); var effect_path = PathTool.getSpinePath(effect_res); LoaderManager.getInstance().loadRes(effect_path, function (effect_sd) { this.fight_effect.skeletonData = effect_sd; this.fight_effect.setAnimation(0, "action", true); }.bind(this)); } }); module.exports = BuildItem; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxtYWluc2NlbmVcXGVsZW1lbnRcXGJ1aWxkX2l0ZW0uanMiXSwibmFtZXMiOlsiU2NlbmVDb25zdCIsInJlcXVpcmUiLCJQYXRoVG9vbCIsIkJ1aWxkSXRlbSIsImNjIiwiQ2xhc3MiLCJCYXNlQ2xhc3MiLCJwcm9wZXJ0aWVzIiwiZGF0YSIsImJ1aWxkX2lzX2xvY2siLCJjYW5fY2xpY2siLCJpc0J1aWxkIiwiY29uZmlnIiwiYnVpbGRfdHlwZSIsInJvb3Rfd25kIiwiTm9kZSIsImljb25TUCIsIlNwcml0ZSIsInJlZF9zdGF0ZSIsInJlZF9uZCIsImN0b3IiLCJhcmd1bWVudHMiLCJ0eXBlIiwiY3JlYXRlUm9vdFdpbmQiLCJCdWlsZEl0ZW1UeXBlIiwiYnVpbGQiLCJjcmVhdGVJY29uIiwiZWZmZWN0IiwiY3JlYXRlRWZmZWN0IiwibnBjIiwiY3JlYXRlTlBDIiwiY29uX3NpemUiLCJ2MiIsImJ1aWxkX25hbWUiLCJiaWQiLCJzZXRDb250ZW50U2l6ZSIsInNldEFuY2hvclBvaW50Iiwicm9vdF94IiwieCIsInJvb3RfeSIsInkiLCJzZXRQb3NpdGlvbiIsInNwX25kIiwiYWRkQ29tcG9uZW50IiwiYWRkQ2hpbGQiLCJidXR0b24iLCJCdXR0b24iLCJpbnRlcmFjdGFibGUiLCJ0cmFuc2l0aW9uIiwiVHJhbnNpdGlvbiIsIlNDQUxFIiwiZHVyYXRpb24iLCJ6b29tU2NhbGUiLCJjcmVhdGVCdWlsZCIsInBvc2l0aW9uIiwid2lkdGgiLCJoZWlnaHQiLCJyZWRfc3AiLCJyZWRfcmVzIiwiZ2V0VUlJY29uUGF0aCIsIkxvYWRlck1hbmFnZXIiLCJnZXRJbnN0YW5jZSIsImxvYWRSZXMiLCJyZWRfc2YiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJhY3RpdmUiLCJzZXRUaXBTdGF0dXMiLCJyZWdpc3RlckV2ZW50Iiwib24iLCJFdmVudFR5cGUiLCJUT1VDSF9FTkQiLCJldmVudCIsInRvY2hJbmZvIiwidG91Y2giLCJzdGFydFBvcyIsImdldFN0YXJ0TG9jYXRpb24iLCJsb2NhbFBvcyIsImdldExvY2F0aW9uIiwiZGlzIiwiTWF0aCIsInNxcnQiLCJwb3ciLCJjbGlja0JidWlsZEl0ZW0iLCJidWlsZF92b191cGRhdGUiLCJVcGRhdGVfc2VsZl9ldmVudCIsImtleSIsInNldExvY2tTdGF0dXMiLCJmaWdodFN0YXR1cyIsImljb25OYW1lIiwicmVzIiwiYXRsYXNQYXRoIiwicmVzX29iamVjdCIsInNwX25vZGUiLCJzcGluZSIsInNwIiwiU2tlbGV0b24iLCJzcGluZVBhdGgiLCJnZXRTcGluZVBhdGgiLCJza2VsZXRvbkRhdGEiLCJzZXRBbmltYXRpb24iLCJvblRvdWNoTnBjIiwidGVzdF9yZXMiLCJzZXRFbmRMaXN0ZW5lciIsImFuaW1hQ29tcGxldGUiLCJ0ZXMxIiwidGVzMiIsImlzX2xvY2siLCJzZXRTdGF0ZSIsIlN0YXRlIiwiTk9STUFMIiwiR1JBWSIsIm1lc3NhZ2UiLCJkZXNjIiwiZ3JvdXBfaWQiLCJtYWluU2NlbmVDb250cm9sbGVyIiwib3BlbkJ1aWxkIiwic2V0UmVkUG9pbnQiLCJ0aXBJbmZvIiwiZ2V0VGlwc1N0YXR1cyIsInN0YXR1cyIsImRlbGV0ZU1lIiwiZGVzdHJveSIsInJlbGVhc2VSZXMiLCJnZXRGaWdodFN0YXR1cyIsImZpZ2h0X25kIiwiaW5pdEZpZ2h0RWZmZW50IiwiZmlnaHRfZWZmZWN0IiwiZWZmZWN0X3JlcyIsImdldEVmZmVjdFJlcyIsImVmZmVjdF9wYXRoIiwiZWZmZWN0X3NkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFJQSxVQUFVLEdBQUdDLE9BQU8sQ0FBQyxhQUFELENBQXhCOztBQUNBLElBQUlDLFFBQVEsR0FBR0QsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBRUEsSUFBSUUsU0FBUyxHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUN4QixhQUFTQyxTQURlO0FBR3hCQyxFQUFBQSxVQUFVLEVBQUU7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LFVBQVUsR0FBRzlILFFBQVEsQ0FBQytILFlBQVQsQ0FBc0IsR0FBdEIsQ0FBakI7QUFDQSxRQUFJQyxXQUFXLEdBQUdoSSxRQUFRLENBQUNnRyxZQUFULENBQXNCOEIsVUFBdEIsQ0FBbEI7QUFDQXBFLElBQUFBLGFBQWEsQ0FBQ0MsV0FBZCxHQUE0QkMsT0FBNUIsQ0FBb0NvRSxXQUFwQyxFQUFpRCxVQUFVQyxTQUFWLEVBQXFCO0FBQ3JFLFdBQUtKLFlBQUwsQ0FBa0I1QixZQUFsQixHQUFpQ2dDLFNBQWpDO0FBQ1MsV0FBS0osWUFBTCxDQUFrQjNCLFlBQWxCLENBQStCLENBQS9CLEVBQWtDLFFBQWxDLEVBQTRDLElBQTVDO0FBQ1QsS0FIZ0QsQ0FHL0NuQyxJQUgrQyxDQUcxQyxJQUgwQyxDQUFqRDtBQUlBO0FBeE91QixDQUFULENBQWhCO0FBNE9BbUUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCbEksU0FBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTY2VuZUNvbnN0ID0gcmVxdWlyZShcInNjZW5lX2NvbnN0XCIpO1xyXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIilcclxuXHJcbnZhciBCdWlsZEl0ZW3jgIA9IGNjLkNsYXNzKHtcclxuXHRleHRlbmRzOiBCYXNlQ2xhc3MsXHJcblxyXG5cdHByb3BlcnRpZXM6IHtcclxuXHRcdGRhdGE6IG51bGwsXHJcblx0XHRidWlsZF9pc19sb2NrOiBudWxsLFxyXG5cdFx0Y2FuX2NsaWNrOiBmYWxzZSxcclxuXHRcdGlzQnVpbGQ6IGZhbHNlLFxyXG5cdFx0Y29uZmlnOiBudWxsLFxyXG5cdFx0YnVpbGRfdHlwZTogbnVsbCxcclxuXHRcdHJvb3Rfd25kOiBjYy5Ob2RlLFxyXG5cdFx0aWNvblNQOiBjYy5TcHJpdGUsXHJcblx0XHRyZWRfc3RhdGU6IG51bGwsXHJcblx0XHRyZWRfbmQ6IGNjLk5vZGUsXHJcblx0fSxcclxuXHJcblx0Y3RvcjogZnVuY3Rpb24oKSB7XHJcblx0XHR0aGlzLmRhdGEgPSBhcmd1bWVudHNbMF07XHJcblx0XHR0aGlzLnR5cGUgPSBhcmd1bWVudHNbMV07XHJcblxyXG5cdFx0dGhpcy5jcmVhdGVSb290V2luZCgpO1xyXG5cclxuXHRcdGlmICh0aGlzLnR5cGUgPT0gU2NlbmVDb25zdC5CdWlsZEl0ZW1UeXBlLmJ1aWxkKSB7XHJcblx0XHRcdHRoaXMuYnVpbGRfdHlwZSA9IHRoaXMuZGF0YS5jb25maWcudHlwZTtcclxuXHRcdFx0dGhpcy5pc0J1aWxkID0gKHRoaXMuYnVpbGRfdHlwZSA9PSBTY2VuZUNvbnN0LkJ1aWxkSXRlbVR5cGUuYnVpbGQpO1xyXG5cdFx0XHR0aGlzLmNvbmZpZyA9IHRoaXMuZGF0YS5jb25maWc7XHJcblx0XHRcdHRoaXMuY3JlYXRlSWNvbigpO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLnR5cGUgPT0gU2NlbmVDb25zdC5CdWlsZEl0ZW1UeXBlLmVmZmVjdCkge1xyXG5cdFx0XHR0aGlzLmNyZWF0ZUVmZmVjdCgpO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLnR5cGUgPT0gU2NlbmVDb25zdC5CdWlsZEl0ZW1UeXBlLm5wYykge1xyXG5cdFx0XHR0aGlzLmNyZWF0ZU5QQygpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGNyZWF0ZVJvb3RXaW5kOiBmdW5jdGlvbigpIHtcclxuXHRcdHRoaXMuY29uX3NpemUgPSBjYy52Mig4MywgODApO1xyXG5cclxuXHRcdHZhciBidWlsZF9uYW1lID0gXCJcIjtcclxuXHRcdGlmICh0aGlzLnR5cGUgPT0gU2NlbmVDb25zdC5CdWlsZEl0ZW1UeXBlLmJ1aWxkKSB7XHJcblx0XHRcdGJ1aWxkX25hbWUgPSBcImd1aWRlc2lnbl9idWlsZF9cIiArIHRoaXMuZGF0YS5jb25maWcuYmlkO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucm9vdF93bmQgPSBuZXcgY2MuTm9kZShidWlsZF9uYW1lKTtcclxuXHRcdHRoaXMucm9vdF93bmQuc2V0Q29udGVudFNpemUoODMsIDgwKTtcclxuXHRcdHRoaXMucm9vdF93bmQuc2V0QW5jaG9yUG9pbnQoMC41LCAwKTtcclxuXHJcblx0XHR2YXIgcm9vdF94ID0gKHR5cGVvZiB0aGlzLmRhdGEueCA9PSBcIm51bWJlclwiKSA/IHRoaXMuZGF0YS54IDogdGhpcy5kYXRhLmNvbmZpZy54O1xyXG5cdFx0dmFyIHJvb3RfeSA9ICh0eXBlb2YgdGhpcy5kYXRhLnkgPT0gXCJudW1iZXJcIikgPyB0aGlzLmRhdGEueSA6IHRoaXMuZGF0YS5jb25maWcueTtcclxuXHRcdHRoaXMucm9vdF93bmQuc2V0UG9zaXRpb24ocm9vdF94LCByb290X3kpO1xyXG5cdH0sXHJcblxyXG5cdGNyZWF0ZUljb246IGZ1bmN0aW9uKCkge1xyXG5cdFx0Ly8gdGhpcy5pY29uU1AgPSB0aGlzLnJvb3Rfd25kLmFkZENvbXBvbmVudChjYy5TcHJpdGUpO1xyXG5cdFx0dmFyIHNwX25kID0gbmV3IGNjLk5vZGUoKTtcclxuXHRcdHNwX25kLnNldEFuY2hvclBvaW50KDAuNSwgMCk7XHJcblx0XHR0aGlzLmljb25TUCA9IHNwX25kLmFkZENvbXBvbmVudChjYy5TcHJpdGUpO1xyXG5cdFx0dGhpcy5yb290X3duZC5hZGRDaGlsZChzcF9uZCk7XHJcblxyXG5cdFx0dGhpcy5idXR0b24gPSB0aGlzLnJvb3Rfd25kLmFkZENvbXBvbmVudChjYy5CdXR0b24pO1xyXG5cdFx0dGhpcy5idXR0b24uaW50ZXJhY3RhYmxlID0gdHJ1ZTtcclxuXHRcdHRoaXMuYnV0dG9uLnRyYW5zaXRpb24gPSBjYy5CdXR0b24uVHJhbnNpdGlvbi5TQ0FMRTtcclxuXHRcdHRoaXMuYnV0dG9uLmR1cmF0aW9uID0gMC4xO1xyXG5cdFx0dGhpcy5idXR0b24uem9vbVNjYWxlID0gMC45O1xyXG5cclxuXHRcdGlmICh0aGlzLmlzQnVpbGQpIHtcclxuXHRcdFx0dGhpcy5jcmVhdGVCdWlsZCgpO1xyXG5cdFx0fVxyXG5cdFx0Ly/jgIDnuqLngrlcclxuXHRcdHRoaXMucmVkX25kID0gbmV3IGNjLk5vZGUoKTtcclxuXHRcdHRoaXMucmVkX25kLnBvc2l0aW9uID0gY2MudjIodGhpcy5yb290X3duZC53aWR0aCAqIDAuMywgdGhpcy5yb290X3duZC5oZWlnaHQgKiAwLjgpO1xyXG5cdFx0dGhpcy5yb290X3duZC5hZGRDaGlsZCh0aGlzLnJlZF9uZCk7XHJcblx0XHR0aGlzLnJlZF9zcCA9IHRoaXMucmVkX25kLmFkZENvbXBvbmVudChjYy5TcHJpdGUpO1xyXG5cdFx0dmFyIHJlZF9yZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY2VudGVyc2NlbmVcIiwgXCJzY2VuZV8wXCIpO1xyXG5cdFx0TG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRSZXMocmVkX3JlcywgZnVuY3Rpb24gKHJlZF9zZikge1xyXG5cdFx0XHR0aGlzLnJlZF9zcC5zcHJpdGVGcmFtZSA9IHJlZF9zZjtcclxuXHRcdH0uYmluZCh0aGlzKSlcclxuXHRcdHRoaXMucmVkX25kLmFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5zZXRUaXBTdGF0dXMoKTtcclxuXHR9LFxyXG5cclxuXHRyZWdpc3RlckV2ZW50OiBmdW5jdGlvbigpIHtcclxuXHRcdGlmKHRoaXMuZGF0YSAmJiB0aGlzLmlzQnVpbGQpIHtcclxuXHRcdFx0dGhpcy5yb290X3duZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdFx0dmFyIHRvY2hJbmZvID0gZXZlbnQudG91Y2g7XHJcblx0XHRcdFx0dmFyIHN0YXJ0UG9zID0gZXZlbnQudG91Y2guZ2V0U3RhcnRMb2NhdGlvbigpO1xyXG5cdFx0XHRcdHZhciBsb2NhbFBvcyA9IGV2ZW50LnRvdWNoLmdldExvY2F0aW9uKCk7XHJcblx0XHRcdFx0dmFyIGRpcyA9IE1hdGguc3FydChNYXRoLnBvdyhzdGFydFBvcy54IC0gbG9jYWxQb3MueCwgMikgKyBNYXRoLnBvdyhzdGFydFBvcy55IC0gbG9jYWxQb3MueSwgMikpO1xyXG5cdFx0XHRcdGlmIChkaXMgPCA0MCkgdGhpcy5jbGlja0JidWlsZEl0ZW0oKTtcclxuXHRcdFx0fS5iaW5kKHRoaXMpKTtcclxuXHJcblx0XHRcdHRoaXMuYnVpbGRfdm9fdXBkYXRlID0gdGhpcy5kYXRhLmJpbmQodGhpcy5kYXRhLlVwZGF0ZV9zZWxmX2V2ZW50LCBmdW5jdGlvbihrZXkpe1xyXG5cdFx0XHRcdGlmIChrZXkgPT0gXCJsb2NrX3N0YXR1c1wiKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNldExvY2tTdGF0dXMoKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGtleSA9PSBcInRpcHNfc3RhdHVzXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMuc2V0VGlwU3RhdHVzKCk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChrZXkgPT0gXCJmaWdodF9zdGF0dXNcIikge1xyXG5cdFx0XHRcdFx0dGhpcy5maWdodFN0YXR1cygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fS5iaW5kKHRoaXMpKTtcclxuXHRcdH1cclxuXHR9LFxyXG4gXHJcblx0Y3JlYXRlQnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGljb25OYW1lID0gXHRcInNjZW5lX1wiICsgdGhpcy5jb25maWcucmVzO1xyXG5cdFx0dmFyIGF0bGFzUGF0aCA9IFwidWlfcmVzL2NlbnRlcnNjZW5lL1wiICsgaWNvbk5hbWUgKyBcIi5wbmdcIjtcclxuXHRcdExvYWRlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2FkUmVzKGF0bGFzUGF0aCwgZnVuY3Rpb24gKHJlc19vYmplY3QpIHtcclxuXHRcdFx0dGhpcy5pY29uU1Auc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xyXG5cdFx0fS5iaW5kKHRoaXMpKVxyXG5cclxuXHRcdHRoaXMuc2V0TG9ja1N0YXR1cygpO1xyXG5cdFx0dGhpcy5yZWdpc3RlckV2ZW50KCk7XHJcblx0fSxcclxuXHJcblx0Y3JlYXRlRWZmZWN0OiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBzcF9ub2RlID0gbmV3IGNjLk5vZGUoXCJcIik7XHJcblx0XHRzcF9ub2RlLnBvc2l0aW9uID0gY2MudjIoMCwgdGhpcy5jb25fc2l6ZS55ICogMC41KTtcdFx0XHJcblx0XHR0aGlzLnJvb3Rfd25kLmFkZENoaWxkKHNwX25vZGUpO1xyXG4gICAgICAgIHRoaXMuc3BpbmUgPSBzcF9ub2RlLmFkZENvbXBvbmVudChzcC5Ta2VsZXRvbik7XHJcbiAgICAgICAgdGhpcy5zcGluZVBhdGggPSBQYXRoVG9vbC5nZXRTcGluZVBhdGgodGhpcy5kYXRhLnJlcywgXCJhY3Rpb25cIilcclxuXHJcbiAgICAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRSZXModGhpcy5zcGluZVBhdGgsIChmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3BpbmUuc2tlbGV0b25EYXRhID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLnNwaW5lLnNldEFuaW1hdGlvbigwLCBcImFjdGlvblwiLCB0cnVlKTtcclxuICAgICAgICB9KS5iaW5kKHRoaXMpKTtcclxuXHR9LFxyXG5cclxuXHRjcmVhdGVOUEM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIHNwX25vZGUgPSBuZXcgY2MuTm9kZShcIlwiKTtcclxuXHRcdHNwX25vZGUuc2V0Q29udGVudFNpemUoY2MudjIoOTAsIDkwKSk7XHJcblx0XHRzcF9ub2RlLnBvc2l0aW9uID0gY2MudjIoMCwgdGhpcy5jb25fc2l6ZS55ICogMC41KTtcclxuXHRcdGlmICh0aGlzLmRhdGEuYmlkICE9PSAxMDIgJiYgdGhpcy5kYXRhLmJpZCAhPT0gMTUyKSB7XHJcblx0XHRcdC8vIHNwX25vZGUuYWRkQ29tcG9uZW50KGNjLkJsb2NrSW5wdXRFdmVudHMpO1xyXG5cdFx0XHRzcF9ub2RlLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgdGhpcy5vblRvdWNoTnBjLmJpbmQodGhpcyksIHRoaXMpO1xyXG5cdFx0fVxyXG5cdFx0c3Bfbm9kZS50ZXN0X3JlcyA9IHRoaXMuZGF0YTtcclxuXHRcdHRoaXMucm9vdF93bmQuYWRkQ2hpbGQoc3Bfbm9kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3BpbmUgPSBzcF9ub2RlLmFkZENvbXBvbmVudChzcC5Ta2VsZXRvbik7XHJcbiAgICAgICAgdGhpcy5zcGluZVBhdGggPSBQYXRoVG9vbC5nZXRTcGluZVBhdGgodGhpcy5kYXRhLnJlcywgXCJhY3Rpb25cIilcclxuICAgICAgICB0aGlzLnNwaW5lLnNldEVuZExpc3RlbmVyKHRoaXMuYW5pbWFDb21wbGV0ZS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRSZXModGhpcy5zcGluZVBhdGgsIChmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3BpbmUuc2tlbGV0b25EYXRhID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLnNwaW5lLnNldEFuaW1hdGlvbigwLCBcImFjdGlvbjFcIiwgdHJ1ZSk7XHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XHJcblx0fSxcclxuXHJcblx0b25Ub3VjaE5wYzogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHRcdC8vIGNjLmxvZyhldmVudCk7XHJcblx0XHQvLyBjYy5sb2coXCJUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRcIik7XHJcblx0fSxcclxuXHJcblx0YW5pbWFDb21wbGV0ZTogZnVuY3Rpb24odGVzMSwgdGVzMikge1xyXG5cdFx0Ly8gY2MubG9nKFwiSUlJSUlJSUlJSUlJSUlJSUlJSUlJXCIpO1xyXG5cdFx0Ly8gY2MubG9nKHRlczEpO1xyXG5cdFx0Ly8gY2MubG9nKHRlczIpO1xyXG5cdH0sXHJcblxyXG5cdHNldExvY2tTdGF0dXM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0aWYgKHRoaXMuYnVpbGRfaXNfbG9jayA9PT0gbnVsbCB8fCB0aGlzLmJ1aWxkX2lzX2xvY2sgIT09IHRoaXMuZGF0YS5pc19sb2NrKSB7XHRcdFxyXG5cdFx0XHR0aGlzLmJ1aWxkX2lzX2xvY2sgPSB0aGlzLmRhdGEuaXNfbG9jaztcclxuXHRcdFx0aWYgKCF0aGlzLmRhdGEuaXNfbG9jaykge1xyXG5cdFx0XHRcdHRoaXMuaWNvblNQLnNldFN0YXRlKGNjLlNwcml0ZS5TdGF0ZS5OT1JNQUwpO1xyXG5cdFx0XHRcdC8vIOino+mUgeeahOaXtuWAmeiuvue9ruS4i+e6oueCuVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuaWNvblNQLnNldFN0YXRlKGNjLlNwcml0ZS5TdGF0ZS5HUkFZKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGNsaWNrQmJ1aWxkSXRlbTogZnVuY3Rpb24oKSB7XHJcblx0XHRpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xyXG5cdFx0aWYgKHRoaXMuZGF0YS5pc19sb2NrKSB7XHJcblx0XHRcdG1lc3NhZ2UodGhpcy5kYXRhLmRlc2MpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHRoaXMuZGF0YS5ncm91cF9pZCAhPSAwKSB7XHJcblxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIG1lc3NhZ2UoVXRpbHMuVEkxOE4odGhpcy5kYXRhLmNvbmZpZy5uYW1lICsgXCLmnKrlvIDlj5FcIikpO1xyXG5cdFx0XHR2YXIgbWFpblNjZW5lQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWluc2NlbmVfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpO1xyXG5cdFx0XHRtYWluU2NlbmVDb250cm9sbGVyLm9wZW5CdWlsZCh0aGlzLmRhdGEuY29uZmlnLmJpZCk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0c2V0UmVkUG9pbnQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0aWYgKHRoaXMuZGF0YS5pc19sb2NrIHx8ICF0aGlzLmRhdGEpIHJldHVybjtcclxuXHRcdHZhciB0aXBJbmZvID0gdGhpcy5kYXRhLmdldFRpcHNTdGF0dXMoKTtcclxuXHR9LFxyXG5cclxuXHRzZXRUaXBTdGF0dXM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0aWYgKHRoaXMuZGF0YS5pc19sb2NrIHx8ICF0aGlzLmRhdGEpICB7XHJcblx0XHRcdHRoaXMucmVkX25kLmFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIHN0YXR1cyA9IHRoaXMuZGF0YS5nZXRUaXBzU3RhdHVzKCk7XHJcblx0XHR0aGlzLnJlZF9uZC5hY3RpdmUgPSBzdGF0dXM7XHJcblx0fSxcclxuXHJcblx0ZGVsZXRlTWU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0aWYgKHRoaXMudHlwZSA9IFNjZW5lQ29uc3QuQnVpbGRJdGVtVHlwZS5lZmZlY3QpIHtcclxuXHRcdFx0dGhpcy5yb290X3duZC5kZXN0cm95KCk7XHJcblx0XHRcdExvYWRlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZWxlYXNlUmVzKHRoaXMuc3BpbmVQYXRoKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cdFxyXG5cdGZpZ2h0U3RhdHVzOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBzdGF0dXMgPSB0aGlzLmRhdGEuZ2V0RmlnaHRTdGF0dXMoKVxyXG5cdFx0aWYgKHN0YXR1cykge1xyXG5cdFx0XHRpZiAoIXRoaXMuZmlnaHRfbmQpIHtcclxuXHRcdFx0XHR0aGlzLmluaXRGaWdodEVmZmVudCgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuZmlnaHRfbmQuYWN0aXZlID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHRoaXMuZmlnaHRfbmQpXHJcblx0XHRcdFx0dGhpcy5maWdodF9uZC5hY3RpdmUgPSBmYWxzZTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRpbml0RmlnaHRFZmZlbnQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGZpZ2h0X25kID0gdGhpcy5maWdodF9uZCA9IG5ldyBjYy5Ob2RlKCk7XHJcblx0XHRmaWdodF9uZC55ID0gdGhpcy5yb290X3duZC5oZWlnaHQ7XHJcblx0XHR0aGlzLnJvb3Rfd25kLmFkZENoaWxkKGZpZ2h0X25kKTtcclxuXHRcdHRoaXMuZmlnaHRfZWZmZWN0ID0gZmlnaHRfbmQuYWRkQ29tcG9uZW50KHNwLlNrZWxldG9uKTtcclxuXHJcblx0XHR2YXIgZWZmZWN0X3JlcyA9IFBhdGhUb29sLmdldEVmZmVjdFJlcygxODYpO1xyXG5cdFx0dmFyIGVmZmVjdF9wYXRoID0gUGF0aFRvb2wuZ2V0U3BpbmVQYXRoKGVmZmVjdF9yZXMpO1xyXG5cdFx0TG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRSZXMoZWZmZWN0X3BhdGgsIGZ1bmN0aW9uIChlZmZlY3Rfc2QpIHtcclxuXHRcdFx0dGhpcy5maWdodF9lZmZlY3Quc2tlbGV0b25EYXRhID0gZWZmZWN0X3NkO1xyXG4gICAgICAgICAgICB0aGlzLmZpZ2h0X2VmZmVjdC5zZXRBbmltYXRpb24oMCwgXCJhY3Rpb25cIiwgdHJ1ZSk7XHJcblx0XHR9LmJpbmQodGhpcykpXHJcblx0fVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEJ1aWxkSXRlbeOAgCJdfQ==