FlyUp/temp/quick-scripts/dst/assets/Script/Player.js
2024-06-12 16:35:19 +08:00

431 lines
59 KiB
JavaScript

(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);
}
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);
}
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 == "<PolygonCollider>") {
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 == "<BoxCollider>") {
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);
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);
})
.start();
}
else if (GameManager_1.default._instance.guide == 7) {
GameManager_1.default._instance.startGuide(8);
}
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);
})
.start();
}
}
GameData_1.default._instance.CLICK_DATA.percent = Math.floor(distance);
if (GameManager_1.default._instance)
GameManager_1.default._instance.destroyBlock(true);
this.add.active = true;
this.add.opacity = 0;
var number = 1;
if (distance <= 7.5)
number = 3;
else if (distance <= 15)
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.block = other.node;
if (this.block.name != "block13") {
this.block.getComponent("Block").setScore(number);
}
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;
}
Notification_1.Notification.emit("setData", null);
setTimeout(function () {
if (GameManager_1.default._instance.guide == -1)
Notification_1.Notification.emit("createBlock", null);
}, 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) {
setTimeout(function () {
if (GameManager_1.default._instance.guide == -1)
Notification_1.Notification.emit("createCrackBlock", null);
}, 20);
}
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", null);
}
else {
this.death = true;
if (GameManager_1.default._instance.guide == 6) {
GameManager_1.default._instance.tipHide("tip3", null);
}
if (this.jumpAction)
this.jumpAction.stop();
this.jumpState = -1;
Notification_1.Notification.emit("death", true);
}
};
NewClass.prototype.xinAction = function () {
// console.log("生命:",GameData._instance.GM_INFO.life);
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxQbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9CQUFvQjtBQUNwQix3RUFBd0U7QUFDeEUsbUJBQW1CO0FBQ25CLGtGQUFrRjtBQUNsRiw4QkFBOEI7QUFDOUIsa0ZBQWtGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbEYsdUNBQWtDO0FBQ2xDLDZDQUF3QztBQUN4QyxvREFBK0M7QUFDL0Msb0RBQW1EO0FBQzdDLElBQUEsS0FBc0IsRUFBRSxDQUFDLFVBQVUsRUFBbEMsT0FBTyxhQUFBLEVBQUUsUUFBUSxjQUFpQixDQUFDO0FBQUEsQ0FBQyxDQUFBO0FBRzNDO0lBQXNDLDRCQUFZO0lBQWxEO1FBQUEscUVBNlhDO1FBMVhHLFNBQUcsR0FBWSxJQUFJLENBQUM7UUFFcEIsV0FBSyxHQUFrQixJQUFJLENBQUM7O0lBd1hoQyxDQUFDO0lBNVdHLHdCQUF3QjtJQUV4QixlQUFlO0lBRWYsd0JBQUssR0FBTDtRQUNJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsdUJBQUksR0FBSjtRQUNJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FB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QTdYb0IsUUFBUSIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExlYXJuIFR5cGVTY3JpcHQ6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3R5cGVzY3JpcHQuaHRtbFxyXG4vLyBMZWFybiBBdHRyaWJ1dGU6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWxcclxuLy8gTGVhcm4gbGlmZS1jeWNsZSBjYWxsYmFja3M6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL2xpZmUtY3ljbGUtY2FsbGJhY2tzLmh0bWxcclxuXHJcbmltcG9ydCBHYW1lRGF0YSBmcm9tIFwiLi9HYW1lRGF0YVwiO1xyXG5pbXBvcnQgR2FtZU1hbmFnZXIgZnJvbSBcIi4vR2FtZU1hbmFnZXJcIjtcclxuaW1wb3J0IEF1ZGlvTWFuYWdlciBmcm9tIFwiLi90b29sL0F1ZGlvTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuL3Rvb2wvTm90aWZpY2F0aW9uJztcclxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7MFxyXG5cclxuQGNjY2xhc3NcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV3Q2xhc3MgZXh0ZW5kcyBjYy5Db21wb25lbnQge1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgYWRkOiBjYy5Ob2RlID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5TcHJpdGVBdGxhcylcclxuICAgIHBsaXN0OiBjYy5TcHJpdGVBdGxhcyA9bnVsbDtcclxuXHJcbiAgICBiYXNpY0hlaWdodDpudW1iZXIgIC8v5q+P5qyh6Lez6LeD5YmN5Z+656GA6auY5bqmXHJcbiAgICBqdW1wU3RhdGU6bnVtYmVyOyAgIC8v6Lez6LeD54q25oCB77yM5o6n5Yi2Meautei3szLmrrXot7NcclxuICAgIGp1bXBIZWlnaHQ6bnVtYmVyOyAgLy/ot7Pot4Ppq5jluqZcclxuICAgIGp1bXBBY3Rpb246IGNjLlR3ZWVuPGNjLk5vZGU+Oy8v6Lez6LeDdHdlZW7liqjnlLvvvIznlKjkuo7lgZzmraLmjqfliLZcclxuICAgIHVwOmJvb2xlYW47ICAgICAgICAgLy/ot7Pot4PkuIrljYfkuIvpmY3nirbmgIHliKTmlq1cclxuICAgIGJsb2NrOiBjYy5Ob2RlO1xyXG4gICAgZGVhdGg6Ym9vbGVhbjtcclxuICAgIGludGVyZmVyZTpib29sZWFuO1xyXG4gICAgZG91YmxlOmJvb2xlYW47XHJcbiAgICBqdW1wUGF1c2U6Ym9vbGVhbjtcclxuICAgIC8vIExJRkUtQ1lDTEUgQ0FMTEJBQ0tTOlxyXG5cclxuICAgIC8vIG9uTG9hZCAoKSB7fVxyXG5cclxuICAgIHN0YXJ0ICgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCl7XHJcbiAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAwO1xyXG4gICAgICAgIHRoaXMuanVtcEhlaWdodCA9IHRoaXMubm9kZS55O1xyXG4gICAgICAgIHRoaXMuYmFzaWNIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgICAgICB0aGlzLnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRvdWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGVhdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmp1bXBBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYmxvY2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaW50ZXJmZXJlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8v6Lez5YqoXHJcbiAgICBqdW1wKCl7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuanVtcFN0YXRlIDwgMil7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuanVtcFN0YXRlID09IDApe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWF0aCA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIikuZ2V0Q29tcG9uZW50KHNwLlNrZWxldG9uKS5zZXRBbmltYXRpb24oMSxcImp1bXBcIixmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLmp1bXBTdGF0ZSA9PSAxIHx8IHRoaXMubm9kZS55ID4gKHRoaXMuanVtcEhlaWdodCtHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5qdW1wSGVpZ2h0LTUpKXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVhdGggPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA+MCAmJiBHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPDMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikuc2V0QW5pbWF0aW9uKDEsXCJqdW1wXCIsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5qdW1wU3RhdGUgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5qdW1wUGF1c2UgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuYmxvY2spe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmJsb2NrLm5hbWUgIT0gXCJibG9jazEzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9jay5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXt0aGlzLmJsb2NrLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsb2NrID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID09IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc3RhcnRHdWlkZSgyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmp1bXBzID0gMTtcclxuICAgICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlKdW1wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5iYXNpY0hlaWdodCA9IHRoaXMubm9kZS55O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVtaXQoXCJzaG93R3JvdW5kXCIsdGhpcy5ub2RlLnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcEFjdGlvbiA9IGNjLnR3ZWVuKHRoaXMubm9kZSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uanVtcFVwVGltZSx7cG9zaXRpb246Y2MudjMoMCx0aGlzLmp1bXBIZWlnaHQrR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uanVtcEhlaWdodCwwKX0se2Vhc2luZzoncXVhZE91dCd9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gdGhpcy5ub2RlLnkgLSB0aGlzLmp1bXBIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uanVtcERvd25UaW1lLHtwb3NpdGlvbjpjYy52MygwLHRoaXMuanVtcEhlaWdodCwwKX0se2Vhc2luZzonY3ViaWNJbid9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpcy5qdW1wU3RhdGUgPT0gMSB8fCB0aGlzLm5vZGUueSA+ICh0aGlzLmp1bXBIZWlnaHQrR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uanVtcEhlaWdodC0xNSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA+MCAmJiBHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPDMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA9PSA2KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc3RhcnRHdWlkZSg2KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5qdW1wQWN0aW9uKXRoaXMuanVtcEFjdGlvbi5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5SnVtcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmp1bXBzID0gMjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wQWN0aW9uID0gY2MudHdlZW4odGhpcy5ub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIC50byhHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5qdW1wVXBUaW1lLHtwb3NpdGlvbjpjYy52MygwLHRoaXMubm9kZS55K0dhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBIZWlnaHQsMCl9LHtlYXNpbmc6J3F1YWRPdXQnfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBEb3duVGltZSoxLjUse3Bvc2l0aW9uOmNjLnYzKDAsdGhpcy5qdW1wSGVpZ2h0LDApfSx7ZWFzaW5nOidjdWJpY0luJ30pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcEhlaWdodCA9IHRoaXMubm9kZS55O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Db2xsaXNpb25FbnRlcihvdGhlcjogY2MuQ29sbGlkZXIsIHNlbGY6IGNjLkNvbGxpZGVyKSB7XHJcbiAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlKXtcclxuICAgICAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLm92ZXIgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBtYXggPSBvdGhlci5uYW1lLmxlbmd0aDtcclxuICAgICAgICBsZXQgbnVtID0gNjtcclxuICAgICAgICBpZihvdGhlci5ub2RlLm5hbWUgIT0gXCJHcm91bmRcIil7XHJcbiAgICAgICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA9PSAtMSl7XHJcbiAgICAgICAgICAgICAgICBpZihvdGhlci5ub2RlLmdldENvbXBvbmVudChcIkJsb2NrXCIpLm51bSA+IDkpIG51bSA9IDc7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBudW0gPSA3O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgICBsZXQgQ29sbGlkZXJOYW1lID0gb3RoZXIubmFtZS5zdWJzdHJpbmcobnVtLG1heCk7XHJcbiAgICAgICAgLy/ojrflj5bnorDmkp7kvZPlkI3lrZdcclxuICAgICAgICBpZihDb2xsaWRlck5hbWUgPT0gXCI8UG9seWdvbkNvbGxpZGVyPlwiKXtcclxuICAgICAgICAgICAgaWYodGhpcy5ub2RlLnkgPD0gb3RoZXIubm9kZS55ICYmIHRoaXMudXAgPT0gdHJ1ZSAmJiB0aGlzLmRlYXRoID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuanVtcEFjdGlvbil0aGlzLmp1bXBBY3Rpb24uc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAtMTtcclxuICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUdyb3VuZCgpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLmrbvkuqExXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1lRGVhdGgoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKG90aGVyLm5vZGUubmFtZSA9PSBcIkdyb3VuZFwiICYmIHRoaXMuZGVhdGggPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgLy8gaWYodGhpcy5qdW1wQWN0aW9uKXRoaXMuanVtcEFjdGlvbi5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLmrbvkuqEyXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1lRGVhdGgoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLmsqHnorDliLDovrnnvJhcIix0aGlzLnVwLHRoaXMubm9kZS55LG90aGVyLm5vZGUueSx0aGlzLmp1bXBTdGF0ZSx0aGlzLnVwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihDb2xsaWRlck5hbWUgPT0gXCI8Qm94Q29sbGlkZXI+XCIgKXtcclxuICAgICAgICAgICAgaWYodGhpcy5kZWF0aCA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5bey57uP5q275LqhXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIGxldCBwb3J0cmFpdCA9IE1hdGguYWJzKHRoaXMubm9kZS55LW90aGVyLm5vZGUueSlcclxuICAgICAgICAgICAgbGV0IHdpZHRoID0gb3RoZXIubm9kZS53aWR0aC8yO1xyXG4gICAgICAgICAgICBsZXQgcG9zID0gTWF0aC5hYnModGhpcy5ub2RlLnggLSBvdGhlci5ub2RlLngpO1xyXG4gICAgICAgICAgICBsZXQgZGlzdGFuY2UgPXBvcy93aWR0aDtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLmiJHnmoTkvY3nva46XCIsdGhpcy5ub2RlLngsXCLlnZfnmoTkvY3nva46XCIsb3RoZXIubm9kZS54LFwi5Z2X55qE5a695bqmOlwiLHdpZHRoLFwi55m+5YiG5q+UOlwiLGRpc3RhbmNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmKHRoaXMudXAgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuatu+S6oTRcIik7XHJcbiAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlHcm91bmQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FtZURlYXRoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKGRpc3RhbmNlKjEwMCA8IEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmRpc3RhbmNlTWluICYmIHRoaXMuanVtcFN0YXRlICE9IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5oiQ5YqfMVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIueZvuWIhuavlDpcIixkaXN0YW5jZSoxMDArXCIlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyhvdGhlcixkaXN0YW5jZSoxMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBpZihwb3J0cmFpdCA+PSAyMCB8fCBkaXN0YW5jZSoxMDAgPiBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5kaXN0YW5jZU1heCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5q275LqhM1wiLFwi6JC95beuOlwiLHBvcnRyYWl0LFwi54q25oCBOlwiLHRoaXMudXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlHcm91bmQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lRGVhdGgoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLmiJDlip8yXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIueZvuWIhuavlDpcIixkaXN0YW5jZSoxMDArXCIlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3Mob3RoZXIsZGlzdGFuY2UqMTAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3VjY2VzcyhvdGhlcixkaXN0YW5jZSl7XHJcbiAgICAgICAgdGhpcy5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgICAgIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSAhPSAtMSl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzaWNIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgICAgICAgICAgb3RoZXIubm9kZS5zdG9wQWxsQWN0aW9ucygpO1xyXG4gICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gMyB8fCBHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGU9PTQpe1xyXG4gICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLnN0YXJ0R3VpZGUoNCk7XHJcbiAgICAgICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gNCl7XHJcbiAgICAgICAgICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID0gNTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA9PSA1KXtcclxuICAgICAgICAgICAgICAgIHRoaXMuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGxldCB0aXAgPSBHYW1lTWFuYWdlci5faW5zdGFuY2UuVGlwLmdldENoaWxkQnlOYW1lKFwiZ29vZFwiKTtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRpcClcclxuICAgICAgICAgICAgICAgIC50bygwLjMse29wYWNpdHk6MjU1LHNjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgICAgIC50bygwLjIse29wYWNpdHk6MH0pXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc3RhcnRHdWlkZSg1KTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gNyl7XHJcbiAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc3RhcnRHdWlkZSg4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5ndWlkZSA9PSA4KXtcclxuICAgICAgICAgICAgICAgIHRoaXMuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGxldCB0aXAgPSBHYW1lTWFuYWdlci5faW5zdGFuY2UuVGlwLmdldENoaWxkQnlOYW1lKFwicGVyZmV0XCIpO1xyXG4gICAgICAgICAgICAgICAgY2MudHdlZW4odGlwKVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuMyx7b3BhY2l0eToyNTUsc2NhbGU6MX0pXHJcbiAgICAgICAgICAgICAgICAuZGVsYXkoMC41KVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eTowfSlcclxuICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgIEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5zdGFydEd1aWRlKDkpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgIFxyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLnBlcmNlbnQgPSBNYXRoLmZsb29yKGRpc3RhbmNlKTtcclxuICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UpR2FtZU1hbmFnZXIuX2luc3RhbmNlLmRlc3Ryb3lCbG9jayh0cnVlKTtcclxuICAgICAgICB0aGlzLmFkZC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWRkLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIGxldCBudW1iZXIgPSAxO1xyXG4gICAgICAgIGlmKGRpc3RhbmNlIDw9IDcuNSkgbnVtYmVyID0gMztcclxuICAgICAgICBlbHNlIGlmKGRpc3RhbmNlIDw9IDE1KSBudW1iZXIgPSAyO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmFjY3VyYWN5ID0gbnVtYmVyO1xyXG4gICAgXHJcbiAgICAgICAgdGhpcy5hZGQuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5wbGlzdC5nZXRTcHJpdGVGcmFtZXMoKVtudW1iZXJdO1xyXG4gICAgICAgIHRoaXMuYWRkLmdldENoaWxkQnlOYW1lKFwiamlhXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5wbGlzdC5nZXRTcHJpdGVGcmFtZXMoKVtudW1iZXIrM107XHJcbiAgICAgICAgdGhpcy5hZGRBY3Rpb24oKTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJndWFuZ1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImd1YW5nXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikuc2V0QW5pbWF0aW9uKDAsXCJkb3VibGVfMVwiLGZhbHNlKTtcclxuICAgICAgICBpZih0aGlzLmp1bXBBY3Rpb24pdGhpcy5qdW1wQWN0aW9uLnN0b3AoKTtcclxuICAgICAgICBpZih0aGlzLmRlYXRoID09IGZhbHNlKXtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIikuZ2V0Q29tcG9uZW50KHNwLlNrZWxldG9uKS5zZXRBbmltYXRpb24oMSxcImp1bXBcIixmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJsb2NrID0gb3RoZXIubm9kZTtcclxuICAgICAgICBpZih0aGlzLmJsb2NrLm5hbWUgIT0gXCJibG9jazEzXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrLmdldENvbXBvbmVudChcIkJsb2NrXCIpLnNldFNjb3JlKG51bWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYmFzaWNIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgICAgICBpZihudW1iZXIgPiAxKXtcclxuICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5UHooKTtcclxuICAgICAgICAgICAgaWYodGhpcy5kb3VibGUgPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3VibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlSGl0ID0gMS4wNTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlSGl0ICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmRvdWJsZUFkZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgY29tYm8gPSAoR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlSGl0LTEpKigxLzAuMDUpO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5jb21ibyA9IHBhcnNlSW50KGNvbWJvICsgXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUx1bygpO1xyXG4gICAgICAgICAgICB0aGlzLmRvdWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5jb21ibyA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBOb3RpZmljYXRpb24uZW1pdChcInNldERhdGFcIixudWxsKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlLmd1aWRlID09IC0xKVxyXG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVtaXQoXCJjcmVhdGVCbG9ja1wiLG51bGwpO1xyXG4gICAgICAgIH0sIDEwKTtcclxuICBcclxuICAgICAgICBpZihudW1iZXIgPiAxICYmIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmRvdWJsZVN1Y2Nlc3MgIT0gMCApe1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzIC09IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmRvdWJsZVN1Y2Nlc3MgIT0gMCAmJiBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzPDMpe1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlU3VjY2VzcyA9IDM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlU3VjY2VzcyA9PSAwKXtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVtaXQoXCJjcmVhdGVDcmFja0Jsb2NrXCIsbnVsbCk7XHJcbiAgICAgICAgICAgIH0sIDIwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgR2FtZU1hbmFnZXIuX2luc3RhbmNlLmludGVyZmVyZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5mYWtlID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLmludGVyZmVyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAwO1xyXG4gICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubm9kZS55ID0gb3RoZXIubm9kZS55LTMrb3RoZXIubm9kZS5oZWlnaHQvMjtcclxuICAgICAgICB0aGlzLmp1bXBIZWlnaHQgPSB0aGlzLm5vZGUueTtcclxuICAgIH1cclxuXHJcbiAgICBnYW1lRGVhdGgoKXtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuadoeWksei0pVwiKTtcclxuICAgICAgICB0aGlzLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgaWYoIUdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbil7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmNvbWJvID0gMDtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuYWNjdXJhY3kgPSAwO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5wZXJjZW50ID0gLTE7XHJcbiAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lbWl0KFwic2V0RGF0YVwiLG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLmRvdWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzID0gMztcclxuICAgICAgICAgICAgdGhpcy5kZWF0aCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuanVtcEFjdGlvbil0aGlzLmp1bXBBY3Rpb24uc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IC0xO1xyXG4gICAgICAgICAgICBOb3RpZmljYXRpb24uZW1pdChcImRlYXRoXCIsbnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhdGggPSB0cnVlO1xyXG4gICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2UuZ3VpZGUgPT0gNil7XHJcbiAgICAgICAgICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2UudGlwSGlkZShcInRpcDNcIixudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmp1bXBBY3Rpb24pdGhpcy5qdW1wQWN0aW9uLnN0b3AoKTtcclxuICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAtMTtcclxuICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVtaXQoXCJkZWF0aFwiLHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB4aW5BY3Rpb24oKXtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIueUn+WRvTpcIixHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlKTtcclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlID49IDApe1xyXG4gICAgICAgICAgICBsZXQgeGluID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwieGluXCIpO1xyXG4gICAgICAgICAgICB4aW4ueSA9IDEyMDtcclxuICAgICAgICAgICAgY2MudHdlZW4oeGluKVxyXG4gICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NSx5Onhpbi55KzUwfSlcclxuICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgLnRvKDAuMyx7b3BhY2l0eTowLHk6eGluLnkrMTAwfSlcclxuICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWN0aW9uKCl7XHJcbiAgICAgICAgdGhpcy5hZGQueSA9IDEyMDtcclxuICAgICAgICBjYy50d2Vlbih0aGlzLmFkZClcclxuICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NSx5OnRoaXMuYWRkLnkrNTB9KVxyXG4gICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgLnRvKDAuMyx7b3BhY2l0eTowLHk6dGhpcy5hZGQueSsxMDB9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgIHRoaXMuYWRkLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlIChkdCkge1xyXG4gICAgICAgIC8vIGlmKHRoaXMuZGVhdGggPT0gdHJ1ZSAmJiB0aGlzLm5vZGUueSA+IC01MDAgJiYgR2FtZU1hbmFnZXIuX2luc3RhbmNlLm92ZXIgPT0gZmFsc2Upe1xyXG4gICAgICAgIC8vICAgICAvLyB0aGlzLm5vZGUueSAtPSAzO1xyXG4gICAgICAgIC8vICAgICAvLyBpZih0aGlzLm5vZGUueSA8PSAtNTAwKXtcclxuICAgICAgICAvLyAgICAgLy8gICAgIHRoaXMubm9kZS55ID0gLTUwMDtcclxuICAgICAgICAvLyAgICAgLy8gfSBcclxuICAgICAgICAvLyB9XHJcbiAgICB9XHJcbn1cclxuIl19