Commit 5c679723 authored by liurufeng's avatar liurufeng

资源更新

parent 5a8dfc77
{}
\ No newline at end of file
<html>
<head>
<title>www.layabox.com</title>
<meta charset='utf-8' />
<meta name='renderer' content='webkit' />
<meta name='viewport' content='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no'
/>
<meta name='apple-mobile-web-app-capable' content='yes' />
<meta name='full-screen' content='true' />
<meta name='x5-fullscreen' content='true' />
<meta name='360-fullscreen' content='true' />
<meta name='laya' screenorientation='landscape' />
<meta http-equiv='expires' content='0' />
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />
<meta http-equiv='expires' content='0' />
<meta http-equiv='Cache-Control' content='no-siteapp' />
</head>
<body>
<script type="text/javascript">
function loadLib(url) {
var script = document.createElement("script");
script.async = false;
script.src = url;
document.body.appendChild(script);
}
</script>
<script type="text/javascript" src="index.js"></script>
</body>
</html>
\ No newline at end of file
/**
* 设置LayaNative屏幕方向,可设置以下值
* landscape 横屏
* portrait 竖屏
* sensor_landscape 横屏(双方向)
* sensor_portrait 竖屏(双方向)
*/
window.screenOrientation = "sensor_landscape";
//-----libs-begin-----
loadLib("libs/laya.core.js")
loadLib("libs/laya.webgl.js")
loadLib("libs/laya.html.js")
loadLib("libs/laya.d3.js")
loadLib("libs/laya.physics3D.js")
//-----libs-end-------
//loadLib("libs/fairygui.js");
loadLib("js/bundle.js");
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
"use strict";
/**This class is automatically generated by LayaAirIDE, please do not make any modifications. */
Object.defineProperty(exports, "__esModule", { value: true });
/*
* 游戏初始化配置;
*/
var GameConfig = /** @class */ (function () {
function GameConfig() {
}
GameConfig.init = function () {
var reg = Laya.ClassUtils.regClass;
};
GameConfig.width = 1334;
GameConfig.height = 750;
GameConfig.scaleMode = "fixedauto";
GameConfig.screenMode = "none";
GameConfig.alignV = "top";
GameConfig.alignH = "left";
GameConfig.startScene = "";
GameConfig.sceneRoot = "";
GameConfig.debug = false;
GameConfig.stat = false;
GameConfig.physicsDebug = false;
GameConfig.exportSceneToJson = true;
return GameConfig;
}());
exports.default = GameConfig;
GameConfig.init();
},{}],2:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var GameConfig_1 = require("./GameConfig");
var OrbitCamera_1 = require("./OrbitCamera");
var PathMove_1 = require("./PathMove");
var Main = /** @class */ (function () {
function Main() {
this.sceneRes = "res/3d/scene/Conventional/scene.ls";
//根据IDE设置初始化引擎
if (window["Laya3D"])
Laya3D.init(GameConfig_1.default.width, GameConfig_1.default.height);
else
Laya.init(GameConfig_1.default.width, GameConfig_1.default.height, Laya["WebGL"]);
Laya["Physics"] && Laya["Physics"].enable();
Laya["DebugPanel"] && Laya["DebugPanel"].enable();
Laya.stage.scaleMode = GameConfig_1.default.scaleMode;
Laya.stage.screenMode = GameConfig_1.default.screenMode;
//兼容微信不支持加载scene后缀场景
Laya.URL.exportSceneToJson = GameConfig_1.default.exportSceneToJson;
//打开调试面板(通过IDE设置调试模式,或者url地址增加debug=true参数,均可打开调试面板)
if (GameConfig_1.default.debug || Laya.Utils.getQueryString("debug") == "true")
Laya.enableDebugPanel();
if (GameConfig_1.default.physicsDebug && Laya["PhysicsDebugDraw"])
Laya["PhysicsDebugDraw"].enable();
if (GameConfig_1.default.stat)
Laya.Stat.show();
Laya.alertGlobalError = true;
//激活资源版本控制,version.json由IDE发布功能自动生成,如果没有也不影响后续流程
Laya.ResourceVersion.enable("version.json", Laya.Handler.create(this, this.onVersionLoaded), Laya.ResourceVersion.FILENAME_VERSION);
}
Main.prototype.onVersionLoaded = function () {
Laya.Scene3D.load(this.sceneRes, Laya.Handler.create(this, this.onLoadSceneComplete));
};
Main.prototype.onLoadSceneComplete = function (scene) {
this.scene = scene;
Laya.stage.addChild(this.scene);
var cameraTarget = new Laya.Sprite3D();
cameraTarget.transform.position = new Laya.Vector3(5, 0, 0);
this.scene.addChild(cameraTarget);
this.camera = this.scene.getChildByName("CameraPivot").getChildAt(0);
var orbit = this.camera.addComponent(OrbitCamera_1.OrbitCamera);
orbit.Target = cameraTarget;
orbit.canPan = true;
orbit.Radius = 35;
orbit.setRotation(-150, -210);
var player = this.scene.getChildByName("Player");
var playerAnim = player.getChildAt(0).getComponent(Laya.Animator);
var pathMove = player.addComponent(PathMove_1.default);
pathMove.moveComplete = Laya.Handler.create(this, function () {
playerAnim.crossFade("Idle", 0.1, 0, 0);
});
var wayPoints = [];
for (var i = 0; i < this.scene.getChildByName("PlayerWayPoint")._children.length; i++) {
var point = this.scene.getChildByName("PlayerWayPoint")._children[i];
wayPoints.push(point.transform.position);
}
Laya.timer.once(3000, this, function () {
playerAnim.crossFade("Walk", 0.1, 0, 0);
pathMove.SetMovePath(wayPoints, true);
});
};
return Main;
}());
//激活启动类
new Main();
},{"./GameConfig":1,"./OrbitCamera":4,"./PathMove":5}],3:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var MathHelper = /** @class */ (function () {
function MathHelper() {
}
/**
* 获取两向量角度
*/
MathHelper.Vector3Angle = function (v1, v2) {
Laya.Vector3.normalize(v2, v2);
var dot = Laya.Vector3.dot(v1, v2);
var angle = Math.acos(dot) * 57.29578;
return angle;
};
/**
* 球表面随机
*/
MathHelper.onUnitSphere = function (radius) {
var p1 = this.randomFloat(-radius, radius);
var p2 = this.randomFloat(0, radius);
var p3 = this.randomFloat(-radius, radius);
var v3 = new Laya.Vector3(p1, p2, p3);
//Laya.Vector3.normalize(v3,v3);
Laya.Vector3.scale(v3, radius, v3);
return v3;
};
MathHelper.randomFloat = function (min, max) {
return Math.random() * (max - min) + min;
};
/**
* 随机范围获取整数数值 min<= value <=max
* */
MathHelper.random = function (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
};
/**
* ClampAngle
*/
MathHelper.clampAngle = function (angle, min, max) {
if (angle < min) {
angle = min;
}
else if (angle > max) {
angle = max;
}
return angle;
};
/**
* Clamp
*/
MathHelper.clamp = function (value, min, max) {
if (value < min) {
value = min;
}
else if (value > max) {
value = max;
}
return value;
};
MathHelper.newGuid = function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
MathHelper.number2BigNumber = function (n, maxLen) {
if (maxLen === void 0) { maxLen = 4; }
var outNum;
var k = 1000;
var base = k;
var pow = 0;
for (pow = 0;; pow++) {
if (n < base) {
break;
}
base *= k;
}
var unit = "";
if (pow < 5) {
unit = pow == 0 ? "" : (pow == 1 ? "k" : (pow == 2 ? "m" : (pow == 3 ? "b" : "t")));
}
else {
var l_a = 97;
var l_A = 65;
var div = Math.floor((pow - 5) / 26);
var mod = (pow - 5) % 26;
unit = div == 0 ? String.fromCharCode(l_a + mod, l_a + mod) : (div == 1 ? String.fromCharCode(l_A + mod, l_a + mod) : String.fromCharCode(l_A + mod, l_A + mod));
}
outNum = String(n / (base * 0.001));
return "." == (outNum = outNum.substr(0, maxLen)).charAt(outNum.length - 1) ? outNum.replace(".", unit) : outNum + unit;
};
MathHelper.getSystemTime = function () {
var curDate = new Date();
var year = curDate.getFullYear();
var month = curDate.getMonth() + 1;
var date = curDate.getDate();
var day = curDate.getDay();
var hour = curDate.getHours();
var minute = curDate.getMinutes();
var second = curDate.getSeconds();
var systemTime = year + "年" + month + "月" + date + "日" + hour + "时" + minute + "分" + second + "秒";
return systemTime;
};
/*对比版本*/
MathHelper.CompareVersion = function (v1, v2) {
var arr1 = v1.split('.');
var arr2 = v2.split('.');
var len = Math.max(arr1.length, arr2.length);
while (arr1.length < len) {
arr1.push('0');
}
while (arr2.length < len) {
arr2.push('0');
}
for (var i = 0; i < len; i++) {
var num1 = parseInt(arr1[i]);
var num2 = parseInt(arr2[i]);
if (num1 > num2) {
return 1;
}
else if (num1 < num2) {
return -1;
}
}
return 0;
};
MathHelper.CountDown = function (time) {
var minute = Math.floor(time / 60);
var second = time % 60;
return (minute < 10 ? "0" + minute : minute) + ":" + (second < 10 ? "0" + second : second);
};
MathHelper.countDay = function (d1, d2) {
var s1 = new Date(d1);
var s2 = new Date(d2);
var days = s1.getTime() - s2.getTime();
var time = days / (1000 * 60 * 60 * 24);
return time;
};
MathHelper.getTime = function () {
var curDate = new Date();
var year = curDate.getFullYear();
var month = curDate.getMonth() + 1;
var date = curDate.getDate();
if (month < 10) {
}
var systemTime = year + "/" + (month < 10 ? "0" + month : month) + "/" + (date < 10 ? "0" + date : date);
return systemTime;
};
MathHelper.prefixInteger = function (num, length) {
return (Array(length).join('0') + num).slice(-length);
};
/**
* Deg2Rad = 0.01745329
*/
MathHelper.Deg2Rad = 0.01745329;
/**
* Rad2Deg = 57.29578
*/
MathHelper.Rad2Deg = 57.29578;
return MathHelper;
}());
exports.MathHelper = MathHelper;
},{}],4:[function(require,module,exports){
"use strict";
/*
* OrbitCamera 360观察物体相机
* unity需要取巧处理
*/
Object.defineProperty(exports, "__esModule", { value: true });
var MouseManager = laya.events.MouseManager;
var Quaternion = laya.d3.math.Quaternion;
var Event = Laya.Event;
var MathHelper_1 = require("./MathHelper");
var OrbitCamera = /** @class */ (function (_super) {
__extends(OrbitCamera, _super);
function OrbitCamera() {
var _this = _super.call(this) || this;
_this.factor = 0.1;
_this.canPan = false;
_this.RotateSpeed = 0.5;
_this.PanSpeed = 10;
_this.SmoothTime = 1;
_this.YMinLimit = -180;
_this.YMaxLimit = 180;
_this.Distance = 35;
_this.DistanceMin = 15;
_this.DistanceMax = 35;
_this.Pause = false;
_this.isTweening = false;
_this.Radius = 0;
_this.AngleH = 0;
_this.AngleV = 0;
_this.PanX = 0;
_this.PanY = 0;
_this.downX = 0;
_this.downY = 0;
_this.isDown = false;
_this.mouseX = 0;
_this.mouseY = 0;
_this.isMoved = false;
_this.tmpOutRotation = new Quaternion(0, 0, 0, 0);
_this.lastDistance = 0;
_this.targetOffsetMoveY = 0;
_this.tweenRotation = new Laya.Quaternion(0, 0, 0, 0);
_this.up = new Laya.Vector3();
return _this;
}
OrbitCamera.prototype.onAwake = function () {
this.modle = this.owner.transform;
this.modleParent = this.modle._parent;
var angles = this.modleParent.localRotationEuler;
this.AngleH = angles.y;
this.AngleV = angles.x;
this.initEvents();
};
OrbitCamera.prototype.onDestroy = function () {
Laya.stage.off(Laya.Event.MOUSE_DOWN, this, this.onMouseDownHandler);
Laya.stage.off(Laya.Event.MOUSE_UP, this, this.onMouseUpHandler);
Laya.stage.off(Laya.Event.MOUSE_WHEEL, this, this.onMouserWheelHandler);
};
OrbitCamera.prototype.getRotation = function () {
return this.modleParent.localRotation;
};
OrbitCamera.prototype.setRotation = function (h, v, useTween) {
if (useTween === void 0) { useTween = false; }
var t = new Laya.Quaternion(this.modleParent.localRotation.x, this.modleParent.localRotation.y, this.modleParent.localRotation.z, this.modleParent.localRotation.w);
this.AngleH = h;
this.AngleV = v;
Quaternion.createFromYawPitchRoll(this.AngleH * 0.005 * this.RotateSpeed, this.AngleV * 0.005 * this.RotateSpeed, 0, this.tmpOutRotation);
if (useTween) {
this.isTweening = true;
fairygui.tween.GTween.to4(t.x, t.y, t.z, t.w, this.tmpOutRotation.x, this.tmpOutRotation.y, this.tmpOutRotation.z, this.tmpOutRotation.w, 1)
.onUpdate(this.onTweenRotationUpdate, this)
.onComplete(this.onTweenRotationCompelte, this);
}
else {
this.modleParent.localRotation = this.tmpOutRotation;
}
};
OrbitCamera.prototype.onTweenRotationUpdate = function (tween) {
this.tmpOutRotation = new Laya.Quaternion(tween.value.x, tween.value.y, tween.value.z, tween.value.w);
this.modleParent.localRotation = this.tmpOutRotation;
};
OrbitCamera.prototype.onTweenRotationCompelte = function () {
this.isTweening = false;
this.Pause = false;
};
OrbitCamera.prototype.onUpdate = function () {
if (this.Pause || this.isTweening) {
return;
}
// let an = 3.14 / 2;
// let moveH = this.mouseX * Math.cos(an) + this.mouseY * Math.sin(an);
// let moveV = this.mouseX * Math.sin(an) + this.mouseY * Math.cos(an)
// this.AngleH += moveH;
// this.AngleV += moveV;
this.modleParent.getUp(this.up);
if (this.up.y > 0) {
this.AngleH -= this.mouseX;
}
else {
this.AngleH += this.mouseX;
}
// if (this.modleParent.right.x > 0) {
// this.AngleV -= this.mouseY ;
// } else {
// this.AngleV += this.mouseY ;
// }
this.AngleV -= this.mouseY;
};
OrbitCamera.prototype.onLateUpdate = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.Target != null) {
//this.Target.transform.localPosition = new Laya.Vector3(0, this.targetOffsetMoveY, 0);
if (this.canPan == false) {
this.camereRotate();
}
else {
this.cameraPan();
}
this.cameraZoom();
}
this.mouseX = 0;
this.mouseY = 0;
};
OrbitCamera.prototype.cameraPan = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.isDown) {
this.modle.localPositionX = this.PanX;
this.modle.localPositionY = this.PanY;
}
};
OrbitCamera.prototype.camereRotate = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.isDown) {
//this.AngleV = MathHelper.Clamp(this.AngleV, this.YMinLimit, this.YMaxLimit);
Quaternion.createFromYawPitchRoll(this.AngleH * 0.005 * this.RotateSpeed, this.AngleV * 0.005 * this.RotateSpeed, 0, this.tmpOutRotation);
this.modleParent.localRotation = this.tmpOutRotation;
}
};
OrbitCamera.prototype.cameraZoom = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.modle.localPosition.z != this.Distance) {
this.modle.localPosition = new Laya.Vector3(this.PanX, this.targetOffsetMoveY + this.PanY, this.Distance);
}
};
OrbitCamera.prototype.initEvents = function () {
Laya.stage.on(Laya.Event.MOUSE_DOWN, this, this.onMouseDownHandler);
Laya.stage.on(Laya.Event.MOUSE_UP, this, this.onMouseUpHandler);
Laya.stage.on(Laya.Event.MOUSE_WHEEL, this, this.onMouserWheelHandler);
};
OrbitCamera.prototype.onMouserWheelHandler = function (e) {
if (this.Pause || this.isTweening) {
return;
}
var distance = this.lastDistance + e.delta;
this.Distance -= (distance - this.lastDistance) * this.factor;
this.Distance = MathHelper_1.MathHelper.clamp(this.Distance, this.DistanceMin, this.DistanceMax);
this.lastDistance = distance;
this.targetOffsetMoveY = -(this.Distance - 8) / this.DistanceMin * this.Radius;
this.targetOffsetMoveY = MathHelper_1.MathHelper.clamp(this.targetOffsetMoveY, 0, this.Radius);
};
OrbitCamera.prototype.onMouseDownHandler = function (e) {
if (this.Pause || this.isTweening) {
return;
}
if (e.touches) {
var touches = e.touches;
if (touches && touches.length == 2) {
this.lastDistance = this.getDistance(touches);
Laya.stage.on(Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
}
else {
this.downX = e.stageX;
this.downY = e.stageY;
Laya.stage.on(Laya.Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
}
}
else {
this.downX = MouseManager.instance.mouseX;
this.downY = MouseManager.instance.mouseY;
Laya.stage.on(Laya.Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
}
this.isDown = true;
this.isMoved = false;
};
OrbitCamera.prototype.onMouseUpHandler = function () {
if (this.Pause || this.isTweening) {
return;
}
this.isDown = false;
this.isMoved = false;
this.mouseX = 0;
this.mouseY = 0;
Laya.stage.off(Laya.Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
};
OrbitCamera.prototype.onMouseMoveHandler = function (e) {
if (this.Pause || this.isTweening) {
return;
}
if (e.touches) {
var touches = e.touches;
if (touches && touches.length == 2) {
var distance = this.getDistance(e.touches);
var factor = 0.01;
this.Distance -= (distance - this.lastDistance) * factor;
this.Distance = MathHelper_1.MathHelper.clamp(this.Distance, this.DistanceMin, this.DistanceMax);
this.lastDistance = distance;
this.targetOffsetMoveY = -(this.Distance - 8) / this.DistanceMin * this.Radius;
this.targetOffsetMoveY = MathHelper_1.MathHelper.clamp(this.targetOffsetMoveY, 0, this.Radius);
}
else {
if (this.canPan == false) {
if (this.isDown) {
this.mouseX = e.stageX - this.downX;
this.mouseY = e.stageY - this.downY;
if (this.downX !== MouseManager.instance.mouseX || this.downY !== MouseManager.instance.mouseY) {
this.isMoved = true;
}
this.downX = e.stageX;
this.downY = e.stageY;
}
}
else {
if (this.isDown) {
this.mouseX = e.stageX - this.downX;
this.mouseY = e.stageY - this.downY;
if (this.downX !== MouseManager.instance.mouseX || this.downY !== MouseManager.instance.mouseY) {
this.isMoved = true;
}
this.downX = e.stageX;
this.downY = e.stageY;
this.PanX = -this.mouseX * 0.005 * this.PanSpeed + this.modle.localPositionX;
this.PanY = this.mouseY * 0.005 * this.PanSpeed + this.modle.localPositionY;
}
}
}
}
else {
if (this.canPan == false) {
if (this.isDown) {
this.mouseX = e.stageX - this.downX;
this.mouseY = e.stageY - this.downY;
if (this.downX !== MouseManager.instance.mouseX || this.downY !== MouseManager.instance.mouseY) {
this.isMoved = true;
}
this.downX = e.stageX;
this.downY = e.stageY;
}
}
else {
if (this.isDown) {
this.mouseX = e.stageX - this.downX;
this.mouseY = e.stageY - this.downY;
if (this.downX !== MouseManager.instance.mouseX || this.downY !== MouseManager.instance.mouseY) {
this.isMoved = true;
}
this.downX = e.stageX;
this.downY = e.stageY;
this.PanX = this.mouseX * 0.005 * this.PanSpeed + this.modle.localPositionX;
}
}
}
};
/**计算两个触摸点之间的距离*/
OrbitCamera.prototype.getDistance = function (points) {
var distance = 0;
if (points && points.length == 2) {
var dx = points[0].stageX - points[1].stageX;
var dy = points[0].stageY - points[1].stageY;
distance = Math.sqrt(dx * dx + dy * dy);
}
return distance;
};
return OrbitCamera;
}(Laya.Script3D));
exports.OrbitCamera = OrbitCamera;
},{"./MathHelper":3}],5:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var PathMove = /** @class */ (function (_super) {
__extends(PathMove, _super);
function PathMove() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.currentPointIndex = 0;
_this.forward = new Laya.Vector3(0, 0, 0);
_this.moveSpeed = 0.015;
_this.stop = true;
_this.loop = false;
return _this;
}
PathMove.prototype.onAwake = function () {
this.model = this.owner;
this.forward.z = -this.moveSpeed;
};
PathMove.prototype.SetMovePath = function (wayPoint, loop) {
this.loop = loop;
this.wayPoint = wayPoint;
this.model.transform.localPositionX = this.wayPoint[this.currentPointIndex].x;
this.model.transform.localPositionZ = this.wayPoint[this.currentPointIndex].z;
this.stop = false;
};
PathMove.prototype.onUpdate = function () {
if (this.stop) {
return;
}
this.moveForward();
this.model.transform.translate(this.forward, true);
if (this.currentPointIndex + 1 < this.wayPoint.length) {
this.model.transform.lookAt(this.wayPoint[this.currentPointIndex + 1], Laya.Vector3._Up, true);
}
};
PathMove.prototype.moveForward = function () {
this.nextPoint();
};
PathMove.prototype.nextPoint = function () {
if (this.currentPointIndex + 1 < this.wayPoint.length) {
if (Laya.Vector3.distance(this.wayPoint[this.currentPointIndex + 1], this.model.transform.position) < 0.1) {
console.log("到达某点");
this.currentPointIndex = this.currentPointIndex + 1;
}
}
else {
if (this.loop == false) {
this.stop = true;
console.log("走完");
if (this.moveComplete) {
this.moveComplete.run();
}
}
else {
this.currentPointIndex = 0;
}
}
};
return PathMove;
}(Laya.Script3D));
exports.default = PathMove;
},{}]},{},[2])
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkQ6L1Byb2dyYW0gRmlsZXMgKHg4NikvTGF5YUFpcklERV9iZXRhMi4xLjBiZXRhMS9yZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL01hdGhIZWxwZXIudHMiLCJzcmMvT3JiaXRDYW1lcmEudHMiLCJzcmMvUGF0aE1vdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQSxnR0FBZ0c7O0FBRWhHOztFQUVFO0FBQ0Y7SUFhSTtJQUFjLENBQUM7SUFDUixlQUFJLEdBQVg7UUFDSSxJQUFJLEdBQUcsR0FBYSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUVqRCxDQUFDO0lBaEJNLGdCQUFLLEdBQVEsSUFBSSxDQUFDO0lBQ2xCLGlCQUFNLEdBQVEsR0FBRyxDQUFDO0lBQ2xCLG9CQUFTLEdBQVEsV0FBVyxDQUFDO0lBQzdCLHFCQUFVLEdBQVEsTUFBTSxDQUFDO0lBQ3pCLGlCQUFNLEdBQVEsS0FBSyxDQUFDO0lBQ3BCLGlCQUFNLEdBQVEsTUFBTSxDQUFDO0lBQ3JCLHFCQUFVLEdBQUssRUFBRSxDQUFDO0lBQ2xCLG9CQUFTLEdBQVEsRUFBRSxDQUFDO0lBQ3BCLGdCQUFLLEdBQVMsS0FBSyxDQUFDO0lBQ3BCLGVBQUksR0FBUyxLQUFLLENBQUM7SUFDbkIsdUJBQVksR0FBUyxLQUFLLENBQUM7SUFDM0IsNEJBQWlCLEdBQVMsSUFBSSxDQUFDO0lBTTFDLGlCQUFDO0NBbEJELEFBa0JDLElBQUE7a0JBbEJvQixVQUFVO0FBbUIvQixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7Ozs7QUN4QmxCLDJDQUFzQztBQUN0Qyw2Q0FBNEM7QUFFNUMsdUNBQWtDO0FBQ2xDO0lBQ0M7UUFxQlEsYUFBUSxHQUFXLG9DQUFvQyxDQUFD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RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsRUFBRTtnQkFDdkcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7YUFDdkQ7U0FDSjthQUFNO1lBRUgsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztpQkFDM0I7YUFDSjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO2FBQzlCO1NBR0o7SUFFTCxDQUFDO0lBRUwsZUFBQztBQUFELENBOURBLEFBOERDLENBOURxQyxJQUFJLENBQUMsUUFBUSxHQThEbEQiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG4oZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXHJcblxyXG4vKlxyXG4qIOa4uOaIj+WIneWni+WMlumFjee9rjtcclxuKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZUNvbmZpZ3tcclxuICAgIHN0YXRpYyB3aWR0aDpudW1iZXI9MTMzNDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTc1MDtcclxuICAgIHN0YXRpYyBzY2FsZU1vZGU6c3RyaW5nPVwiZml4ZWRhdXRvXCI7XHJcbiAgICBzdGF0aWMgc2NyZWVuTW9kZTpzdHJpbmc9XCJub25lXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25WOnN0cmluZz1cInRvcFwiO1xyXG4gICAgc3RhdGljIGFsaWduSDpzdHJpbmc9XCJsZWZ0XCI7XHJcbiAgICBzdGF0aWMgc3RhcnRTY2VuZTphbnk9XCJcIjtcclxuICAgIHN0YXRpYyBzY2VuZVJvb3Q6c3RyaW5nPVwiXCI7XHJcbiAgICBzdGF0aWMgZGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBzdGF0OmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgcGh5c2ljc0RlYnVnOmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgZXhwb3J0U2NlbmVUb0pzb246Ym9vbGVhbj10cnVlO1xyXG4gICAgY29uc3RydWN0b3IoKXt9XHJcbiAgICBzdGF0aWMgaW5pdCgpe1xyXG4gICAgICAgIHZhciByZWc6IEZ1bmN0aW9uID0gTGF5YS5DbGFzc1V0aWxzLnJlZ0NsYXNzO1xyXG5cclxuICAgIH1cclxufVxyXG5HYW1lQ29uZmlnLmluaXQoKTsiLCJpbXBvcnQgR2FtZUNvbmZpZyBmcm9tIFwiLi9HYW1lQ29uZmlnXCI7XHJcbmltcG9ydCB7IE9yYml0Q2FtZXJhIH0gZnJvbSBcIi4vT3JiaXRDYW1lcmFcIjtcclxuaW1wb3J0IHsgTWF0aEhlbHBlciB9IGZyb20gXCIuL01hdGhIZWxwZXJcIjtcclxuaW1wb3J0IFBhdGhNb3ZlIGZyb20gXCIuL1BhdGhNb3ZlXCI7XHJcbmNsYXNzIE1haW4ge1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0Ly/moLnmja5JREXorr7nva7liJ3lp4vljJblvJXmk45cdFx0XHJcblx0XHRpZiAod2luZG93W1wiTGF5YTNEXCJdKSBMYXlhM0QuaW5pdChHYW1lQ29uZmlnLndpZHRoLCBHYW1lQ29uZmlnLmhlaWdodCk7XHJcblx0XHRlbHNlIExheWEuaW5pdChHYW1lQ29uZmlnLndpZHRoLCBHYW1lQ29uZmlnLmhlaWdodCwgTGF5YVtcIldlYkdMXCJdKTtcclxuXHRcdExheWFbXCJQaHlzaWNzXCJdICYmIExheWFbXCJQaHlzaWNzXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YVtcIkRlYnVnUGFuZWxcIl0gJiYgTGF5YVtcIkRlYnVnUGFuZWxcIl0uZW5hYmxlKCk7XHJcblx0XHRMYXlhLnN0YWdlLnNjYWxlTW9kZSA9IEdhbWVDb25maWcuc2NhbGVNb2RlO1xyXG5cdFx0TGF5YS5zdGFnZS5zY3JlZW5Nb2RlID0gR2FtZUNvbmZpZy5zY3JlZW5Nb2RlO1xyXG5cdFx0Ly/lhbzlrrnlvq7kv6HkuI3mlK/mjIHliqDovb1zY2VuZeWQjue8gOWcuuaZr1xyXG5cdFx0TGF5YS5VUkwuZXhwb3J0U2NlbmVUb0pzb24gPSBHYW1lQ29uZmlnLmV4cG9ydFNjZW5lVG9Kc29uO1xyXG5cclxuXHRcdC8v5omT5byA6LCD6K+V6Z2i5p2/77yI6YCa6L+HSURF6K6+572u6LCD6K+V5qih5byP77yM5oiW6ICFdXJs5Zyw5Z2A5aKe5YqgZGVidWc9dHJ1ZeWPguaVsO+8jOWdh+WPr+aJk+W8gOiwg+ivlemdouadv++8iVxyXG5cdFx0aWYgKEdhbWVDb25maWcuZGVidWcgfHwgTGF5YS5VdGlscy5nZXRRdWVyeVN0cmluZyhcImRlYnVnXCIpID09IFwidHJ1ZVwiKSBMYXlhLmVuYWJsZURlYnVnUGFuZWwoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnBoeXNpY3NEZWJ1ZyAmJiBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXSkgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0uZW5hYmxlKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5zdGF0KSBMYXlhLlN0YXQuc2hvdygpO1xyXG5cdFx0TGF5YS5hbGVydEdsb2JhbEVycm9yID0gdHJ1ZTtcclxuXHJcblx0XHQvL+a/gOa0u+i1hOa6kOeJiOacrOaOp+WItu+8jHZlcnNpb24uanNvbueUsUlEReWPkeW4g+WKn+iDveiHquWKqOeUn+aIkO+8jOWmguaenOayoeacieS5n+S4jeW9seWTjeWQjue7rea1geeoi1xyXG5cdFx0TGF5YS5SZXNvdXJjZVZlcnNpb24uZW5hYmxlKFwidmVyc2lvbi5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vblZlcnNpb25Mb2FkZWQpLCBMYXlhLlJlc291cmNlVmVyc2lvbi5GSUxFTkFNRV9WRVJTSU9OKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2NlbmVSZXM6IHN0cmluZyA9IFwicmVzLzNkL3NjZW5lL0NvbnZlbnRpb25hbC9zY2VuZS5sc1wiO1xyXG5cdHByaXZhdGUgc2NlbmU6IExheWEuU2NlbmUzRDtcclxuXHRwcml2YXRlIGNhbWVyYTogTGF5YS5DYW1lcmE7XHJcblx0b25WZXJzaW9uTG9hZGVkKCk6IHZvaWQge1xyXG5cdFx0TGF5YS5TY2VuZTNELmxvYWQodGhpcy5zY2VuZVJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLm9uTG9hZFNjZW5lQ29tcGxldGUpKVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBvbkxvYWRTY2VuZUNvbXBsZXRlKHNjZW5lKSB7XHJcblx0XHR0aGlzLnNjZW5lID0gc2NlbmU7XHJcblx0XHRMYXlhLnN0YWdlLmFkZENoaWxkKHRoaXMuc2NlbmUpO1xyXG5cdFx0bGV0IGNhbWVyYVRhcmdldCA9IG5ldyBMYXlhLlNwcml0ZTNEKCk7XHJcblx0XHRjYW1lcmFUYXJnZXQudHJhbnNmb3JtLnBvc2l0aW9uID0gbmV3IExheWEuVmVjdG9yMyg1LCAwLCAwKTtcclxuXHRcdHRoaXMuc2NlbmUuYWRkQ2hpbGQoY2FtZXJhVGFyZ2V0KTtcclxuXHRcdHRoaXMuY2FtZXJhID0gdGhpcy5zY2VuZS5nZXRDaGlsZEJ5TmFtZShcIkNhbWVyYVBpdm90XCIpLmdldENoaWxkQXQoMCkgYXMgTGF5YS5DYW1lcmE7XHJcblx0XHRsZXQgb3JiaXQgPSB0aGlzLmNhbWVyYS5hZGRDb21wb25lbnQoT3JiaXRDYW1lcmEpIGFzIE9yYml0Q2FtZXJhO1xyXG5cdFx0b3JiaXQuVGFyZ2V0ID0gY2FtZXJhVGFyZ2V0O1xyXG5cdFx0b3JiaXQuY2FuUGFuID0gdHJ1ZTtcclxuXHRcdG9yYml0LlJhZGl1cyA9IDM1O1xyXG5cdFx0b3JiaXQuc2V0Um90YXRpb24oLTE1MCwgLTIxMCk7XHJcblxyXG5cdFx0bGV0IHBsYXllciA9IHRoaXMuc2NlbmUuZ2V0Q2hpbGRCeU5hbWUoXCJQbGF5ZXJcIikgYXMgTGF5YS5TcHJpdGUzRDtcclxuXHRcdGxldCBwbGF5ZXJBbmltID0gcGxheWVyLmdldENoaWxkQXQoMCkuZ2V0Q29tcG9uZW50KExheWEuQW5pbWF0b3IpIGFzIExheWEuQW5pbWF0b3I7XHJcblx0XHRsZXQgcGF0aE1vdmUgPSBwbGF5ZXIuYWRkQ29tcG9uZW50KFBhdGhNb3ZlKSBhcyBQYXRoTW92ZTtcclxuXHRcdHBhdGhNb3ZlLm1vdmVDb21wbGV0ZSA9IExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgKCkgPT4ge1xyXG5cdFx0XHRwbGF5ZXJBbmltLmNyb3NzRmFkZShcIklkbGVcIiwgMC4xLCAwLCAwKTtcclxuXHRcdH0pO1xyXG5cdFx0bGV0IHdheVBvaW50cyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNjZW5lLmdldENoaWxkQnlOYW1lKFwiUGxheWVyV2F5UG9pbnRcIikuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IHBvaW50ID0gdGhpcy5zY2VuZS5nZXRDaGlsZEJ5TmFtZShcIlBsYXllcldheVBvaW50XCIpLl9jaGlsZHJlbltpXSBhcyBMYXlhLlNwcml0ZTNEO1xyXG5cdFx0XHR3YXlQb2ludHMucHVzaChwb2ludC50cmFuc2Zvcm0ucG9zaXRpb24pO1xyXG5cdFx0fVxyXG5cdFx0TGF5YS50aW1lci5vbmNlKDMwMDAsIHRoaXMsICgpID0+IHtcclxuXHRcdFx0cGxheWVyQW5pbS5jcm9zc0ZhZGUoXCJXYWxrXCIsIDAuMSwgMCwgMCk7XHJcblx0XHRcdHBhdGhNb3ZlLlNldE1vdmVQYXRoKHdheVBvaW50cyx0cnVlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcbn1cclxuLy/mv4DmtLvlkK/liqjnsbtcclxubmV3IE1haW4oKTtcclxuIiwiZXhwb3J0IGNsYXNzIE1hdGhIZWxwZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWcyUmFkID0gMC4wMTc0NTMyOVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIERlZzJSYWQ6IG51bWJlciA9IDAuMDE3NDUzMjk7XHJcbiAgICAvKipcclxuICAgICAqIFJhZDJEZWcgPSA1Ny4yOTU3OFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFJhZDJEZWc6IG51bWJlciA9IDU3LjI5NTc4O1xyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5bkuKTlkJHph4/op5LluqZcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBWZWN0b3IzQW5nbGUodjE6IExheWEuVmVjdG9yMywgdjI6IExheWEuVmVjdG9yMyk6IG51bWJlciB7XHJcbiAgICAgICAgTGF5YS5WZWN0b3IzLm5vcm1hbGl6ZSh2MiwgdjIpO1xyXG4gICAgICAgIHZhciBkb3QgPSBMYXlhLlZlY3RvcjMuZG90KHYxLCB2Mik7XHJcbiAgICAgICAgdmFyIGFuZ2xlID0gTWF0aC5hY29zKGRvdCkgKiA1Ny4yOTU3ODtcclxuICAgICAgICByZXR1cm4gYW5nbGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDnkIPooajpnaLpmo/mnLpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBvblVuaXRTcGhlcmUocmFkaXVzOiBudW1iZXIpOiBMYXlhLlZlY3RvcjMge1xyXG4gICAgICAgIHZhciBwMTogbnVtYmVyID0gdGhpcy5yYW5kb21GbG9hdCgtcmFkaXVzLCByYWRpdXMpO1xyXG4gICAgICAgIHZhciBwMjogbnVtYmVyID0gdGhpcy5yYW5kb21GbG9hdCgwLCByYWRpdXMpO1xyXG4gICAgICAgIHZhciBwMzogbnVtYmVyID0gdGhpcy5yYW5kb21GbG9hdCgtcmFkaXVzLCByYWRpdXMpO1xyXG4gICAgICAgIHZhciB2MzogTGF5YS5WZWN0b3IzID0gbmV3IExheWEuVmVjdG9yMyhwMSwgcDIsIHAzKTtcclxuICAgICAgICAvL0xheWEuVmVjdG9yMy5ub3JtYWxpemUodjMsdjMpO1xyXG4gICAgICAgIExheWEuVmVjdG9yMy5zY2FsZSh2MywgcmFkaXVzLCB2Myk7XHJcbiAgICAgICAgcmV0dXJuIHYzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZG9tRmxvYXQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOmaj+acuuiMg+WbtOiOt+WPluaVtOaVsOaVsOWAvCBtaW48PSB2YWx1ZSA8PW1heCBcclxuICAgICAqICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHJhbmRvbShtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsYW1wQW5nbGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjbGFtcEFuZ2xlKGFuZ2xlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGFuZ2xlIDwgbWluKSB7XHJcbiAgICAgICAgICAgIGFuZ2xlID0gbWluO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbmdsZSA+IG1heCkge1xyXG4gICAgICAgICAgICBhbmdsZSA9IG1heDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFuZ2xlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xhbXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjbGFtcCh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IG1pbikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBtYXgpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBtYXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIG5ld0d1aWQoKSB7XHJcbiAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBudW1iZXIyQmlnTnVtYmVyKG46IG51bWJlciwgbWF4TGVuOiBudW1iZXIgPSA0KTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgb3V0TnVtOiBzdHJpbmc7XHJcbiAgICAgICAgbGV0IGsgPSAxMDAwO1xyXG4gICAgICAgIGxldCBiYXNlOiBudW1iZXIgPSBrO1xyXG4gICAgICAgIGxldCBwb3cgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHBvdyA9IDA7IDsgcG93KyspIHtcclxuICAgICAgICAgICAgaWYgKG4gPCBiYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBiYXNlICo9IGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1bml0ID0gXCJcIjtcclxuICAgICAgICBpZiAocG93IDwgNSkge1xyXG4gICAgICAgICAgICB1bml0ID0gcG93ID09IDAgPyBcIlwiIDogKHBvdyA9PSAxID8gXCJrXCIgOiAocG93ID09IDIgPyBcIm1cIiA6IChwb3cgPT0gMyA/IFwiYlwiIDogXCJ0XCIpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbF9hID0gOTc7XHJcbiAgICAgICAgICAgIGxldCBsX0EgPSA2NTtcclxuICAgICAgICAgICAgbGV0IGRpdiA9IE1hdGguZmxvb3IoKHBvdyAtIDUpIC8gMjYpO1xyXG4gICAgICAgICAgICBsZXQgbW9kID0gKHBvdyAtIDUpICUgMjY7XHJcbiAgICAgICAgICAgIHVuaXQgPSBkaXYgPT0gMCA/IFN0cmluZy5mcm9tQ2hhckNvZGUobF9hICsgbW9kLCBsX2EgKyBtb2QpIDogKGRpdiA9PSAxID8gU3RyaW5nLmZyb21DaGFyQ29kZShsX0EgKyBtb2QsIGxfYSArIG1vZCkgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGxfQSArIG1vZCwgbF9BICsgbW9kKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dE51bSA9IFN0cmluZyhuIC8gKGJhc2UgKiAwLjAwMSkpO1xyXG4gICAgICAgIHJldHVybiBcIi5cIiA9PSAob3V0TnVtID0gb3V0TnVtLnN1YnN0cigwLCBtYXhMZW4pKS5jaGFyQXQob3V0TnVtLmxlbmd0aCAtIDEpID8gb3V0TnVtLnJlcGxhY2UoXCIuXCIsIHVuaXQpIDogb3V0TnVtICsgdW5pdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFN5c3RlbVRpbWUoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgY3VyRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdmFyIHllYXI6IG51bWJlciA9IGN1ckRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGN1ckRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgICAgdmFyIGRhdGU6IG51bWJlciA9IGN1ckRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGN1ckRhdGUuZ2V0RGF5KCk7XHJcbiAgICAgICAgdmFyIGhvdXI6IG51bWJlciA9IGN1ckRhdGUuZ2V0SG91cnMoKTtcclxuICAgICAgICB2YXIgbWludXRlOiBudW1iZXIgPSBjdXJEYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgICB2YXIgc2Vjb25kOiBudW1iZXIgPSBjdXJEYXRlLmdldFNlY29uZHMoKTtcclxuICAgICAgICB2YXIgc3lzdGVtVGltZSA9IHllYXIgKyBcIuW5tFwiICsgbW9udGggKyBcIuaciFwiICsgZGF0ZSArIFwi5pelXCIgKyBob3VyICsgXCLml7ZcIiArIG1pbnV0ZSArIFwi5YiGXCIgKyBzZWNvbmQgKyBcIuenklwiO1xyXG4gICAgICAgIHJldHVybiBzeXN0ZW1UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8q5a+55q+U54mI5pysKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgQ29tcGFyZVZlcnNpb24odjE6IHN0cmluZywgdjI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgdmFyIGFycjEgPSB2MS5zcGxpdCgnLicpO1xyXG4gICAgICAgIHZhciBhcnIyID0gdjIuc3BsaXQoJy4nKTtcclxuICAgICAgICB2YXIgbGVuID0gTWF0aC5tYXgoYXJyMS5sZW5ndGgsIGFycjIubGVuZ3RoKTtcclxuICAgICAgICB3aGlsZSAoYXJyMS5sZW5ndGggPCBsZW4pIHtcclxuICAgICAgICAgICAgYXJyMS5wdXNoKCcwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChhcnIyLmxlbmd0aCA8IGxlbikge1xyXG4gICAgICAgICAgICBhcnIyLnB1c2goJzAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbnVtMSA9IHBhcnNlSW50KGFycjFbaV0pO1xyXG4gICAgICAgICAgICB2YXIgbnVtMiA9IHBhcnNlSW50KGFycjJbaV0pO1xyXG4gICAgICAgICAgICBpZiAobnVtMSA+IG51bTIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bTEgPCBudW0yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQ291bnREb3duKHRpbWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IG1pbnV0ZSA9IE1hdGguZmxvb3IodGltZSAvIDYwKTtcclxuICAgICAgICBsZXQgc2Vjb25kID0gdGltZSAlIDYwO1xyXG5cclxuICAgICAgICByZXR1cm4gKG1pbnV0ZSA8IDEwID8gXCIwXCIgKyBtaW51dGUgOiBtaW51dGUpICsgXCI6XCIgKyAoc2Vjb25kIDwgMTAgPyBcIjBcIiArIHNlY29uZCA6IHNlY29uZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjb3VudERheShkMTogc3RyaW5nLCBkMjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgczEgPSBuZXcgRGF0ZShkMSk7XHJcbiAgICAgICAgbGV0IHMyID0gbmV3IERhdGUoZDIpO1xyXG4gICAgICAgIHZhciBkYXlzID0gczEuZ2V0VGltZSgpIC0gczIuZ2V0VGltZSgpO1xyXG4gICAgICAgIHZhciB0aW1lID0gZGF5cyAvICgxMDAwICogNjAgKiA2MCAqIDI0KTtcclxuICAgICAgICByZXR1cm4gdGltZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFRpbWUoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgY3VyRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgbGV0IHllYXI6IG51bWJlciA9IGN1ckRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICBsZXQgbW9udGg6IG51bWJlciA9IGN1ckRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgICAgbGV0IGRhdGU6IG51bWJlciA9IGN1ckRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIGlmIChtb250aCA8IDEwKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc3lzdGVtVGltZSA9IHllYXIgKyBcIi9cIiArIChtb250aCA8IDEwID8gXCIwXCIgKyBtb250aCA6IG1vbnRoKSArIFwiL1wiICsgKGRhdGUgPCAxMCA/IFwiMFwiICsgZGF0ZSA6IGRhdGUpO1xyXG4gICAgICAgIHJldHVybiBzeXN0ZW1UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcHJlZml4SW50ZWdlcihudW0sIGxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAoQXJyYXkobGVuZ3RoKS5qb2luKCcwJykgKyBudW0pLnNsaWNlKC1sZW5ndGgpO1xyXG4gICAgfVxyXG59IiwiLypcclxuKiBPcmJpdENhbWVyYSAzNjDop4Llr5/niankvZPnm7jmnLpcclxuKiB1bml0eemcgOimgeWPluW3p+WkhOeQhlxyXG4qL1xyXG5cclxuaW1wb3J0IE1vdXNlTWFuYWdlciA9IGxheWEuZXZlbnRzLk1vdXNlTWFuYWdlcjtcclxuaW1wb3J0IFF1YXRlcm5pb24gPSBsYXlhLmQzLm1hdGguUXVhdGVybmlvbjtcclxuaW1wb3J0IEV2ZW50ID0gTGF5YS5FdmVudDtcclxuaW1wb3J0IHsgTWF0aEhlbHBlciB9IGZyb20gXCIuL01hdGhIZWxwZXJcIjtcclxuZXhwb3J0IGNsYXNzIE9yYml0Q2FtZXJhIGV4dGVuZHMgTGF5YS5TY3JpcHQzRCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFjdG9yOiBudW1iZXIgPSAwLjE7XHJcbiAgICBwdWJsaWMgY2FuUGFuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgVGFyZ2V0OiBMYXlhLlNwcml0ZTNEO1xyXG4gICAgcHVibGljIFJvdGF0ZVNwZWVkOiBudW1iZXIgPSAwLjU7XHJcbiAgICBwdWJsaWMgUGFuU3BlZWQ6bnVtYmVyID0gMTA7XHJcbiAgICBwdWJsaWMgU21vb3RoVGltZTogbnVtYmVyID0gMTtcclxuICAgIHB1YmxpYyBZTWluTGltaXQ6IG51bWJlciA9IC0xODA7XHJcbiAgICBwdWJsaWMgWU1heExpbWl0OiBudW1iZXIgPSAxODA7XHJcbiAgICBwdWJsaWMgRGlzdGFuY2U6IG51bWJlciA9IDM1O1xyXG4gICAgcHVibGljIERpc3RhbmNlTWluOiBudW1iZXIgPSAxNTtcclxuICAgIHB1YmxpYyBEaXN0YW5jZU1heDogbnVtYmVyID0gMzU7XHJcbiAgICBwdWJsaWMgUGF1c2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc1R3ZWVuaW5nID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgUmFkaXVzOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHByaXZhdGUgbW9kbGU6IExheWEuVHJhbnNmb3JtM0Q7XHJcbiAgICBwcml2YXRlIG1vZGxlUGFyZW50OiBMYXlhLlRyYW5zZm9ybTNEO1xyXG5cclxuICAgIHByaXZhdGUgQW5nbGVIOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBBbmdsZVY6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBQYW5YOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBQYW5ZOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHByaXZhdGUgZG93blg6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGRvd25ZOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBpc0Rvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgbW91c2VYOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBtb3VzZVk6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGlzTW92ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdG1wT3V0Um90YXRpb246IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigwLCAwLCAwLCAwKTtcclxuICAgIHByaXZhdGUgbGFzdERpc3RhbmNlOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSB0YXJnZXRPZmZzZXRNb3ZlWTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHRoaXMubW9kbGUgPSAodGhpcy5vd25lciBhcyBMYXlhLlNwcml0ZTNEKS50cmFuc2Zvcm07XHJcbiAgICAgICAgdGhpcy5tb2RsZVBhcmVudCA9IHRoaXMubW9kbGUuX3BhcmVudDtcclxuICAgICAgICB2YXIgYW5nbGVzID0gdGhpcy5tb2RsZVBhcmVudC5sb2NhbFJvdGF0aW9uRXVsZXI7XHJcbiAgICAgICAgdGhpcy5BbmdsZUggPSBhbmdsZXMueTtcclxuICAgICAgICB0aGlzLkFuZ2xlViA9IGFuZ2xlcy54O1xyXG4gICAgICAgIHRoaXMuaW5pdEV2ZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBMYXlhLnN0YWdlLm9mZihMYXlhLkV2ZW50Lk1PVVNFX0RPV04sIHRoaXMsIHRoaXMub25Nb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICBMYXlhLnN0YWdlLm9mZihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLm9uTW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIExheWEuc3RhZ2Uub2ZmKExheWEuRXZlbnQuTU9VU0VfV0hFRUwsIHRoaXMsIHRoaXMub25Nb3VzZXJXaGVlbEhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRSb3RhdGlvbigpOiBMYXlhLlF1YXRlcm5pb24ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFJvdGF0aW9uKGg6IG51bWJlciwgdjogbnVtYmVyLCB1c2VUd2VlbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHQgPSBuZXcgTGF5YS5RdWF0ZXJuaW9uKHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbi54LCB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24ueSwgdGhpcy5tb2RsZVBhcmVudC5sb2NhbFJvdGF0aW9uLnosIHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbi53KTtcclxuICAgICAgICB0aGlzLkFuZ2xlSCA9IGg7XHJcbiAgICAgICAgdGhpcy5BbmdsZVYgPSB2O1xyXG4gICAgICAgIFF1YXRlcm5pb24uY3JlYXRlRnJvbVlhd1BpdGNoUm9sbCh0aGlzLkFuZ2xlSCAqIDAuMDA1ICogdGhpcy5Sb3RhdGVTcGVlZCwgdGhpcy5BbmdsZVYgKiAwLjAwNSAqIHRoaXMuUm90YXRlU3BlZWQsIDAsIHRoaXMudG1wT3V0Um90YXRpb24pO1xyXG4gICAgICAgIGlmICh1c2VUd2Vlbikge1xyXG4gICAgICAgICAgICB0aGlzLmlzVHdlZW5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBmYWlyeWd1aS50d2Vlbi5HVHdlZW4udG80KHQueCwgdC55LCB0LnosIHQudywgdGhpcy50bXBPdXRSb3RhdGlvbi54LCB0aGlzLnRtcE91dFJvdGF0aW9uLnksIHRoaXMudG1wT3V0Um90YXRpb24ueiwgdGhpcy50bXBPdXRSb3RhdGlvbi53LCAxKVxyXG4gICAgICAgICAgICAgICAgLm9uVXBkYXRlKHRoaXMub25Ud2VlblJvdGF0aW9uVXBkYXRlLCB0aGlzKVxyXG4gICAgICAgICAgICAgICAgLm9uQ29tcGxldGUodGhpcy5vblR3ZWVuUm90YXRpb25Db21wZWx0ZSwgdGhpcylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24gPSB0aGlzLnRtcE91dFJvdGF0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgdHdlZW5Sb3RhdGlvbiA9IG5ldyBMYXlhLlF1YXRlcm5pb24oMCwgMCwgMCwgMCk7XHJcbiAgICBwcml2YXRlIG9uVHdlZW5Sb3RhdGlvblVwZGF0ZSh0d2VlbjogZmFpcnlndWkudHdlZW4uR1R3ZWVuZXIpIHtcclxuICAgICAgICB0aGlzLnRtcE91dFJvdGF0aW9uID0gbmV3IExheWEuUXVhdGVybmlvbih0d2Vlbi52YWx1ZS54LCB0d2Vlbi52YWx1ZS55LCB0d2Vlbi52YWx1ZS56LCB0d2Vlbi52YWx1ZS53KTtcclxuICAgICAgICB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24gPSB0aGlzLnRtcE91dFJvdGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Ud2VlblJvdGF0aW9uQ29tcGVsdGUoKSB7XHJcbiAgICAgICAgdGhpcy5pc1R3ZWVuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5QYXVzZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHVwOiBMYXlhLlZlY3RvcjMgPSBuZXcgTGF5YS5WZWN0b3IzKCk7XHJcbiAgICBvblVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbGV0IGFuID0gMy4xNCAvIDI7XHJcbiAgICAgICAgLy8gbGV0IG1vdmVIID0gdGhpcy5tb3VzZVggKiBNYXRoLmNvcyhhbikgKyB0aGlzLm1vdXNlWSAqIE1hdGguc2luKGFuKTtcclxuICAgICAgICAvLyBsZXQgbW92ZVYgPSB0aGlzLm1vdXNlWCAqIE1hdGguc2luKGFuKSArIHRoaXMubW91c2VZICogTWF0aC5jb3MoYW4pXHJcbiAgICAgICAgLy8gdGhpcy5BbmdsZUggKz0gbW92ZUg7XHJcbiAgICAgICAgLy8gdGhpcy5BbmdsZVYgKz0gbW92ZVY7XHJcblxyXG4gICAgICAgIHRoaXMubW9kbGVQYXJlbnQuZ2V0VXAodGhpcy51cCk7XHJcbiAgICAgICAgaWYgKHRoaXMudXAueSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5BbmdsZUggLT0gdGhpcy5tb3VzZVg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5BbmdsZUggKz0gdGhpcy5tb3VzZVg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmICh0aGlzLm1vZGxlUGFyZW50LnJpZ2h0LnggPiAwKSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuQW5nbGVWIC09IHRoaXMubW91c2VZIDtcclxuICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICB0aGlzLkFuZ2xlViArPSB0aGlzLm1vdXNlWSA7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMuQW5nbGVWIC09IHRoaXMubW91c2VZO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG9uTGF0ZVVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgaWYgKHRoaXMuVGFyZ2V0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy90aGlzLlRhcmdldC50cmFuc2Zvcm0ubG9jYWxQb3NpdGlvbiA9IG5ldyBMYXlhLlZlY3RvcjMoMCwgdGhpcy50YXJnZXRPZmZzZXRNb3ZlWSwgMCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhblBhbiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmVSb3RhdGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhUGFuKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhWm9vbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vdXNlWCA9IDA7XHJcbiAgICAgICAgdGhpcy5tb3VzZVkgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FtZXJhUGFuKCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb25YID0gdGhpcy5QYW5YO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb25ZID0gdGhpcy5QYW5ZO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbWVyZVJvdGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgICAgICAgLy90aGlzLkFuZ2xlViA9IE1hdGhIZWxwZXIuQ2xhbXAodGhpcy5BbmdsZVYsIHRoaXMuWU1pbkxpbWl0LCB0aGlzLllNYXhMaW1pdCk7XHJcbiAgICAgICAgICAgIFF1YXRlcm5pb24uY3JlYXRlRnJvbVlhd1BpdGNoUm9sbCh0aGlzLkFuZ2xlSCAqIDAuMDA1ICogdGhpcy5Sb3RhdGVTcGVlZCwgdGhpcy5BbmdsZVYgKiAwLjAwNSAqIHRoaXMuUm90YXRlU3BlZWQsIDAsIHRoaXMudG1wT3V0Um90YXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24gPSB0aGlzLnRtcE91dFJvdGF0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYW1lcmFab29tKCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb24ueiAhPSB0aGlzLkRpc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kbGUubG9jYWxQb3NpdGlvbiA9IG5ldyBMYXlhLlZlY3RvcjModGhpcy5QYW5YLCB0aGlzLnRhcmdldE9mZnNldE1vdmVZICsgdGhpcy5QYW5ZLCB0aGlzLkRpc3RhbmNlICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEV2ZW50cygpIHtcclxuICAgICAgICBMYXlhLnN0YWdlLm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5vbk1vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIExheWEuc3RhZ2Uub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5vbk1vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICBMYXlhLnN0YWdlLm9uKExheWEuRXZlbnQuTU9VU0VfV0hFRUwsIHRoaXMsIHRoaXMub25Nb3VzZXJXaGVlbEhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBvbk1vdXNlcldoZWVsSGFuZGxlcihlOiBFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGlzdGFuY2U6IG51bWJlciA9IHRoaXMubGFzdERpc3RhbmNlICsgZS5kZWx0YTtcclxuICAgICAgICB0aGlzLkRpc3RhbmNlIC09IChkaXN0YW5jZSAtIHRoaXMubGFzdERpc3RhbmNlKSAqIHRoaXMuZmFjdG9yO1xyXG4gICAgICAgIHRoaXMuRGlzdGFuY2UgPSBNYXRoSGVscGVyLmNsYW1wKHRoaXMuRGlzdGFuY2UsIHRoaXMuRGlzdGFuY2VNaW4sIHRoaXMuRGlzdGFuY2VNYXgpO1xyXG4gICAgICAgIHRoaXMubGFzdERpc3RhbmNlID0gZGlzdGFuY2U7XHJcbiAgICAgICAgdGhpcy50YXJnZXRPZmZzZXRNb3ZlWSA9IC0odGhpcy5EaXN0YW5jZSAtIDgpIC8gdGhpcy5EaXN0YW5jZU1pbiAqIHRoaXMuUmFkaXVzO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVkgPSBNYXRoSGVscGVyLmNsYW1wKHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVksIDAsIHRoaXMuUmFkaXVzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk1vdXNlRG93bkhhbmRsZXIoZTogRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZS50b3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHZhciB0b3VjaGVzOiBBcnJheTxhbnk+ID0gZS50b3VjaGVzO1xyXG4gICAgICAgICAgICBpZiAodG91Y2hlcyAmJiB0b3VjaGVzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3REaXN0YW5jZSA9IHRoaXMuZ2V0RGlzdGFuY2UodG91Y2hlcyk7XHJcbiAgICAgICAgICAgICAgICBMYXlhLnN0YWdlLm9uKEV2ZW50Lk1PVVNFX01PVkUsIHRoaXMsIHRoaXMub25Nb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG93blggPSBlLnN0YWdlWDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG93blkgPSBlLnN0YWdlWTtcclxuICAgICAgICAgICAgICAgIExheWEuc3RhZ2Uub24oTGF5YS5FdmVudC5NT1VTRV9NT1ZFLCB0aGlzLCB0aGlzLm9uTW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRvd25YID0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWDtcclxuICAgICAgICAgICAgdGhpcy5kb3duWSA9IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVk7XHJcbiAgICAgICAgICAgIExheWEuc3RhZ2Uub24oTGF5YS5FdmVudC5NT1VTRV9NT1ZFLCB0aGlzLCB0aGlzLm9uTW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc01vdmVkID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VVcEhhbmRsZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuUGF1c2UgfHwgdGhpcy5pc1R3ZWVuaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTW92ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vdXNlWCA9IDA7XHJcbiAgICAgICAgdGhpcy5tb3VzZVkgPSAwO1xyXG4gICAgICAgIExheWEuc3RhZ2Uub2ZmKExheWEuRXZlbnQuTU9VU0VfTU9WRSwgdGhpcywgdGhpcy5vbk1vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VNb3ZlSGFuZGxlcihlOiBFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlLnRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoZXM6IEFycmF5PGFueT4gPSBlLnRvdWNoZXM7XHJcbiAgICAgICAgICAgIGlmICh0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZTogbnVtYmVyID0gdGhpcy5nZXREaXN0YW5jZShlLnRvdWNoZXMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFjdG9yOiBudW1iZXIgPSAwLjAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5EaXN0YW5jZSAtPSAoZGlzdGFuY2UgLSB0aGlzLmxhc3REaXN0YW5jZSkgKiBmYWN0b3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkRpc3RhbmNlID0gTWF0aEhlbHBlci5jbGFtcCh0aGlzLkRpc3RhbmNlLCB0aGlzLkRpc3RhbmNlTWluLCB0aGlzLkRpc3RhbmNlTWF4KTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdERpc3RhbmNlID0gZGlzdGFuY2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE9mZnNldE1vdmVZID0gLSh0aGlzLkRpc3RhbmNlIC0gOCkgLyB0aGlzLkRpc3RhbmNlTWluICogdGhpcy5SYWRpdXM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE9mZnNldE1vdmVZID0gTWF0aEhlbHBlci5jbGFtcCh0aGlzLnRhcmdldE9mZnNldE1vdmVZLCAwLCB0aGlzLlJhZGl1cyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNhblBhbiA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW91c2VYID0gZS5zdGFnZVggLSB0aGlzLmRvd25YO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdXNlWSA9IGUuc3RhZ2VZIC0gdGhpcy5kb3duWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZG93blggIT09IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVggfHwgdGhpcy5kb3duWSAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25YID0gZS5zdGFnZVg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blkgPSBlLnN0YWdlWTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3VzZVggPSBlLnN0YWdlWCAtIHRoaXMuZG93blg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW91c2VZID0gZS5zdGFnZVkgLSB0aGlzLmRvd25ZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb3duWCAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCB8fCB0aGlzLmRvd25ZICE9PSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blggPSBlLnN0YWdlWDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3duWSA9IGUuc3RhZ2VZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlBhblggPSAtdGhpcy5tb3VzZVggKiAwLjAwNSAqIHRoaXMuUGFuU3BlZWQgKyB0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb25YIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5QYW5ZID0gdGhpcy5tb3VzZVkgKiAwLjAwNSAqIHRoaXMuUGFuU3BlZWQgKyB0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb25ZIDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZih0aGlzLmNhblBhbiA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdXNlWCA9IGUuc3RhZ2VYIC0gdGhpcy5kb3duWDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdXNlWSA9IGUuc3RhZ2VZIC0gdGhpcy5kb3duWTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb3duWCAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCB8fCB0aGlzLmRvd25ZICE9PSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blggPSBlLnN0YWdlWDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25ZID0gZS5zdGFnZVk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3VzZVggPSBlLnN0YWdlWCAtIHRoaXMuZG93blg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3VzZVkgPSBlLnN0YWdlWSAtIHRoaXMuZG93blk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZG93blggIT09IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVggfHwgdGhpcy5kb3duWSAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25YID0gZS5zdGFnZVg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3duWSA9IGUuc3RhZ2VZO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUGFuWCA9IHRoaXMubW91c2VYICogMC4wMDUgKiB0aGlzLlBhblNwZWVkICsgdGhpcy5tb2RsZS5sb2NhbFBvc2l0aW9uWCA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKirorqHnrpfkuKTkuKrop6bmkbjngrnkuYvpl7TnmoTot53nprsqL1xyXG4gICAgcHJpdmF0ZSBnZXREaXN0YW5jZShwb2ludHM6IEFycmF5PGFueT4pOiBudW1iZXIge1xyXG4gICAgICAgIHZhciBkaXN0YW5jZTogbnVtYmVyID0gMDtcclxuICAgICAgICBpZiAocG9pbnRzICYmIHBvaW50cy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICB2YXIgZHg6IG51bWJlciA9IHBvaW50c1swXS5zdGFnZVggLSBwb2ludHNbMV0uc3RhZ2VYO1xyXG4gICAgICAgICAgICB2YXIgZHk6IG51bWJlciA9IHBvaW50c1swXS5zdGFnZVkgLSBwb2ludHNbMV0uc3RhZ2VZO1xyXG4gICAgICAgICAgICBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkaXN0YW5jZTtcclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhdGhNb3ZlIGV4dGVuZHMgTGF5YS5TY3JpcHQzRCB7XHJcbiAgICBwdWJsaWMgbW9kZWw6IExheWEuU3ByaXRlM0Q7XHJcbiAgICBwcml2YXRlIHdheVBvaW50OiBBcnJheTxMYXlhLlZlY3RvcjM+O1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50UG9pbnRJbmRleDogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgZm9yd2FyZDogTGF5YS5WZWN0b3IzID0gbmV3IExheWEuVmVjdG9yMygwLCAwLCAwKTtcclxuICAgIHB1YmxpYyBtb3ZlU3BlZWQ6IG51bWJlciA9IDAuMDE1O1xyXG4gICAgcHVibGljIHN0b3A6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIG1vdmVDb21wbGV0ZTogTGF5YS5IYW5kbGVyO1xyXG4gICAgcHVibGljIGxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIG9uQXdha2UoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMub3duZXIgYXMgTGF5YS5TcHJpdGUzRDtcclxuICAgICAgICB0aGlzLmZvcndhcmQueiA9IC10aGlzLm1vdmVTcGVlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgU2V0TW92ZVBhdGgod2F5UG9pbnQ6IEFycmF5PExheWEuVmVjdG9yMz4sIGxvb3A6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmxvb3AgPSBsb29wO1xyXG4gICAgICAgIHRoaXMud2F5UG9pbnQgPSB3YXlQb2ludDtcclxuICAgICAgICB0aGlzLm1vZGVsLnRyYW5zZm9ybS5sb2NhbFBvc2l0aW9uWCA9IHRoaXMud2F5UG9pbnRbdGhpcy5jdXJyZW50UG9pbnRJbmRleF0ueDtcclxuICAgICAgICB0aGlzLm1vZGVsLnRyYW5zZm9ybS5sb2NhbFBvc2l0aW9uWiA9IHRoaXMud2F5UG9pbnRbdGhpcy5jdXJyZW50UG9pbnRJbmRleF0uejtcclxuICAgICAgICB0aGlzLnN0b3AgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvblVwZGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb3ZlRm9yd2FyZCgpO1xyXG4gICAgICAgIHRoaXMubW9kZWwudHJhbnNmb3JtLnRyYW5zbGF0ZSh0aGlzLmZvcndhcmQsIHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQb2ludEluZGV4ICsgMSA8IHRoaXMud2F5UG9pbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwudHJhbnNmb3JtLmxvb2tBdCh0aGlzLndheVBvaW50W3RoaXMuY3VycmVudFBvaW50SW5kZXggKyAxXSwgTGF5YS5WZWN0b3IzLl9VcCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb3ZlRm9yd2FyZCgpIHtcclxuICAgICAgICB0aGlzLm5leHRQb2ludCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV4dFBvaW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQb2ludEluZGV4ICsgMSA8IHRoaXMud2F5UG9pbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChMYXlhLlZlY3RvcjMuZGlzdGFuY2UodGhpcy53YXlQb2ludFt0aGlzLmN1cnJlbnRQb2ludEluZGV4ICsgMV0sIHRoaXMubW9kZWwudHJhbnNmb3JtLnBvc2l0aW9uKSA8IDAuMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLliLDovr7mn5DngrlcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQb2ludEluZGV4ID0gdGhpcy5jdXJyZW50UG9pbnRJbmRleCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubG9vcCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6LWw5a6MXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW92ZUNvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ29tcGxldGUucnVuKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQb2ludEluZGV4ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iXX0=
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment