(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Script/GameManager.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, 'b0432BA295DjIOcuitdGKO1', 'GameManager'); // Script/GameManager.ts "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); // 主游戏控制类 var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; var GameManager = /** @class */ (function (_super) { __extends(GameManager, _super); function GameManager() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.kuang1_Prefab = null; _this.kuang2_Prefab = null; _this.Block = null; _this.TimeLabel = null; _this.LevelLabel = null; _this.Guide = null; _this.progress = null; //-95 640 _this.Top = null; //80 -725 return _this; } GameManager.prototype.onLoad = function () { this.guide_State = false; this.level = cc.fx.GameConfig.GM_INFO.level; this.guide_Level = cc.fx.GameConfig.GM_INFO.guide_Level; this.LevelLabel.string = (this.level + 1) + ""; this.progress.fillRange = cc.fx.GameConfig.GM_INFO.score / 24; if (this.progress.fillRange >= 0.2) this.Top.getChildByName("star1").active = true; if (this.progress.fillRange >= 0.5) this.Top.getChildByName("star2").active = true; if (this.progress.fillRange >= 0.8) this.Top.getChildByName("star3").active = true; if ((this.level == 0 && this.guide_Level == 4) || (this.level == 4 && this.guide_Level == 3) || (this.level == 8 && this.guide_Level == 1)) { this.openGuide(false); } else { this.LevelLabel.node.active = true; this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "第 轮"; this.init(); } }; GameManager.prototype.init = function () { var _this = this; if (this.level == 4 && this.guide_Level == 2) { cc.fx.GameConfig.GM_INFO.guide_Level -= 1; this.guide_State = true; this.LevelLabel.node.active = false; this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练 习"; // this.node.getChildByName("tip").active = true; } this.result = 0; this.countTime = 6; this.TimeLabel.string = cc.fx.GameTool.getTimeMargin(this.countTime); this.createBlock(); setTimeout(function () { _this.createCustom(); }, 1000); }; GameManager.prototype.openGuide = function (type) { this.Guide.active = true; this.guide_State = true; // this.node.getChildByName("tip").active = true; if (!type) cc.fx.GameConfig.GM_INFO.guide_Level -= 1; this.Guide.getChildByName("one").active = false; this.Guide.getChildByName("two").active = false; this.Guide.getChildByName("three").active = false; this.Guide.getChildByName("four").active = false; var name = "one"; if (this.level == 0) { name = "one"; this.LevelLabel.node.active = false; this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练 习"; } else if (this.level == 4) { name = "two"; this.LevelLabel.node.active = false; this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练 习"; } else if (this.level == 8) { name = "three"; this.guide_State = false; } if (type) name = "four"; this.Guide.getChildByName(name).active = true; cc.tween(this.Guide.getChildByName(name)) .to(0.5, { opacity: 255 }) .start(); }; GameManager.prototype.closeGuide = function () { if (this.Guide.getChildByName("four").active) { this.Guide.active = false; cc.director.loadScene("GameScene"); } else { this.Guide.active = false; this.init(); } // }; //创建方块地图 GameManager.prototype.createBlock = function () { this.outside_Array = []; this.inside_Array = []; this.outside = []; this.inside = []; for (var i = 0; i < 16; i++) { var block = cc.instantiate(this.kuang1_Prefab); block.getComponent("Block").setId(i); block.parent = this.Block.getChildByName("outside"); var x = void 0, y = 0; if (i < 5) { x = -284 + 142 * i; y = 259; } else if (i < 9) { x = 284; y = 259 - (i - 4) * 142; } else if (i < 13) { x = 284 - (i - 8) * 142; y = -309; } else if (i < 16) { x = -284; y = -309 + (i - 12) * 142; } block.setPosition(x, y); this.outside_Array.push(block); } for (var j = 3; j < 12; j++) { var block = cc.instantiate(this.kuang2_Prefab); block.getComponent("Block").setId(j); block.parent = this.Block.getChildByName("inside"); block.setPosition(-132 + j % 3 * 132, 239 - parseInt(j / 3 + "") * 132); this.inside_Array.push(block); } }; //创建关卡 GameManager.prototype.createCustom = function () { //初始化关卡配置数据 this.level = cc.fx.GameConfig.GM_INFO.level; this.LevelLabel.string = (this.level + 1) + ""; this.config = cc.fx.GameConfig.LEVEL_INFO[this.level]; if (this.level == 4 && this.guide_Level == 2) { this.config = cc.fx.GameConfig.LEVEL_INFO[6]; } this.pass = false; //放正确答案和错误答案 this.answerInsideTexture = Math.floor(Math.random() * 14 + 1); //内圈错误答案随机 this.insideTexture = []; this.outsideTexture = []; for (var k = 0; k < 14; k++) { if ((k + 1) != this.answerInsideTexture) { this.insideTexture.push(k + 1); } } cc.fx.GameTool.shuffleArray(this.insideTexture); this.answerOutsideTexture = this.insideTexture[11]; //分配正确答案和错误答案位置 if (this.config["inside"] > 0) { this.result += 1; var random = Math.random() * 100; var arrayTemp = [0, 1, 2, 3, 5, 6, 7, 8]; if (this.config["insideType"] == 1) { if (random >= 50) this.inside = [0, 1, 2]; else this.inside = [6, 7, 8]; } else if (this.config["insideType"] == 2) { if (random >= 50) this.inside = [0, 3, 6]; else this.inside = [2, 5, 8]; } else { this.inside = cc.fx.GameTool.shuffleArray(arrayTemp); this.inside.splice(this.config["inside"], this.inside.length - this.config["inside"]); } this.answerInside = this.inside[Math.floor(Math.random() * this.inside.length)]; } //分配外圈正确答案和错误答案位置 if (this.config["outside"] > 0) { this.result += 1; if (this.config["outsideType"] == 1) { this.outside = [1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15]; } else if (this.config["outsideType"] == 2) { this.outside = [0, 4, 8, 12]; } else { this.outside = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; } cc.fx.GameTool.shuffleArray(this.outside); this.answerOutside = this.outside[Math.floor(Math.random() * this.outside.length)]; if (this.config["outside"] == 2) { for (var j = 0; j < 15; j++) { this.outsideTexture.push(this.insideTexture[3]); } } else if (this.config["outside"] == 3) { this.outsideTexture = [this.insideTexture[5], this.insideTexture[6], this.insideTexture[5], this.insideTexture[6], this.insideTexture[5]]; for (var j = 0; j < 10; j++) { var randomTemp = Math.random() * 100; if (randomTemp > 50) this.outsideTexture.push(this.insideTexture[5]); else this.outsideTexture.push(this.insideTexture[6]); } cc.fx.GameTool.shuffleArray(this.outsideTexture); } else if (this.config["outside"] == 4) { this.outsideTexture = [this.insideTexture[2], this.insideTexture[4], this.insideTexture[6], this.insideTexture[2], this.insideTexture[4], this.insideTexture[6]]; for (var j = 0; j < 9; j++) { var randomTemp = Math.random() * 100; if (randomTemp < 33) this.outsideTexture.push(this.insideTexture[2]); else if (randomTemp < 66) this.outsideTexture.push(this.insideTexture[4]); else this.outsideTexture.push(this.insideTexture[6]); } cc.fx.GameTool.shuffleArray(this.outsideTexture); } } this.runBlock(); }; //块执行图片出现消失动画 GameManager.prototype.runBlock = function () { var _this = this; if (this.config["inside"] > 0) { this.inside_Array[4].getComponent("Block").answerShow(this.answerInsideTexture); setTimeout(function () { var insideNumber = 0; for (var i = 0; i < _this.inside.length; i++) { if (_this.inside[i] == _this.answerInside) _this.inside_Array[_this.inside[i]].getComponent("Block").show(true, true, _this.answerInsideTexture); else { _this.inside_Array[_this.inside[i]].getComponent("Block").show(false, true, _this.insideTexture[insideNumber]); insideNumber += 1; } } }, this.config["showTime"] * 1000); } if (this.config["outside"] > 0) { this.outside_Array[this.answerOutside].getComponent("Block").answerShow(this.answerOutsideTexture); if (this.config["outside"] > 1) { var outsideNumber = 0; for (var i = 0; i < this.outside_Array.length; i++) { if (i == this.answerOutside) this.outside_Array[i].getComponent("Block").show(true, false, this.answerOutsideTexture); else { this.outside_Array[i].getComponent("Block").show(false, false, this.outsideTexture[outsideNumber]); outsideNumber += 1; } } } setTimeout(function () { var outsideNumber = 0; for (var i = 0; i < _this.outside_Array.length; i++) { if (i == _this.answerOutside) _this.outside_Array[i].getComponent("Block").lockShow(true, false); else { _this.outside_Array[i].getComponent("Block").lockShow(false, false); outsideNumber += 1; } } }, this.config["showTime"] * 1000); } setTimeout(function () { if (!_this.guide_State) { _this.startTime = cc.fx.GameTool.getTime(); _this.schedule(_this.updateCountDownTime, 1); } }, this.config["showTime"] * 1000); }; //正确 GameManager.prototype.openResult = function (result) { var _this = this; this.result -= 1; //非引导状态 if (!this.guide_State) { this.flipBlock(result); if (this.result == 0) { this.unschedule(this.updateCountDownTime); setTimeout(function () { _this.setData(result); }, 1000); setTimeout(function () { if (cc.fx.GameConfig.GM_INFO.level < cc.fx.GameConfig.LEVEL_INFO.length - 1) { cc.fx.GameConfig.GM_INFO.level += 1; cc.director.loadScene("GameScene"); } }, 2000); } } //引导状态下 else { if (result.result) { this.flipBlock(result); setTimeout(function () { if (_this.level == 4 && cc.fx.GameConfig.GM_INFO.guide_Level == 2) { cc.director.loadScene("GameScene"); } else _this.openGuide(true); }, 1000); } } }; //翻转形状变成问号 GameManager.prototype.flipBlock = function (result) { if (result.type) { var pos = this.changePos(true, result.id); if (!this.guide_State) cc.fx.GameConfig.CLICK_DATA.userChoiceInner.push(pos.x, pos.y); for (var i = 0; i < this.inside.length; i++) { if (this.inside[i] == this.answerInside) { this.inside_Array[4].getChildByName("texture").active = true; this.inside_Array[4].getChildByName("texture").opacity = 255; this.inside_Array[this.inside[i]].getChildByName("yes").active = true; var pos_1 = this.changePos(true, this.inside_Array[this.inside[i]].getComponent("Block")._idNumber); if (!this.guide_State) cc.fx.GameConfig.CLICK_DATA.rightChoiceInner.push(pos_1.x, pos_1.y); } this.inside_Array[this.inside[i]].getComponent("Block")._touch = false; } if (result.result) { this.addScore(); } } else { var pos = this.changePos(false, result.id); if (!this.guide_State) cc.fx.GameConfig.CLICK_DATA.userChoiceOuter.push(pos.x, pos.y); for (var i = 0; i < this.outside_Array.length; i++) { this.outside_Array[i].getComponent("Block").lockHide(); this.outside_Array[i].getChildByName("texture").active = true; if (i == this.answerOutside) { this.outside_Array[i].getChildByName("yes").active = true; this.outside_Array[i].getComponent("Block").show(true, false, this.answerOutsideTexture); var pos_2 = this.changePos(false, this.outside_Array[i].getComponent("Block")._idNumber); if (!this.guide_State) cc.fx.GameConfig.CLICK_DATA.rightChoiceOuter.push(pos_2.x, pos_2.y); } } if (result.result) { this.addScore(); } } }; //加分 加进度条,加星星 GameManager.prototype.addScore = function () { var _this = this; if (!this.guide_State) { cc.fx.GameConfig.GM_INFO.score += 1; var progress = cc.fx.GameConfig.GM_INFO.score / 24; if (progress >= 1) progress = 1; cc.tween(this.progress) .to(0.2, { fillRange: progress }) .call(function () { if (_this.Top.getChildByName("star1").active == false && progress >= 0.2) { _this.Top.getChildByName("star1").active = true; _this.Top.getChildByName("star1").opacity = 0; _this.Top.getChildByName("star1").scale = 0.1; cc.tween(_this.Top.getChildByName("star1")) .to(0.3, { opacity: 255, scale: 1.1 }) .to(0.1, { opacity: 255, scale: 0.9 }) .to(0.1, { opacity: 255, scale: 1 }) .start(); } if (_this.Top.getChildByName("star2").active == false && progress >= 0.5) { _this.Top.getChildByName("star2").active = true; _this.Top.getChildByName("star2").opacity = 0; _this.Top.getChildByName("star2").scale = 0.1; cc.tween(_this.Top.getChildByName("star2")) .to(0.3, { opacity: 255, scale: 1.1 }) .to(0.1, { opacity: 255, scale: 0.9 }) .to(0.1, { opacity: 255, scale: 1 }) .start(); } if (_this.Top.getChildByName("star3").active == false && progress >= 0.8) { _this.Top.getChildByName("star3").active = true; _this.Top.getChildByName("star3").opacity = 0; _this.Top.getChildByName("star3").scale = 0.1; cc.tween(_this.Top.getChildByName("star3")) .to(0.3, { opacity: 255, scale: 1.1 }) .to(0.1, { opacity: 255, scale: 0.9 }) .to(0.1, { opacity: 255, scale: 1 }) .start(); } }) .start(); } }; //返回首页 GameManager.prototype.backScene = function () { cc.director.loadScene("LoadScene"); }; //重新开始 GameManager.prototype.reStart = function () { }; //获取时间戳 GameManager.prototype.getTime = function () { var timestamp = new Date().getTime(); return timestamp; }; //获胜 GameManager.prototype.passLevel = function () { }; //失败 GameManager.prototype.loseLevel = function (type) { }; GameManager.prototype.changePos = function (type, num) { var x = 0; var y = 0; //内部 if (type) { y = parseInt(num / 3 + ""); x = num % 3; } //外部 else { if (num < 5) { y = 0; x = num; } else if (num < 9) { x = 5; y = num - 4; } else if (num < 13) { y = 4; x = 12 - num; } else if (num < 16) { x = 0; y = 16 - num; } } var jg = cc.v2(x, y); return jg; }; //如果是倒计时 调用此方法 GameManager.prototype.updateCountDownTime = function () { if (this.countTime > 0) { this.countTime -= 1; // this.TimeLabel.string =this.countTime + ""; this.TimeLabel.string = cc.fx.GameTool.getTimeMargin(this.countTime); if (this.countTime <= 0) { this.unschedule(this.updateCountDownTime); this.node.getChildByName("Mask").active = true; var data = { "result": false, "type": true, "id": null }; if (this.config["inside"] > 0) cc.fx.Notifications.emit("result", data); var data2 = { "result": false, "type": false, "id": null }; if (this.config["outside"] > 0) cc.fx.Notifications.emit("result", data2); } } }; //上传每次操作数据 GameManager.prototype.setData = function (result) { cc.fx.GameConfig.CLICK_DATA.success = result.result; cc.fx.GameConfig.CLICK_DATA.round = (cc.fx.GameConfig.GM_INFO.level + 1); cc.fx.GameConfig.CLICK_DATA.duration = new Date().getTime() - this.startTime - 1000; cc.fx.GameTool.setGameData(); }; GameManager.prototype.onEnable = function () { cc.fx.Notifications.on("result", this.openResult, this); }; GameManager.prototype.onDisable = function () { cc.fx.Notifications.off("result", this.openResult, this); }; GameManager.prototype.update = function (dt) { }; __decorate([ property(cc.Prefab) ], GameManager.prototype, "kuang1_Prefab", void 0); __decorate([ property(cc.Prefab) ], GameManager.prototype, "kuang2_Prefab", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Block", void 0); __decorate([ property(cc.Label) ], GameManager.prototype, "TimeLabel", void 0); __decorate([ property(cc.Label) ], GameManager.prototype, "LevelLabel", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Guide", void 0); __decorate([ property(cc.Sprite) ], GameManager.prototype, "progress", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Top", void 0); GameManager = __decorate([ ccclass ], GameManager); return GameManager; }(cc.Component)); exports.default = GameManager; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTO0FBQ0gsSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUM7SUFBeUMsK0JBQVk7SUFBckQ7UUFBQSxxRUE4ZUM7UUE1ZUcsbUJBQWEsR0FBYyxJQUFJLENBQUM7UUFFaEMsbUJBQWEsR0FBYyxJQUFJLENBQUM7UUFFaEMsV0FBSyxHQUFZLElBQUksQ0FBQztRQUV0QixlQUFTLEdBQWEsSUFBSSxDQUFDO1FBRTNCLGdCQUFVLEdBQWEsSUFBSSxDQUFDO1FBRTVCLFdBQUssR0FBWSxJQUFJLENBQUM7UUFHdEIsY0FBUSxHQUFjLElBQUksQ0FBQyxDQUFDLFNBQVM7UUFFckMsU0FBRyxHQUFZLElBQUksQ0FBQyxDQUFBLFNBQVM7O0lBNmRqQyxDQUFDO0lBbmNHLDRCQUFNLEdBQU47UUFDSSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBQyxFQUFFLENBQUM7UUFDNUQsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFB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SUFFRCw4QkFBUSxHQUFSO1FBQ0ksRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTVELENBQUM7SUFDRCwrQkFBUyxHQUFUO1FBQ0ksRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDRCw0QkFBTSxHQUFOLFVBQVEsRUFBRTtJQUVWLENBQUM7SUEzZUQ7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztzREFDWTtJQUVoQztRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO3NEQUNZO0lBRWhDO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7OENBQ0k7SUFFdEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztrREFDUTtJQUUzQjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO21EQUNTO0lBRTVCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7OENBQ0k7SUFHdEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztpREFDTztJQUUzQjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRDQUNFO0lBakJILFdBQVc7UUFEL0IsT0FBTztPQUNhLFdBQVcsQ0E4ZS9CO0lBQUQsa0JBQUM7Q0E5ZUQsQUE4ZUMsQ0E5ZXdDLEVBQUUsQ0FBQyxTQUFTLEdBOGVwRDtrQkE5ZW9CLFdBQVciLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyDkuLvmuLjmiI/mjqfliLbnsbtcclxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7XHJcbkBjY2NsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVNYW5hZ2VyIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcclxuICAgIEBwcm9wZXJ0eShjYy5QcmVmYWIpXHJcbiAgICBrdWFuZzFfUHJlZmFiOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIGt1YW5nMl9QcmVmYWI6IGNjLlByZWZhYiA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEJsb2NrOiBjYy5Ob2RlID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5MYWJlbClcclxuICAgIFRpbWVMYWJlbDogY2MuTGFiZWwgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLkxhYmVsKVxyXG4gICAgTGV2ZWxMYWJlbDogY2MuTGFiZWwgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBHdWlkZTogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLlNwcml0ZSlcclxuICAgIHByb2dyZXNzOiBjYy5TcHJpdGUgPSBudWxsOyAvLy05NSA2NDBcclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKSAgXHJcbiAgICBUb3A6IGNjLk5vZGUgPSBudWxsOy8vODAgLTcyNVxyXG5cclxuICAgIGNvdW50VGltZTogbnVtYmVyOyAgICAgIC8v5ri45oiP5oC7ZGFvamlzaGlcclxuICAgIHN0YXJ0VGltZTogbnVtYmVyOyAgICAgIC8v5ri45oiP5byA5aeL5pe26Ze077yM5pe26Ze05oizXHJcbiAgICBwYXVzZTogYm9vbGVhbiA7ICAgICAgICAvL+a4uOaIj+aaguWBnFxyXG4gICAgZ2FtZU92ZXI6IGJvb2xlYW4gOyAgICAgLy/muLjmiI/nu5PmnZ9cclxuICAgIHJlc3VsdDogbnVtYmVyOyAgICAgICAgIC8v5b2T5YmN5bCP5bGA57uT5p2f5qCH5p2GXHJcblxyXG4gICAgb3V0c2lkZV9BcnJheTogYW55OyAgICAgLy/lhoXlnIjmlbDnu4RcclxuICAgIGluc2lkZV9BcnJheTogYW55OyAgICAgIC8v5aSW5ZyI5pWw57uEXHJcbiAgICBsZXZlbDogbnVtYmVyOyAgICAgICAgICAvL+WFs+WNoeetiee6p1xyXG4gICAgZ3VpZGVfTGV2ZWw6IG51bWJlcjsgICAgLy/lvJXlr7znrYnnuqdcclxuICAgIGd1aWRlX1N0YXRlOiBib29sZWFuOyAgICAvL+W8leWvvOetiee6p1xyXG4gICAgY29uZmlnOiB7fTsgICAgICAgICAgICAgLy/lvZPliY3lhbPljaHphY3nva5cclxuICAgIGFuc3dlckluc2lkZTogbnVtYmVyOyAgIC8v5q2j56Gu562U5qGI5L2N572uXHJcbiAgICBhbnN3ZXJPdXRzaWRlOiBudW1iZXI7ICAvL+ato+ehruetlOahiOS9jee9rlxyXG4gICAgcGFzczogYm9vbGVhbjsgICAgICAgICAgLy/mmK/lkKbpgJrlhbNcclxuICAgIG91dHNpZGU6IGFueTsgICAgICAgICAgIC8v5aSW5ZyI5a6e6ZmF5omn6KGM5pWw57uEXHJcbiAgICBpbnNpZGU6IGFueTsgICAgICAgICAgICAvL+WGheWciOWunumZheaJp+ihjOaVsOe7hFxyXG4gICAgYW5zd2VySW5zaWRlVGV4dHVyZTogbnVtYmVyOyAgLy/kuonlj5bnrZTmoYjlm77niYdcclxuICAgIGFuc3dlck91dHNpZGVUZXh0dXJlOiBudW1iZXI7ICAvL+S6ieWPluetlOahiOWbvueJh1xyXG4gICAgaW5zaWRlVGV4dHVyZTogbnVtYmVyW107ICAgLy/plJnor6/nrZTmoYjmlbDnu4RcclxuICAgIG91dHNpZGVUZXh0dXJlOiBudW1iZXJbXTsgICAvL+mUmeivr+etlOahiOaVsOe7hFxyXG4gICAgXHJcbiAgXHJcblxyXG4gICAgb25Mb2FkICgpIHtcclxuICAgICAgICB0aGlzLmd1aWRlX1N0YXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZXZlbCA9IGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbDtcclxuICAgICAgICB0aGlzLmd1aWRlX0xldmVsID0gY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmd1aWRlX0xldmVsO1xyXG4gICAgICAgIHRoaXMuTGV2ZWxMYWJlbC5zdHJpbmcgPSAodGhpcy5sZXZlbCsxKStcIlwiO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MuZmlsbFJhbmdlID0gY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnNjb3JlLzI0O1xyXG4gICAgICAgIGlmKHRoaXMucHJvZ3Jlc3MuZmlsbFJhbmdlPj0gMC4yKSB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgaWYodGhpcy5wcm9ncmVzcy5maWxsUmFuZ2U+PSAwLjUpIHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICBpZih0aGlzLnByb2dyZXNzLmZpbGxSYW5nZT49IDAuOCkgdGhpcy5Ub3AuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyM1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGlmKCh0aGlzLmxldmVsID09IDAgJiYgdGhpcy5ndWlkZV9MZXZlbCA9PSA0KSB8fFxyXG4gICAgICAgICh0aGlzLmxldmVsID09IDQgJiYgdGhpcy5ndWlkZV9MZXZlbCA9PSAzKSB8fFxyXG4gICAgICAgICh0aGlzLmxldmVsID09IDggJiYgdGhpcy5ndWlkZV9MZXZlbCA9PSAxKSl7XHJcbiAgICAgICAgICAgIHRoaXMub3Blbkd1aWRlKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5MZXZlbExhYmVsLm5vZGUuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiVG9wXCIpLmdldENoaWxkQnlOYW1lKFwibGlhbnhpXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXCLnrKwgICAgICAgIOi9rlwiO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpe1xyXG4gICAgICAgIGlmKHRoaXMubGV2ZWwgPT0gNCAmJiB0aGlzLmd1aWRlX0xldmVsID09IDIpIHtcclxuICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uZ3VpZGVfTGV2ZWwgLT0gMTtcclxuICAgICAgICAgICB0aGlzLmd1aWRlX1N0YXRlID0gdHJ1ZTtcclxuICAgICAgICAgICB0aGlzLkxldmVsTGFiZWwubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJUb3BcIikuZ2V0Q2hpbGRCeU5hbWUoXCJsaWFueGlcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcIue7gyAgIOS5oFwiO1xyXG4gICAgICAgIC8vICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXN1bHQgPSAwO1xyXG4gICAgICAgIHRoaXMuY291bnRUaW1lID0gNjtcclxuICAgICAgICB0aGlzLlRpbWVMYWJlbC5zdHJpbmcgPSAgY2MuZnguR2FtZVRvb2wuZ2V0VGltZU1hcmdpbih0aGlzLmNvdW50VGltZSk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVCbG9jaygpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbSgpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5HdWlkZSh0eXBlKXtcclxuICAgICAgICB0aGlzLkd1aWRlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ndWlkZV9TdGF0ZSA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgaWYoIXR5cGUpIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5ndWlkZV9MZXZlbCAtPSAxO1xyXG4gICAgICAgIHRoaXMuR3VpZGUuZ2V0Q2hpbGRCeU5hbWUoXCJvbmVcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5HdWlkZS5nZXRDaGlsZEJ5TmFtZShcInR3b1wiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkd1aWRlLmdldENoaWxkQnlOYW1lKFwidGhyZWVcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5HdWlkZS5nZXRDaGlsZEJ5TmFtZShcImZvdXJcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSBcIm9uZVwiO1xyXG4gICAgICAgIGlmKHRoaXMubGV2ZWwgPT0gMCl7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcIm9uZVwiO1xyXG4gICAgICAgICAgICB0aGlzLkxldmVsTGFiZWwubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiVG9wXCIpLmdldENoaWxkQnlOYW1lKFwibGlhbnhpXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXCLnu4MgICDkuaBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLmxldmVsID09IDQpe1xyXG4gICAgICAgICAgICBuYW1lID0gXCJ0d29cIjtcclxuICAgICAgICAgICAgdGhpcy5MZXZlbExhYmVsLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIlRvcFwiKS5nZXRDaGlsZEJ5TmFtZShcImxpYW54aVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwi57uDICAg5LmgXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5sZXZlbCA9PSA4KXtcclxuICAgICAgICAgICAgbmFtZSA9IFwidGhyZWVcIjtcclxuICAgICAgICAgICAgdGhpcy5ndWlkZV9TdGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0eXBlKSBuYW1lID0gXCJmb3VyXCI7XHJcbiAgICAgICAgdGhpcy5HdWlkZS5nZXRDaGlsZEJ5TmFtZShuYW1lKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMuR3VpZGUuZ2V0Q2hpbGRCeU5hbWUobmFtZSkpXHJcbiAgICAgICAgLnRvKDAuNSx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlR3VpZGUoKXtcclxuICAgICAgICBpZih0aGlzLkd1aWRlLmdldENoaWxkQnlOYW1lKFwiZm91clwiKS5hY3RpdmUpe1xyXG4gICAgICAgICAgICB0aGlzLkd1aWRlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJHYW1lU2NlbmVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuR3VpZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy/liJvlu7rmlrnlnZflnLDlm75cclxuICAgIGNyZWF0ZUJsb2NrKCl7XHJcbiAgICAgICAgdGhpcy5vdXRzaWRlX0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5pbnNpZGVfQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLm91dHNpZGUgPSBbXTtcclxuICAgICAgICB0aGlzLmluc2lkZSA9IFtdO1xyXG4gICAgICAgIGZvcihsZXQgaT0wOyBpPDE2OyBpKyspe1xyXG4gICAgICAgICAgICBsZXQgYmxvY2sgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLmt1YW5nMV9QcmVmYWIpO1xyXG4gICAgICAgICAgICBibG9jay5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5zZXRJZChpKTtcclxuICAgICAgICAgICAgYmxvY2sucGFyZW50ID0gdGhpcy5CbG9jay5nZXRDaGlsZEJ5TmFtZShcIm91dHNpZGVcIik7XHJcbiAgICAgICAgICAgIGxldCB4LHkgPSAwO1xyXG4gICAgICAgICAgICBpZihpIDwgNSl7XHJcbiAgICAgICAgICAgICAgICB4ID0gLTI4NCArIDE0MippOyB5ID0gMjU5O1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIGlmKGkgPCA5KXtcclxuICAgICAgICAgICAgICAgIHggPSAyODQ7IHkgPSAyNTkgLSAoaS00KSoxNDI7XHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGVsc2UgaWYoaSA8IDEzKXsgICAgXHJcbiAgICAgICAgICAgICAgICB4ID0gMjg0IC0gKGktOCkqMTQyOyB5ID0gLTMwOTtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgZWxzZSBpZihpIDwgMTYpe1xyXG4gICAgICAgICAgICAgICAgeCA9IC0yODQ7IHkgPSAtMzA5ICsgKGktMTIpKjE0MjtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgYmxvY2suc2V0UG9zaXRpb24oeCx5KTtcclxuICAgICAgICAgICAgdGhpcy5vdXRzaWRlX0FycmF5LnB1c2goYmxvY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IobGV0IGo9MzsgajwxMjsgaisrKXtcclxuICAgICAgICAgICAgbGV0IGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5rdWFuZzJfUHJlZmFiKTtcclxuICAgICAgICAgICAgYmxvY2suZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuc2V0SWQoaik7XHJcbiAgICAgICAgICAgIGJsb2NrLnBhcmVudCA9IHRoaXMuQmxvY2suZ2V0Q2hpbGRCeU5hbWUoXCJpbnNpZGVcIik7XHJcbiAgICAgICAgICAgIGJsb2NrLnNldFBvc2l0aW9uKC0xMzIraiUzKjEzMiwyMzktcGFyc2VJbnQoai8zICsgXCJcIikqMTMyKTtcclxuICAgICAgICAgICAgdGhpcy5pbnNpZGVfQXJyYXkucHVzaChibG9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v5Yib5bu65YWz5Y2hXHJcbiAgICBjcmVhdGVDdXN0b20oKXtcclxuICAgICAgICAvL+WIneWni+WMluWFs+WNoemFjee9ruaVsOaNrlxyXG4gICAgICAgIHRoaXMubGV2ZWwgPSBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWw7XHJcbiAgICAgICAgdGhpcy5MZXZlbExhYmVsLnN0cmluZyA9ICh0aGlzLmxldmVsKzEpK1wiXCI7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bdGhpcy5sZXZlbF07XHJcbiAgICAgICAgaWYodGhpcy5sZXZlbCA9PSA0ICYmIHRoaXMuZ3VpZGVfTGV2ZWwgPT0gMikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IGNjLmZ4LkdhbWVDb25maWcuTEVWRUxfSU5GT1s2XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYXNzID0gZmFsc2U7XHJcbiAgICAgICAgLy/mlL7mraPnoa7nrZTmoYjlkozplJnor6/nrZTmoYhcclxuICAgICAgICB0aGlzLmFuc3dlckluc2lkZVRleHR1cmUgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTQgKyAxKTtcclxuICAgICAgICAvL+WGheWciOmUmeivr+etlOahiOmaj+aculxyXG4gICAgICAgIHRoaXMuaW5zaWRlVGV4dHVyZSA9IFtdO1xyXG4gICAgICAgIHRoaXMub3V0c2lkZVRleHR1cmUgPSBbXTtcclxuICAgICAgICBmb3IobGV0IGs9MDsgazwxNDsgaysrKXtcclxuICAgICAgICAgICAgaWYoKGsrMSkgIT0gdGhpcy5hbnN3ZXJJbnNpZGVUZXh0dXJlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlVGV4dHVyZS5wdXNoKGsrMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2MuZnguR2FtZVRvb2wuc2h1ZmZsZUFycmF5KHRoaXMuaW5zaWRlVGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJPdXRzaWRlVGV4dHVyZSA9IHRoaXMuaW5zaWRlVGV4dHVyZVsxMV07XHJcblxyXG4gICAgICAgIC8v5YiG6YWN5q2j56Gu562U5qGI5ZKM6ZSZ6K+v562U5qGI5L2N572uXHJcbiAgICAgICAgaWYodGhpcy5jb25maWdbXCJpbnNpZGVcIl0gPiAwKXtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHQgKz0gMTtcclxuICAgICAgICAgICAgbGV0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkqMTAwO1xyXG4gICAgICAgICAgICBsZXQgYXJyYXlUZW1wID0gWzAsMSwyLDMsNSw2LDcsOF07XHJcbiAgIFxyXG4gICAgICAgICAgICBpZih0aGlzLmNvbmZpZ1tcImluc2lkZVR5cGVcIl0gPT0gMSl7XHJcbiAgICAgICAgICAgICAgICBpZihyYW5kb20gPj0gNTApIHRoaXMuaW5zaWRlID0gIFswLDEsMl07XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuaW5zaWRlID0gWzYsNyw4XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMuY29uZmlnW1wiaW5zaWRlVHlwZVwiXSA9PSAyKXtcclxuICAgICAgICAgICAgICAgIGlmKHJhbmRvbSA+PSA1MCkgdGhpcy5pbnNpZGUgPSAgWzAsMyw2XTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5pbnNpZGUgPSBbMiw1LDhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc2lkZSA9IGNjLmZ4LkdhbWVUb29sLnNodWZmbGVBcnJheShhcnJheVRlbXApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnNpZGUuc3BsaWNlKHRoaXMuY29uZmlnW1wiaW5zaWRlXCJdLHRoaXMuaW5zaWRlLmxlbmd0aC10aGlzLmNvbmZpZ1tcImluc2lkZVwiXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJJbnNpZGUgPSB0aGlzLmluc2lkZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdGhpcy5pbnNpZGUubGVuZ3RoKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5YiG6YWN5aSW5ZyI5q2j56Gu562U5qGI5ZKM6ZSZ6K+v562U5qGI5L2N572uXHJcbiAgICAgICAgaWYodGhpcy5jb25maWdbXCJvdXRzaWRlXCJdID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0ICs9IDE7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY29uZmlnW1wib3V0c2lkZVR5cGVcIl0gPT0gMSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGUgPSBbMSwyLDMsNSw2LDcsOSwxMCwxMSwxMywxNCwxNV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLmNvbmZpZ1tcIm91dHNpZGVUeXBlXCJdID09IDIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlID0gWzAsNCw4LDEyXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlID0gWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVUb29sLnNodWZmbGVBcnJheSh0aGlzLm91dHNpZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmFuc3dlck91dHNpZGUgPSB0aGlzLm91dHNpZGVbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnRoaXMub3V0c2lkZS5sZW5ndGgpXTtcclxuICAgICAgICAgICAgaWYodGhpcy5jb25maWdbXCJvdXRzaWRlXCJdID09IDIpe1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBqPTA7IGo8MTU7IGorKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlVGV4dHVyZS5wdXNoKHRoaXMuaW5zaWRlVGV4dHVyZVszXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLmNvbmZpZ1tcIm91dHNpZGVcIl0gPT0gMyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGVUZXh0dXJlID0gW3RoaXMuaW5zaWRlVGV4dHVyZVs1XSx0aGlzLmluc2lkZVRleHR1cmVbNl0sdGhpcy5pbnNpZGVUZXh0dXJlWzVdLHRoaXMuaW5zaWRlVGV4dHVyZVs2XSx0aGlzLmluc2lkZVRleHR1cmVbNV1dO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBqPTA7IGo8MTA7IGorKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhbmRvbVRlbXAgPSBNYXRoLnJhbmRvbSgpKjEwMDtcclxuICAgICAgICAgICAgICAgICAgICBpZihyYW5kb21UZW1wPjUwKSB0aGlzLm91dHNpZGVUZXh0dXJlLnB1c2godGhpcy5pbnNpZGVUZXh0dXJlWzVdKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMub3V0c2lkZVRleHR1cmUucHVzaCh0aGlzLmluc2lkZVRleHR1cmVbNl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2MuZnguR2FtZVRvb2wuc2h1ZmZsZUFycmF5KHRoaXMub3V0c2lkZVRleHR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5jb25maWdbXCJvdXRzaWRlXCJdID09IDQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlVGV4dHVyZSA9IFt0aGlzLmluc2lkZVRleHR1cmVbMl0sdGhpcy5pbnNpZGVUZXh0dXJlWzRdLHRoaXMuaW5zaWRlVGV4dHVyZVs2XSxcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlVGV4dHVyZVsyXSx0aGlzLmluc2lkZVRleHR1cmVbNF0sdGhpcy5pbnNpZGVUZXh0dXJlWzZdXTtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaj0wOyBqPDk7IGorKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhbmRvbVRlbXAgPSBNYXRoLnJhbmRvbSgpKjEwMDtcclxuICAgICAgICAgICAgICAgICAgICBpZihyYW5kb21UZW1wPDMzKSB0aGlzLm91dHNpZGVUZXh0dXJlLnB1c2godGhpcy5pbnNpZGVUZXh0dXJlWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHJhbmRvbVRlbXA8NjYpIHRoaXMub3V0c2lkZVRleHR1cmUucHVzaCh0aGlzLmluc2lkZVRleHR1cmVbNF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vdXRzaWRlVGV4dHVyZS5wdXNoKHRoaXMuaW5zaWRlVGV4dHVyZVs2XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYy5meC5HYW1lVG9vbC5zaHVmZmxlQXJyYXkodGhpcy5vdXRzaWRlVGV4dHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ydW5CbG9jaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5Z2X5omn6KGM5Zu+54mH5Ye6546w5raI5aSx5Yqo55S7XHJcbiAgICBydW5CbG9jaygpe1xyXG4gICAgICAgIGlmKHRoaXMuY29uZmlnW1wiaW5zaWRlXCJdID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zaWRlX0FycmF5WzRdLmdldENvbXBvbmVudChcIkJsb2NrXCIpLmFuc3dlclNob3codGhpcy5hbnN3ZXJJbnNpZGVUZXh0dXJlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW5zaWRlTnVtYmVyID0gMDtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuaW5zaWRlLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5zaWRlW2ldID09IHRoaXMuYW5zd2VySW5zaWRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2lkZV9BcnJheVt0aGlzLmluc2lkZVtpXV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuc2hvdyh0cnVlLHRydWUsdGhpcy5hbnN3ZXJJbnNpZGVUZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2lkZV9BcnJheVt0aGlzLmluc2lkZVtpXV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuc2hvdyhmYWxzZSx0cnVlLHRoaXMuaW5zaWRlVGV4dHVyZVtpbnNpZGVOdW1iZXJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB0aGlzLmNvbmZpZ1tcInNob3dUaW1lXCJdKjEwMDApO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5jb25maWdbXCJvdXRzaWRlXCJdID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMub3V0c2lkZV9BcnJheVt0aGlzLmFuc3dlck91dHNpZGVdLmdldENvbXBvbmVudChcIkJsb2NrXCIpLmFuc3dlclNob3codGhpcy5hbnN3ZXJPdXRzaWRlVGV4dHVyZSk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY29uZmlnW1wib3V0c2lkZVwiXSA+IDEpe1xyXG4gICAgICAgICAgICAgICAgbGV0IG91dHNpZGVOdW1iZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8dGhpcy5vdXRzaWRlX0FycmF5Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gdGhpcy5hbnN3ZXJPdXRzaWRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGVfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuc2hvdyh0cnVlLGZhbHNlLHRoaXMuYW5zd2VyT3V0c2lkZVRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGVfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuc2hvdyhmYWxzZSxmYWxzZSx0aGlzLm91dHNpZGVUZXh0dXJlW291dHNpZGVOdW1iZXJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0c2lkZU51bWJlciArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBvdXRzaWRlTnVtYmVyID0gMDtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMub3V0c2lkZV9BcnJheS5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihpID09IHRoaXMuYW5zd2VyT3V0c2lkZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlX0FycmF5W2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpLmxvY2tTaG93KHRydWUsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGVfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikubG9ja1Nob3coZmFsc2UsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRzaWRlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB0aGlzLmNvbmZpZ1tcInNob3dUaW1lXCJdKjEwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZ3VpZGVfU3RhdGUpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBjYy5meC5HYW1lVG9vbC5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKHRoaXMudXBkYXRlQ291bnREb3duVGltZSwxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgfSwgdGhpcy5jb25maWdbXCJzaG93VGltZVwiXSoxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+ato+ehrlxyXG4gICAgb3BlblJlc3VsdChyZXN1bHQpe1xyXG4gICAgICAgIHRoaXMucmVzdWx0IC09IDE7XHJcbiAgICAgICAgLy/pnZ7lvJXlr7znirbmgIFcclxuICAgICAgICBpZighdGhpcy5ndWlkZV9TdGF0ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuZmxpcEJsb2NrKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucmVzdWx0ID09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy51bnNjaGVkdWxlKHRoaXMudXBkYXRlQ291bnREb3duVGltZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsIDwgY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPLmxlbmd0aC0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+W8leWvvOeKtuaAgeS4i1xyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGlmKHJlc3VsdC5yZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGlwQmxvY2socmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMubGV2ZWwgPT0gNCAmJiBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uZ3VpZGVfTGV2ZWwgPT0gMil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW5HdWlkZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgLy/nv7vovazlvaLnirblj5jmiJDpl67lj7dcclxuICAgIGZsaXBCbG9jayhyZXN1bHQpe1xyXG4gICAgICAgIGlmKHJlc3VsdC50eXBlKXtcclxuICAgICAgICAgICAgbGV0IHBvcyA9IHRoaXMuY2hhbmdlUG9zKHRydWUscmVzdWx0LmlkKTtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZ3VpZGVfU3RhdGUpIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfREFUQS51c2VyQ2hvaWNlSW5uZXIucHVzaChwb3MueCxwb3MueSk7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuaW5zaWRlLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5pbnNpZGVbaV0gPT0gdGhpcy5hbnN3ZXJJbnNpZGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlX0FycmF5WzRdLmdldENoaWxkQnlOYW1lKFwidGV4dHVyZVwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlX0FycmF5WzRdLmdldENoaWxkQnlOYW1lKFwidGV4dHVyZVwiKS5vcGFjaXR5ID0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlX0FycmF5W3RoaXMuaW5zaWRlW2ldXS5nZXRDaGlsZEJ5TmFtZShcInllc1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3MgPSB0aGlzLmNoYW5nZVBvcyh0cnVlLHRoaXMuaW5zaWRlX0FycmF5W3RoaXMuaW5zaWRlW2ldXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5faWROdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLmd1aWRlX1N0YXRlKSBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEucmlnaHRDaG9pY2VJbm5lci5wdXNoKHBvcy54LHBvcy55KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlX0FycmF5W3RoaXMuaW5zaWRlW2ldXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5fdG91Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXN1bHQucmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NvcmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBsZXQgcG9zID0gdGhpcy5jaGFuZ2VQb3MoZmFsc2UscmVzdWx0LmlkKTtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZ3VpZGVfU3RhdGUpIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfREFUQS51c2VyQ2hvaWNlT3V0ZXIucHVzaChwb3MueCxwb3MueSk7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMub3V0c2lkZV9BcnJheS5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0c2lkZV9BcnJheVtpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5sb2NrSGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlX0FycmF5W2ldLmdldENoaWxkQnlOYW1lKFwidGV4dHVyZVwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYoaSA9PSB0aGlzLmFuc3dlck91dHNpZGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0c2lkZV9BcnJheVtpXS5nZXRDaGlsZEJ5TmFtZShcInllc1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0c2lkZV9BcnJheVtpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5zaG93KHRydWUsZmFsc2UsdGhpcy5hbnN3ZXJPdXRzaWRlVGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvcyA9IHRoaXMuY2hhbmdlUG9zKGZhbHNlLHRoaXMub3V0c2lkZV9BcnJheVtpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5faWROdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLmd1aWRlX1N0YXRlKSBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEucmlnaHRDaG9pY2VPdXRlci5wdXNoKHBvcy54LHBvcy55KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXN1bHQucmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NvcmUoKTtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy/liqDliIYg5Yqg6L+b5bqm5p2h77yM5Yqg5pif5pifXHJcbiAgICBhZGRTY29yZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmd1aWRlX1N0YXRlKXtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnNjb3JlICs9IDE7XHJcbiAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5zY29yZS8yNDtcclxuICAgICAgICAgICAgaWYocHJvZ3Jlc3MgPj0gMSkgcHJvZ3Jlc3MgPSAxO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0aGlzLnByb2dyZXNzKVxyXG4gICAgICAgICAgICAudG8oMC4yLHtmaWxsUmFuZ2U6cHJvZ3Jlc3N9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5Ub3AuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyMVwiKS5hY3RpdmUgPT0gZmFsc2UgJiYgcHJvZ3Jlc3M+PSAwLjIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjFcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLm9wYWNpdHkgPSAwOyB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLnNjYWxlID0gMC4xO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjFcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMyx7b3BhY2l0eToyNTUsc2NhbGU6MS4xfSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oMC4xLHtvcGFjaXR5OjI1NSxzY2FsZTowLjl9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50bygwLjEse29wYWNpdHk6MjU1LHNjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5Ub3AuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyMlwiKS5hY3RpdmUgPT0gZmFsc2UgJiYgcHJvZ3Jlc3M+PSAwLjUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIyXCIpLm9wYWNpdHkgPSAwOyB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIyXCIpLnNjYWxlID0gMC4xO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjJcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMyx7b3BhY2l0eToyNTUsc2NhbGU6MS4xfSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oMC4xLHtvcGFjaXR5OjI1NSxzY2FsZTowLjl9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50bygwLjEse29wYWNpdHk6MjU1LHNjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5Ub3AuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyM1wiKS5hY3RpdmUgPT0gZmFsc2UgJiYgcHJvZ3Jlc3M+PSAwLjgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIzXCIpLm9wYWNpdHkgPSAwOyB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIzXCIpLnNjYWxlID0gMC4xO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMyx7b3BhY2l0eToyNTUsc2NhbGU6MS4xfSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oMC4xLHtvcGFjaXR5OjI1NSxzY2FsZTowLjl9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50bygwLjEse29wYWNpdHk6MjU1LHNjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy/ov5Tlm57pppbpobVcclxuICAgIGJhY2tTY2VuZSgpe1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkxvYWRTY2VuZVwiKTtcclxuICAgIH1cclxuICAgIC8v6YeN5paw5byA5aeLXHJcbiAgICByZVN0YXJ0KCl7XHJcblxyXG4gICAgfVxyXG4gICAgLy/ojrflj5bml7bpl7TmiLNcclxuICAgIGdldFRpbWUoKXtcclxuICAgICAgICB2YXIgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcDtcclxuICAgIH1cclxuICAgIC8v6I636IOcXHJcbiAgICBwYXNzTGV2ZWwoKXtcclxuXHJcbiAgICB9XHJcbiAgICAvL+Wksei0pVxyXG4gICAgbG9zZUxldmVsKHR5cGUpe1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVBvcyh0eXBlLG51bSl7XHJcbiAgICAgICAgdmFyIHggPSAwOyB2YXIgeSA9IDA7XHJcbiAgICAgICAgLy/lhoXpg6hcclxuICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgeSA9IHBhcnNlSW50KG51bS8zK1wiXCIpO1xyXG4gICAgICAgICAgICB4ID0gbnVtJTM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5aSW6YOoXHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYobnVtIDwgNSl7XHJcbiAgICAgICAgICAgICAgICB5PTA7IHg9bnVtO1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIGlmKG51bSA8IDkpe1xyXG4gICAgICAgICAgICAgICAgeD01OyB5PW51bS00O1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIGlmKG51bSA8IDEzKXsgICAgXHJcbiAgICAgICAgICAgICAgICB5PTQ7IHg9MTItbnVtO1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIGlmKG51bSA8IDE2KXtcclxuICAgICAgICAgICAgICAgIHg9MDsgeT0xNi1udW07XHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBqZyA9IGNjLnYyKHgseSk7XHJcbiAgICAgICAgcmV0dXJuIGpnO1xyXG4gICAgfVxyXG4gICAgLy/lpoLmnpzmmK/lgJLorqHml7Yg6LCD55So5q2k5pa55rOVXHJcbiAgICB1cGRhdGVDb3VudERvd25UaW1lICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb3VudFRpbWUgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRUaW1lIC09IDE7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuVGltZUxhYmVsLnN0cmluZyA9dGhpcy5jb3VudFRpbWUgKyBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLlRpbWVMYWJlbC5zdHJpbmcgPSAgY2MuZnguR2FtZVRvb2wuZ2V0VGltZU1hcmdpbih0aGlzLmNvdW50VGltZSk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY291bnRUaW1lIDw9IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy51bnNjaGVkdWxlKHRoaXMudXBkYXRlQ291bnREb3duVGltZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJNYXNrXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHtcInJlc3VsdFwiOmZhbHNlLFwidHlwZVwiOnRydWUsXCJpZFwiOm51bGx9O1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jb25maWdbXCJpbnNpZGVcIl0gPiAwKSBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoXCJyZXN1bHRcIixkYXRhKTtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhMiA9IHtcInJlc3VsdFwiOmZhbHNlLFwidHlwZVwiOmZhbHNlLFwiaWRcIjpudWxsfTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuY29uZmlnW1wib3V0c2lkZVwiXSA+IDApIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChcInJlc3VsdFwiLGRhdGEyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v5LiK5Lyg5q+P5qyh5pON5L2c5pWw5o2uXHJcbiAgICBzZXREYXRhKHJlc3VsdCl7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19EQVRBLnN1Y2Nlc3MgPSByZXN1bHQucmVzdWx0O1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfREFUQS5yb3VuZCA9IChjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgKyAxKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEuZHVyYXRpb24gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMuc3RhcnRUaW1lIC0gMTAwMDtcclxuICAgICAgICBjYy5meC5HYW1lVG9vbC5zZXRHYW1lRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRW5hYmxlICgpIHtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9uKFwicmVzdWx0XCIsIHRoaXMub3BlblJlc3VsdCwgdGhpcyk7XHJcblxyXG4gICAgfVxyXG4gICAgb25EaXNhYmxlICgpIHtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9mZihcInJlc3VsdFwiLCB0aGlzLm9wZW5SZXN1bHQsIHRoaXMpO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlIChkdCkge1xyXG5cclxuICAgIH1cclxufVxyXG4iXX0=