fmode-ng 0.0.111 → 0.0.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -59,8 +59,8 @@ export class ModalChatVoiceInputComponent {
59
59
  // ASR - 唤醒词
60
60
  async startASRAwake() {
61
61
  await this.voiceServ.openWithPriviledge();
62
- let speech = new this.voiceServ.webSpeech();
63
- speech.startRecognition("Nihao | Hello");
62
+ // let speech = new this.voiceServ.webSpeech();
63
+ // speech.startRecognition("Nihao | Hello");
64
64
  }
65
65
  playMusic(action) {
66
66
  this.player.src = `/assets/avatar/voice/${action}.mp3`;
@@ -144,8 +144,8 @@ export class ModalChatVoiceInputComponent {
144
144
  testTTS(sentence) {
145
145
  console.log(sentence);
146
146
  sentence = sentence || "你好呀,我是飞马小智!很高兴为您介绍脑控科技的发展历程。我们成立于2019年";
147
- let speech = new this.voiceServ.webSpeech();
148
- speech.speak(sentence);
147
+ // let speech = new this.voiceServ.webSpeech();
148
+ // speech.speak(sentence)
149
149
  }
150
150
  testXunfeiTTS() {
151
151
  // this.voiceServ.ttsXunfei.connectWebSocket()
@@ -163,4 +163,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
163
163
  }], talkMode: [{
164
164
  type: Input
165
165
  }] } });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY2hhdC12b2ljZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL21vZGFsLWNoYXQtdm9pY2UtaW5wdXQvbW9kYWwtY2hhdC12b2ljZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL21vZGFsLWNoYXQtdm9pY2UtaW5wdXQvbW9kYWwtY2hhdC12b2ljZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFRLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWhELE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBQyxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7O0FBY3JFLE1BQU0sT0FBTyw0QkFBNEI7SUFldkMsWUFDVSxRQUFpQixFQUNqQixNQUFhLEVBQ2IsU0FBeUIsRUFDekIsTUFBdUIsRUFDeEIsUUFBb0IsRUFDbkIsVUFBcUI7UUFMckIsYUFBUSxHQUFSLFFB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Z3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRvYXN0Q29udHJvbGxlciB9IGZyb20gXCJAaW9uaWMvYW5ndWxhclwiXHJcblxyXG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IElvbmljTW9kdWxlLCBQbGF0Zm9ybSB9IGZyb20gXCJAaW9uaWMvYW5ndWxhclwiXHJcblxyXG5pbXBvcnQgeyBGbW9kZVZvaWNlU2VydmljZSB9IGZyb20gJy4uLy4uL3ZvaWNlJztcclxuaW1wb3J0IHsgRm1vZGVDaGF0LENoYXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1mbWFpL3NlcnZpY2UtY2hhdCc7XHJcbmltcG9ydCB7IE5vdmFDbG91ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9ub3ZhLWNsb3VkL25vdmEtY2xvdWQuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWdub3N0aWMgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZGlhZ25vc3RpYy9uZ3gnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm0tbW9kYWwtY2hhdC12b2ljZS1pbnB1dCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLFxyXG4gICAgSW9uaWNNb2R1bGUsUm91dGVyTW9kdWxlLFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOltcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1jaGF0LXZvaWNlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tb2RhbC1jaGF0LXZvaWNlLWlucHV0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGFsQ2hhdFZvaWNlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXR7XHJcblxyXG4gIEBJbnB1dCgpIGZtb2RlQ2hhdDpGbW9kZUNoYXR8dW5kZWZpbmVkXHJcblxyXG4gICAvKipcclxuICAgICAqIOW8gOWni+iusuivneaWueW8j++8mmNsaWNr54K55Ye75byA5aeLL+eCueWHu+e7k+adnyBwcmVzc+aMieS9j+iusuivnS/mnb7lvIDnu5PmnZ9cclxuICAgICAqIEBkZWZhdWx0IGNsaWNrXHJcbiAgICAqL1xyXG4gIEBJbnB1dCgpIHRhbGtNb2RlOlwiY2xpY2tcInxcInByZXNzXCI9XCJjbGlja1wiXHJcbiAgdGFsa1RpcHMgPSBcIueCueWHu+ivneetkuW8gOWni+iusuivnVwiXHJcblxyXG4gIGVycm9yVGV4dDpzdHJpbmcgPSBgYFxyXG5cclxuICB2b2ljZVNlcnY6Rm1vZGVWb2ljZVNlcnZpY2VcclxuICBcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGxhdGZvcm06UGxhdGZvcm0sXHJcbiAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHRvYXN0Q3RybDpUb2FzdENvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIG5jbG91ZDpOb3ZhQ2xvdWRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGNoYXRTZXJ2OkNoYXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFnbm9zdGljOkRpYWdub3N0aWNcclxuICAgIFxyXG5cclxuICApe1xyXG4gICAgdGhpcy52b2ljZVNlcnYgPSBuZXcgRm1vZGVWb2ljZVNlcnZpY2UodGhpcy5wbGF0Zm9ybSx0aGlzLmRpYWdub3N0aWMpO1xyXG5cclxuICB9XHJcbiAgbmdPbkluaXQoKXtcclxuICAgIGlmKHRoaXMudGFsa01vZGU9PVwicHJlc3NcIil7XHJcbiAgICAgIHRoaXMudGFsa1RpcHMgPSBcIui9u+inpuW6lemDqOW8gOWni+iusuivnVwiXHJcbiAgICB9XHJcblxyXG4gICAgLy8g5byA5ZCv5b2V6Z+z5ZSk6YaS5Yqf6IO9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pbml0Vm9pY2VTZXZpY2UoKVxyXG4gICAgICB0aGlzLmluaXRWb2ljZUFTUigpXHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQVNS5ZSk6YaS5Yqf6IO9XHJcbiAgICovXHJcbiAgYXN5bmMgaW5pdFZvaWNlQVNSKCl7XHJcbiAgICAvLyDlvIDlkK/lvZXpn7PmnYPpmZBcclxuICAgIHRoaXMudm9pY2VTZXJ2LnJlcXVlc3RQZXJtaXNzaW9uKCkudGhlbigoKT0+e1xyXG4gICAgICB0aGlzLnZvaWNlU2Vydi5vcGVuV2l0aFByaXZpbGVkZ2UoKVxyXG4gICAgICAvLyDlvIDlp4vnm5HlkKzllKTphpLor40gTmloYW8gSGVsbG9cclxuICAgICAgdGhpcy5zdGFydEFTUkF3YWtlKClcclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vIEFTUiAtIOWUpOmGkuivjVxyXG4gIGFzeW5jIHN0YXJ0QVNSQXdha2UoKXtcclxuICAgIGF3YWl0IHRoaXMudm9pY2VTZXJ2Lm9wZW5XaXRoUHJpdmlsZWRnZSgpO1xyXG4gICAgbGV0IHNwZWVjaCA9IG5ldyB0aGlzLnZvaWNlU2Vydi53ZWJTcGVlY2goKTtcclxuICAgIHNwZWVjaC5zdGFydFJlY29nbml0aW9uKFwiTmloYW8gfCBIZWxsb1wiKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOmfs+mikeaPkOekuumfs+aSreaUvlxyXG4gICAqL1xyXG4gICBwbGF5ZXIgPSBuZXcgQXVkaW8oKTtcclxuXHJcbiAgIHBsYXlNdXNpYyhhY3Rpb24pe1xyXG4gICAgIHRoaXMucGxheWVyLnNyYyA9IGAvYXNzZXRzL2F2YXRhci92b2ljZS8ke2FjdGlvbn0ubXAzYFxyXG4gICAgIHRoaXMucGxheWVyLnBsYXkoKTtcclxuICAgfVxyXG5cclxuICAgLyoqXHJcbiAgICAgKiDliJ3lp4vljJblvZXpn7PovazlvZXmnI3liqFcclxuICAgICAqIEBkZXNjXHJcbiAgICAgKiDmoLnmja7mlbDlrZfop5LoibLlr7nor53nirbmgIHvvIzorr7orqHor63pn7PovazlvZXlkITkuovku7blpITnkIbov4fnqItcclxuICAgICAqIOW1jOWFpeaPkOekuumfs1xyXG4gICAgICog5bWM5YWl5Yqo55S7XHJcbiAgICAgKiDltYzlhaXllKTphpLor43liIfmjaLpgLvovpFcclxuICAgICAqL1xyXG4gICAgaW5pdFZvaWNlU2V2aWNlKCl7XHJcbiAgICAgIHRoaXMuZm1vZGVDaGF0LnVzZXJJbnB1dCA9IHRoaXMudm9pY2VTZXJ2LnJlc3VsdFRleHRcclxuICAgICAgdGhpcy52b2ljZVNlcnYucmVxdWVzdFBlcm1pc3Npb24oKS50aGVuKCgpPT57XHJcbiAgICAgICAgdGhpcy52b2ljZVNlcnYub3BlbldpdGhQcml2aWxlZGdlKClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIOW8gOWni+W9lemfs+WJjSDmkq3mlL7lgL7lkKzliqjnlLtcclxuICAgICAgLy8g5byA5aeL5b2V6Z+z5YmNIOaSreaUvuaPkOekuumfs1xyXG4gICAgICB0aGlzLnZvaWNlU2Vydi5vbkJlZm9yZVN0YXJ0VGFsayA9ICgpPT57XHJcbiAgICAgICAgdGhpcy5mbW9kZUNoYXQucGxheUFuaW1hdGlvbihcImxpc3RlbmluZ1wiKVxyXG4gICAgICAgIHRoaXMucGxheU11c2ljKFwic3RhcnQtdGFsa1wiKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDnlKjmiLflj5bmtojlvZXpn7PliY0g5pKt5pS+5o+Q56S66Z+zXHJcbiAgICAgIHRoaXMudm9pY2VTZXJ2Lm9uQmVmb3JlQ2FuY2VsVGFsayA9ICgpPT57XHJcbiAgICAgICAgdGhpcy5wbGF5TXVzaWMoXCJpbnRlcnVwdC10YWxrXCIpXHJcbiAgICAgICAgdGhpcy5mbW9kZUNoYXQucGxheUFuaW1hdGlvbihcIndhaXRpbmdcIilcclxuICAgICAgfVxyXG4gICAgICAvLyDnlKjmiLflj5bmtojlvZXpn7PlkI4g6bqm5YWL6aOO5a6e5pe255uR5ZCs5ZSk6YaS6K+NXHJcbiAgICAgIHRoaXMudm9pY2VTZXJ2Lm9uQWZ0ZXJDYW5jZWxUYWxrID0gKCk9PntcclxuICAgICAgICB0aGlzLnN0YXJ0QVNSQXdha2UoKSAvLyDnm5HlkKzkuI7puqblhYvpo47lhrLnqoHvvIzpnIDopoHph43lkK9cclxuICAgICAgfVxyXG4gICAgICAvLyDlrozmiJDlvZXpn7PliY0g5pKt5pS+5o+Q56S66Z+zXHJcbiAgICAgIC8vIOWujOaIkOW9lemfs+WQjiDmiafooYzlpITnkIbov4fnqItcclxuICAgICAgdGhpcy52b2ljZVNlcnYub25CZWZvcmVGaW5pc2hUYWxrID0gKCk9PntcclxuICAgICAgICB0aGlzLmZtb2RlQ2hhdC5wbGF5QW5pbWF0aW9uKFwidGhpbmtpbmdcIilcclxuICAgICAgICB0aGlzLnBsYXlNdXNpYyhcInN0b3AtdGFsa1wiKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudm9pY2VTZXJ2Lm9uQWZ0ZXJGaW5pc2hUYWxrID0gKCk9PntcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm9uQWZ0ZXJGaW5pc2hUYWxrXCIpXHJcbiAgICAgICAgdGhpcy5mbW9kZUNoYXQudXNlcklucHV0ID0gdGhpcy52b2ljZVNlcnY/LnJlc3VsdFRleHRcclxuICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKCkgLy8g5Y+R6YCB5raI5oGvXHJcbiAgICAgICAgdGhpcy5zdGFydEFTUkF3YWtlKCkgLy8g55uR5ZCs5LiO6bqm5YWL6aOO5Yay56qB77yM6ZyA6KaB6YeN5ZCvXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiDlj5HpgIHor63pn7Pmtojmga9cclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgYXN5bmMgc2VuZE1lc3NhZ2UoKXtcclxuXHJcbiAgICAgIC8vIOajgOa1i+eUqOaIt+eZu+W9leaDheWGtVxyXG4gICAgICAvLyBsZXQgaXNMb2dpbkxvY2sgPSBhd2FpdCB0aGlzLmF1dGhTZXJ2LmNoZWNrTG9naW5Mb2NrKClcclxuICAgICAgLy8gaWYoIWlzTG9naW5Mb2NrKSByZXR1cm4gZmFsc2VcclxuICBcclxuICAgICAgLy8g5qOA5rWL5L2Z6aKd5Y+K5qih5Z6L5LuY6LS56ZmQ5Yi2XHJcbiAgICAgIC8vIGxldCBwYXlDaGVjayA9IGF3YWl0IHRoaXMuY2hlY2tCYWxhbmNlKClcclxuICAgICAgLy8gaWYoIXBheUNoZWNrKSByZXR1cm4gZmFsc2VcclxuICBcclxuICAgICAgLy8g5qOA5rWL55So5oi36L6T5YWl5YaF5a6556m65YC8XHJcbiAgICAgIGlmKCF0aGlzLmZtb2RlQ2hhdC51c2VySW5wdXQpe1xyXG4gICAgICAgIHRoaXMuZXJyb3JUZXh0ID0gYOWGheWuueS4jeiDveS4uuepumBcclxuICAgICAgICBsZXQgdG9hc3QgPSBhd2FpdCB0aGlzLnRvYXN0Q3RybC5jcmVhdGUoe1xyXG4gICAgICAgICAgbWVzc2FnZTp0aGlzLmVycm9yVGV4dCxcclxuICAgICAgICAgIHBvc2l0aW9uOlwidG9wXCIsXHJcbiAgICAgICAgICBpY29uOidhbGVydCcsXHJcbiAgICAgICAgICBjb2xvcjpcIndhcm5pbmctY2lyY2xlXCIsXHJcbiAgICAgICAgICBkdXJhdGlvbjoxMDAwXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0b2FzdC5wcmVzZW50KCk7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgLy8g5q2j5bi45Y+R6YCB5raI5oGvXHJcbiAgICAgIHRoaXMuZm1vZGVDaGF0Py5zZW5kTWVzc2FnZSh0aGlzLnZvaWNlU2Vydi5yZXN1bHRUZXh0LG51bGwsKG1zZzphbnkpPT57XHJcbiAgICAgICAgXHJcbiAgICAgIH0se1xyXG4gICAgICAgIG9uU1NNTENvbXBsZXRlOih2b2ljZTphbnkpPT57XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh2b2ljZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZtb2RlQ2hhdC51c2VySW5wdXQgPSBgYFxyXG4gICAgICB0aGlzLmZtb2RlQ2hhdC51c2VySW1hZ2UgPSBgYFxyXG4gICAgfVxyXG5cclxuICAgICAgdGVzdFRUUyhzZW50ZW5jZT8pe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHNlbnRlbmNlKVxyXG4gICAgICAgIHNlbnRlbmNlID0gc2VudGVuY2UgfHwgXCLkvaDlpb3lkYDvvIzmiJHmmK/po57pqazlsI/mmbrvvIHlvojpq5jlhbTkuLrmgqjku4vnu43ohJHmjqfnp5HmioDnmoTlj5HlsZXljobnqIvjgILmiJHku6zmiJDnq4vkuo4yMDE55bm0XCJcclxuICAgICAgICBsZXQgc3BlZWNoID0gbmV3IHRoaXMudm9pY2VTZXJ2LndlYlNwZWVjaCgpO1xyXG4gICAgICAgIHNwZWVjaC5zcGVhayhzZW50ZW5jZSlcclxuICAgICAgfVxyXG4gICAgICB0ZXN0WHVuZmVpVFRTKCl7XHJcbiAgICAgICAgLy8gdGhpcy52b2ljZVNlcnYudHRzWHVuZmVpLmNvbm5lY3RXZWJTb2NrZXQoKVxyXG4gICAgICB9XHJcbn1cclxuXHJcbiIsIiAgICBcclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmbW9kZUNoYXRcIj5cclxuXHJcbiAgICA8IS0tIOeUqOaIt+i+k+WFpSDmj5DnpLrljLrln58gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwidXNlci1hc3ItaW5wdXRcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIiAqbmdJZj1cIiFmbW9kZUNoYXQ/LnVzZXJJbnB1dCAmJiB2b2ljZVNlcnYuYnRuU3RhdHVzIT0nT1BFTidcIj57e3RhbGtUaXBzfX08L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWFzci1pbnB1dFwiPnt7Zm1vZGVDaGF0Py51c2VySW5wdXR9fTwvZGl2PlxyXG4gICAgXHJcbiAgICA8IS0tIOa1i+ivleaMiemSriAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXN0LWJ1dHRvbi1ncm91cFwiICpuZ0lmPVwiZmFsc2VcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXJlY29yZFwiIChjbGljayk9XCJ2b2ljZVNlcnYudG9nZ2xlUmVjb3JkKClcIj7lvIDlp4vlvZXliLYge3t2b2ljZVNlcnYuY29ublN0YXR1c319IHt7dm9pY2VTZXJ2LmJ0blN0YXR1c319PC9idXR0b24+XHJcbiAgICAgICAgPGJyPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tcmVjb3JkXCIgKGNsaWNrKT1cInZvaWNlU2Vydi5wbGF5UmVjb3JkKClcIj7mkq3mlL7lvZXliLbnu5Pmnpw8L2J1dHRvbj5cclxuICAgICAgICA8YnI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1yZWNvcmRcIiAoY2xpY2spPVwidm9pY2VTZXJ2LnBsYXlCdWZmZXJzKClcIj7mkq3mlL5CdWZmZXJz57uT5p6cPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidGVzdFRUUygpXCI+5rWL6K+VVFRT57qvV0VCPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic3RhcnRBU1IoKVwiPua1i+ivlUFTUjwvYnV0dG9uPiBcclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ0ZXN0WHVuZmVpVFRTKClcIj7mtYvor5XlkIjmiJA8L2J1dHRvbj4gXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBcclxuICAgIFxyXG4gICAgPCEtLSDkuqTkupLmjInpkq4gLS0+XHJcbiAgICA8aW9uLWZhYiBzbG90PVwiZml4ZWRcIiBob3Jpem9udGFsPVwiY2VudGVyXCIgdmVydGljYWw9XCJib3R0b21cIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFsa01vZGU9PSdjbGljaydcIj5cclxuICAgICAgICAgIDwhLS0g6buY6K6k5oyJ6ZKu77ya5byA5aeL6K6y6K+dIC0tPlxyXG4gICAgICAgICAgPGlvbi1mYWItYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsb3NlSWNvbj1cImNoZWNrbWFya1wiIChjbGljayk9XCJ2b2ljZVNlcnYudG9nZ2xlUmVjb3JkKClcIj5cclxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJtaWMtb3V0bGluZVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICA8L2lvbi1mYWItYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0g6K6y6K+d5Lit77ya5Y+W5raI5Y+R6YCBIC0tPlxyXG4gICAgICAgICAgPGlvbi1mYWItbGlzdCBzaWRlPVwiZW5kXCI+XHJcbiAgICAgICAgICAgIDxpb24tZmFiLWJ1dHRvbiBbY2xhc3NdPVwiJ2xvYWRpbmcnXCIgKGNsaWNrKT1cInZvaWNlU2Vydi5jYW5jZWxUYWxrKClcIj5cclxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBhdXNlLW91dGxpbmVcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICA8L2lvbi1mYWItYnV0dG9uPlxyXG4gICAgICAgICAgPC9pb24tZmFiLWxpc3Q+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhbGtNb2RlPT0ncHJlc3MnXCI+XHJcbiAgICAgICAgICA8aW9uLWZhYi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xvc2VJY29uPVwibWljLW91dGxpbmVcIiAodG91Y2hzdGFydCk9XCJ2b2ljZVNlcnYudG9nZ2xlUmVjb3JkKClcIiAgKHRvdWNoZW5kKT1cInZvaWNlU2Vydi5jYW5jZWxUYWxrKClcIj5cclxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJtaWMtb3V0bGluZVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICA8L2lvbi1mYWItYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9pb24tZmFiPlxyXG5cclxuXHJcbiAgICA8IS0tIOmfs+mikeazouWKqCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtd2F2ZVwiPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY2hhdC12b2ljZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL21vZGFsLWNoYXQtdm9pY2UtaW5wdXQvbW9kYWwtY2hhdC12b2ljZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL21vZGFsLWNoYXQtdm9pY2UtaW5wdXQvbW9kYWwtY2hhdC12b2ljZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFRLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWhELE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBQyxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7O0FBY3JFLE1BQU0sT0FBTyw0QkFBNEI7SUFldkMsWUFDVSxRQUFpQixFQUNqQixNQUFhLEVBQ2IsU0FBeUIsRUFDekIsTUFBdUIsRUFDeEIsUUFBb0IsRUFDbkIsVUFBcUI7UUFMckIsYUFBUSxHQUFSLFFB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QUMsU0FBUyxDQUFDLFVBQVUsRUFBQyxJQUFJLEVBQUMsQ0FBQyxHQUFPLEVBQUMsRUFBRTtRQUV0RSxDQUFDLEVBQUM7WUFDQSxjQUFjLEVBQUMsQ0FBQyxLQUFTLEVBQUMsRUFBRTtnQkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNwQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtJQUMvQixDQUFDO0lBRUMsT0FBTyxDQUFDLFFBQVM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3JCLFFBQVEsR0FBRyxRQUFRLElBQUksd0NBQXdDLENBQUE7UUFDL0QsK0NBQStDO1FBQy9DLHlCQUF5QjtJQUMzQixDQUFDO0lBQ0QsYUFBYTtRQUNYLDhDQUE4QztJQUNoRCxDQUFDOytHQWhLTSw0QkFBNEI7bUdBQTVCLDRCQUE0QixrSUFMN0IsRUFDVCwwQkNwQkgsKzJFQWlEQSw2WkRqQ1ksWUFBWSxrSUFDcEIsV0FBVywycEJBQUMsWUFBWTs7NEZBT2YsNEJBQTRCO2tCQVh4QyxTQUFTOytCQUNFLDJCQUEyQixjQUN6QixJQUFJLFdBQ1AsQ0FBQyxZQUFZO3dCQUNwQixXQUFXLEVBQUMsWUFBWTtxQkFDekIsYUFDUyxFQUNUO2tOQU1RLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUcsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCxPbkluaXQsSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVG9hc3RDb250cm9sbGVyIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyXCJcclxuXHJcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSW9uaWNNb2R1bGUsIFBsYXRmb3JtIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyXCJcclxuXHJcbmltcG9ydCB7IEZtb2RlVm9pY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdm9pY2UnO1xyXG5pbXBvcnQgeyBGbW9kZUNoYXQsQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLWZtYWkvc2VydmljZS1jaGF0JztcclxuaW1wb3J0IHsgTm92YUNsb3VkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL25vdmEtY2xvdWQvbm92YS1jbG91ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhZ25vc3RpYyB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9kaWFnbm9zdGljL25neCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmbS1tb2RhbC1jaGF0LXZvaWNlLWlucHV0JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsXHJcbiAgICBJb25pY01vZHVsZSxSb3V0ZXJNb2R1bGUsXHJcbiAgXSxcclxuICBwcm92aWRlcnM6W1xyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLWNoYXQtdm9pY2UtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21vZGFsLWNoYXQtdm9pY2UtaW5wdXQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9kYWxDaGF0Vm9pY2VJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuXHJcbiAgQElucHV0KCkgZm1vZGVDaGF0OkZtb2RlQ2hhdHx1bmRlZmluZWRcclxuXHJcbiAgIC8qKlxyXG4gICAgICog5byA5aeL6K6y6K+d5pa55byP77yaY2xpY2vngrnlh7vlvIDlp4sv54K55Ye757uT5p2fIHByZXNz5oyJ5L2P6K6y6K+dL+advuW8gOe7k+adn1xyXG4gICAgICogQGRlZmF1bHQgY2xpY2tcclxuICAgICovXHJcbiAgQElucHV0KCkgdGFsa01vZGU6XCJjbGlja1wifFwicHJlc3NcIj1cImNsaWNrXCJcclxuICB0YWxrVGlwcyA9IFwi54K55Ye76K+d562S5byA5aeL6K6y6K+dXCJcclxuXHJcbiAgZXJyb3JUZXh0OnN0cmluZyA9IGBgXHJcblxyXG4gIHZvaWNlU2VydjpGbW9kZVZvaWNlU2VydmljZVxyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTpQbGF0Zm9ybSxcclxuICAgIHByaXZhdGUgcm91dGVyOlJvdXRlcixcclxuICAgIHByaXZhdGUgdG9hc3RDdHJsOlRvYXN0Q29udHJvbGxlcixcclxuICAgIHByaXZhdGUgbmNsb3VkOk5vdmFDbG91ZFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgY2hhdFNlcnY6Q2hhdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWdub3N0aWM6RGlhZ25vc3RpY1xyXG4gICAgXHJcblxyXG4gICl7XHJcbiAgICB0aGlzLnZvaWNlU2VydiA9IG5ldyBGbW9kZVZvaWNlU2VydmljZSh0aGlzLnBsYXRmb3JtLHRoaXMuZGlhZ25vc3RpYyk7XHJcblxyXG4gIH1cclxuICBuZ09uSW5pdCgpe1xyXG4gICAgaWYodGhpcy50YWxrTW9kZT09XCJwcmVzc1wiKXtcclxuICAgICAgdGhpcy50YWxrVGlwcyA9IFwi6L276Kem5bqV6YOo5byA5aeL6K6y6K+dXCJcclxuICAgIH1cclxuXHJcbiAgICAvLyDlvIDlkK/lvZXpn7PllKTphpLlip/og71cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRWb2ljZVNldmljZSgpXHJcbiAgICAgIHRoaXMuaW5pdFZvaWNlQVNSKClcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBU1LllKTphpLlip/og71cclxuICAgKi9cclxuICBhc3luYyBpbml0Vm9pY2VBU1IoKXtcclxuICAgIC8vIOW8gOWQr+W9lemfs+adg+mZkFxyXG4gICAgdGhpcy52b2ljZVNlcnYucmVxdWVzdFBlcm1pc3Npb24oKS50aGVuKCgpPT57XHJcbiAgICAgIHRoaXMudm9pY2VTZXJ2Lm9wZW5XaXRoUHJpdmlsZWRnZSgpXHJcbiAgICAgIC8vIOW8gOWni+ebkeWQrOWUpOmGkuivjSBOaWhhbyBIZWxsb1xyXG4gICAgICB0aGlzLnN0YXJ0QVNSQXdha2UoKVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8gQVNSIC0g5ZSk6YaS6K+NXHJcbiAgYXN5bmMgc3RhcnRBU1JBd2FrZSgpe1xyXG4gICAgYXdhaXQgdGhpcy52b2ljZVNlcnYub3BlbldpdGhQcml2aWxlZGdlKCk7XHJcbiAgICAvLyBsZXQgc3BlZWNoID0gbmV3IHRoaXMudm9pY2VTZXJ2LndlYlNwZWVjaCgpO1xyXG4gICAgLy8gc3BlZWNoLnN0YXJ0UmVjb2duaXRpb24oXCJOaWhhbyB8IEhlbGxvXCIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6Z+z6aKR5o+Q56S66Z+z5pKt5pS+XHJcbiAgICovXHJcbiAgIHBsYXllciA9IG5ldyBBdWRpbygpO1xyXG5cclxuICAgcGxheU11c2ljKGFjdGlvbil7XHJcbiAgICAgdGhpcy5wbGF5ZXIuc3JjID0gYC9hc3NldHMvYXZhdGFyL3ZvaWNlLyR7YWN0aW9ufS5tcDNgXHJcbiAgICAgdGhpcy5wbGF5ZXIucGxheSgpO1xyXG4gICB9XHJcblxyXG4gICAvKipcclxuICAgICAqIOWIneWni+WMluW9lemfs+i9rOW9leacjeWKoVxyXG4gICAgICogQGRlc2NcclxuICAgICAqIOagueaNruaVsOWtl+inkuiJsuWvueivneeKtuaAge+8jOiuvuiuoeivremfs+i9rOW9leWQhOS6i+S7tuWkhOeQhui/h+eoi1xyXG4gICAgICog5bWM5YWl5o+Q56S66Z+zXHJcbiAgICAgKiDltYzlhaXliqjnlLtcclxuICAgICAqIOW1jOWFpeWUpOmGkuivjeWIh+aNoumAu+i+kVxyXG4gICAgICovXHJcbiAgICBpbml0Vm9pY2VTZXZpY2UoKXtcclxuICAgICAgdGhpcy5mbW9kZUNoYXQudXNlcklucHV0ID0gdGhpcy52b2ljZVNlcnYucmVzdWx0VGV4dFxyXG4gICAgICB0aGlzLnZvaWNlU2Vydi5yZXF1ZXN0UGVybWlzc2lvbigpLnRoZW4oKCk9PntcclxuICAgICAgICB0aGlzLnZvaWNlU2Vydi5vcGVuV2l0aFByaXZpbGVkZ2UoKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgLy8g5byA5aeL5b2V6Z+z5YmNIOaSreaUvuWAvuWQrOWKqOeUu1xyXG4gICAgICAvLyDlvIDlp4vlvZXpn7PliY0g5pKt5pS+5o+Q56S66Z+zXHJcbiAgICAgIHRoaXMudm9pY2VTZXJ2Lm9uQmVmb3JlU3RhcnRUYWxrID0gKCk9PntcclxuICAgICAgICB0aGlzLmZtb2RlQ2hhdC5wbGF5QW5pbWF0aW9uKFwibGlzdGVuaW5nXCIpXHJcbiAgICAgICAgdGhpcy5wbGF5TXVzaWMoXCJzdGFydC10YWxrXCIpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOeUqOaIt+WPlua2iOW9lemfs+WJjSDmkq3mlL7mj5DnpLrpn7NcclxuICAgICAgdGhpcy52b2ljZVNlcnYub25CZWZvcmVDYW5jZWxUYWxrID0gKCk9PntcclxuICAgICAgICB0aGlzLnBsYXlNdXNpYyhcImludGVydXB0LXRhbGtcIilcclxuICAgICAgICB0aGlzLmZtb2RlQ2hhdC5wbGF5QW5pbWF0aW9uKFwid2FpdGluZ1wiKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOeUqOaIt+WPlua2iOW9lemfs+WQjiDpuqblhYvpo47lrp7ml7bnm5HlkKzllKTphpLor41cclxuICAgICAgdGhpcy52b2ljZVNlcnYub25BZnRlckNhbmNlbFRhbGsgPSAoKT0+e1xyXG4gICAgICAgIHRoaXMuc3RhcnRBU1JBd2FrZSgpIC8vIOebkeWQrOS4jum6puWFi+mjjuWGsueqge+8jOmcgOimgemHjeWQr1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOWujOaIkOW9lemfs+WJjSDmkq3mlL7mj5DnpLrpn7NcclxuICAgICAgLy8g5a6M5oiQ5b2V6Z+z5ZCOIOaJp+ihjOWkhOeQhui/h+eoi1xyXG4gICAgICB0aGlzLnZvaWNlU2Vydi5vbkJlZm9yZUZpbmlzaFRhbGsgPSAoKT0+e1xyXG4gICAgICAgIHRoaXMuZm1vZGVDaGF0LnBsYXlBbmltYXRpb24oXCJ0aGlua2luZ1wiKVxyXG4gICAgICAgIHRoaXMucGxheU11c2ljKFwic3RvcC10YWxrXCIpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy52b2ljZVNlcnYub25BZnRlckZpbmlzaFRhbGsgPSAoKT0+e1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwib25BZnRlckZpbmlzaFRhbGtcIilcclxuICAgICAgICB0aGlzLmZtb2RlQ2hhdC51c2VySW5wdXQgPSB0aGlzLnZvaWNlU2Vydj8ucmVzdWx0VGV4dFxyXG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoKSAvLyDlj5HpgIHmtojmga9cclxuICAgICAgICB0aGlzLnN0YXJ0QVNSQXdha2UoKSAvLyDnm5HlkKzkuI7puqblhYvpo47lhrLnqoHvvIzpnIDopoHph43lkK9cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIOWPkemAgeivremfs+a2iOaBr1xyXG4gICAgICogXHJcbiAgICAgKi9cclxuICAgICBhc3luYyBzZW5kTWVzc2FnZSgpe1xyXG5cclxuICAgICAgLy8g5qOA5rWL55So5oi355m75b2V5oOF5Ya1XHJcbiAgICAgIC8vIGxldCBpc0xvZ2luTG9jayA9IGF3YWl0IHRoaXMuYXV0aFNlcnYuY2hlY2tMb2dpbkxvY2soKVxyXG4gICAgICAvLyBpZighaXNMb2dpbkxvY2spIHJldHVybiBmYWxzZVxyXG4gIFxyXG4gICAgICAvLyDmo4DmtYvkvZnpop3lj4rmqKHlnovku5jotLnpmZDliLZcclxuICAgICAgLy8gbGV0IHBheUNoZWNrID0gYXdhaXQgdGhpcy5jaGVja0JhbGFuY2UoKVxyXG4gICAgICAvLyBpZighcGF5Q2hlY2spIHJldHVybiBmYWxzZVxyXG4gIFxyXG4gICAgICAvLyDmo4DmtYvnlKjmiLfovpPlhaXlhoXlrrnnqbrlgLxcclxuICAgICAgaWYoIXRoaXMuZm1vZGVDaGF0LnVzZXJJbnB1dCl7XHJcbiAgICAgICAgdGhpcy5lcnJvclRleHQgPSBg5YaF5a655LiN6IO95Li656m6YFxyXG4gICAgICAgIGxldCB0b2FzdCA9IGF3YWl0IHRoaXMudG9hc3RDdHJsLmNyZWF0ZSh7XHJcbiAgICAgICAgICBtZXNzYWdlOnRoaXMuZXJyb3JUZXh0LFxyXG4gICAgICAgICAgcG9zaXRpb246XCJ0b3BcIixcclxuICAgICAgICAgIGljb246J2FsZXJ0JyxcclxuICAgICAgICAgIGNvbG9yOlwid2FybmluZy1jaXJjbGVcIixcclxuICAgICAgICAgIGR1cmF0aW9uOjEwMDBcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRvYXN0LnByZXNlbnQoKTtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gIFxyXG4gICAgICAvLyDmraPluLjlj5HpgIHmtojmga9cclxuICAgICAgdGhpcy5mbW9kZUNoYXQ/LnNlbmRNZXNzYWdlKHRoaXMudm9pY2VTZXJ2LnJlc3VsdFRleHQsbnVsbCwobXNnOmFueSk9PntcclxuICAgICAgICBcclxuICAgICAgfSx7XHJcbiAgICAgICAgb25TU01MQ29tcGxldGU6KHZvaWNlOmFueSk9PntcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHZvaWNlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZm1vZGVDaGF0LnVzZXJJbnB1dCA9IGBgXHJcbiAgICAgIHRoaXMuZm1vZGVDaGF0LnVzZXJJbWFnZSA9IGBgXHJcbiAgICB9XHJcblxyXG4gICAgICB0ZXN0VFRTKHNlbnRlbmNlPyl7XHJcbiAgICAgICAgY29uc29sZS5sb2coc2VudGVuY2UpXHJcbiAgICAgICAgc2VudGVuY2UgPSBzZW50ZW5jZSB8fCBcIuS9oOWlveWRgO+8jOaIkeaYr+mjnumprOWwj+aZuu+8geW+iOmrmOWFtOS4uuaCqOS7i+e7jeiEkeaOp+enkeaKgOeahOWPkeWxleWOhueoi+OAguaIkeS7rOaIkOeri+S6jjIwMTnlubRcIlxyXG4gICAgICAgIC8vIGxldCBzcGVlY2ggPSBuZXcgdGhpcy52b2ljZVNlcnYud2ViU3BlZWNoKCk7XHJcbiAgICAgICAgLy8gc3BlZWNoLnNwZWFrKHNlbnRlbmNlKVxyXG4gICAgICB9XHJcbiAgICAgIHRlc3RYdW5mZWlUVFMoKXtcclxuICAgICAgICAvLyB0aGlzLnZvaWNlU2Vydi50dHNYdW5mZWkuY29ubmVjdFdlYlNvY2tldCgpXHJcbiAgICAgIH1cclxufVxyXG5cclxuIiwiICAgIFxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZtb2RlQ2hhdFwiPlxyXG5cclxuICAgIDwhLS0g55So5oi36L6T5YWlIOaPkOekuuWMuuWfnyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWFzci1pbnB1dFwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiICpuZ0lmPVwiIWZtb2RlQ2hhdD8udXNlcklucHV0ICYmIHZvaWNlU2Vydi5idG5TdGF0dXMhPSdPUEVOJ1wiPnt7dGFsa1RpcHN9fTwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInVzZXItYXNyLWlucHV0XCI+e3tmbW9kZUNoYXQ/LnVzZXJJbnB1dH19PC9kaXY+XHJcbiAgICBcclxuICAgIDwhLS0g5rWL6K+V5oyJ6ZKuIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInRlc3QtYnV0dG9uLWdyb3VwXCIgKm5nSWY9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tcmVjb3JkXCIgKGNsaWNrKT1cInZvaWNlU2Vydi50b2dnbGVSZWNvcmQoKVwiPuW8gOWni+W9leWItiB7e3ZvaWNlU2Vydi5jb25uU3RhdHVzfX0ge3t2b2ljZVNlcnYuYnRuU3RhdHVzfX08L2J1dHRvbj5cclxuICAgICAgICA8YnI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1yZWNvcmRcIiAoY2xpY2spPVwidm9pY2VTZXJ2LnBsYXlSZWNvcmQoKVwiPuaSreaUvuW9leWItue7k+aenDwvYnV0dG9uPlxyXG4gICAgICAgIDxicj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXJlY29yZFwiIChjbGljayk9XCJ2b2ljZVNlcnYucGxheUJ1ZmZlcnMoKVwiPuaSreaUvkJ1ZmZlcnPnu5Pmnpw8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ0ZXN0VFRTKClcIj7mtYvor5VUVFPnuq9XRUI8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzdGFydEFTUigpXCI+5rWL6K+VQVNSPC9idXR0b24+IFxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInRlc3RYdW5mZWlUVFMoKVwiPua1i+ivleWQiOaIkDwvYnV0dG9uPiBcclxuICAgIDwvZGl2PlxyXG5cclxuICAgIFxyXG4gICAgXHJcbiAgICA8IS0tIOS6pOS6kuaMiemSriAtLT5cclxuICAgIDxpb24tZmFiIHNsb3Q9XCJmaXhlZFwiIGhvcml6b250YWw9XCJjZW50ZXJcIiB2ZXJ0aWNhbD1cImJvdHRvbVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWxrTW9kZT09J2NsaWNrJ1wiPlxyXG4gICAgICAgICAgPCEtLSDpu5jorqTmjInpkq7vvJrlvIDlp4vorrLor50gLS0+XHJcbiAgICAgICAgICA8aW9uLWZhYi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xvc2VJY29uPVwiY2hlY2ttYXJrXCIgKGNsaWNrKT1cInZvaWNlU2Vydi50b2dnbGVSZWNvcmQoKVwiPlxyXG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm1pYy1vdXRsaW5lXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgIDwvaW9uLWZhYi1idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSDorrLor53kuK3vvJrlj5bmtojlj5HpgIEgLS0+XHJcbiAgICAgICAgICA8aW9uLWZhYi1saXN0IHNpZGU9XCJlbmRcIj5cclxuICAgICAgICAgICAgPGlvbi1mYWItYnV0dG9uIFtjbGFzc109XCInbG9hZGluZydcIiAoY2xpY2spPVwidm9pY2VTZXJ2LmNhbmNlbFRhbGsoKVwiPlxyXG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwicGF1c2Utb3V0bGluZVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgIDwvaW9uLWZhYi1idXR0b24+XHJcbiAgICAgICAgICA8L2lvbi1mYWItbGlzdD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICBcclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFsa01vZGU9PSdwcmVzcydcIj5cclxuICAgICAgICAgIDxpb24tZmFiLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbG9zZUljb249XCJtaWMtb3V0bGluZVwiICh0b3VjaHN0YXJ0KT1cInZvaWNlU2Vydi50b2dnbGVSZWNvcmQoKVwiICAodG91Y2hlbmQpPVwidm9pY2VTZXJ2LmNhbmNlbFRhbGsoKVwiPlxyXG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm1pYy1vdXRsaW5lXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgIDwvaW9uLWZhYi1idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2lvbi1mYWI+XHJcblxyXG5cclxuICAgIDwhLS0g6Z+z6aKR5rOi5YqoIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInJlY29yZC13YXZlXCI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
@@ -23,14 +23,13 @@ import 'recorder-core/src/extensions/waveview';
23
23
  import CryptoJS from "crypto-js";
24
24
  import { pcmtoWav } from './lib/pcm2wav';
25
25
  import { convertFrameBufferToBase64, resampleBuffer } from './lib/resample';
26
- import { WebSpeech } from './class-asr';
27
26
  // import { FmodeTTSXunfei } fro./class-tts-xunfei.ts.bakfei'
28
27
  export class FmodeVoiceService {
29
28
  constructor(platform, diagnostic) {
30
29
  this.platform = platform;
31
30
  this.diagnostic = diagnostic;
32
31
  this.disableASR = false;
33
- this.webSpeech = WebSpeech;
32
+ // webSpeech = WebSpeech;
34
33
  // 状态管理
35
34
  this.isRecording = false;
36
35
  this.isUserFinish = false;
@@ -558,6 +557,8 @@ export class FmodeVoiceService {
558
557
  }
559
558
  // 移动端权限方法
560
559
  isCapacitor() {
560
+ if (!this.platform?.is)
561
+ return false;
561
562
  return this.platform.is("capacitor") || this.platform.is("cordova");
562
563
  }
563
564
  async requestPermission() {
@@ -632,4 +633,4 @@ export class FmodeVoiceService {
632
633
  return new Blob([audioBuffer], { type: 'audio/pcm' });
633
634
  }
634
635
  }
635
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtdm9pY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy92b2ljZS9mbW9kZS12b2ljZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxrRUFBa0U7QUFDbEUsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBRXBDLFlBQVk7QUFDWixTQUFTLG1CQUFtQjtJQUMxQixJQUFJLENBQUM7UUFDSCxPQUFPLENBQ0wsTUFBTSxDQUFDLGdCQUFnQjtZQUN2QixNQUFNLENBQUMsWUFBWTtZQUNuQixNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVk7WUFDaEMsQ0FBQyxnRUFBZ0UsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBQ0QsUUFBUSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixFQUFFLENBQUMsQ0FBQyw0QkFBNEI7QUFFbkYsT0FBTyw4QkFBOEIsQ0FBQTtBQUNyQyxPQUFPLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sdUNBQXVDLENBQUE7QUFDOUMscUNBQXFDO0FBQ3JDLHFDQUFxQztBQUNyQyw2Q0FBNkM7QUFDN0MsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDBCQUEwQixFQUFpQixjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXhDLDZEQUE2RDtBQUU3RCxNQUFNLE9BQU8saUJBQWlCO0lBeUQ1QixZQUNVLFFBQWtCLEVBQ2xCLFVBQXNCO1FB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LENBQUM7SUFDeEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IFJlY29yZGVyTWFuYWdlciBmcm9tIFwiLi9saWIveHVuZmVpLXJlY29yZGVyXCJcclxuLy8gaW1wb3J0IHtSZWNvcmRlck1hbmFnZXJ9IGZyb20gXCIuL2xpYi9yZWNvcmRlci9yZWNvcmRlci1tYW5hZ2VyXCJcclxuaW1wb3J0IFJlY29yZGVyIGZyb20gJ3JlY29yZGVyLWNvcmUnXHJcblxyXG4vLyDmo4DmtYvmtY/op4jlmajmlK/mjIHmg4XlhrVcclxuZnVuY3Rpb24gY2hlY2tXb3JrbGV0U3VwcG9ydCgpIHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgd2luZG93LkF1ZGlvV29ya2xldE5vZGUgJiZcclxuICAgICAgd2luZG93LkF1ZGlvQ29udGV4dCAmJiBcclxuICAgICAgd2luZG93LkF1ZGlvQ29udGV4dC5hdWRpb1dvcmtsZXQgJiZcclxuICAgICAgIS9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KVxyXG4gICAgKTtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcblJlY29yZGVyLkNvbm5lY3RFbmFibGVXb3JrbGV0ID0gY2hlY2tXb3JrbGV0U3VwcG9ydCgpOyAvLyDmmI7noa7npoHnlKhBdWRpb1dvcmtsZXQg5YW85a655LiN5pSv5oyB55qE5Zy65pmvXHJcblxyXG5pbXBvcnQgJ3JlY29yZGVyLWNvcmUvc3JjL2VuZ2luZS9wY20nXHJcbmltcG9ydCAncmVjb3JkZXItY29yZS9zcmMvZW5naW5lL3dhdidcclxuaW1wb3J0ICdyZWNvcmRlci1jb3JlL3NyYy9leHRlbnNpb25zL3dhdmV2aWV3J1xyXG4vLyBpbXBvcnQgJy4vbGliL3JlY29yZGVyL2VuZ2luZS1wY20nXHJcbi8vIGltcG9ydCAnLi9saWIvcmVjb3JkZXIvZW5naW5lLXdhdidcclxuLy8gaW1wb3J0ICcuL2xpYi9yZWNvcmRlci9leHRlbnNpb24td2F2ZXZpZXcnXHJcbmltcG9ydCBDcnlwdG9KUyBmcm9tIFwiY3J5cHRvLWpzXCJcclxuaW1wb3J0IHsgcGNtdG9XYXYgfSBmcm9tICcuL2xpYi9wY20yd2F2JztcclxuaW1wb3J0IHsgY29udmVydEZyYW1lQnVmZmVyVG9CYXNlNjQsIHJlc2FtcGxlQXVkaW8sIHJlc2FtcGxlQnVmZmVyIH0gZnJvbSAnLi9saWIvcmVzYW1wbGUnO1xyXG5pbXBvcnQgeyBXZWJTcGVlY2ggfSBmcm9tICcuL2NsYXNzLWFzcic7XHJcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG4vLyBpbXBvcnQgeyBEaWFnbm9zdGljIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2RpYWdub3N0aWMvbmd4JztcclxuaW1wb3J0IHsgRGlhZ25vc3RpYyB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9kaWFnbm9zdGljL25neCc7XHJcbi8vIGltcG9ydCB7IEZtb2RlVFRTWHVuZmVpIH0gZnJvLi9jbGFzcy10dHMteHVuZmVpLnRzLmJha2ZlaSdcclxuXHJcbmV4cG9ydCBjbGFzcyBGbW9kZVZvaWNlU2VydmljZSB7XHJcbiAgZGlzYWJsZUFTUjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHdlYlNwZWVjaCA9IFdlYlNwZWVjaDtcclxuXHJcbiAgLy8g54q25oCB566h55CGXHJcbiAgcHJpdmF0ZSBpc1JlY29yZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNVc2VyRmluaXNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzaG91bGRSZWNvbm5lY3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgcmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBtYXhSZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyID0gMztcclxuICBwcml2YXRlIHJlY29ubmVjdERlbGF5OiBudW1iZXIgPSAxMDAwO1xyXG5cclxuICAvLyDlvZXliLbnm7jlhbMgLSDni6znq4vkuo5XZWJTb2NrZXRcclxuICByZWNvcmRXYXZCbG9iOiBCbG9iID0gbnVsbDtcclxuICByZWNvcmRQY21CbG9iOiBCbG9iID0gbnVsbDtcclxuICByZWNvcmREdXJhdGlvbjogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIGFsbFJlY29yZGVkQnVmZmVyczogQXJyYXk8YW55PiA9IFtdOyAvLyDlrZjlgqjmiYDmnInlvZXliLbnmoRidWZmZXJcclxuICBwcml2YXRlIGN1cnJlbnRSZWNvcmRlcjogYW55ID0gbnVsbDsgLy8g5b2T5YmN55qE5b2V5Yi25Zmo5a6e5L6LXHJcbiAgXHJcbiAgLy8gV2ViU29ja2V055u45YWzXHJcbiAgaWF0V1M6IFdlYlNvY2tldDtcclxuICBidG5TdGF0dXMgPSBcIlVOREVGSU5FRFwiO1xyXG4gIGNvbm5TdGF0dXMgPSBcIlwiO1xyXG4gIFxyXG4gIC8vIOe7k+aenOebuOWFs1xyXG4gIHJlc3VsdFRleHQgPSBcIlwiO1xyXG4gIHJlc3VsdFRleHRUZW1wID0gXCJcIjtcclxuICBcclxuICAvLyDorqHml7bnm7jlhbNcclxuICBjb3VudGRvd25JbnRlcnZhbDogYW55O1xyXG4gIGR1cmF0aW9uSW50ZXJ2YWw6IGFueTtcclxuICBkdXJhdGlvblN0cjogc3RyaW5nID0gXCIwMDowMFwiO1xyXG4gIGR1cmF0aW9uOiBudW1iZXIgPSAwO1xyXG4gIG5vdzogRGF0ZTtcclxuICBcclxuICAvLyDms6LlvaLnm7jlhbNcclxuICB3YXZlQ2xpZW50OiBhbnk7XHJcbiAgcmVjb3JkVHlwZSA9IFwicGNtXCI7XHJcbiAgZW5jb2RpbmdUeXBlID0gXCJyYXdcIjtcclxuXHJcbiAgLy8g5Zue6LCD5Ye95pWwXHJcbiAgb25SZXN1bHRUZXh0Q2hhbmdlZDogRnVuY3Rpb247XHJcbiAgb25CZWZvcmVGaW5pc2hUYWxrOiBGdW5jdGlvbjtcclxuICBvbkFmdGVyRmluaXNoVGFsazogRnVuY3Rpb247XHJcbiAgb25JbnB1dENoYW5nZTogRnVuY3Rpb247XHJcbiAgb25CZWZvcmVTdGFydFRhbGs6IEZ1bmN0aW9uO1xyXG4gIG9uQWZ0ZXJTdGFydFRhbGs6IEZ1bmN0aW9uO1xyXG4gIG9uQmVmb3JlQ2FuY2VsVGFsazogRnVuY3Rpb247XHJcbiAgb25BZnRlckNhbmNlbFRhbGs6IEZ1bmN0aW9uO1xyXG4gIG9uQWZ0ZXJSZWNvcmRTdGFydDogRnVuY3Rpb247XHJcbiAgb25EdXJhdGlvblN0ckNoYW5nZTogRnVuY3Rpb247XHJcblxyXG4gIC8vIEFQSemFjee9rlxyXG4gIEFQUElEID0gXCI1MGY0YTQ2Y1wiO1xyXG4gIEFQSV9TRUNSRVQgPSBcIk56RmxObUZoWkRKak1ETmtaR00zTnpJME16ZzJPR05tXCI7XHJcbiAgQVBJX0tFWSA9IFwiMTA2ZGRjNDBkZmQ0YjljYTZkN2I0N2M3MGZhZGE3NDlcIjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcclxuICAgIHByaXZhdGUgZGlhZ25vc3RpYzogRGlhZ25vc3RpYyxcclxuICApIHtcclxuICAgIHRoaXMucmVxdWVzdFBlcm1pc3Npb24oKTtcclxuICB9XHJcblxyXG4gIC8vIOeUqOaIt+aTjeS9nOaWueazlVxyXG4gIHRvZ2dsZVJlY29yZCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCd0b2dnbGVSZWNvcmQnLCB0aGlzLmJ0blN0YXR1cyk7XHJcbiAgICBpZiAodGhpcy5idG5TdGF0dXMgPT09IFwiVU5ERUZJTkVEXCIgfHwgdGhpcy5idG5TdGF0dXMgPT09IFwiQ0xPU0VEXCIpIHtcclxuICAgICAgdGhpcy5zdGFydFRhbGsoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idG5TdGF0dXMgPT09IFwiQ09OTkVDVElOR1wiIHx8IHRoaXMuYnRuU3RhdHVzID09PSBcIk9QRU5cIikge1xyXG4gICAgICB0aGlzLmZpbmlzaFRhbGsoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHN0YXJ0VGFsayhldmVudD8pIHtcclxuICAgIGNvbnNvbGUubG9nKCdzdGFydFRhbGsgY2FsbGVkJyk7XHJcbiAgICB0aGlzLnJlc2V0U3RhdGUoKTtcclxuICAgIHRoaXMub25CZWZvcmVTdGFydFRhbGsgJiYgdGhpcy5vbkJlZm9yZVN0YXJ0VGFsaygpO1xyXG4gICAgXHJcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5vcGVuV2l0aFByaXZpbGVkZ2UoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDEuIOmmluWFiOWQr+WKqOeLrOeri+W9leWItlxyXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0SW5kZXBlbmRlbnRSZWNvcmRpbmcoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDIuIOeEtuWQjuWQr+WKqFdlYlNvY2tldOi/nuaOpVxyXG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG91bGRSZWNvbm5lY3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzID0gMDtcclxuICAgICAgXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29ubmVjdFdlYlNvY2tldCgpO1xyXG4gICAgICB9LCAxMDApO1xyXG5cclxuICAgICAgdGhpcy5zdGFydENvdW50ZG93bigpO1xyXG4gICAgICB0aGlzLm9uQWZ0ZXJTdGFydFRhbGsgJiYgdGhpcy5vbkFmdGVyU3RhcnRUYWxrKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgdGFsazonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZmluaXNoVGFsaygpIHtcclxuICAgIGNvbnNvbGUubG9nKCdmaW5pc2hUYWxrIGNhbGxlZCcpO1xyXG4gICAgdGhpcy5pc1VzZXJGaW5pc2ggPSB0cnVlO1xyXG4gICAgdGhpcy5zaG91bGRSZWNvbm5lY3QgPSBmYWxzZTtcclxuICAgIHRoaXMub25CZWZvcmVGaW5pc2hUYWxrICYmIHRoaXMub25CZWZvcmVGaW5pc2hUYWxrKCk7XHJcbiAgICBcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIDEuIOWFiOWFs+mXrVdlYlNvY2tldFxyXG4gICAgICB0aGlzLmNsb3NlV2ViU29ja2V0KCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyAyLiDlgZzmraLni6znq4vlvZXliLblubbojrflj5blrozmlbTpn7PpopFcclxuICAgICAgYXdhaXQgdGhpcy5zdG9wSW5kZXBlbmRlbnRSZWNvcmRpbmcoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDMuIOa4heeQhueKtuaAgVxyXG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VCdG5TdGF0dXMoXCJDTE9TRURcIik7XHJcbiAgICAgIFxyXG4gICAgICAvLyA0LiDlu7bov5/lm57osIPnoa7kv53miYDmnInlpITnkIblrozmiJBcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VyRmluaXNoKSB7XHJcbiAgICAgICAgICB0aGlzLm9uQWZ0ZXJGaW5pc2hUYWxrICYmIHRoaXMub25BZnRlckZpbmlzaFRhbGsoKTtcclxuICAgICAgICAgIHRoaXMuaXNVc2VyRmluaXNoID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCA1MDApO1xyXG4gICAgICBcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZpbmlzaGluZyB0YWxrOicsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbmNlbFRhbGsoKSB7XHJcbiAgICBjb25zb2xlLmxvZygnY2FuY2VsVGFsayBjYWxsZWQnKTtcclxuICAgIHRoaXMub25CZWZvcmVDYW5jZWxUYWxrICYmIHRoaXMub25CZWZvcmVDYW5jZWxUYWxrKCk7XHJcbiAgICBcclxuICAgIHRoaXMuaXNVc2VyRmluaXNoID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3VsZFJlY29ubmVjdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICAvLyDlhbPpl61XZWJTb2NrZXRcclxuICAgIHRoaXMuY2xvc2VXZWJTb2NrZXQoKTtcclxuICAgIFxyXG4gICAgLy8g5YGc5q2i54us56uL5b2V5Yi25L2G5LiN5L+d5a2Y57uT5p6cXHJcbiAgICB0aGlzLmNhbmNlbEluZGVwZW5kZW50UmVjb3JkaW5nKCk7XHJcbiAgICBcclxuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xyXG4gICAgdGhpcy5vbkFmdGVyQ2FuY2VsVGFsayAmJiB0aGlzLm9uQWZ0ZXJDYW5jZWxUYWxrKCk7XHJcbiAgfVxyXG5cclxuICAvLyDni6znq4vlvZXliLbmlrnms5UgLSDkuI5XZWJTb2NrZXTlrozlhajop6PogKZcclxuICBhc3luYyBzdGFydEluZGVwZW5kZW50UmVjb3JkaW5nKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc29sZS5sb2coJ1N0YXJ0aW5nIGluZGVwZW5kZW50IHJlY29yZGluZycpO1xyXG4gICAgXHJcbiAgICB0aGlzLmFsbFJlY29yZGVkQnVmZmVycyA9IFtdO1xyXG4gICAgdGhpcy5jcmVhdGVJbmRlcGVuZGVudFJlY29yZGVyKCk7XHJcbiAgICBcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudFJlY29yZGVyLm9wZW4oKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdJbmRlcGVuZGVudCByZWNvcmRlciBvcGVuZWQnKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDliJvlu7rlj6/op4bljJZcclxuICAgICAgICBsZXQgd2F2ZURpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucmVjb3JkLXdhdmVcIik7XHJcbiAgICAgICAgaWYgKHdhdmVEaXYgJiYgUmVjb3JkZXIuV2F2ZVZpZXcpIHtcclxuICAgICAgICAgIHRoaXMud2F2ZUNsaWVudCA9IFJlY29yZGVyLldhdmVWaWV3KHsgZWxlbTogXCIucmVjb3JkLXdhdmVcIiB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jdXJyZW50UmVjb3JkZXIuc3RhcnQoKTtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZWNvcmRTdGFydCAmJiB0aGlzLm9uQWZ0ZXJSZWNvcmRTdGFydCgpO1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSwgKG1zZywgaXNVc2VyTm90QWxsb3cpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gb3BlbiBpbmRlcGVuZGVudCByZWNvcmRlcjonLCBtc2cpO1xyXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IobXNnKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdG9wSW5kZXBlbmRlbnRSZWNvcmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zb2xlLmxvZygnU3RvcHBpbmcgaW5kZXBlbmRlbnQgcmVjb3JkaW5nJyk7XHJcbiAgICBcclxuICAgIGlmICghdGhpcy5jdXJyZW50UmVjb3JkZXIpIHtcclxuICAgICAgY29uc29sZS5sb2coJ05vIGluZGVwZW5kZW50IHJlY29yZGVyIHRvIHN0b3AnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5zdG9wKFxyXG4gICAgICAgIGFzeW5jIChibG9iOiBCbG9iLCBkdXJhdGlvbjogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnSW5kZXBlbmRlbnQgcmVjb3JkaW5nIHN0b3BwZWQgc3VjY2Vzc2Z1bGx5JywgYmxvYiwgZHVyYXRpb24pO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyDkv53lrZjlrozmlbTnmoTlvZXliLbnu5PmnpxcclxuICAgICAgICAgIHRoaXMucmVjb3JkUGNtQmxvYiA9IGJsb2I7XHJcbiAgICAgICAgICB0aGlzLnJlY29yZFdhdkJsb2IgPSBhd2FpdCB0aGlzLnBjbUJsb2JUb1dhdkJsb2IoYmxvYiwgNDQxMDApO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyDmuIXnkIblvZXliLblmahcclxuICAgICAgICAgIHRoaXMuY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChtc2cpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCLni6znq4vlvZXpn7PlgZzmraLlpLHotKU6XCIgKyBtc2cpO1xyXG4gICAgICAgICAgdGhpcy5jbGVhbnVwSW5kZXBlbmRlbnRSZWNvcmRlcigpO1xyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsSW5kZXBlbmRlbnRSZWNvcmRpbmcoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnQ2FuY2VsbGluZyBpbmRlcGVuZGVudCByZWNvcmRpbmcnKTtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuY3VycmVudFJlY29yZGVyKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8g55u05o6l5YWz6Zet77yM5LiN5L+d5a2Y57uT5p6cXHJcbiAgICAgICAgdGhpcy5jdXJyZW50UmVjb3JkZXIuY2xvc2UoKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjbG9zaW5nIGluZGVwZW5kZW50IHJlY29yZGVyOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmNsZWFudXBJbmRlcGVuZGVudFJlY29yZGVyKCk7XHJcbiAgICB0aGlzLnJlY29yZFBjbUJsb2IgPSBudWxsO1xyXG4gICAgdGhpcy5yZWNvcmRXYXZCbG9iID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlSW5kZXBlbmRlbnRSZWNvcmRlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRSZWNvcmRlcikge1xyXG4gICAgICB0aGlzLmNsZWFudXBJbmRlcGVuZGVudFJlY29yZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXJyZW50UmVjb3JkZXIgPSBSZWNvcmRlcih7XHJcbiAgICAgIHR5cGU6IHRoaXMucmVjb3JkVHlwZSxcclxuICAgICAgc2FtcGxlUmF0ZTogNDQxMDAsXHJcbiAgICAgIGJpdFJhdGU6IDE2LFxyXG4gICAgICBvblByb2Nlc3M6IChidWZmZXJzLCBwb3dlckxldmVsLCBidWZmZXJEdXJhdGlvbiwgYnVmZmVyU2FtcGxlUmF0ZSwgbmV3QnVmZmVySWR4LCBhc3luY0VuZCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1JlY29yZGluZykgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyDkv53lrZjmiYDmnIlidWZmZXLnlKjkuo7mnIDnu4jlkIjmiJDlrozmlbTpn7PpopFcclxuICAgICAgICB0aGlzLmFsbFJlY29yZGVkQnVmZmVycyA9IGJ1ZmZlcnM7XHJcblxyXG4gICAgICAgIC8vIOiOt+WPluacgOaWsOeahOmfs+mikeeJh+auteeUqOS6juWunuaXtkFTUlxyXG4gICAgICAgIGxldCBmcmFtZUJ1ZmZlciA9IGJ1ZmZlcnMubGVuZ3RoICYmIGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAoIWZyYW1lQnVmZmVyKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIOmHjemHh+agt+WIsDE2a0h655So5LqOQVNSXHJcbiAgICAgICAgZnJhbWVCdWZmZXIgPSByZXNhbXBsZUJ1ZmZlcihmcmFtZUJ1ZmZlciwgNDQxMDAsIDE2MDAwKTtcclxuXHJcbiAgICAgICAgLy8g5Y+R6YCB5YiwV2ViU29ja2V06L+b6KGM5a6e5pe2QVNSXHJcbiAgICAgICAgdGhpcy5zZW5kQXVkaW9Ub1dlYlNvY2tldChmcmFtZUJ1ZmZlcik7XHJcblxyXG4gICAgICAgIC8vIOabtOaWsOazouW9ouaYvuekulxyXG4gICAgICAgIHRoaXMud2F2ZUNsaWVudD8uaW5wdXQoYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdLCBwb3dlckxldmVsLCBidWZmZXJTYW1wbGVSYXRlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFudXBJbmRlcGVuZGVudFJlY29yZGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFJlY29yZGVyKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UmVjb3JkZXIuY2xvc2UoKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjbGVhbmluZyB1cCBpbmRlcGVuZGVudCByZWNvcmRlcjonLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jdXJyZW50UmVjb3JkZXIgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZW5kQXVkaW9Ub1dlYlNvY2tldChmcmFtZUJ1ZmZlcjogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pYXRXUyAmJiB0aGlzLmlhdFdTLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOICYmICF0aGlzLmRpc2FibGVBU1IpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmlhdFdTLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBzdGF0dXM6IDEsXHJcbiAgICAgICAgICAgIGZvcm1hdDogXCJhdWRpby9MMTY7cmF0ZT0xNjAwMFwiLFxyXG4gICAgICAgICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICAgIGF1ZGlvOiBjb252ZXJ0RnJhbWVCdWZmZXJUb0Jhc2U2NChmcmFtZUJ1ZmZlcilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzZW5kaW5nIGF1ZGlvIGRhdGEgdG8gV2ViU29ja2V0OlwiLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFdlYlNvY2tldOebuOWFs+aWueazlSAtIOS7heeUqOS6jkFTUu+8jOS4jeaOp+WItuW9leWItlxyXG4gIGNvbm5lY3RXZWJTb2NrZXQoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImNvbm5lY3RXZWJTb2NrZXQgY2FsbGVkLCBzaG91bGRSZWNvbm5lY3Q6XCIsIHRoaXMuc2hvdWxkUmVjb25uZWN0KTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29ubmVjdCB8fCAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25uZWN0aW5nIFdlYlNvY2tldCAtIHNob3VsZFJlY29ubmVjdDpcIiwgdGhpcy5zaG91bGRSZWNvbm5lY3QsIFwiaXNSZWNvcmRpbmc6XCIsIHRoaXMuaXNSZWNvcmRpbmcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5YWz6Zet546w5pyJ6L+e5o6lXHJcbiAgICB0aGlzLmNsb3NlV2ViU29ja2V0KCk7XHJcblxyXG4gICAgY29uc3Qgd2Vic29ja2V0VXJsID0gdGhpcy5nZXRXZWJTb2NrZXRVcmwoKTtcclxuICAgIGNvbnNvbGUubG9nKFwiQ29ubmVjdGluZyB0bzpcIiwgd2Vic29ja2V0VXJsKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoXCJXZWJTb2NrZXRcIiBpbiB3aW5kb3cpIHtcclxuICAgICAgICB0aGlzLmlhdFdTID0gbmV3IFdlYlNvY2tldCh3ZWJzb2NrZXRVcmwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLmtY/op4jlmajkuI3mlK/mjIFXZWJTb2NrZXRcIik7XHJcbiAgICAgICAgYWxlcnQoXCLmtY/op4jlmajkuI3mlK/mjIFXZWJTb2NrZXRcIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNoYW5nZUJ0blN0YXR1cyhcIkNPTk5FQ1RJTkdcIik7XHJcblxyXG4gICAgICB0aGlzLmlhdFdTLm9ub3BlbiA9IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJXZWJTb2NrZXQgY29ubmVjdGVkIGZvciBBU1JcIik7XHJcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA9IDA7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VCdG5TdGF0dXMoXCJPUEVOXCIpO1xyXG5cclxuICAgICAgICAvLyDlj5HpgIHliJ3lp4vlj4LmlbBcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICBjb21tb246IHtcclxuICAgICAgICAgICAgYXBwX2lkOiB0aGlzLkFQUElELFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGJ1c2luZXNzOiB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiBcInpoX2NuXCIsXHJcbiAgICAgICAgICAgIGRvbWFpbjogXCJpYXRcIixcclxuICAgICAgICAgICAgYWNjZW50OiBcIm1hbmRhcmluXCIsXHJcbiAgICAgICAgICAgIHZhZF9lb3M6IDEwMDAwLCAvLyDlop7liqDliLAxMOenklxyXG4gICAgICAgICAgICBkd2E6IFwid3Bnc1wiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgc3RhdHVzOiAwLFxyXG4gICAgICAgICAgICBmb3JtYXQ6IFwiYXVkaW8vTDE2O3JhdGU9MTYwMDBcIixcclxuICAgICAgICAgICAgZW5jb2Rpbmc6IHRoaXMuZW5jb2RpbmdUeXBlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeShwYXJhbXMpKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaWF0V1Mub25tZXNzYWdlID0gKGUpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlclJlc3VsdChlLmRhdGEpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5pYXRXUy5vbmVycm9yID0gKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiV2ViU29ja2V0IGVycm9yOlwiLCBlKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldEVycm9yKCk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmlhdFdTLm9uY2xvc2UgPSAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiV2ViU29ja2V0IGNsb3NlZDpcIiwgZS5jb2RlLCBlLnJlYXNvbik7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVXZWJTb2NrZXRDbG9zZShlKTtcclxuICAgICAgfTtcclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBXZWJTb2NrZXQ6XCIsIGVycm9yKTtcclxuICAgICAgdGhpcy5oYW5kbGVXZWJTb2NrZXRFcnJvcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVXZWJTb2NrZXRDbG9zZShldmVudDogQ2xvc2VFdmVudCkge1xyXG4gICAgY29uc29sZS5sb2coXCJoYW5kbGVXZWJTb2NrZXRDbG9zZVwiLCB7XHJcbiAgICAgIGNvZGU6IGV2ZW50LmNvZGUsXHJcbiAgICAgIHJlYXNvbjogZXZlbnQucmVhc29uLFxyXG4gICAgICBzaG91bGRSZWNvbm5lY3Q6IHRoaXMuc2hvdWxkUmVjb25uZWN0LFxyXG4gICAgICBpc1JlY29yZGluZzogdGhpcy5pc1JlY29yZGluZyxcclxuICAgICAgaXNVc2VyRmluaXNoOiB0aGlzLmlzVXNlckZpbmlzaFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g5aaC5p6c55So5oi35bey57uP57uT5p2f5oiW5LiN5bqU6K+l6YeN6L+e77yM5YiZ5LiN5aSE55CGXHJcbiAgICBpZiAodGhpcy5pc1VzZXJGaW5pc2ggfHwgIXRoaXMuc2hvdWxkUmVjb25uZWN0IHx8ICF0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlj5HpgIHnu5PmnZ/luKfvvIjlpoLmnpzpnIDopoHvvIlcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmlhdFdTICYmIHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgICB0aGlzLmlhdFdTLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCJzdGF0dXNcIjogMixcclxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJhdWRpby9MMTY7cmF0ZT0xNjAwMFwiLFxyXG4gICAgICAgICAgICBcImVuY29kaW5nXCI6IHRoaXMuZW5jb2RpbmdUeXBlLFxyXG4gICAgICAgICAgICBcImF1ZGlvXCI6IFwiXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZW5kaW5nIGVuZCBmcmFtZSBvbiBjbG9zZTonLCBlcnIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOato+W4uOWFs+mXreeggeaIluacjeWKoeerr+S4u+WKqOWFs+mXre+8jOWwneivlemHjei/nlxyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09IDEwMDAgfHwgZXZlbnQuY29kZSA9PT0gMTAwNiB8fCBldmVudC5jb2RlID09PSAxMDExKSB7XHJcbiAgICAgIHRoaXMuYXR0ZW1wdFJlY29ubmVjdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIldlYlNvY2tldCBjbG9zZWQgd2l0aCBlcnJvciBjb2RlOlwiLCBldmVudC5jb2RlKTtcclxuICAgICAgdGhpcy5oYW5kbGVXZWJTb2NrZXRFcnJvcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVXZWJTb2NrZXRFcnJvcigpIHtcclxuICAgIGlmICghdGhpcy5zaG91bGRSZWNvbm5lY3QgfHwgIXRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdHRlbXB0UmVjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGF0dGVtcHRSZWNvbm5lY3QoKSB7XHJcbiAgICBpZiAodGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA+PSB0aGlzLm1heFJlY29ubmVjdEF0dGVtcHRzKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJNYXggcmVjb25uZWN0IGF0dGVtcHRzIHJlYWNoZWRcIik7XHJcbiAgICAgIC8vIOS4jeaUueWPmOW9leWItueKtuaAge+8jOWPquaYr0FTUuaaguaXtuS4jeWPr+eUqFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cysrO1xyXG4gICAgY29uc29sZS5sb2coYEF0dGVtcHRpbmcgV2ViU29ja2V0IHJlY29ubmVjdCAke3RoaXMucmVjb25uZWN0QXR0ZW1wdHN9LyR7dGhpcy5tYXhSZWNvbm5lY3RBdHRlbXB0c31gKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2hvdWxkUmVjb25uZWN0ICYmIHRoaXMuaXNSZWNvcmRpbmcgJiYgIXRoaXMuaXNVc2VyRmluaXNoKSB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0V2ViU29ja2V0KCk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRoaXMucmVjb25uZWN0RGVsYXkgKiB0aGlzLnJlY29ubmVjdEF0dGVtcHRzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VXZWJTb2NrZXQoKSB7XHJcbiAgICBpZiAodGhpcy5pYXRXUykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIOWPkemAgee7k+adn+W4p1xyXG4gICAgICAgIGlmICh0aGlzLmlhdFdTLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XHJcbiAgICAgICAgICB0aGlzLmlhdFdTLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgICAgIFwic3RhdHVzXCI6IDIsXHJcbiAgICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJhdWRpby9MMTY7cmF0ZT0xNjAwMFwiLFxyXG4gICAgICAgICAgICAgIFwiZW5jb2RpbmdcIjogdGhpcy5lbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICAgICAgXCJhdWRpb1wiOiBcIlwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4gfHwgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xyXG4gICAgICAgICAgdGhpcy5pYXRXUy5jbG9zZSgxMDAwLCBcIlVzZXIgaW5pdGlhdGVkIGNsb3NlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgY2xvc2luZyBXZWJTb2NrZXQ6XCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlhdFdTID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOeKtuaAgeeuoeeQhlxyXG4gIHByaXZhdGUgcmVzZXRTdGF0ZSgpIHtcclxuICAgIHRoaXMucmVzdWx0VGV4dCA9IFwiXCI7XHJcbiAgICB0aGlzLnJlc3VsdFRleHRUZW1wID0gXCJcIjtcclxuICAgIHRoaXMuZHVyYXRpb25TdHIgPSBcIjAwOjAwXCI7XHJcbiAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuICAgIHRoaXMucmVjb3JkRHVyYXRpb24gPSAwO1xyXG4gICAgdGhpcy5hbGxSZWNvcmRlZEJ1ZmZlcnMgPSBbXTtcclxuICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUaW1lcnMoKSB7XHJcbiAgICBpZiAodGhpcy5jb3VudGRvd25JbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY291bnRkb3duSW50ZXJ2YWwpO1xyXG4gICAgICB0aGlzLmNvdW50ZG93bkludGVydmFsID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmR1cmF0aW9uSW50ZXJ2YWwpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmR1cmF0aW9uSW50ZXJ2YWwpO1xyXG4gICAgICB0aGlzLmR1cmF0aW9uSW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlQnRuU3RhdHVzKHN0YXR1czogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmJ0blN0YXR1cyA9IHN0YXR1cztcclxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgXCJDT05ORUNUSU5HXCI6XHJcbiAgICAgICAgdGhpcy5jb25uU3RhdHVzID0gXCLlu7rnq4vov57mjqXkuK1cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIk9QRU5cIjpcclxuICAgICAgICB0aGlzLmNvbm5TdGF0dXMgPSBg5b2V6Z+z5Lit77yIJHt0aGlzLmR1cmF0aW9uU3Ryfe+8iWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJDTE9TSU5HXCI6XHJcbiAgICAgICAgdGhpcy5jb25uU3RhdHVzID0gXCLlhbPpl63ov57mjqXkuK1cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkNMT1NFRFwiOlxyXG4gICAgICAgIHRoaXMuY29ublN0YXR1cyA9IFwi5byA5aeL5b2V6Z+zXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDorqHml7blmahcclxuICBzdGFydENvdW50ZG93bigpIHtcclxuICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcclxuICAgIHRoaXMucmVjb3JkRHVyYXRpb24gPSAwO1xyXG4gICAgdGhpcy5kdXJhdGlvbiA9IDA7XHJcbiAgICB0aGlzLm5vdyA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgLy8g5b2V6Z+z5pe26ZW/6K6h5pe25Zmo77yIMTAwbXPnsr7luqbvvIlcclxuICAgIHRoaXMuZHVyYXRpb25JbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgICB0aGlzLnJlY29yZER1cmF0aW9uICs9IDEwMDtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwKTtcclxuXHJcbiAgICAvLyDmmL7npLrml7bplb/orqHml7blmajvvIgx56eS57K+5bqm77yJXHJcbiAgICB0aGlzLmNvdW50ZG93bkludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgIHRoaXMuY291bnRUaW1lcigpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcblxyXG4gIGNvdW50VGltZXIoKSB7XHJcbiAgICB0aGlzLmR1cmF0aW9uKys7XHJcbiAgICBsZXQgbWludXRlU3RyID0gU3RyaW5nKE1hdGguZmxvb3IodGhpcy5kdXJhdGlvbiAvIDYwKSkucGFkU3RhcnQoMiwgXCIwXCIpO1xyXG4gICAgbGV0IHNlY29uZFN0ciA9IFN0cmluZyh0aGlzLmR1cmF0aW9uICUgNjApLnBhZFN0YXJ0KDIsIFwiMFwiKTtcclxuICAgIGxldCBkdXJhdGlvblN0ciA9IG1pbnV0ZVN0ciArIFwiOlwiICsgc2Vjb25kU3RyO1xyXG4gICAgdGhpcy5kdXJhdGlvblN0ciA9IGR1cmF0aW9uU3RyO1xyXG4gICAgdGhpcy5jb25uU3RhdHVzID0gYOW9lemfs+S4re+8iCR7dGhpcy5kdXJhdGlvblN0cn3vvIlgO1xyXG4gICAgdGhpcy5vbkR1cmF0aW9uU3RyQ2hhbmdlICYmIHRoaXMub25EdXJhdGlvblN0ckNoYW5nZShkdXJhdGlvblN0cik7XHJcbiAgfVxyXG5cclxuICAvLyDnu5PmnpzlpITnkIZcclxuICByZW5kZXJSZXN1bHQocmVzdWx0RGF0YTogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQganNvbkRhdGEgPSBKU09OLnBhcnNlKHJlc3VsdERhdGEpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGpzb25EYXRhLmRhdGEgJiYganNvbkRhdGEuZGF0YS5yZXN1bHQpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IGpzb25EYXRhLmRhdGEucmVzdWx0O1xyXG4gICAgICAgIGxldCBzdHIgPSBcIlwiO1xyXG4gICAgICAgIGxldCB3cyA9IGRhdGEud3M7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgc3RyID0gc3RyICsgd3NbaV0uY3dbMF0udztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOWkhOeQhuWKqOaAgeS/ruato1xyXG4gICAgICAgIGlmIChkYXRhLnBncykge1xyXG4gICAgICAgICAgaWYgKGRhdGEucGdzID09PSBcImFwZFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0VGV4dCA9IHRoaXMucmVzdWx0VGV4dFRlbXA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdFRleHRUZW1wID0gdGhpcy5yZXN1bHRUZXh0ICsgc3RyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdFRleHQgPSB0aGlzLnJlc3VsdFRleHQgKyBzdHI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UgJiYgdGhpcy5vbklucHV0Q2hhbmdlKHRoaXMuZ2V0VXNlcklucHV0KCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDlpITnkIbnu5PmnZ/nirbmgIFcclxuICAgICAgaWYgKGpzb25EYXRhLmNvZGUgPT09IDAgJiYganNvbkRhdGEuZGF0YS5zdGF0dXMgPT09IDIpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkFTUiBzZXNzaW9uIGNvbXBsZXRlZCwgd2lsbCByZWNvbm5lY3QgaWYgc3RpbGwgcmVjb3JkaW5nXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmlhdFdTICYmIHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgICAgIHRoaXMuaWF0V1MuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOWkhOeQhumUmeivr1xyXG4gICAgICBpZiAoanNvbkRhdGEuY29kZSAhPT0gMCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBU1IgZXJyb3I6XCIsIGpzb25EYXRhKTtcclxuICAgICAgICBpZiAodGhpcy5pYXRXUyAmJiB0aGlzLmlhdFdTLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XHJcbiAgICAgICAgICB0aGlzLmlhdFdTLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyByZXN1bHQ6XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVzZXJJbnB1dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFwiXCIgKyAodGhpcy5yZXN1bHRUZXh0VGVtcCB8fCB0aGlzLnJlc3VsdFRleHQpO1xyXG4gIH1cclxuXHJcbiAgLy8g5p2D6ZmQ5ZKM5Yid5aeL5YyWXHJcbiAgYXN5bmMgb3BlbldpdGhQcml2aWxlZGdlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgYXdhaXQgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpO1xyXG4gICAgXHJcbiAgICBpZiAoUmVjb3JkZXIuSXNPcGVuKCkpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIC8vIOi/memHjOS4jeWIm+W7uuW9leWItuWZqO+8jOWboOS4uuaIkeS7rOS9v+eUqOeLrOeri+eahOW9leWItuWZqFxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyDpn7PpopHlpITnkIbmlrnms5VcclxuICBhc3luYyBwY21CbG9iVG9XYXZCbG9iKHBjbUJsb2I6IEJsb2IsIHNhbXBsZVJhdGU6IG51bWJlcik6IFByb21pc2U8QmxvYj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICBsZXQgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIFxyXG4gICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgbGV0IHBjbURhdGE6IGFueSA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgbGV0IHdhdkJsb2IgPSBwY210b1dhdihwY21EYXRhLCBzYW1wbGVSYXRlLCAxLCAxNik7XHJcbiAgICAgICAgcmVzb2x2ZSh3YXZCbG9iKTtcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIGZpbGVSZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIocGNtQmxvYik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBsYXlQQ00ocGNtQmxvYjogQmxvYiwgc2FtcGxlUmF0ZTogbnVtYmVyKSB7XHJcbiAgICBsZXQgd2F2QmxvYiA9IGF3YWl0IHRoaXMucGNtQmxvYlRvV2F2QmxvYihwY21CbG9iLCBzYW1wbGVSYXRlKTtcclxuICAgIGxldCB3YXZVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh3YXZCbG9iKTtcclxuICAgIGxldCBhdWRpbyA9IG5ldyBBdWRpbygpO1xyXG4gICAgYXVkaW8uc3JjID0gd2F2VXJsO1xyXG4gICAgYXVkaW8ucGxheSgpO1xyXG4gIH1cclxuXHJcbiAgcGxheVJlY29yZCgpIHtcclxuICAgIGlmICh0aGlzLnJlY29yZFBjbUJsb2IpIHtcclxuICAgICAgdGhpcy5wbGF5UENNKHRoaXMucmVjb3JkUGNtQmxvYiwgNDQxMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2ViU29ja2V0IFVSTOeUn+aIkFxyXG4gIGdldFdlYlNvY2tldFVybCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IHVybCA9IFwid3NzOi8vaWF0LWFwaS54Znl1bi5jbi92Mi9pYXRcIjtcclxuICAgIGxldCBob3N0ID0gXCJpYXQtYXBpLnhmeXVuLmNuXCI7XHJcbiAgICBcclxuICAgIGxldCBhcGlLZXkgPSB0aGlzLkFQSV9LRVk7XHJcbiAgICBsZXQgYXBpU2VjcmV0ID0gdGhpcy5BUElfU0VDUkVUO1xyXG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCk7XHJcbiAgICBsZXQgYWxnb3JpdGhtID0gXCJobWFjLXNoYTI1NlwiO1xyXG4gICAgbGV0IGhlYWRlcnMgPSBcImhvc3QgZGF0ZSByZXF1ZXN0LWxpbmVcIjtcclxuICAgIGxldCBzaWduYXR1cmVPcmlnaW4gPSBgaG9zdDogJHtob3N0fVxcbmRhdGU6ICR7ZGF0ZX1cXG5HRVQgL3YyL2lhdCBIVFRQLzEuMWA7XHJcbiAgICBsZXQgc2lnbmF0dXJlU2hhID0gQ3J5cHRvSlMuSG1hY1NIQTI1NihzaWduYXR1cmVPcmlnaW4sIGFwaVNlY3JldCk7XHJcbiAgICBsZXQgc2lnbmF0dXJlID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkoc2lnbmF0dXJlU2hhKTtcclxuICAgIGxldCBhdXRob3JpemF0aW9uT3JpZ2luID0gYGFwaV9rZXk9XCIke2FwaUtleX1cIiwgYWxnb3JpdGhtPVwiJHthbGdvcml0aG19XCIsIGhlYWRlcnM9XCIke2hlYWRlcnN9XCIsIHNpZ25hdHVyZT1cIiR7c2lnbmF0dXJlfVwiYDtcclxuICAgIGxldCBhdXRob3JpemF0aW9uID0gYnRvYShhdXRob3JpemF0aW9uT3JpZ2luKTtcclxuICAgIHVybCA9IGAke3VybH0/YXV0aG9yaXphdGlvbj0ke2F1dGhvcml6YXRpb259JmRhdGU9JHtkYXRlfSZob3N0PSR7aG9zdH1gO1xyXG4gICAgcmV0dXJuIHVybDtcclxuICB9XHJcblxyXG4gIHRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gICAgdmFyIGJpbmFyeSA9IFwiXCI7XHJcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmJ5dGVMZW5ndGg7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiB3aW5kb3cuYnRvYShiaW5hcnkpO1xyXG4gIH1cclxuXHJcbiAgLy8g56e75Yqo56uv5p2D6ZmQ5pa55rOVXHJcbiAgaXNDYXBhY2l0b3IoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybS5pcyhcImNhcGFjaXRvclwiKSB8fCB0aGlzLnBsYXRmb3JtLmlzKFwiY29yZG92YVwiKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RQZXJtaXNzaW9uKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzQ2FwYWNpdG9yKCkpIHJldHVybjtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0U3RvYWdlUGVybWlzc2lvbigpO1xyXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RDYW1lcmFQZXJtaXNzaW9uKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdE1pY1Blcm1pc3Npb24oKTtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0UmVjb3JkQXVkaW9QZXJtaXNzaW9uKCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVxdWVzdFJlY29yZEF1ZGlvUGVybWlzc2lvbigpIHtsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5yZXF1ZXN0UnVudGltZVBlcm1pc3Npb25zKFt0aGlzLmRpYWdub3N0aWMucGVybWlzc2lvbi5SRUNPUkRfQVVESU9dKTtcclxuICAgIGNvbnNvbGUubG9nKFwicmVjb3JkIHBlcm1pc3Npb24gcmVxdWVzdDpcIiwgZGF0YSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0TWljUGVybWlzc2lvbigpIHtcclxuICAgIGxldCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5pc01pY3JvcGhvbmVBdXRob3JpemVkKCk7XHJcbiAgICBjb25zb2xlLmxvZyhcInBlcm1pc3Nvbl9NSUM6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdE1pY3JvcGhvbmVBdXRob3JpemF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0U3RvYWdlUGVybWlzc2lvbigpIHtcclxuICAgIGxldCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5pc0V4dGVybmFsU3RvcmFnZUF1dGhvcml6ZWQoKTtcclxuICAgIGNvbnNvbGUubG9nKFwicGVybWlzc29uX1NUT1JBR0U6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdEV4dGVybmFsU3RvcmFnZUF1dGhvcml6YXRpb24oKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RDYW1lcmFQZXJtaXNzaW9uKCkge1xyXG4gICAgbGV0IGlzQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLmlzQ2FtZXJhQXV0aG9yaXplZCgpO1xyXG4gICAgY29uc29sZS5sb2coXCJwZXJtaXNzb25fQ2FtZXJhOlwiLCBpc0F2YWlsYWJsZSk7XHJcbiAgICBpZiAoIWlzQXZhaWxhYmxlKSB7XHJcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLnJlcXVlc3RDYW1lcmFBdXRob3JpemF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyDlhbbku5bovoXliqnmlrnms5VcclxuICBzcGxpdEF1ZGlvRGF0YShhdWRpb0RhdGE6IGFueSkge1xyXG4gICAgY29uc3Qgc2VnbWVudFNpemUgPSAxMjgwO1xyXG4gICAgY29uc3Qgc2VnbWVudENvdW50ID0gTWF0aC5jZWlsKGF1ZGlvRGF0YS5sZW5ndGggLyBzZWdtZW50U2l6ZSk7XHJcbiAgICBjb25zdCBzZWdtZW50cyA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudENvdW50OyBpKyspIHtcclxuICAgICAgY29uc3Qgc3RhcnQgPSBpICogc2VnbWVudFNpemU7XHJcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgc2VnbWVudFNpemU7XHJcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBhdWRpb0RhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xyXG4gIH1cclxuXHJcbiAgQnVmZmVyVG9CbG9iKGJ1ZmZlcjogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2F1ZGlvL3BjbScgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwbGF5QnVmZmVycygpIHtcclxuICAgIGxldCBhdWRpb0Jsb2IgPSBhd2FpdCB0aGlzLkJ1ZmZlcnNUb0Jsb2IodGhpcy5hbGxSZWNvcmRlZEJ1ZmZlcnMpO1xyXG4gICAgdGhpcy5wbGF5UENNKGF1ZGlvQmxvYiwgNDQxMDApO1xyXG4gIH1cclxuXHJcbiAgQnVmZmVyc1RvQmxvYihidWZmZXJzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgYXVkaW9CdWZmZXI6IGFueSA9IFtdO1xyXG4gICAgYnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XHJcbiAgICAgIGJ1ZmZlci5mb3JFYWNoKGludDE2ID0+IHtcclxuICAgICAgICBhdWRpb0J1ZmZlci5wdXNoKGludDE2KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBuZXcgQmxvYihbYXVkaW9CdWZmZXJdLCB7IHR5cGU6ICdhdWRpby9wY20nIH0pO1xyXG4gIH1cclxufSJdfQ==
636
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtdm9pY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy92b2ljZS9mbW9kZS12b2ljZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxrRUFBa0U7QUFDbEUsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBRXBDLFlBQVk7QUFDWixTQUFTLG1CQUFtQjtJQUMxQixJQUFJLENBQUM7UUFDSCxPQUFPLENBQ0wsTUFBTSxDQUFDLGdCQUFnQjtZQUN2QixNQUFNLENBQUMsWUFBWTtZQUNuQixNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVk7WUFDaEMsQ0FBQyxnRUFBZ0UsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBQ0QsUUFBUSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixFQUFFLENBQUMsQ0FBQyw0QkFBNEI7QUFFbkYsT0FBTyw4QkFBOEIsQ0FBQTtBQUNyQyxPQUFPLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sdUNBQXVDLENBQUE7QUFDOUMscUNBQXFDO0FBQ3JDLHFDQUFxQztBQUNyQyw2Q0FBNkM7QUFDN0MsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDBCQUEwQixFQUFpQixjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUszRiw2REFBNkQ7QUFFN0QsTUFBTSxPQUFPLGlCQUFpQjtJQXlENUIsWUFDVSxRQUFrQixFQUNsQixVQUFzQjtRQUR0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGVBQVUsR0FBVixV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QUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCBSZWNvcmRlck1hbmFnZXIgZnJvbSBcIi4vbGliL3h1bmZlaS1yZWNvcmRlclwiXHJcbi8vIGltcG9ydCB7UmVjb3JkZXJNYW5hZ2VyfSBmcm9tIFwiLi9saWIvcmVjb3JkZXIvcmVjb3JkZXItbWFuYWdlclwiXHJcbmltcG9ydCBSZWNvcmRlciBmcm9tICdyZWNvcmRlci1jb3JlJ1xyXG5cclxuLy8g5qOA5rWL5rWP6KeI5Zmo5pSv5oyB5oOF5Ya1XHJcbmZ1bmN0aW9uIGNoZWNrV29ya2xldFN1cHBvcnQoKSB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHdpbmRvdy5BdWRpb1dvcmtsZXROb2RlICYmXHJcbiAgICAgIHdpbmRvdy5BdWRpb0NvbnRleHQgJiYgXHJcbiAgICAgIHdpbmRvdy5BdWRpb0NvbnRleHQuYXVkaW9Xb3JrbGV0ICYmXHJcbiAgICAgICEvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudClcclxuICAgICk7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5SZWNvcmRlci5Db25uZWN0RW5hYmxlV29ya2xldCA9IGNoZWNrV29ya2xldFN1cHBvcnQoKTsgLy8g5piO56Gu56aB55SoQXVkaW9Xb3JrbGV0IOWFvOWuueS4jeaUr+aMgeeahOWcuuaZr1xyXG5cclxuaW1wb3J0ICdyZWNvcmRlci1jb3JlL3NyYy9lbmdpbmUvcGNtJ1xyXG5pbXBvcnQgJ3JlY29yZGVyLWNvcmUvc3JjL2VuZ2luZS93YXYnXHJcbmltcG9ydCAncmVjb3JkZXItY29yZS9zcmMvZXh0ZW5zaW9ucy93YXZldmlldydcclxuLy8gaW1wb3J0ICcuL2xpYi9yZWNvcmRlci9lbmdpbmUtcGNtJ1xyXG4vLyBpbXBvcnQgJy4vbGliL3JlY29yZGVyL2VuZ2luZS13YXYnXHJcbi8vIGltcG9ydCAnLi9saWIvcmVjb3JkZXIvZXh0ZW5zaW9uLXdhdmV2aWV3J1xyXG5pbXBvcnQgQ3J5cHRvSlMgZnJvbSBcImNyeXB0by1qc1wiXHJcbmltcG9ydCB7IHBjbXRvV2F2IH0gZnJvbSAnLi9saWIvcGNtMndhdic7XHJcbmltcG9ydCB7IGNvbnZlcnRGcmFtZUJ1ZmZlclRvQmFzZTY0LCByZXNhbXBsZUF1ZGlvLCByZXNhbXBsZUJ1ZmZlciB9IGZyb20gJy4vbGliL3Jlc2FtcGxlJztcclxuLy8gaW1wb3J0IHsgV2ViU3BlZWNoIH0gZnJvbSAnLi9jbGFzcy1hc3InO1xyXG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuLy8gaW1wb3J0IHsgRGlhZ25vc3RpYyB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9kaWFnbm9zdGljL25neCc7XHJcbmltcG9ydCB7IERpYWdub3N0aWMgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZGlhZ25vc3RpYy9uZ3gnO1xyXG4vLyBpbXBvcnQgeyBGbW9kZVRUU1h1bmZlaSB9IGZyby4vY2xhc3MtdHRzLXh1bmZlaS50cy5iYWtmZWknXHJcblxyXG5leHBvcnQgY2xhc3MgRm1vZGVWb2ljZVNlcnZpY2Uge1xyXG4gIGRpc2FibGVBU1I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvLyB3ZWJTcGVlY2ggPSBXZWJTcGVlY2g7XHJcblxyXG4gIC8vIOeKtuaAgeeuoeeQhlxyXG4gIHByaXZhdGUgaXNSZWNvcmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGlzVXNlckZpbmlzaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc2hvdWxkUmVjb25uZWN0OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIHJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgbWF4UmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlciA9IDM7XHJcbiAgcHJpdmF0ZSByZWNvbm5lY3REZWxheTogbnVtYmVyID0gMTAwMDtcclxuXHJcbiAgLy8g5b2V5Yi255u45YWzIC0g54us56uL5LqOV2ViU29ja2V0XHJcbiAgcmVjb3JkV2F2QmxvYjogQmxvYiA9IG51bGw7XHJcbiAgcmVjb3JkUGNtQmxvYjogQmxvYiA9IG51bGw7XHJcbiAgcmVjb3JkRHVyYXRpb246IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBhbGxSZWNvcmRlZEJ1ZmZlcnM6IEFycmF5PGFueT4gPSBbXTsgLy8g5a2Y5YKo5omA5pyJ5b2V5Yi255qEYnVmZmVyXHJcbiAgcHJpdmF0ZSBjdXJyZW50UmVjb3JkZXI6IGFueSA9IG51bGw7IC8vIOW9k+WJjeeahOW9leWItuWZqOWunuS+i1xyXG4gIFxyXG4gIC8vIFdlYlNvY2tldOebuOWFs1xyXG4gIGlhdFdTOiBXZWJTb2NrZXQ7XHJcbiAgYnRuU3RhdHVzID0gXCJVTkRFRklORURcIjtcclxuICBjb25uU3RhdHVzID0gXCJcIjtcclxuICBcclxuICAvLyDnu5Pmnpznm7jlhbNcclxuICByZXN1bHRUZXh0ID0gXCJcIjtcclxuICByZXN1bHRUZXh0VGVtcCA9IFwiXCI7XHJcbiAgXHJcbiAgLy8g6K6h5pe255u45YWzXHJcbiAgY291bnRkb3duSW50ZXJ2YWw6IGFueTtcclxuICBkdXJhdGlvbkludGVydmFsOiBhbnk7XHJcbiAgZHVyYXRpb25TdHI6IHN0cmluZyA9IFwiMDA6MDBcIjtcclxuICBkdXJhdGlvbjogbnVtYmVyID0gMDtcclxuICBub3c6IERhdGU7XHJcbiAgXHJcbiAgLy8g5rOi5b2i55u45YWzXHJcbiAgd2F2ZUNsaWVudDogYW55O1xyXG4gIHJlY29yZFR5cGUgPSBcInBjbVwiO1xyXG4gIGVuY29kaW5nVHlwZSA9IFwicmF3XCI7XHJcblxyXG4gIC8vIOWbnuiwg+WHveaVsFxyXG4gIG9uUmVzdWx0VGV4dENoYW5nZWQ6IEZ1bmN0aW9uO1xyXG4gIG9uQmVmb3JlRmluaXNoVGFsazogRnVuY3Rpb247XHJcbiAgb25BZnRlckZpbmlzaFRhbGs6IEZ1bmN0aW9uO1xyXG4gIG9uSW5wdXRDaGFuZ2U6IEZ1bmN0aW9uO1xyXG4gIG9uQmVmb3JlU3RhcnRUYWxrOiBGdW5jdGlvbjtcclxuICBvbkFmdGVyU3RhcnRUYWxrOiBGdW5jdGlvbjtcclxuICBvbkJlZm9yZUNhbmNlbFRhbGs6IEZ1bmN0aW9uO1xyXG4gIG9uQWZ0ZXJDYW5jZWxUYWxrOiBGdW5jdGlvbjtcclxuICBvbkFmdGVyUmVjb3JkU3RhcnQ6IEZ1bmN0aW9uO1xyXG4gIG9uRHVyYXRpb25TdHJDaGFuZ2U6IEZ1bmN0aW9uO1xyXG5cclxuICAvLyBBUEnphY3nva5cclxuICBBUFBJRCA9IFwiNTBmNGE0NmNcIjtcclxuICBBUElfU0VDUkVUID0gXCJOekZsTm1GaFpESmpNRE5rWkdNM056STBNemcyT0dObVwiO1xyXG4gIEFQSV9LRVkgPSBcIjEwNmRkYzQwZGZkNGI5Y2E2ZDdiNDdjNzBmYWRhNzQ5XCI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXHJcbiAgICBwcml2YXRlIGRpYWdub3N0aWM6IERpYWdub3N0aWMsXHJcbiAgKSB7XHJcbiAgICB0aGlzLnJlcXVlc3RQZXJtaXNzaW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyDnlKjmiLfmk43kvZzmlrnms5VcclxuICB0b2dnbGVSZWNvcmQoKSB7XHJcbiAgICBjb25zb2xlLmxvZygndG9nZ2xlUmVjb3JkJywgdGhpcy5idG5TdGF0dXMpO1xyXG4gICAgaWYgKHRoaXMuYnRuU3RhdHVzID09PSBcIlVOREVGSU5FRFwiIHx8IHRoaXMuYnRuU3RhdHVzID09PSBcIkNMT1NFRFwiKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRUYWxrKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnRuU3RhdHVzID09PSBcIkNPTk5FQ1RJTkdcIiB8fCB0aGlzLmJ0blN0YXR1cyA9PT0gXCJPUEVOXCIpIHtcclxuICAgICAgdGhpcy5maW5pc2hUYWxrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdGFydFRhbGsoZXZlbnQ/KSB7XHJcbiAgICBjb25zb2xlLmxvZygnc3RhcnRUYWxrIGNhbGxlZCcpO1xyXG4gICAgdGhpcy5yZXNldFN0YXRlKCk7XHJcbiAgICB0aGlzLm9uQmVmb3JlU3RhcnRUYWxrICYmIHRoaXMub25CZWZvcmVTdGFydFRhbGsoKTtcclxuICAgIFxyXG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMub3BlbldpdGhQcml2aWxlZGdlKCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyAxLiDpppblhYjlkK/liqjni6znq4vlvZXliLZcclxuICAgICAgYXdhaXQgdGhpcy5zdGFydEluZGVwZW5kZW50UmVjb3JkaW5nKCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyAyLiDnhLblkI7lkK/liqhXZWJTb2NrZXTov57mjqVcclxuICAgICAgdGhpcy5pc1JlY29yZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2hvdWxkUmVjb25uZWN0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA9IDA7XHJcbiAgICAgIFxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKTtcclxuICAgICAgfSwgMTAwKTtcclxuXHJcbiAgICAgIHRoaXMuc3RhcnRDb3VudGRvd24oKTtcclxuICAgICAgdGhpcy5vbkFmdGVyU3RhcnRUYWxrICYmIHRoaXMub25BZnRlclN0YXJ0VGFsaygpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IHRhbGs6JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLnJlc2V0U3RhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGZpbmlzaFRhbGsoKSB7XHJcbiAgICBjb25zb2xlLmxvZygnZmluaXNoVGFsayBjYWxsZWQnKTtcclxuICAgIHRoaXMuaXNVc2VyRmluaXNoID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvdWxkUmVjb25uZWN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uQmVmb3JlRmluaXNoVGFsayAmJiB0aGlzLm9uQmVmb3JlRmluaXNoVGFsaygpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyAxLiDlhYjlhbPpl61XZWJTb2NrZXRcclxuICAgICAgdGhpcy5jbG9zZVdlYlNvY2tldCgpO1xyXG4gICAgICBcclxuICAgICAgLy8gMi4g5YGc5q2i54us56uL5b2V5Yi25bm26I635Y+W5a6M5pW06Z+z6aKRXHJcbiAgICAgIGF3YWl0IHRoaXMuc3RvcEluZGVwZW5kZW50UmVjb3JkaW5nKCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyAzLiDmuIXnkIbnirbmgIFcclxuICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNsZWFyVGltZXJzKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlQnRuU3RhdHVzKFwiQ0xPU0VEXCIpO1xyXG4gICAgICBcclxuICAgICAgLy8gNC4g5bu26L+f5Zue6LCD56Gu5L+d5omA5pyJ5aSE55CG5a6M5oiQXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVXNlckZpbmlzaCkge1xyXG4gICAgICAgICAgdGhpcy5vbkFmdGVyRmluaXNoVGFsayAmJiB0aGlzLm9uQWZ0ZXJGaW5pc2hUYWxrKCk7XHJcbiAgICAgICAgICB0aGlzLmlzVXNlckZpbmlzaCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgNTAwKTtcclxuICAgICAgXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmaW5pc2hpbmcgdGFsazonLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxUYWxrKCkge1xyXG4gICAgY29uc29sZS5sb2coJ2NhbmNlbFRhbGsgY2FsbGVkJyk7XHJcbiAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsVGFsayAmJiB0aGlzLm9uQmVmb3JlQ2FuY2VsVGFsaygpO1xyXG4gICAgXHJcbiAgICB0aGlzLmlzVXNlckZpbmlzaCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG91bGRSZWNvbm5lY3QgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgLy8g5YWz6ZetV2ViU29ja2V0XHJcbiAgICB0aGlzLmNsb3NlV2ViU29ja2V0KCk7XHJcbiAgICBcclxuICAgIC8vIOWBnOatoueLrOeri+W9leWItuS9huS4jeS/neWtmOe7k+aenFxyXG4gICAgdGhpcy5jYW5jZWxJbmRlcGVuZGVudFJlY29yZGluZygpO1xyXG4gICAgXHJcbiAgICB0aGlzLnJlc2V0U3RhdGUoKTtcclxuICAgIHRoaXMub25BZnRlckNhbmNlbFRhbGsgJiYgdGhpcy5vbkFmdGVyQ2FuY2VsVGFsaygpO1xyXG4gIH1cclxuXHJcbiAgLy8g54us56uL5b2V5Yi25pa55rOVIC0g5LiOV2ViU29ja2V05a6M5YWo6Kej6ICmXHJcbiAgYXN5bmMgc3RhcnRJbmRlcGVuZGVudFJlY29yZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnNvbGUubG9nKCdTdGFydGluZyBpbmRlcGVuZGVudCByZWNvcmRpbmcnKTtcclxuICAgIFxyXG4gICAgdGhpcy5hbGxSZWNvcmRlZEJ1ZmZlcnMgPSBbXTtcclxuICAgIHRoaXMuY3JlYXRlSW5kZXBlbmRlbnRSZWNvcmRlcigpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5vcGVuKCgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnSW5kZXBlbmRlbnQgcmVjb3JkZXIgb3BlbmVkJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5Yib5bu65Y+v6KeG5YyWXHJcbiAgICAgICAgbGV0IHdhdmVEaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnJlY29yZC13YXZlXCIpO1xyXG4gICAgICAgIGlmICh3YXZlRGl2ICYmIFJlY29yZGVyLldhdmVWaWV3KSB7XHJcbiAgICAgICAgICB0aGlzLndhdmVDbGllbnQgPSBSZWNvcmRlci5XYXZlVmlldyh7IGVsZW06IFwiLnJlY29yZC13YXZlXCIgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY3VycmVudFJlY29yZGVyLnN0YXJ0KCk7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVjb3JkU3RhcnQgJiYgdGhpcy5vbkFmdGVyUmVjb3JkU3RhcnQoKTtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgIH0sIChtc2csIGlzVXNlck5vdEFsbG93KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIG9wZW4gaW5kZXBlbmRlbnQgcmVjb3JkZXI6JywgbXNnKTtcclxuICAgICAgICByZWplY3QobmV3IEVycm9yKG1zZykpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RvcEluZGVwZW5kZW50UmVjb3JkaW5nKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc29sZS5sb2coJ1N0b3BwaW5nIGluZGVwZW5kZW50IHJlY29yZGluZycpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMuY3VycmVudFJlY29yZGVyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdObyBpbmRlcGVuZGVudCByZWNvcmRlciB0byBzdG9wJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50UmVjb3JkZXIuc3RvcChcclxuICAgICAgICBhc3luYyAoYmxvYjogQmxvYiwgZHVyYXRpb246IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0luZGVwZW5kZW50IHJlY29yZGluZyBzdG9wcGVkIHN1Y2Nlc3NmdWxseScsIGJsb2IsIGR1cmF0aW9uKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8g5L+d5a2Y5a6M5pW055qE5b2V5Yi257uT5p6cXHJcbiAgICAgICAgICB0aGlzLnJlY29yZFBjbUJsb2IgPSBibG9iO1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRXYXZCbG9iID0gYXdhaXQgdGhpcy5wY21CbG9iVG9XYXZCbG9iKGJsb2IsIDQ0MTAwKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8g5riF55CG5b2V5Yi25ZmoXHJcbiAgICAgICAgICB0aGlzLmNsZWFudXBJbmRlcGVuZGVudFJlY29yZGVyKCk7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAobXNnKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwi54us56uL5b2V6Z+z5YGc5q2i5aSx6LSlOlwiICsgbXNnKTtcclxuICAgICAgICAgIHRoaXMuY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbEluZGVwZW5kZW50UmVjb3JkaW5nKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ0NhbmNlbGxpbmcgaW5kZXBlbmRlbnQgcmVjb3JkaW5nJyk7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmN1cnJlbnRSZWNvcmRlcikge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIOebtOaOpeWFs+mXre+8jOS4jeS/neWtmOe7k+aenFxyXG4gICAgICAgIHRoaXMuY3VycmVudFJlY29yZGVyLmNsb3NlKCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2xvc2luZyBpbmRlcGVuZGVudCByZWNvcmRlcjonLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5jbGVhbnVwSW5kZXBlbmRlbnRSZWNvcmRlcigpO1xyXG4gICAgdGhpcy5yZWNvcmRQY21CbG9iID0gbnVsbDtcclxuICAgIHRoaXMucmVjb3JkV2F2QmxvYiA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUluZGVwZW5kZW50UmVjb3JkZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UmVjb3JkZXIpIHtcclxuICAgICAgdGhpcy5jbGVhbnVwSW5kZXBlbmRlbnRSZWNvcmRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VycmVudFJlY29yZGVyID0gUmVjb3JkZXIoe1xyXG4gICAgICB0eXBlOiB0aGlzLnJlY29yZFR5cGUsXHJcbiAgICAgIHNhbXBsZVJhdGU6IDQ0MTAwLFxyXG4gICAgICBiaXRSYXRlOiAxNixcclxuICAgICAgb25Qcm9jZXNzOiAoYnVmZmVycywgcG93ZXJMZXZlbCwgYnVmZmVyRHVyYXRpb24sIGJ1ZmZlclNhbXBsZVJhdGUsIG5ld0J1ZmZlcklkeCwgYXN5bmNFbmQpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8g5L+d5a2Y5omA5pyJYnVmZmVy55So5LqO5pyA57uI5ZCI5oiQ5a6M5pW06Z+z6aKRXHJcbiAgICAgICAgdGhpcy5hbGxSZWNvcmRlZEJ1ZmZlcnMgPSBidWZmZXJzO1xyXG5cclxuICAgICAgICAvLyDojrflj5bmnIDmlrDnmoTpn7PpopHniYfmrrXnlKjkuo7lrp7ml7ZBU1JcclxuICAgICAgICBsZXQgZnJhbWVCdWZmZXIgPSBidWZmZXJzLmxlbmd0aCAmJiBidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKCFmcmFtZUJ1ZmZlcikgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyDph43ph4fmoLfliLAxNmtIeueUqOS6jkFTUlxyXG4gICAgICAgIGZyYW1lQnVmZmVyID0gcmVzYW1wbGVCdWZmZXIoZnJhbWVCdWZmZXIsIDQ0MTAwLCAxNjAwMCk7XHJcblxyXG4gICAgICAgIC8vIOWPkemAgeWIsFdlYlNvY2tldOi/m+ihjOWunuaXtkFTUlxyXG4gICAgICAgIHRoaXMuc2VuZEF1ZGlvVG9XZWJTb2NrZXQoZnJhbWVCdWZmZXIpO1xyXG5cclxuICAgICAgICAvLyDmm7TmlrDms6LlvaLmmL7npLpcclxuICAgICAgICB0aGlzLndhdmVDbGllbnQ/LmlucHV0KGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXSwgcG93ZXJMZXZlbCwgYnVmZmVyU2FtcGxlUmF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhbnVwSW5kZXBlbmRlbnRSZWNvcmRlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRSZWNvcmRlcikge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFJlY29yZGVyLmNsb3NlKCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2xlYW5pbmcgdXAgaW5kZXBlbmRlbnQgcmVjb3JkZXI6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VycmVudFJlY29yZGVyID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VuZEF1ZGlvVG9XZWJTb2NrZXQoZnJhbWVCdWZmZXI6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaWF0V1MgJiYgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTiAmJiAhdGhpcy5kaXNhYmxlQVNSKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5pYXRXUy5zZW5kKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgc3RhdHVzOiAxLFxyXG4gICAgICAgICAgICBmb3JtYXQ6IFwiYXVkaW8vTDE2O3JhdGU9MTYwMDBcIixcclxuICAgICAgICAgICAgZW5jb2Rpbmc6IHRoaXMuZW5jb2RpbmdUeXBlLFxyXG4gICAgICAgICAgICBhdWRpbzogY29udmVydEZyYW1lQnVmZmVyVG9CYXNlNjQoZnJhbWVCdWZmZXIpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc2VuZGluZyBhdWRpbyBkYXRhIHRvIFdlYlNvY2tldDpcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBXZWJTb2NrZXTnm7jlhbPmlrnms5UgLSDku4XnlKjkuo5BU1LvvIzkuI3mjqfliLblvZXliLZcclxuICBjb25uZWN0V2ViU29ja2V0KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJjb25uZWN0V2ViU29ja2V0IGNhbGxlZCwgc2hvdWxkUmVjb25uZWN0OlwiLCB0aGlzLnNob3VsZFJlY29ubmVjdCk7XHJcbiAgICBcclxuICAgIGlmICghdGhpcy5zaG91bGRSZWNvbm5lY3QgfHwgIXRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJOb3QgY29ubmVjdGluZyBXZWJTb2NrZXQgLSBzaG91bGRSZWNvbm5lY3Q6XCIsIHRoaXMuc2hvdWxkUmVjb25uZWN0LCBcImlzUmVjb3JkaW5nOlwiLCB0aGlzLmlzUmVjb3JkaW5nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWFs+mXreeOsOaciei/nuaOpVxyXG4gICAgdGhpcy5jbG9zZVdlYlNvY2tldCgpO1xyXG5cclxuICAgIGNvbnN0IHdlYnNvY2tldFVybCA9IHRoaXMuZ2V0V2ViU29ja2V0VXJsKCk7XHJcbiAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3RpbmcgdG86XCIsIHdlYnNvY2tldFVybCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKFwiV2ViU29ja2V0XCIgaW4gd2luZG93KSB7XHJcbiAgICAgICAgdGhpcy5pYXRXUyA9IG5ldyBXZWJTb2NrZXQod2Vic29ja2V0VXJsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwi5rWP6KeI5Zmo5LiN5pSv5oyBV2ViU29ja2V0XCIpO1xyXG4gICAgICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5LiN5pSv5oyBV2ViU29ja2V0XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jaGFuZ2VCdG5TdGF0dXMoXCJDT05ORUNUSU5HXCIpO1xyXG5cclxuICAgICAgdGhpcy5pYXRXUy5vbm9wZW4gPSAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiV2ViU29ja2V0IGNvbm5lY3RlZCBmb3IgQVNSXCIpO1xyXG4gICAgICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQnRuU3RhdHVzKFwiT1BFTlwiKTtcclxuXHJcbiAgICAgICAgLy8g5Y+R6YCB5Yid5aeL5Y+C5pWwXHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICAgICAgY29tbW9uOiB7XHJcbiAgICAgICAgICAgIGFwcF9pZDogdGhpcy5BUFBJRCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBidXNpbmVzczoge1xyXG4gICAgICAgICAgICBsYW5ndWFnZTogXCJ6aF9jblwiLFxyXG4gICAgICAgICAgICBkb21haW46IFwiaWF0XCIsXHJcbiAgICAgICAgICAgIGFjY2VudDogXCJtYW5kYXJpblwiLFxyXG4gICAgICAgICAgICB2YWRfZW9zOiAxMDAwMCwgLy8g5aKe5Yqg5YiwMTDnp5JcclxuICAgICAgICAgICAgZHdhOiBcIndwZ3NcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHN0YXR1czogMCxcclxuICAgICAgICAgICAgZm9ybWF0OiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgIGVuY29kaW5nOiB0aGlzLmVuY29kaW5nVHlwZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmlhdFdTLnNlbmQoSlNPTi5zdHJpbmdpZnkocGFyYW1zKSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmlhdFdTLm9ubWVzc2FnZSA9IChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJSZXN1bHQoZS5kYXRhKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaWF0V1Mub25lcnJvciA9IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIldlYlNvY2tldCBlcnJvcjpcIiwgZSk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVXZWJTb2NrZXRFcnJvcigpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5pYXRXUy5vbmNsb3NlID0gKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIldlYlNvY2tldCBjbG9zZWQ6XCIsIGUuY29kZSwgZS5yZWFzb24pO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlV2ViU29ja2V0Q2xvc2UoZSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgV2ViU29ja2V0OlwiLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuaGFuZGxlV2ViU29ja2V0RXJyb3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlV2ViU29ja2V0Q2xvc2UoZXZlbnQ6IENsb3NlRXZlbnQpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiaGFuZGxlV2ViU29ja2V0Q2xvc2VcIiwge1xyXG4gICAgICBjb2RlOiBldmVudC5jb2RlLFxyXG4gICAgICByZWFzb246IGV2ZW50LnJlYXNvbixcclxuICAgICAgc2hvdWxkUmVjb25uZWN0OiB0aGlzLnNob3VsZFJlY29ubmVjdCxcclxuICAgICAgaXNSZWNvcmRpbmc6IHRoaXMuaXNSZWNvcmRpbmcsXHJcbiAgICAgIGlzVXNlckZpbmlzaDogdGhpcy5pc1VzZXJGaW5pc2hcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOWmguaenOeUqOaIt+W3sue7j+e7k+adn+aIluS4jeW6lOivpemHjei/nu+8jOWImeS4jeWkhOeQhlxyXG4gICAgaWYgKHRoaXMuaXNVc2VyRmluaXNoIHx8ICF0aGlzLnNob3VsZFJlY29ubmVjdCB8fCAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5Y+R6YCB57uT5p2f5bin77yI5aaC5p6c6ZyA6KaB77yJXHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5pYXRXUyAmJiB0aGlzLmlhdFdTLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XHJcbiAgICAgICAgdGhpcy5pYXRXUy5zZW5kKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwic3RhdHVzXCI6IDIsXHJcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwiYXVkaW8vTDE2O3JhdGU9MTYwMDBcIixcclxuICAgICAgICAgICAgXCJlbmNvZGluZ1wiOiB0aGlzLmVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgXCJhdWRpb1wiOiBcIlwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2VuZGluZyBlbmQgZnJhbWUgb24gY2xvc2U6JywgZXJyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDmraPluLjlhbPpl63noIHmiJbmnI3liqHnq6/kuLvliqjlhbPpl63vvIzlsJ3or5Xph43ov55cclxuICAgIGlmIChldmVudC5jb2RlID09PSAxMDAwIHx8IGV2ZW50LmNvZGUgPT09IDEwMDYgfHwgZXZlbnQuY29kZSA9PT0gMTAxMSkge1xyXG4gICAgICB0aGlzLmF0dGVtcHRSZWNvbm5lY3QoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJXZWJTb2NrZXQgY2xvc2VkIHdpdGggZXJyb3IgY29kZTpcIiwgZXZlbnQuY29kZSk7XHJcbiAgICAgIHRoaXMuaGFuZGxlV2ViU29ja2V0RXJyb3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlV2ViU29ja2V0RXJyb3IoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb25uZWN0IHx8ICF0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYXR0ZW1wdFJlY29ubmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhdHRlbXB0UmVjb25uZWN0KCkge1xyXG4gICAgaWYgKHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPj0gdGhpcy5tYXhSZWNvbm5lY3RBdHRlbXB0cykge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiTWF4IHJlY29ubmVjdCBhdHRlbXB0cyByZWFjaGVkXCIpO1xyXG4gICAgICAvLyDkuI3mlLnlj5jlvZXliLbnirbmgIHvvIzlj6rmmK9BU1LmmoLml7bkuI3lj6/nlKhcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMrKztcclxuICAgIGNvbnNvbGUubG9nKGBBdHRlbXB0aW5nIFdlYlNvY2tldCByZWNvbm5lY3QgJHt0aGlzLnJlY29ubmVjdEF0dGVtcHRzfS8ke3RoaXMubWF4UmVjb25uZWN0QXR0ZW1wdHN9YCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNob3VsZFJlY29ubmVjdCAmJiB0aGlzLmlzUmVjb3JkaW5nICYmICF0aGlzLmlzVXNlckZpbmlzaCkge1xyXG4gICAgICAgIHRoaXMuY29ubmVjdFdlYlNvY2tldCgpO1xyXG4gICAgICB9XHJcbiAgICB9LCB0aGlzLnJlY29ubmVjdERlbGF5ICogdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlV2ViU29ja2V0KCkge1xyXG4gICAgaWYgKHRoaXMuaWF0V1MpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyDlj5HpgIHnu5PmnZ/luKdcclxuICAgICAgICBpZiAodGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgICAgdGhpcy5pYXRXUy5zZW5kKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgICAgICBcInN0YXR1c1wiOiAyLFxyXG4gICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwiYXVkaW8vTDE2O3JhdGU9MTYwMDBcIixcclxuICAgICAgICAgICAgICBcImVuY29kaW5nXCI6IHRoaXMuZW5jb2RpbmdUeXBlLFxyXG4gICAgICAgICAgICAgIFwiYXVkaW9cIjogXCJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLmlhdFdTLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOIHx8IHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkcpIHtcclxuICAgICAgICAgIHRoaXMuaWF0V1MuY2xvc2UoMTAwMCwgXCJVc2VyIGluaXRpYXRlZCBjbG9zZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNsb3NpbmcgV2ViU29ja2V0OlwiLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pYXRXUyA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDnirbmgIHnrqHnkIZcclxuICBwcml2YXRlIHJlc2V0U3RhdGUoKSB7XHJcbiAgICB0aGlzLnJlc3VsdFRleHQgPSBcIlwiO1xyXG4gICAgdGhpcy5yZXN1bHRUZXh0VGVtcCA9IFwiXCI7XHJcbiAgICB0aGlzLmR1cmF0aW9uU3RyID0gXCIwMDowMFwiO1xyXG4gICAgdGhpcy5kdXJhdGlvbiA9IDA7XHJcbiAgICB0aGlzLnJlY29yZER1cmF0aW9uID0gMDtcclxuICAgIHRoaXMuYWxsUmVjb3JkZWRCdWZmZXJzID0gW107XHJcbiAgICB0aGlzLmNsZWFyVGltZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyVGltZXJzKCkge1xyXG4gICAgaWYgKHRoaXMuY291bnRkb3duSW50ZXJ2YWwpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNvdW50ZG93bkludGVydmFsKTtcclxuICAgICAgdGhpcy5jb3VudGRvd25JbnRlcnZhbCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kdXJhdGlvbkludGVydmFsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5kdXJhdGlvbkludGVydmFsKTtcclxuICAgICAgdGhpcy5kdXJhdGlvbkludGVydmFsID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZUJ0blN0YXR1cyhzdGF0dXM6IHN0cmluZykge1xyXG4gICAgdGhpcy5idG5TdGF0dXMgPSBzdGF0dXM7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICBjYXNlIFwiQ09OTkVDVElOR1wiOlxyXG4gICAgICAgIHRoaXMuY29ublN0YXR1cyA9IFwi5bu656uL6L+e5o6l5LitXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJPUEVOXCI6XHJcbiAgICAgICAgdGhpcy5jb25uU3RhdHVzID0gYOW9lemfs+S4re+8iCR7dGhpcy5kdXJhdGlvblN0cn3vvIlgO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiQ0xPU0lOR1wiOlxyXG4gICAgICAgIHRoaXMuY29ublN0YXR1cyA9IFwi5YWz6Zet6L+e5o6l5LitXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJDTE9TRURcIjpcclxuICAgICAgICB0aGlzLmNvbm5TdGF0dXMgPSBcIuW8gOWni+W9lemfs1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g6K6h5pe25ZmoXHJcbiAgc3RhcnRDb3VudGRvd24oKSB7XHJcbiAgICB0aGlzLmNsZWFyVGltZXJzKCk7XHJcbiAgICB0aGlzLnJlY29yZER1cmF0aW9uID0gMDtcclxuICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG4gICAgdGhpcy5ub3cgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIC8vIOW9lemfs+aXtumVv+iuoeaXtuWZqO+8iDEwMG1z57K+5bqm77yJXHJcbiAgICB0aGlzLmR1cmF0aW9uSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmREdXJhdGlvbiArPSAxMDA7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcblxyXG4gICAgLy8g5pi+56S65pe26ZW/6K6h5pe25Zmo77yIMeenkueyvuW6pu+8iVxyXG4gICAgdGhpcy5jb3VudGRvd25JbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgICB0aGlzLmNvdW50VGltZXIoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBjb3VudFRpbWVyKCkge1xyXG4gICAgdGhpcy5kdXJhdGlvbisrO1xyXG4gICAgbGV0IG1pbnV0ZVN0ciA9IFN0cmluZyhNYXRoLmZsb29yKHRoaXMuZHVyYXRpb24gLyA2MCkpLnBhZFN0YXJ0KDIsIFwiMFwiKTtcclxuICAgIGxldCBzZWNvbmRTdHIgPSBTdHJpbmcodGhpcy5kdXJhdGlvbiAlIDYwKS5wYWRTdGFydCgyLCBcIjBcIik7XHJcbiAgICBsZXQgZHVyYXRpb25TdHIgPSBtaW51dGVTdHIgKyBcIjpcIiArIHNlY29uZFN0cjtcclxuICAgIHRoaXMuZHVyYXRpb25TdHIgPSBkdXJhdGlvblN0cjtcclxuICAgIHRoaXMuY29ublN0YXR1cyA9IGDlvZXpn7PkuK3vvIgke3RoaXMuZHVyYXRpb25TdHJ977yJYDtcclxuICAgIHRoaXMub25EdXJhdGlvblN0ckNoYW5nZSAmJiB0aGlzLm9uRHVyYXRpb25TdHJDaGFuZ2UoZHVyYXRpb25TdHIpO1xyXG4gIH1cclxuXHJcbiAgLy8g57uT5p6c5aSE55CGXHJcbiAgcmVuZGVyUmVzdWx0KHJlc3VsdERhdGE6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGpzb25EYXRhID0gSlNPTi5wYXJzZShyZXN1bHREYXRhKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChqc29uRGF0YS5kYXRhICYmIGpzb25EYXRhLmRhdGEucmVzdWx0KSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBqc29uRGF0YS5kYXRhLnJlc3VsdDtcclxuICAgICAgICBsZXQgc3RyID0gXCJcIjtcclxuICAgICAgICBsZXQgd3MgPSBkYXRhLndzO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHN0ciA9IHN0ciArIHdzW2ldLmN3WzBdLnc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDlpITnkIbliqjmgIHkv67mraNcclxuICAgICAgICBpZiAoZGF0YS5wZ3MpIHtcclxuICAgICAgICAgIGlmIChkYXRhLnBncyA9PT0gXCJhcGRcIikge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFRleHQgPSB0aGlzLnJlc3VsdFRleHRUZW1wO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRUZXh0VGVtcCA9IHRoaXMucmVzdWx0VGV4dCArIHN0cjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHRUZXh0ID0gdGhpcy5yZXN1bHRUZXh0ICsgc3RyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlICYmIHRoaXMub25JbnB1dENoYW5nZSh0aGlzLmdldFVzZXJJbnB1dCgpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5aSE55CG57uT5p2f54q25oCBXHJcbiAgICAgIGlmIChqc29uRGF0YS5jb2RlID09PSAwICYmIGpzb25EYXRhLmRhdGEuc3RhdHVzID09PSAyKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJBU1Igc2Vzc2lvbiBjb21wbGV0ZWQsIHdpbGwgcmVjb25uZWN0IGlmIHN0aWxsIHJlY29yZGluZ1wiKTtcclxuICAgICAgICBpZiAodGhpcy5pYXRXUyAmJiB0aGlzLmlhdFdTLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOKSB7XHJcbiAgICAgICAgICB0aGlzLmlhdFdTLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDlpITnkIbplJnor69cclxuICAgICAgaWYgKGpzb25EYXRhLmNvZGUgIT09IDApIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiQVNSIGVycm9yOlwiLCBqc29uRGF0YSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaWF0V1MgJiYgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgICAgdGhpcy5pYXRXUy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgcmVzdWx0OlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRVc2VySW5wdXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBcIlwiICsgKHRoaXMucmVzdWx0VGV4dFRlbXAgfHwgdGhpcy5yZXN1bHRUZXh0KTtcclxuICB9XHJcblxyXG4gIC8vIOadg+mZkOWSjOWIneWni+WMllxyXG4gIGFzeW5jIG9wZW5XaXRoUHJpdmlsZWRnZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGF3YWl0IHRoaXMucmVxdWVzdFBlcm1pc3Npb24oKTtcclxuICAgIFxyXG4gICAgaWYgKFJlY29yZGVyLklzT3BlbigpKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAvLyDov5nph4zkuI3liJvlu7rlvZXliLblmajvvIzlm6DkuLrmiJHku6zkvb/nlKjni6znq4vnmoTlvZXliLblmahcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8g6Z+z6aKR5aSE55CG5pa55rOVXHJcbiAgYXN5bmMgcGNtQmxvYlRvV2F2QmxvYihwY21CbG9iOiBCbG9iLCBzYW1wbGVSYXRlOiBudW1iZXIpOiBQcm9taXNlPEJsb2I+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgbGV0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICBcclxuICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgIGxldCBwY21EYXRhOiBhbnkgPSBldmVudC50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgIGxldCB3YXZCbG9iID0gcGNtdG9XYXYocGNtRGF0YSwgc2FtcGxlUmF0ZSwgMSwgMTYpO1xyXG4gICAgICAgIHJlc29sdmUod2F2QmxvYik7XHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICBmaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKHBjbUJsb2IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwbGF5UENNKHBjbUJsb2I6IEJsb2IsIHNhbXBsZVJhdGU6IG51bWJlcikge1xyXG4gICAgbGV0IHdhdkJsb2IgPSBhd2FpdCB0aGlzLnBjbUJsb2JUb1dhdkJsb2IocGNtQmxvYiwgc2FtcGxlUmF0ZSk7XHJcbiAgICBsZXQgd2F2VXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwod2F2QmxvYik7XHJcbiAgICBsZXQgYXVkaW8gPSBuZXcgQXVkaW8oKTtcclxuICAgIGF1ZGlvLnNyYyA9IHdhdlVybDtcclxuICAgIGF1ZGlvLnBsYXkoKTtcclxuICB9XHJcblxyXG4gIHBsYXlSZWNvcmQoKSB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmRQY21CbG9iKSB7XHJcbiAgICAgIHRoaXMucGxheVBDTSh0aGlzLnJlY29yZFBjbUJsb2IsIDQ0MTAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFdlYlNvY2tldCBVUkznlJ/miJBcclxuICBnZXRXZWJTb2NrZXRVcmwoKTogc3RyaW5nIHtcclxuICAgIGxldCB1cmwgPSBcIndzczovL2lhdC1hcGkueGZ5dW4uY24vdjIvaWF0XCI7XHJcbiAgICBsZXQgaG9zdCA9IFwiaWF0LWFwaS54Znl1bi5jblwiO1xyXG4gICAgXHJcbiAgICBsZXQgYXBpS2V5ID0gdGhpcy5BUElfS0VZO1xyXG4gICAgbGV0IGFwaVNlY3JldCA9IHRoaXMuQVBJX1NFQ1JFVDtcclxuICAgIGxldCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpO1xyXG4gICAgbGV0IGFsZ29yaXRobSA9IFwiaG1hYy1zaGEyNTZcIjtcclxuICAgIGxldCBoZWFkZXJzID0gXCJob3N0IGRhdGUgcmVxdWVzdC1saW5lXCI7XHJcbiAgICBsZXQgc2lnbmF0dXJlT3JpZ2luID0gYGhvc3Q6ICR7aG9zdH1cXG5kYXRlOiAke2RhdGV9XFxuR0VUIC92Mi9pYXQgSFRUUC8xLjFgO1xyXG4gICAgbGV0IHNpZ25hdHVyZVNoYSA9IENyeXB0b0pTLkhtYWNTSEEyNTYoc2lnbmF0dXJlT3JpZ2luLCBhcGlTZWNyZXQpO1xyXG4gICAgbGV0IHNpZ25hdHVyZSA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHNpZ25hdHVyZVNoYSk7XHJcbiAgICBsZXQgYXV0aG9yaXphdGlvbk9yaWdpbiA9IGBhcGlfa2V5PVwiJHthcGlLZXl9XCIsIGFsZ29yaXRobT1cIiR7YWxnb3JpdGhtfVwiLCBoZWFkZXJzPVwiJHtoZWFkZXJzfVwiLCBzaWduYXR1cmU9XCIke3NpZ25hdHVyZX1cImA7XHJcbiAgICBsZXQgYXV0aG9yaXphdGlvbiA9IGJ0b2EoYXV0aG9yaXphdGlvbk9yaWdpbik7XHJcbiAgICB1cmwgPSBgJHt1cmx9P2F1dGhvcml6YXRpb249JHthdXRob3JpemF0aW9ufSZkYXRlPSR7ZGF0ZX0maG9zdD0ke2hvc3R9YDtcclxuICAgIHJldHVybiB1cmw7XHJcbiAgfVxyXG5cclxuICB0b0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcclxuICAgIHZhciBiaW5hcnkgPSBcIlwiO1xyXG4gICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIHZhciBsZW4gPSBieXRlcy5ieXRlTGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2luZG93LmJ0b2EoYmluYXJ5KTtcclxuICB9XHJcblxyXG4gIC8vIOenu+WKqOerr+adg+mZkOaWueazlVxyXG4gIGlzQ2FwYWNpdG9yKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYoIXRoaXMucGxhdGZvcm0/LmlzKSByZXR1cm4gZmFsc2VcclxuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtLmlzKFwiY2FwYWNpdG9yXCIpIHx8IHRoaXMucGxhdGZvcm0uaXMoXCJjb3Jkb3ZhXCIpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVxdWVzdFBlcm1pc3Npb24oKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNDYXBhY2l0b3IoKSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RTdG9hZ2VQZXJtaXNzaW9uKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdENhbWVyYVBlcm1pc3Npb24oKTtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0TWljUGVybWlzc2lvbigpO1xyXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RSZWNvcmRBdWRpb1Blcm1pc3Npb24oKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0UmVjb3JkQXVkaW9QZXJtaXNzaW9uKCkge2xldCBkYXRhID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLnJlcXVlc3RSdW50aW1lUGVybWlzc2lvbnMoW3RoaXMuZGlhZ25vc3RpYy5wZXJtaXNzaW9uLlJFQ09SRF9BVURJT10pO1xyXG4gICAgY29uc29sZS5sb2coXCJyZWNvcmQgcGVybWlzc2lvbiByZXF1ZXN0OlwiLCBkYXRhKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RNaWNQZXJtaXNzaW9uKCkge1xyXG4gICAgbGV0IGlzQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLmlzTWljcm9waG9uZUF1dGhvcml6ZWQoKTtcclxuICAgIGNvbnNvbGUubG9nKFwicGVybWlzc29uX01JQzpcIiwgaXNBdmFpbGFibGUpO1xyXG4gICAgaWYgKCFpc0F2YWlsYWJsZSkge1xyXG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5yZXF1ZXN0TWljcm9waG9uZUF1dGhvcml6YXRpb24oKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RTdG9hZ2VQZXJtaXNzaW9uKCkge1xyXG4gICAgbGV0IGlzQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLmlzRXh0ZXJuYWxTdG9yYWdlQXV0aG9yaXplZCgpO1xyXG4gICAgY29uc29sZS5sb2coXCJwZXJtaXNzb25fU1RPUkFHRTpcIiwgaXNBdmFpbGFibGUpO1xyXG4gICAgaWYgKCFpc0F2YWlsYWJsZSkge1xyXG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5yZXF1ZXN0RXh0ZXJuYWxTdG9yYWdlQXV0aG9yaXphdGlvbigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVxdWVzdENhbWVyYVBlcm1pc3Npb24oKSB7XHJcbiAgICBsZXQgaXNBdmFpbGFibGUgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMuaXNDYW1lcmFBdXRob3JpemVkKCk7XHJcbiAgICBjb25zb2xlLmxvZyhcInBlcm1pc3Nvbl9DYW1lcmE6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdENhbWVyYUF1dGhvcml6YXRpb24oKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIOWFtuS7lui+heWKqeaWueazlVxyXG4gIHNwbGl0QXVkaW9EYXRhKGF1ZGlvRGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBzZWdtZW50U2l6ZSA9IDEyODA7XHJcbiAgICBjb25zdCBzZWdtZW50Q291bnQgPSBNYXRoLmNlaWwoYXVkaW9EYXRhLmxlbmd0aCAvIHNlZ21lbnRTaXplKTtcclxuICAgIGNvbnN0IHNlZ21lbnRzID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50Q291bnQ7IGkrKykge1xyXG4gICAgICBjb25zdCBzdGFydCA9IGkgKiBzZWdtZW50U2l6ZTtcclxuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBzZWdtZW50U2l6ZTtcclxuICAgICAgY29uc3Qgc2VnbWVudCA9IGF1ZGlvRGF0YS5zbGljZShzdGFydCwgZW5kKTtcclxuICAgICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VnbWVudHM7XHJcbiAgfVxyXG5cclxuICBCdWZmZXJUb0Jsb2IoYnVmZmVyOiBhbnkpIHtcclxuICAgIHJldHVybiBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXVkaW8vcGNtJyB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBsYXlCdWZmZXJzKCkge1xyXG4gICAgbGV0IGF1ZGlvQmxvYiA9IGF3YWl0IHRoaXMuQnVmZmVyc1RvQmxvYih0aGlzLmFsbFJlY29yZGVkQnVmZmVycyk7XHJcbiAgICB0aGlzLnBsYXlQQ00oYXVkaW9CbG9iLCA0NDEwMCk7XHJcbiAgfVxyXG5cclxuICBCdWZmZXJzVG9CbG9iKGJ1ZmZlcnM6IEFycmF5PGFueT4pIHtcclxuICAgIGxldCBhdWRpb0J1ZmZlcjogYW55ID0gW107XHJcbiAgICBidWZmZXJzLmZvckVhY2goYnVmZmVyID0+IHtcclxuICAgICAgYnVmZmVyLmZvckVhY2goaW50MTYgPT4ge1xyXG4gICAgICAgIGF1ZGlvQnVmZmVyLnB1c2goaW50MTYpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5ldyBCbG9iKFthdWRpb0J1ZmZlcl0sIHsgdHlwZTogJ2F1ZGlvL3BjbScgfSk7XHJcbiAgfVxyXG59Il19
@@ -1,7 +1,7 @@
1
1
  export * from "./fmode-voice.service";
2
2
  export * from "./lib/audio/audio.player";
3
3
  export * from "./lib/audio/streamer.microsoft";
4
- export * from "./class-asr";
4
+ // export * from "./class-asr"
5
5
  export * from "./tts";
6
6
  export * from "./lib/audio/streamer.microsoft";
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvdm9pY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQTtBQUVyQyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsZ0NBQWdDLENBQUE7QUFFOUMsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxPQUFPLENBQUE7QUFDckIsY0FBYyxnQ0FBZ0MsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2Ztb2RlLXZvaWNlLnNlcnZpY2VcIlxyXG5cclxuZXhwb3J0ICogZnJvbSBcIi4vbGliL2F1ZGlvL2F1ZGlvLnBsYXllclwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9hdWRpby9zdHJlYW1lci5taWNyb3NvZnRcIlxyXG5cclxuZXhwb3J0ICogZnJvbSBcIi4vY2xhc3MtYXNyXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vdHRzXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vbGliL2F1ZGlvL3N0cmVhbWVyLm1pY3Jvc29mdFwiIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvdm9pY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQTtBQUVyQyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsZ0NBQWdDLENBQUE7QUFFOUMsOEJBQThCO0FBQzlCLGNBQWMsT0FBTyxDQUFBO0FBQ3JCLGNBQWMsZ0NBQWdDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9mbW9kZS12b2ljZS5zZXJ2aWNlXCJcclxuXHJcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9hdWRpby9hdWRpby5wbGF5ZXJcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvYXVkaW8vc3RyZWFtZXIubWljcm9zb2Z0XCJcclxuXHJcbi8vIGV4cG9ydCAqIGZyb20gXCIuL2NsYXNzLWFzclwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3R0c1wiXHJcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9hdWRpby9zdHJlYW1lci5taWNyb3NvZnRcIiJdfQ==
@@ -1,7 +1,8 @@
1
1
  import Parse from "parse";
2
2
  import { AudioPlayer } from "../lib/audio/audio.player";
3
3
  import { FmPushAudioOutputStreamCallback } from "../lib/audio/streamer.microsoft";
4
- import { FmodeTTSProviderMicrosoft } from "./provider-microsoft";
4
+ // import { FmodeTTSProviderMicrosoft } from "./provider-microsoft";
5
+ // class FmodeTTSProviderMicrosoft{}
5
6
  import { PCMStreamer } from "../lib/audio/streamer.pcm";
6
7
  /**
7
8
  * FmodeTTS
@@ -27,7 +28,7 @@ export class FmodeTTS {
27
28
  this.audioPlayer = AudioPlayer.getInstance();
28
29
  this.audioStream = new FmPushAudioOutputStreamCallback();
29
30
  // 初始化provider
30
- this.provider = config.provider || new FmodeTTSProviderMicrosoft();
31
+ this.provider = config.provider; // || new FmodeTTSProviderMicrosoft();
31
32
  console.log("初始化provider", config, this.provider, this.provider.constructor);
32
33
  if (this.provider.constructor.toString().indexOf("Doubao") > -1) {
33
34
  // 创建 PCM 流播放器
@@ -185,4 +186,4 @@ export class FmodeTTS {
185
186
  return fileResult?.url || null;
186
187
  }
187
188
  }
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtdHRzLWNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3ZvaWNlL3R0cy9mbW9kZS10dHMtY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFLeEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDakIsbUJBQW1CO0lBQ25CLGdCQUFnQjthQUNELG1CQUFjLEdBQW9CLElBQUksQUFBeEIsQ0FBeUI7SUFZdEQsSUFBSTtRQUNBLElBQUksUUFBUSxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuQyxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksTUFPWCxFQUFFLFVBQThCO1FBdkIxQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBd0I5QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUVwQixJQUFJLENBQUMsV0FBVyxHQUFHLFdB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LFVBQVUsRUFBRSxNQUFNLENBQUM7UUFFN0ksTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMvRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRELElBQUksVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBRUQsT0FBTyxVQUFVLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQztJQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gXCJwYXJzZVwiO1xyXG5pbXBvcnQgeyBOb3ZhVXBsb2FkU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zdG9yYWdlL3NlcnZpY2UtdXBsb2FkL25vdmEtdXBsb2FkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXVkaW9QbGF5ZXIgfSBmcm9tIFwiLi4vbGliL2F1ZGlvL2F1ZGlvLnBsYXllclwiO1xyXG5pbXBvcnQgeyBGbVB1c2hBdWRpb091dHB1dFN0cmVhbUNhbGxiYWNrIH0gZnJvbSBcIi4uL2xpYi9hdWRpby9zdHJlYW1lci5taWNyb3NvZnRcIjtcclxuaW1wb3J0IHsgRm1vZGVUVFNFdmVudCwgRm1vZGVUVFNQcm92aWRlciB9IGZyb20gXCIuL2ludC10dHMtcHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgRm1vZGVUVFNQcm92aWRlck1pY3Jvc29mdCB9IGZyb20gXCIuL3Byb3ZpZGVyLW1pY3Jvc29mdFwiO1xyXG5pbXBvcnQgeyBQQ01TdHJlYW1lciB9IGZyb20gXCIuLi9saWIvYXVkaW8vc3RyZWFtZXIucGNtXCI7XHJcbmltcG9ydCB7IEF1ZGlvU3RyZWFtZXIgfSBmcm9tIFwiLi4vbGliL2F1ZGlvL2F1ZGlvLnN0cmVhbWVyXCI7XHJcbmltcG9ydCB7IEZtb2RlQ2hhdFZvaWNlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvYWdlbnQvY2hhdC9pbnRlcmZhY2VcIjtcclxuXHJcblxyXG4vKipcclxuICogRm1vZGVUVFNcclxuICog5q+P5Liq5a6e5L6L6KGo56S65LiA5qyh54us56uL55qE6K+t6Z+z5ZCI5oiQ5pyN5YqhXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRm1vZGVUVFMge1xyXG4gICAgLy8g56eB5pyJ5bGe5oCn77ya5YWo5bGA6YWN572uIOW9k+WJjea/gOa0u+WunuS+i1xyXG4gICAgLy8g5a6e546w5YWo5bGA5LuF5LiA5LiqVFRT5Zyo5pKt5pS+XHJcbiAgICBwcml2YXRlIHN0YXRpYyBhY3RpdmVJbnN0YW5jZTogRm1vZGVUVFMgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgcHJpdmF0ZSBwcm92aWRlcjogRm1vZGVUVFNQcm92aWRlcjtcclxuICAgIGV2ZW50TWFwOiBGbW9kZVRUU0V2ZW50O1xyXG4gICAgdXBsb2FkU2Vydj86IE5vdmFVcGxvYWRTZXJ2aWNlO1xyXG4gICAgcHVibGljIGlzUGxheWluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgYXVkaW9QbGF5ZXI6IEF1ZGlvUGxheWVyO1xyXG4gICAgYXVkaW9TdHJlYW06IEF1ZGlvU3RyZWFtZXI7XHJcbiAgICAvLyDpn7PoibJcclxuICAgIHZvaWNlQ29uZmlnOkZtb2RlQ2hhdFZvaWNlQ29uZmlnfHVuZGVmaW5lZFxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgaWYgKEZtb2RlVFRTLmFjdGl2ZUluc3RhbmNlID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgIEZtb2RlVFRTLmFjdGl2ZUluc3RhbmNlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdWRpb1BsYXllcj8uc3RvcCgpO1xyXG4gICAgICAgIHRoaXMuYXVkaW9TdHJlYW0/LnN0b3AoKTtcclxuICAgICAgICB0aGlzLnByb3ZpZGVyPy5zdG9wKCk7XHJcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbmZpZzphbnlcclxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzoge1xyXG4gICAgICAgIHJlZ2lvbjogc3RyaW5nLFxyXG4gICAgICAgIGF1ZGlvU3RyZWFtPzpBdWRpb1N0cmVhbWVyLFxyXG4gICAgICAgIHN1YnNjcmlwdGlvbktleT86IHN0cmluZyxcclxuICAgICAgICB0b2tlbj86IHN0cmluZyxcclxuICAgICAgICBwcm92aWRlcj86IEZtb2RlVFRTUHJvdmlkZXIgLy8g5YWB6K645Lyg5YWl6Ieq5a6a5LmJcHJvdmlkZXJcclxuICAgICAgICB2b2ljZUNvbmZpZz86IEZtb2RlQ2hhdFZvaWNlQ29uZmlnXHJcbiAgICB9LCB1cGxvYWRTZXJ2PzogTm92YVVwbG9hZFNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnVwbG9hZFNlcnYgPSB1cGxvYWRTZXJ2O1xyXG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnXHJcblxyXG4gICAgICAgIHRoaXMuYXVkaW9QbGF5ZXIgPSBBdWRpb1BsYXllci5nZXRJbnN0YW5jZSgpO1xyXG4gICAgICAgIHRoaXMuYXVkaW9TdHJlYW0gPSBuZXcgRm1QdXNoQXVkaW9PdXRwdXRTdHJlYW1DYWxsYmFjaygpO1xyXG5cclxuICAgICAgICAvLyDliJ3lp4vljJZwcm92aWRlclxyXG4gICAgICAgIHRoaXMucHJvdmlkZXIgPSBjb25maWcucHJvdmlkZXIgfHwgbmV3IEZtb2RlVFRTUHJvdmlkZXJNaWNyb3NvZnQoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIuWIneWni+WMlnByb3ZpZGVyXCIsY29uZmlnLHRoaXMucHJvdmlkZXIsdGhpcy5wcm92aWRlci5jb25zdHJ1Y3RvcilcclxuICAgICAgICBpZih0aGlzLnByb3ZpZGVyLmNvbnN0cnVjdG9yLnRvU3RyaW5nKCkuaW5kZXhPZihcIkRvdWJhb1wiKT4tMSApe1xyXG4gICAgICAgICAgICAvLyDliJvlu7ogUENNIOa1geaSreaUvuWZqFxyXG4gICAgICAgICAgICBjb25zdCBwY21TdHJlYW1lciA9IG5ldyBQQ01TdHJlYW1lcigyNDAwMCwgMSwgMTYpO1xyXG4gICAgICAgICAgICBjb25maWcuYXVkaW9TdHJlYW0gPSBwY21TdHJlYW1lclxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25maWcuYXVkaW9TdHJlYW0gPSB0aGlzLmF1ZGlvU3RyZWFtXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmF1ZGlvU3RyZWFtID0gY29uZmlnPy5hdWRpb1N0cmVhbSB8fCB0aGlzLmF1ZGlvU3RyZWFtO1xyXG5cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnByb3ZpZGVyLmluaXRpYWxpemUoY29uZmlnKTtcclxuICAgICAgICB0aGlzLnByb3ZpZGVyLnZvaWNlQ29uZmlnID0gY29uZmlnPy52b2ljZUNvbmZpZztcclxuICAgICAgICB0aGlzLnByb3ZpZGVyLmV2ZW50TWFwID0gdGhpcy5ldmVudE1hcDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZXh0cmFjdFRleHRGcm9tWE1MKGlucHV0U3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcgfHwgdHlwZW9mIGlucHV0U3RyaW5nICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgY29uc3QgcmVnZXggPSAvPihbXjxdKyk8L2c7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGxldCBtYXRjaGVzOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xyXG4gICAgXHJcbiAgICAgICAgd2hpbGUgKChtYXRjaGVzID0gcmVnZXguZXhlYyhpbnB1dFN0cmluZykpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBtYXRjaGVzWzFdPy50cmltKCk7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHJldHVybiByZXN1bHQuam9pbignICcpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBleHRyYWN0U1NNTENvbnRlbnQoaW5wdXRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFpbnB1dFN0cmluZyB8fCB0eXBlb2YgaW5wdXRTdHJpbmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dFN0cmluZyB8fCAnJztcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBjb25zdCByZWdleCA9IC88c3BlYWsuKj88XFwvc3BlYWs+L3M7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBpbnB1dFN0cmluZy5tYXRjaChyZWdleCk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoPy5bMF0gfHwgaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNwZWFrQXN5bmModGV4dE9yU1NNTDogc3RyaW5nLCBjaGF0Vm9pY2U/OiBQYXJzZS5PYmplY3QsIGV2ZW50TWFwPzogYW55KTogUHJvbWlzZTxQYXJzZS5PYmplY3Q+IHtcclxuICAgICAgICAgLy8g5YGc5q2i5b2T5YmN5rS75Yqo55qE5YW25LuW5a6e5L6LXHJcbiAgICAgICAgIGlmIChGbW9kZVRUUy5hY3RpdmVJbnN0YW5jZSAmJiBGbW9kZVRUUy5hY3RpdmVJbnN0YW5jZSAhPT0gdGhpcykge1xyXG4gICAgICAgICAgICBGbW9kZVRUUy5hY3RpdmVJbnN0YW5jZS5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEZtb2RlVFRTLmFjdGl2ZUluc3RhbmNlID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKCFjaGF0Vm9pY2UpIHtcclxuICAgICAgICAgICAgY29uc3QgQ2hhdFZvaWNlID0gUGFyc2UuT2JqZWN0LmV4dGVuZChcIkNoYXRWb2ljZVwiKTtcclxuICAgICAgICAgICAgY2hhdFZvaWNlID0gbmV3IENoYXRWb2ljZSgpO1xyXG4gICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwic3NtbFwiLCB0ZXh0T3JTU01MKTtcclxuICAgICAgICAgICAgY2hhdFZvaWNlLnNldChcImNvbnRlbnRcIiwgdGhpcy5leHRyYWN0VGV4dEZyb21YTUwodGV4dE9yU1NNTCkpO1xyXG4gICAgICAgICAgICBjb25zdCBjb21wYW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjb21wYW55XCIpO1xyXG4gICAgICAgICAgICBjb21wYW55ICYmIGNoYXRWb2ljZS5zZXQoXCJjb21wYW55XCIsIHsgX190eXBlOiBcIlBvaW50ZXJcIiwgY2xhc3NOYW1lOiBcIkNvbXBhbnlcIiwgb2JqZWN0SWQ6IGNvbXBhbnkgfSk7XHJcbiAgICAgICAgICAgIFBhcnNlLlVzZXIuY3VycmVudCgpPy5pZCAmJiBjaGF0Vm9pY2Uuc2V0KFwidXNlclwiLCBQYXJzZS5Vc2VyLmN1cnJlbnQoKS50b1BvaW50ZXIoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmo4Dmn6XnvJPlrZhcclxuICAgICAgICBpZiAoIWNoYXRWb2ljZT8uZ2V0KFwidm9pY2VGaWxlXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICAvLyBpZiAoY2hhdFZvaWNlPy5nZXQoXCJjb250ZW50XCIpKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBvckxpc3QucHVzaCh7IGNvbnRlbnQ6IGNoYXRWb2ljZT8uZ2V0KFwiY29udGVudFwiKSB9KTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBpZiAodGV4dE9yU1NNTCkge1xyXG4gICAgICAgICAgICAgICAgb3JMaXN0LnB1c2goeyBzc21sOiB0ZXh0T3JTU01MIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IFBhcnNlLlF1ZXJ5LmZyb21KU09OKFwiQ2hhdFZvaWNlXCIsIHtcclxuICAgICAgICAgICAgICAgIGluY2x1ZGU6IFwidm9pY2VGaWxlXCIsXHJcbiAgICAgICAgICAgICAgICB3aGVyZTogeyAkb3I6IG9yTGlzdCB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBxdWVyeS5leGlzdHMoXCJ2b2ljZUZpbGVcIik7XHJcbiAgICAgICAgICAgIHF1ZXJ5LmFkZERlc2NlbmRpbmcoJ3VwZGF0ZWRBdCcpO1xyXG4gICAgICAgICAgICBjb25zdCBleGlzdHMgPSBhd2FpdCBxdWVyeS5maXJzdCgpO1xyXG4gICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwidm9pY2VGaWxlXCIsIGV4aXN0cz8uZ2V0KFwidm9pY2VGaWxlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRXhpc3RzIHBsYXlBdWRpb0RhdGFcIiwgY2hhdFZvaWNlPy5nZXQoXCJ2b2ljZUZpbGVcIikpXHJcbiAgICAgICAgaWYgKGNoYXRWb2ljZT8uZ2V0KFwidm9pY2VGaWxlXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheUF1ZGlvRGF0YShjaGF0Vm9pY2U/LmdldChcInZvaWNlRmlsZVwiKT8uZ2V0KFwidXJsXCIpLCBjaGF0Vm9pY2UsIGV2ZW50TWFwKTtcclxuICAgICAgICAgICAgY2hhdFZvaWNlLnNhdmUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNoYXRWb2ljZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRleHRPclNTTUwgPSB0aGlzLmV4dHJhY3RTU01MQ29udGVudCh0ZXh0T3JTU01MKTtcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVyLnN5bnRoZXNpemUoXHJcbiAgICAgICAgICAgICAgICB0ZXh0T3JTU01MLFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvRGF0YSA9IHJlc3VsdD8uYXVkaW9EYXRhO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZHVyYXRpb24gPSBOdW1iZXIocmVzdWx0Py5hdWRpb0R1cmF0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY29uZmlnLnByb3ZpZGVyPT1cIm1pY3Jvc29mdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBkdXJhdGlvbiAvIDEwMDAwXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwiZHVyYXRpb25cIiwgZHVyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXZlbnRNYXA/Lm9uUmVzdWx0XCIsZXZlbnRNYXAsZHVyYXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRNYXA/Lm9uUmVzdWx0Py4oe2R1cmF0aW9uOmR1cmF0aW9ufSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYXdhaXQgdGhpcy5wbGF5QXVkaW9EYXRhKGF1ZGlvRGF0YSwgY2hhdFZvaWNlLCBldmVudE1hcCk7IC8vIOeUn+aIkOaXtuW3sue7j+WcqOaSreaUvuS6hu+8jOS4jemcgOimgeWGjeaSreaUvlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYXVkaW9EYXRhXSwgeyB0eXBlOiAnYXVkaW8vd2F2JyB9KTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEFuZFNhdmVWb2ljZShibG9iLCBjaGF0Vm9pY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBdWRpbyBzeW50aGVzaXMgZmluaXNoZWQuIER1cmF0aW9uOiAke2VuZFRpbWUgLSBzdGFydFRpbWV9IG1zYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TWFwPy5vblN0b3A/LigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2hhdFZvaWNlKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChgRXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN5bnRoZXNpczogJHtlcnJvcn1gKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50TWFwPy5vblN0YXJ0Py4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHBsYXlBdWRpb0RhdGEoYXVkaW9EYXRhOiBzdHJpbmcsIGNoYXRWb2ljZTogUGFyc2UuT2JqZWN0LCBldmVudE1hcDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChhdWRpb0RhdGE/LmluZGV4T2Y/LihcImh0dHBcIikgPj0gLTEpIHtcclxuICAgICAgICAgICAgdXJsID0gYXVkaW9EYXRhO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYXVkaW9EYXRhXSwgeyB0eXBlOiAnYXVkaW8vd2F2JyB9KTtcclxuICAgICAgICAgICAgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRBbmRTYXZlVm9pY2UoYmxvYiwgY2hhdFZvaWNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50TWFwPy5vblN0YXJ0Py4oY2hhdFZvaWNlKTtcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgYXVkaW9QbGF5ZXIgPSB0aGlzLmF1ZGlvUGxheWVyO1xyXG4gICAgICAgIGF1ZGlvUGxheWVyLnNldEF1ZGlvRXZlbnQoXCJvbmxvYWRlZGRhdGFcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGF1ZGlvUGxheWVyLmR1cmF0aW9uICogMTAwMDtcclxuICAgICAgICAgICAgaWYgKCFjaGF0Vm9pY2U/LmdldChcImR1cmF0aW9uXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwiZHVyYXRpb25cIiwgZHVyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgY2hhdFZvaWNlLnNhdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBldmVudE1hcD8ub25Mb2FkZWQ/LihhdWRpb1BsYXllcik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIOiuvue9ruS6i+S7tuebkeWQrFxyXG4gICAgICAgIFtcIm9uYWJvcnRcIiwgXCJvbmVycm9yXCIsIFwib25wYXVzZVwiLCBcIm9uZW5kZWRcIiwgXCJvbmNsb3NlXCJdLmZvckVhY2goZXZlbnQgPT4ge1xyXG4gICAgICAgICAgICBhdWRpb1BsYXllci5zZXRBdWRpb0V2ZW50KGV2ZW50LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZXZlbnRNYXA/Lm9uU3RvcD8uKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBwbGF5QXVkaW8gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGF1ZGlvUGxheWVyLnBsYXkodXJsKS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHBsYXlBdWRpbywgMjAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICBwbGF5QXVkaW8oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHVwbG9hZEFuZFNhdmVWb2ljZShibG9iOiBCbG9iLCBjaGF0Vm9pY2U6IFBhcnNlLk9iamVjdCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgICAgIGlmICghdGhpcy51cGxvYWRTZXJ2KSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgY29uc3QgaWQgPSBjaGF0Vm9pY2U/LmlkIHx8IHRoaXMudXBsb2FkU2Vydi5nZW5NZDUoY2hhdFZvaWNlPy5nZXQoXCJjb250ZW50XCIpIHx8IGNoYXRWb2ljZT8uZ2V0KFwic3NtbFwiKSk7XHJcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGAke2lkfSR7bm93LmdldEZ1bGxZZWFyKCl9JHtub3cuZ2V0TW9udGgoKSArIDF9JHtub3cuZ2V0RGF0ZSgpfSR7bm93LmdldEhvdXJzKCl9JHtub3cuZ2V0TWludXRlcygpfSR7bm93LmdldFNlY29uZHMoKX0ud2F2YDtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlbmFtZSwgeyB0eXBlOiAnYXVkaW8vd2F2JyB9KTtcclxuICAgICAgICBjb25zdCBmaWxlUmVzdWx0ID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2LnVwbG9hZChmaWxlKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZmlsZVJlc3VsdD8uaWQpIHtcclxuICAgICAgICAgICAgY2hhdFZvaWNlLnNldChcInZvaWNlRmlsZVwiLCB7IF9fdHlwZTogXCJQb2ludGVyXCIsIGNsYXNzTmFtZTogXCJBdHRhY2htZW50XCIsIG9iamVjdElkOiBmaWxlUmVzdWx0LmlkIH0pO1xyXG4gICAgICAgICAgICBhd2FpdCBjaGF0Vm9pY2Uuc2F2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gZmlsZVJlc3VsdD8udXJsIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgXHJcbn0iXX0=
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtdHRzLWNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3ZvaWNlL3R0cy9mbW9kZS10dHMtY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixvRUFBb0U7QUFDcEUsb0NBQW9DO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUt4RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNqQixtQkFBbUI7SUFDbkIsZ0JBQWdCO2FBQ0QsbUJBQWMsR0FBb0IsSUFBSSxBQUF4QixDQUF5QjtJQVl0RCxJQUFJO1FBQ0EsSUFBSSxRQUFRLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25DLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWSxNQU9YLEVBQUUsVUFBOEI7UUF2QjFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUF3QjlCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBRXBCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxD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QU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RCxJQUFJLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNqQixTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEcsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUVELE9BQU8sVUFBVSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUM7SUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcclxuaW1wb3J0IHsgTm92YVVwbG9hZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmFnZS9zZXJ2aWNlLXVwbG9hZC9ub3ZhLXVwbG9hZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEF1ZGlvUGxheWVyIH0gZnJvbSBcIi4uL2xpYi9hdWRpby9hdWRpby5wbGF5ZXJcIjtcclxuaW1wb3J0IHsgRm1QdXNoQXVkaW9PdXRwdXRTdHJlYW1DYWxsYmFjayB9IGZyb20gXCIuLi9saWIvYXVkaW8vc3RyZWFtZXIubWljcm9zb2Z0XCI7XHJcbmltcG9ydCB7IEZtb2RlVFRTRXZlbnQsIEZtb2RlVFRTUHJvdmlkZXIgfSBmcm9tIFwiLi9pbnQtdHRzLXByb3ZpZGVyXCI7XHJcbi8vIGltcG9ydCB7IEZtb2RlVFRTUHJvdmlkZXJNaWNyb3NvZnQgfSBmcm9tIFwiLi9wcm92aWRlci1taWNyb3NvZnRcIjtcclxuLy8gY2xhc3MgRm1vZGVUVFNQcm92aWRlck1pY3Jvc29mdHt9XHJcbmltcG9ydCB7IFBDTVN0cmVhbWVyIH0gZnJvbSBcIi4uL2xpYi9hdWRpby9zdHJlYW1lci5wY21cIjtcclxuaW1wb3J0IHsgQXVkaW9TdHJlYW1lciB9IGZyb20gXCIuLi9saWIvYXVkaW8vYXVkaW8uc3RyZWFtZXJcIjtcclxuaW1wb3J0IHsgRm1vZGVDaGF0Vm9pY2VDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9hZ2VudC9jaGF0L2ludGVyZmFjZVwiO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBGbW9kZVRUU1xyXG4gKiDmr4/kuKrlrp7kvovooajnpLrkuIDmrKHni6znq4vnmoTor63pn7PlkIjmiJDmnI3liqFcclxuICovXHJcbmV4cG9ydCBjbGFzcyBGbW9kZVRUUyB7XHJcbiAgICAvLyDnp4HmnInlsZ7mgKfvvJrlhajlsYDphY3nva4g5b2T5YmN5r+A5rS75a6e5L6LXHJcbiAgICAvLyDlrp7njrDlhajlsYDku4XkuIDkuKpUVFPlnKjmkq3mlL5cclxuICAgIHByaXZhdGUgc3RhdGljIGFjdGl2ZUluc3RhbmNlOiBGbW9kZVRUUyB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICBwcml2YXRlIHByb3ZpZGVyOiBGbW9kZVRUU1Byb3ZpZGVyO1xyXG4gICAgZXZlbnRNYXA6IEZtb2RlVFRTRXZlbnQ7XHJcbiAgICB1cGxvYWRTZXJ2PzogTm92YVVwbG9hZFNlcnZpY2U7XHJcbiAgICBwdWJsaWMgaXNQbGF5aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBhdWRpb1BsYXllcjogQXVkaW9QbGF5ZXI7XHJcbiAgICBhdWRpb1N0cmVhbTogQXVkaW9TdHJlYW1lcjtcclxuICAgIC8vIOmfs+iJslxyXG4gICAgdm9pY2VDb25maWc6Rm1vZGVDaGF0Vm9pY2VDb25maWd8dW5kZWZpbmVkXHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBpZiAoRm1vZGVUVFMuYWN0aXZlSW5zdGFuY2UgPT09IHRoaXMpIHtcclxuICAgICAgICAgICAgRm1vZGVUVFMuYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF1ZGlvUGxheWVyPy5zdG9wKCk7XHJcbiAgICAgICAgdGhpcy5hdWRpb1N0cmVhbT8uc3RvcCgpO1xyXG4gICAgICAgIHRoaXMucHJvdmlkZXI/LnN0b3AoKTtcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uZmlnOmFueVxyXG4gICAgY29uc3RydWN0b3IoY29uZmlnOiB7XHJcbiAgICAgICAgcmVnaW9uOiBzdHJpbmcsXHJcbiAgICAgICAgYXVkaW9TdHJlYW0/OkF1ZGlvU3RyZWFtZXIsXHJcbiAgICAgICAgc3Vic2NyaXB0aW9uS2V5Pzogc3RyaW5nLFxyXG4gICAgICAgIHRva2VuPzogc3RyaW5nLFxyXG4gICAgICAgIHByb3ZpZGVyPzogRm1vZGVUVFNQcm92aWRlciAvLyDlhYHorrjkvKDlhaXoh6rlrprkuYlwcm92aWRlclxyXG4gICAgICAgIHZvaWNlQ29uZmlnPzogRm1vZGVDaGF0Vm9pY2VDb25maWdcclxuICAgIH0sIHVwbG9hZFNlcnY/OiBOb3ZhVXBsb2FkU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMudXBsb2FkU2VydiA9IHVwbG9hZFNlcnY7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWdcclxuXHJcbiAgICAgICAgdGhpcy5hdWRpb1BsYXllciA9IEF1ZGlvUGxheWVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdGhpcy5hdWRpb1N0cmVhbSA9IG5ldyBGbVB1c2hBdWRpb091dHB1dFN0cmVhbUNhbGxiYWNrKCk7XHJcblxyXG4gICAgICAgIC8vIOWIneWni+WMlnByb3ZpZGVyXHJcbiAgICAgICAgdGhpcy5wcm92aWRlciA9IGNvbmZpZy5wcm92aWRlciAvLyB8fCBuZXcgRm1vZGVUVFNQcm92aWRlck1pY3Jvc29mdCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi5Yid5aeL5YyWcHJvdmlkZXJcIixjb25maWcsdGhpcy5wcm92aWRlcix0aGlzLnByb3ZpZGVyLmNvbnN0cnVjdG9yKVxyXG4gICAgICAgIGlmKHRoaXMucHJvdmlkZXIuY29uc3RydWN0b3IudG9TdHJpbmcoKS5pbmRleE9mKFwiRG91YmFvXCIpPi0xICl7XHJcbiAgICAgICAgICAgIC8vIOWIm+W7uiBQQ00g5rWB5pKt5pS+5ZmoXHJcbiAgICAgICAgICAgIGNvbnN0IHBjbVN0cmVhbWVyID0gbmV3IFBDTVN0cmVhbWVyKDI0MDAwLCAxLCAxNik7XHJcbiAgICAgICAgICAgIGNvbmZpZy5hdWRpb1N0cmVhbSA9IHBjbVN0cmVhbWVyXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbmZpZy5hdWRpb1N0cmVhbSA9IHRoaXMuYXVkaW9TdHJlYW1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXVkaW9TdHJlYW0gPSBjb25maWc/LmF1ZGlvU3RyZWFtIHx8IHRoaXMuYXVkaW9TdHJlYW07XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucHJvdmlkZXIuaW5pdGlhbGl6ZShjb25maWcpO1xyXG4gICAgICAgIHRoaXMucHJvdmlkZXIudm9pY2VDb25maWcgPSBjb25maWc/LnZvaWNlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMucHJvdmlkZXIuZXZlbnRNYXAgPSB0aGlzLmV2ZW50TWFwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0VGV4dEZyb21YTUwoaW5wdXRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFpbnB1dFN0cmluZyB8fCB0eXBlb2YgaW5wdXRTdHJpbmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBjb25zdCByZWdleCA9IC8+KFtePF0rKTwvZztcclxuICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgbGV0IG1hdGNoZXM6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XHJcbiAgICBcclxuICAgICAgICB3aGlsZSAoKG1hdGNoZXMgPSByZWdleC5leGVjKGlucHV0U3RyaW5nKSkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoZXNbMV0/LnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKHRleHQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGV4dHJhY3RTU01MQ29udGVudChpbnB1dFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWlucHV0U3RyaW5nIHx8IHR5cGVvZiBpbnB1dFN0cmluZyAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0U3RyaW5nIHx8ICcnO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLzxzcGVhay4qPzxcXC9zcGVhaz4vcztcclxuICAgICAgICBjb25zdCBtYXRjaCA9IGlucHV0U3RyaW5nLm1hdGNoKHJlZ2V4KTtcclxuICAgICAgICByZXR1cm4gbWF0Y2g/LlswXSB8fCBpbnB1dFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc3BlYWtBc3luYyh0ZXh0T3JTU01MOiBzdHJpbmcsIGNoYXRWb2ljZT86IFBhcnNlLk9iamVjdCwgZXZlbnRNYXA/OiBhbnkpOiBQcm9taXNlPFBhcnNlLk9iamVjdD4ge1xyXG4gICAgICAgICAvLyDlgZzmraLlvZPliY3mtLvliqjnmoTlhbbku5blrp7kvotcclxuICAgICAgICAgaWYgKEZtb2RlVFRTLmFjdGl2ZUluc3RhbmNlICYmIEZtb2RlVFRTLmFjdGl2ZUluc3RhbmNlICE9PSB0aGlzKSB7XHJcbiAgICAgICAgICAgIEZtb2RlVFRTLmFjdGl2ZUluc3RhbmNlLnN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgRm1vZGVUVFMuYWN0aXZlSW5zdGFuY2UgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoIWNoYXRWb2ljZSkge1xyXG4gICAgICAgICAgICBjb25zdCBDaGF0Vm9pY2UgPSBQYXJzZS5PYmplY3QuZXh0ZW5kKFwiQ2hhdFZvaWNlXCIpO1xyXG4gICAgICAgICAgICBjaGF0Vm9pY2UgPSBuZXcgQ2hhdFZvaWNlKCk7XHJcbiAgICAgICAgICAgIGNoYXRWb2ljZS5zZXQoXCJzc21sXCIsIHRleHRPclNTTUwpO1xyXG4gICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwiY29udGVudFwiLCB0aGlzLmV4dHJhY3RUZXh0RnJvbVhNTCh0ZXh0T3JTU01MKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBhbnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImNvbXBhbnlcIik7XHJcbiAgICAgICAgICAgIGNvbXBhbnkgJiYgY2hhdFZvaWNlLnNldChcImNvbXBhbnlcIiwgeyBfX3R5cGU6IFwiUG9pbnRlclwiLCBjbGFzc05hbWU6IFwiQ29tcGFueVwiLCBvYmplY3RJZDogY29tcGFueSB9KTtcclxuICAgICAgICAgICAgUGFyc2UuVXNlci5jdXJyZW50KCk/LmlkICYmIGNoYXRWb2ljZS5zZXQoXCJ1c2VyXCIsIFBhcnNlLlVzZXIuY3VycmVudCgpLnRvUG9pbnRlcigpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOajgOafpee8k+WtmFxyXG4gICAgICAgIGlmICghY2hhdFZvaWNlPy5nZXQoXCJ2b2ljZUZpbGVcIikpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3JMaXN0ID0gW107XHJcbiAgICAgICAgICAgIC8vIGlmIChjaGF0Vm9pY2U/LmdldChcImNvbnRlbnRcIikpIHtcclxuICAgICAgICAgICAgLy8gICAgIG9yTGlzdC5wdXNoKHsgY29udGVudDogY2hhdFZvaWNlPy5nZXQoXCJjb250ZW50XCIpIH0pO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIGlmICh0ZXh0T3JTU01MKSB7XHJcbiAgICAgICAgICAgICAgICBvckxpc3QucHVzaCh7IHNzbWw6IHRleHRPclNTTUwgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gUGFyc2UuUXVlcnkuZnJvbUpTT04oXCJDaGF0Vm9pY2VcIiwge1xyXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogXCJ2b2ljZUZpbGVcIixcclxuICAgICAgICAgICAgICAgIHdoZXJlOiB7ICRvcjogb3JMaXN0IH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHF1ZXJ5LmV4aXN0cyhcInZvaWNlRmlsZVwiKTtcclxuICAgICAgICAgICAgcXVlcnkuYWRkRGVzY2VuZGluZygndXBkYXRlZEF0Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHF1ZXJ5LmZpcnN0KCk7XHJcbiAgICAgICAgICAgIGNoYXRWb2ljZS5zZXQoXCJ2b2ljZUZpbGVcIiwgZXhpc3RzPy5nZXQoXCJ2b2ljZUZpbGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJFeGlzdHMgcGxheUF1ZGlvRGF0YVwiLCBjaGF0Vm9pY2U/LmdldChcInZvaWNlRmlsZVwiKSlcclxuICAgICAgICBpZiAoY2hhdFZvaWNlPy5nZXQoXCJ2b2ljZUZpbGVcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF5QXVkaW9EYXRhKGNoYXRWb2ljZT8uZ2V0KFwidm9pY2VGaWxlXCIpPy5nZXQoXCJ1cmxcIiksIGNoYXRWb2ljZSwgZXZlbnRNYXApO1xyXG4gICAgICAgICAgICBjaGF0Vm9pY2Uuc2F2ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gY2hhdFZvaWNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGV4dE9yU1NNTCA9IHRoaXMuZXh0cmFjdFNTTUxDb250ZW50KHRleHRPclNTTUwpO1xyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXIuc3ludGhlc2l6ZShcclxuICAgICAgICAgICAgICAgIHRleHRPclNTTUwsXHJcbiAgICAgICAgICAgICAgICBhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9EYXRhID0gcmVzdWx0Py5hdWRpb0RhdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IE51bWJlcihyZXN1bHQ/LmF1ZGlvRHVyYXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jb25maWcucHJvdmlkZXI9PVwibWljcm9zb2Z0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IGR1cmF0aW9uIC8gMTAwMDBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNoYXRWb2ljZS5zZXQoXCJkdXJhdGlvblwiLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJldmVudE1hcD8ub25SZXN1bHRcIixldmVudE1hcCxkdXJhdGlvbilcclxuICAgICAgICAgICAgICAgICAgICBldmVudE1hcD8ub25SZXN1bHQ/Lih7ZHVyYXRpb246ZHVyYXRpb259KTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyBhd2FpdCB0aGlzLnBsYXlBdWRpb0RhdGEoYXVkaW9EYXRhLCBjaGF0Vm9pY2UsIGV2ZW50TWFwKTsgLy8g55Sf5oiQ5pe25bey57uP5Zyo5pKt5pS+5LqG77yM5LiN6ZyA6KaB5YaN5pKt5pS+XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFthdWRpb0RhdGFdLCB7IHR5cGU6ICdhdWRpby93YXYnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkQW5kU2F2ZVZvaWNlKGJsb2IsIGNoYXRWb2ljZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEF1ZGlvIHN5bnRoZXNpcyBmaW5pc2hlZC4gRHVyYXRpb246ICR7ZW5kVGltZSAtIHN0YXJ0VGltZX0gbXNgKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRNYXA/Lm9uU3RvcD8uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjaGF0Vm9pY2UpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGBFcnJvciBvY2N1cnJlZCBkdXJpbmcgc3ludGhlc2lzOiAke2Vycm9yfWApO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRNYXA/Lm9uU3RhcnQ/LigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcGxheUF1ZGlvRGF0YShhdWRpb0RhdGE6IHN0cmluZywgY2hhdFZvaWNlOiBQYXJzZS5PYmplY3QsIGV2ZW50TWFwOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGF1ZGlvRGF0YT8uaW5kZXhPZj8uKFwiaHR0cFwiKSA+PSAtMSkge1xyXG4gICAgICAgICAgICB1cmwgPSBhdWRpb0RhdGE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFthdWRpb0RhdGFdLCB7IHR5cGU6ICdhdWRpby93YXYnIH0pO1xyXG4gICAgICAgICAgICB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEFuZFNhdmVWb2ljZShibG9iLCBjaGF0Vm9pY2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXZlbnRNYXA/Lm9uU3RhcnQ/LihjaGF0Vm9pY2UpO1xyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBhdWRpb1BsYXllciA9IHRoaXMuYXVkaW9QbGF5ZXI7XHJcbiAgICAgICAgYXVkaW9QbGF5ZXIuc2V0QXVkaW9FdmVudChcIm9ubG9hZGVkZGF0YVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gYXVkaW9QbGF5ZXIuZHVyYXRpb24gKiAxMDAwO1xyXG4gICAgICAgICAgICBpZiAoIWNoYXRWb2ljZT8uZ2V0KFwiZHVyYXRpb25cIikpIHtcclxuICAgICAgICAgICAgICAgIGNoYXRWb2ljZS5zZXQoXCJkdXJhdGlvblwiLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICBjaGF0Vm9pY2Uuc2F2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2ZW50TWFwPy5vbkxvYWRlZD8uKGF1ZGlvUGxheWVyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8g6K6+572u5LqL5Lu255uR5ZCsXHJcbiAgICAgICAgW1wib25hYm9ydFwiLCBcIm9uZXJyb3JcIiwgXCJvbnBhdXNlXCIsIFwib25lbmRlZFwiLCBcIm9uY2xvc2VcIl0uZm9yRWFjaChldmVudCA9PiB7XHJcbiAgICAgICAgICAgIGF1ZGlvUGxheWVyLnNldEF1ZGlvRXZlbnQoZXZlbnQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBldmVudE1hcD8ub25TdG9wPy4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBsYXlBdWRpbyA9ICgpID0+IHtcclxuICAgICAgICAgICAgYXVkaW9QbGF5ZXIucGxheSh1cmwpLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocGxheUF1ZGlvLCAyMDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHBsYXlBdWRpbygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdXBsb2FkQW5kU2F2ZVZvaWNlKGJsb2I6IEJsb2IsIGNoYXRWb2ljZTogUGFyc2UuT2JqZWN0KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVwbG9hZFNlcnYpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBjb25zdCBpZCA9IGNoYXRWb2ljZT8uaWQgfHwgdGhpcy51cGxvYWRTZXJ2Lmdlbk1kNShjaGF0Vm9pY2U/LmdldChcImNvbnRlbnRcIikgfHwgY2hhdFZvaWNlPy5nZXQoXCJzc21sXCIpKTtcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7aWR9JHtub3cuZ2V0RnVsbFllYXIoKX0ke25vdy5nZXRNb250aCgpICsgMX0ke25vdy5nZXREYXRlKCl9JHtub3cuZ2V0SG91cnMoKX0ke25vdy5nZXRNaW51dGVzKCl9JHtub3cuZ2V0U2Vjb25kcygpfS53YXZgO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVuYW1lLCB7IHR5cGU6ICdhdWRpby93YXYnIH0pO1xyXG4gICAgICAgIGNvbnN0IGZpbGVSZXN1bHQgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnYudXBsb2FkKGZpbGUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChmaWxlUmVzdWx0Py5pZCkge1xyXG4gICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwidm9pY2VGaWxlXCIsIHsgX190eXBlOiBcIlBvaW50ZXJcIiwgY2xhc3NOYW1lOiBcIkF0dGFjaG1lbnRcIiwgb2JqZWN0SWQ6IGZpbGVSZXN1bHQuaWQgfSk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNoYXRWb2ljZS5zYXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBmaWxlUmVzdWx0Py51cmwgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBcclxufSJdfQ==
@@ -1,5 +1,5 @@
1
1
  export * from "./fmode-tts-class";
2
2
  export * from "./provider-doubao";
3
- export * from "./provider-microsoft";
4
3
  export * from "../lib/audio/streamer.pcm";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvdm9pY2UvdHRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUE7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLHNCQUFzQixDQUFBO0FBQ3BDLGNBQWMsMkJBQTJCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9mbW9kZS10dHMtY2xhc3NcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9wcm92aWRlci1kb3ViYW9cIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9wcm92aWRlci1taWNyb3NvZnRcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi4vbGliL2F1ZGlvL3N0cmVhbWVyLnBjbVwiIl19
4
+ // export * from "./provider-microsoft"
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvdm9pY2UvdHRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUE7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLDJCQUEyQixDQUFBO0FBRXpDLHVDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2Ztb2RlLXR0cy1jbGFzc1wiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVyLWRvdWJhb1wiXHJcbmV4cG9ydCAqIGZyb20gXCIuLi9saWIvYXVkaW8vc3RyZWFtZXIucGNtXCJcclxuXHJcbi8vIGV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVyLW1pY3Jvc29mdFwiIl19