123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626 |
- 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 = 720;
- GameConfig.height = 1280;
- GameConfig.scaleMode = "fixedwidth";
- GameConfig.screenMode = "none";
- GameConfig.alignV = "middle";
- GameConfig.alignH = "center";
- GameConfig.startScene = "game_ui.scene";
- 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 ViewManager_1 = require("./game_logic/ViewManager");
- var WXSdk_1 = require("./game_module/WXSdk");
- var FYHD_Sdk_1 = require("./game_module/FYHD_Sdk");
- var GameSceneController_1 = require("./game_logic/GameSceneController");
- var Main = /** @class */ (function () {
- function Main() {
- var _this = this;
- //根据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;
- Main.nowratio = Laya.stage.width / Laya.stage.height;
- Main.IsWx = Laya.Browser.onWeiXin;
- if (Main.IsWx) {
- WXSdk_1.WXSdk.Instance.init(function (shareTicket, shareid, scene, appid) {
- _this.onShowHandler(shareTicket, shareid, scene, appid);
- });
- FYHD_Sdk_1.FYHD_Sdk.InitSdk();
- }
- //激活资源版本控制,version.json由IDE发布功能自动生成,如果没有也不影响后续流程
- Laya.ResourceVersion.enable("version.json", Laya.Handler.create(this, this.onVersionLoaded), Laya.ResourceVersion.FILENAME_VERSION);
- this.IsNeedUpdate();
- }
- Main.prototype.IsNeedUpdate = function () {
- if (!Main.IsWx)
- return;
- var updateManager = Laya.Browser.window.wx.getUpdateManager();
- updateManager.onCheckForUpdate(function (res) {
- console.log("最新版本:" + res.hasUpdate);
- });
- updateManager.onUpdateReady(function () {
- Laya.Browser.window.wx.showModal({
- showCancel: false,
- title: '更新提示',
- content: '新版本已经准备好,是否重启应用?',
- success: function (res) {
- updateManager.applyUpdate();
- },
- fail: function (res) {
- updateManager.applyUpdate();
- }
- });
- });
- };
- Main.prototype.onShowHandler = function (shareTicket, shareId, scene, appid) {
- console.log("[LOG]: 分享进入: shareTicket:", shareTicket, ", openId=", shareId, ", scene=", scene);
- // if (!Main.mSharePeopleScene) {
- // Main.mSharePeopleScene = scene;
- // }
- // if (!Main.appid) {
- // Main.appid = appid;
- // }
- if (scene != null && scene != "") {
- WXSdk_1.WXSdk.Instance.ShareScene = scene;
- }
- if (shareId != null && shareId != "") {
- console.log("设置分享id" + shareId);
- WXSdk_1.WXSdk.Instance.setShareId(shareId);
- }
- };
- Main.prototype.onVersionLoaded = function () {
- //激活大小图映射,加载小图的时候,如果发现小图在大图合集里面,则优先加载大图合集,而不是小图
- Laya.AtlasInfoManager.enable("fileconfig.json", Laya.Handler.create(this, this.onConfigLoaded));
- Laya.MouseManager.multiTouchEnabled = false;
- };
- Main.prototype.onConfigLoaded = function () {
- this.LoadUI();
- };
- Main.prototype.LoadUI = function () {
- ViewManager_1.default.Instance.OpenView(ViewManager_1.ViewType.game_ui);
- GameSceneController_1.default.Instance.CreateScene();
- this.test();
- };
- Main.prototype.test = function () {
- var v1 = new Laya.Vector3(-3, 0, 1);
- var v2 = new Laya.Vector3(0, 0, -1);
- var v3 = new Laya.Vector3(0, 0, 0);
- Laya.Vector3.cross(v1, v2, v3);
- console.log(v3);
- };
- Main.IsWx = false;
- Main.VRE = "1.0.5";
- Main.CFG = "CFG";
- Main.wxValue = "";
- return Main;
- }());
- exports.Main = Main;
- //激活启动类
- new Main();
- },{"./GameConfig":1,"./game_logic/GameSceneController":5,"./game_logic/ViewManager":11,"./game_module/FYHD_Sdk":13,"./game_module/WXSdk":18}],3:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Vector3 = Laya.Vector3;
- var Bullet = /** @class */ (function (_super) {
- __extends(Bullet, _super);
- function Bullet() {
- return _super.call(this) || this;
- }
- Bullet.prototype.onAwake = function () {
- this.self = this.owner;
- this.forw = new Vector3(0, 0, 0);
- this._transform = this.self.transform;
- };
- Bullet.prototype.CreateRay = function () {
- // this._transform.getForward(this.forw);
- // this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z);
- // if (!this._ray) {
- // this._ray = new Ray(this._bulletPos.transform.position, this.forw);
- // this._hit = new HitResult();
- // } else {
- // this._ray.origin = this._bulletPos.transform.position;
- // this._ray.direction = this.forw;
- // }
- // if (!this.go) {
- // this.go = BulletController.Instance.CreateBullet();
- // }
- // this.go.transform.position = this._bulletPos.transform.position;
- // this.go.transform.rotation = this._transform.rotation;
- // var isS = GameSceneController.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit);
- // if (isS) {
- // var poi = this._hit.point;
- // var nor = Vector3.distance(this._bulletPos.transform.position, poi);
- // go.transform.localScaleZ = nor;
- // } else {
- // go.transform.localScaleZ = 50;
- // }
- //console.log(go.transform.localScaleZ);
- };
- Bullet.prototype.SetNextNotActive = function () {
- };
- return Bullet;
- }(Laya.Script));
- exports.Bullet = Bullet;
- },{}],4:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Pool_Manager_1 = require("./Pool_Manager");
- var GameDefined_1 = require("../game_module/GameDefined");
- var GameSceneController_1 = require("./GameSceneController");
- var BulletController = /** @class */ (function () {
- function BulletController() {
- }
- Object.defineProperty(BulletController, "Instance", {
- get: function () {
- return this.instance || (this.instance = new BulletController());
- },
- enumerable: true,
- configurable: true
- });
- BulletController.prototype.init = function (bullet) {
- bullet.removeSelf();
- this.bulletPref = bullet;
- Pool_Manager_1.Pool_Manager.Instance.InitData(GameDefined_1.default.poolName.bullet, this.bulletPref);
- };
- BulletController.prototype.CreateBullet = function () {
- if (this.bullet)
- return this.bullet;
- var go = Pool_Manager_1.Pool_Manager.Instance.SetActiveObject(GameDefined_1.default.poolName.bullet);
- GameSceneController_1.default.Instance.game_scene.addChild(go);
- this.bullet = go;
- return this.bullet;
- };
- return BulletController;
- }());
- exports.default = BulletController;
- },{"../game_module/GameDefined":14,"./GameSceneController":5,"./Pool_Manager":7}],5:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var ResourceLoad_1 = require("../game_module/ResourceLoad");
- var BulletController_1 = require("./BulletController");
- var RoleController_1 = require("./RoleController");
- var GameSceneController = /** @class */ (function () {
- function GameSceneController() {
- this.path = "res/LayaScene_main/Conventional/main.ls";
- }
- Object.defineProperty(GameSceneController, "Instance", {
- get: function () {
- return this.instance || (this.instance = new GameSceneController());
- },
- enumerable: true,
- configurable: true
- });
- GameSceneController.prototype.CreateScene = function () {
- var _this = this;
- ResourceLoad_1.default.LoadResource([this.path], function () {
- var t = Laya.loader.getRes(_this.path);
- Laya.stage.addChild(t);
- _this.game_scene = t;
- var _bullet = t.getChildByName("bullet");
- BulletController_1.default.Instance.init(_bullet);
- var _role = t.getChildByName("role");
- RoleController_1.RoleController.Instance.init(_role);
- RoleController_1.RoleController.Instance.CreateRay();
- });
- };
- return GameSceneController;
- }());
- exports.default = GameSceneController;
- },{"../game_module/ResourceLoad":15,"./BulletController":4,"./RoleController":9}],6:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Role_1 = require("./Role");
- var GameDefined_1 = require("../game_module/GameDefined");
- var Vector3 = Laya.Vector3;
- var Ray = Laya.Ray;
- var HitResult = Laya.HitResult;
- var GameSceneController_1 = require("./GameSceneController");
- var BulletController_1 = require("./BulletController");
- var Bullet_1 = require("./Bullet");
- var Player = /** @class */ (function (_super) {
- __extends(Player, _super);
- function Player() {
- return _super.call(this) || this;
- }
- Player.prototype.onAwake = function () {
- _super.prototype.onAwake.call(this);
- this._type = GameDefined_1.CheckType.Player;
- this.forw = new Vector3(0, 0, 0);
- this._corss = new Vector3(0, 0, 0);
- };
- Player.prototype.CreateRay = function () {
- this._transform.getForward(this.forw);
- this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z);
- if (!this._ray) {
- this._ray = new Ray(this._bulletPos.transform.position, this.forw);
- this._hit = new HitResult();
- }
- else {
- this._ray.origin = this._bulletPos.transform.position;
- this._ray.direction = this.forw;
- }
- if (!this.go) {
- this.go = BulletController_1.default.Instance.CreateBullet();
- var gs = this.go.getComponent(Bullet_1.Bullet);
- if (!gs)
- this.goS = this.go.addComponent(Bullet_1.Bullet);
- }
- this.go.transform.position = this._bulletPos.transform.position;
- this.go.transform.rotation = this._transform.rotation;
- var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit);
- if (isS) {
- var poi = this._hit.point;
- var dis = Vector3.distance(this._bulletPos.transform.position, poi);
- this.go.transform.localScaleZ = dis;
- var nor = this._hit.normal;
- Vector3.cross(this.forw, nor, this._corss);
- }
- else {
- this.go.transform.localScaleZ = 50;
- this.goS.SetNextNotActive();
- }
- // console.log(go.transform.localScaleZ);
- };
- Player.prototype.RotationSelf = function (rota) {
- this._transform.rotate(rota);
- this.CreateRay();
- };
- return Player;
- }(Role_1.Role));
- exports.Player = Player;
- },{"../game_module/GameDefined":14,"./Bullet":3,"./BulletController":4,"./GameSceneController":5,"./Role":8}],7:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Dictionary_1 = require("../game_tool/Dictionary");
- var Vector3 = Laya.Vector3;
- var Pool_Manager = /** @class */ (function () {
- function Pool_Manager() {
- this.poolDic = new Dictionary_1.default();
- this.prefabDic = new Dictionary_1.default();
- }
- Object.defineProperty(Pool_Manager, "Instance", {
- get: function () {
- return Pool_Manager.instance || (Pool_Manager.instance = new Pool_Manager());
- },
- enumerable: true,
- configurable: true
- });
- // [ "Coin" "Key" "Role" "Body1" "Train" ]
- Pool_Manager.prototype.InitData = function (name, prefab) {
- if (prefab != null) {
- if (!this.prefabDic.has(name))
- this.prefabDic.set(name, prefab);
- }
- };
- Pool_Manager.prototype.SetActiveObject = function (name, scale) {
- if (this.poolDic.has(name)) {
- if (this.poolDic.get(name).length > 0) {
- var result = this.poolDic.get(name).shift();
- result.active = true;
- return result;
- }
- else {
- if (this.prefabDic.has(name)) {
- var curObj = Laya.Sprite3D.instantiate(this.prefabDic.get(name));
- if (scale != null) {
- curObj.transform.localScale = new Vector3(scale, scale, scale);
- }
- curObj.name = name;
- return curObj;
- }
- else {
- return null;
- }
- }
- }
- else {
- if (this.prefabDic.has(name)) {
- var curObj = Laya.Sprite3D.instantiate(this.prefabDic.get(name));
- if (scale != null) {
- curObj.transform.localScale = new Vector3(scale, scale, scale);
- }
- curObj.name = name;
- return curObj;
- }
- else {
- return null;
- }
- }
- };
- //隐藏对象到dic
- Pool_Manager.prototype.SetDisableObject = function (go) {
- if (go)
- go.active = false;
- var key = go.name;
- if (!this.poolDic.has(key)) {
- this.poolDic.set(key, new Array());
- }
- this.poolDic.get(key).push(go);
- };
- Pool_Manager.prototype.DestoryObj = function (go) {
- if (go)
- go.destroy(true);
- };
- //延时隐藏对象到dic
- Pool_Manager.prototype.SetDisableMutiObject = function (go, timer) {
- var _this = this;
- Laya.timer.once(timer, this, function () {
- if (go)
- go.active = false;
- var key = go.name;
- if (!_this.poolDic.has(key)) {
- _this.poolDic.set(key, new Array());
- }
- _this.poolDic.get(key).push(go);
- });
- };
- return Pool_Manager;
- }());
- exports.Pool_Manager = Pool_Manager;
- },{"../game_tool/Dictionary":19}],8:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Role = /** @class */ (function (_super) {
- __extends(Role, _super);
- function Role() {
- return _super.call(this) || this;
- }
- Role.prototype.onAwake = function () {
- this.self = this.owner;
- this._transform = this.self.transform;
- this._bulletPos = this.self.getChildByName("bulltePos");
- };
- return Role;
- }(Laya.Script3D));
- exports.Role = Role;
- },{}],9:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Player_1 = require("./Player");
- var RoleController = /** @class */ (function () {
- function RoleController() {
- }
- Object.defineProperty(RoleController, "Instance", {
- get: function () {
- return this.instasnce || (this.instasnce = new RoleController());
- },
- enumerable: true,
- configurable: true
- });
- RoleController.prototype.init = function (role) {
- if (role) {
- this.player = role;
- this.playerS = this.player.addComponent(Player_1.Player);
- }
- };
- RoleController.prototype.CreateRay = function () {
- if (this.playerS)
- this.playerS.CreateRay();
- };
- RoleController.prototype.RoleRotation = function (rota) {
- if (this.playerS)
- this.playerS.RotationSelf(rota);
- };
- return RoleController;
- }());
- exports.RoleController = RoleController;
- },{"./Player":6}],10:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var SoundManager = Laya.SoundManager;
- var WXSdk_1 = require("../game_module/WXSdk");
- var SettingController = /** @class */ (function () {
- function SettingController() {
- this.vibrate = true;
- this.sound = true;
- this.temp = 0;
- this.badMove = "res/Sound/BadMove.mp3";
- this.click = "res/Sound/click.mp3";
- this.Continue = "res/Sound/Continue.mp3";
- this.LevelComp = "res/Sound/LevelComp.mp3";
- this.TrainCrash = "res/Sound/TrainCrash.mp3";
- this.TrainLoop = "res/Sound/TrainLoop.mp3";
- this.TrainStop = "res/Sound/TrainStop.mp3";
- this.Coin = "res/Sound/Coin1.mp3";
- this.Jump = [
- "res/Sound/PassengerJumpIn1.mp3",
- "res/Sound/PassengerJumpIn2.mp3",
- "res/Sound/PassengerJumpIn3.mp3",
- "res/Sound/PassengerJumpIn4.mp3",
- "res/Sound/PassengerJumpIn5.mp3",
- "res/Sound/PassengerJumpIn6.mp3",
- "res/Sound/PassengerJumpIn7.mp3",
- "res/Sound/PassengerJumpIn8.mp3",
- ];
- }
- Object.defineProperty(SettingController, "Instance", {
- get: function () {
- return this.instasnce || (this.instasnce = new SettingController());
- },
- enumerable: true,
- configurable: true
- });
- SettingController.prototype.SettingSound = function (value) {
- if (!this.sound)
- return;
- SoundManager.setSoundVolume(value);
- SoundManager.setMusicVolume(value);
- };
- SettingController.prototype._playMusic = function (on) {
- if (!this.sound)
- return;
- if (on) {
- if (this.soundChannel == null) {
- this.soundChannel = SoundManager.playMusic(this.TrainLoop, 0);
- this.soundChannel.volume = 0.5;
- }
- this.soundChannel.resume();
- }
- else {
- if (this.soundChannel) {
- this.soundChannel.pause();
- }
- }
- };
- SettingController.prototype._playBadMove = function () {
- WXSdk_1.WXSdk.ShortVibrate();
- if (!this.sound)
- return;
- SoundManager.playSound(this.badMove);
- };
- SettingController.prototype._Click = function () {
- if (!this.sound)
- return;
- SoundManager.playSound(this.click);
- };
- SettingController.prototype._Continue = function (on) {
- if (!this.sound)
- return;
- if (on) {
- SoundManager.playSound(this.Continue);
- }
- else {
- SoundManager.stopSound(this.Continue);
- }
- };
- SettingController.prototype._LevelComp = function () {
- if (!this.sound)
- return;
- SoundManager.playSound(this.LevelComp);
- };
- SettingController.prototype._TrainCrash = function () {
- WXSdk_1.WXSdk.LongVibrate();
- if (!this.sound)
- return;
- SoundManager.playSound(this.TrainCrash);
- };
- SettingController.prototype._TrainStop = function () {
- if (!this.sound)
- return;
- SoundManager.playSound(this.TrainStop);
- };
- SettingController.prototype._Coin = function () {
- WXSdk_1.WXSdk.ShortVibrate();
- if (!this.sound)
- return;
- SoundManager.playSound(this.Coin);
- };
- SettingController.prototype._Jump = function () {
- WXSdk_1.WXSdk.ShortVibrate();
- if (!this.sound)
- return;
- SoundManager.playSound(this.Jump[this.temp]);
- this.temp++;
- if (this.temp == 8)
- this.temp = 0;
- };
- return SettingController;
- }());
- exports.SettingController = SettingController;
- },{"../game_module/WXSdk":18}],11:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Dictionary_1 = require("../game_tool/Dictionary");
- var game_ui_1 = require("../game_ui/game_ui");
- var ViewType;
- (function (ViewType) {
- ViewType[ViewType["game_ui"] = 0] = "game_ui";
- })(ViewType = exports.ViewType || (exports.ViewType = {}));
- var ViewManager = /** @class */ (function () {
- function ViewManager() {
- this.viewDic = [];
- this.addViewDic = new Dictionary_1.default();
- this.init();
- }
- Object.defineProperty(ViewManager, "Instance", {
- get: function () {
- return this.instance || (this.instance = new ViewManager());
- },
- enumerable: true,
- configurable: true
- });
- ViewManager.prototype.init = function () {
- this.viewDic[ViewType.game_ui] = game_ui_1.game_ui;
- };
- ViewManager.prototype.OpenView = function (view, data) {
- if (this.curView != null) {
- this.curView.OnClose();
- Laya.stage.removeChild(this.curView);
- // var a:Laya.Scene;
- // a.destroy()
- this.curView.destroy(true);
- this.curView = null;
- }
- this.curView = new this.viewDic[view];
- Laya.stage.addChild(this.curView);
- // this.curView.resizeHander();
- this.curView.OnShow(data);
- };
- Object.defineProperty(ViewManager.prototype, "getCurView", {
- get: function () {
- return this.curView;
- },
- enumerable: true,
- configurable: true
- });
- ViewManager.prototype.AddView = function (view, data) {
- if (this.addViewDic.has(view))
- return;
- var t_view = new this.viewDic[view];
- this.addViewDic.set(view, t_view);
- Laya.stage.addChild(t_view);
- t_view.OnShow(data);
- };
- ViewManager.prototype.RemoveView = function () {
- if (this.curView != null) {
- this.curView.OnClose();
- Laya.stage.removeChild(this.curView);
- this.curView.destroy(true);
- this.curView = null;
- }
- };
- ViewManager.prototype.CloseView = function (view) {
- if (!this.addViewDic.has(view))
- return;
- var t_view = this.addViewDic.get(view);
- t_view.OnClose();
- Laya.stage.removeChild(t_view);
- t_view.destroy(true);
- this.addViewDic.delete(view);
- };
- ViewManager.prototype.OpenMask = function () {
- if (this.curMask != null) {
- return;
- }
- // this.curMask = new Mask_ui();
- if (!this.curMask)
- return;
- Laya.stage.addChild(this.curMask);
- };
- ViewManager.prototype.CloseMask = function () {
- if (this.curMask != null) {
- this.curMask.OnClose();
- Laya.stage.removeChild(this.curMask);
- this.curMask.destroy(true);
- this.curMask = null;
- }
- };
- return ViewManager;
- }());
- exports.default = ViewManager;
- },{"../game_tool/Dictionary":19,"../game_ui/game_ui":20}],12:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var EventManager = /** @class */ (function () {
- function EventManager() {
- }
- Object.defineProperty(EventManager, "Disispatcher", {
- get: function () {
- return EventManager.disispatcher || (EventManager.disispatcher = new Laya.EventDispatcher());
- },
- enumerable: true,
- configurable: true
- });
- EventManager.on = function (type, call, data) {
- this.Disispatcher.on(type, call, data);
- };
- EventManager.off = function (type, call, data) {
- this.Disispatcher.off(type, call, data);
- };
- EventManager.event = function (type, data) {
- if (data === void 0) { data = null; }
- this.Disispatcher.event(type, data);
- };
- return EventManager;
- }());
- exports.EventManager = EventManager;
- },{}],13:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var UserModel_1 = require("./UserModel");
- var Main_1 = require("../Main");
- var EventManager_1 = require("./EventManager");
- var FYHD_Sdk = /** @class */ (function () {
- function FYHD_Sdk() {
- }
- //初始化sdk
- FYHD_Sdk.InitSdk = function () {
- Laya.Browser.window.sdk.getFyhd().startSdk();
- FYHD_Sdk.UserInfoAuth();
- };
- //用户授权
- FYHD_Sdk.UserInfoAuth = function () {
- if (!Main_1.Main.IsWx)
- return;
- Laya.Browser.window.sdk.getFyhd().getFyhdUserInfo(null, false, function (data) {
- console.log("无授权回调:" + JSON.stringify(data));
- if (data.result.user) {
- FYHD_Sdk.openid = data.result.user.openid;
- FYHD_Sdk.AuthInfo();
- }
- });
- };
- FYHD_Sdk.AuthInfo = function () {
- var args = {
- openid: FYHD_Sdk.openid,
- };
- Laya.Browser.window.sdk.getFyhd().loginData(args, function (data) {
- console.log("授权上报回调:" + JSON.stringify(data));
- FYHD_Sdk.ValueUser();
- });
- };
- FYHD_Sdk.ValueUser = function () {
- var args = {
- openid: FYHD_Sdk.openid,
- };
- Laya.Browser.window.sdk.getFyhd().valueuser(args, function (data) {
- console.log("有效用户上报:" + JSON.stringify(data));
- });
- };
- //创角色
- FYHD_Sdk.RoleData = function () {
- if (!Main_1.Main.IsWx)
- return;
- var args = {
- openid: FYHD_Sdk.openid,
- role_id: UserModel_1.default.Instance.CurModel.userid,
- create_time: UserModel_1.default.Instance.CurModel.ServerTime
- };
- Laya.Browser.window.sdk.getFyhd().roleData(args, function (data) {
- console.log("创建角色:" + JSON.stringify(data));
- FYHD_Sdk.Login();
- });
- };
- //登录信息上报
- FYHD_Sdk.Login = function () {
- if (!Main_1.Main.IsWx)
- return;
- var openid = FYHD_Sdk.openid ? FYHD_Sdk.openid : UserModel_1.default.Instance.CurModel.openid;
- var args = {
- openid: openid,
- role_id: UserModel_1.default.Instance.CurModel.userid,
- create_time: UserModel_1.default.Instance.CurModel.ServerTime.toString()
- };
- console.log("登录参数:" + JSON.stringify(args));
- Laya.Browser.window.sdk.getFyhd().uploginData(args, function (data) {
- console.log("登录结果:" + JSON.stringify(data));
- // FYHD_Sdk.PushData();
- });
- };
- //点击事件上报
- FYHD_Sdk.ClickAd = function (ad_type) {
- if (!Main_1.Main.IsWx)
- return;
- var param = {
- ad_type: ad_type,
- };
- console.log("点击参数:" + param);
- Laya.Browser.window.sdk.getFyhd().advertisement(param, function (data) {
- console.log("点击结果:" + JSON.stringify(data));
- });
- };
- FYHD_Sdk.PushData = function () {
- if (!Main_1.Main.IsWx)
- return;
- var param = {};
- Laya.Browser.window.sdk.getFyhd().shareRecommend(param, function (data) {
- if (data.data) {
- FYHD_Sdk.pushData = data.data;
- FYHD_Sdk.pushData.sort(FYHD_Sdk.ListSort);
- EventManager_1.EventManager.event(FYHD_Sdk.ShowAd);
- FYHD_Sdk.isHaveDate = true;
- }
- console.log("获取互推信息:" + JSON.stringify(FYHD_Sdk.pushData));
- });
- };
- FYHD_Sdk.ShowHuTuiJump = function (data) {
- if (!Main_1.Main.IsWx)
- return;
- if (data.jump_type == 2) //二维码跳转方法
- {
- Laya.Browser.window.wx.previewImage({ current: data.qrcode, urls: [data.qrcode] });
- }
- else if (data.jump_type == 1) //直跳方法
- {
- Laya.Browser.window.wx.navigateToMiniProgram({
- appId: data.to_appid,
- path: data.jump_path,
- success: function (res) {
- // 打开成功
- console.log("上报成功:" + JSON.stringify(res));
- FYHD_Sdk.PushClick(data.to_appid);
- }
- });
- }
- else if (data.jump_type == 0) //平台跳转方法
- {
- Laya.Browser.window.wx.navigateToMiniProgram({
- appId: data.platform_appid,
- path: data.jump_path,
- success: function (res) {
- // 打开成功
- console.log("上报成功:" + JSON.stringify(res));
- FYHD_Sdk.PushClick(data.to_appid);
- }
- });
- }
- };
- FYHD_Sdk.PushClick = function (to_appid) {
- if (!Main_1.Main.IsWx)
- return;
- var param = {
- openid: FYHD_Sdk.openid,
- to_appid: to_appid,
- };
- Laya.Browser.window.sdk.getFyhd().sharePlay(param, function (data) {
- console.log("点击上报结果:" + JSON.stringify(data));
- });
- };
- FYHD_Sdk.ListSort = function (a, b) {
- if (Number(a["panel"]) < Number(b["panel"])) {
- return -1;
- }
- if (Number(a["panel"]) == Number(b["panel"])) {
- return 0;
- }
- if (Number(a["panel"]) > Number(b["panel"])) {
- return 1;
- }
- };
- FYHD_Sdk.Ad_ClickType = {
- Video: "video_click",
- Watch: "watch",
- Share: "share",
- Banner: "banner",
- Push: "push"
- };
- FYHD_Sdk.pushData = [];
- FYHD_Sdk.isHaveDate = false;
- FYHD_Sdk.ShowAd = "ShowAd";
- return FYHD_Sdk;
- }());
- exports.FYHD_Sdk = FYHD_Sdk;
- },{"../Main":2,"./EventManager":12,"./UserModel":17}],14:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var GameDefined = /** @class */ (function () {
- function GameDefined() {
- }
- GameDefined.player_layer = 9;
- GameDefined.wall_layer = 8;
- GameDefined.moster_layer = 10;
- GameDefined.boss_layer = 11;
- GameDefined.tree_layer = 12;
- GameDefined.bomb_layer = 13;
- GameDefined.poolName = {
- bullet: "bullet"
- };
- return GameDefined;
- }());
- exports.default = GameDefined;
- var CheckType;
- (function (CheckType) {
- CheckType[CheckType["Player"] = 0] = "Player";
- CheckType[CheckType["Moster"] = 1] = "Moster";
- CheckType[CheckType["Boss"] = 2] = "Boss";
- CheckType[CheckType["Bomb"] = 3] = "Bomb";
- CheckType[CheckType["Tree"] = 4] = "Tree";
- })(CheckType = exports.CheckType || (exports.CheckType = {}));
- },{}],15:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var ResourceLoad = /** @class */ (function () {
- function ResourceLoad() {
- }
- ResourceLoad.LoadResource = function (path, complet) {
- Laya.loader.retryNum = 2;
- Laya.loader.maxLoader = 3;
- Laya.loader.retryDelay = 100;
- Laya.loader.create(path, new Laya.Handler(this, complet));
- Laya.loader.on(Laya.Event.ERROR, this, function (data) {
- console.log(data + " 资源加载失败");
- });
- };
- return ResourceLoad;
- }());
- exports.default = ResourceLoad;
- },{}],16:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var WXSdk_1 = require("./WXSdk");
- var FYHD_Sdk_1 = require("./FYHD_Sdk");
- var ShareModule = /** @class */ (function () {
- function ShareModule() {
- }
- ShareModule.GoShare = function (callBack) {
- ShareModule.ShareTime = new Date().getTime();
- console.log("分享点击时间=" + ShareModule.ShareTime);
- ShareModule.IsSharing = true;
- ShareModule.callback = callBack;
- };
- ShareModule.OnShowHandle = function () {
- if (Laya.Browser.window.wx) {
- Laya.Browser.window.wx.onShow(function (option) {
- console.log("onshow share start");
- console.log("进入微信");
- //Laya.timer.scale=1;
- if (ShareModule.IsSharing) {
- ShareModule.IsSharing = false;
- var time = new Date().getTime();
- console.log("分享回到游戏时间" + time);
- var wait = (time - ShareModule.ShareTime) / 1000;
- console.log("分享停留时间为:" + wait);
- var shareSuccess = false;
- var realSuccess = false;
- if (wait >= 2) {
- if (Math.random() <= 0.5) {
- shareSuccess = true;
- FYHD_Sdk_1.FYHD_Sdk.ClickAd(FYHD_Sdk_1.FYHD_Sdk.Ad_ClickType.Share);
- if (!ShareModule.callback)
- return;
- ShareModule.callback(true);
- Laya.Browser.window.wx.showToast({ title: "分享成功!" });
- }
- else {
- if (!ShareModule.callback)
- return;
- if (Math.random() <= 0.5) {
- Laya.Browser.window.wx.showToast({ title: "分享失败!" });
- }
- else {
- WXSdk_1.WXSdk.ShowToast("请分享到不同群^-^", false);
- }
- ShareModule.callback(false);
- }
- }
- }
- });
- }
- };
- ShareModule.IsSharing = false;
- return ShareModule;
- }());
- exports.ShareModule = ShareModule;
- },{"./FYHD_Sdk":13,"./WXSdk":18}],17:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var UserConfigName;
- (function (UserConfigName) {
- UserConfigName[UserConfigName["train"] = 0] = "train";
- UserConfigName[UserConfigName["sign"] = 1] = "sign";
- UserConfigName[UserConfigName["rewards"] = 2] = "rewards";
- })(UserConfigName = exports.UserConfigName || (exports.UserConfigName = {}));
- //用户信息属性
- var UserAttr;
- (function (UserAttr) {
- UserAttr[UserAttr["equip_train"] = 0] = "equip_train";
- UserAttr[UserAttr["user_id"] = 1] = "user_id";
- UserAttr[UserAttr["stage"] = 2] = "stage";
- UserAttr[UserAttr["get_trains"] = 3] = "get_trains";
- UserAttr[UserAttr["money"] = 4] = "money";
- UserAttr[UserAttr["progress_trains"] = 5] = "progress_trains";
- })(UserAttr = exports.UserAttr || (exports.UserAttr = {}));
- var NetUserModel = /** @class */ (function () {
- function NetUserModel(_token, _config, _appSetting, _user, _userbase, _useInvite, _user_lottery, _user_treasure, t, _user_achievement, _user_sign, _user_arena) {
- this.loginSeverTime = 0;
- this.localTime = Laya.timer.currTimer;
- this.loginSeverTime = t;
- this.m_token = _token;
- this.m_configs = _config;
- this.m_app_setting = _appSetting;
- this.m_user = _user;
- this.m_user_base = _userbase;
- this.m_user_invite = _useInvite;
- this.m_user_lottery = _user_lottery;
- this.m_user_treasure = _user_treasure;
- this.m_user_achievement = _user_achievement;
- this.m_user_sign = _user_sign;
- this.m_user_arena = _user_arena;
- this.userid = this.m_user["user_id"];
- this.openid = this.m_user_base["openid"];
- this.nickname = this.m_user_base["nickname"];
- }
- Object.defineProperty(NetUserModel.prototype, "Cfg", {
- set: function (cfg) {
- this.m_configs = cfg;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "sharetitle", {
- get: function () {
- if (this.m_app_setting["sharetitle"]) {
- return this.m_app_setting["sharetitle"];
- }
- return "";
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "shareimage", {
- get: function () {
- if (this.m_app_setting["shareimage"]) {
- return this.m_app_setting["shareimage"];
- }
- return "";
- },
- enumerable: true,
- configurable: true
- });
- NetUserModel.prototype.GetCfg = function (type) {
- var _type = UserConfigName[type];
- return this.m_configs[_type];
- };
- NetUserModel.prototype.GetUserAttr = function (_attr) {
- var attr = UserAttr[_attr];
- return this.m_user[attr];
- };
- Object.defineProperty(NetUserModel.prototype, "ServerTime", {
- get: function () {
- var time = Laya.timer.currTimer;
- var stime = this.loginSeverTime + Math.ceil((time - this.localTime) / 1000);
- return stime;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "GuideLevel", {
- get: function () {
- if (this.m_app_setting["GuideLevel"]) {
- return Number(this.m_app_setting["GuideLevel"]);
- }
- return 1;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "BannerMoveTime", {
- get: function () {
- if (this.m_app_setting["BannerMoveTime"]) {
- return Number(this.m_app_setting["BannerMoveTime"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "HaveBanner", {
- get: function () {
- if (this.m_app_setting["HaveBanner"]) {
- return Number(this.m_app_setting["HaveBanner"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "IsShare", {
- get: function () {
- if (this.m_app_setting["IsShare"]) {
- return Number(this.m_app_setting["IsShare"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "BtnCanMove", {
- get: function () {
- if (this.m_app_setting["BtnCanMove"]) {
- return Number(this.m_app_setting["BtnCanMove"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "ISShareThenVideo", {
- get: function () {
- if (this.m_app_setting["ISShareThenVideo"]) {
- return Number(this.m_app_setting["ISShareThenVideo"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "OpenSceneValue", {
- get: function () {
- if (this.m_app_setting["OpenSceneValue"]) {
- return Number(this.m_app_setting["OpenSceneValue"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "IsOpenTryOut", {
- get: function () {
- if (this.m_app_setting["IsOpenTryOut"]) {
- var num = Number(this.m_app_setting["IsOpenTryOut"]);
- if (num == 0)
- return 0;
- if (Math.random() < num) {
- return 1;
- }
- else {
- return 0;
- }
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- return NetUserModel;
- }());
- exports.NetUserModel = NetUserModel;
- var UserModel = /** @class */ (function () {
- function UserModel(code, nickname, avatar, gender, country, province, city, device, share_id, scene) {
- UserModel.instance = this;
- this.m_code = code;
- this.m_nickname = nickname ? nickname : "游客";
- this.m_avatar = avatar ? avatar : "";
- this.m_gender = gender ? gender : 0;
- this.m_city = city ? city : "";
- this.m_device = device ? device : "";
- this.m_share_id = share_id ? share_id : "";
- this.m_scene = scene ? scene : "";
- this.m_country = country ? country : "";
- this.m_province = province ? province : "";
- }
- Object.defineProperty(UserModel.prototype, "CurModel", {
- get: function () {
- return this.curModel;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(UserModel, "Instance", {
- get: function () {
- if (UserModel.instance) {
- return UserModel.instance;
- }
- else {
- UserModel.instance = new UserModel("11", "游客", "", null, "", "", "", "iphone6s", "", "");
- return UserModel.instance;
- }
- },
- enumerable: true,
- configurable: true
- });
- UserModel.prototype.SetUserModel = function (_model) {
- this.curModel = _model;
- };
- return UserModel;
- }());
- exports.default = UserModel;
- },{}],18:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Main_1 = require("../Main");
- var ViewManager_1 = require("../game_logic/ViewManager");
- var SettingController_1 = require("../game_logic/SettingController");
- var ShareModule_1 = require("./ShareModule");
- var UserModel_1 = require("./UserModel");
- var WXSdk = /** @class */ (function () {
- function WXSdk() {
- this.shareId = "";
- this.shareScene = "";
- }
- WXSdk.prototype.setShareId = function (tid) {
- if (tid != "" && tid != null) {
- this.shareId = tid;
- console.log("[LOG]: setShareOpenId.tid=", this.shareId);
- }
- };
- Object.defineProperty(WXSdk, "Instance", {
- get: function () {
- return WXSdk.instance || (WXSdk.instance = new WXSdk());
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(WXSdk.prototype, "getShareId", {
- get: function () {
- return this.shareId;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(WXSdk.prototype, "ShareScene", {
- get: function () {
- return this.shareScene;
- },
- set: function (sceneS) {
- if (sceneS != "" && sceneS != null) {
- this.shareScene = sceneS;
- }
- },
- enumerable: true,
- configurable: true
- });
- WXSdk.prototype.init = function (cb) {
- Laya.Browser.window.wx.showShareMenu({
- withShareTicket: true
- });
- //this.shezhiShareMessage(null, null);
- Laya.Browser.window.wx.onShow(function (option) {
- var shareTicket = option.shareTicket;
- var shareid = option.query.shareid;
- var scene = decodeURIComponent(option.query.scene);
- console.log("全局path=:", option.path);
- console.log("decodeURIComponent", option.query.scene);
- var sceneQuery = JSON.stringify(option.query);
- if (Main_1.Main.wxValue == "") {
- Main_1.Main.wxValue = option.scene;
- }
- console.log("scene", option.scene);
- console.log("sceneQuery", sceneQuery);
- var channel = option.query.channel;
- var appid;
- if (option.referrerInfo) {
- console.log("referrerInfo:" + JSON.stringify(option.referrerInfo));
- appid = option.referrerInfo.appId;
- if (appid) {
- console.log("onShow appis is:", appid);
- }
- else {
- console.log("onShow appis is null");
- }
- }
- else {
- console.log("referrerInfo为空");
- }
- if (channel != null) {
- console.log("onShow channel is:", channel);
- }
- cb(shareTicket, shareid, channel, appid);
- });
- };
- WXSdk.ShareMessage = function (title, imageUrl) {
- if (!Main_1.Main.IsWx)
- return;
- var t = UserModel_1.default.Instance.CurModel.ServerTime;
- var _title = title;
- var _url = imageUrl;
- if (!_title) {
- _title = UserModel_1.default.Instance.CurModel.sharetitle;
- _url = UserModel_1.default.Instance.CurModel.shareimage;
- }
- Laya.Browser.window.wx.onShareAppMessage(function () { return ({
- title: _title,
- imageUrl: _url,
- query: "shareid=" + UserModel_1.default.Instance.CurModel.userid + "_" + t + "_" + Math.floor(9999 * Math.random()).toString()
- }); });
- };
- WXSdk.prototype.wx_login = function (cb) {
- if (WXSdk.Lodining) {
- return;
- }
- WXSdk.Lodining = true;
- console.log("Excute wx.login! shareOpenId: " + this.shareId);
- Laya.Browser.window.wx.login({
- success: function (res) {
- console.log("wx.login: success! res.code=" + res.code);
- if (res.code) {
- WXSdk.Lodining = false;
- console.log("将要传递的参数:" + res);
- cb(res);
- }
- else {
- console.log('获取用户登录态失败!' + res.errMsg);
- cb("error");
- }
- },
- fail: function (res) { console.log("wx.login: failed, res=" + res); WXSdk.Lodining = false; cb("error"); }
- });
- };
- //显示加载信息
- WXSdk.ShowLoading = function (title, isShowWx) {
- if (title === void 0) { title = "加载中..."; }
- if (isShowWx === void 0) { isShowWx = true; }
- if (Laya.Browser.window && Laya.Browser.window.wx) {
- if (isShowWx) {
- Laya.Browser.window.wx.showLoading({ title: title, mask: true });
- }
- ViewManager_1.default.Instance.OpenMask();
- }
- };
- WXSdk.SystemInfo = function () {
- if (Laya.Browser.window.wx) {
- return Laya.Browser.window.wx.getSystemInfoSync();
- }
- };
- // private static button;
- // public static showbjWxGameQuan(flag: boolean): void {
- // if (Laya.Browser.window.wx == null) {
- // return;
- // }
- // if (flag) {
- // if (WeiXinSDK.button == null) {
- // let info = Laya.Browser.window.wx.getSystemInfoSync();
- // if (!info) return;
- // var top = 474 * info.windowHeight / Laya.stage.height;
- // var height = 94 * info.windowHeight / Laya.stage.height;
- // var width = height * 95 / 94;
- // WeiXinSDK.button = Laya.Browser.window.wx.createGameClubButton
- // ({
- // type: "image",
- // image: 'res/wx.png',
- // style:
- // {
- // left: 0,
- // top: top,
- // width: width,
- // height: height
- // }
- // })
- // }
- // WeiXinSDK.button.show();
- // }
- // else {
- // if (WeiXinSDK.button) {
- // WeiXinSDK.button.hide();
- // }
- // }
- // }
- //退出
- // 显示提示信息//
- WXSdk.ShowToast = function (text, icon) {
- if (icon === void 0) { icon = true; }
- if (Laya.Browser.window.wx) {
- var t_icon = icon ? "success" : "none";
- Laya.Browser.window.wx.showToast({ title: text, icon: t_icon });
- }
- else {
- console.log(text);
- }
- };
- //1:pet 2:人物
- // public static XianShi_Model(content: string, callback: Function = null, type = 1, title = "") {
- // if (Laya.Browser.window && Laya.Browser.window.wx) {
- // if (type == 1) {
- // var cancelText = "残忍丢掉";
- // var confirmText = "带上一起";
- // } else {
- // var cancelText = "不想";
- // var confirmText = "想";
- // }
- // Laya.Browser.window.wx.showModal({
- // title: title,
- // content: content,
- // cancelText: cancelText,
- // confirmText: confirmText,
- // success(res) {
- // if (res.confirm) {
- // console.log('用户点击确定');
- // callback(true);
- // } else if (res.cancel) {
- // console.log('用户点击取消');
- // callback(false);
- // }
- // },
- // fail(res?) {
- // console.log('用户点击取消');
- // callback(false);
- // }
- // })
- // }
- // }
- WXSdk.ShortVibrate = function () {
- if (Laya.Browser.window.wx && SettingController_1.SettingController.Instance.vibrate) {
- Laya.Browser.window.wx.vibrateShort({});
- }
- };
- WXSdk.LongVibrate = function () {
- if (Laya.Browser.window.wx && SettingController_1.SettingController.Instance.vibrate) {
- Laya.Browser.window.wx.vibrateLong({});
- }
- };
- WXSdk.HideLoading = function (isShowWx) {
- if (isShowWx === void 0) { isShowWx = true; }
- if (Laya.Browser.window && Laya.Browser.window.wx) {
- if (isShowWx) {
- Laya.Browser.window.wx.hideLoading();
- }
- ViewManager_1.default.Instance.CloseMask();
- }
- };
- WXSdk.Success = function (stageId) {
- if (!Main_1.Main.IsWx)
- return;
- Laya.Browser.window.wx.aldStage.onEnd({
- stageId: stageId,
- stageName: "第" + stageId + "关",
- event: "complete",
- params: {
- desc: "关卡完成" //描述
- }
- });
- };
- //记录阿拉丁事件
- WXSdk.AldEvent = function (eventName, key, value) {
- if (Laya.Browser.window && Laya.Browser.window.wx) {
- if (!key)
- key = "用户id";
- if (!value) {
- value = "";
- console.log(value);
- }
- Laya.Browser.window.wx.aldSendEvent(eventName, { key: value });
- }
- };
- WXSdk.Fail = function (stageId) {
- if (!Main_1.Main.IsWx)
- return;
- Laya.Browser.window.wx.aldStage.onEnd({
- stageId: stageId,
- stageName: "第" + stageId + "关",
- event: "fail",
- params: {
- desc: "关卡失败",
- }
- });
- };
- // public static leveleRuning(stageId: string, userid: string, eventtype: number, itemName: string) {
- // if (Laya.Browser.window && Laya.Browser.window.wx) {
- // //Laya.Browser.window.wx.aldStage.onRunning({"stageId":stageId,"stageName":stageName,"userId":userid});
- // var eventT = eventtype == 0 ? "award" : "revive";
- // Laya.Browser.window.wx.aldStage.onRunning({
- // stageId: stageId,
- // stageName: "第" + stageId + "关",
- // userId: userid,
- // event: eventT,
- // params: {
- // itemName: itemName,
- // }
- // })
- // }
- // }
- WXSdk.Start = function (stageId) {
- if (!Main_1.Main.IsWx)
- return;
- Laya.Browser.window.wx.aldStage.onStart({
- stageId: stageId,
- stageName: "第" + stageId + "关",
- });
- };
- WXSdk.Game_Share = function (callback, channel) {
- if (callback === void 0) { callback = null; }
- if (channel === void 0) { channel = ""; }
- if (!Main_1.Main.IsWx) {
- return;
- }
- var url;
- var title;
- url = UserModel_1.default.Instance.CurModel.shareimage;
- title = UserModel_1.default.Instance.CurModel.sharetitle;
- console.log(url + " " + title);
- if (channel != null) {
- // WeiXinSDK.AldEvent("用户分享");
- }
- var t; // = UserModel.Get_Instance.CurModel.HuoQu_ServerTime;
- var path = "";
- Laya.Browser.window.wx.aldShareAppMessage({
- title: title,
- imageUrl: url,
- query: "shareid=" + UserModel_1.default.Instance.CurModel.userid + "_" + "other" + "_" + t + "_" + Math.floor(9999 * Math.random()).toString(),
- });
- ShareModule_1.ShareModule.GoShare(callback);
- };
- WXSdk.Lodining = false;
- return WXSdk;
- }());
- exports.WXSdk = WXSdk;
- },{"../Main":2,"../game_logic/SettingController":10,"../game_logic/ViewManager":11,"./ShareModule":16,"./UserModel":17}],19:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Dictionary = /** @class */ (function () {
- function Dictionary() {
- this._container = {};
- this._length = 0;
- }
- Object.defineProperty(Dictionary.prototype, "container", {
- get: function () {
- return this._container;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Dictionary.prototype, "size", {
- //获取字典长度
- get: function () {
- return this._length;
- },
- enumerable: true,
- configurable: true
- });
- //添加
- Dictionary.prototype.set = function (key, value) {
- if (!this._container.hasOwnProperty(key)) {
- this._length++;
- }
- this._container[key] = value;
- };
- //删除
- Dictionary.prototype.delete = function (key) {
- if (this._container.hasOwnProperty(key)) {
- delete this._container[key];
- this._length--;
- }
- };
- //查找
- Dictionary.prototype.has = function (key) {
- return this._container.hasOwnProperty(key) ? true : false;
- };
- //获取
- Dictionary.prototype.get = function (key) {
- if (this._container.hasOwnProperty(key)) {
- return this._container[key];
- }
- else {
- return undefined;
- }
- };
- //清空
- Dictionary.prototype.clear = function () {
- this._container = {};
- this._length = 0;
- };
- return Dictionary;
- }());
- exports.default = Dictionary;
- },{}],20:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var layaMaxUI_1 = require("../ui/layaMaxUI");
- var EventManager_1 = require("../game_module/EventManager");
- var RoleController_1 = require("../game_logic/RoleController");
- var game_ui = /** @class */ (function (_super) {
- __extends(game_ui, _super);
- function game_ui() {
- var _this = _super.call(this) || this;
- _this.isdown = false;
- _this.resizeHander();
- EventManager_1.EventManager.on(Laya.Event.RESIZE, _this, _this.resizeHander);
- return _this;
- }
- game_ui.prototype.resizeHander = function () {
- this.height = Laya.stage.height;
- };
- game_ui.prototype.OnShow = function (data) {
- this.UiEventHandler();
- };
- game_ui.prototype.UiEventHandler = function () {
- this.on(Laya.Event.MOUSE_DOWN, this, this.OnClickDown);
- this.on(Laya.Event.MOUSE_UP, this, this.OnClickUp);
- this.on(Laya.Event.MOUSE_OUT, this, this.OnClickUp);
- };
- game_ui.prototype.OnClickDown = function (e) {
- if (e.target instanceof Laya.UIComponent)
- return;
- this.isdown = true;
- this.on(Laya.Event.MOUSE_MOVE, this, this.OnSlider);
- this.curMousePos = new Laya.Vector2(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
- };
- game_ui.prototype.OnClickUp = function () {
- if (!this.isdown)
- return;
- this.isdown = false;
- this.off(Laya.Event.MOUSE_MOVE, this, this.OnSlider);
- };
- game_ui.prototype.OnSlider = function () {
- var MousePos = new Laya.Vector2(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
- var offestX = MousePos.x - this.curMousePos.x;
- if (offestX > 0)
- offestX = offestX < 5 ? offestX : 5;
- if (offestX < 0)
- offestX = offestX > -5 ? offestX : -5;
- var rotateDir = new Laya.Vector3(0, offestX * 0.01, 0);
- RoleController_1.RoleController.Instance.RoleRotation(rotateDir);
- this.curMousePos = new Laya.Vector2(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
- ;
- };
- game_ui.prototype.OnClose = function () {
- EventManager_1.EventManager.off(Laya.Event.RESIZE, this, this.resizeHander);
- this.off(Laya.Event.MOUSE_DOWN, this, this.OnClickDown);
- this.off(Laya.Event.MOUSE_UP, this, this.OnClickUp);
- this.off(Laya.Event.MOUSE_OUT, this, this.OnClickUp);
- };
- return game_ui;
- }(layaMaxUI_1.ui.game_uiUI));
- exports.game_ui = game_ui;
- },{"../game_logic/RoleController":9,"../game_module/EventManager":12,"../ui/layaMaxUI":21}],21:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Scene = Laya.Scene;
- var REG = Laya.ClassUtils.regClass;
- var ui;
- (function (ui) {
- var game_uiUI = /** @class */ (function (_super) {
- __extends(game_uiUI, _super);
- function game_uiUI() {
- return _super.call(this) || this;
- }
- game_uiUI.prototype.createChildren = function () {
- _super.prototype.createChildren.call(this);
- this.createView(game_uiUI.uiView);
- };
- game_uiUI.uiView = { "type": "Scene", "props": { "width": 720, "height": 1280 }, "loadList": [], "loadList3D": [] };
- return game_uiUI;
- }(Scene));
- ui.game_uiUI = game_uiUI;
- REG("ui.game_uiUI", game_uiUI);
- })(ui = exports.ui || (exports.ui = {}));
- },{}]},{},[2])
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkQ6L0xheWFCb3gvTGF5YTIuMS4wYmVhdC9MYXlhQWlySURFX2JldGEvcmVzb3VyY2VzL2FwcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwic3JjL0dhbWVDb25maWcudHMiLCJzcmMvTWFpbi50cyIsInNyYy9nYW1lX2xvZ2ljL0J1bGxldC50cyIsInNyYy9nYW1lX2xvZ2ljL0J1bGxldENvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9HYW1lU2NlbmVDb250cm9sbGVyLnRzIiwic3JjL2dhbWVfbG9naWMvUGxheWVyLnRzIiwic3JjL2dhbWVfbG9naWMvUG9vbF9NYW5hZ2VyLnRzIiwic3JjL2dhbWVfbG9naWMvUm9sZS50cyIsInNyYy9nYW1lX2xvZ2ljL1JvbGVDb250cm9sbGVyLnRzIiwic3JjL2dhbWVfbG9naWMvU2V0dGluZ0NvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9WaWV3TWFuYWdlci50cyIsInNyYy9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXIudHMiLCJzcmMvZ2FtZV9tb2R1bGUvRllIRF9TZGsudHMiLCJzcmMvZ2FtZV9tb2R1bGUvR2FtZURlZmluZWQudHMiLCJzcmMvZ2FtZV9tb2R1bGUvUmVzb3VyY2VMb2FkLnRzIiwic3JjL2dhbWVfbW9kdWxlL1NoYXJlTW9kdWxlLnRzIiwic3JjL2dhbWVfbW9kdWxlL1VzZXJNb2RlbC50cyIsInNyYy9nYW1lX21vZHVsZS9XWFNkay50cyIsInNyYy9nYW1lX3Rvb2wvRGljdGlvbmFyeS50cyIsInNyYy9nYW1lX3VpL2dhbWVfdWkudHMiLCJzcmMvdWkvbGF5YU1heFVJLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkEsZ0dBQWdHOztBQUVoRzs7RUFFRTtBQUNGO0lBYUk7SUFBYyxDQUFDO0lBQ1IsZUFBSSxHQUFYO1FBQ0ksSUFBSSxHQUFH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QUN2QixrQ0FBYyxHQUFkO1lBQ0ksaUJBQU0sY0FBYyxXQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUxjLGdCQUFNLEdBQU0sRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxFQUFDLE9BQU8sRUFBQyxHQUFHLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxDQUFDO1FBTWxILGdCQUFDO0tBUEQsQUFPQyxDQVA4QixLQUFLLEdBT25DO0lBUFksWUFBUyxZQU9yQixDQUFBO0lBQ0QsR0FBRyxDQUFDLGNBQWMsRUFBQyxTQUFTLENBQUMsQ0FBQztBQUNsQyxDQUFDLEVBVmEsRUFBRSxHQUFGLFVBQUUsS0FBRixVQUFFLFFBVWYiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG4oZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXHJcblxyXG4vKlxyXG4qIOa4uOaIj+WIneWni+WMlumFjee9rjtcclxuKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZUNvbmZpZ3tcclxuICAgIHN0YXRpYyB3aWR0aDpudW1iZXI9NzIwO1xyXG4gICAgc3RhdGljIGhlaWdodDpudW1iZXI9MTI4MDtcclxuICAgIHN0YXRpYyBzY2FsZU1vZGU6c3RyaW5nPVwiZml4ZWR3aWR0aFwiO1xyXG4gICAgc3RhdGljIHNjcmVlbk1vZGU6c3RyaW5nPVwibm9uZVwiO1xyXG4gICAgc3RhdGljIGFsaWduVjpzdHJpbmc9XCJtaWRkbGVcIjtcclxuICAgIHN0YXRpYyBhbGlnbkg6c3RyaW5nPVwiY2VudGVyXCI7XHJcbiAgICBzdGF0aWMgc3RhcnRTY2VuZTphbnk9XCJnYW1lX3VpLnNjZW5lXCI7XHJcbiAgICBzdGF0aWMgc2NlbmVSb290OnN0cmluZz1cIlwiO1xyXG4gICAgc3RhdGljIGRlYnVnOmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgc3RhdDpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHBoeXNpY3NEZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIGV4cG9ydFNjZW5lVG9Kc29uOmJvb2xlYW49dHJ1ZTtcclxuICAgIGNvbnN0cnVjdG9yKCl7fVxyXG4gICAgc3RhdGljIGluaXQoKXtcclxuICAgICAgICB2YXIgcmVnOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcclxuXHJcbiAgICB9XHJcbn1cclxuR2FtZUNvbmZpZy5pbml0KCk7IiwiaW1wb3J0IEdhbWVDb25maWcgZnJvbSBcIi4vR2FtZUNvbmZpZ1wiO1xyXG5pbXBvcnQgVmlld01hbmFnZXIsIHsgVmlld1R5cGUgfSBmcm9tIFwiLi9nYW1lX2xvZ2ljL1ZpZXdNYW5hZ2VyXCI7XHJcbmltcG9ydCBSZXNvdXJjZUxvYWQgZnJvbSBcIi4vZ2FtZV9tb2R1bGUvUmVzb3VyY2VMb2FkXCI7XHJcbmltcG9ydCBHYW1lRGVmaW5lZCBmcm9tIFwiLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgeyBXWFNkayB9IGZyb20gXCIuL2dhbWVfbW9kdWxlL1dYU2RrXCI7XHJcbmltcG9ydCB7IEZZSERfU2RrIH0gZnJvbSBcIi4vZ2FtZV9tb2R1bGUvRllIRF9TZGtcIjtcclxuaW1wb3J0IEFzc2V0Q29udHJvbGxlciBmcm9tIFwiLi9nYW1lX2xvZ2ljL0Fzc2V0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQgR2FtZVNjZW5lQ29udHJvbGxlciBmcm9tIFwiLi9nYW1lX2xvZ2ljL0dhbWVTY2VuZUNvbnRyb2xsZXJcIjtcclxuZXhwb3J0IGNsYXNzIE1haW4ge1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIG5vd3JhdGlvOiBudW1iZXI7XHJcblx0cHVibGljIHN0YXRpYyBJc1d4OiBib29sZWFuID0gZmFsc2U7XHJcblx0cHVibGljIHN0YXRpYyBWUkUgPSBcIjEuMC41XCI7XHJcblx0cHVibGljIHN0YXRpYyBDRkcgPSBcIkNGR1wiO1xyXG5cdHB1YmxpYyBzdGF0aWMgd3hWYWx1ZSA9IFwiXCI7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHQvL+agueaNrklEReiuvue9ruWIneWni+WMluW8leaTjlx0XHRcclxuXHRcdGlmICh3aW5kb3dbXCJMYXlhM0RcIl0pIExheWEzRC5pbml0KEdhbWVDb25maWcud2lkdGgsIEdhbWVDb25maWcuaGVpZ2h0KTtcclxuXHRcdGVsc2UgTGF5YS5pbml0KEdhbWVDb25maWcud2lkdGgsIEdhbWVDb25maWcuaGVpZ2h0LCBMYXlhW1wiV2ViR0xcIl0pO1xyXG5cdFx0TGF5YVtcIlBoeXNpY3NcIl0gJiYgTGF5YVtcIlBoeXNpY3NcIl0uZW5hYmxlKCk7XHJcblx0XHRMYXlhW1wiRGVidWdQYW5lbFwiXSAmJiBMYXlhW1wiRGVidWdQYW5lbFwiXS5lbmFibGUoKTtcclxuXHRcdExheWEuc3RhZ2Uuc2NhbGVNb2RlID0gR2FtZUNvbmZpZy5zY2FsZU1vZGU7XHJcblx0XHRMYXlhLnN0YWdlLnNjcmVlbk1vZGUgPSBHYW1lQ29uZmlnLnNjcmVlbk1vZGU7XHJcblx0XHQvL+WFvOWuueW+ruS/oeS4jeaUr+aMgeWKoOi9vXNjZW5l5ZCO57yA5Zy65pmvXHJcblx0XHRMYXlhLlVSTC5leHBvcnRTY2VuZVRvSnNvbiA9IEdhbWVDb25maWcuZXhwb3J0U2NlbmVUb0pzb247XHJcblxyXG5cdFx0Ly/miZPlvIDosIPor5XpnaLmnb/vvIjpgJrov4dJREXorr7nva7osIPor5XmqKHlvI/vvIzmiJbogIV1cmzlnLDlnYDlop7liqBkZWJ1Zz10cnVl5Y+C5pWw77yM5Z2H5Y+v5omT5byA6LCD6K+V6Z2i5p2/77yJXHJcblx0XHRpZiAoR2FtZUNvbmZpZy5kZWJ1ZyB8fCBMYXlhLlV0aWxzLmdldFF1ZXJ5U3RyaW5nKFwiZGVidWdcIikgPT0gXCJ0cnVlXCIpIExheWEuZW5hYmxlRGVidWdQYW5lbCgpO1xyXG5cdFx0aWYgKEdhbWVDb25maWcucGh5c2ljc0RlYnVnICYmIExheWFbXCJQaHlzaWNzRGVidWdEcmF3XCJdKSBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXS5lbmFibGUoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnN0YXQpIExheWEuU3RhdC5zaG93KCk7XHJcblx0XHRMYXlhLmFsZXJ0R2xvYmFsRXJyb3IgPSB0cnVlO1xyXG5cdFx0TWFpbi5ub3dyYXRpbyA9IExheWEuc3RhZ2Uud2lkdGggLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuXHJcblx0XHRNYWluLklzV3ggPSBMYXlhLkJyb3dzZXIub25XZWlYaW47XHJcblxyXG5cdFx0aWYgKE1haW4uSXNXeCkge1xyXG5cdFx0XHRXWFNkay5JbnN0YW5jZS5pbml0KChzaGFyZVRpY2tldDogc3RyaW5nLCBzaGFyZWlkOiBzdHJpbmcsIHNjZW5lOiBzdHJpbmcsIGFwcGlkOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHR0aGlzLm9uU2hvd0hhbmRsZXIoc2hhcmVUaWNrZXQsIHNoYXJlaWQsIHNjZW5lLCBhcHBpZCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRGWUhEX1Nkay5Jbml0U2RrKCk7XHJcblx0XHR9XHJcblx0XHQvL+a/gOa0u+i1hOa6kOeJiOacrOaOp+WItu+8jHZlcnNpb24uanNvbueUsUlEReWPkeW4g+WKn+iDveiHquWKqOeUn+aIkO+8jOWmguaenOayoeacieS5n+S4jeW9seWTjeWQjue7rea1geeoi1xyXG5cdFx0TGF5YS5SZXNvdXJjZVZlcnNpb24uZW5hYmxlKFwidmVyc2lvbi5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vblZlcnNpb25Mb2FkZWQpLCBMYXlhLlJlc291cmNlVmVyc2lvbi5GSUxFTkFNRV9WRVJTSU9OKTtcclxuXHRcdHRoaXMuSXNOZWVkVXBkYXRlKCk7XHJcblx0fVxyXG5cdHByaXZhdGUgSXNOZWVkVXBkYXRlKCkge1xyXG5cdFx0aWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuXHRcdGNvbnN0IHVwZGF0ZU1hbmFnZXIgPSBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmdldFVwZGF0ZU1hbmFnZXIoKTtcclxuXHRcdHVwZGF0ZU1hbmFnZXIub25DaGVja0ZvclVwZGF0ZShmdW5jdGlvbiAocmVzKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwi5pyA5paw54mI5pysOlwiICsgcmVzLmhhc1VwZGF0ZSk7XHJcblx0XHR9XHJcblx0XHQpO1xyXG5cdFx0dXBkYXRlTWFuYWdlci5vblVwZGF0ZVJlYWR5KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0TGF5YS5Ccm93c2VyLndpbmRvdy53eC5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdHRpdGxlOiAn5pu05paw5o+Q56S6JyxcclxuXHRcdFx0XHRjb250ZW50OiAn5paw54mI5pys5bey57uP5YeG5aSH5aW977yM5piv5ZCm6YeN5ZCv5bqU55So77yfJyxcclxuXHRcdFx0XHRzdWNjZXNzKHJlcykge1xyXG5cdFx0XHRcdFx0dXBkYXRlTWFuYWdlci5hcHBseVVwZGF0ZSgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZmFpbChyZXM/KSB7XHJcblx0XHRcdFx0XHR1cGRhdGVNYW5hZ2VyLmFwcGx5VXBkYXRlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBvblNob3dIYW5kbGVyKHNoYXJlVGlja2V0OiBzdHJpbmcsIHNoYXJlSWQ6IHN0cmluZywgc2NlbmU6IHN0cmluZywgYXBwaWQ6IHN0cmluZykge1xyXG5cdFx0Y29uc29sZS5sb2coXCJbTE9HXTog5YiG5Lqr6L+b5YWlOiBzaGFyZVRpY2tldDpcIiwgc2hhcmVUaWNrZXQsIFwiLCBvcGVuSWQ9XCIsIHNoYXJlSWQsIFwiLCBzY2VuZT1cIiwgc2NlbmUpO1xyXG5cdFx0Ly8gaWYgKCFNYWluLm1TaGFyZVBlb3BsZVNjZW5lKSB7XHJcblx0XHQvLyBcdE1haW4ubVNoYXJlUGVvcGxlU2NlbmUgPSBzY2VuZTtcclxuXHRcdC8vIH1cclxuXHRcdC8vIGlmICghTWFpbi5hcHBpZCkge1xyXG5cdFx0Ly8gXHRNYWluLmFwcGlkID0gYXBwaWQ7XHJcblx0XHQvLyB9XHJcblx0XHRpZiAoc2NlbmUgIT0gbnVsbCAmJiBzY2VuZSAhPSBcIlwiKSB7XHJcblx0XHRcdFdYU2RrLkluc3RhbmNlLlNoYXJlU2NlbmUgPSBzY2VuZTtcclxuXHRcdH1cclxuXHRcdGlmIChzaGFyZUlkICE9IG51bGwgJiYgc2hhcmVJZCAhPSBcIlwiKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKFwi6K6+572u5YiG5LqraWRcIiArIHNoYXJlSWQpO1xyXG5cdFx0XHRXWFNkay5JbnN0YW5jZS5zZXRTaGFyZUlkKHNoYXJlSWQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0b25WZXJzaW9uTG9hZGVkKCk6IHZvaWQge1xyXG5cdFx0Ly/mv4DmtLvlpKflsI/lm77mmKDlsITvvIzliqDovb3lsI/lm77nmoTml7blgJnvvIzlpoLmnpzlj5HnjrDlsI/lm77lnKjlpKflm77lkIjpm4bph4zpnaLvvIzliJnkvJjlhYjliqDovb3lpKflm77lkIjpm4bvvIzogIzkuI3mmK/lsI/lm75cclxuXHRcdExheWEuQXRsYXNJbmZvTWFuYWdlci5lbmFibGUoXCJmaWxlY29uZmlnLmpzb25cIiwgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLm9uQ29uZmlnTG9hZGVkKSk7XHJcblx0XHRMYXlhLk1vdXNlTWFuYWdlci5tdWx0aVRvdWNoRW5hYmxlZCA9IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0b25Db25maWdMb2FkZWQoKTogdm9pZCB7XHJcblx0XHR0aGlzLkxvYWRVSSgpO1xyXG5cdH1cclxuXHRMb2FkVUkoKSB7XHJcblx0XHRWaWV3TWFuYWdlci5JbnN0YW5jZS5PcGVuVmlldyhWaWV3VHlwZS5nYW1lX3VpKTtcclxuXHRcdEdhbWVTY2VuZUNvbnRyb2xsZXIuSW5zdGFuY2UuQ3JlYXRlU2NlbmUoKTtcclxuXHRcdFx0dGhpcy50ZXN0KCk7XHJcblx0fVxyXG5cclxuXHR0ZXN0KCkge1xyXG5cdFx0dmFyIHYxPW5ldyBMYXlhLlZlY3RvcjMoLTMsMCwxKTtcclxuXHRcdHZhciB2Mj1uZXcgTGF5YS5WZWN0b3IzKDAsMCwtMSk7XHJcblx0XHR2YXIgdjM9bmV3IExheWEuVmVjdG9yMygwLDAsMCk7XHJcblx0XHRMYXlhLlZlY3RvcjMuY3Jvc3ModjEsdjIsdjMpO1xyXG5cdFx0Y29uc29sZS5sb2codjMpO1xyXG5cdH1cclxufVxyXG4vL+a/gOa0u+WQr+WKqOexu1xyXG5uZXcgTWFpbigpO1xyXG4iLCJpbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4vUm9sZVwiO1xyXG5pbXBvcnQgeyBDaGVja1R5cGUgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuaW1wb3J0IFZlY3RvcjMgPSBMYXlhLlZlY3RvcjM7XHJcbmltcG9ydCBSYXkgPSBMYXlhLlJheTtcclxuaW1wb3J0IEhpdFJlc3VsdCA9IExheWEuSGl0UmVzdWx0O1xyXG5pbXBvcnQgR2FtZVNjZW5lQ29udHJvbGxlciBmcm9tIFwiLi9HYW1lU2NlbmVDb250cm9sbGVyXCI7XHJcbmltcG9ydCBCdWxsZXRDb250cm9sbGVyIGZyb20gXCIuL0J1bGxldENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IFNwcml0ZTNEID0gTGF5YS5TcHJpdGUzRDtcclxuaW1wb3J0IFRyYW5zZm9ybTNEID0gTGF5YS5UcmFuc2Zvcm0zRDtcclxuZXhwb3J0IGNsYXNzIEJ1bGxldCBleHRlbmRzIExheWEuU2NyaXB0IHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdHJhbnNmb3JtOiBUcmFuc2Zvcm0zRDtcclxuICAgIHByaXZhdGUgc2VsZjogU3ByaXRlM0Q7XHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZiA9IHRoaXMub3duZXIgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgdGhpcy5mb3J3ID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtID0gdGhpcy5zZWxmLnRyYW5zZm9ybTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvcnc6IFZlY3RvcjM7XHJcbiAgICBwcml2YXRlIF9yYXk6IFJheTtcclxuICAgIHByaXZhdGUgX2hpdDogSGl0UmVzdWx0O1xyXG5cclxuICAgIHByaXZhdGUgZ286IFNwcml0ZTNEO1xyXG4gICAgcHJpdmF0ZSBnb1M6IEJ1bGxldDtcclxuICAgIENyZWF0ZVJheSgpIHtcclxuICAgICAgICAvLyB0aGlzLl90cmFuc2Zvcm0uZ2V0Rm9yd2FyZCh0aGlzLmZvcncpO1xyXG4gICAgICAgIC8vIHRoaXMuZm9ydyA9IG5ldyBWZWN0b3IzKC10aGlzLmZvcncueCwgLXRoaXMuZm9ydy55LCAtdGhpcy5mb3J3LnopO1xyXG4gICAgICAgIC8vIGlmICghdGhpcy5fcmF5KSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuX3JheSA9IG5ldyBSYXkodGhpcy5fYnVsbGV0UG9zLnRyYW5zZm9ybS5wb3NpdGlvbiwgdGhpcy5mb3J3KTtcclxuICAgICAgICAvLyAgICAgdGhpcy5faGl0ID0gbmV3IEhpdFJlc3VsdCgpO1xyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuX3JheS5vcmlnaW4gPSB0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uO1xyXG4gICAgICAgIC8vICAgICB0aGlzLl9yYXkuZGlyZWN0aW9uID0gdGhpcy5mb3J3O1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyBpZiAoIXRoaXMuZ28pIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5nbyA9IEJ1bGxldENvbnRyb2xsZXIuSW5zdGFuY2UuQ3JlYXRlQnVsbGV0KCk7XHJcblxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyB0aGlzLmdvLnRyYW5zZm9ybS5wb3NpdGlvbiA9IHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb247XHJcbiAgICAgICAgLy8gdGhpcy5nby50cmFuc2Zvcm0ucm90YXRpb24gPSB0aGlzLl90cmFuc2Zvcm0ucm90YXRpb247XHJcbiAgICAgICAgLy8gdmFyIGlzUyA9IEdhbWVTY2VuZUNvbnRyb2xsZXIuSW5zdGFuY2UuZ2FtZV9zY2VuZS5waHlzaWNzU2ltdWxhdGlvbi5yYXlDYXN0KHRoaXMuX3JheSwgdGhpcy5faGl0KTtcclxuXHJcbiAgICAgICAgLy8gaWYgKGlzUykge1xyXG4gICAgICAgIC8vICAgICB2YXIgcG9pID0gdGhpcy5faGl0LnBvaW50O1xyXG4gICAgICAgIC8vICAgICB2YXIgbm9yID0gVmVjdG9yMy5kaXN0YW5jZSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCBwb2kpO1xyXG4gICAgICAgIC8vICAgICBnby50cmFuc2Zvcm0ubG9jYWxTY2FsZVogPSBub3I7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaID0gNTA7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vY29uc29sZS5sb2coZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgU2V0TmV4dE5vdEFjdGl2ZSgpIHtcclxuXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgU3ByaXRlM0QgPSBMYXlhLlNwcml0ZTNEO1xyXG5pbXBvcnQgeyBQb29sX01hbmFnZXIgfSBmcm9tIFwiLi9Qb29sX01hbmFnZXJcIjtcclxuaW1wb3J0IEdhbWVEZWZpbmVkIGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgR2FtZVNjZW5lQ29udHJvbGxlciBmcm9tIFwiLi9HYW1lU2NlbmVDb250cm9sbGVyXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1bGxldENvbnRyb2xsZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IEJ1bGxldENvbnRyb2xsZXI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBCdWxsZXRDb250cm9sbGVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZSB8fCAodGhpcy5pbnN0YW5jZSA9IG5ldyBCdWxsZXRDb250cm9sbGVyKCkpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBidWxsZXRQcmVmOiBTcHJpdGUzRDtcclxuICAgIHB1YmxpYyBpbml0KGJ1bGxldDogU3ByaXRlM0QpIHtcclxuICAgICAgICBidWxsZXQucmVtb3ZlU2VsZigpO1xyXG4gICAgICAgIHRoaXMuYnVsbGV0UHJlZiA9IGJ1bGxldDtcclxuICAgICAgICBQb29sX01hbmFnZXIuSW5zdGFuY2UuSW5pdERhdGEoR2FtZURlZmluZWQucG9vbE5hbWUuYnVsbGV0LCB0aGlzLmJ1bGxldFByZWYpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVsbGV0OiBTcHJpdGUzRDtcclxuICAgIHB1YmxpYyBDcmVhdGVCdWxsZXQoKTogU3ByaXRlM0Qge1xyXG4gICAgICAgIGlmICh0aGlzLmJ1bGxldCkgcmV0dXJuIHRoaXMuYnVsbGV0O1xyXG4gICAgICAgIHZhciBnbyA9IFBvb2xfTWFuYWdlci5JbnN0YW5jZS5TZXRBY3RpdmVPYmplY3QoR2FtZURlZmluZWQucG9vbE5hbWUuYnVsbGV0KTtcclxuICAgICAgICBHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVfc2NlbmUuYWRkQ2hpbGQoZ28pO1xyXG4gICAgICAgIHRoaXMuYnVsbGV0ID0gZ287XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVsbGV0O1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCBSZXNvdXJjZUxvYWQgZnJvbSBcIi4uL2dhbWVfbW9kdWxlL1Jlc291cmNlTG9hZFwiO1xyXG5cclxuaW1wb3J0IFNjZW5lM0QgPSBMYXlhLlNjZW5lM0Q7XHJcbmltcG9ydCBCdWxsZXRDb250cm9sbGVyIGZyb20gXCIuL0J1bGxldENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IHsgUm9sZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi9Sb2xlQ29udHJvbGxlclwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lU2NlbmVDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBHYW1lU2NlbmVDb250cm9sbGVyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogR2FtZVNjZW5lQ29udHJvbGxlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UgfHwgKHRoaXMuaW5zdGFuY2UgPSBuZXcgR2FtZVNjZW5lQ29udHJvbGxlcigpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGdhbWVfc2NlbmU6IFNjZW5lM0Q7XHJcbiAgICBwdWJsaWMgcGF0aCA9IFwicmVzL0xheWFTY2VuZV9tYWluL0NvbnZlbnRpb25hbC9tYWluLmxzXCI7XHJcbiAgICBwdWJsaWMgQ3JlYXRlU2NlbmUoKSB7XHJcbiAgICAgICAgUmVzb3VyY2VMb2FkLkxvYWRSZXNvdXJjZShbdGhpcy5wYXRoXSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdCA9IExheWEubG9hZGVyLmdldFJlcyh0aGlzLnBhdGgpIGFzIExheWEuU2NlbmUzRDtcclxuICAgICAgICAgICAgTGF5YS5zdGFnZS5hZGRDaGlsZCh0KTtcclxuICAgICAgICAgICAgdGhpcy5nYW1lX3NjZW5lID0gdDtcclxuICAgICAgICAgICAgdmFyIF9idWxsZXQgPSB0LmdldENoaWxkQnlOYW1lKFwiYnVsbGV0XCIpIGFzIExheWEuU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIEJ1bGxldENvbnRyb2xsZXIuSW5zdGFuY2UuaW5pdChfYnVsbGV0KTtcclxuICAgICAgICAgICAgdmFyIF9yb2xlID0gdC5nZXRDaGlsZEJ5TmFtZShcInJvbGVcIikgYXMgTGF5YS5TcHJpdGUzRDtcclxuICAgICAgICAgICAgUm9sZUNvbnRyb2xsZXIuSW5zdGFuY2UuaW5pdChfcm9sZSk7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFJvbGVDb250cm9sbGVyLkluc3RhbmNlLkNyZWF0ZVJheSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi9Sb2xlXCI7XHJcbmltcG9ydCB7IENoZWNrVHlwZSB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgVmVjdG9yMyA9IExheWEuVmVjdG9yMztcclxuaW1wb3J0IFJheSA9IExheWEuUmF5O1xyXG5pbXBvcnQgSGl0UmVzdWx0ID0gTGF5YS5IaXRSZXN1bHQ7XHJcbmltcG9ydCBHYW1lU2NlbmVDb250cm9sbGVyIGZyb20gXCIuL0dhbWVTY2VuZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEJ1bGxldENvbnRyb2xsZXIgZnJvbSBcIi4vQnVsbGV0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQgU3ByaXRlM0QgPSBMYXlhLlNwcml0ZTNEO1xyXG5pbXBvcnQgeyBCdWxsZXQgfSBmcm9tIFwiLi9CdWxsZXRcIjtcclxuZXhwb3J0IGNsYXNzIFBsYXllciBleHRlbmRzIFJvbGUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHN1cGVyLm9uQXdha2UoKTtcclxuICAgICAgICB0aGlzLl90eXBlID0gQ2hlY2tUeXBlLlBsYXllcjtcclxuICAgICAgICB0aGlzLmZvcncgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgICAgICB0aGlzLl9jb3JzcyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9ydzogVmVjdG9yMztcclxuICAgIHByaXZhdGUgX3JheTogUmF5O1xyXG4gICAgcHJpdmF0ZSBfaGl0OiBIaXRSZXN1bHQ7XHJcblxyXG4gICAgcHJpdmF0ZSBfY29yc3M6IFZlY3RvcjM7XHJcblxyXG4gICAgcHJpdmF0ZSBnbzogU3ByaXRlM0Q7XHJcbiAgICBwcml2YXRlIGdvUzogQnVsbGV0O1xyXG4gICAgQ3JlYXRlUmF5KCkge1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybS5nZXRGb3J3YXJkKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgdGhpcy5mb3J3ID0gbmV3IFZlY3RvcjMoLXRoaXMuZm9ydy54LCAtdGhpcy5mb3J3LnksIC10aGlzLmZvcncueik7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9yYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5ID0gbmV3IFJheSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCB0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaXQgPSBuZXcgSGl0UmVzdWx0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5Lm9yaWdpbiA9IHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuX3JheS5kaXJlY3Rpb24gPSB0aGlzLmZvcnc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5nbykge1xyXG4gICAgICAgICAgICB0aGlzLmdvID0gQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVCdWxsZXQoKTtcclxuICAgICAgICAgICAgdmFyIGdzID0gdGhpcy5nby5nZXRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICAgICAgaWYgKCFncykgdGhpcy5nb1MgPSB0aGlzLmdvLmFkZENvbXBvbmVudChCdWxsZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5wb3NpdGlvbiA9IHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb247XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucm90YXRpb24gPSB0aGlzLl90cmFuc2Zvcm0ucm90YXRpb247XHJcbiAgICAgICAgdmFyIGlzUyA9IEdhbWVTY2VuZUNvbnRyb2xsZXIuSW5zdGFuY2UuZ2FtZV9zY2VuZS5waHlzaWNzU2ltdWxhdGlvbi5yYXlDYXN0KHRoaXMuX3JheSwgdGhpcy5faGl0KTtcclxuXHJcbiAgICAgICAgaWYgKGlzUykge1xyXG4gICAgICAgICAgICB2YXIgcG9pID0gdGhpcy5faGl0LnBvaW50O1xyXG4gICAgICAgICAgICB2YXIgZGlzID0gVmVjdG9yMy5kaXN0YW5jZSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCBwb2kpO1xyXG4gICAgICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5sb2NhbFNjYWxlWiA9IGRpcztcclxuICAgICAgICAgICAgdmFyIG5vciA9IHRoaXMuX2hpdC5ub3JtYWw7XHJcbiAgICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhpcy5mb3J3LCBub3IsIHRoaXMuX2NvcnNzKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ubG9jYWxTY2FsZVogPSA1MDtcclxuICAgICAgICAgICAgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgY29uc29sZS5sb2coZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaKTtcclxuICAgIH1cclxuXHJcbiAgICBSb3RhdGlvblNlbGYocm90YTogVmVjdG9yMykge1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybS5yb3RhdGUocm90YSk7XHJcbiAgICAgICAgdGhpcy5DcmVhdGVSYXkoKTtcclxuICAgIH1cclxufSIsImltcG9ydCBEaWN0aW9uYXJ5IGZyb20gXCIuLi9nYW1lX3Rvb2wvRGljdGlvbmFyeVwiO1xyXG5pbXBvcnQgVmVjdG9yMz1MYXlhLlZlY3RvcjM7XHJcbmV4cG9ydCBjbGFzcyBQb29sX01hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFBvb2xfTWFuYWdlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFBvb2xfTWFuYWdlciB7XHJcbiAgICAgICAgcmV0dXJuIFBvb2xfTWFuYWdlci5pbnN0YW5jZSB8fCAoUG9vbF9NYW5hZ2VyLmluc3RhbmNlID0gbmV3IFBvb2xfTWFuYWdlcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnBvb2xEaWMgPSBuZXcgRGljdGlvbmFyeSgpO1xyXG4gICAgICAgIHRoaXMucHJlZmFiRGljID0gbmV3IERpY3Rpb25hcnkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+WtmOWCqOWkmuS4qlxyXG4gICAgcHJpdmF0ZSBwb29sRGljOiBEaWN0aW9uYXJ5O1xyXG5cclxuICAgIC8v6aKE6K6+5a+56LGhXHJcbiAgICBwcml2YXRlIHByZWZhYkRpYzogRGljdGlvbmFyeTtcclxuXHJcbiAgICAvLyBbIFwiQ29pblwiICBcIktleVwiICBcIlJvbGVcIiAgXCJCb2R5MVwiICAgXCJUcmFpblwiIF1cclxuICAgIHB1YmxpYyBJbml0RGF0YShuYW1lOiBzdHJpbmcsIHByZWZhYikge1xyXG4gICAgICAgIGlmIChwcmVmYWIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlZmFiRGljLmhhcyhuYW1lKSlcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZmFiRGljLnNldChuYW1lLCBwcmVmYWIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBTZXRBY3RpdmVPYmplY3QobmFtZTogc3RyaW5nLHNjYWxlPykge1xyXG4gICAgICAgIGlmICh0aGlzLnBvb2xEaWMuaGFzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvb2xEaWMuZ2V0KG5hbWUpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnBvb2xEaWMuZ2V0KG5hbWUpLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuYWN0aXZlPXRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZWZhYkRpYy5oYXMobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3VyT2JqID0gTGF5YS5TcHJpdGUzRC5pbnN0YW50aWF0ZSh0aGlzLnByZWZhYkRpYy5nZXQobmFtZSkpIGFzIExheWEuU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc2NhbGUhPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJPYmoudHJhbnNmb3JtLmxvY2FsU2NhbGU9bmV3IFZlY3RvcjMoc2NhbGUsc2NhbGUsc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjdXJPYmoubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1ck9iajtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucHJlZmFiRGljLmhhcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1ck9iaiA9IExheWEuU3ByaXRlM0QuaW5zdGFudGlhdGUodGhpcy5wcmVmYWJEaWMuZ2V0KG5hbWUpKSBhcyBMYXlhLlNwcml0ZTNEO1xyXG4gICAgICAgICAgICAgICAgaWYoc2NhbGUhPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGN1ck9iai50cmFuc2Zvcm0ubG9jYWxTY2FsZT1uZXcgVmVjdG9yMyhzY2FsZSxzY2FsZSxzY2FsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjdXJPYmoubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyT2JqO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v6ZqQ6JeP5a+56LGh5YiwZGljXHJcbiAgICBwdWJsaWMgU2V0RGlzYWJsZU9iamVjdChnbzogTGF5YS5TcHJpdGUzRCkge1xyXG4gICAgICAgIGlmIChnbykgZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGtleSA9IGdvLm5hbWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvb2xEaWMuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5wb29sRGljLnNldChrZXksIG5ldyBBcnJheTxhbnk+KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvb2xEaWMuZ2V0KGtleSkucHVzaChnbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIERlc3RvcnlPYmooZ286TGF5YS5TcHJpdGUzRCl7XHJcbiAgICAgICAgaWYgKGdvKSBnby5kZXN0cm95KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5bu25pe26ZqQ6JeP5a+56LGh5YiwZGljXHJcbiAgICBwdWJsaWMgU2V0RGlzYWJsZU11dGlPYmplY3QoZ286IExheWEuU3ByaXRlM0QsIHRpbWVyKSB7XHJcbiAgICAgICAgTGF5YS50aW1lci5vbmNlKHRpbWVyLCB0aGlzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChnbykgZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBnby5uYW1lO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucG9vbERpYy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb29sRGljLnNldChrZXksIG5ldyBBcnJheTxhbnk+KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9vbERpYy5nZXQoa2V5KS5wdXNoKGdvKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IFNwcml0ZTNEPUxheWEuU3ByaXRlM0Q7XHJcbmltcG9ydCBUcmFuc2Zvcm0zRD1MYXlhLlRyYW5zZm9ybTNEO1xyXG5pbXBvcnQgeyBDaGVja1R5cGUgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuZXhwb3J0IGNsYXNzIFJvbGUgZXh0ZW5kcyBMYXlhLlNjcmlwdDNEIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNlbGY6U3ByaXRlM0Q7XHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zZm9ybTpUcmFuc2Zvcm0zRDtcclxuICAgIHByb3RlY3RlZCBfdHlwZTpDaGVja1R5cGU7XHJcbiAgICBwcm90ZWN0ZWQgX2J1bGxldFBvczpTcHJpdGUzRDtcclxuICAgIG9uQXdha2UoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxmID0gdGhpcy5vd25lciBhcyBTcHJpdGUzRDtcclxuICAgICAgICB0aGlzLl90cmFuc2Zvcm0gPSB0aGlzLnNlbGYudHJhbnNmb3JtO1xyXG4gICAgICAgIHRoaXMuX2J1bGxldFBvcz10aGlzLnNlbGYuZ2V0Q2hpbGRCeU5hbWUoXCJidWxsdGVQb3NcIilhcyBTcHJpdGUzRDtcclxuICAgIH1cclxufSIsIlxyXG5pbXBvcnQgU3ByaXRlM0Q9TGF5YS5TcHJpdGUzRDtcclxuaW1wb3J0IHsgUGxheWVyIH0gZnJvbSBcIi4vUGxheWVyXCI7XHJcbmltcG9ydCBWZWN0b3IzPUxheWEuVmVjdG9yMztcclxuZXhwb3J0IGNsYXNzIFJvbGVDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3Rhc25jZTogUm9sZUNvbnRyb2xsZXI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBSb2xlQ29udHJvbGxlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFzbmNlIHx8ICh0aGlzLmluc3Rhc25jZSA9IG5ldyBSb2xlQ29udHJvbGxlcigpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHBsYXllcjpTcHJpdGUzRDtcclxuICAgIHB1YmxpYyBwbGF5ZXJTOlBsYXllcjtcclxuICAgIHB1YmxpYyBpbml0KHJvbGU6U3ByaXRlM0Qpe1xyXG4gICAgICAgIGlmKHJvbGUpe1xyXG4gICAgICAgICAgICB0aGlzLnBsYXllcj1yb2xlO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXllclM9dGhpcy5wbGF5ZXIuYWRkQ29tcG9uZW50KFBsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIENyZWF0ZVJheSgpe1xyXG4gICAgICAgIGlmKHRoaXMucGxheWVyUyl0aGlzLnBsYXllclMuQ3JlYXRlUmF5KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgUm9sZVJvdGF0aW9uKHJvdGE6VmVjdG9yMyl7XHJcbiAgICAgICAgaWYodGhpcy5wbGF5ZXJTKXRoaXMucGxheWVyUy5Sb3RhdGlvblNlbGYocm90YSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgU291bmRNYW5hZ2VyID0gTGF5YS5Tb3VuZE1hbmFnZXI7XHJcbmltcG9ydCB7IFdYU2RrIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL1dYU2RrXCI7XHJcbmV4cG9ydCBjbGFzcyBTZXR0aW5nQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YXNuY2U6IFNldHRpbmdDb250cm9sbGVyO1xyXG4gICAgcHVibGljIHZpYnJhdGUgPSB0cnVlO1xyXG4gICAgcHVibGljIHNvdW5kPXRydWU7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBTZXR0aW5nQ29udHJvbGxlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFzbmNlIHx8ICh0aGlzLmluc3Rhc25jZSA9IG5ldyBTZXR0aW5nQ29udHJvbGxlcigpKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBTZXR0aW5nU291bmQodmFsdWU/OiBudW1iZXIpIHtcclxuICAgICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgICAgIFNvdW5kTWFuYWdlci5zZXRTb3VuZFZvbHVtZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIFNvdW5kTWFuYWdlci5zZXRNdXNpY1ZvbHVtZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb3VuZENoYW5uZWw6IExheWEuU291bmRDaGFubmVsO1xyXG4gICAgcHVibGljIF9wbGF5TXVzaWMob24pIHtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgaWYgKG9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdW5kQ2hhbm5lbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kQ2hhbm5lbCA9IFNvdW5kTWFuYWdlci5wbGF5TXVzaWModGhpcy5UcmFpbkxvb3AsIDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3VuZENoYW5uZWwudm9sdW1lID0gMC41XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zb3VuZENoYW5uZWwucmVzdW1lKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc291bmRDaGFubmVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kQ2hhbm5lbC5wYXVzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfcGxheUJhZE1vdmUoKSB7XHJcbiAgICAgICBcclxuICAgICAgICBXWFNkay5TaG9ydFZpYnJhdGUoKTtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLmJhZE1vdmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfQ2xpY2soKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5jbGljayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9Db250aW51ZShvbikge1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBpZiAob24pIHtcclxuICAgICAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLkNvbnRpbnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBTb3VuZE1hbmFnZXIuc3RvcFNvdW5kKHRoaXMuQ29udGludWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9MZXZlbENvbXAoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5MZXZlbENvbXApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfVHJhaW5DcmFzaCgpIHtcclxuICAgICAgICBXWFNkay5Mb25nVmlicmF0ZSgpO1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBTb3VuZE1hbmFnZXIucGxheVNvdW5kKHRoaXMuVHJhaW5DcmFzaCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgX1RyYWluU3RvcCgpIHtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLlRyYWluU3RvcCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgX0NvaW4oKSB7XHJcbiAgICAgICAgV1hTZGsuU2hvcnRWaWJyYXRlKCk7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5Db2luKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSB0ZW1wID0gMDtcclxuICAgIHB1YmxpYyBfSnVtcCgpIHtcclxuICAgICAgICBXWFNkay5TaG9ydFZpYnJhdGUoKTtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLkp1bXBbdGhpcy50ZW1wXSk7XHJcbiAgICAgICAgdGhpcy50ZW1wKys7XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcCA9PSA4KSB0aGlzLnRlbXAgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYmFkTW92ZSA9IFwicmVzL1NvdW5kL0JhZE1vdmUubXAzXCI7XHJcbiAgICBwcml2YXRlIGNsaWNrID0gXCJyZXMvU291bmQvY2xpY2subXAzXCI7XHJcbiAgICBwcml2YXRlIENvbnRpbnVlID0gXCJyZXMvU291bmQvQ29udGludWUubXAzXCI7XHJcbiAgICBwcml2YXRlIExldmVsQ29tcCA9IFwicmVzL1NvdW5kL0xldmVsQ29tcC5tcDNcIjtcclxuICAgIHByaXZhdGUgVHJhaW5DcmFzaCA9IFwicmVzL1NvdW5kL1RyYWluQ3Jhc2gubXAzXCI7XHJcbiAgICBwcml2YXRlIFRyYWluTG9vcCA9IFwicmVzL1NvdW5kL1RyYWluTG9vcC5tcDNcIjtcclxuICAgIHByaXZhdGUgVHJhaW5TdG9wID0gXCJyZXMvU291bmQvVHJhaW5TdG9wLm1wM1wiO1xyXG4gICAgcHJpdmF0ZSBDb2luPVwicmVzL1NvdW5kL0NvaW4xLm1wM1wiO1xyXG4gICAgcHJpdmF0ZSBKdW1wID1cclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjEubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjIubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjMubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjQubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjUubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjYubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjcubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjgubXAzXCIsXHJcbiAgICAgICAgXTtcclxuXHJcbn0iLCJpbXBvcnQgRGljdGlvbmFyeSBmcm9tIFwiLi4vZ2FtZV90b29sL0RpY3Rpb25hcnlcIjtcclxuaW1wb3J0IHsgZ2FtZV91aSB9IGZyb20gXCIuLi9nYW1lX3VpL2dhbWVfdWlcIjtcclxuXHJcblxyXG5leHBvcnQgZW51bSBWaWV3VHlwZSB7XHJcbiAgICBnYW1lX3VpXHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlld01hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFZpZXdNYW5hZ2VyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogVmlld01hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlIHx8ICh0aGlzLmluc3RhbmNlID0gbmV3IFZpZXdNYW5hZ2VyKCkpO1xyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHZpZXdEaWMgPSBbXTtcclxuICAgIHByaXZhdGUgY3VyVmlldzogYW55O1xyXG4gICAgcHJpdmF0ZSBhZGRWaWV3RGljID0gbmV3IERpY3Rpb25hcnkoKTtcclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy52aWV3RGljW1ZpZXdUeXBlLmdhbWVfdWldPWdhbWVfdWk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgT3BlblZpZXcodmlldzogVmlld1R5cGUsIGRhdGE/OiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJWaWV3ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3Lk9uQ2xvc2UoKTtcclxuICAgICAgICAgICAgTGF5YS5zdGFnZS5yZW1vdmVDaGlsZCh0aGlzLmN1clZpZXcpO1xyXG4gICAgICAgICAgICAvLyAgICB2YXIgIGE6TGF5YS5TY2VuZTtcclxuICAgICAgICAgICAgLy8gICAgYS5kZXN0cm95KClcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3LmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyVmlldyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3VyVmlldyA9IG5ldyB0aGlzLnZpZXdEaWNbdmlld107XHJcblxyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodGhpcy5jdXJWaWV3KTtcclxuICAgICAgICAvLyB0aGlzLmN1clZpZXcucmVzaXplSGFuZGVyKCk7XHJcbiAgICAgICAgdGhpcy5jdXJWaWV3Lk9uU2hvdyhkYXRhKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBnZXRDdXJWaWV3KCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VyVmlldztcclxuICAgIH1cclxuICAgIHB1YmxpYyBBZGRWaWV3KHZpZXc6IFZpZXdUeXBlLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWRkVmlld0RpYy5oYXModmlldykpIHJldHVybjtcclxuICAgICAgICBsZXQgdF92aWV3ID0gbmV3IHRoaXMudmlld0RpY1t2aWV3XTtcclxuICAgICAgICB0aGlzLmFkZFZpZXdEaWMuc2V0KHZpZXcsIHRfdmlldyk7XHJcbiAgICAgICAgTGF5YS5zdGFnZS5hZGRDaGlsZCh0X3ZpZXcpO1xyXG4gICAgICAgIHRfdmlldy5PblNob3coZGF0YSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgUmVtb3ZlVmlldygpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJWaWV3ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3Lk9uQ2xvc2UoKTtcclxuICAgICAgICAgICAgTGF5YS5zdGFnZS5yZW1vdmVDaGlsZCh0aGlzLmN1clZpZXcpO1xyXG4gICAgICAgICAgICB0aGlzLmN1clZpZXcuZGVzdHJveSh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgQ2xvc2VWaWV3KHZpZXc6IFZpZXdUeXBlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFkZFZpZXdEaWMuaGFzKHZpZXcpKSByZXR1cm47XHJcbiAgICAgICAgbGV0IHRfdmlldyA9IHRoaXMuYWRkVmlld0RpYy5nZXQodmlldyk7XHJcbiAgICAgICAgdF92aWV3Lk9uQ2xvc2UoKTtcclxuICAgICAgICBMYXlhLnN0YWdlLnJlbW92ZUNoaWxkKHRfdmlldyk7XHJcbiAgICAgICAgdF92aWV3LmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5hZGRWaWV3RGljLmRlbGV0ZSh2aWV3KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY3VyTWFzazogYW55O1xyXG4gICAgcHVibGljIE9wZW5NYXNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1ck1hc2sgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAvLyAgdGhpcy5jdXJNYXNrID0gbmV3IE1hc2tfdWkoKTtcclxuICAgICAgICBpZiAoIXRoaXMuY3VyTWFzaykgcmV0dXJuO1xyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodGhpcy5jdXJNYXNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBDbG9zZU1hc2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VyTWFzayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyTWFzay5PbkNsb3NlKCk7XHJcbiAgICAgICAgICAgIExheWEuc3RhZ2UucmVtb3ZlQ2hpbGQodGhpcy5jdXJNYXNrKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJNYXNrLmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyTWFzayA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBFdmVudE1hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZGlzaXNwYXRjaGVyOiBMYXlhLkV2ZW50RGlzcGF0Y2hlcjtcclxuICAgIHByaXZhdGUgc3RhdGljIGdldCBEaXNpc3BhdGNoZXIoKTogTGF5YS5FdmVudERpc3BhdGNoZXIge1xyXG4gICAgICAgIHJldHVybiBFdmVudE1hbmFnZXIuZGlzaXNwYXRjaGVyIHx8IChFdmVudE1hbmFnZXIuZGlzaXNwYXRjaGVyID0gbmV3IExheWEuRXZlbnREaXNwYXRjaGVyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgb24odHlwZTogc3RyaW5nLCBjYWxsOiBhbnksIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuRGlzaXNwYXRjaGVyLm9uKHR5cGUsIGNhbGwsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBvZmYodHlwZTogc3RyaW5nLCBjYWxsOiBhbnksIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuRGlzaXNwYXRjaGVyLm9mZih0eXBlLCBjYWxsLCBkYXRhKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZXZlbnQodHlwZTogc3RyaW5nLCBkYXRhOiBhbnkgPSBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5EaXNpc3BhdGNoZXIuZXZlbnQodHlwZSwgZGF0YSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgVXNlck1vZGVsIGZyb20gXCIuL1VzZXJNb2RlbFwiO1xyXG5pbXBvcnQgeyBNYWluIH0gZnJvbSBcIi4uL01haW5cIjtcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSBcIi4vRXZlbnRNYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRllIRF9TZGsge1xyXG4gICAgcHVibGljIHN0YXRpYyBBZF9DbGlja1R5cGUgPSB7XHJcbiAgICAgICAgVmlkZW86IFwidmlkZW9fY2xpY2tcIixcclxuICAgICAgICBXYXRjaDogXCJ3YXRjaFwiLFxyXG4gICAgICAgIFNoYXJlOiBcInNoYXJlXCIsXHJcbiAgICAgICAgQmFubmVyOiBcImJhbm5lclwiLFxyXG4gICAgICAgIFB1c2g6IFwicHVzaFwiXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBwdXNoRGF0YSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3BlbmlkOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpc0hhdmVEYXRlID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBTaG93QWQgPSBcIlNob3dBZFwiO1xyXG4gICAgLy/liJ3lp4vljJZzZGtcclxuICAgIHB1YmxpYyBzdGF0aWMgSW5pdFNkaygpIHtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkuc3RhcnRTZGsoKTtcclxuICAgICAgICBGWUhEX1Nkay5Vc2VySW5mb0F1dGgoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+eUqOaIt+aOiOadg1xyXG4gICAgcHVibGljIHN0YXRpYyBVc2VySW5mb0F1dGgoKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkuZ2V0RnloZFVzZXJJbmZvKG51bGwsIGZhbHNlLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuaXoOaOiOadg+WbnuiwgzpcIiArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIEZZSERfU2RrLm9wZW5pZCA9IGRhdGEucmVzdWx0LnVzZXIub3BlbmlkO1xyXG4gICAgICAgICAgICAgICAgRllIRF9TZGsuQXV0aEluZm8oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgQXV0aEluZm8oKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSB7XHJcbiAgICAgICAgICAgIG9wZW5pZDogRllIRF9TZGsub3BlbmlkLFxyXG4gICAgICAgIH1cclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkubG9naW5EYXRhKGFyZ3MsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5o6I5p2D5LiK5oql5Zue6LCDOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICBGWUhEX1Nkay5WYWx1ZVVzZXIoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc3RhdGljIFZhbHVlVXNlcigpIHtcclxuICAgICAgICB2YXIgYXJncyA9IHtcclxuICAgICAgICAgICAgb3BlbmlkOiBGWUhEX1Nkay5vcGVuaWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS52YWx1ZXVzZXIoYXJncywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmnInmlYjnlKjmiLfkuIrmiqU6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/liJvop5LoibJcclxuICAgIHB1YmxpYyBzdGF0aWMgUm9sZURhdGEoKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgYXJncyA9IHtcclxuICAgICAgICAgICAgb3BlbmlkOiBGWUhEX1Nkay5vcGVuaWQsXHJcbiAgICAgICAgICAgIHJvbGVfaWQ6IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC51c2VyaWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuU2VydmVyVGltZVxyXG4gICAgICAgIH1cclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkucm9sZURhdGEoYXJncywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLliJvlu7rop5LoibI6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICAgIEZZSERfU2RrLkxvZ2luKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvL+eZu+W9leS/oeaBr+S4iuaKpVxyXG4gICAgcHVibGljIHN0YXRpYyBMb2dpbigpIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBvcGVuaWQgPSBGWUhEX1Nkay5vcGVuaWQgPyBGWUhEX1Nkay5vcGVuaWQgOiBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwub3BlbmlkO1xyXG4gICAgICAgIHZhciBhcmdzID0ge1xyXG4gICAgICAgICAgICBvcGVuaWQ6IG9wZW5pZCxcclxuICAgICAgICAgICAgcm9sZV9pZDogVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnVzZXJpZCxcclxuICAgICAgICAgICAgY3JlYXRlX3RpbWU6IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5TZXJ2ZXJUaW1lLnRvU3RyaW5nKClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLnmbvlvZXlj4LmlbA6XCIgKyBKU09OLnN0cmluZ2lmeShhcmdzKSk7XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLnVwbG9naW5EYXRhKGFyZ3MsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi55m75b2V57uT5p6cOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICAvLyBGWUhEX1Nkay5QdXNoRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8v54K55Ye75LqL5Lu25LiK5oqlXHJcbiAgICBwdWJsaWMgc3RhdGljIENsaWNrQWQoYWRfdHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFyYW0gPSB7XHJcbiAgICAgICAgICAgIGFkX3R5cGU6IGFkX3R5cGUsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi54K55Ye75Y+C5pWwOlwiICsgcGFyYW0pO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5hZHZlcnRpc2VtZW50KHBhcmFtLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIueCueWHu+e7k+aenDpcIiArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFB1c2hEYXRhKCkge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHBhcmFtID0ge307XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLnNoYXJlUmVjb21tZW5kKHBhcmFtLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBGWUhEX1Nkay5wdXNoRGF0YSA9IGRhdGEuZGF0YTtcclxuICAgICAgICAgICAgICAgIEZZSERfU2RrLnB1c2hEYXRhLnNvcnQoRllIRF9TZGsuTGlzdFNvcnQpO1xyXG4gICAgICAgICAgICAgICAgRXZlbnRNYW5hZ2VyLmV2ZW50KEZZSERfU2RrLlNob3dBZCk7XHJcbiAgICAgICAgICAgICAgICBGWUhEX1Nkay5pc0hhdmVEYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuiOt+WPluS6kuaOqOS/oeaBrzpcIiArIEpTT04uc3RyaW5naWZ5KEZZSERfU2RrLnB1c2hEYXRhKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFNob3dIdVR1aUp1bXAoZGF0YSkge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgaWYgKGRhdGEuanVtcF90eXBlID09IDIpIC8v5LqM57u056CB6Lez6L2s5pa55rOVXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnByZXZpZXdJbWFnZSh7IGN1cnJlbnQ6IGRhdGEucXJjb2RlLCB1cmxzOiBbZGF0YS5xcmNvZGVdIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChkYXRhLmp1bXBfdHlwZSA9PSAxKSAvL+ebtOi3s+aWueazlVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5uYXZpZ2F0ZVRvTWluaVByb2dyYW0oe1xyXG4gICAgICAgICAgICAgICAgYXBwSWQ6IGRhdGEudG9fYXBwaWQsXHJcbiAgICAgICAgICAgICAgICBwYXRoOiBkYXRhLmp1bXBfcGF0aCxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5omT5byA5oiQ5YqfXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLkuIrmiqXmiJDlip86XCIgKyBKU09OLnN0cmluZ2lmeShyZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICBGWUhEX1Nkay5QdXNoQ2xpY2soZGF0YS50b19hcHBpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGRhdGEuanVtcF90eXBlID09IDApLy/lubPlj7Dot7Povazmlrnms5VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gubmF2aWdhdGVUb01pbmlQcm9ncmFtKHtcclxuICAgICAgICAgICAgICAgIGFwcElkOiBkYXRhLnBsYXRmb3JtX2FwcGlkLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogZGF0YS5qdW1wX3BhdGgsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaJk+W8gOaIkOWKn1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5LiK5oql5oiQ5YqfOlwiICsgSlNPTi5zdHJpbmdpZnkocmVzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgRllIRF9TZGsuUHVzaENsaWNrKGRhdGEudG9fYXBwaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgUHVzaENsaWNrKHRvX2FwcGlkKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFyYW0gPSB7XHJcbiAgICAgICAgICAgIG9wZW5pZDogRllIRF9TZGsub3BlbmlkLFxyXG4gICAgICAgICAgICB0b19hcHBpZDogdG9fYXBwaWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5zaGFyZVBsYXkocGFyYW0sIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi54K55Ye75LiK5oql57uT5p6cOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIExpc3RTb3J0KGEsIGIpOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChOdW1iZXIoYVtcInBhbmVsXCJdKSA8IE51bWJlcihiW1wicGFuZWxcIl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE51bWJlcihhW1wicGFuZWxcIl0pID09IE51bWJlcihiW1wicGFuZWxcIl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTnVtYmVyKGFbXCJwYW5lbFwiXSkgPiBOdW1iZXIoYltcInBhbmVsXCJdKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZURlZmluZWQge1xyXG4gICAgcHVibGljIHN0YXRpYyBwbGF5ZXJfbGF5ZXI9OTtcclxuICAgIHB1YmxpYyBzdGF0aWMgd2FsbF9sYXllcj04O1xyXG4gICAgcHVibGljIHN0YXRpYyBtb3N0ZXJfbGF5ZXI9MTA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJvc3NfbGF5ZXI9MTE7XHJcbiAgICBwdWJsaWMgc3RhdGljIHRyZWVfbGF5ZXI9MTI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJvbWJfbGF5ZXI9MTM7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcG9vbE5hbWU9e1xyXG4gICAgICAgIGJ1bGxldDpcImJ1bGxldFwiXHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGVudW0gQ2hlY2tUeXBle1xyXG4gICAgUGxheWVyLFxyXG4gICAgTW9zdGVyLFxyXG4gICAgQm9zcyxcclxuICAgIEJvbWIsXHJcbiAgICBUcmVlXHJcbn1cclxuIiwiXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc291cmNlTG9hZCB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBMb2FkUmVzb3VyY2UocGF0aDpBcnJheTxhbnk+LGNvbXBsZXQ/OkZ1bmN0aW9uKXtcclxuICAgICAgICBMYXlhLmxvYWRlci5yZXRyeU51bT0yO1xyXG4gICAgICAgIExheWEubG9hZGVyLm1heExvYWRlcj0zO1xyXG4gICAgICAgIExheWEubG9hZGVyLnJldHJ5RGVsYXk9MTAwO1xyXG4gICAgICAgIExheWEubG9hZGVyLmNyZWF0ZShwYXRoLG5ldyBMYXlhLkhhbmRsZXIodGhpcyxjb21wbGV0KSk7XHJcbiAgICAgICAgTGF5YS5sb2FkZXIub24oTGF5YS5FdmVudC5FUlJPUix0aGlzLChkYXRhKT0+e1xyXG4gICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGErXCIg6LWE5rqQ5Yqg6L295aSx6LSlXCIpO1xyXG4gICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBXWFNkayB9IGZyb20gXCIuL1dYU2RrXCI7XHJcbmltcG9ydCB7IEZZSERfU2RrIH0gZnJvbSBcIi4vRllIRF9TZGtcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU2hhcmVNb2R1bGUge1xyXG4gICAgcHVibGljIHN0YXRpYyBJc1NoYXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBHb1NoYXJlKGNhbGxCYWNrKTogdm9pZCB7XHJcbiAgICAgICAgU2hhcmVNb2R1bGUuU2hhcmVUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLliIbkuqvngrnlh7vml7bpl7Q9XCIgKyBTaGFyZU1vZHVsZS5TaGFyZVRpbWUpO1xyXG4gICAgICAgIFNoYXJlTW9kdWxlLklzU2hhcmluZyA9IHRydWU7XHJcbiAgICAgICAgU2hhcmVNb2R1bGUuY2FsbGJhY2sgPSBjYWxsQmFjaztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hhcmVUaW1lOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE9uU2hvd0hhbmRsZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4Lm9uU2hvdyhmdW5jdGlvbiAob3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm9uc2hvdyBzaGFyZSBzdGFydFwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6L+b5YWl5b6u5L+hXCIpO1xyXG4gICAgICAgICAgICAgICAgLy9MYXlhLnRpbWVyLnNjYWxlPTE7XHJcbiAgICAgICAgICAgICAgICBpZiAoU2hhcmVNb2R1bGUuSXNTaGFyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgU2hhcmVNb2R1bGUuSXNTaGFyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWIhuS6q+WbnuWIsOa4uOaIj+aXtumXtFwiICsgdGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdhaXQgPSAodGltZSAtIFNoYXJlTW9kdWxlLlNoYXJlVGltZSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5YiG5Lqr5YGc55WZ5pe26Ze05Li677yaXCIgKyB3YWl0KTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2hhcmVTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXQgPj0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA8PSAwLjUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlU3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWUhEX1Nkay5DbGlja0FkKEZZSERfU2RrLkFkX0NsaWNrVHlwZS5TaGFyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVNoYXJlTW9kdWxlLmNhbGxiYWNrKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZU1vZHVsZS5jYWxsYmFjayh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd1RvYXN0KHsgdGl0bGU6IFwi5YiG5Lqr5oiQ5Yqf77yBXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVNoYXJlTW9kdWxlLmNhbGxiYWNrKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA8PSAwLjUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dUb2FzdCh7IHRpdGxlOiBcIuWIhuS6q+Wksei0pe+8gVwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXWFNkay5TaG93VG9hc3QoXCLor7fliIbkuqvliLDkuI3lkIznvqReLV5cIiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVNb2R1bGUuY2FsbGJhY2soZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGNhbGxiYWNrO1xyXG59IiwiaW1wb3J0IHsgTWFpbiB9IGZyb20gXCIuLi9NYWluXCI7XHJcbmltcG9ydCBOZXRNYW5hZ2VyIGZyb20gXCIuL05ldE1hbmFnZXJcIjtcclxuaW1wb3J0IHsgRGF0ZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vZ2FtZV9sb2dpYy9EYXRlQ29udHJvbGxlclwiO1xyXG5cclxuXHJcbmV4cG9ydCBlbnVtIFVzZXJDb25maWdOYW1lIHtcclxuICAgIHRyYWluLCBzaWduLCByZXdhcmRzXHJcbn1cclxuLy/nlKjmiLfkv6Hmga/lsZ7mgKdcclxuZXhwb3J0IGVudW0gVXNlckF0dHIge1xyXG4gICAgZXF1aXBfdHJhaW4sIHVzZXJfaWQsIHN0YWdlLCBnZXRfdHJhaW5zLCBtb25leSwgcHJvZ3Jlc3NfdHJhaW5zXHJcbn1cclxuZXhwb3J0IGNsYXNzIE5ldFVzZXJNb2RlbCB7XHJcbiAgICBwdWJsaWMgbV91c2VyX2Jhc2U6IE9iamVjdDtcclxuICAgIHB1YmxpYyBtX3VzZXJfaW52aXRlOiBPYmplY3Q7XHJcbiAgICBwdWJsaWMgbV91c2VyX2xvdHRlcnk6IG9iamVjdFxyXG4gICAgcHJpdmF0ZSBsb2dpblNldmVyVGltZTogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBtX3VzZXJfdHJlYXN1cmU6IG9iamVjdDtcclxuICAgIHB1YmxpYyBtX3VzZXJfYWNoaWV2ZW1lbnQ6IG9iamVjdDtcclxuICAgIHB1YmxpYyBtX3VzZXJfc2lnbjogT2JqZWN0O1xyXG4gICAgcHJpdmF0ZSBtX3VzZXJfYXJlbmE6IE9iamVjdDtcclxuICAgIHByaXZhdGUgbG9jYWxUaW1lOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbmlja25hbWU6IHN0cmluZztcclxuICAgIHB1YmxpYyBvcGVuaWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyB1c2VyaWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX3Rva2VuOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9jb25maWdzOiBPYmplY3Q7XHJcbiAgICBwdWJsaWMgbV9hcHBfc2V0dGluZzogT2JqZWN0O1xyXG4gICAgcHVibGljIG1fdXNlcjogT2JqZWN0O1xyXG4gICAgY29uc3RydWN0b3IoX3Rva2VuOiBzdHJpbmcsIF9jb25maWc6IE9iamVjdCwgX2FwcFNldHRpbmc6IE9iamVjdCwgX3VzZXI6IE9iamVjdCwgX3VzZXJiYXNlOiBPYmplY3QsIF91c2VJbnZpdGU6IE9iamVjdCwgX3VzZXJfbG90dGVyeTogT2JqZWN0LCBfdXNlcl90cmVhc3VyZTogT2JqZWN0LCB0LCBfdXNlcl9hY2hpZXZlbWVudCwgX3VzZXJfc2lnbiwgX3VzZXJfYXJlbmEpIHtcclxuICAgICAgICB0aGlzLmxvY2FsVGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgIHRoaXMubG9naW5TZXZlclRpbWUgPSB0O1xyXG4gICAgICAgIHRoaXMubV90b2tlbiA9IF90b2tlbjtcclxuICAgICAgICB0aGlzLm1fY29uZmlncyA9IF9jb25maWc7XHJcbiAgICAgICAgdGhpcy5tX2FwcF9zZXR0aW5nID0gX2FwcFNldHRpbmc7XHJcbiAgICAgICAgdGhpcy5tX3VzZXIgPSBfdXNlcjtcclxuICAgICAgICB0aGlzLm1fdXNlcl9iYXNlID0gX3VzZXJiYXNlO1xyXG4gICAgICAgIHRoaXMubV91c2VyX2ludml0ZSA9IF91c2VJbnZpdGU7XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfbG90dGVyeSA9IF91c2VyX2xvdHRlcnk7XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfdHJlYXN1cmUgPSBfdXNlcl90cmVhc3VyZTtcclxuICAgICAgICB0aGlzLm1fdXNlcl9hY2hpZXZlbWVudCA9IF91c2VyX2FjaGlldmVtZW50O1xyXG4gICAgICAgIHRoaXMubV91c2VyX3NpZ24gPSBfdXNlcl9zaWduO1xyXG4gICAgICAgIHRoaXMubV91c2VyX2FyZW5hID0gX3VzZXJfYXJlbmE7XHJcbiAgICAgICAgdGhpcy51c2VyaWQgPSB0aGlzLm1fdXNlcltcInVzZXJfaWRcIl07XHJcbiAgICAgICAgdGhpcy5vcGVuaWQgPSB0aGlzLm1fdXNlcl9iYXNlW1wib3BlbmlkXCJdO1xyXG4gICAgICAgIHRoaXMubmlja25hbWUgPSB0aGlzLm1fdXNlcl9iYXNlW1wibmlja25hbWVcIl07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IENmZyhjZmcpIHtcclxuICAgICAgICB0aGlzLm1fY29uZmlncyA9IGNmZztcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc2hhcmV0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJzaGFyZXRpdGxlXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1fYXBwX3NldHRpbmdbXCJzaGFyZXRpdGxlXCJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc2hhcmVpbWFnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJzaGFyZWltYWdlXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1fYXBwX3NldHRpbmdbXCJzaGFyZWltYWdlXCJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBHZXRDZmcodHlwZTogVXNlckNvbmZpZ05hbWUpOiBhbnkge1xyXG4gICAgICAgIHZhciBfdHlwZSA9IFVzZXJDb25maWdOYW1lW3R5cGVdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1fY29uZmlnc1tfdHlwZV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgR2V0VXNlckF0dHIoX2F0dHI6IFVzZXJBdHRyKSB7XHJcbiAgICAgICAgdmFyIGF0dHIgPSBVc2VyQXR0cltfYXR0cl07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubV91c2VyW2F0dHJdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBTZXJ2ZXJUaW1lKCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHRpbWUgPSBMYXlhLnRpbWVyLmN1cnJUaW1lcjtcclxuICAgICAgICBsZXQgc3RpbWUgPSB0aGlzLmxvZ2luU2V2ZXJUaW1lICsgTWF0aC5jZWlsKCh0aW1lIC0gdGhpcy5sb2NhbFRpbWUpIC8gMTAwMCk7XHJcbiAgICAgICAgcmV0dXJuIHN0aW1lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBHdWlkZUxldmVsKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIkd1aWRlTGV2ZWxcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJHdWlkZUxldmVsXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBCYW5uZXJNb3ZlVGltZSgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJCYW5uZXJNb3ZlVGltZVwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIkJhbm5lck1vdmVUaW1lXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IEhhdmVCYW5uZXIoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiSGF2ZUJhbm5lclwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIkhhdmVCYW5uZXJcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgSXNTaGFyZSgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJJc1NoYXJlXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiSXNTaGFyZVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBCdG5DYW5Nb3ZlKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIkJ0bkNhbk1vdmVcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJCdG5DYW5Nb3ZlXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IElTU2hhcmVUaGVuVmlkZW8oKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiSVNTaGFyZVRoZW5WaWRlb1wiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIklTU2hhcmVUaGVuVmlkZW9cIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgT3BlblNjZW5lVmFsdWUoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiT3BlblNjZW5lVmFsdWVcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJPcGVuU2NlbmVWYWx1ZVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgSXNPcGVuVHJ5T3V0KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIklzT3BlblRyeU91dFwiXSkge1xyXG4gICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIklzT3BlblRyeU91dFwiXSk7XHJcbiAgICAgICAgICAgIGlmIChudW0gPT0gMCkgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDwgbnVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHB1YmxpYyBKdW5kZ0NmZ0ZvckNkbihjYWxsYmFsbDogRnVuY3Rpb24pIHtcclxuICAgIC8vICAgICB0aGlzLm1fY29uZmlncyA9IG51bGw7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMubV9jb25maWdzKSB7XHJcbiAgICAvLyAgICAgICAgIGNhbGxiYWxsKCk7XHJcbiAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgdmFyIGNmZyA9IExheWEuTG9jYWxTdG9yYWdlLmdldEpTT04oTWFpbi5jZmcpO1xyXG4gICAgLy8gICAgICAgICBpZiAoY2ZnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoY2ZnLlZFUiA9PSB0aGlzLkdldENmZ1Zlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMubV9jb25maWdzID0gY2ZnO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Zn5a2Y5ZyoXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWxsKCk7XHJcbiAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Zn5a2Y5Zyo5L2G5piv6L+H5pyf5LqGXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTWFpbi5jZmcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIExheWEubG9hZGVyLmxvYWQoXCJjZmcuanNvblwiLCBuZXcgTGF5YS5IYW5kbGVyKHRoaXMsIChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Zn5LiL6L295a6M5oiQXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2Uuc2V0SlNPTihNYWluLmNmZywgZGF0YSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5tX2NvbmZpZ3MgPSBkYXRhO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjYWxsYmFsbCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0pKTtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgIExheWEubG9hZGVyLmxvYWQoXCJjZmcuanNvblwiLCBuZXcgTGF5YS5IYW5kbGVyKHRoaXMsIChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmfkuIvovb3lrozmiJBcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2Uuc2V0SlNPTihNYWluLmNmZywgZGF0YSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMubV9jb25maWdzID0gZGF0YTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjYWxsYmFsbCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgfSkpO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHB1YmxpYyBKdW5kZ0NmZyh2ZXIsIGNhbGxiYWxsOiBGdW5jdGlvbikge1xyXG4gICAgLy8gICAgIHRoaXMubV9jb25maWdzID0gbnVsbDtcclxuICAgIC8vICAgICBpZiAodGhpcy5tX2NvbmZpZ3MpIHtcclxuICAgIC8vICAgICAgICAgY2FsbGJhbGwodHJ1ZSk7XHJcbiAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgdmFyIGNmZyA9IExheWEuTG9jYWxTdG9yYWdlLmdldEpTT04oTWFpbi5DRkcpO1xyXG4gICAgLy8gICAgICAgICBpZiAoY2ZnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoY2ZnLlZFUiA9PSB2ZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLkNmZyA9IGNmZztcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLlt7Lnu4/mi6XmnIks5LiN55So5pu05pawXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIERhdGVDb250cm9sbGVyLlNldENmZygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWxsKHRydWUpO1xyXG4gICAgLy8gICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNmZ+WtmOWcqOS9huaYr+i/h+acn+S6hlwiKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKE1haW4uQ0ZHKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBOZXRNYW5hZ2VyLkluc3RhbmNlLlBvc3RDZmdSZXF1ZXN0KChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGRhdGEuVkVSID0gdmVyO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5zZXRKU09OKE1haW4uQ0ZHLCBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5DZmcgPSBkYXRhO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBEYXRlQ29udHJvbGxlci5TZXRDZmcoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhbGwodHJ1ZSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSwgKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLphY3nva7ojrflj5blpLHotKVcIiArIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjYWxsYmFsbChmYWxzZSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5pys5Zyw5rKh5pyJY2ZnXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgTmV0TWFuYWdlci5JbnN0YW5jZS5Qb3N0Q2ZnUmVxdWVzdCgoZGF0YSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2ZnXCIgKyBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBkYXRhLlZFUiA9IHZlcjtcclxuICAgIC8vICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5zZXRKU09OKE1haW4uQ0ZHLCBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLkNmZyA9IGRhdGE7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgRGF0ZUNvbnRyb2xsZXIuU2V0Q2ZnKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY2FsbGJhbGwodHJ1ZSk7XHJcbiAgICAvLyAgICAgICAgICAgICB9LCAoZGF0YSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6YWN572u6I635Y+W5aSx6LSlXCIgKyBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVc2VyTW9kZWwge1xyXG4gICAgcHVibGljIGdldCBDdXJNb2RlbCgpOiBOZXRVc2VyTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1ck1vZGVsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U7XHJcbiAgICBwdWJsaWMgbV9jb2RlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9nZW5kZXI6IG51bWJlcjtcclxuICAgIHB1YmxpYyBtX2NvdW50cnk6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKGNvZGU6IHN0cmluZywgbmlja25hbWU6IHN0cmluZywgYXZhdGFyOiBzdHJpbmcsIGdlbmRlcjogbnVtYmVyLCBjb3VudHJ5OiBzdHJpbmcsIHByb3ZpbmNlOiBzdHJpbmcsIGNpdHk6IHN0cmluZywgZGV2aWNlOiBzdHJpbmcsIHNoYXJlX2lkOiBzdHJpbmcsIHNjZW5lOiBzdHJpbmcpIHtcclxuICAgICAgICBVc2VyTW9kZWwuaW5zdGFuY2UgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMubV9jb2RlID0gY29kZTtcclxuICAgICAgICB0aGlzLm1fbmlja25hbWUgPSBuaWNrbmFtZSA/IG5pY2tuYW1lIDogXCLmuLjlrqJcIjtcclxuICAgICAgICB0aGlzLm1fYXZhdGFyID0gYXZhdGFyID8gYXZhdGFyIDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fZ2VuZGVyID0gZ2VuZGVyID8gZ2VuZGVyIDogMDtcclxuICAgICAgICB0aGlzLm1fY2l0eSA9IGNpdHkgPyBjaXR5IDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fZGV2aWNlID0gZGV2aWNlID8gZGV2aWNlIDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fc2hhcmVfaWQgPSBzaGFyZV9pZCA/IHNoYXJlX2lkIDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fc2NlbmUgPSBzY2VuZSA/IHNjZW5lIDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fY291bnRyeSA9IGNvdW50cnkgPyBjb3VudHJ5IDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fcHJvdmluY2UgPSBwcm92aW5jZSA/IHByb3ZpbmNlIDogXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBtX2NpdHk6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX2RldmljZTogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fc2hhcmVfaWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX3NjZW5lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBVc2VyTW9kZWwge1xyXG4gICAgICAgIGlmIChVc2VyTW9kZWwuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFVzZXJNb2RlbC5pbnN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIFVzZXJNb2RlbC5pbnN0YW5jZSA9IG5ldyBVc2VyTW9kZWwoXCIxMVwiLCBcIua4uOWuolwiLCBcIlwiLCBudWxsLCBcIlwiLCBcIlwiLCBcIlwiLCBcImlwaG9uZTZzXCIsIFwiXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gVXNlck1vZGVsLmluc3RhbmNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBtX3Byb3ZpbmNlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9uaWNrbmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fYXZhdGFyOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGN1ck1vZGVsOiBOZXRVc2VyTW9kZWw7XHJcbiAgICBwdWJsaWMgU2V0VXNlck1vZGVsKF9tb2RlbDogTmV0VXNlck1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5jdXJNb2RlbCA9IF9tb2RlbDtcclxuICAgIH1cclxuXHJcblxyXG59XHJcbiIsImltcG9ydCB7IE1haW4gfSBmcm9tIFwiLi4vTWFpblwiO1xyXG5pbXBvcnQgVmlld01hbmFnZXIgZnJvbSBcIi4uL2dhbWVfbG9naWMvVmlld01hbmFnZXJcIjtcclxuaW1wb3J0IHsgU2V0dGluZ0NvbnRyb2xsZXIgfSBmcm9tIFwiLi4vZ2FtZV9sb2dpYy9TZXR0aW5nQ29udHJvbGxlclwiO1xyXG5pbXBvcnQgeyBTaGFyZU1vZHVsZSB9IGZyb20gXCIuL1NoYXJlTW9kdWxlXCI7XHJcbmltcG9ydCBVc2VyTW9kZWwgZnJvbSBcIi4vVXNlck1vZGVsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgV1hTZGsge1xyXG4gICAgcHVibGljIHNldFNoYXJlSWQodGlkKSB7XHJcbiAgICAgICAgaWYgKHRpZCAhPSBcIlwiICYmIHRpZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hhcmVJZCA9IHRpZDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbTE9HXTogc2V0U2hhcmVPcGVuSWQudGlkPVwiLCB0aGlzLnNoYXJlSWQpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFdYU2RrO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogV1hTZGsge1xyXG4gICAgICAgIHJldHVybiBXWFNkay5pbnN0YW5jZSB8fCAoV1hTZGsuaW5zdGFuY2UgPSBuZXcgV1hTZGsoKSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIExvZGluaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZ2V0IGdldFNoYXJlSWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmVJZDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgU2hhcmVTY2VuZShzY2VuZVMpIHtcclxuICAgICAgICBpZiAoc2NlbmVTICE9IFwiXCIgJiYgc2NlbmVTICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zaGFyZVNjZW5lID0gc2NlbmVTO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBpbml0KGNiOiBhbnkpIHtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dTaGFyZU1lbnUoe1xyXG4gICAgICAgICAgICB3aXRoU2hhcmVUaWNrZXQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICAvL3RoaXMuc2hlemhpU2hhcmVNZXNzYWdlKG51bGwsIG51bGwpO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gub25TaG93KGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgICAgICAgICAgdmFyIHNoYXJlVGlja2V0ID0gb3B0aW9uLnNoYXJlVGlja2V0O1xyXG4gICAgICAgICAgICB2YXIgc2hhcmVpZCA9IG9wdGlvbi5xdWVyeS5zaGFyZWlkO1xyXG4gICAgICAgICAgICB2YXIgc2NlbmUgPSBkZWNvZGVVUklDb21wb25lbnQob3B0aW9uLnF1ZXJ5LnNjZW5lKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLlhajlsYBwYXRoPTpcIiwgb3B0aW9uLnBhdGgpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImRlY29kZVVSSUNvbXBvbmVudFwiLCBvcHRpb24ucXVlcnkuc2NlbmUpO1xyXG4gICAgICAgICAgICB2YXIgc2NlbmVRdWVyeSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbi5xdWVyeSk7XHJcbiAgICAgICAgICAgIGlmIChNYWluLnd4VmFsdWUgPT1cIlwiKSAge1xyXG4gICAgICAgICAgICAgICAgTWFpbi53eFZhbHVlID0gb3B0aW9uLnNjZW5lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic2NlbmVcIiwgb3B0aW9uLnNjZW5lKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJzY2VuZVF1ZXJ5XCIsIHNjZW5lUXVlcnkpO1xyXG4gICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG9wdGlvbi5xdWVyeS5jaGFubmVsO1xyXG4gICAgICAgICAgICB2YXIgYXBwaWQ7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb24ucmVmZXJyZXJJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlZmVycmVySW5mbzpcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbi5yZWZlcnJlckluZm8pKTtcclxuICAgICAgICAgICAgICAgIGFwcGlkID0gb3B0aW9uLnJlZmVycmVySW5mby5hcHBJZDtcclxuICAgICAgICAgICAgICAgIGlmIChhcHBpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib25TaG93IGFwcGlzIGlzOlwiLCBhcHBpZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib25TaG93IGFwcGlzIGlzIG51bGxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlZmVycmVySW5mb+S4uuepulwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2hhbm5lbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm9uU2hvdyBjaGFubmVsIGlzOlwiLCBjaGFubmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYihzaGFyZVRpY2tldCwgc2hhcmVpZCwgY2hhbm5lbCwgYXBwaWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBTaGFyZVNjZW5lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNoYXJlU2NlbmU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFNoYXJlTWVzc2FnZSh0aXRsZT8sIGltYWdlVXJsPykge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHQ6IG51bWJlciA9IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5TZXJ2ZXJUaW1lO1xyXG4gICAgICAgIHZhciBfdGl0bGUgPSB0aXRsZTtcclxuICAgICAgICB2YXIgX3VybCA9IGltYWdlVXJsO1xyXG4gICAgICAgIGlmICghX3RpdGxlKSB7XHJcbiAgICAgICAgICAgIF90aXRsZSA9IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5zaGFyZXRpdGxlO1xyXG4gICAgICAgICAgICBfdXJsID0gVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnNoYXJlaW1hZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gub25TaGFyZUFwcE1lc3NhZ2UoKCkgPT4gKHtcclxuICAgICAgICAgICAgdGl0bGU6IF90aXRsZSxcclxuICAgICAgICAgICAgaW1hZ2VVcmw6IF91cmwsXHJcbiAgICAgICAgICAgIHF1ZXJ5OiBcInNoYXJlaWQ9XCIgKyBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwudXNlcmlkICsgXCJfXCIgKyB0ICsgXCJfXCIgKyBNYXRoLmZsb29yKDk5OTkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygpXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHd4X2xvZ2luKGNiOiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmIChXWFNkay5Mb2RpbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFdYU2RrLkxvZGluaW5nID0gdHJ1ZTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkV4Y3V0ZSB3eC5sb2dpbiEgc2hhcmVPcGVuSWQ6IFwiICsgdGhpcy5zaGFyZUlkKTtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmxvZ2luKHtcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3eC5sb2dpbjogc3VjY2VzcyEgcmVzLmNvZGU9XCIgKyByZXMuY29kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBXWFNkay5Mb2RpbmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5bCG6KaB5Lyg6YCS55qE5Y+C5pWwOlwiICsgcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICBjYihyZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+iOt+WPlueUqOaIt+eZu+W9leaAgeWksei0pe+8gScgKyByZXMuZXJyTXNnKTtcclxuICAgICAgICAgICAgICAgICAgICBjYihcImVycm9yXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykgeyBjb25zb2xlLmxvZyhcInd4LmxvZ2luOiBmYWlsZWQsIHJlcz1cIiArIHJlcyk7IFdYU2RrLkxvZGluaW5nID0gZmFsc2U7IGNiKFwiZXJyb3JcIik7IH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2hhcmVJZCA9IFwiXCI7XHJcbiAgICBwcml2YXRlIHNoYXJlU2NlbmUgPSBcIlwiO1xyXG4gICAgLy/mmL7npLrliqDovb3kv6Hmga9cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hvd0xvYWRpbmcodGl0bGU6IHN0cmluZyA9IFwi5Yqg6L295LitLi4uXCIsIGlzU2hvd1d4ID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93ICYmIExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgICAgICAgICAgaWYgKGlzU2hvd1d4KSB7XHJcbiAgICAgICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dMb2FkaW5nKHsgdGl0bGU6IHRpdGxlLCBtYXNrOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFZpZXdNYW5hZ2VyLkluc3RhbmNlLk9wZW5NYXNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBTeXN0ZW1JbmZvKCkge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmdldFN5c3RlbUluZm9TeW5jKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gcHJpdmF0ZSBzdGF0aWMgYnV0dG9uO1xyXG4gICAgLy8gcHVibGljIHN0YXRpYyBzaG93YmpXeEdhbWVRdWFuKGZsYWc6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIC8vICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCA9PSBudWxsKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgaWYgKGZsYWcpIHtcclxuICAgIC8vICAgICAgICAgaWYgKFdlaVhpblNESy5idXR0b24gPT0gbnVsbCkge1xyXG4gICAgLy8gICAgICAgICAgICAgbGV0IGluZm8gPSBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmdldFN5c3RlbUluZm9TeW5jKCk7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoIWluZm8pIHJldHVybjtcclxuICAgIC8vICAgICAgICAgICAgIHZhciB0b3AgPSA0NzQgKiBpbmZvLndpbmRvd0hlaWdodCAvIExheWEuc3RhZ2UuaGVpZ2h0O1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIGhlaWdodCA9IDk0ICogaW5mby53aW5kb3dIZWlnaHQgLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgIC8vICAgICAgICAgICAgIHZhciB3aWR0aCA9IGhlaWdodCAqIDk1IC8gOTQ7XHJcbiAgICAvLyAgICAgICAgICAgICBXZWlYaW5TREsuYnV0dG9uID0gTGF5YS5Ccm93c2VyLndpbmRvdy53eC5jcmVhdGVHYW1lQ2x1YkJ1dHRvblxyXG4gICAgLy8gICAgICAgICAgICAgICAgICh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW1hZ2VcIixcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6ICdyZXMvd3gucG5nJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3R5bGU6XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHRvcCxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICBXZWlYaW5TREsuYnV0dG9uLnNob3coKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChXZWlYaW5TREsuYnV0dG9uKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBXZWlYaW5TREsuYnV0dG9uLmhpZGUoKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuICAgIC8v6YCA5Ye6XHJcblxyXG5cclxuICAgIC8vIOaYvuekuuaPkOekuuS/oeaBry8vXHJcbiAgICBwdWJsaWMgc3RhdGljIFNob3dUb2FzdCh0ZXh0OiBzdHJpbmcsIGljb24gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgICAgICAgICAgdmFyIHRfaWNvbiA9IGljb24gPyBcInN1Y2Nlc3NcIiA6IFwibm9uZVwiO1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dUb2FzdCh7IHRpdGxlOiB0ZXh0LCBpY29uOiB0X2ljb24gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLzE6cGV0IDI65Lq654mpXHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIFhpYW5TaGlfTW9kZWwoY29udGVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24gPSBudWxsLCB0eXBlID0gMSwgdGl0bGUgPSBcIlwiKSB7XHJcbiAgICAvLyAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cgJiYgTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgLy8gICAgICAgICBpZiAodHlwZSA9PSAxKSB7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgY2FuY2VsVGV4dCA9IFwi5q6L5b+N5Lii5o6JXCI7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgY29uZmlybVRleHQgPSBcIuW4puS4iuS4gOi1t1wiO1xyXG4gICAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIGNhbmNlbFRleHQgPSBcIuS4jeaDs1wiO1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIGNvbmZpcm1UZXh0ID0gXCLmg7NcIjtcclxuICAgIC8vICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5zaG93TW9kYWwoe1xyXG4gICAgLy8gICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgLy8gICAgICAgICAgICAgY29udGVudDogY29udGVudCxcclxuICAgIC8vICAgICAgICAgICAgIGNhbmNlbFRleHQ6IGNhbmNlbFRleHQsXHJcbiAgICAvLyAgICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXHJcbiAgICAvLyAgICAgICAgICAgICBzdWNjZXNzKHJlcykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmIChyZXMuY29uZmlybSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye756Gu5a6aJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRydWUpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9LFxyXG4gICAgLy8gICAgICAgICAgICAgZmFpbChyZXM/KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+eUqOaIt+eCueWHu+WPlua2iCcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlKTtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfSlcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFNob3J0VmlicmF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCAmJiBTZXR0aW5nQ29udHJvbGxlci5JbnN0YW5jZS52aWJyYXRlKSB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gudmlicmF0ZVNob3J0KHt9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBMb25nVmlicmF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCAmJiBTZXR0aW5nQ29udHJvbGxlci5JbnN0YW5jZS52aWJyYXRlKSB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gudmlicmF0ZUxvbmcoe30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgSGlkZUxvYWRpbmcoaXNTaG93V3ggPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cgJiYgTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICBpZiAoaXNTaG93V3gpIHtcclxuICAgICAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guaGlkZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBWaWV3TWFuYWdlci5JbnN0YW5jZS5DbG9zZU1hc2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFN1Y2Nlc3Moc3RhZ2VJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmFsZFN0YWdlLm9uRW5kKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGFnZUlkOiBzdGFnZUlkLCAgICAgLy/lhbPljaFJRCDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIHN0YWdlTmFtZTogXCLnrKxcIiArIHN0YWdlSWQgKyBcIuWFs1wiLCAvL+WFs+WNoeWQjeensCAg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBldmVudDogXCJjb21wbGV0ZVwiLCAgIC8v5YWz5Y2h5a6M5oiQICDlhbPljaHov5vooYzkuK3vvIznlKjmiLfop6blj5HnmoTmk43kvZwgICAg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6XHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcIuWFs+WNoeWujOaIkFwiICAgLy/mj4/ov7BcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgIH1cclxuICAgIC8v6K6w5b2V6Zi/5ouJ5LiB5LqL5Lu2XHJcbiAgICBwdWJsaWMgc3RhdGljIEFsZEV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBrZXk/OiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cgJiYgTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICBpZiAoIWtleSkga2V5ID0gXCLnlKjmiLdpZFwiO1xyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU2VuZEV2ZW50KGV2ZW50TmFtZSwgeyBrZXk6IHZhbHVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgRmFpbChzdGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU3RhZ2Uub25FbmQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YWdlSWQ6IHN0YWdlSWQsICAgICAvL+WFs+WNoUlEIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgc3RhZ2VOYW1lOiBcIuesrFwiICsgc3RhZ2VJZCArIFwi5YWzXCIsIC8v5YWz5Y2h5ZCN56ewICDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBcImZhaWxcIiwgICAvL+WFs+WNoeWujOaIkCAg5YWz5Y2h6L+b6KGM5Lit77yM55So5oi36Kem5Y+R55qE5pON5L2cICAgIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zOlxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXCLlhbPljaHlpLHotKVcIixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgIH1cclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgbGV2ZWxlUnVuaW5nKHN0YWdlSWQ6IHN0cmluZywgdXNlcmlkOiBzdHJpbmcsIGV2ZW50dHlwZTogbnVtYmVyLCBpdGVtTmFtZTogc3RyaW5nKSB7XHJcbiAgICAvLyAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cgJiYgTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgLy8gICAgICAgICAvL0xheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU3RhZ2Uub25SdW5uaW5nKHtcInN0YWdlSWRcIjpzdGFnZUlkLFwic3RhZ2VOYW1lXCI6c3RhZ2VOYW1lLFwidXNlcklkXCI6dXNlcmlkfSk7XHJcbiAgICAvLyAgICAgICAgIHZhciBldmVudFQgPSBldmVudHR5cGUgPT0gMCA/IFwiYXdhcmRcIiA6IFwicmV2aXZlXCI7XHJcbiAgICAvLyAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU3RhZ2Uub25SdW5uaW5nKHtcclxuICAgIC8vICAgICAgICAgICAgIHN0YWdlSWQ6IHN0YWdlSWQsXHJcbiAgICAvLyAgICAgICAgICAgICBzdGFnZU5hbWU6IFwi56ysXCIgKyBzdGFnZUlkICsgXCLlhbNcIixcclxuICAgIC8vICAgICAgICAgICAgIHVzZXJJZDogdXNlcmlkLFxyXG4gICAgLy8gICAgICAgICAgICAgZXZlbnQ6IGV2ZW50VCxcclxuICAgIC8vICAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBpdGVtTmFtZSxcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfSlcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBTdGFydChzdGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU3RhZ2Uub25TdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhZ2VJZDogc3RhZ2VJZCwgICAgIC8v5YWz5Y2hSUQg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBzdGFnZU5hbWU6IFwi56ysXCIgKyBzdGFnZUlkICsgXCLlhbNcIiwgLy/lhbPljaHlkI3np7AgIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBHYW1lX1NoYXJlKGNhbGxiYWNrOiBGdW5jdGlvbiA9IG51bGwsIGNoYW5uZWw6IHN0cmluZyA9IFwiXCIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB1cmw7XHJcbiAgICAgICAgdmFyIHRpdGxlO1xyXG4gICAgICAgIHVybCA9IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5zaGFyZWltYWdlO1xyXG4gICAgICAgIHRpdGxlID0gVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnNoYXJldGl0bGU7XHJcbiAgICAgICAgY29uc29sZS5sb2codXJsICsgXCIgIFwiICsgdGl0bGUpO1xyXG5cclxuICAgICAgIFxyXG4gICAgICAgIGlmIChjaGFubmVsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gV2VpWGluU0RLLkFsZEV2ZW50KFwi55So5oi35YiG5LqrXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdDogbnVtYmVyOy8vID0gVXNlck1vZGVsLkdldF9JbnN0YW5jZS5DdXJNb2RlbC5IdW9RdV9TZXJ2ZXJUaW1lO1xyXG4gICAgICAgIHZhciBwYXRoID0gXCJcIjtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmFsZFNoYXJlQXBwTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgaW1hZ2VVcmw6IHVybCxcclxuICAgICAgICAgICAgcXVlcnk6IFwic2hhcmVpZD1cIiArIFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC51c2VyaWQgKyBcIl9cIiArIFwib3RoZXJcIiArIFwiX1wiICsgdCArIFwiX1wiICsgTWF0aC5mbG9vcig5OTk5ICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoKSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgU2hhcmVNb2R1bGUuR29TaGFyZShjYWxsYmFjayk7XHJcblxyXG4gICAgfVxyXG59IiwiXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpY3Rpb25hcnkge1xyXG4gICAgcHJpdmF0ZSBfbGVuZ3RoOiBudW1iZXI7XHJcblxyXG4gICAgcHJpdmF0ZSBfY29udGFpbmVyOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0ge307XHJcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGNvbnRhaW5lcigpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ojrflj5blrZflhbjplb/luqYgICAgXHJcbiAgICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5re75YqgXHJcbiAgICBwdWJsaWMgc2V0KGtleTogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgIHtcclxuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lcltrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy/liKDpmaQgICAgIFxyXG4gICAgcHVibGljIGRlbGV0ZShrZXk6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbnRhaW5lcltrZXldO1xyXG4gICAgICAgICAgICB0aGlzLl9sZW5ndGgtLTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy/mn6Xmib4gICBcclxuICAgIHB1YmxpYyBoYXMoa2V5OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyLmhhc093blByb3BlcnR5KGtleSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ojrflj5YgXHJcbiAgICBwdWJsaWMgZ2V0KGtleTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyLmhhc093blByb3BlcnR5KGtleSkpICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJba2V5XTtcclxuICAgICAgICB9IGVsc2UgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL+a4heepuiAgICBcclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLl9jb250YWluZXIgPSB7fTtcclxuICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJpbXBvcnQgeyB1aSB9IGZyb20gXCIuLi91aS9sYXlhTWF4VUlcIjtcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0V2ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgeyBSb2xlQ29udHJvbGxlciB9IGZyb20gXCIuLi9nYW1lX2xvZ2ljL1JvbGVDb250cm9sbGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgZ2FtZV91aSBleHRlbmRzIHVpLmdhbWVfdWlVSSBpbXBsZW1lbnRzIFVJX0ludGVyZmFjZSB7XHJcblxyXG5cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMucmVzaXplSGFuZGVyKCk7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9uKExheWEuRXZlbnQuUkVTSVpFLCB0aGlzLCB0aGlzLnJlc2l6ZUhhbmRlcik7XHJcbiAgICB9XHJcbiAgICByZXNpemVIYW5kZXIoKSB7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgIH1cclxuICAgIE9uU2hvdyhkYXRhPzogYW55KSB7XHJcbiAgICAgICAgdGhpcy5VaUV2ZW50SGFuZGxlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIFVpRXZlbnRIYW5kbGVyKCkge1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9ET1dOLCB0aGlzLCB0aGlzLk9uQ2xpY2tEb3duKTtcclxuICAgICAgICB0aGlzLm9uKExheWEuRXZlbnQuTU9VU0VfVVAsIHRoaXMsIHRoaXMuT25DbGlja1VwKTtcclxuICAgICAgICB0aGlzLm9uKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLk9uQ2xpY2tVcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc2Rvd249ZmFsc2U7XHJcbiAgICBPbkNsaWNrRG93bihlOiBMYXlhLkV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0IGluc3RhbmNlb2YgTGF5YS5VSUNvbXBvbmVudCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNkb3duPXRydWU7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX01PVkUsIHRoaXMsIHRoaXMuT25TbGlkZXIpO1xyXG4gICAgICAgIHRoaXMuY3VyTW91c2VQb3MgPSBuZXcgTGF5YS5WZWN0b3IyKExheWEuTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCwgTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZKTtcclxuICAgIH1cclxuICAgIE9uQ2xpY2tVcCgpIHtcclxuICAgICAgICBpZighdGhpcy5pc2Rvd24pcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNkb3duPWZhbHNlO1xyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfTU9WRSwgdGhpcywgdGhpcy5PblNsaWRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgY3VyTW91c2VQb3M6IExheWEuVmVjdG9yMjtcclxuICAgIE9uU2xpZGVyKCkge1xyXG4gICAgICAgIHZhciBNb3VzZVBvcyA9IG5ldyBMYXlhLlZlY3RvcjIoTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYLCBMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkpO1xyXG4gICAgICAgIHZhciBvZmZlc3RYID0gTW91c2VQb3MueCAtIHRoaXMuY3VyTW91c2VQb3MueDtcclxuICAgICAgICBpZiAob2ZmZXN0WCA+IDApIG9mZmVzdFggPSBvZmZlc3RYIDwgNSA/IG9mZmVzdFggOiA1O1xyXG4gICAgICAgIGlmIChvZmZlc3RYIDwgMCkgb2ZmZXN0WCA9IG9mZmVzdFggPiAtNSA/IG9mZmVzdFggOiAtNTtcclxuICAgICAgICB2YXIgcm90YXRlRGlyID0gbmV3IExheWEuVmVjdG9yMygwLCBvZmZlc3RYICogMC4wMSwgMCk7XHJcbiAgICAgICAgUm9sZUNvbnRyb2xsZXIuSW5zdGFuY2UuUm9sZVJvdGF0aW9uKHJvdGF0ZURpcik7XHJcbiAgICAgICAgdGhpcy5jdXJNb3VzZVBvcyA9IG5ldyBMYXlhLlZlY3RvcjIoTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYLCBMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkpOztcclxuICAgIH1cclxuICAgIE9uQ2xvc2UoKSB7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9mZihMYXlhLkV2ZW50LlJFU0laRSwgdGhpcywgdGhpcy5yZXNpemVIYW5kZXIpO1xyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5PbkNsaWNrRG93bik7XHJcbiAgICAgICAgdGhpcy5vZmYoTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5PbkNsaWNrVXApO1xyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLk9uQ2xpY2tVcCk7XHJcbiAgICB9XHJcbn0iLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cbmltcG9ydCBWaWV3PUxheWEuVmlldztcclxuaW1wb3J0IERpYWxvZz1MYXlhLkRpYWxvZztcclxuaW1wb3J0IFNjZW5lPUxheWEuU2NlbmU7XG52YXIgUkVHOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcbmV4cG9ydCBtb2R1bGUgdWkge1xyXG4gICAgZXhwb3J0IGNsYXNzIGdhbWVfdWlVSSBleHRlbmRzIFNjZW5lIHtcclxuICAgICAgICBwdWJsaWMgc3RhdGljICB1aVZpZXc6YW55ID17XCJ0eXBlXCI6XCJTY2VuZVwiLFwicHJvcHNcIjp7XCJ3aWR0aFwiOjcyMCxcImhlaWdodFwiOjEyODB9LFwibG9hZExpc3RcIjpbXSxcImxvYWRMaXN0M0RcIjpbXX07XHJcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoZ2FtZV91aVVJLnVpVmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgUkVHKFwidWkuZ2FtZV91aVVJXCIsZ2FtZV91aVVJKTtcclxufVxyIl19
|