123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- (function() {
- var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
- var __module = nodeEnv ? module : {exports:{}};
- var __filename = 'preview-scripts/assets/script/plat/PlatformQuickH5.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, '1e480cluJpNUYJKaPN4wOLI', 'PlatformQuickH5');
- // script/plat/PlatformQuickH5.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 HttpRequest_1 = require("../network/HttpRequest");
- var PlatformQuickH5 = /** @class */ (function (_super) {
- __extends(PlatformQuickH5, _super);
- function PlatformQuickH5() {
- 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);
- }
- GameDataCenter_1.default.audio.resumeMusic();
- });
- cc.game.on(cc.game.EVENT_HIDE, function () {
- GameDataCenter_1.default.audio.pauseMusic();
- });
- QuickSDK.setSwitchAccountNotification(function (callbackData) {
- console.log("SwitchAccount data=>", JSON.stringify(callbackData));
- GameController_1.default.clear();
- cc.game.restart();
- });
- QuickSDK.setLogoutNotification(function () {
- GameController_1.default.clear();
- cc.game.restart();
- });
- return _this;
- }
- PlatformQuickH5.prototype.showLoginView = function () {
- var _this = this;
- console.log("初始化&登录SDK");
- EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 0.25, "login");
- try {
- var localStorage = cc.sys.localStorage.getItem("model_login");
- var localData = {};
- if (!gameMethod_1.gameMethod.isEmpty(localStorage)) {
- localData = JSON.parse(localStorage);
- }
- var policyAgree = localData["policy_agree"];
- if (!gameMethod_1.gameMethod.isEmpty(policyAgree) && policyAgree == "1") {
- this.SdkInitLogin();
- }
- else {
- QuickSDK.showPrivace(function (retMsg) {
- console.log("privace data=>", JSON.stringify(retMsg));
- if (retMsg === null || retMsg === void 0 ? void 0 : retMsg.status) {
- _this.SdkInitLogin();
- }
- else {
- QuickSDK.callExtFunction("exit", {});
- }
- });
- }
- }
- catch (error) {
- UIHelp_1.default.ShowTips("----" + error);
- }
- };
- PlatformQuickH5.prototype.SdkInitLogin = function () {
- var _this = this;
- var packageInfo = gameCfg_1.default.packageInfo.getItem(Config_1.default.pid);
- var productCode = packageInfo.params[0]; //QuickSDK后台自动分配
- var productKey = packageInfo.params[1]; //QuickSDK后台自动分配
- var isNative = false;
- this.isMiniClient(); //设置登录平台
- QuickSDK.init(productCode, productKey, isNative, function () {
- console.log("初始化成功");
- setTimeout(function () {
- QuickSDK.login(function (result) {
- console.log("login data=", JSON.stringify(result));
- // EventMng.emit(LoadEvent.LOAD_MESSAGE, JSON.stringify(result))
- if (result.status) {
- var data = result.data;
- _this.username = data.username;
- _this.channelId = data.channelId.toString();
- EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 0.75, "login");
- var params_1 = {
- pid: Config_1.default.pid,
- param: [data.uid, data.token, data.channelId]
- };
- setTimeout(function () {
- 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();
- }
- 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("登录失败");
- }
- });
- }, 1000);
- });
- };
- PlatformQuickH5.prototype.pay = function (orderId, order10cs, param) {
- var _this = this;
- var _a, _b, _c;
- var packageInfo = gameCfg_1.default.packageInfo.getItem(Config_1.default.pid);
- var productCode = packageInfo.params[0]; //QuickSDK后台自动分配
- var serverName = GameDataCenter_1.default.user.getServerNameBySid((_c = (_b = (_a = GameDataCenter_1.default.sevBack) === null || _a === void 0 ? void 0 : _a.userInfo) === null || _b === void 0 ? void 0 : _b.a) === null || _c === void 0 ? void 0 : _c.sid) || GameDataCenter_1.default.sevBack.userInfo.a.sid;
- var orderInfo = {
- productCode: productCode,
- uid: GameDataCenter_1.default.plat.instance.openId,
- username: this.username,
- userRoleId: GameDataCenter_1.default.sevBack.userInfo.a.uuid,
- userRoleName: GameDataCenter_1.default.sevBack.userInfo.a.name,
- serverId: parseInt(GameDataCenter_1.default.sevBack.userInfo.a.sid),
- userServer: serverName,
- userLevel: GameDataCenter_1.default.sevBack.userInfo.a.level,
- cpOrderNo: orderId,
- amount: param.price,
- subject: param.productName,
- desc: param.productName,
- callbackUrl: '',
- extrasParams: order10cs,
- goodsId: param.productId,
- count: 1,
- quantifier: '个',
- };
- var orderInfoJson = JSON.stringify(orderInfo);
- this.isGoPay = true;
- QuickSDK.pay(orderInfoJson, function (payStatusObject) {
- console.log("创建订单成功:", JSON.stringify(payStatusObject));
- _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);
- });
- this.dealYanChi();
- };
- // 充值延迟到账,前端只能循环处理
- PlatformQuickH5.prototype.dealYanChi = function () {
- var _this = this;
- 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 >= 15) {
- clearInterval(Config_1.default.paySuccAdokId);
- Config_1.default.paySuccAdokId = null;
- _this.isGoPay = false;
- }
- GameDataCenter_1.default.time.sendAdok();
- }, 1000);
- };
- // 上报角色数据
- PlatformQuickH5.prototype.reportRole = function (event) {
- // • 初始化成功后调⽤. • 进⼊区服、创⻆、⻆⾊等级更新、战⼒更新时调⽤.
- 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 = GameDataCenter_1.default.sevBack.userInfo.a.level;
- switch (event) {
- case TypeConst_1.ReportRoleType.create:
- isCreateRole = true;
- break;
- case TypeConst_1.ReportRoleType.levelup:
- break;
- case TypeConst_1.ReportRoleType.offline:
- break;
- case TypeConst_1.ReportRoleType.online:
- break;
- case TypeConst_1.ReportRoleType.other:
- break;
- default:
- break;
- }
- var power = GameDataCenter_1.default.sevBack.userInfo.a.power;
- var serverName = GameDataCenter_1.default.user.getServerNameBySid(GameDataCenter_1.default.sevBack.userInfo.a.sid) || GameDataCenter_1.default.sevBack.userInfo.a.sid;
- if (this.channelId == "4804" || this.channelId == "4771") {
- //专服1-混A上报角色需要加密
- var roleInfo6_1 = {
- uid: GameDataCenter_1.default.plat.instance.openId,
- username: this.username,
- serverId: GameDataCenter_1.default.sevBack.userInfo.a.sid,
- serverName: serverName,
- userRoleId: GameDataCenter_1.default.sevBack.userInfo.a.uuid,
- userRoleName: GameDataCenter_1.default.sevBack.userInfo.a.name,
- userRoleLevel: level,
- vipLevel: 0,
- gameRolePower: power,
- channel_role_sign: "",
- isCreateRole: isCreateRole,
- roleCreateTime: GameDataCenter_1.default.sevBack.userInfo.a.regtime,
- userRoleBalance: 0,
- partyId: 0,
- partyName: '无',
- };
- var verifyStr = "uid=" + roleInfo6_1.uid + "&username=" + roleInfo6_1.username + "&serverId=" + roleInfo6_1.serverId + "&serverName=" + roleInfo6_1.serverName + "&userRoleId=" + roleInfo6_1.userRoleId + "&userRoleName=" + roleInfo6_1.userRoleName + "&userRoleLevel=" + roleInfo6_1.userRoleLevel + "&vipLevel=" + roleInfo6_1.vipLevel + "&gameRolePower=" + roleInfo6_1.gameRolePower + "&key=";
- // console.log("verifyStr:",verifyStr)
- var url = gameCfg_1.default.packageInfo.getItem(Config_1.default.pid).wayhttp + "player/sbVerify";
- HttpRequest_1.default.POST(url, {}, { str: verifyStr }, function (result) {
- console.log("player/sbVerify=>", result);
- roleInfo6_1.channel_role_sign = result.sign;
- var roleInfoJson6 = JSON.stringify(roleInfo6_1);
- // set_userinfo 设置⻆⾊基本信息,如头像、昵称
- QuickSDK.uploadGameRoleInfo(roleInfoJson6, function () {
- });
- });
- }
- else {
- var roleInfo = {
- isCreateRole: isCreateRole,
- roleCreateTime: GameDataCenter_1.default.sevBack.userInfo.a.regtime,
- uid: GameDataCenter_1.default.plat.instance.openId,
- username: this.username,
- serverId: GameDataCenter_1.default.sevBack.userInfo.a.sid,
- serverName: serverName,
- userRoleName: GameDataCenter_1.default.sevBack.userInfo.a.name,
- userRoleId: GameDataCenter_1.default.sevBack.userInfo.a.uuid,
- userRoleBalance: 0,
- vipLevel: 1,
- userRoleLevel: level,
- gameRolePower: power,
- partyId: 0,
- partyName: '无',
- };
- var roleInfoJson = JSON.stringify(roleInfo);
- // set_userinfo 设置⻆⾊基本信息,如头像、昵称
- QuickSDK.uploadGameRoleInfo(roleInfoJson, function () {
- });
- }
- };
- PlatformQuickH5.prototype.checkMsg = function (str, cb) {
- cb();
- };
- PlatformQuickH5.prototype.restart = function (force) {
- QuickSDK.logout(function () {
- });
- };
- PlatformQuickH5.prototype.openUrl = function (url) {
- QuickSDK.callUrl(url);
- };
- /**
- * 是否微端
- */
- PlatformQuickH5.prototype.isMiniClient = function () {
- //UA: Mozilla/5.0 (iPhone; CPU iPhone OS 17_6_1 like MacoS X) AppleWebKit/605.1.15(KHTML, like Gecko)Mobile/15E148
- // Mozilla/5.0 (iPhone; CPU iPhone 0S 17_6_1 like Mac OS X)AppleWebKit/605.1.15(KHTML, like Gecko) obile/15E148 color:gray".match(/\(i[^;]+;( U;)?CPU.+Mac OS X
- var u = navigator.userAgent;
- var isAndroid = u.indexOf("Android") > -1 || u.indexOf("Adr") > -1;
- if (isAndroid) {
- GameDataCenter_1.default.plat.instance.deviceOS = TypeConst_1.PlatFormDevType.androidH5;
- }
- var isIos = u.indexOf("iPhone") > -1 && u.indexOf("Safari") == -1;
- if (isIos) {
- GameDataCenter_1.default.plat.instance.deviceOS = TypeConst_1.PlatFormDevType.iosH5;
- }
- if (cc.sys.os == cc.sys.OS_IOS) {
- GameDataCenter_1.default.plat.instance.deviceOS = TypeConst_1.PlatFormDevType.iosH5;
- }
- return isAndroid || isIos;
- };
- return PlatformQuickH5;
- }(PlatformBase_1.default));
- exports.default = PlatformQuickH5;
- 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvcGxhdC9QbGF0Zm9ybVF1aWNrSDUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkNBLDZDQUF3QztBQUN4QyxtREFBa0Q7QUFDbEQscUNBQTZEO0FBRTdELG9DQUErQjtBQUMvQix1REFBcUQ7QUFDckQscURBQXdHO0FBQ3hHLHlEQUFvRDtBQUNwRCxvREFBK0M7QUFDL0MsNkNBQXdDO0FBQ3hDLGdEQUEyQztBQUMzQywrQ0FBMEM7QUFDMUMsc0RBQWlEO0FBRWpEO0lBQTZDLG1DQUFZO0lBS3JEO1FBQUEsWUFDSSxpQkFBTyxTQWdDVjtRQS9CRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUMzQixJQUFJLEtBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2QsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ3BCLElBQUksZ0JBQU0sQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFFO29CQUM5QixhQUFhLENBQUMsZ0JBQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtvQkFDbkMsZ0JBQU0sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO2lCQUM5QjtnQkFDRCxnQkFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQTtnQkFDM0IsZ0JBQU0sQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDO29CQUMvQixnQkFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUE7b0JBQ3pCLElBQUksZ0JBQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7d0JBQzlCLGFBQWEsQ0FBQyxnQkFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO3dCQUNuQyxnQkFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7cUJBQzlCO29CQUNELHdCQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO2dCQUNsQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENB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LENBQUM7SUFDOUIsQ0FBQztJQUNMLHNCQUFDO0FBQUQsQ0FoVEEsQUFnVEMsQ0FoVDRDLHNCQUFZLEdBZ1R4RCIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5Y+Y5oCB54mIaDXniYjmnKwgc2Rr6YWN572uXG4gKiBcblxu5b6u5L+h5YaF6Lez6L2s5YWl5Y+j5pivXG5cbuWcqG1haW4uanPnmoTmnIDkuIrpnaJcbndpbmRvdy5fX3plcm9fXyA9IHtcbiAgICBcInBhY2thZ2VJRFwiOiBcIjExMDFcIixcbn1cblxu5ZyobWFpbi5qc+eahG9uU3RhcnTliqDkuIpcbmNjLmFzc2V0TWFuYWdlci5kb3dubG9hZGVyLmFwcGVuZFRpbWVTdGFtcCA9IHRydWVcbuW8gOWQr+i1hOa6kOaXtumXtOaIs++8iOaaguaXtuS4jemcgOimge+8jOW9seWTjeeOqeWutuS9k+mqjO+8iVxuXG4gIOino+WGs+e9kemhteeZvei+ueeahOmXrumimCDmlL7lnKhodG1s55qEYm9keemHjFxuICA8c3R5bGU+IFxuICAgIGJvZHkge1xuICAgICBkaXNwbGF5OmJsb2NrO1xuICAgICBtYXJnaW46MHB4O1xuICAgIH1cbiAgPC9zdHlsZT5cbiAgLy/op6PlhrPnvZHpobXnvJPlrZjnmoTpl67popjvvIjmmoLml7bnmoTvvIlcbiAgICBcbiAgICB2YXIgZ2V0UXVlcnkyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKFwiKF58JilcIiArIG5hbWUgKyBcIj0oW14mXSopKCZ8JClcIiwgXCJpXCIpO1xuICAgICAgdmFyIHIgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cigxKS5tYXRjaChyZWcpO1xuICAgICAgaWYgKHIgIT0gbnVsbCkgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyWzJdKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbWFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGltZSA9IHBhcnNlSW50KGdldFF1ZXJ5MihcInRpbWVcIikgfHwgXCIwXCIpO1xuICAgICAgdmFyIF9jdXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICBpZiAoIV90aW1lKSB7IFxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSgnaHR0cHM6Ly9jZG5qeXh5LmhhcHBpbHlnYW1lLmNvbS93ZWJNb2JpbGUvaW5kZXguaHRtbD90aW1lPScgKyBfY3VyVGltZSk7Ly/ms6jmhI/opoHmjaLlr7nlupTnmoTkuJPmnI3pk77mjqVcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBtYWluKCk7XG7lvJXlhaVTREs65ZyoaHRtbOS4rea3u+WKoOS4gOS4qnNjcmlwdOagh+etvuWwseWPr+S7peS6hlxuPHNjcmlwdCBzcmM9XCJodHRwczovL3Nka2FwaS5oYXBwaWx5Z2FtZS5jb20vc3RhdGljL2xpYi9wcC9saWJRdWlja1NES192Mi5qc1wiPjwvc2NyaXB0PlxuICovXG5pbXBvcnQgTWludCBmcm9tIFwiLi4vdXRpbHMvbWludEZpbHRlci9pbmRleFwiO1xuaW1wb3J0IEdhbWVjZmcgZnJvbSBcIi4uL2NvbW1vbi9nYW1lQ2ZnXCI7XG5pbXBvcnQgeyBnYW1lTWV0aG9kIH0gZnJvbSBcIi4uL2NvbW1vbi9nYW1lTWV0aG9kXCI7XG5pbXBvcnQgeyBQbGF5ZXJMb2dpbiwgUGxheWVyTG9naW5QcmFtIH0gZnJvbSBcIi4uL2NvbW1vbi9YeWNcIjtcbmltcG9ydCB7IFNldkJhY2sgfSBmcm9tIFwiLi4vY29tbW9uL1h5c1wiO1xuaW1wb3J0IENvbmZpZyBmcm9tIFwiLi4vQ29uZmlnXCI7XG5pbXBvcnQgeyBMb2FkRXZlbnQgfSBmcm9tIFwiLi4vZGF0YS9jb25zdC9FdmVudENvbnN0XCI7XG5pbXBvcnQgeyBHYW1lRXJyQ29kZSwgUGF5UHJvZHVjdFBhcmFtLCBSZXBvcnRSb2xlVHlwZSwgUGxhdEZvcm1EZXZUeXBlIH0gZnJvbSBcIi4uL2RhdGEvY29uc3QvVHlwZUNvbnN0XCI7XG5pbXBvcnQgR2FtZURhdGFDZW50ZXIgZnJvbSBcIi4uL2RhdGEvR2FtZURhdGFDZW50ZXJcIjtcbmltcG9ydCBHYW1lQ29udHJvbGxlciBmcm9tIFwiLi4vR2FtZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBVSUhlbHAgZnJvbSBcIi4uL2xvZ2ljL3VpL1VJSGVscFwiO1xuaW1wb3J0IEV2ZW50TW5nIGZyb20gXCIuLi9tYW5hZ2VyL0V2ZW50TW5nXCI7XG5pbXBvcnQgUGxhdGZvcm1CYXNlIGZyb20gXCIuL1BsYXRmb3JtQmFzZVwiO1xuaW1wb3J0IEh0dHBSZXF1ZXN0IGZyb20gXCIuLi9uZXR3b3JrL0h0dHBSZXF1ZXN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYXRmb3JtUXVpY2tINSBleHRlbmRzIFBsYXRmb3JtQmFzZSB7XG4gICAgaXNHb1BheTogYm9vbGVhblxuICAgIG1pbnQ6IE1pbnQ7XG4gICAgdXNlcm5hbWU6IFwiXCJcbiAgICBjaGFubmVsSWQ6IHN0cmluZ1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpXG4gICAgICAgIGNjLmdhbWUub24oY2MuZ2FtZS5FVkVOVF9TSE9XLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0dvUGF5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0dvUGF5ID0gZmFsc2VcbiAgICAgICAgICAgICAgICBpZiAoQ29uZmlnLnBheVN1Y2NBZG9rSWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKENvbmZpZy5wYXlTdWNjQWRva0lkKVxuICAgICAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJZCA9IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXggPSAwXG4gICAgICAgICAgICAgICAgQ29uZmlnLnBheVN1Y2NBZG9rSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0luZGV4KytcbiAgICAgICAgICAgICAgICAgICAgaWYgKENvbmZpZy5wYXlTdWNjQWRva0luZGV4ID49IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoQ29uZmlnLnBheVN1Y2NBZG9rSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJZCA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YUNlbnRlci50aW1lLnNlbmRBZG9rKClcbiAgICAgICAgICAgICAgICB9LCAxMDAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIuYXVkaW8ucmVzdW1lTXVzaWMoKTtcbiAgICAgICAgfSlcbiAgICAgICAgY2MuZ2FtZS5vbihjYy5nYW1lLkVWRU5UX0hJREUsICgpID0+IHtcbiAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLmF1ZGlvLnBhdXNlTXVzaWMoKTtcbiAgICAgICAgfSlcbiAgICAgICAgUXVpY2tTREsuc2V0U3dpdGNoQWNjb3VudE5vdGlmaWNhdGlvbihmdW5jdGlvbiAoY2FsbGJhY2tEYXRhKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlN3aXRjaEFjY291bnQgZGF0YT0+XCIsIEpTT04uc3RyaW5naWZ5KGNhbGxiYWNrRGF0YSkpXG4gICAgICAgICAgICBHYW1lQ29udHJvbGxlci5jbGVhcigpXG4gICAgICAgICAgICBjYy5nYW1lLnJlc3RhcnQoKVxuICAgICAgICB9KTtcbiAgICAgICAgUXVpY2tTREsuc2V0TG9nb3V0Tm90aWZpY2F0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIEdhbWVDb250cm9sbGVyLmNsZWFyKClcbiAgICAgICAgICAgIGNjLmdhbWUucmVzdGFydCgpXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHNob3dMb2dpblZpZXcoKTogdm9pZCB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwi5Yid5aeL5YyWJueZu+W9lVNES1wiKVxuICAgICAgICBFdmVudE1uZy5lbWl0KExvYWRFdmVudC5MT0FEX1BST0dSRVNTLCAwLjI1LCBcImxvZ2luXCIpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgbG9jYWxTdG9yYWdlID0gY2Muc3lzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKGBtb2RlbF9sb2dpbmApO1xuICAgICAgICAgICAgbGV0IGxvY2FsRGF0YSA9IHt9O1xuICAgICAgICAgICAgaWYgKCFnYW1lTWV0aG9kLmlzRW1wdHkobG9jYWxTdG9yYWdlKSkge1xuICAgICAgICAgICAgICAgIGxvY2FsRGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwb2xpY3lBZ3JlZSA9IGxvY2FsRGF0YVtcInBvbGljeV9hZ3JlZVwiXTtcbiAgICAgICAgICAgIGlmICghZ2FtZU1ldGhvZC5pc0VtcHR5KHBvbGljeUFncmVlKSAmJiBwb2xpY3lBZ3JlZSA9PSBcIjFcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuU2RrSW5pdExvZ2luKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFF1aWNrU0RLLnNob3dQcml2YWNlKChyZXRNc2c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInByaXZhY2UgZGF0YT0+XCIsIEpTT04uc3RyaW5naWZ5KHJldE1zZykpXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRNc2c/LnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZGtJbml0TG9naW4oKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFF1aWNrU0RLLmNhbGxFeHRGdW5jdGlvbihcImV4aXRcIiwge30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIFVJSGVscC5TaG93VGlwcyhcIi0tLS1cIiArIGVycm9yKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgU2RrSW5pdExvZ2luKCkge1xuICAgICAgICBsZXQgcGFja2FnZUluZm8gPSBHYW1lY2ZnLnBhY2thZ2VJbmZvLmdldEl0ZW0oQ29uZmlnLnBpZClcbiAgICAgICAgdmFyIHByb2R1Y3RDb2RlID0gcGFja2FnZUluZm8ucGFyYW1zWzBdOyAgICAgICAgLy9RdWlja1NES+WQjuWPsOiHquWKqOWIhumFjSBcbiAgICAgICAgdmFyIHByb2R1Y3RLZXkgPSBwYWNrYWdlSW5mby5wYXJhbXNbMV07ICAgICAgICAvL1F1aWNrU0RL5ZCO5Y+w6Ieq5Yqo5YiG6YWNXG4gICAgICAgIGxldCBpc05hdGl2ZSA9IGZhbHNlXG4gICAgICAgIHRoaXMuaXNNaW5pQ2xpZW50KCk7Ly/orr7nva7nmbvlvZXlubPlj7BcbiAgICAgICAgUXVpY2tTREsuaW5pdChwcm9kdWN0Q29kZSwgcHJvZHVjdEtleSwgaXNOYXRpdmUsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5Yid5aeL5YyW5oiQ5YqfXCIpXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBRdWlja1NESy5sb2dpbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJsb2dpbiBkYXRhPVwiLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpKVxuICAgICAgICAgICAgICAgICAgICAvLyBFdmVudE1uZy5lbWl0KExvYWRFdmVudC5MT0FEX01FU1NBR0UsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHJlc3VsdC5kYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJuYW1lID0gZGF0YS51c2VybmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsSWQgPSBkYXRhLmNoYW5uZWxJZC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICBFdmVudE1uZy5lbWl0KExvYWRFdmVudC5MT0FEX1BST0dSRVNTLCAwLjc1LCBcImxvZ2luXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zOiBQbGF5ZXJMb2dpblByYW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkOiBDb25maWcucGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtOiBbZGF0YS51aWQsIGRhdGEudG9rZW4sIGRhdGEuY2hhbm5lbElkXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZUNvbnRyb2xsZXIubmV0d29yay5zZW5kKFBsYXllckxvZ2luLnVybCwgcGFyYW1zLCAocmVzdWx0OiBTZXZCYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5ZCO5q616aqM6K+B6L+U5ZueXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSAhPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2FtZU1ldGhvZC5pc0VtcHR5KHJlc3VsdC53aW4pIHx8IGdhbWVNZXRob2QuaXNFbXB0eShyZXN1bHQud2luLm1zZ091dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0LnNob3dFcnJEaWFsb2coR2FtZUVyckNvZGUuZXJyR2FtZVBsYXRMb2dpbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50TW5nLmVtaXQoTG9hZEV2ZW50LkxPQURfUFJPR1JFU1MsIDEsIFwibG9naW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IDEgJiYgcmVzdWx0LnBsYXRCYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5JZCA9IHJlc3VsdC5wbGF0QmFjay5vcGVuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9naW5QYXJhbXMgPSBbcmVzdWx0LnBsYXRCYWNrLnRva2VuXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLlkI7nq6/pqozor4HmiJDlip9cIiwgdGhpcy5vcGVuSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGxheWVyTG9naW4udXJsIOi/lOWbnuaVsOaNruW8guW4uFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdhbWVNZXRob2QuaXNFbXB0eShyZXN1bHQud2luKSB8fCBnYW1lTWV0aG9kLmlzRW1wdHkocmVzdWx0Lndpbi5tc2dPdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIucGxhdC5zaG93RXJyRGlhbG9nKEdhbWVFcnJDb2RlLmVyckdhbWVQbGF0TG9naW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwMClcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFVJSGVscC5TaG93VGlwcyhcIueZu+W9leWksei0pVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIDEwMDApXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcGF5KG9yZGVySWQ6IHN0cmluZywgb3JkZXIxMGNzOiBzdHJpbmcsIHBhcmFtOiBQYXlQcm9kdWN0UGFyYW0pOiB2b2lkIHtcbiAgICAgICAgbGV0IHBhY2thZ2VJbmZvID0gR2FtZWNmZy5wYWNrYWdlSW5mby5nZXRJdGVtKENvbmZpZy5waWQpXG4gICAgICAgIHZhciBwcm9kdWN0Q29kZSA9IHBhY2thZ2VJbmZvLnBhcmFtc1swXTsgICAgICAgIC8vUXVpY2tTREvlkI7lj7Doh6rliqjliIbphY0gXG4gICAgICAgIGxldCBzZXJ2ZXJOYW1lID0gR2FtZURhdGFDZW50ZXIudXNlci5nZXRTZXJ2ZXJOYW1lQnlTaWQoR2FtZURhdGFDZW50ZXIuc2V2QmFjaz8udXNlckluZm8/LmE/LnNpZCkgfHwgR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mby5hLnNpZDtcbiAgICAgICAgbGV0IG9yZGVySW5mbyA9IHtcbiAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBwcm9kdWN0Q29kZSxcbiAgICAgICAgICAgIHVpZDogR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5vcGVuSWQsXG4gICAgICAgICAgICB1c2VybmFtZTogdGhpcy51c2VybmFtZSxcbiAgICAgICAgICAgIHVzZXJSb2xlSWQ6IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8uYS51dWlkLFxuICAgICAgICAgICAgdXNlclJvbGVOYW1lOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvLmEubmFtZSxcbiAgICAgICAgICAgIHNlcnZlcklkOiBwYXJzZUludChHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvLmEuc2lkKSxcbiAgICAgICAgICAgIHVzZXJTZXJ2ZXI6IHNlcnZlck5hbWUsXG4gICAgICAgICAgICB1c2VyTGV2ZWw6IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8uYS5sZXZlbCxcbiAgICAgICAgICAgIGNwT3JkZXJObzogb3JkZXJJZCxcbiAgICAgICAgICAgIGFtb3VudDogcGFyYW0ucHJpY2UsXG4gICAgICAgICAgICBzdWJqZWN0OiBwYXJhbS5wcm9kdWN0TmFtZSxcbiAgICAgICAgICAgIGRlc2M6IHBhcmFtLnByb2R1Y3ROYW1lLC8vcGFyYW0ucHJvZHVjdERlc2MsXG4gICAgICAgICAgICBjYWxsYmFja1VybDogJycsXG4gICAgICAgICAgICBleHRyYXNQYXJhbXM6IG9yZGVyMTBjcyxcbiAgICAgICAgICAgIGdvb2RzSWQ6IHBhcmFtLnByb2R1Y3RJZCxcbiAgICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgICAgcXVhbnRpZmllcjogJ+S4qicsXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3JkZXJJbmZvSnNvbiA9IEpTT04uc3RyaW5naWZ5KG9yZGVySW5mbyk7XG4gICAgICAgIHRoaXMuaXNHb1BheSA9IHRydWVcbiAgICAgICAgUXVpY2tTREsucGF5KG9yZGVySW5mb0pzb24sIChwYXlTdGF0dXNPYmplY3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCLliJvlu7rorqLljZXmiJDlip86XCIsIEpTT04uc3RyaW5naWZ5KHBheVN0YXR1c09iamVjdCkpXG4gICAgICAgICAgICB0aGlzLmlzR29QYXkgPSBmYWxzZVxuICAgICAgICAgICAgaWYgKENvbmZpZy5wYXlTdWNjQWRva0lkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKENvbmZpZy5wYXlTdWNjQWRva0lkKVxuICAgICAgICAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0lkID0gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXggPSAwXG4gICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJbmRleCsrXG4gICAgICAgICAgICAgICAgaWYgKENvbmZpZy5wYXlTdWNjQWRva0luZGV4ID49IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChDb25maWcucGF5U3VjY0Fkb2tJZClcbiAgICAgICAgICAgICAgICAgICAgQ29uZmlnLnBheVN1Y2NBZG9rSWQgPSBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLnRpbWUuc2VuZEFkb2soKVxuICAgICAgICAgICAgfSwgMTAwMClcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kZWFsWWFuQ2hpKCk7XG4gICAgfVxuXG4gICAgLy8g5YWF5YC85bu26L+f5Yiw6LSm77yM5YmN56uv5Y+q6IO95b6q546v5aSE55CGXG4gICAgZGVhbFlhbkNoaSgpIHtcbiAgICAgICAgaWYgKENvbmZpZy5wYXlTdWNjQWRva0lkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoQ29uZmlnLnBheVN1Y2NBZG9rSWQpXG4gICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJZCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJbmRleCA9IDBcbiAgICAgICAgQ29uZmlnLnBheVN1Y2NBZG9rSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJbmRleCsrXG4gICAgICAgICAgICBpZiAoQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXggPj0gMTUpIHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKENvbmZpZy5wYXlTdWNjQWRva0lkKVxuICAgICAgICAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0lkID0gbnVsbFxuICAgICAgICAgICAgICAgIHRoaXMuaXNHb1BheSA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBHYW1lRGF0YUNlbnRlci50aW1lLnNlbmRBZG9rKClcbiAgICAgICAgfSwgMTAwMClcbiAgICB9XG4gICAgLy8g5LiK5oql6KeS6Imy5pWw5o2uXG4gICAgcmVwb3J0Um9sZShldmVudDogUmVwb3J0Um9sZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgLy8g4oCiIOWIneWni+WMluaIkOWKn+WQjuiwg+K9pC4g4oCiIOi/m+K8iuWMuuacjeOAgeWIm+K7huOAgeK7huK+iuetiee6p+abtOaWsOOAgeaImOK8kuabtOaWsOaXtuiwg+K9pC5cbiAgICAgICAgaWYgKEdhbWVEYXRhQ2VudGVyLnNldkJhY2sgPT0gbnVsbCkgeyByZXR1cm4gfVxuICAgICAgICBpZiAoR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbyA9PSBudWxsKSB7IHJldHVybiB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwi5LiK5oql6KeS6Imy5pWw5o2uOlwiLCBldmVudClcbiAgICAgICAgbGV0IG9ubGluZVRpbWUgPSAwXG4gICAgICAgIGlmIChHYW1lRGF0YUNlbnRlci50aW1lLm9ubGluZVRpbWUgPiAwKSB7XG4gICAgICAgICAgICBvbmxpbmVUaW1lID0gR2FtZURhdGFDZW50ZXIudGltZS5zZXZUaW1lIC0gR2FtZURhdGFDZW50ZXIudGltZS5vbmxpbmVUaW1lXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlzQ3JlYXRlUm9sZSA9IGZhbHNlXG4gICAgICAgIGxldCBsZXZlbCA9IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8uYS5sZXZlbFxuICAgICAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICAgICAgICBjYXNlIFJlcG9ydFJvbGVUeXBlLmNyZWF0ZTpcbiAgICAgICAgICAgICAgICBpc0NyZWF0ZVJvbGUgPSB0cnVlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlcG9ydFJvbGVUeXBlLmxldmVsdXA6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlcG9ydFJvbGVUeXBlLm9mZmxpbmU6XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUmVwb3J0Um9sZVR5cGUub25saW5lOlxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJlcG9ydFJvbGVUeXBlLm90aGVyOlxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwb3dlciA9IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8uYS5wb3dlcjtcbiAgICAgICAgbGV0IHNlcnZlck5hbWUgPSBHYW1lRGF0YUNlbnRlci51c2VyLmdldFNlcnZlck5hbWVCeVNpZChHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvLmEuc2lkKSB8fCBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvLmEuc2lkO1xuXG4gICAgICAgIGlmICh0aGlzLmNoYW5uZWxJZCA9PSBcIjQ4MDRcIiB8fCB0aGlzLmNoYW5uZWxJZCA9PSBcIjQ3NzFcIikge1xuICAgICAgICAgICAgLy/kuJPmnI0xLea3t0HkuIrmiqXop5LoibLpnIDopoHliqDlr4ZcbiAgICAgICAgICAgIGxldCByb2xlSW5mbzYgPSB7XG4gICAgICAgICAgICAgICAgdWlkOiBHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLm9wZW5JZCxcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy51c2VybmFtZSxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJJZDogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mby5hLnNpZCxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJOYW1lOiBzZXJ2ZXJOYW1lLFxuICAgICAgICAgICAgICAgIHVzZXJSb2xlSWQ6IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8uYS51dWlkLFxuICAgICAgICAgICAgICAgIHVzZXJSb2xlTmFtZTogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mby5hLm5hbWUsXG4gICAgICAgICAgICAgICAgdXNlclJvbGVMZXZlbDogbGV2ZWwsXG4gICAgICAgICAgICAgICAgdmlwTGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgZ2FtZVJvbGVQb3dlcjogcG93ZXIsXG4gICAgICAgICAgICAgICAgY2hhbm5lbF9yb2xlX3NpZ246IFwiXCIsXG4gICAgICAgICAgICAgICAgaXNDcmVhdGVSb2xlOiBpc0NyZWF0ZVJvbGUsXG4gICAgICAgICAgICAgICAgcm9sZUNyZWF0ZVRpbWU6IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8uYS5yZWd0aW1lLFxuICAgICAgICAgICAgICAgIHVzZXJSb2xlQmFsYW5jZTogMCxcbiAgICAgICAgICAgICAgICBwYXJ0eUlkOiAwLFxuICAgICAgICAgICAgICAgIHBhcnR5TmFtZTogJ+aXoCcsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHZlcmlmeVN0ciA9IFwidWlkPVwiICsgcm9sZUluZm82LnVpZCArIFwiJnVzZXJuYW1lPVwiICsgcm9sZUluZm82LnVzZXJuYW1lICsgXCImc2VydmVySWQ9XCIgKyByb2xlSW5mbzYuc2VydmVySWQgKyBcIiZzZXJ2ZXJOYW1lPVwiICsgcm9sZUluZm82LnNlcnZlck5hbWUgKyBcIiZ1c2VyUm9sZUlkPVwiICsgcm9sZUluZm82LnVzZXJSb2xlSWQgKyBcIiZ1c2VyUm9sZU5hbWU9XCIgKyByb2xlSW5mbzYudXNlclJvbGVOYW1lICsgXCImdXNlclJvbGVMZXZlbD1cIiArIHJvbGVJbmZvNi51c2VyUm9sZUxldmVsICsgXCImdmlwTGV2ZWw9XCIgKyByb2xlSW5mbzYudmlwTGV2ZWwgKyBcIiZnYW1lUm9sZVBvd2VyPVwiICsgcm9sZUluZm82LmdhbWVSb2xlUG93ZXIgKyBcIiZrZXk9XCJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidmVyaWZ5U3RyOlwiLHZlcmlmeVN0cilcbiAgICAgICAgICAgIGxldCB1cmwgPSBHYW1lY2ZnLnBhY2thZ2VJbmZvLmdldEl0ZW0oQ29uZmlnLnBpZCkud2F5aHR0cCArIFwicGxheWVyL3NiVmVyaWZ5XCJcbiAgICAgICAgICAgIEh0dHBSZXF1ZXN0LlBPU1QodXJsLCB7fSwgeyBzdHI6IHZlcmlmeVN0ciB9LCAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInBsYXllci9zYlZlcmlmeT0+XCIsIHJlc3VsdClcbiAgICAgICAgICAgICAgICByb2xlSW5mbzYuY2hhbm5lbF9yb2xlX3NpZ24gPSByZXN1bHQuc2lnblxuICAgICAgICAgICAgICAgIHZhciByb2xlSW5mb0pzb242ID0gSlNPTi5zdHJpbmdpZnkocm9sZUluZm82KTtcbiAgICAgICAgICAgICAgICAvLyBzZXRfdXNlcmluZm8g6K6+572u4ruG4r6K5Z+65pys5L+h5oGv77yM5aaC5aS05YOP44CB5pi156ewXG4gICAgICAgICAgICAgICAgUXVpY2tTREsudXBsb2FkR2FtZVJvbGVJbmZvKHJvbGVJbmZvSnNvbjYsICgpID0+IHtcblxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJvbGVJbmZvID0ge1xuICAgICAgICAgICAgICAgIGlzQ3JlYXRlUm9sZTogaXNDcmVhdGVSb2xlLFxuICAgICAgICAgICAgICAgIHJvbGVDcmVhdGVUaW1lOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvLmEucmVndGltZSxcbiAgICAgICAgICAgICAgICB1aWQ6IEdhbWVEYXRhQ2VudGVyLnBsYXQuaW5zdGFuY2Uub3BlbklkLFxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIHNlcnZlcklkOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvLmEuc2lkLFxuICAgICAgICAgICAgICAgIHNlcnZlck5hbWU6IHNlcnZlck5hbWUsXG4gICAgICAgICAgICAgICAgdXNlclJvbGVOYW1lOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvLmEubmFtZSxcbiAgICAgICAgICAgICAgICB1c2VyUm9sZUlkOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvLmEudXVpZCxcbiAgICAgICAgICAgICAgICB1c2VyUm9sZUJhbGFuY2U6IDAsXG4gICAgICAgICAgICAgICAgdmlwTGV2ZWw6IDEsXG4gICAgICAgICAgICAgICAgdXNlclJvbGVMZXZlbDogbGV2ZWwsXG4gICAgICAgICAgICAgICAgZ2FtZVJvbGVQb3dlcjogcG93ZXIsXG4gICAgICAgICAgICAgICAgcGFydHlJZDogMCxcbiAgICAgICAgICAgICAgICBwYXJ0eU5hbWU6ICfml6AnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHJvbGVJbmZvSnNvbiA9IEpTT04uc3RyaW5naWZ5KHJvbGVJbmZvKTtcbiAgICAgICAgICAgIC8vIHNldF91c2VyaW5mbyDorr7nva7iu4bivorln7rmnKzkv6Hmga/vvIzlpoLlpLTlg4/jgIHmmLXnp7BcbiAgICAgICAgICAgIFF1aWNrU0RLLnVwbG9hZEdhbWVSb2xlSW5mbyhyb2xlSW5mb0pzb24sICgpID0+IHtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja01zZyhzdHI6IHN0cmluZywgY2I6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIGNiKClcbiAgICB9XG5cbiAgICByZXN0YXJ0KGZvcmNlPzogYm9vbGVhbikge1xuICAgICAgICBRdWlja1NESy5sb2dvdXQoKCkgPT4ge1xuXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgb3BlblVybCh1cmw6IHN0cmluZykge1xuICAgICAgICBRdWlja1NESy5jYWxsVXJsKHVybCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5b6u56uvXG4gICAgICovXG4gICAgaXNNaW5pQ2xpZW50KCkge1xuICAgICAgICAvL1VBOiBNb3ppbGxhLzUuMCAoaVBob25lOyBDUFUgaVBob25lIE9TIDE3XzZfMSBsaWtlIE1hY29TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1KEtIVE1MLCBsaWtlIEdlY2tvKU1vYmlsZS8xNUUxNDhcbiAgICAgICAgLy8gICAgTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIGlQaG9uZSAwUyAxN182XzEgbGlrZSBNYWMgT1MgWClBcHBsZVdlYktpdC82MDUuMS4xNShLSFRNTCwgbGlrZSBHZWNrbykgb2JpbGUvMTVFMTQ4IGNvbG9yOmdyYXlcIi5tYXRjaCgvXFwoaVteO10rOyggVTspP0NQVS4rTWFjIE9TIFhcbiAgICAgICAgbGV0IHUgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgICAgICBsZXQgaXNBbmRyb2lkID0gdS5pbmRleE9mKFwiQW5kcm9pZFwiKSA+IC0xIHx8IHUuaW5kZXhPZihcIkFkclwiKSA+IC0xO1xuICAgICAgICBpZiAoaXNBbmRyb2lkKSB7XG4gICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLmRldmljZU9TID0gUGxhdEZvcm1EZXZUeXBlLmFuZHJvaWRINVxuICAgICAgICB9XG4gICAgICAgIGxldCBpc0lvcyA9IHUuaW5kZXhPZihcImlQaG9uZVwiKSA+IC0xICYmIHUuaW5kZXhPZihcIlNhZmFyaVwiKSA9PSAtMTtcbiAgICAgICAgaWYgKGlzSW9zKSB7XG4gICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLmRldmljZU9TID0gUGxhdEZvcm1EZXZUeXBlLmlvc0g1XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNjLnN5cy5vcyA9PSBjYy5zeXMuT1NfSU9TKSB7XG4gICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLmRldmljZU9TID0gUGxhdEZvcm1EZXZUeXBlLmlvc0g1XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQW5kcm9pZCB8fCBpc0lvcztcbiAgICB9XG59Il19
|