355 lines
31 KiB
JavaScript
355 lines
31 KiB
JavaScript
|
|
(function() {
|
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
|
var __module = nodeEnv ? module : {exports:{}};
|
|
var __filename = 'preview-scripts/assets/Script/module/Music/AudioManager.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, '58403/n16JCa5sZhNMjZzGo', 'AudioManager');
|
|
// Script/module/Music/AudioManager.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 __());
|
|
};
|
|
})();
|
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
|
|
var AudioManager = /** @class */ (function (_super) {
|
|
__extends(AudioManager, _super);
|
|
function AudioManager() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
//背景音乐
|
|
_this.audioGameBgm0 = null;
|
|
_this.baishao_audio = null;
|
|
_this.cha_audio = null;
|
|
_this.chixiaodou_audio = null;
|
|
_this.danggui_audio = null;
|
|
_this.danshen_audio = null;
|
|
_this.dazao_audio = null;
|
|
_this.gancao_audio = null;
|
|
_this.ganjiang_audio = null;
|
|
_this.gouqi_audio = null;
|
|
_this.jingjie_audio = null;
|
|
_this.jinju_audio = null;
|
|
_this.lizhi_audio = null;
|
|
_this.lizi_audio = null;
|
|
_this.longyan_audio = null;
|
|
_this.moli_audio = null;
|
|
_this.muchai_audio = null;
|
|
_this.mudan_audio = null;
|
|
_this.mulan_audio = null;
|
|
_this.pugongying_audio = null;
|
|
_this.putao_audio = null;
|
|
_this.renshen_audio = null;
|
|
_this.taozi_audio = null;
|
|
_this.zhuye_audio = null;
|
|
_this.err = null;
|
|
_this.yes = null;
|
|
return _this;
|
|
}
|
|
AudioManager_1 = AudioManager;
|
|
AudioManager.prototype.onLoad = function () {
|
|
if (AudioManager_1._instance == null) {
|
|
AudioManager_1._instance = this;
|
|
cc.game.addPersistRootNode(this.node);
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
window.addEventListener('backbutton', this.onBackButton, false);
|
|
// 监听浏览器的后退按钮点击事件
|
|
window.addEventListener('popstate', this.onBackButton, false);
|
|
window.addEventListener('onDisable', this.onExit, false);
|
|
// 防止浏览器后退行为
|
|
// history.pushState(null, null, location.href);
|
|
// window.addEventListener('popstate', function(event) {
|
|
// history.pushState(null, null, location.href);
|
|
// });
|
|
this.reward = false;
|
|
this.finish = false;
|
|
this.rewardCount = 0;
|
|
this.ctor();
|
|
this.preload();
|
|
};
|
|
AudioManager.prototype.ctor = function () {
|
|
this.mAudioMap = {};
|
|
/**
|
|
* 默认音量大小
|
|
* @type {number}
|
|
*/
|
|
this.bgMusicVolume = 0.1;
|
|
this.effectMusicVolume = 1;
|
|
this.mMusicSwitch = 1;
|
|
this.mEffectSwitch = 1;
|
|
};
|
|
AudioManager.prototype.onBackButton = function () {
|
|
var data = [{ status: "user_exit", location: "button" }];
|
|
cc.fx.HttpUtil.uploadUserLogData(data, null);
|
|
};
|
|
AudioManager.prototype.onExit = function () {
|
|
var data = [{ status: "user_exit", location: "exit" }];
|
|
cc.fx.HttpUtil.uploadUserLogData(data, null);
|
|
};
|
|
AudioManager.prototype.play = function (audioSource, loop, callback, isBgMusic) {
|
|
// if (isBgMusic && !this.mMusicSwitch) return;
|
|
// if (!isBgMusic && !this.mEffectSwitch) return;
|
|
var volume = isBgMusic ? this.bgMusicVolume : this.effectMusicVolume;
|
|
// if (cc.sys.isBrowser) {
|
|
// if(audioSource == this.brickSound){
|
|
// volume = 0.1;
|
|
// }
|
|
volume = 1;
|
|
cc.audioEngine.setEffectsVolume(1);
|
|
cc.audioEngine.setMusicVolume(1);
|
|
var context = cc.audioEngine.playEffect(audioSource, loop);
|
|
if (callback) {
|
|
cc.audioEngine.setFinishCallback(context, function () {
|
|
callback.call(this);
|
|
}.bind(this));
|
|
}
|
|
// cc.wwx.OutPut.log('play audio effect isBrowser: ' + context.src);
|
|
this.mAudioMap[audioSource] = context;
|
|
return audioSource;
|
|
// } else {
|
|
// return audioSource;
|
|
// }
|
|
};
|
|
AudioManager.prototype.save = function () {
|
|
// cc.wwx.Storage.setItem(cc.wwx.Storage.Key_Setting_Music_Volume, this.mMusicSwitch);
|
|
// cc.wwx.Storage.setItem(cc.wwx.Storage.Key_Setting_Effect_Volume, this.mEffectSwitch);
|
|
};
|
|
// static get Instance()
|
|
// {
|
|
// if (this._instance == null)
|
|
// {
|
|
// this._instance = new AudioManager();
|
|
// }
|
|
// return this._instance;
|
|
// }
|
|
AudioManager.prototype.preload = function () {
|
|
if (!(cc.sys.platform === cc.sys.WECHAT_GAME)) {
|
|
return;
|
|
}
|
|
var musics = [
|
|
this.audioGameBgm0,
|
|
];
|
|
musics.forEach(function (path) {
|
|
});
|
|
};
|
|
AudioManager.prototype.getAudioMusicSwitch = function () {
|
|
return this.mMusicSwitch;
|
|
};
|
|
AudioManager.prototype.getAudioEffectSwitch = function () {
|
|
return this.mEffectSwitch;
|
|
};
|
|
AudioManager.prototype.trunAudioSound = function (on) {
|
|
this.switchMusic(on);
|
|
this.switchEffect(on);
|
|
};
|
|
AudioManager.prototype.switchMusic = function (on) {
|
|
if (this.mMusicSwitch != (on ? 1 : 0)) {
|
|
this.mMusicSwitch = 1 - this.mMusicSwitch;
|
|
// this.save();
|
|
}
|
|
if (on) {
|
|
this.playMusicGame();
|
|
}
|
|
else {
|
|
this.stopMusic();
|
|
}
|
|
};
|
|
AudioManager.prototype.switchEffect = function (on) {
|
|
if (this.mEffectSwitch != (on ? 1 : 0)) {
|
|
this.mEffectSwitch = 1 - this.mEffectSwitch;
|
|
// this.save();
|
|
}
|
|
};
|
|
AudioManager.prototype.onHide = function () {
|
|
cc.audioEngine.pauseAll();
|
|
};
|
|
AudioManager.prototype.onShow = function () {
|
|
cc.audioEngine.resumeAll();
|
|
};
|
|
//播放音效
|
|
AudioManager.prototype.playEffect = function (name, callback) {
|
|
if (this[name])
|
|
return this.play(this[name], false, callback, this.mEffectSwitch);
|
|
};
|
|
AudioManager.prototype.playMusic = function (key, callback, loop) {
|
|
loop = typeof loop == 'undefined' || loop ? true : false;
|
|
this.stopMusic();
|
|
this.mMusicKey = this.play(key, loop, callback, true);
|
|
};
|
|
/**
|
|
* 游戏背景音乐
|
|
*/
|
|
AudioManager.prototype.playMusicGame = function () {
|
|
// this.playMusic(this.audioGameBgm0,{},true);
|
|
};
|
|
/**
|
|
* 停止背景音乐播放
|
|
*/
|
|
AudioManager.prototype.stopMusic = function () {
|
|
// cc.wwx.OutPut.log('stopMusic audio effect wx: ' + this.mMusicKey);
|
|
var context = this.mAudioMap[this.mMusicKey];
|
|
if (typeof (context) != 'undefined') {
|
|
if (cc.sys.isBrowser) {
|
|
cc.audioEngine.stop(context);
|
|
}
|
|
else {
|
|
context.stop();
|
|
}
|
|
cc.audioEngine.stop(context);
|
|
}
|
|
};
|
|
/*
|
|
* 游戏开始音效
|
|
*
|
|
*/
|
|
AudioManager.prototype.playGameStart = function () {
|
|
};
|
|
/*
|
|
* 失败的游戏结束
|
|
*/
|
|
AudioManager.prototype.playGameOver = function () {
|
|
};
|
|
/*
|
|
* 成功的游戏结束
|
|
*/
|
|
AudioManager.prototype.playGameResultFailed = function () {
|
|
};
|
|
/*
|
|
* 成功的游戏结束
|
|
*/
|
|
AudioManager.prototype.playGameResultSuccess = function () {
|
|
};
|
|
/**
|
|
* 报警的音效
|
|
*/
|
|
/**
|
|
* 按钮
|
|
*/
|
|
AudioManager.prototype.playAudioButton = function () {
|
|
// return this.play(this.audioButtonClick, false,null,this.mEffectSwitch);
|
|
};
|
|
var AudioManager_1;
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "audioGameBgm0", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "baishao_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "cha_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "chixiaodou_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "danggui_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "danshen_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "dazao_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "gancao_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "ganjiang_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "gouqi_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "jingjie_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "jinju_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "lizhi_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "lizi_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "longyan_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "moli_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "muchai_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "mudan_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "mulan_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "pugongying_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "putao_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "renshen_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "taozi_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "zhuye_audio", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "err", void 0);
|
|
__decorate([
|
|
property(cc.AudioClip)
|
|
], AudioManager.prototype, "yes", void 0);
|
|
AudioManager = AudioManager_1 = __decorate([
|
|
ccclass
|
|
], AudioManager);
|
|
return AudioManager;
|
|
}(cc.Component));
|
|
exports.default = AudioManager;
|
|
;
|
|
// export { AudioManager };
|
|
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxtb2R1bGVcXE11c2ljXFxBdWRpb01hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRU0sSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUM7SUFBMEMsZ0NBQVk7SUFBdEQ7UUFBQSxxRUFzU0M7UUFwU0csTUFBTTtRQUVOLG1CQUFhLEdBQWlCLElBQUksQ0FBQztRQUduQyxtQkFBYSxHQUFpQixJQUFJLENBQUM7UUFFbkMsZUFBUyxHQUFpQixJQUFJLENBQUM7UUFFL0Isc0JBQWdCLEdBQWlCLElBQUksQ0FBQztRQUV0QyxtQkFBYSxHQUFpQixJQUFJLENBQUM7UUFFbkMsbUJBQWEsR0FBaUIsSUFBSSxDQUFDO1FBRW5DLGlCQUFXLEdBQWlCLElBQUksQ0FBQztRQUVqQyxrQkFBWSxHQUFpQixJQUFJLENBQUM7UUFFbEMsb0JBQWMsR0FBaUIsSUFBSSxDQUFDO1FBRXBDLGlCQUFXLEdBQWlCLElBQUksQ0FBQztRQUVqQyxtQkFBYSxHQUFpQixJQUFJLENBQUM7UUFFbkMsaUJBQVcsR0FBaUIsSUFBSSxDQUFDO1FBRWpDLGlCQUFXLEdBQWlCLElBQUksQ0FBQztRQUVqQyxnQkFBVSxHQUFpQixJQUFJLENBQUM7UUFFaEMsbUJBQWEsR0FBaUIsSUFBSSxDQUFDO1FBRW5DLGdCQUFVLEdBQWlCLElBQUksQ0FBQztRQUVoQyxrQkFBWSxHQUFpQixJQUFJLENBQUM7UUFFbEMsaUJBQVcsR0FBaUIsSUFBSSxDQUFDO1FBRWpDLGlCQUFXLEdBQWlCLElBQUksQ0FBQztRQUVqQyxzQkFBZ0IsR0FBaUIsSUFBSSxDQUFDO1FBRXRDLGlCQUFXLEdBQWlCLElBQUksQ0FBQztRQUVqQyxtQkFBYSxHQUFpQixJQUFJLENBQUM7UUFFbkMsaUJBQVcsR0FBaUIsSUFBSSxDQUFDO1FBRWpDLGlC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Q0FBQzt1REFDWTtJQUVuQztRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDO3FEQUNVO0lBRWpDO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7cURBQ1U7SUFFakM7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQzs2Q0FDRTtJQUV6QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDOzZDQUNFO0lBdkRSLFlBQVk7UUFEaEMsT0FBTztPQUNhLFlBQVksQ0FzU2hDO0lBQUQsbUJBQUM7Q0F0U0QsQUFzU0MsQ0F0U3lDLEVBQUUsQ0FBQyxTQUFTLEdBc1NyRDtrQkF0U29CLFlBQVk7QUFzU2hDLENBQUM7QUFFRiwyQkFBMkIiLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJcblxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7XG5AY2NjbGFzc1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXVkaW9NYW5hZ2VyIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgX2luc3RhbmNlOiBhbnk7XG4gICAgLy/og4zmma/pn7PkuZBcbiAgICBAcHJvcGVydHkoY2MuQXVkaW9DbGlwKVxuICAgIGF1ZGlvR2FtZUJnbTA6IGNjLkF1ZGlvQ2xpcCA9IG51bGw7XG5cbiAgICBAcHJvcGVydHkoY2MuQXVkaW9DbGlwKVxuICAgIGJhaXNoYW9fYXVkaW86IGNjLkF1ZGlvQ2xpcCA9IG51bGw7XG4gICAgQHByb3BlcnR5KGNjLkF1ZGlvQ2xpcClcbiAgICBjaGFfYXVkaW86IGNjLkF1ZGlvQ2xpcCA9IG51bGw7XG4gICAgQHByb3BlcnR5KGNjLkF1ZGlvQ2xpcClcbiAgICBjaGl4aWFvZG91X2F1ZGlvOiBjYy5BdWRpb0NsaXAgPSBudWxsO1xuICAgIEBwcm9wZXJ0eShjYy5BdWRpb0NsaXApXG4gICAgZGFuZ2d1aV9hdWRpbzogY2MuQXVkaW9DbGlwID0gbnVsbDtcbiAgICBAcHJvcGVydHkoY2MuQXVkaW9DbGlwKVxuICAgIGRhbnNoZW5fYXVkaW86IGNjLkF1ZGlvQ2xpcCA9IG51bGw7XG4gICAgQHByb3BlcnR5KGNjLkF1ZGlvQ2xpcClcbiAgICBkYXphb19hdWRpbzogY2MuQXVkaW9DbGlwID0gbnVsbDtcbiAgICBAcHJvcGVydHkoY2MuQXVkaW9DbGlwKVxuICAgIGdhbmNhb19hdWRpbzogY2MuQXVkaW9DbGlwID0gbnVsbDtcbiAgICBAcHJvcGVydHkoY2MuQXVkaW9DbGlwKVxuICAgIGdhbmppYW5nX2F1ZGlvOiBjYy5BdWRpb0NsaXAgPSBudWxsO1xuICAgIEBwcm9wZXJ0eShjYy5BdWRpb0NsaXApXG4gICAgZ291cWlfYXVkaW86IGNjLkF1ZGlvQ2xpcCA9IG51bGw7XG4gICAgQHByb3BlcnR5KGNjLkF1ZGlvQ2xpcClcbiAgICBqaW5namllX2F1ZGlvOiBjYy5BdWRpb0NsaXAgPSBudWxsO1xuICAgIEBwcm9wZXJ0eShjYy5BdWRpb0NsaXApXG4gICAgamluanVfYXVkaW86IGNjLkF1ZGlvQ2xpcCA9IG51bGw7XG4gICAgQHByb3BlcnR5KGNjLkF1ZGlvQ2xpcClcbiAgICBsaXpoaV9hdWRpbzogY2MuQXVkaW9DbGlwID0gbnVsbDtcbiAgICBAcHJvcGVydHkoY2MuQXVkaW9DbGlwKVxuICAgIGxpemlfYXVkaW86IGNjLkF1ZGlvQ2xpcCA9IG51bGw7XG4gICAgQHByb3BlcnR5KGNjLkF1ZGlvQ2xpcClcbiAgICBsb25neWFuX2F1ZGlvOiBjYy5BdWRpb0NsaXAgPSBudWxsO1xuICAgIEBwcm9wZXJ0eShjYy5BdWRpb0NsaXApXG4gICAgbW9saV9hdWRpbzogY2MuQXVkaW9DbGlwID0gbnVsbDtcbiAgICBAcHJvcGVydHkoY2MuQXVkaW9DbGlwKVxuICAgIG11Y2hhaV9hdWRpbzogY2MuQXVkaW9DbGlwID0gbnVsbDtcbiAgICBAcHJvcGVydHkoY2MuQXVkaW9DbGlwKVxuICAgIG11ZGFuX2F1ZGlvOiBjYy5BdWRpb0NsaXAgPSBudWxsO1xuICAgIEBwcm9wZXJ0eShjYy5BdWRpb0NsaXApXG4gICAgbXVsYW5fYXVkaW86IGNjLkF1ZGlvQ2xpcCA9IG51bGw7XG4gICAgQHByb3BlcnR5KGNjLkF1ZGlvQ2xpcClcbiAgICBwdWdvbmd5aW5nX2F1ZGlvOiBjYy5BdWRpb0NsaXAgPSBudWxsO1xuICAgIEBwcm9wZXJ0eShjYy5BdWRpb0NsaXApXG4gICAgcHV0YW9fYXVkaW86IGNjLkF1ZGlvQ2xpcCA9IG51bGw7XG4gICAgQHByb3BlcnR5KGNjLkF1ZGlvQ2xpcClcbiAgICByZW5zaGVuX2F1ZGlvOiBjYy5BdWRpb0NsaXAgPSBudWxsO1xuICAgIEBwcm9wZXJ0eShjYy5BdWRpb0NsaXApXG4gICAgdGFvemlfYXVkaW86IGNjLkF1ZGlvQ2xpcCA9IG51bGw7XG4gICAgQHByb3BlcnR5KGNjLkF1ZGlvQ2xpcClcbiAgICB6aHV5ZV9hdWRpbzogY2MuQXVkaW9DbGlwID0gbnVsbDtcbiAgICBAcHJvcGVydHkoY2MuQXVkaW9DbGlwKVxuICAgIGVycjogY2MuQXVkaW9DbGlwID0gbnVsbDtcbiAgICBAcHJvcGVydHkoY2MuQXVkaW9DbGlwKVxuICAgIHllczogY2MuQXVkaW9DbGlwID0gbnVsbDtcblxuXG4gICAgbUF1ZGlvTWFwOiB7fTtcbiAgICBiZ011c2ljVm9sdW1lOiBudW1iZXI7XG4gICAgZWZmZWN0TXVzaWNWb2x1bWU6IG51bWJlcjtcbiAgICBtTXVzaWNTd2l0Y2g6IG51bWJlcjtcbiAgICBtRWZmZWN0U3dpdGNoOiBudW1iZXI7XG4gICAgYnJpY2tTb3VuZDogYW55O1xuICAgIHJld2FyZDogYm9vbGVhbjtcbiAgICBmaW5pc2g6IGJvb2xlYW47XG4gICAgcmV3YXJkQ291bnQ6IG51bWJlcjtcbiAgICBtTXVzaWNLZXk6IGFueTtcblxuICAgIG9uTG9hZCgpIHtcbiAgICAgICAgaWYgKEF1ZGlvTWFuYWdlci5faW5zdGFuY2UgPT0gbnVsbCkge1xuICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZSA9IHRoaXM7XG4gICAgICAgICAgICBjYy5nYW1lLmFkZFBlcnNpc3RSb290Tm9kZSh0aGlzLm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JhY2tidXR0b24nLCB0aGlzLm9uQmFja0J1dHRvbiwgZmFsc2UpO1xuIFxuICAgICAgICAvLyDnm5HlkKzmtY/op4jlmajnmoTlkI7pgIDmjInpkq7ngrnlh7vkuovku7ZcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgdGhpcy5vbkJhY2tCdXR0b24sIGZhbHNlKTtcblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25EaXNhYmxlJywgdGhpcy5vbkV4aXQsIGZhbHNlKTtcbiAgICAgXG4gICAgICAgIC8vIOmYsuatoua1j+iniOWZqOWQjumAgOihjOS4ulxuICAgICAgICAvLyBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCBsb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgLy8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgLy8gICAgIGhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsIGxvY2F0aW9uLmhyZWYpO1xuICAgICAgICAvLyB9KTtcblxuICAgICAgICB0aGlzLnJld2FyZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpbmlzaCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJld2FyZENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5jdG9yKCk7XG5cbiAgICAgICAgdGhpcy5wcmVsb2FkKCk7XG4gICAgfVxuXG5cblxuICAgIGN0b3IgKCkge1xuICAgICAgICB0aGlzLm1BdWRpb01hcCA9IHt9O1xuICAgICAgICAvKipcbiAgICAgICAgICog6buY6K6k6Z+z6YeP5aSn5bCPXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJnTXVzaWNWb2x1bWUgPSAwLjE7XG4gICAgICAgIHRoaXMuZWZmZWN0TXVzaWNWb2x1bWUgPSAxO1xuXG4gICAgICAgIHRoaXMubU11c2ljU3dpdGNoID0gMTtcbiAgICAgICAgdGhpcy5tRWZmZWN0U3dpdGNoID0gMTtcbiAgICB9XG5cbiAgICBvbkJhY2tCdXR0b24oKXtcbiAgICAgICAgbGV0IGRhdGEgPSBbe3N0YXR1czpcInVzZXJfZXhpdFwiLGxvY2F0aW9uOlwiYnV0dG9uXCJ9XTtcbiAgICAgICAgY2MuZnguSHR0cFV0aWwudXBsb2FkVXNlckxvZ0RhdGEoZGF0YSxudWxsKTtcbiAgICB9XG5cbiAgICBvbkV4aXQoKXtcbiAgICAgICAgbGV0IGRhdGEgPSBbe3N0YXR1czpcInVzZXJfZXhpdFwiLGxvY2F0aW9uOlwiZXhpdFwifV07XG4gICAgICAgIGNjLmZ4Lkh0dHBVdGlsLnVwbG9hZFVzZXJMb2dEYXRhKGRhdGEsbnVsbCk7XG4gICAgfVxuXG4gICAgcGxheSAoYXVkaW9Tb3VyY2UsIGxvb3AsIGNhbGxiYWNrLCBpc0JnTXVzaWMpIHtcbiAgICAgICAgLy8gaWYgKGlzQmdNdXNpYyAmJiAhdGhpcy5tTXVzaWNTd2l0Y2gpIHJldHVybjtcbiAgICAgICAgLy8gaWYgKCFpc0JnTXVzaWMgJiYgIXRoaXMubUVmZmVjdFN3aXRjaCkgcmV0dXJuO1xuICAgICAgICB2YXIgdm9sdW1lID0gaXNCZ011c2ljID8gdGhpcy5iZ011c2ljVm9sdW1lIDogdGhpcy5lZmZlY3RNdXNpY1ZvbHVtZTtcblxuICAgICAgICAvLyBpZiAoY2Muc3lzLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgLy8gaWYoYXVkaW9Tb3VyY2UgPT0gdGhpcy5icmlja1NvdW5kKXtcbiAgICAgICAgICAgIC8vICAgICB2b2x1bWUgPSAwLjE7XG4gICAgICAgICAgICAvLyB9IFxuICAgICAgICAgICAgdm9sdW1lID0gMTtcbiAgICAgICAgICAgIGNjLmF1ZGlvRW5naW5lLnNldEVmZmVjdHNWb2x1bWUoMSk7XG4gICAgICAgICAgICBjYy5hdWRpb0VuZ2luZS5zZXRNdXNpY1ZvbHVtZSgxKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjYy5hdWRpb0VuZ2luZS5wbGF5RWZmZWN0KGF1ZGlvU291cmNlLCBsb29wKTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgY2MuYXVkaW9FbmdpbmUuc2V0RmluaXNoQ2FsbGJhY2soY29udGV4dCwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2Mud3d4Lk91dFB1dC5sb2coJ3BsYXkgYXVkaW8gZWZmZWN0IGlzQnJvd3NlcjogJyArIGNvbnRleHQuc3JjKTtcblxuICAgICAgICAgICAgdGhpcy5tQXVkaW9NYXBbYXVkaW9Tb3VyY2VdID0gY29udGV4dDtcbiAgICAgICAgICAgIHJldHVybiBhdWRpb1NvdXJjZTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHJldHVybiBhdWRpb1NvdXJjZTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIHNhdmUgKCkge1xuICAgICAgICAvLyBjYy53d3guU3RvcmFnZS5zZXRJdGVtKGNjLnd3eC5TdG9yYWdlLktleV9TZXR0aW5nX011c2ljX1ZvbHVtZSwgdGhpcy5tTXVzaWNTd2l0Y2gpO1xuICAgICAgICAvLyBjYy53d3guU3RvcmFnZS5zZXRJdGVtKGNjLnd3eC5TdG9yYWdlLktleV9TZXR0aW5nX0VmZmVjdF9Wb2x1bWUsIHRoaXMubUVmZmVjdFN3aXRjaCk7XG4gICAgfVxuXG4gICAgLy8gc3RhdGljIGdldCBJbnN0YW5jZSgpXG4gICAgLy8ge1xuICAgIC8vICAgICBpZiAodGhpcy5faW5zdGFuY2UgPT0gbnVsbClcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgQXVkaW9NYW5hZ2VyKCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIC8vIH1cblxuICAgIHByZWxvYWQgKCkge1xuICAgICAgICBpZiAoIShjYy5zeXMucGxhdGZvcm0gPT09IGNjLnN5cy5XRUNIQVRfR0FNRSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdmFyIG11c2ljcyA9IFtcbiAgICAgICAgICAgIHRoaXMuYXVkaW9HYW1lQmdtMCxcbiAgICAgICAgXTtcbiAgICAgICAgbXVzaWNzLmZvckVhY2goZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldEF1ZGlvTXVzaWNTd2l0Y2goKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubU11c2ljU3dpdGNoO1xuXG4gICAgfVxuICAgIGdldEF1ZGlvRWZmZWN0U3dpdGNoKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLm1FZmZlY3RTd2l0Y2g7XG4gICAgfVxuICAgIHRydW5BdWRpb1NvdW5kKG9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5zd2l0Y2hNdXNpYyhvbik7XG4gICAgICAgIHRoaXMuc3dpdGNoRWZmZWN0KG9uKVxuICAgIH1cbiAgICBzd2l0Y2hNdXNpYyAob24pIHtcbiAgICAgICAgaWYgKHRoaXMubU11c2ljU3dpdGNoICE9IChvbj8xOjApKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm1NdXNpY1N3aXRjaCA9IDEtdGhpcy5tTXVzaWNTd2l0Y2g7XG4gICAgICAgICAgICAvLyB0aGlzLnNhdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZihvbilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbGF5TXVzaWNHYW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN3aXRjaEVmZmVjdCAob24pIHtcbiAgICAgICAgaWYgKHRoaXMubUVmZmVjdFN3aXRjaCAhPSAob24/MTowKSl7XG4gICAgICAgICAgICB0aGlzLm1FZmZlY3RTd2l0Y2ggPSAxLXRoaXMubUVmZmVjdFN3aXRjaDtcbiAgICAgICAgICAgIC8vIHRoaXMuc2F2ZSgpO1xuXG4gICAgICAgIH1cbiAgICB9XG4gICAgb25IaWRlICgpIHtcbiAgICAgICAgY2MuYXVkaW9FbmdpbmUucGF1c2VBbGwoKTtcbiAgICB9XG5cbiAgICBvblNob3cgKCkge1xuICAgICAgICBjYy5hdWRpb0VuZ2luZS5yZXN1bWVBbGwoKTtcbiAgICB9XG5cbiAgICAvL+aSreaUvumfs+aViFxuICAgIHBsYXlFZmZlY3QobmFtZSxjYWxsYmFjayl7XG4gICAgICAgIGlmKHRoaXNbbmFtZV0pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXNbbmFtZV0sIGZhbHNlLGNhbGxiYWNrLHRoaXMubUVmZmVjdFN3aXRjaCk7XG4gICAgfVxuICAgIHBsYXlNdXNpYyAoa2V5LCBjYWxsYmFjaywgbG9vcCkge1xuICAgICAgICBsb29wID0gdHlwZW9mIGxvb3AgPT0gJ3VuZGVmaW5lZCcgIHx8IGxvb3AgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgICAgIHRoaXMubU11c2ljS2V5ID0gdGhpcy5wbGF5KGtleSwgbG9vcCwgY2FsbGJhY2ssIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiDmuLjmiI/og4zmma/pn7PkuZBcbiAgICAgKi9cbiAgICBwbGF5TXVzaWNHYW1lICgpIHtcbiAgICAgICAgLy8gdGhpcy5wbGF5TXVzaWModGhpcy5hdWRpb0dhbWVCZ20wLHt9LHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiDlgZzmraLog4zmma/pn7PkuZDmkq3mlL5cbiAgICAgKi9cbiAgICBzdG9wTXVzaWMgKCkge1xuICAgICAgICAvLyBjYy53d3guT3V0UHV0LmxvZygnc3RvcE11c2ljIGF1ZGlvIGVmZmVjdCB3eDogJyArIHRoaXMubU11c2ljS2V5KTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMubUF1ZGlvTWFwW3RoaXMubU11c2ljS2V5XTtcblxuICAgICAgICBpZiAodHlwZW9mKGNvbnRleHQpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoY2Muc3lzLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgICAgIGNjLmF1ZGlvRW5naW5lLnN0b3AoY29udGV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2MuYXVkaW9FbmdpbmUuc3RvcChjb250ZXh0KTtcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICAqIOa4uOaIj+W8gOWni+mfs+aViFxuICAgICpcbiAgICAqL1xuICAgIHBsYXlHYW1lU3RhcnQoKVxuICAgIHtcbiAgICBcbiAgICB9XG4gICAgLypcbiAgICAqIOWksei0peeahOa4uOaIj+e7k+adn1xuICAgICovXG4gICAgcGxheUdhbWVPdmVyKClcbiAgICB7XG5cbiAgICB9XG4gICAgLypcbiAgICAgICAgKiDmiJDlip/nmoTmuLjmiI/nu5PmnZ9cbiAgICAgICAgKi9cbiAgICBwbGF5R2FtZVJlc3VsdEZhaWxlZCgpXG4gICAge1xuXG4gICAgfVxuICAgIC8qXG4gICAgKiDmiJDlip/nmoTmuLjmiI/nu5PmnZ9cbiAgICAqL1xuICAgIHBsYXlHYW1lUmVzdWx0U3VjY2VzcygpXG4gICAge1xuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIOaKpeitpueahOmfs+aViFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICog5oyJ6ZKuXG4gICAgICovXG4gICAgcGxheUF1ZGlvQnV0dG9uICgpIHtcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMucGxheSh0aGlzLmF1ZGlvQnV0dG9uQ2xpY2ssIGZhbHNlLG51bGwsdGhpcy5tRWZmZWN0U3dpdGNoKTtcbiAgICB9XG59O1xuXG4vLyBleHBvcnQgeyBBdWRpb01hbmFnZXIgfTtcbiJdfQ==
|