123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- (function() {
- var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
- var __module = nodeEnv ? module : {exports:{}};
- var __filename = 'preview-scripts/assets/script/plat/PlatformHaiTuoH5.js';
- var __require = nodeEnv ? function (request) {
- return cc.require(request);
- } : function (request) {
- return __quick_compile_project__.require(request, __filename);
- };
- function __define (exports, require, module) {
- if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
- cc._RF.push(module, '41220ca5RFCxL2IQ5Qfron9', 'PlatformHaiTuoH5');
- // script/plat/PlatformHaiTuoH5.ts
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- Object.defineProperty(exports, "__esModule", { value: true });
- var gameCfg_1 = require("../common/gameCfg");
- var gameMethod_1 = require("../common/gameMethod");
- var Xyc_1 = require("../common/Xyc");
- var Config_1 = require("../Config");
- var EventConst_1 = require("../data/const/EventConst");
- var TypeConst_1 = require("../data/const/TypeConst");
- var GameDataCenter_1 = require("../data/GameDataCenter");
- var GameController_1 = require("../GameController");
- var UIHelp_1 = require("../logic/ui/UIHelp");
- var EventMng_1 = require("../manager/EventMng");
- var PlatformBase_1 = require("./PlatformBase");
- var PlatformHaiTuoH5 = /** @class */ (function (_super) {
- __extends(PlatformHaiTuoH5, _super);
- function PlatformHaiTuoH5() {
- var _this = _super.call(this) || this;
- cc.game.on(cc.game.EVENT_SHOW, function () {
- if (_this.isGoPay) {
- _this.isGoPay = false;
- if (Config_1.default.paySuccAdokId != null) {
- clearInterval(Config_1.default.paySuccAdokId);
- Config_1.default.paySuccAdokId = null;
- }
- Config_1.default.paySuccAdokIndex = 0;
- Config_1.default.paySuccAdokId = setInterval(function () {
- Config_1.default.paySuccAdokIndex++;
- if (Config_1.default.paySuccAdokIndex >= 5) {
- clearInterval(Config_1.default.paySuccAdokId);
- Config_1.default.paySuccAdokId = null;
- }
- GameDataCenter_1.default.time.sendAdok();
- }, 1000);
- }
- });
- window['DHMiniH5SDK'].setSwitchAccountNotification(function (callbackData) {
- console.log("SwitchAccount data=>", JSON.stringify(callbackData));
- window['DHMiniH5SDK'].logout(function () {
- });
- });
- window['DHMiniH5SDK'].setLogoutNotification(function () {
- GameDataCenter_1.default.sevBack = null;
- Config_1.default.inGame = TypeConst_1.InGame.no;
- // this.restart()
- cc.game.restart();
- });
- //防沉迷
- if (window['DHMiniH5SDK'].isDhApp) {
- console.log("注册防沉迷强制下线监听");
- window['DHMiniH5SDK'].gamePreventAddiction(function (reponse) {
- // 在被强制下线后的回调函数中,理论上游戏应按如下步骤执行相关操作:
- // 第一步,清除当前登录的账号角色等信息
- // 第二步,重回游戏起始页
- // 第三步,再次调用 sdk.login 接口以拉起登录窗口
- console.log("触发防沉迷强制下线,游戏重启");
- var cb = function () {
- GameDataCenter_1.default.sevBack = null;
- Config_1.default.inGame = TypeConst_1.InGame.no;
- // this.restart()
- cc.game.restart();
- };
- UIHelp_1.default.ShowDialog({
- content: "根据国家新闻出版署 《关于防止未成年人沉迷网络游戏的通知》、《关于进一步严格管理切实防止未成年人沉迷网络游戏的通知》的要求,您已超出今日健康体验时限,游戏将强制退出。",
- title: "防沉迷调整通知",
- txtConfirm: "我知道了",
- onlyConfirm: true,
- cbConfirm: cb
- });
- });
- }
- return _this;
- }
- PlatformHaiTuoH5.prototype.showLoginView = function () {
- var _this = this;
- console.log("MiniH5初始化&登录SDK");
- EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 0.25, "login");
- var packageInfo = gameCfg_1.default.packageInfo.getItem(Config_1.default.pid);
- var productCode = packageInfo.params[0]; //QuickSDK后台自动分配
- var productKey = packageInfo.params[1]; //QuickSDK后台自动分配
- try {
- window['DHMiniH5SDK'].login(function (result) {
- console.log("login data=", JSON.stringify(result));
- // EventMng.emit(LoadEvent.LOAD_MESSAGE, JSON.stringify(result))
- if (result.code == 0) {
- var data = result.data;
- EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 0.75, "login");
- var params_1 = {
- pid: Config_1.default.pid,
- param: [data.accountId, data.loginType, data.token]
- };
- setTimeout(function () {
- //电魂sdk漏斗打点
- if (window['DHMiniH5SDK']) {
- window['DHMiniH5SDK'].analytics.log({
- eventId: "420000::GAME_CLIENT_LOGIN_START",
- subEventId: "0",
- logLevel: "d",
- logContent: "游戏客户端开始请求登录游戏服",
- accountId: window['DHMiniH5SDK'].userInfo.accountId
- }, function (params) {
- console.log(params);
- });
- }
- GameController_1.default.network.send(Xyc_1.PlayerLogin.url, params_1, function (result) {
- console.log("后段验证返回");
- if (result.type != 1) {
- if (gameMethod_1.gameMethod.isEmpty(result.win) || gameMethod_1.gameMethod.isEmpty(result.win.msgOut)) {
- GameDataCenter_1.default.plat.showErrDialog(TypeConst_1.GameErrCode.errGamePlatLogin);
- }
- return;
- }
- EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 1, "login");
- if (result.type == 1 && result.platBack) {
- _this.openId = result.platBack.openid;
- _this.loginParams = [result.platBack.token];
- console.log("后端验证成功", _this.openId);
- _this.login();
- //电魂sdk漏斗打点
- if (window['DHMiniH5SDK']) {
- window['DHMiniH5SDK'].analytics.log({
- eventId: "450000::GAME_CLIENT_LOGIN_SUCCESS",
- subEventId: "0",
- logLevel: "d",
- logContent: "游戏客户端登录成功",
- accountId: window['DHMiniH5SDK'].userInfo.accountId
- }, function (params) {
- console.log(params);
- });
- }
- }
- else {
- console.log("PlayerLogin.url 返回数据异常");
- if (gameMethod_1.gameMethod.isEmpty(result.win) || gameMethod_1.gameMethod.isEmpty(result.win.msgOut)) {
- GameDataCenter_1.default.plat.showErrDialog(TypeConst_1.GameErrCode.errGamePlatLogin);
- }
- }
- });
- }, 1000);
- }
- else {
- UIHelp_1.default.ShowTips("登录失败");
- // GameDataCenter.plat.instance.restart()
- }
- });
- }
- catch (error) {
- UIHelp_1.default.ShowTips("----" + error);
- // UIHelp.ShowDialog({ content: error })
- }
- };
- PlatformHaiTuoH5.prototype.pay = function (orderId, order10cs, param) {
- var _this = this;
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
- this.isGoPay = true;
- var serverList = GameDataCenter_1.default.user.serverList;
- var serverName = (_b = (_a = GameDataCenter_1.default.sevBack.userInfo) === null || _a === void 0 ? void 0 : _a.a) === null || _b === void 0 ? void 0 : _b.sid;
- for (var _i = 0, serverList_1 = serverList; _i < serverList_1.length; _i++) {
- var iterator = serverList_1[_i];
- if (iterator.sid == ((_d = (_c = GameDataCenter_1.default.sevBack.userInfo) === null || _c === void 0 ? void 0 : _c.a) === null || _d === void 0 ? void 0 : _d.sid)) {
- serverName = iterator.name;
- break;
- }
- }
- var payData = {
- serverId: parseInt((_f = (_e = GameDataCenter_1.default.sevBack.userInfo) === null || _e === void 0 ? void 0 : _e.a) === null || _f === void 0 ? void 0 : _f.sid),
- serverName: serverName,
- roleId: parseInt((_h = (_g = GameDataCenter_1.default.sevBack.userInfo) === null || _g === void 0 ? void 0 : _g.a) === null || _h === void 0 ? void 0 : _h.uuid),
- roleName: (_k = (_j = GameDataCenter_1.default.sevBack.userInfo) === null || _j === void 0 ? void 0 : _j.a) === null || _k === void 0 ? void 0 : _k.name,
- roleLevel: (_m = (_l = GameDataCenter_1.default.sevBack.userInfo) === null || _l === void 0 ? void 0 : _l.a) === null || _m === void 0 ? void 0 : _m.level,
- productId: param.productId,
- productName: param.productName,
- productNum: 1,
- price: param.price * 100,
- currencyType: "CNY",
- cpOrderId: orderId,
- areaId: Config_1.default.pid,
- areaName: Config_1.default.pid,
- memo: orderId
- };
- console.log("拉取支付的参数:", JSON.stringify(payData));
- window['DHMiniH5SDK'].payment(payData, function (response) {
- var _a, _b;
- if (response.code == 0) { // 支付成功
- window['DHMiniH5SDK'].analytics.pay({
- accountId: window['DHMiniH5SDK'].userInfo.accountId,
- roleId: window['DHMiniH5SDK'].userInfo.accountId,
- roleLevel: (_b = (_a = GameDataCenter_1.default.sevBack.userInfo) === null || _a === void 0 ? void 0 : _a.a) === null || _b === void 0 ? void 0 : _b.level,
- orderId: orderId,
- itemId: param.productId,
- payAmount: param.price
- }, function (params) {
- console.log(params);
- });
- //电魂sdk漏斗打点
- if (window['DHMiniH5SDK']) {
- window['DHMiniH5SDK'].analytics.log({
- eventId: "510000::GAME_CLIENT_PAY_SUCCESS",
- subEventId: "0",
- logLevel: "d",
- logContent: "发放支付道具至玩家",
- accountId: window['DHMiniH5SDK'].userInfo.accountId
- }, function (params) {
- console.log(params);
- });
- }
- _this.isGoPay = false;
- if (Config_1.default.paySuccAdokId != null) {
- clearInterval(Config_1.default.paySuccAdokId);
- Config_1.default.paySuccAdokId = null;
- }
- Config_1.default.paySuccAdokIndex = 0;
- Config_1.default.paySuccAdokId = setInterval(function () {
- Config_1.default.paySuccAdokIndex++;
- if (Config_1.default.paySuccAdokIndex >= 5) {
- clearInterval(Config_1.default.paySuccAdokId);
- Config_1.default.paySuccAdokId = null;
- }
- GameDataCenter_1.default.time.sendAdok();
- }, 1000);
- }
- else { // 其他,支付失败
- }
- });
- };
- // 上报角色数据
- PlatformHaiTuoH5.prototype.reportRole = function (event) {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
- // • 初始化成功后调⽤. • 进⼊区服、创⻆、⻆⾊等级更新、战⼒更新时调⽤.
- if (GameDataCenter_1.default.sevBack == null) {
- return;
- }
- if (GameDataCenter_1.default.sevBack.userInfo == null) {
- return;
- }
- console.log("上报角色数据:", event);
- var onlineTime = 0;
- if (GameDataCenter_1.default.time.onlineTime > 0) {
- onlineTime = GameDataCenter_1.default.time.sevTime - GameDataCenter_1.default.time.onlineTime;
- }
- var isCreateRole = false;
- var level = (_b = (_a = GameDataCenter_1.default.sevBack.userInfo) === null || _a === void 0 ? void 0 : _a.a) === null || _b === void 0 ? void 0 : _b.level;
- var type = "";
- switch (event) {
- case TypeConst_1.ReportRoleType.create:
- isCreateRole = true;
- type = "CREATE_ROLE";
- //电魂sdk漏斗打点
- if (window['DHMiniH5SDK']) {
- window['DHMiniH5SDK'].analytics.log({
- eventId: "450001::GAME_CLIENT_CREATING_A_ROLE",
- subEventId: "0",
- logLevel: "d",
- logContent: "游戏客户端创角成功",
- accountId: window['DHMiniH5SDK'].userInfo.accountId
- }, function (params) {
- console.log(params);
- });
- }
- // window['DHMiniH5SDK'].analytics.register({accountId: window['DHMiniH5SDK'].userInfo.accountId}, params => {
- // console.log(params);
- // });
- break;
- case TypeConst_1.ReportRoleType.levelup:
- type = "LEVEL_UP";
- level++;
- break;
- case TypeConst_1.ReportRoleType.offline:
- break;
- case TypeConst_1.ReportRoleType.online:
- type = "LOGIN_GAME";
- break;
- case TypeConst_1.ReportRoleType.other:
- break;
- default:
- break;
- }
- var power = 1;
- if (gameMethod_1.gameMethod.isEmpty(GameDataCenter_1.default.sevBack)) {
- power = 1;
- }
- else {
- var eps = gameMethod_1.gameMethod.ep_all(GameDataCenter_1.default.sevBack);
- var power1 = gameMethod_1.gameMethod.ep_power(0, eps);
- power = power1;
- }
- var serverName = GameDataCenter_1.default.user.getServerNameBySid((_d = (_c = GameDataCenter_1.default.sevBack.userInfo) === null || _c === void 0 ? void 0 : _c.a) === null || _d === void 0 ? void 0 : _d.sid) || ((_f = (_e = GameDataCenter_1.default.sevBack.userInfo) === null || _e === void 0 ? void 0 : _e.a) === null || _f === void 0 ? void 0 : _f.sid);
- var roleInfo = {
- type: type,
- isCreateRole: isCreateRole,
- roleCreateTime: (_h = (_g = GameDataCenter_1.default.sevBack.userInfo) === null || _g === void 0 ? void 0 : _g.a) === null || _h === void 0 ? void 0 : _h.regtime,
- uid: GameDataCenter_1.default.plat.instance.openId,
- username: (_k = (_j = GameDataCenter_1.default.sevBack.userInfo) === null || _j === void 0 ? void 0 : _j.a) === null || _k === void 0 ? void 0 : _k.name,
- serverId: (_m = (_l = GameDataCenter_1.default.sevBack.userInfo) === null || _l === void 0 ? void 0 : _l.a) === null || _m === void 0 ? void 0 : _m.sid,
- serverName: serverName,
- userRoleName: (_p = (_o = GameDataCenter_1.default.sevBack.userInfo) === null || _o === void 0 ? void 0 : _o.a) === null || _p === void 0 ? void 0 : _p.name,
- userRoleId: (_r = (_q = GameDataCenter_1.default.sevBack.userInfo) === null || _q === void 0 ? void 0 : _q.a) === null || _r === void 0 ? void 0 : _r.uuid,
- userRoleBalance: 0,
- vipLevel: 1,
- userRoleLevel: level,
- gameRolePower: power,
- partyId: 0,
- partyName: '无',
- };
- var roleInfoJson = JSON.stringify(roleInfo);
- window['DHMiniH5SDK'].analytics.uploadRoleInfo({
- type: type,
- isCreateRole: isCreateRole,
- roleCreateTime: (_t = (_s = GameDataCenter_1.default.sevBack.userInfo) === null || _s === void 0 ? void 0 : _s.a) === null || _t === void 0 ? void 0 : _t.regtime,
- serverId: parseInt((_v = (_u = GameDataCenter_1.default.sevBack.userInfo) === null || _u === void 0 ? void 0 : _u.a) === null || _v === void 0 ? void 0 : _v.sid),
- serverName: serverName,
- roleId: parseInt((_x = (_w = GameDataCenter_1.default.sevBack.userInfo) === null || _w === void 0 ? void 0 : _w.a) === null || _x === void 0 ? void 0 : _x.uuid),
- roleName: (_z = (_y = GameDataCenter_1.default.sevBack.userInfo) === null || _y === void 0 ? void 0 : _y.a) === null || _z === void 0 ? void 0 : _z.name,
- roleLevel: level,
- roleBalance: 0,
- vipLevel: 1,
- partyId: 0,
- partyName: '无',
- rolePower: power,
- partyRoleId: 1,
- }, function (response) {
- console.log(response);
- });
- };
- PlatformHaiTuoH5.prototype.openService = function () {
- var _a, _b, _c, _d, _e, _f;
- if (window['DHMiniH5SDK'].isDhApp) {
- window['DHMiniH5SDK'].service({
- roleId: parseInt((_b = (_a = GameDataCenter_1.default.sevBack.userInfo) === null || _a === void 0 ? void 0 : _a.a) === null || _b === void 0 ? void 0 : _b.uuid),
- nickname: (_d = (_c = GameDataCenter_1.default.sevBack.userInfo) === null || _c === void 0 ? void 0 : _c.a) === null || _d === void 0 ? void 0 : _d.name,
- level: (_f = (_e = GameDataCenter_1.default.sevBack.userInfo) === null || _e === void 0 ? void 0 : _e.a) === null || _f === void 0 ? void 0 : _f.level
- });
- }
- };
- PlatformHaiTuoH5.prototype.checkMsg = function (str, cb) {
- cb();
- };
- return PlatformHaiTuoH5;
- }(PlatformBase_1.default));
- exports.default = PlatformHaiTuoH5;
- cc._RF.pop();
- }
- if (nodeEnv) {
- __define(__module.exports, __require, __module);
- }
- else {
- __quick_compile_project__.registerModuleFunc(__filename, function () {
- __define(__module.exports, __require, __module);
- });
- }
- })();
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvcGxhdC9QbGF0Zm9ybUhhaVR1b0g1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlDQSw2Q0FBd0M7QUFDeEMsbURBQWtEO0FBQ2xELHFDQUE2RDtBQUU3RCxvQ0FBK0I7QUFDL0IsdURBQXFEO0FBQ3JELHFEQUErRjtBQUMvRix5REFBb0Q7QUFDcEQsb0RBQStDO0FBQy9DLDZDQUF3QztBQUN4QyxnREFBMkM7QUFDM0MsK0NBQTBDO0FBRTFDO0lBQThDLG9DQUFZO0lBR3REO1FBQUEsWUFDSSxpQkFBTyxTQXVEVjtRQXRERyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUMzQixJQUFJLEtBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2QsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ3BCLElBQUksZ0JBQU0sQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFFO29CQUM5QixhQUFhLENBQUMsZ0JBQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtvQkFDbkMsZ0JBQU0sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO2lCQUM5QjtnQkFDRCxnQkFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQTtnQkFDM0IsZ0JBQU0sQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDO29CQUMvQixnQkFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUE7b0JBQ3pCLElBQUksZ0JBQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7d0JBQzlCLGFBQWEsQ0FBQyxnQkFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO3dCQUNuQyxnQkFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7cUJBQzlCO29CQUNELHdCQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO2dCQUNsQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7YUFDWDtRQUNM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QyxPQUFPLENBQUMsUUFBUSwwQ0FBRSxDQUFDLDBDQUFFLElBQUk7WUFDbEQsU0FBUyxFQUFFLEtBQUs7WUFDaEIsV0FBVyxFQUFFLENBQUM7WUFDZCxRQUFRLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDO1lBQ1YsU0FBUyxFQUFFLEdBQUc7WUFDZCxTQUFTLEVBQUUsS0FBSztZQUNoQixXQUFXLEVBQUUsQ0FBQztTQUNqQixFQUFFLFVBQUMsUUFBUTtZQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0Qsc0NBQVcsR0FBWDs7UUFDSSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDL0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDMUIsTUFBTSxFQUFFLFFBQVEsYUFBQyx3QkFBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLDBDQUFFLENBQUMsMENBQUUsSUFBSSxDQUFDO2dCQUMxRCxRQUFRLGNBQUUsd0JBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSwwQ0FBRSxDQUFDLDBDQUFFLElBQUk7Z0JBQ2xELEtBQUssY0FBRSx3QkFBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLDBDQUFFLENBQUMsMENBQUUsS0FBSzthQUNuRCxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFDRCxtQ0FBUSxHQUFSLFVBQVMsR0FBVyxFQUFFLEVBQVk7UUFDOUIsRUFBRSxFQUFFLENBQUE7SUFDUixDQUFDO0lBQ0wsdUJBQUM7QUFBRCxDQTNUQSxBQTJUQyxDQTNUNkMsc0JBQVksR0EyVHpEIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBoYWl0dW9oNeeJiOacrCBzZGvphY3nva5cbiAqIFxuXG7lvq7kv6HlhoXot7PovazlhaXlj6PmmK9cblxu5ZyobWFpbi5qc+eahOacgOS4iumdolxud2luZG93Ll9femVyb19fID0ge1xuICAgIFwicGFja2FnZUlEXCI6IFwiMTAxXCIsXG59XG7lnKhvblN0YXJ05Yid5aeL5YyWc2RrXG5cbuW8leWFpVNESzrlnKhodG1s5Lit5re75Yqg5LiA5Liqc2NyaXB05qCH562+5bCx5Y+v5Lul5LqGXG4gICAgPCEtLSAvLyBINeW8leWFpeaWueiIn1NESyAtLT5cbiAgICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCJodGtTZGtfeHh4eHguanNcIj48L3NjcmlwdD5cbiAgICA8c2NyaXB0ID5cbiAgICAgICAgaGl0YWxrT3BlblNESy5pbml0KGZ1bmN0aW9uKHJlcyl7Ly/liJ3lp4vljJZzZGtcbiAgICAgICAgICAgIGlmKHJlcy5yZXRDb2RlIT0wKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLliJ3lp4vljJblpLHotKVcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9IFxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLliJ3lp4vljJbmiJDlip9cIilcbiAgICAgICAgICAgIC8v6LCD55So55m75b2V5o6l5Y+jXG4gICAgICAgIH0se2dhbWVJZDozMTl9KTsgIC8v5ZCR5rW35ouT55Sz6K+36I635b6XXG4gICAgPC9zY3JpcHQ+XG4gICAgPCEtLSDlvIDlkK92Q29uc29sZSAtLT5cbiAgICA8IS0tIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly91bnBrZy5jb20vdmNvbnNvbGVAbGF0ZXN0L2Rpc3QvdmNvbnNvbGUubWluLmpzXCI+PC9zY3JpcHQ+XG4gICAgPHNjcmlwdD5cbiAgICAvLyBWQ29uc29sZSDpu5jorqTkvJrmjILovb3liLAgYHdpbmRvdy5WQ29uc29sZWAg5LiKXG4gICAgdmFyIHZDb25zb2xlID0gbmV3IHdpbmRvdy5WQ29uc29sZSgpO1xuICAgIDwvc2NyaXB0PiAtLT5cbiAqL1xuaW1wb3J0IE1pbnQgZnJvbSBcIi4uL3V0aWxzL21pbnRGaWx0ZXIvaW5kZXhcIjtcbmltcG9ydCBHYW1lY2ZnIGZyb20gXCIuLi9jb21tb24vZ2FtZUNmZ1wiO1xuaW1wb3J0IHsgZ2FtZU1ldGhvZCB9IGZyb20gXCIuLi9jb21tb24vZ2FtZU1ldGhvZFwiO1xuaW1wb3J0IHsgUGxheWVyTG9naW4sIFBsYXllckxvZ2luUHJhbSB9IGZyb20gXCIuLi9jb21tb24vWHljXCI7XG5pbXBvcnQgeyBTZXZCYWNrIH0gZnJvbSBcIi4uL2NvbW1vbi9YeXNcIjtcbmltcG9ydCBDb25maWcgZnJvbSBcIi4uL0NvbmZpZ1wiO1xuaW1wb3J0IHsgTG9hZEV2ZW50IH0gZnJvbSBcIi4uL2RhdGEvY29uc3QvRXZlbnRDb25zdFwiO1xuaW1wb3J0IHsgR2FtZUVyckNvZGUsIEluR2FtZSwgUGF5UHJvZHVjdFBhcmFtLCBSZXBvcnRSb2xlVHlwZSB9IGZyb20gXCIuLi9kYXRhL2NvbnN0L1R5cGVDb25zdFwiO1xuaW1wb3J0IEdhbWVEYXRhQ2VudGVyIGZyb20gXCIuLi9kYXRhL0dhbWVEYXRhQ2VudGVyXCI7XG5pbXBvcnQgR2FtZUNvbnRyb2xsZXIgZnJvbSBcIi4uL0dhbWVDb250cm9sbGVyXCI7XG5pbXBvcnQgVUlIZWxwIGZyb20gXCIuLi9sb2dpYy91aS9VSUhlbHBcIjtcbmltcG9ydCBFdmVudE1uZyBmcm9tIFwiLi4vbWFuYWdlci9FdmVudE1uZ1wiO1xuaW1wb3J0IFBsYXRmb3JtQmFzZSBmcm9tIFwiLi9QbGF0Zm9ybUJhc2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhdGZvcm1IYWlUdW9INSBleHRlbmRzIFBsYXRmb3JtQmFzZSB7XG4gICAgaXNHb1BheTogYm9vbGVhblxuICAgIG1pbnQ6IE1pbnQ7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgY2MuZ2FtZS5vbihjYy5nYW1lLkVWRU5UX1NIT1csICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzR29QYXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzR29QYXkgPSBmYWxzZVxuICAgICAgICAgICAgICAgIGlmIChDb25maWcucGF5U3VjY0Fkb2tJZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoQ29uZmlnLnBheVN1Y2NBZG9rSWQpXG4gICAgICAgICAgICAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0lkID0gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJbmRleCA9IDBcbiAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXgrK1xuICAgICAgICAgICAgICAgICAgICBpZiAoQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXggPj0gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChDb25maWcucGF5U3VjY0Fkb2tJZClcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0lkID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLnRpbWUuc2VuZEFkb2soKVxuICAgICAgICAgICAgICAgIH0sIDEwMDApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHdpbmRvd1snREhNaW5pSDVTREsnXS5zZXRTd2l0Y2hBY2NvdW50Tm90aWZpY2F0aW9uKGZ1bmN0aW9uIChjYWxsYmFja0RhdGEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3dpdGNoQWNjb3VudCBkYXRhPT5cIiwgSlNPTi5zdHJpbmdpZnkoY2FsbGJhY2tEYXRhKSlcbiAgICAgICAgICAgIHdpbmRvd1snREhNaW5pSDVTREsnXS5sb2dvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgd2luZG93WydESE1pbmlINVNESyddLnNldExvZ291dE5vdGlmaWNhdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5zZXZCYWNrID0gbnVsbFxuICAgICAgICAgICAgQ29uZmlnLmluR2FtZSA9IEluR2FtZS5ub1xuICAgICAgICAgICAgLy8gdGhpcy5yZXN0YXJ0KClcbiAgICAgICAgICAgIGNjLmdhbWUucmVzdGFydCgpXG4gICAgICAgIH0pXG4gICAgICAgIC8v6Ziy5rKJ6L+3XG4gICAgICAgIGlmICh3aW5kb3dbJ0RITWluaUg1U0RLJ10uaXNEaEFwcCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCLms6jlhozpmLLmsonov7flvLrliLbkuIvnur/nm5HlkKxcIilcbiAgICAgICAgICAgIHdpbmRvd1snREhNaW5pSDVTREsnXS5nYW1lUHJldmVudEFkZGljdGlvbigocmVwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIOWcqOiiq+W8uuWItuS4i+e6v+WQjueahOWbnuiwg+WHveaVsOS4re+8jOeQhuiuuuS4iua4uOaIj+W6lOaMieWmguS4i+atpemqpOaJp+ihjOebuOWFs+aTjeS9nO+8mlxuICAgICAgICAgICAgICAgIC8vIOesrOS4gOatpe+8jOa4hemZpOW9k+WJjeeZu+W9leeahOi0puWPt+inkuiJsuetieS/oeaBr1xuICAgICAgICAgICAgICAgIC8vIOesrOS6jOatpe+8jOmHjeWbnua4uOaIj+i1t+Wni+mhtVxuICAgICAgICAgICAgICAgIC8vIOesrOS4ieatpe+8jOWGjeasoeiwg+eUqCBzZGsubG9naW4g5o6l5Y+j5Lul5ouJ6LW355m75b2V56qX5Y+jXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLop6blj5HpmLLmsonov7flvLrliLbkuIvnur/vvIzmuLjmiI/ph43lkK9cIilcbiAgICAgICAgICAgICAgICBsZXQgY2IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLnNldkJhY2sgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgIENvbmZpZy5pbkdhbWUgPSBJbkdhbWUubm9cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5yZXN0YXJ0KClcbiAgICAgICAgICAgICAgICAgICAgY2MuZ2FtZS5yZXN0YXJ0KClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgVUlIZWxwLlNob3dEaWFsb2coe1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIuagueaNruWbveWutuaWsOmXu+WHuueJiOe9siDjgIrlhbPkuo7pmLLmraLmnKrmiJDlubTkurrmsonov7fnvZHnu5zmuLjmiI/nmoTpgJrnn6XjgIvjgIHjgIrlhbPkuo7ov5vkuIDmraXkuKXmoLznrqHnkIbliIflrp7pmLLmraLmnKrmiJDlubTkurrmsonov7fnvZHnu5zmuLjmiI/nmoTpgJrnn6XjgIvnmoTopoHmsYLvvIzmgqjlt7LotoXlh7rku4rml6XlgaXlurfkvZPpqozml7bpmZDvvIzmuLjmiI/lsIblvLrliLbpgIDlh7rjgIJcIixcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwi6Ziy5rKJ6L+36LCD5pW06YCa55+lXCIsXG4gICAgICAgICAgICAgICAgICAgIHR4dENvbmZpcm06IFwi5oiR55+l6YGT5LqGXCIsXG4gICAgICAgICAgICAgICAgICAgIG9ubHlDb25maXJtOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjYkNvbmZpcm06IGNiXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNob3dMb2dpblZpZXcoKTogdm9pZCB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWluaUg15Yid5aeL5YyWJueZu+W9lVNES1wiKVxuICAgICAgICBFdmVudE1uZy5lbWl0KExvYWRFdmVudC5MT0FEX1BST0dSRVNTLCAwLjI1LCBcImxvZ2luXCIpXG4gICAgICAgIGxldCBwYWNrYWdlSW5mbyA9IEdhbWVjZmcucGFja2FnZUluZm8uZ2V0SXRlbShDb25maWcucGlkKVxuICAgICAgICB2YXIgcHJvZHVjdENvZGUgPSBwYWNrYWdlSW5mby5wYXJhbXNbMF07ICAgICAgICAvL1F1aWNrU0RL5ZCO5Y+w6Ieq5Yqo5YiG6YWNIFxuICAgICAgICB2YXIgcHJvZHVjdEtleSA9IHBhY2thZ2VJbmZvLnBhcmFtc1sxXTsgICAgICAgIC8vUXVpY2tTREvlkI7lj7Doh6rliqjliIbphY1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdpbmRvd1snREhNaW5pSDVTREsnXS5sb2dpbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImxvZ2luIGRhdGE9XCIsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgLy8gRXZlbnRNbmcuZW1pdChMb2FkRXZlbnQuTE9BRF9NRVNTQUdFLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpKVxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY29kZSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gcmVzdWx0LmRhdGFcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRNbmcuZW1pdChMb2FkRXZlbnQuTE9BRF9QUk9HUkVTUywgMC43NSwgXCJsb2dpblwiKVxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zOiBQbGF5ZXJMb2dpblByYW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaWQ6IENvbmZpZy5waWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbTogW2RhdGEuYWNjb3VudElkLCBkYXRhLmxvZ2luVHlwZSwgZGF0YS50b2tlbl1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v55S16a2Cc2Rr5ryP5paX5omT54K5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93WydESE1pbmlINVNESyddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93WydESE1pbmlINVNESyddLmFuYWx5dGljcy5sb2coe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudElkOiBcIjQyMDAwMDo6R0FNRV9DTElFTlRfTE9HSU5fU1RBUlRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViRXZlbnRJZDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBcImRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nQ29udGVudDogXCLmuLjmiI/lrqLmiLfnq6/lvIDlp4vor7fmsYLnmbvlvZXmuLjmiI/mnI1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudElkOiB3aW5kb3dbJ0RITWluaUg1U0RLJ10udXNlckluZm8uYWNjb3VudElkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEdhbWVDb250cm9sbGVyLm5ldHdvcmsuc2VuZChQbGF5ZXJMb2dpbi51cmwsIHBhcmFtcywgKHJlc3VsdDogU2V2QmFjaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5ZCO5q616aqM6K+B6L+U5ZueXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlICE9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdhbWVNZXRob2QuaXNFbXB0eShyZXN1bHQud2luKSB8fCBnYW1lTWV0aG9kLmlzRW1wdHkocmVzdWx0Lndpbi5tc2dPdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0LnNob3dFcnJEaWFsb2coR2FtZUVyckNvZGUuZXJyR2FtZVBsYXRMb2dpbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRNbmcuZW1pdChMb2FkRXZlbnQuTE9BRF9QUk9HUkVTUywgMSwgXCJsb2dpblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSAxICYmIHJlc3VsdC5wbGF0QmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5JZCA9IHJlc3VsdC5wbGF0QmFjay5vcGVuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dpblBhcmFtcyA9IFtyZXN1bHQucGxhdEJhY2sudG9rZW5dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5ZCO56uv6aqM6K+B5oiQ5YqfXCIsIHRoaXMub3BlbklkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/nlLXprYJzZGvmvI/mlpfmiZPngrlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvd1snREhNaW5pSDVTREsnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93WydESE1pbmlINVNESyddLmFuYWx5dGljcy5sb2coe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SWQ6IFwiNDUwMDAwOjpHQU1FX0NMSUVOVF9MT0dJTl9TVUNDRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViRXZlbnRJZDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IFwiZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0NvbnRlbnQ6IFwi5ri45oiP5a6i5oi356uv55m75b2V5oiQ5YqfXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudElkOiB3aW5kb3dbJ0RITWluaUg1U0RLJ10udXNlckluZm8uYWNjb3VudElkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGxheWVyTG9naW4udXJsIOi/lOWbnuaVsOaNruW8guW4uFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2FtZU1ldGhvZC5pc0VtcHR5KHJlc3VsdC53aW4pIHx8IGdhbWVNZXRob2QuaXNFbXB0eShyZXN1bHQud2luLm1zZ091dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLnBsYXQuc2hvd0VyckRpYWxvZyhHYW1lRXJyQ29kZS5lcnJHYW1lUGxhdExvZ2luKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBVSUhlbHAuU2hvd1RpcHMoXCLnmbvlvZXlpLHotKVcIilcbiAgICAgICAgICAgICAgICAgICAgLy8gR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5yZXN0YXJ0KClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgVUlIZWxwLlNob3dUaXBzKFwiLS0tLVwiICsgZXJyb3IpXG4gICAgICAgICAgICAvLyBVSUhlbHAuU2hvd0RpYWxvZyh7IGNvbnRlbnQ6IGVycm9yIH0pXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHBheShvcmRlcklkOiBzdHJpbmcsIG9yZGVyMTBjczogc3RyaW5nLCBwYXJhbTogUGF5UHJvZHVjdFBhcmFtKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNHb1BheSA9IHRydWVcbiAgICAgICAgbGV0IHNlcnZlckxpc3QgPSBHYW1lRGF0YUNlbnRlci51c2VyLnNlcnZlckxpc3RcbiAgICAgICAgbGV0IHNlcnZlck5hbWUgPSBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy5zaWRcbiAgICAgICAgZm9yIChjb25zdCBpdGVyYXRvciBvZiBzZXJ2ZXJMaXN0KSB7XG4gICAgICAgICAgICBpZiAoaXRlcmF0b3Iuc2lkID09IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8/LmE/LnNpZCkge1xuICAgICAgICAgICAgICAgIHNlcnZlck5hbWUgPSBpdGVyYXRvci5uYW1lXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcGF5RGF0YSA9IHtcbiAgICAgICAgICAgIHNlcnZlcklkOiBwYXJzZUludChHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy5zaWQpLFxuICAgICAgICAgICAgc2VydmVyTmFtZTogc2VydmVyTmFtZSxcbiAgICAgICAgICAgIHJvbGVJZDogcGFyc2VJbnQoR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8udXVpZCksXG4gICAgICAgICAgICByb2xlTmFtZTogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8ubmFtZSxcbiAgICAgICAgICAgIHJvbGVMZXZlbDogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8ubGV2ZWwsXG4gICAgICAgICAgICBwcm9kdWN0SWQ6IHBhcmFtLnByb2R1Y3RJZCxcbiAgICAgICAgICAgIHByb2R1Y3ROYW1lOiBwYXJhbS5wcm9kdWN0TmFtZSxcbiAgICAgICAgICAgIHByb2R1Y3ROdW06IDEsXG4gICAgICAgICAgICBwcmljZTogcGFyYW0ucHJpY2UgKiAxMDAsXG4gICAgICAgICAgICBjdXJyZW5jeVR5cGU6IFwiQ05ZXCIsXG4gICAgICAgICAgICBjcE9yZGVySWQ6IG9yZGVySWQsXG4gICAgICAgICAgICBhcmVhSWQ6IENvbmZpZy5waWQsXG4gICAgICAgICAgICBhcmVhTmFtZTogQ29uZmlnLnBpZCxcbiAgICAgICAgICAgIG1lbW86IG9yZGVySWRcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhcIuaLieWPluaUr+S7mOeahOWPguaVsO+8mlwiLCBKU09OLnN0cmluZ2lmeShwYXlEYXRhKSlcbiAgICAgICAgd2luZG93WydESE1pbmlINVNESyddLnBheW1lbnQocGF5RGF0YSwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuY29kZSA9PSAwKSB7IC8vIOaUr+S7mOaIkOWKn1xuICAgICAgICAgICAgICAgIHdpbmRvd1snREhNaW5pSDVTREsnXS5hbmFseXRpY3MucGF5KHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudElkOiB3aW5kb3dbJ0RITWluaUg1U0RLJ10udXNlckluZm8uYWNjb3VudElkLFxuICAgICAgICAgICAgICAgICAgICByb2xlSWQ6IHdpbmRvd1snREhNaW5pSDVTREsnXS51c2VySW5mby5hY2NvdW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHJvbGVMZXZlbDogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8ubGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVySWQ6IG9yZGVySWQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JZDogcGFyYW0ucHJvZHVjdElkLFxuICAgICAgICAgICAgICAgICAgICBwYXlBbW91bnQ6IHBhcmFtLnByaWNlXG4gICAgICAgICAgICAgICAgfSwgcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocGFyYW1zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvL+eUtemtgnNka+a8j+aWl+aJk+eCuVxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3dbJ0RITWluaUg1U0RLJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93WydESE1pbmlINVNESyddLmFuYWx5dGljcy5sb2coe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRJZDogXCI1MTAwMDA6OkdBTUVfQ0xJRU5UX1BBWV9TVUNDRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJFdmVudElkOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBcImRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0NvbnRlbnQ6IFwi5Y+R5pS+5pSv5LuY6YGT5YW36Iez546p5a62XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50SWQ6IHdpbmRvd1snREhNaW5pSDVTREsnXS51c2VySW5mby5hY2NvdW50SWRcbiAgICAgICAgICAgICAgICAgICAgfSwgcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzR29QYXkgPSBmYWxzZVxuICAgICAgICAgICAgICAgIGlmIChDb25maWcucGF5U3VjY0Fkb2tJZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoQ29uZmlnLnBheVN1Y2NBZG9rSWQpXG4gICAgICAgICAgICAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0lkID0gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJbmRleCA9IDBcbiAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXgrK1xuICAgICAgICAgICAgICAgICAgICBpZiAoQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXggPj0gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChDb25maWcucGF5U3VjY0Fkb2tJZClcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0lkID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLnRpbWUuc2VuZEFkb2soKVxuICAgICAgICAgICAgICAgIH0sIDEwMDApXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyDlhbbku5bvvIzmlK/ku5jlpLHotKVcblxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8g5LiK5oql6KeS6Imy5pWw5o2uXG4gICAgcmVwb3J0Um9sZShldmVudDogUmVwb3J0Um9sZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgLy8g4oCiIOWIneWni+WMluaIkOWKn+WQjuiwg+K9pC4g4oCiIOi/m+K8iuWMuuacjeOAgeWIm+K7huOAgeK7huK+iuetiee6p+abtOaWsOOAgeaImOK8kuabtOaWsOaXtuiwg+K9pC5cbiAgICAgICAgaWYgKEdhbWVEYXRhQ2VudGVyLnNldkJhY2sgPT0gbnVsbCkgeyByZXR1cm4gfVxuICAgICAgICBpZiAoR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbyA9PSBudWxsKSB7IHJldHVybiB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwi5LiK5oql6KeS6Imy5pWw5o2uOlwiLCBldmVudClcbiAgICAgICAgbGV0IG9ubGluZVRpbWUgPSAwXG4gICAgICAgIGlmIChHYW1lRGF0YUNlbnRlci50aW1lLm9ubGluZVRpbWUgPiAwKSB7XG4gICAgICAgICAgICBvbmxpbmVUaW1lID0gR2FtZURhdGFDZW50ZXIudGltZS5zZXZUaW1lIC0gR2FtZURhdGFDZW50ZXIudGltZS5vbmxpbmVUaW1lXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlzQ3JlYXRlUm9sZSA9IGZhbHNlXG4gICAgICAgIGxldCBsZXZlbCA9IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8/LmE/LmxldmVsXG4gICAgICAgIGxldCB0eXBlID0gXCJcIlxuICAgICAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICAgICAgICBjYXNlIFJlcG9ydFJvbGVUeXBlLmNyZWF0ZTpcbiAgICAgICAgICAgICAgICBpc0NyZWF0ZVJvbGUgPSB0cnVlXG4gICAgICAgICAgICAgICAgdHlwZSA9IFwiQ1JFQVRFX1JPTEVcIlxuICAgICAgICAgICAgICAgIC8v55S16a2Cc2Rr5ryP5paX5omT54K5XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvd1snREhNaW5pSDVTREsnXSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3dbJ0RITWluaUg1U0RLJ10uYW5hbHl0aWNzLmxvZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudElkOiBcIjQ1MDAwMTo6R0FNRV9DTElFTlRfQ1JFQVRJTkdfQV9ST0xFXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJFdmVudElkOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBcImRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0NvbnRlbnQ6IFwi5ri45oiP5a6i5oi356uv5Yib6KeS5oiQ5YqfXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50SWQ6IHdpbmRvd1snREhNaW5pSDVTREsnXS51c2VySW5mby5hY2NvdW50SWRcbiAgICAgICAgICAgICAgICAgICAgfSwgcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB3aW5kb3dbJ0RITWluaUg1U0RLJ10uYW5hbHl0aWNzLnJlZ2lzdGVyKHthY2NvdW50SWQ6IHdpbmRvd1snREhNaW5pSDVTREsnXS51c2VySW5mby5hY2NvdW50SWR9LCBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhwYXJhbXMpO1xuICAgICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlcG9ydFJvbGVUeXBlLmxldmVsdXA6XG4gICAgICAgICAgICAgICAgdHlwZSA9IFwiTEVWRUxfVVBcIlxuICAgICAgICAgICAgICAgIGxldmVsKytcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmVwb3J0Um9sZVR5cGUub2ZmbGluZTpcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSZXBvcnRSb2xlVHlwZS5vbmxpbmU6XG4gICAgICAgICAgICAgICAgdHlwZSA9IFwiTE9HSU5fR0FNRVwiXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlcG9ydFJvbGVUeXBlLm90aGVyOlxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwb3dlciA9IDE7XG4gICAgICAgIGlmIChnYW1lTWV0aG9kLmlzRW1wdHkoR2FtZURhdGFDZW50ZXIuc2V2QmFjaykpIHtcbiAgICAgICAgICAgIHBvd2VyID0gMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGVwcyA9IGdhbWVNZXRob2QuZXBfYWxsKEdhbWVEYXRhQ2VudGVyLnNldkJhY2spO1xuICAgICAgICAgICAgbGV0IHBvd2VyMSA9IGdhbWVNZXRob2QuZXBfcG93ZXIoMCwgZXBzKTtcbiAgICAgICAgICAgIHBvd2VyID0gcG93ZXIxXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlcnZlck5hbWUgPSBHYW1lRGF0YUNlbnRlci51c2VyLmdldFNlcnZlck5hbWVCeVNpZChHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy5zaWQpIHx8IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8/LmE/LnNpZDtcbiAgICAgICAgdmFyIHJvbGVJbmZvID0ge1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIGlzQ3JlYXRlUm9sZTogaXNDcmVhdGVSb2xlLFxuICAgICAgICAgICAgcm9sZUNyZWF0ZVRpbWU6IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8/LmE/LnJlZ3RpbWUsXG4gICAgICAgICAgICB1aWQ6IEdhbWVEYXRhQ2VudGVyLnBsYXQuaW5zdGFuY2Uub3BlbklkLFxuICAgICAgICAgICAgdXNlcm5hbWU6IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8/LmE/Lm5hbWUsXG4gICAgICAgICAgICBzZXJ2ZXJJZDogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8uc2lkLFxuICAgICAgICAgICAgc2VydmVyTmFtZTogc2VydmVyTmFtZSxcbiAgICAgICAgICAgIHVzZXJSb2xlTmFtZTogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8ubmFtZSxcbiAgICAgICAgICAgIHVzZXJSb2xlSWQ6IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8/LmE/LnV1aWQsXG4gICAgICAgICAgICB1c2VyUm9sZUJhbGFuY2U6IDAsXG4gICAgICAgICAgICB2aXBMZXZlbDogMSxcbiAgICAgICAgICAgIHVzZXJSb2xlTGV2ZWw6IGxldmVsLFxuICAgICAgICAgICAgZ2FtZVJvbGVQb3dlcjogcG93ZXIsXG4gICAgICAgICAgICBwYXJ0eUlkOiAwLFxuICAgICAgICAgICAgcGFydHlOYW1lOiAn5pegJyxcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcm9sZUluZm9Kc29uID0gSlNPTi5zdHJpbmdpZnkocm9sZUluZm8pO1xuXG4gICAgICAgIHdpbmRvd1snREhNaW5pSDVTREsnXS5hbmFseXRpY3MudXBsb2FkUm9sZUluZm8oe1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIGlzQ3JlYXRlUm9sZTogaXNDcmVhdGVSb2xlLCAvLyDku4XliJvlu7rop5LoibLml7bkvKB0cnVlLOabtOaWsOS/oeaBr+aXtuS8oGZhbHNlXG4gICAgICAgICAgICByb2xlQ3JlYXRlVGltZTogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8ucmVndGltZSwgLy8g6KeS6Imy5Yib5bu65pe26Ze077yM5pe26Ze05oiz57K+56Gu5Yiw56eSXG4gICAgICAgICAgICBzZXJ2ZXJJZDogcGFyc2VJbnQoR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8uc2lkKSwgLy8g6KeS6Imy5omA5Zyo5ri45oiP5pyN5Yqh5ZmoSURcbiAgICAgICAgICAgIHNlcnZlck5hbWU6IHNlcnZlck5hbWUsIC8vIOinkuiJsuaJgOWcqOa4uOaIj+acjeWKoeWZqOWQjeensFxuICAgICAgICAgICAgcm9sZUlkOiBwYXJzZUludChHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy51dWlkKSwgLy8g6KeS6ImySURcbiAgICAgICAgICAgIHJvbGVOYW1lOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy5uYW1lLCAvLyDop5LoibLlkI1cbiAgICAgICAgICAgIHJvbGVMZXZlbDogbGV2ZWwsIC8vIOinkuiJsuetiee6p1xuICAgICAgICAgICAgcm9sZUJhbGFuY2U6IDAsIC8vIOinkuiJsua4uOaIj+WGhei0p+W4geS9meminVxuICAgICAgICAgICAgdmlwTGV2ZWw6IDEsIC8vIOinkuiJslZJUOetiee6p1xuICAgICAgICAgICAgcGFydHlJZDogMCwgLy8g5YWs5LyaL+ekvuWboklEXG4gICAgICAgICAgICBwYXJ0eU5hbWU6ICfml6AnLCAvLyDlhazkvJov56S+5Zui5ZCN56ewXG4gICAgICAgICAgICByb2xlUG93ZXI6IHBvd2VyLCAvLyDop5LoibLmiJjliptcbiAgICAgICAgICAgIHBhcnR5Um9sZUlkOiAxLCAvLyDop5LoibLlnKjluK7mtL7kuK3nmoRJRFxuICAgICAgICB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9wZW5TZXJ2aWNlKCkge1xuICAgICAgICBpZiAod2luZG93WydESE1pbmlINVNESyddLmlzRGhBcHApIHtcbiAgICAgICAgICAgIHdpbmRvd1snREhNaW5pSDVTREsnXS5zZXJ2aWNlKHtcbiAgICAgICAgICAgICAgICByb2xlSWQ6IHBhcnNlSW50KEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8/LmE/LnV1aWQpLFxuICAgICAgICAgICAgICAgIG5pY2tuYW1lOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy5uYW1lLFxuICAgICAgICAgICAgICAgIGxldmVsOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy5sZXZlbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tNc2coc3RyOiBzdHJpbmcsIGNiOiBGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICBjYigpXG4gICAgfVxufSJdfQ==
|