(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Script/Player.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, '7fd74nqW4BCN6aFalN5nmyL', 'Player'); // Script/Player.ts "use strict"; // Learn TypeScript: // - https://docs.cocos.com/creator/manual/en/scripting/typescript.html // Learn Attribute: // - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html // Learn life-cycle callbacks: // - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html 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 GameData_1 = require("./GameData"); var GameManager_1 = require("./GameManager"); var AudioManager_1 = require("./tool/AudioManager"); var Notification_1 = require("./tool/Notification"); var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; 0; var NewClass = /** @class */ (function (_super) { __extends(NewClass, _super); function NewClass() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.add = null; _this.plist = null; return _this; } // LIFE-CYCLE CALLBACKS: // onLoad () {} NewClass.prototype.start = function () { this.init(); }; NewClass.prototype.init = function () { this.jumpState = 0; this.jumpHeight = this.node.y; this.basicHeight = this.node.y; this.up = true; this.double = false; this.death = false; this.jumpAction = null; this.block = null; this.interfere = false; this.jumpPause = true; }; //跳动 NewClass.prototype.jump = function () { var _this = this; if (this.jumpState < 2) { if (this.jumpState == 0) { if (this.death == false) { this.node.getChildByName("sp").getComponent(sp.Skeleton).setAnimation(1, "jump", false); } } else if (this.jumpState == 1 || this.node.y > (this.jumpHeight + GameData_1.default._instance.GM_INFO.jumpHeight - 5)) { if (this.death == false) { if (GameManager_1.default._instance.guide > 0 && GameManager_1.default._instance.guide < 3) { return; } this.node.getChildByName("sp").getComponent(sp.Skeleton).setAnimation(1, "jump", false); } } setTimeout(function () { if (_this.jumpState == 0) { if (_this.jumpPause == true) { return; } if (_this.block) { if (_this.block.name != "block13") { _this.block.getComponent("Block").hide(); } else { _this.block.active = false; _this.jumpPause = true; } _this.block = null; } if (GameManager_1.default._instance.guide == 1) { GameManager_1.default._instance.guide = 2; GameManager_1.default._instance.startGuide(2, false); } GameData_1.default._instance.CLICK_DATA.jumps = 1; AudioManager_1.default._instance.playJump(); // this.basicHeight = this.node.y; _this.jumpState += 1; _this.up = true; Notification_1.Notification.emit("showGround", _this.node.y); _this.jumpAction = cc.tween(_this.node) .to(GameData_1.default._instance.GM_INFO.jumpUpTime, { position: cc.v3(0, _this.jumpHeight + GameData_1.default._instance.GM_INFO.jumpHeight, 0) }, { easing: 'quadOut' }) .call(function () { _this.up = false; _this.jumpState = -1; var temp = _this.node.y - _this.jumpHeight; }) .to(GameData_1.default._instance.GM_INFO.jumpDownTime, { position: cc.v3(0, _this.jumpHeight, 0) }, { easing: 'cubicIn' }) .call(function () { _this.jumpHeight = _this.node.y; _this.jumpState = -1; _this.up = true; }) .start(); } else if (_this.jumpState == 1 || _this.node.y > (_this.jumpHeight + GameData_1.default._instance.GM_INFO.jumpHeight - 15)) { if (GameManager_1.default._instance.guide > 0 && GameManager_1.default._instance.guide < 3) { return; } if (GameManager_1.default._instance.guide == 6) { _this.jumpPause = true; GameManager_1.default._instance.startGuide(6, false); } if (_this.jumpAction) _this.jumpAction.stop(); AudioManager_1.default._instance.playJump(); GameData_1.default._instance.CLICK_DATA.jumps = 2; _this.jumpState = 2; _this.up = true; _this.jumpAction = cc.tween(_this.node) .to(GameData_1.default._instance.GM_INFO.jumpUpTime, { position: cc.v3(0, _this.node.y + GameData_1.default._instance.GM_INFO.jumpHeight, 0) }, { easing: 'quadOut' }) .call(function () { _this.up = false; }) .to(GameData_1.default._instance.GM_INFO.jumpDownTime * 1.5, { position: cc.v3(0, _this.jumpHeight, 0) }, { easing: 'cubicIn' }) .call(function () { _this.jumpState = -1; _this.jumpHeight = _this.node.y; _this.up = true; }) .start(); } }, 100); } }; NewClass.prototype.onCollisionEnter = function (other, self) { if (GameManager_1.default._instance) { if (GameManager_1.default._instance.over == true) { return; } } var max = other.name.length; var num = 6; if (other.node.name != "Ground") { if (GameManager_1.default._instance.guide == -1) { if (other.node.getComponent("Block").num > 9) num = 7; } else { num = 7; } } var ColliderName = other.name.substring(num, max); //获取碰撞体名字 if (ColliderName == "") { if (this.node.y <= other.node.y && this.up == true && this.death == false) { if (this.jumpAction) this.jumpAction.stop(); this.jumpState = -1; AudioManager_1.default._instance.playGround(); console.log("死亡1"); this.gameDeath(); } else if (other.node.name == "Ground" && this.death == false) { // if(this.jumpAction)this.jumpAction.stop(); this.jumpState = -1; console.log("死亡2"); this.gameDeath(); } else { // console.log("没碰到边缘",this.up,this.node.y,other.node.y,this.jumpState,this.up); } } if (ColliderName == "") { if (this.death == true) { console.log("已经死亡"); return; } // var portrait = Math.abs(this.node.y - other.node.y); var width = other.node.width / 2; var pos = Math.abs(this.node.x - other.node.x); var distance = pos / width; // console.log("我的位置:",this.node.x,"块的位置:",other.node.x,"块的宽度:",width,"百分比:",distance); if (this.up == true) { console.log("死亡4"); AudioManager_1.default._instance.playGround(); this.gameDeath(); } else { if (distance * 100 < GameData_1.default._instance.GM_INFO.distanceMin && this.jumpState != 0) { // console.log("成功1"); // console.log("百分比:",distance*100+"%"); this.success(other, distance * 100); } else { if (portrait >= 20 || distance * 100 > GameData_1.default._instance.GM_INFO.distanceMax) { console.log("死亡3", "落差:", portrait, "状态:", this.up); AudioManager_1.default._instance.playGround(); this.gameDeath(); } else { // console.log("成功2"); console.log("百分比:", distance * 100 + "%"); this.success(other, distance * 100); } } } } }; NewClass.prototype.success = function (other, distance) { this.jumpPause = true; if (GameManager_1.default._instance.guide != -1) { this.basicHeight = this.node.y; other.node.stopAllActions(); if (GameManager_1.default._instance.guide == 3 || GameManager_1.default._instance.guide == 4) { GameManager_1.default._instance.startGuide(4, false); if (GameManager_1.default._instance.guide == 4) { GameManager_1.default._instance.guide = 5; } } else if (GameManager_1.default._instance.guide == 5) { this.jumpPause = true; var tip = GameManager_1.default._instance.Tip.getChildByName("good"); cc.tween(tip) .to(0.3, { opacity: 255, scale: 1 }) .delay(0.5) .to(0.2, { opacity: 0 }) .call(function () { GameManager_1.default._instance.startGuide(5, false); }) .start(); } else if (GameManager_1.default._instance.guide == 7) { GameManager_1.default._instance.startGuide(8, false); } else if (GameManager_1.default._instance.guide == 8) { this.jumpPause = true; var tip = GameManager_1.default._instance.Tip.getChildByName("perfet"); cc.tween(tip) .to(0.3, { opacity: 255, scale: 1 }) .delay(0.5) .to(0.2, { opacity: 0 }) .call(function () { GameManager_1.default._instance.startGuide(9, false); }) .start(); } } var percent = parseInt(distance * 10 + "") / 10; GameData_1.default._instance.CLICK_DATA.percent = percent; if (GameManager_1.default._instance) GameManager_1.default._instance.destroyBlock(true); this.add.active = true; this.add.opacity = 0; var number = 1; if (distance <= 10) number = 3; else if (distance <= 20) number = 2; GameData_1.default._instance.CLICK_DATA.accuracy = number; this.add.getChildByName("icon").getComponent(cc.Sprite).spriteFrame = this.plist.getSpriteFrames()[number]; this.add.getChildByName("jia").getComponent(cc.Sprite).spriteFrame = this.plist.getSpriteFrames()[number + 3]; this.addAction(); this.node.getChildByName("guang").active = true; this.node.getChildByName("guang").getComponent(sp.Skeleton).setAnimation(0, "double_1", false); if (this.jumpAction) this.jumpAction.stop(); if (this.death == false) { this.node.getChildByName("sp").getComponent(sp.Skeleton).setAnimation(1, "jump", false); } this.basicHeight = this.node.y; if (number > 1) { AudioManager_1.default._instance.playPz(); if (this.double == false) { this.double = true; GameData_1.default._instance.LEVEL_INFO.doubleHit = 1.05; } else { GameData_1.default._instance.LEVEL_INFO.doubleHit += GameData_1.default._instance.LEVEL_INFO.doubleAdd; } var combo = (GameData_1.default._instance.LEVEL_INFO.doubleHit - 1) * (1 / 0.05); GameData_1.default._instance.CLICK_DATA.combo = parseInt(combo + ""); } else { AudioManager_1.default._instance.playLuo(); this.double = false; GameData_1.default._instance.CLICK_DATA.combo = 0; } this.block = other.node; if (this.block.name != "block13") { this.block.getComponent("Block").setScore(number); Notification_1.Notification.emit("setData", null); } setTimeout(function () { if (GameManager_1.default._instance.guide == -1) { Notification_1.Notification.emit("createBlock", null); if (GameData_1.default._instance.LEVEL_INFO.doubleSuccess == 0) { setTimeout(function () { Notification_1.Notification.emit("createCrackBlock", null); }, 100); } } }, 10); if (number > 1 && GameData_1.default._instance.LEVEL_INFO.doubleSuccess != 0) { GameData_1.default._instance.LEVEL_INFO.doubleSuccess -= 1; } else { if (GameData_1.default._instance.LEVEL_INFO.doubleSuccess != 0 && GameData_1.default._instance.LEVEL_INFO.doubleSuccess < 3) { GameData_1.default._instance.LEVEL_INFO.doubleSuccess = 3; } } if (GameData_1.default._instance.LEVEL_INFO.doubleSuccess == 0) { } else { GameManager_1.default._instance.interfere = false; GameData_1.default._instance.CLICK_DATA.fake = GameManager_1.default._instance.interfere; } this.jumpState = 0; this.up = true; this.node.y = other.node.y - 3 + other.node.height / 2; this.jumpHeight = this.node.y; }; NewClass.prototype.gameDeath = function () { // console.log("条失败"); this.jumpPause = true; if (!GameData_1.default._instance.GM_INFO.probation) { GameData_1.default._instance.CLICK_DATA.combo = 0; GameData_1.default._instance.CLICK_DATA.accuracy = 0; GameData_1.default._instance.CLICK_DATA.percent = -1; Notification_1.Notification.emit("setData", null); this.double = false; GameData_1.default._instance.LEVEL_INFO.doubleSuccess = 3; this.death = true; if (this.jumpAction) this.jumpAction.stop(); this.jumpState = -1; Notification_1.Notification.emit("death", false); } else { this.death = true; if (GameManager_1.default._instance.guide == 6) { GameManager_1.default._instance.tipHide("tip4", null); } if (this.jumpAction) this.jumpAction.stop(); this.jumpState = -1; Notification_1.Notification.emit("death", true); } }; NewClass.prototype.xinAction = function () { if (GameData_1.default._instance.GM_INFO.life >= 0) { var xin = this.node.getChildByName("xin"); xin.y = 120; cc.tween(xin) .to(0.2, { opacity: 255, y: xin.y + 50 }) .delay(0.5) .to(0.3, { opacity: 0, y: xin.y + 100 }) .call(function () { }) .start(); } }; NewClass.prototype.addAction = function () { var _this = this; this.add.y = 120; cc.tween(this.add) .to(0.2, { opacity: 255, y: this.add.y + 50 }) .delay(0.5) .to(0.3, { opacity: 0, y: this.add.y + 100 }) .call(function () { _this.add.active = false; }) .start(); }; NewClass.prototype.update = function (dt) { // if(this.death == true && this.node.y > -500 && GameManager._instance.over == false){ // // this.node.y -= 3; // // if(this.node.y <= -500){ // // this.node.y = -500; // // } // } }; __decorate([ property(cc.Node) ], NewClass.prototype, "add", void 0); __decorate([ property(cc.SpriteAtlas) ], NewClass.prototype, "plist", void 0); NewClass = __decorate([ ccclass ], NewClass); return NewClass; }(cc.Component)); exports.default = NewClass; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxQbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9CQUFvQjtBQUNwQix3RUFBd0U7QUFDeEUsbUJBQW1CO0FBQ25CLGtGQUFrRjtBQUNsRiw4QkFBOEI7QUFDOUIsa0ZBQWtGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbEYsdUNBQWtDO0FBQ2xDLDZDQUF3QztBQUN4QyxvREFBK0M7QUFDL0Msb0RBQW1EO0FBQzdDLElBQUEsS0FBc0IsRUFBRSxDQUFDLFVBQVUsRUFBbEMsT0FBTyxhQUFBLEVBQUUsUUFBUSxjQUFpQixDQUFDO0FBQUEsQ0FBQyxDQUFBO0FBRzNDO0lBQXNDLDRCQUFZO0lBQWxEO1FBQUEscUVBZ1lDO1FBN1hHLFNBQUcsR0FBWSxJQUFJLENBQUM7UUFFcEIsV0FBSyxHQUFrQixJQUFJLENBQUM7O0lBMlhoQyxDQUFDO0lBL1dHLHdCQUF3QjtJQUV4QixlQUFlO0lBRWYsd0JBQUssR0FBTDtRQUNJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsdUJBQUksR0FBSjtRQUNJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FB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Q2EsUUFBUSxDQWdZNUI7SUFBRCxlQUFDO0NBaFlELEFBZ1lDLENBaFlxQyxFQUFFLENBQUMsU0FBUyxHQWdZakQ7a0JBaFlvQixRQUFRIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTGVhcm4gVHlwZVNjcmlwdDpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvdHlwZXNjcmlwdC5odG1sXHJcbi8vIExlYXJuIEF0dHJpYnV0ZTpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMuaHRtbFxyXG4vLyBMZWFybiBsaWZlLWN5Y2xlIGNhbGxiYWNrczpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvbGlmZS1jeWNsZS1jYWxsYmFja3MuaHRtbFxyXG5cclxuaW1wb3J0IEdhbWVEYXRhIGZyb20gXCIuL0dhbWVEYXRhXCI7XHJcbmltcG9ydCBHYW1lTWFuYWdlciBmcm9tIFwiLi9HYW1lTWFuYWdlclwiO1xyXG5pbXBvcnQgQXVkaW9NYW5hZ2VyIGZyb20gXCIuL3Rvb2wvQXVkaW9NYW5hZ2VyXCI7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiB9IGZyb20gJy4vdG9vbC9Ob3RpZmljYXRpb24nO1xyXG5jb25zdCB7Y2NjbGFzcywgcHJvcGVydHl9ID0gY2MuX2RlY29yYXRvcjswXHJcblxyXG5AY2NjbGFzc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXdDbGFzcyBleHRlbmRzIGNjLkNvbXBvbmVudCB7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBhZGQ6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlNwcml0ZUF0bGFzKVxyXG4gICAgcGxpc3Q6IGNjLlNwcml0ZUF0bGFzID1udWxsO1xyXG5cclxuICAgIGJhc2ljSGVpZ2h0Om51bWJlciAgLy/mr4/mrKHot7Pot4PliY3ln7rnoYDpq5jluqZcclxuICAgIGp1bXBTdGF0ZTpudW1iZXI7ICAgLy/ot7Pot4PnirbmgIHvvIzmjqfliLYx5q616LezMuautei3s1xyXG4gICAganVtcEhlaWdodDpudW1iZXI7ICAvL+i3s+i3g+mrmOW6plxyXG4gICAganVtcEFjdGlvbjogY2MuVHdlZW48Y2MuTm9kZT47Ly/ot7Pot4N0d2VlbuWKqOeUu++8jOeUqOS6juWBnOatouaOp+WItlxyXG4gICAgdXA6Ym9vbGVhbjsgICAgICAgICAvL+i3s+i3g+S4iuWNh+S4i+mZjeeKtuaAgeWIpOaWrVxyXG4gICAgYmxvY2s6IGNjLk5vZGU7XHJcbiAgICBkZWF0aDpib29sZWFuO1xyXG4gICAgaW50ZXJmZXJlOmJvb2xlYW47XHJcbiAgICBkb3VibGU6Ym9vbGVhbjtcclxuICAgIGp1bXBQYXVzZTpib29sZWFuO1xyXG4gICAgLy8gTElGRS1DWUNMRSBDQUxMQkFDS1M6XHJcblxyXG4gICAgLy8gb25Mb2FkICgpIHt9XHJcblxyXG4gICAgc3RhcnQgKCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKXtcclxuICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IDA7XHJcbiAgICAgICAgdGhpcy5qdW1wSGVpZ2h0ID0gdGhpcy5ub2RlLnk7XHJcbiAgICAgICAgdGhpcy5iYXNpY0hlaWdodCA9IHRoaXMubm9kZS55O1xyXG4gICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZG91YmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZWF0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuanVtcEFjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ibG9jayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbnRlcmZlcmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ot7PliqhcclxuICAgIGp1bXAoKXtcclxuICBcclxuICAgICAgICBpZih0aGlzLmp1bXBTdGF0ZSA8IDIpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmp1bXBTdGF0ZSA9PSAwKXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVhdGggPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikuc2V0QW5pbWF0aW9uKDEsXCJqdW1wXCIsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5qdW1wU3RhdGUgPT0gMSB8fCB0aGlzLm5vZGUueSA+ICh0aGlzLmp1bXBIZWlnaHQrR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uanVtcEhlaWdodC01KSl7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmRlYXRoID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPjAgJiYgR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlIDwzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJzcFwiKS5nZXRDb21wb25lbnQoc3AuU2tlbGV0b24pLnNldEFuaW1hdGlvbigxLFwianVtcFwiLGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuanVtcFN0YXRlID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuanVtcFBhdXNlID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmJsb2NrKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5ibG9jay5uYW1lICE9IFwiYmxvY2sxM1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvY2suZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7dGhpcy5ibG9jay5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9jayA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID0gMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnN0YXJ0R3VpZGUoMixmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5qdW1wcyA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5SnVtcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuYmFzaWNIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lbWl0KFwic2hvd0dyb3VuZFwiLHRoaXMubm9kZS55KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBBY3Rpb24gPSBjYy50d2Vlbih0aGlzLm5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBVcFRpbWUse3Bvc2l0aW9uOmNjLnYzKDAsdGhpcy5qdW1wSGVpZ2h0K0dhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBIZWlnaHQsMCl9LHtlYXNpbmc6J3F1YWRPdXQnfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHRoaXMubm9kZS55IC0gdGhpcy5qdW1wSGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBEb3duVGltZSx7cG9zaXRpb246Y2MudjMoMCx0aGlzLmp1bXBIZWlnaHQsMCl9LHtlYXNpbmc6J2N1YmljSW4nfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wSGVpZ2h0ID0gdGhpcy5ub2RlLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHRoaXMuanVtcFN0YXRlID09IDEgfHwgdGhpcy5ub2RlLnkgPiAodGhpcy5qdW1wSGVpZ2h0K0dhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBIZWlnaHQtMTUpKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPjAgJiYgR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlIDwzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gNil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnN0YXJ0R3VpZGUoNixmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuanVtcEFjdGlvbil0aGlzLmp1bXBBY3Rpb24uc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUp1bXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5qdW1wcyA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcEFjdGlvbiA9IGNjLnR3ZWVuKHRoaXMubm9kZSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uanVtcFVwVGltZSx7cG9zaXRpb246Y2MudjMoMCx0aGlzLm5vZGUueStHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5qdW1wSGVpZ2h0LDApfSx7ZWFzaW5nOidxdWFkT3V0J30pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50byhHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5qdW1wRG93blRpbWUqMS41LHtwb3NpdGlvbjpjYy52MygwLHRoaXMuanVtcEhlaWdodCwwKX0se2Vhc2luZzonY3ViaWNJbid9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ29sbGlzaW9uRW50ZXIob3RoZXI6IGNjLkNvbGxpZGVyLCBzZWxmOiBjYy5Db2xsaWRlcikge1xyXG4gICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZSl7XHJcbiAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5vdmVyID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbWF4ID0gb3RoZXIubmFtZS5sZW5ndGg7XHJcbiAgICAgICAgbGV0IG51bSA9IDY7XHJcbiAgICAgICAgaWYob3RoZXIubm9kZS5uYW1lICE9IFwiR3JvdW5kXCIpe1xyXG4gICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gLTEpe1xyXG4gICAgICAgICAgICAgICAgaWYob3RoZXIubm9kZS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5udW0gPiA5KSBudW0gPSA3OyBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgbnVtID0gNztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgXHJcbiAgICAgICAgbGV0IENvbGxpZGVyTmFtZSA9IG90aGVyLm5hbWUuc3Vic3RyaW5nKG51bSxtYXgpO1xyXG4gICAgICAgIC8v6I635Y+W56Kw5pKe5L2T5ZCN5a2XXHJcbiAgICAgICAgaWYoQ29sbGlkZXJOYW1lID09IFwiPFBvbHlnb25Db2xsaWRlcj5cIil7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubm9kZS55IDw9IG90aGVyLm5vZGUueSAmJiB0aGlzLnVwID09IHRydWUgJiYgdGhpcy5kZWF0aCA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmp1bXBBY3Rpb24pdGhpcy5qdW1wQWN0aW9uLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gLTE7XHJcbiAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlHcm91bmQoKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5q275LqhMVwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FtZURlYXRoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihvdGhlci5ub2RlLm5hbWUgPT0gXCJHcm91bmRcIiAmJiB0aGlzLmRlYXRoID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgIC8vIGlmKHRoaXMuanVtcEFjdGlvbil0aGlzLmp1bXBBY3Rpb24uc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5q275LqhMlwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FtZURlYXRoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5rKh56Kw5Yiw6L6557yYXCIsdGhpcy51cCx0aGlzLm5vZGUueSxvdGhlci5ub2RlLnksdGhpcy5qdW1wU3RhdGUsdGhpcy51cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoQ29sbGlkZXJOYW1lID09IFwiPEJveENvbGxpZGVyPlwiICl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuZGVhdGggPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuW3sue7j+atu+S6oVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICBsZXQgcG9ydHJhaXQgPSBNYXRoLmFicyh0aGlzLm5vZGUueS1vdGhlci5ub2RlLnkpXHJcbiAgICAgICAgICAgIGxldCB3aWR0aCA9IG90aGVyLm5vZGUud2lkdGgvMjtcclxuICAgICAgICAgICAgbGV0IHBvcyA9IE1hdGguYWJzKHRoaXMubm9kZS54IC0gb3RoZXIubm9kZS54KTtcclxuICAgICAgICAgICAgbGV0IGRpc3RhbmNlID1wb3Mvd2lkdGg7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5oiR55qE5L2N572uOlwiLHRoaXMubm9kZS54LFwi5Z2X55qE5L2N572uOlwiLG90aGVyLm5vZGUueCxcIuWdl+eahOWuveW6pjpcIix3aWR0aCxcIueZvuWIhuavlDpcIixkaXN0YW5jZSk7XHJcblxyXG4gICAgICAgICAgICBpZih0aGlzLnVwID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLmrbvkuqE0XCIpO1xyXG4gICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5R3JvdW5kKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWVEZWF0aCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZihkaXN0YW5jZSoxMDAgPCBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5kaXN0YW5jZU1pbiAmJiB0aGlzLmp1bXBTdGF0ZSAhPSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuaIkOWKnzFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLnmb7liIbmr5Q6XCIsZGlzdGFuY2UqMTAwK1wiJVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3Mob3RoZXIsZGlzdGFuY2UqMTAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocG9ydHJhaXQgPj0gMjAgfHwgZGlzdGFuY2UqMTAwID4gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uZGlzdGFuY2VNYXgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuatu+S6oTNcIixcIuiQveW3rjpcIixwb3J0cmFpdCxcIueKtuaAgTpcIix0aGlzLnVwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5R3JvdW5kKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZURlYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5oiQ5YqfMlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLnmb7liIbmr5Q6XCIsZGlzdGFuY2UqMTAwK1wiJVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzKG90aGVyLGRpc3RhbmNlKjEwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN1Y2Nlc3Mob3RoZXIsZGlzdGFuY2Upe1xyXG4gICAgICAgIHRoaXMuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgIT0gLTEpe1xyXG4gICAgICAgICAgICB0aGlzLmJhc2ljSGVpZ2h0ID0gdGhpcy5ub2RlLnk7XHJcbiAgICAgICAgICAgIG90aGVyLm5vZGUuc3RvcEFsbEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID09IDMgfHwgR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlPT00KXtcclxuICAgICAgICAgICAgICAgIEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5zdGFydEd1aWRlKDQsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID09IDQpe1xyXG4gICAgICAgICAgICAgICAgICAgIEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA9IDU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gNSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGlwID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLlRpcC5nZXRDaGlsZEJ5TmFtZShcImdvb2RcIik7XHJcbiAgICAgICAgICAgICAgICBjYy50d2Vlbih0aXApXHJcbiAgICAgICAgICAgICAgICAudG8oMC4zLHtvcGFjaXR5OjI1NSxzY2FsZToxfSlcclxuICAgICAgICAgICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjB9KVxyXG4gICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnN0YXJ0R3VpZGUoNSxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID09IDcpe1xyXG4gICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnN0YXJ0R3VpZGUoOCxmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gOCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGlwID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLlRpcC5nZXRDaGlsZEJ5TmFtZShcInBlcmZldFwiKTtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRpcClcclxuICAgICAgICAgICAgICAgIC50bygwLjMse29wYWNpdHk6MjU1LHNjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgICAgIC50bygwLjIse29wYWNpdHk6MH0pXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc3RhcnRHdWlkZSg5LGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcGVyY2VudCA9IHBhcnNlSW50KGRpc3RhbmNlKjEwK1wiXCIpLzEwO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLnBlcmNlbnQgPSBwZXJjZW50O1xyXG4gICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZSlHYW1lTWFuYWdlci5faW5zdGFuY2UuZGVzdHJveUJsb2NrKHRydWUpO1xyXG4gICAgICAgIHRoaXMuYWRkLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZGQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgbGV0IG51bWJlciA9IDE7XHJcbiAgICAgICAgaWYoZGlzdGFuY2UgPD0gMTApIG51bWJlciA9IDM7XHJcbiAgICAgICAgZWxzZSBpZihkaXN0YW5jZSA8PSAyMCkgbnVtYmVyID0gMjtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5hY2N1cmFjeSA9IG51bWJlcjtcclxuICAgIFxyXG4gICAgICAgIHRoaXMuYWRkLmdldENoaWxkQnlOYW1lKFwiaWNvblwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMucGxpc3QuZ2V0U3ByaXRlRnJhbWVzKClbbnVtYmVyXTtcclxuICAgICAgICB0aGlzLmFkZC5nZXRDaGlsZEJ5TmFtZShcImppYVwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMucGxpc3QuZ2V0U3ByaXRlRnJhbWVzKClbbnVtYmVyKzNdO1xyXG4gICAgICAgIHRoaXMuYWRkQWN0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiZ3VhbmdcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJndWFuZ1wiKS5nZXRDb21wb25lbnQoc3AuU2tlbGV0b24pLnNldEFuaW1hdGlvbigwLFwiZG91YmxlXzFcIixmYWxzZSk7XHJcbiAgICAgICAgaWYodGhpcy5qdW1wQWN0aW9uKXRoaXMuanVtcEFjdGlvbi5zdG9wKCk7XHJcbiAgICAgICAgaWYodGhpcy5kZWF0aCA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikuc2V0QW5pbWF0aW9uKDEsXCJqdW1wXCIsZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5iYXNpY0hlaWdodCA9IHRoaXMubm9kZS55O1xyXG4gICAgICAgIGlmKG51bWJlciA+IDEpe1xyXG4gICAgICAgICAgICBBdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlQeigpO1xyXG4gICAgICAgICAgICBpZih0aGlzLmRvdWJsZSA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvdWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVIaXQgPSAxLjA1O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVIaXQgKz0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlQWRkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb21ibyA9IChHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVIaXQtMSkqKDEvMC4wNSk7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmNvbWJvID0gcGFyc2VJbnQoY29tYm8gKyBcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5THVvKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZG91YmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmNvbWJvID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ibG9jayA9IG90aGVyLm5vZGU7XHJcbiAgICAgICAgaWYodGhpcy5ibG9jay5uYW1lICE9IFwiYmxvY2sxM1wiKXtcclxuICAgICAgICAgICAgdGhpcy5ibG9jay5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5zZXRTY29yZShudW1iZXIpO1xyXG4gICAgICAgICAgICBOb3RpZmljYXRpb24uZW1pdChcInNldERhdGFcIixudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gLTEpe1xyXG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVtaXQoXCJjcmVhdGVCbG9ja1wiLG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlU3VjY2VzcyA9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVtaXQoXCJjcmVhdGVDcmFja0Jsb2NrXCIsbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgfSwgMTApO1xyXG4gIFxyXG4gICAgICAgIGlmKG51bWJlciA+IDEgJiYgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlU3VjY2VzcyAhPSAwICl7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmRvdWJsZVN1Y2Nlc3MgLT0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlU3VjY2VzcyAhPSAwICYmIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmRvdWJsZVN1Y2Nlc3M8Myl7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzID0gMztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzID09IDApe1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLmludGVyZmVyZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5mYWtlID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLmludGVyZmVyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAwO1xyXG4gICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubm9kZS55ID0gb3RoZXIubm9kZS55LTMrb3RoZXIubm9kZS5oZWlnaHQvMjtcclxuICAgICAgICB0aGlzLmp1bXBIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgIH1cclxuXHJcbiAgICBnYW1lRGVhdGgoKXtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuadoeWksei0pVwiKTtcclxuICAgICAgICB0aGlzLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgaWYoIUdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbil7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmNvbWJvID0gMDtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuYWNjdXJhY3kgPSAwO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5wZXJjZW50ID0gLTE7XHJcbiAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lbWl0KFwic2V0RGF0YVwiLG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLmRvdWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzID0gMztcclxuICAgICAgICAgICAgdGhpcy5kZWF0aCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuanVtcEFjdGlvbil0aGlzLmp1bXBBY3Rpb24uc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IC0xO1xyXG4gICAgICAgICAgICBOb3RpZmljYXRpb24uZW1pdChcImRlYXRoXCIsZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0aGlzLmRlYXRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID09IDYpe1xyXG4gICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnRpcEhpZGUoXCJ0aXA0XCIsbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5qdW1wQWN0aW9uKXRoaXMuanVtcEFjdGlvbi5zdG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gLTE7XHJcbiAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lbWl0KFwiZGVhdGhcIix0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgeGluQWN0aW9uKCl7XHJcbiAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGlmZSA+PSAwKXtcclxuICAgICAgICAgICAgbGV0IHhpbiA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInhpblwiKTtcclxuICAgICAgICAgICAgeGluLnkgPSAxMjA7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHhpbilcclxuICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTUseTp4aW4ueSs1MH0pXHJcbiAgICAgICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgICAgIC50bygwLjMse29wYWNpdHk6MCx5Onhpbi55KzEwMH0pXHJcbiAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjdGlvbigpe1xyXG4gICAgICAgIHRoaXMuYWRkLnkgPSAxMjA7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5hZGQpXHJcbiAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTUseTp0aGlzLmFkZC55KzUwfSlcclxuICAgICAgICAuZGVsYXkoMC41KVxyXG4gICAgICAgIC50bygwLjMse29wYWNpdHk6MCx5OnRoaXMuYWRkLnkrMTAwfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICB0aGlzLmFkZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoZHQpIHtcclxuICAgICAgICAvLyBpZih0aGlzLmRlYXRoID09IHRydWUgJiYgdGhpcy5ub2RlLnkgPiAtNTAwICYmIEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5vdmVyID09IGZhbHNlKXtcclxuICAgICAgICAvLyAgICAgLy8gdGhpcy5ub2RlLnkgLT0gMztcclxuICAgICAgICAvLyAgICAgLy8gaWYodGhpcy5ub2RlLnkgPD0gLTUwMCl7XHJcbiAgICAgICAgLy8gICAgIC8vICAgICB0aGlzLm5vZGUueSA9IC01MDA7XHJcbiAgICAgICAgLy8gICAgIC8vIH0gXHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==