fmode-ng 0.0.241 → 0.0.242
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.
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +4 -4
- package/esm2022/lib/core/agent/chat/index.mjs +3 -2
- package/esm2022/lib/core/agent/index.mjs +7 -6
- package/esm2022/lib/core/index.mjs +8 -7
- package/esm2022/lib/core/storage/hwobs.provider.mjs +92 -29
- package/esm2022/lib/core/storage/index.mjs +2 -1
- package/esm2022/lib/core/storage/s3.provider.mjs +111 -0
- package/esm2022/lib/core/storage/types.mjs +1 -1
- package/esm2022/lib/storage/index.mjs +2 -1
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +120 -81
- package/esm2022/lib/storage/service-hwobs/index.mjs +2 -3
- package/esm2022/lib/storage/service-s3/index.mjs +2 -0
- package/esm2022/lib/storage/service-s3/s3.service.mjs +376 -0
- package/fesm2022/fmode-ng.mjs +869 -278
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/voice/fmode-voice.service.d.ts +3 -3
- package/lib/core/agent/chat/index.d.ts +1 -1
- package/lib/core/agent/index.d.ts +5 -5
- package/lib/core/index.d.ts +6 -6
- package/lib/core/storage/hwobs.provider.d.ts +12 -0
- package/lib/core/storage/index.d.ts +1 -0
- package/lib/core/storage/s3.provider.d.ts +21 -0
- package/lib/core/storage/types.d.ts +11 -1
- package/lib/storage/index.d.ts +1 -0
- package/lib/storage/service-hwobs/hwobs.service.d.ts +18 -13
- package/lib/storage/service-hwobs/index.d.ts +1 -2
- package/lib/storage/service-s3/index.d.ts +1 -0
- package/lib/storage/service-s3/s3.service.d.ts +137 -0
- package/package.json +5 -3
- package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +0 -1
- package/lib/storage/service-hwobs/typings/esdk-obs-browser.d.ts +0 -7
|
@@ -14,9 +14,9 @@ function checkWorkletSupport() {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
Recorder.ConnectEnableWorklet = checkWorkletSupport(); // 明确禁用AudioWorklet 兼容不支持的场景
|
|
17
|
-
import 'recorder-core/src/engine/pcm';
|
|
18
|
-
import 'recorder-core/src/engine/wav';
|
|
19
|
-
import 'recorder-core/src/extensions/waveview';
|
|
17
|
+
import 'recorder-core/src/engine/pcm.js';
|
|
18
|
+
import 'recorder-core/src/engine/wav.js';
|
|
19
|
+
import 'recorder-core/src/extensions/waveview.js';
|
|
20
20
|
// import './lib/recorder/engine-pcm'
|
|
21
21
|
// import './lib/recorder/engine-wav'
|
|
22
22
|
// import './lib/recorder/extension-waveview'
|
|
@@ -633,4 +633,4 @@ export class FmodeVoiceService {
|
|
|
633
633
|
return new Blob([audioBuffer], { type: 'audio/pcm' });
|
|
634
634
|
}
|
|
635
635
|
}
|
|
636
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtdm9pY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy92b2ljZS9mbW9kZS12b2ljZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxrRUFBa0U7QUFDbEUsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBRXBDLFlBQVk7QUFDWixTQUFTLG1CQUFtQjtJQUMxQixJQUFJLENBQUM7UUFDSCxPQUFPLENBQ0osTUFBYyxDQUFDLGdCQUFnQjtZQUMvQixNQUFjLENBQUMsWUFBWTtZQUMzQixNQUFjLENBQUMsWUFBWSxFQUFFLFlBQVk7WUFDMUMsQ0FBQyxnRUFBZ0UsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBQ0QsUUFBUSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixFQUFFLENBQUMsQ0FBQyw0QkFBNEI7QUFFbkYsT0FBTyw4QkFBOEIsQ0FBQTtBQUNyQyxPQUFPLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sdUNBQXVDLENBQUE7QUFDOUMscUNBQXFDO0FBQ3JDLHFDQUFxQztBQUNyQyw2Q0FBNkM7QUFDN0MsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDBCQUEwQixFQUFpQixjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUszRiw2REFBNkQ7QUFFN0QsTUFBTSxPQUFPLGlCQUFpQjtJQXlENUIsWUFDVSxRQUFrQixFQUNsQixVQUFzQjtRQUR0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGVBQVUsR0FBVixV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QUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCBSZWNvcmRlck1hbmFnZXIgZnJvbSBcIi4vbGliL3h1bmZlaS1yZWNvcmRlclwiXHJcbi8vIGltcG9ydCB7UmVjb3JkZXJNYW5hZ2VyfSBmcm9tIFwiLi9saWIvcmVjb3JkZXIvcmVjb3JkZXItbWFuYWdlclwiXHJcbmltcG9ydCBSZWNvcmRlciBmcm9tICdyZWNvcmRlci1jb3JlJ1xyXG5cclxuLy8g5qOA5rWL5rWP6KeI5Zmo5pSv5oyB5oOF5Ya1XHJcbmZ1bmN0aW9uIGNoZWNrV29ya2xldFN1cHBvcnQoKSB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb1dvcmtsZXROb2RlICYmXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb0NvbnRleHQgJiYgXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb0NvbnRleHQ/LmF1ZGlvV29ya2xldCAmJlxyXG4gICAgICAhL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpXHJcbiAgICApO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuUmVjb3JkZXIuQ29ubmVjdEVuYWJsZVdvcmtsZXQgPSBjaGVja1dvcmtsZXRTdXBwb3J0KCk7IC8vIOaYjuehruemgeeUqEF1ZGlvV29ya2xldCDlhbzlrrnkuI3mlK/mjIHnmoTlnLrmma9cclxuXHJcbmltcG9ydCAncmVjb3JkZXItY29yZS9zcmMvZW5naW5lL3BjbSdcclxuaW1wb3J0ICdyZWNvcmRlci1jb3JlL3NyYy9lbmdpbmUvd2F2J1xyXG5pbXBvcnQgJ3JlY29yZGVyLWNvcmUvc3JjL2V4dGVuc2lvbnMvd2F2ZXZpZXcnXHJcbi8vIGltcG9ydCAnLi9saWIvcmVjb3JkZXIvZW5naW5lLXBjbSdcclxuLy8gaW1wb3J0ICcuL2xpYi9yZWNvcmRlci9lbmdpbmUtd2F2J1xyXG4vLyBpbXBvcnQgJy4vbGliL3JlY29yZGVyL2V4dGVuc2lvbi13YXZldmlldydcclxuaW1wb3J0IENyeXB0b0pTIGZyb20gXCJjcnlwdG8tanNcIlxyXG5pbXBvcnQgeyBwY210b1dhdiB9IGZyb20gJy4vbGliL3BjbTJ3YXYnO1xyXG5pbXBvcnQgeyBjb252ZXJ0RnJhbWVCdWZmZXJUb0Jhc2U2NCwgcmVzYW1wbGVBdWRpbywgcmVzYW1wbGVCdWZmZXIgfSBmcm9tICcuL2xpYi9yZXNhbXBsZSc7XHJcbi8vIGltcG9ydCB7IFdlYlNwZWVjaCB9IGZyb20gJy4vY2xhc3MtYXNyJztcclxuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbi8vIGltcG9ydCB7IERpYWdub3N0aWMgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZGlhZ25vc3RpYy9uZ3gnO1xyXG5pbXBvcnQgeyBEaWFnbm9zdGljIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2RpYWdub3N0aWMvbmd4JztcclxuLy8gaW1wb3J0IHsgRm1vZGVUVFNYdW5mZWkgfSBmcm8uL2NsYXNzLXR0cy14dW5mZWkudHMuYmFrZmVpJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEZtb2RlVm9pY2VTZXJ2aWNlIHtcclxuICBkaXNhYmxlQVNSOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gd2ViU3BlZWNoID0gV2ViU3BlZWNoO1xyXG5cclxuICAvLyDnirbmgIHnrqHnkIZcclxuICBwcml2YXRlIGlzUmVjb3JkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpc1VzZXJGaW5pc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHNob3VsZFJlY29ubmVjdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSByZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIG1heFJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXIgPSAzO1xyXG4gIHByaXZhdGUgcmVjb25uZWN0RGVsYXk6IG51bWJlciA9IDEwMDA7XHJcblxyXG4gIC8vIOW9leWItuebuOWFsyAtIOeLrOeri+S6jldlYlNvY2tldFxyXG4gIHJlY29yZFdhdkJsb2I6IEJsb2IgPSBudWxsO1xyXG4gIHJlY29yZFBjbUJsb2I6IEJsb2IgPSBudWxsO1xyXG4gIHJlY29yZER1cmF0aW9uOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgYWxsUmVjb3JkZWRCdWZmZXJzOiBBcnJheTxhbnk+ID0gW107IC8vIOWtmOWCqOaJgOacieW9leWItueahGJ1ZmZlclxyXG4gIHByaXZhdGUgY3VycmVudFJlY29yZGVyOiBhbnkgPSBudWxsOyAvLyDlvZPliY3nmoTlvZXliLblmajlrp7kvotcclxuICBcclxuICAvLyBXZWJTb2NrZXTnm7jlhbNcclxuICBpYXRXUzogV2ViU29ja2V0O1xyXG4gIGJ0blN0YXR1cyA9IFwiVU5ERUZJTkVEXCI7XHJcbiAgY29ublN0YXR1cyA9IFwiXCI7XHJcbiAgXHJcbiAgLy8g57uT5p6c55u45YWzXHJcbiAgcmVzdWx0VGV4dCA9IFwiXCI7XHJcbiAgcmVzdWx0VGV4dFRlbXAgPSBcIlwiO1xyXG4gIFxyXG4gIC8vIOiuoeaXtuebuOWFs1xyXG4gIGNvdW50ZG93bkludGVydmFsOiBhbnk7XHJcbiAgZHVyYXRpb25JbnRlcnZhbDogYW55O1xyXG4gIGR1cmF0aW9uU3RyOiBzdHJpbmcgPSBcIjAwOjAwXCI7XHJcbiAgZHVyYXRpb246IG51bWJlciA9IDA7XHJcbiAgbm93OiBEYXRlO1xyXG4gIFxyXG4gIC8vIOazouW9ouebuOWFs1xyXG4gIHdhdmVDbGllbnQ6IGFueTtcclxuICByZWNvcmRUeXBlID0gXCJwY21cIjtcclxuICBlbmNvZGluZ1R5cGUgPSBcInJhd1wiO1xyXG5cclxuICAvLyDlm57osIPlh73mlbBcclxuICBvblJlc3VsdFRleHRDaGFuZ2VkOiBGdW5jdGlvbjtcclxuICBvbkJlZm9yZUZpbmlzaFRhbGs6IEZ1bmN0aW9uO1xyXG4gIG9uQWZ0ZXJGaW5pc2hUYWxrOiBGdW5jdGlvbjtcclxuICBvbklucHV0Q2hhbmdlOiBGdW5jdGlvbjtcclxuICBvbkJlZm9yZVN0YXJ0VGFsazogRnVuY3Rpb247XHJcbiAgb25BZnRlclN0YXJ0VGFsazogRnVuY3Rpb247XHJcbiAgb25CZWZvcmVDYW5jZWxUYWxrOiBGdW5jdGlvbjtcclxuICBvbkFmdGVyQ2FuY2VsVGFsazogRnVuY3Rpb247XHJcbiAgb25BZnRlclJlY29yZFN0YXJ0OiBGdW5jdGlvbjtcclxuICBvbkR1cmF0aW9uU3RyQ2hhbmdlOiBGdW5jdGlvbjtcclxuXHJcbiAgLy8gQVBJ6YWN572uXHJcbiAgQVBQSUQgPSBcIjUwZjRhNDZjXCI7XHJcbiAgQVBJX1NFQ1JFVCA9IFwiTnpGbE5tRmhaREpqTUROa1pHTTNOekkwTXpnMk9HTm1cIjtcclxuICBBUElfS0VZID0gXCIxMDZkZGM0MGRmZDRiOWNhNmQ3YjQ3YzcwZmFkYTc0OVwiO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxyXG4gICAgcHJpdmF0ZSBkaWFnbm9zdGljOiBEaWFnbm9zdGljLFxyXG4gICkge1xyXG4gICAgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8g55So5oi35pON5L2c5pa55rOVXHJcbiAgdG9nZ2xlUmVjb3JkKCkge1xyXG4gICAgY29uc29sZS5sb2coJ3RvZ2dsZVJlY29yZCcsIHRoaXMuYnRuU3RhdHVzKTtcclxuICAgIGlmICh0aGlzLmJ0blN0YXR1cyA9PT0gXCJVTkRFRklORURcIiB8fCB0aGlzLmJ0blN0YXR1cyA9PT0gXCJDTE9TRURcIikge1xyXG4gICAgICB0aGlzLnN0YXJ0VGFsaygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJ0blN0YXR1cyA9PT0gXCJDT05ORUNUSU5HXCIgfHwgdGhpcy5idG5TdGF0dXMgPT09IFwiT1BFTlwiKSB7XHJcbiAgICAgIHRoaXMuZmluaXNoVGFsaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RhcnRUYWxrKGV2ZW50Pykge1xyXG4gICAgY29uc29sZS5sb2coJ3N0YXJ0VGFsayBjYWxsZWQnKTtcclxuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xyXG4gICAgdGhpcy5vbkJlZm9yZVN0YXJ0VGFsayAmJiB0aGlzLm9uQmVmb3JlU3RhcnRUYWxrKCk7XHJcbiAgICBcclxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLm9wZW5XaXRoUHJpdmlsZWRnZSgpO1xyXG4gICAgICBcclxuICAgICAgLy8gMS4g6aaW5YWI5ZCv5Yqo54us56uL5b2V5Yi2XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRJbmRlcGVuZGVudFJlY29yZGluZygpO1xyXG4gICAgICBcclxuICAgICAgLy8gMi4g54S25ZCO5ZCv5YqoV2ViU29ja2V06L+e5o6lXHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3VsZFJlY29ubmVjdCA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xyXG4gICAgICBcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0V2ViU29ja2V0KCk7XHJcbiAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICB0aGlzLnN0YXJ0Q291bnRkb3duKCk7XHJcbiAgICAgIHRoaXMub25BZnRlclN0YXJ0VGFsayAmJiB0aGlzLm9uQWZ0ZXJTdGFydFRhbGsoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCB0YWxrOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5yZXNldFN0YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBmaW5pc2hUYWxrKCkge1xyXG4gICAgY29uc29sZS5sb2coJ2ZpbmlzaFRhbGsgY2FsbGVkJyk7XHJcbiAgICB0aGlzLmlzVXNlckZpbmlzaCA9IHRydWU7XHJcbiAgICB0aGlzLnNob3VsZFJlY29ubmVjdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkJlZm9yZUZpbmlzaFRhbGsgJiYgdGhpcy5vbkJlZm9yZUZpbmlzaFRhbGsoKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gMS4g5YWI5YWz6ZetV2ViU29ja2V0XHJcbiAgICAgIHRoaXMuY2xvc2VXZWJTb2NrZXQoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDIuIOWBnOatoueLrOeri+W9leWItuW5tuiOt+WPluWujOaVtOmfs+mikVxyXG4gICAgICBhd2FpdCB0aGlzLnN0b3BJbmRlcGVuZGVudFJlY29yZGluZygpO1xyXG4gICAgICBcclxuICAgICAgLy8gMy4g5riF55CG54q25oCBXHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gICAgICB0aGlzLmNoYW5nZUJ0blN0YXR1cyhcIkNMT1NFRFwiKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDQuIOW7tui/n+Wbnuiwg+ehruS/neaJgOacieWkhOeQhuWujOaIkFxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc1VzZXJGaW5pc2gpIHtcclxuICAgICAgICAgIHRoaXMub25BZnRlckZpbmlzaFRhbGsgJiYgdGhpcy5vbkFmdGVyRmluaXNoVGFsaygpO1xyXG4gICAgICAgICAgdGhpcy5pc1VzZXJGaW5pc2ggPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICAgIFxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmluaXNoaW5nIHRhbGs6JywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsVGFsaygpIHtcclxuICAgIGNvbnNvbGUubG9nKCdjYW5jZWxUYWxrIGNhbGxlZCcpO1xyXG4gICAgdGhpcy5vbkJlZm9yZUNhbmNlbFRhbGsgJiYgdGhpcy5vbkJlZm9yZUNhbmNlbFRhbGsoKTtcclxuICAgIFxyXG4gICAgdGhpcy5pc1VzZXJGaW5pc2ggPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvdWxkUmVjb25uZWN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICBcclxuICAgIC8vIOWFs+mXrVdlYlNvY2tldFxyXG4gICAgdGhpcy5jbG9zZVdlYlNvY2tldCgpO1xyXG4gICAgXHJcbiAgICAvLyDlgZzmraLni6znq4vlvZXliLbkvYbkuI3kv53lrZjnu5PmnpxcclxuICAgIHRoaXMuY2FuY2VsSW5kZXBlbmRlbnRSZWNvcmRpbmcoKTtcclxuICAgIFxyXG4gICAgdGhpcy5yZXNldFN0YXRlKCk7XHJcbiAgICB0aGlzLm9uQWZ0ZXJDYW5jZWxUYWxrICYmIHRoaXMub25BZnRlckNhbmNlbFRhbGsoKTtcclxuICB9XHJcblxyXG4gIC8vIOeLrOeri+W9leWItuaWueazlSAtIOS4jldlYlNvY2tldOWujOWFqOino+iAplxyXG4gIGFzeW5jIHN0YXJ0SW5kZXBlbmRlbnRSZWNvcmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zb2xlLmxvZygnU3RhcnRpbmcgaW5kZXBlbmRlbnQgcmVjb3JkaW5nJyk7XHJcbiAgICBcclxuICAgIHRoaXMuYWxsUmVjb3JkZWRCdWZmZXJzID0gW107XHJcbiAgICB0aGlzLmNyZWF0ZUluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50UmVjb3JkZXIub3BlbigoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0luZGVwZW5kZW50IHJlY29yZGVyIG9wZW5lZCcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWIm+W7uuWPr+inhuWMllxyXG4gICAgICAgIGxldCB3YXZlRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5yZWNvcmQtd2F2ZVwiKTtcclxuICAgICAgICBpZiAod2F2ZURpdiAmJiBSZWNvcmRlci5XYXZlVmlldykge1xyXG4gICAgICAgICAgdGhpcy53YXZlQ2xpZW50ID0gUmVjb3JkZXIuV2F2ZVZpZXcoeyBlbGVtOiBcIi5yZWNvcmQtd2F2ZVwiIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5zdGFydCgpO1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlY29yZFN0YXJ0ICYmIHRoaXMub25BZnRlclJlY29yZFN0YXJ0KCk7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9LCAobXNnLCBpc1VzZXJOb3RBbGxvdykgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBvcGVuIGluZGVwZW5kZW50IHJlY29yZGVyOicsIG1zZyk7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN0b3BJbmRlcGVuZGVudFJlY29yZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnNvbGUubG9nKCdTdG9wcGluZyBpbmRlcGVuZGVudCByZWNvcmRpbmcnKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRSZWNvcmRlcikge1xyXG4gICAgICBjb25zb2xlLmxvZygnTm8gaW5kZXBlbmRlbnQgcmVjb3JkZXIgdG8gc3RvcCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudFJlY29yZGVyLnN0b3AoXHJcbiAgICAgICAgYXN5bmMgKGJsb2I6IEJsb2IsIGR1cmF0aW9uOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdJbmRlcGVuZGVudCByZWNvcmRpbmcgc3RvcHBlZCBzdWNjZXNzZnVsbHknLCBibG9iLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIOS/neWtmOWujOaVtOeahOW9leWItue7k+aenFxyXG4gICAgICAgICAgdGhpcy5yZWNvcmRQY21CbG9iID0gYmxvYjtcclxuICAgICAgICAgIHRoaXMucmVjb3JkV2F2QmxvYiA9IGF3YWl0IHRoaXMucGNtQmxvYlRvV2F2QmxvYihibG9iLCA0NDEwMCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIOa4heeQhuW9leWItuWZqFxyXG4gICAgICAgICAgdGhpcy5jbGVhbnVwSW5kZXBlbmRlbnRSZWNvcmRlcigpO1xyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKG1zZykgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIueLrOeri+W9lemfs+WBnOatouWksei0pTpcIiArIG1zZyk7XHJcbiAgICAgICAgICB0aGlzLmNsZWFudXBJbmRlcGVuZGVudFJlY29yZGVyKCk7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxJbmRlcGVuZGVudFJlY29yZGluZygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdDYW5jZWxsaW5nIGluZGVwZW5kZW50IHJlY29yZGluZycpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5jdXJyZW50UmVjb3JkZXIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyDnm7TmjqXlhbPpl63vvIzkuI3kv53lrZjnu5PmnpxcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5jbG9zZSgpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNsb3NpbmcgaW5kZXBlbmRlbnQgcmVjb3JkZXI6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIHRoaXMucmVjb3JkUGNtQmxvYiA9IG51bGw7XHJcbiAgICB0aGlzLnJlY29yZFdhdkJsb2IgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVJbmRlcGVuZGVudFJlY29yZGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFJlY29yZGVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRSZWNvcmRlciA9IFJlY29yZGVyKHtcclxuICAgICAgdHlwZTogdGhpcy5yZWNvcmRUeXBlLFxyXG4gICAgICBzYW1wbGVSYXRlOiA0NDEwMCxcclxuICAgICAgYml0UmF0ZTogMTYsXHJcbiAgICAgIG9uUHJvY2VzczogKGJ1ZmZlcnMsIHBvd2VyTGV2ZWwsIGJ1ZmZlckR1cmF0aW9uLCBidWZmZXJTYW1wbGVSYXRlLCBuZXdCdWZmZXJJZHgsIGFzeW5jRW5kKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVjb3JkaW5nKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIOS/neWtmOaJgOaciWJ1ZmZlcueUqOS6juacgOe7iOWQiOaIkOWujOaVtOmfs+mikVxyXG4gICAgICAgIHRoaXMuYWxsUmVjb3JkZWRCdWZmZXJzID0gYnVmZmVycztcclxuXHJcbiAgICAgICAgLy8g6I635Y+W5pyA5paw55qE6Z+z6aKR54mH5q6155So5LqO5a6e5pe2QVNSXHJcbiAgICAgICAgbGV0IGZyYW1lQnVmZmVyID0gYnVmZmVycy5sZW5ndGggJiYgYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmICghZnJhbWVCdWZmZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8g6YeN6YeH5qC35YiwMTZrSHrnlKjkuo5BU1JcclxuICAgICAgICBmcmFtZUJ1ZmZlciA9IHJlc2FtcGxlQnVmZmVyKGZyYW1lQnVmZmVyLCA0NDEwMCwgMTYwMDApO1xyXG5cclxuICAgICAgICAvLyDlj5HpgIHliLBXZWJTb2NrZXTov5vooYzlrp7ml7ZBU1JcclxuICAgICAgICB0aGlzLnNlbmRBdWRpb1RvV2ViU29ja2V0KGZyYW1lQnVmZmVyKTtcclxuXHJcbiAgICAgICAgLy8g5pu05paw5rOi5b2i5pi+56S6XHJcbiAgICAgICAgdGhpcy53YXZlQ2xpZW50Py5pbnB1dChidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV0sIHBvd2VyTGV2ZWwsIGJ1ZmZlclNhbXBsZVJhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UmVjb3JkZXIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5jbG9zZSgpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNsZWFuaW5nIHVwIGluZGVwZW5kZW50IHJlY29yZGVyOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRBdWRpb1RvV2ViU29ja2V0KGZyYW1lQnVmZmVyOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlhdFdTICYmIHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4gJiYgIXRoaXMuZGlzYWJsZUFTUikge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHN0YXR1czogMSxcclxuICAgICAgICAgICAgZm9ybWF0OiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgIGVuY29kaW5nOiB0aGlzLmVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgYXVkaW86IGNvbnZlcnRGcmFtZUJ1ZmZlclRvQmFzZTY0KGZyYW1lQnVmZmVyKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNlbmRpbmcgYXVkaW8gZGF0YSB0byBXZWJTb2NrZXQ6XCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2ViU29ja2V055u45YWz5pa55rOVIC0g5LuF55So5LqOQVNS77yM5LiN5o6n5Yi25b2V5Yi2XHJcbiAgY29ubmVjdFdlYlNvY2tldCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiY29ubmVjdFdlYlNvY2tldCBjYWxsZWQsIHNob3VsZFJlY29ubmVjdDpcIiwgdGhpcy5zaG91bGRSZWNvbm5lY3QpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb25uZWN0IHx8ICF0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiTm90IGNvbm5lY3RpbmcgV2ViU29ja2V0IC0gc2hvdWxkUmVjb25uZWN0OlwiLCB0aGlzLnNob3VsZFJlY29ubmVjdCwgXCJpc1JlY29yZGluZzpcIiwgdGhpcy5pc1JlY29yZGluZyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlhbPpl63njrDmnInov57mjqVcclxuICAgIHRoaXMuY2xvc2VXZWJTb2NrZXQoKTtcclxuXHJcbiAgICBjb25zdCB3ZWJzb2NrZXRVcmwgPSB0aGlzLmdldFdlYlNvY2tldFVybCgpO1xyXG4gICAgY29uc29sZS5sb2coXCJDb25uZWN0aW5nIHRvOlwiLCB3ZWJzb2NrZXRVcmwpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcIldlYlNvY2tldFwiIGluIHdpbmRvdykge1xyXG4gICAgICAgIHRoaXMuaWF0V1MgPSBuZXcgV2ViU29ja2V0KHdlYnNvY2tldFVybCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIua1j+iniOWZqOS4jeaUr+aMgVdlYlNvY2tldFwiKTtcclxuICAgICAgICBhbGVydChcIua1j+iniOWZqOS4jeaUr+aMgVdlYlNvY2tldFwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlQnRuU3RhdHVzKFwiQ09OTkVDVElOR1wiKTtcclxuXHJcbiAgICAgIHRoaXMuaWF0V1Mub25vcGVuID0gKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIldlYlNvY2tldCBjb25uZWN0ZWQgZm9yIEFTUlwiKTtcclxuICAgICAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzID0gMDtcclxuICAgICAgICB0aGlzLmNoYW5nZUJ0blN0YXR1cyhcIk9QRU5cIik7XHJcblxyXG4gICAgICAgIC8vIOWPkemAgeWIneWni+WPguaVsFxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgIGNvbW1vbjoge1xyXG4gICAgICAgICAgICBhcHBfaWQ6IHRoaXMuQVBQSUQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYnVzaW5lc3M6IHtcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6IFwiemhfY25cIixcclxuICAgICAgICAgICAgZG9tYWluOiBcImlhdFwiLFxyXG4gICAgICAgICAgICBhY2NlbnQ6IFwibWFuZGFyaW5cIixcclxuICAgICAgICAgICAgdmFkX2VvczogMTAwMDAsIC8vIOWinuWKoOWIsDEw56eSXHJcbiAgICAgICAgICAgIGR3YTogXCJ3cGdzXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBzdGF0dXM6IDAsXHJcbiAgICAgICAgICAgIGZvcm1hdDogXCJhdWRpby9MMTY7cmF0ZT0xNjAwMFwiLFxyXG4gICAgICAgICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5pYXRXUy5zZW5kKEpTT04uc3RyaW5naWZ5KHBhcmFtcykpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5pYXRXUy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVuZGVyUmVzdWx0KGUuZGF0YSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmlhdFdTLm9uZXJyb3IgPSAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXZWJTb2NrZXQgZXJyb3I6XCIsIGUpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlV2ViU29ja2V0RXJyb3IoKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaWF0V1Mub25jbG9zZSA9IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJXZWJTb2NrZXQgY2xvc2VkOlwiLCBlLmNvZGUsIGUucmVhc29uKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldENsb3NlKGUpO1xyXG4gICAgICB9O1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIFdlYlNvY2tldDpcIiwgZXJyb3IpO1xyXG4gICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldEVycm9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdlYlNvY2tldENsb3NlKGV2ZW50OiBDbG9zZUV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImhhbmRsZVdlYlNvY2tldENsb3NlXCIsIHtcclxuICAgICAgY29kZTogZXZlbnQuY29kZSxcclxuICAgICAgcmVhc29uOiBldmVudC5yZWFzb24sXHJcbiAgICAgIHNob3VsZFJlY29ubmVjdDogdGhpcy5zaG91bGRSZWNvbm5lY3QsXHJcbiAgICAgIGlzUmVjb3JkaW5nOiB0aGlzLmlzUmVjb3JkaW5nLFxyXG4gICAgICBpc1VzZXJGaW5pc2g6IHRoaXMuaXNVc2VyRmluaXNoXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDlpoLmnpznlKjmiLflt7Lnu4/nu5PmnZ/miJbkuI3lupTor6Xph43ov57vvIzliJnkuI3lpITnkIZcclxuICAgIGlmICh0aGlzLmlzVXNlckZpbmlzaCB8fCAhdGhpcy5zaG91bGRSZWNvbm5lY3QgfHwgIXRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWPkemAgee7k+adn+W4p++8iOWmguaenOmcgOimge+8iVxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuaWF0V1MgJiYgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgICBcInN0YXR1c1wiOiAyLFxyXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgIFwiZW5jb2RpbmdcIjogdGhpcy5lbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICAgIFwiYXVkaW9cIjogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgZW5kIGZyYW1lIG9uIGNsb3NlOicsIGVycik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5q2j5bi45YWz6Zet56CB5oiW5pyN5Yqh56uv5Li75Yqo5YWz6Zet77yM5bCd6K+V6YeN6L+eXHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gMTAwMCB8fCBldmVudC5jb2RlID09PSAxMDA2IHx8IGV2ZW50LmNvZGUgPT09IDEwMTEpIHtcclxuICAgICAgdGhpcy5hdHRlbXB0UmVjb25uZWN0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiV2ViU29ja2V0IGNsb3NlZCB3aXRoIGVycm9yIGNvZGU6XCIsIGV2ZW50LmNvZGUpO1xyXG4gICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldEVycm9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdlYlNvY2tldEVycm9yKCkge1xyXG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29ubmVjdCB8fCAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0dGVtcHRSZWNvbm5lY3QoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXR0ZW1wdFJlY29ubmVjdCgpIHtcclxuICAgIGlmICh0aGlzLnJlY29ubmVjdEF0dGVtcHRzID49IHRoaXMubWF4UmVjb25uZWN0QXR0ZW1wdHMpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIk1heCByZWNvbm5lY3QgYXR0ZW1wdHMgcmVhY2hlZFwiKTtcclxuICAgICAgLy8g5LiN5pS55Y+Y5b2V5Yi254q25oCB77yM5Y+q5pivQVNS5pqC5pe25LiN5Y+v55SoXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzKys7XHJcbiAgICBjb25zb2xlLmxvZyhgQXR0ZW1wdGluZyBXZWJTb2NrZXQgcmVjb25uZWN0ICR7dGhpcy5yZWNvbm5lY3RBdHRlbXB0c30vJHt0aGlzLm1heFJlY29ubmVjdEF0dGVtcHRzfWApO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zaG91bGRSZWNvbm5lY3QgJiYgdGhpcy5pc1JlY29yZGluZyAmJiAhdGhpcy5pc1VzZXJGaW5pc2gpIHtcclxuICAgICAgICB0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgdGhpcy5yZWNvbm5lY3REZWxheSAqIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZVdlYlNvY2tldCgpIHtcclxuICAgIGlmICh0aGlzLmlhdFdTKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8g5Y+R6YCB57uT5p2f5binXHJcbiAgICAgICAgaWYgKHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICAgICAgXCJzdGF0dXNcIjogMixcclxuICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgICAgXCJlbmNvZGluZ1wiOiB0aGlzLmVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgICBcImF1ZGlvXCI6IFwiXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTiB8fCB0aGlzLmlhdFdTLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XHJcbiAgICAgICAgICB0aGlzLmlhdFdTLmNsb3NlKDEwMDAsIFwiVXNlciBpbml0aWF0ZWQgY2xvc2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBjbG9zaW5nIFdlYlNvY2tldDpcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaWF0V1MgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g54q25oCB566h55CGXHJcbiAgcHJpdmF0ZSByZXNldFN0YXRlKCkge1xyXG4gICAgdGhpcy5yZXN1bHRUZXh0ID0gXCJcIjtcclxuICAgIHRoaXMucmVzdWx0VGV4dFRlbXAgPSBcIlwiO1xyXG4gICAgdGhpcy5kdXJhdGlvblN0ciA9IFwiMDA6MDBcIjtcclxuICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG4gICAgdGhpcy5yZWNvcmREdXJhdGlvbiA9IDA7XHJcbiAgICB0aGlzLmFsbFJlY29yZGVkQnVmZmVycyA9IFtdO1xyXG4gICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclRpbWVycygpIHtcclxuICAgIGlmICh0aGlzLmNvdW50ZG93bkludGVydmFsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jb3VudGRvd25JbnRlcnZhbCk7XHJcbiAgICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHVyYXRpb25JbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZHVyYXRpb25JbnRlcnZhbCk7XHJcbiAgICAgIHRoaXMuZHVyYXRpb25JbnRlcnZhbCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VCdG5TdGF0dXMoc3RhdHVzOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYnRuU3RhdHVzID0gc3RhdHVzO1xyXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgY2FzZSBcIkNPTk5FQ1RJTkdcIjpcclxuICAgICAgICB0aGlzLmNvbm5TdGF0dXMgPSBcIuW7uueri+i/nuaOpeS4rVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiT1BFTlwiOlxyXG4gICAgICAgIHRoaXMuY29ublN0YXR1cyA9IGDlvZXpn7PkuK3vvIgke3RoaXMuZHVyYXRpb25TdHJ977yJYDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkNMT1NJTkdcIjpcclxuICAgICAgICB0aGlzLmNvbm5TdGF0dXMgPSBcIuWFs+mXrei/nuaOpeS4rVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiQ0xPU0VEXCI6XHJcbiAgICAgICAgdGhpcy5jb25uU3RhdHVzID0gXCLlvIDlp4vlvZXpn7NcIjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOiuoeaXtuWZqFxyXG4gIHN0YXJ0Q291bnRkb3duKCkge1xyXG4gICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gICAgdGhpcy5yZWNvcmREdXJhdGlvbiA9IDA7XHJcbiAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuICAgIHRoaXMubm93ID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAvLyDlvZXpn7Pml7bplb/orqHml7blmajvvIgxMDBtc+eyvuW6pu+8iVxyXG4gICAgdGhpcy5kdXJhdGlvbkludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgIHRoaXMucmVjb3JkRHVyYXRpb24gKz0gMTAwO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICAgIC8vIOaYvuekuuaXtumVv+iuoeaXtuWZqO+8iDHnp5Lnsr7luqbvvIlcclxuICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jb3VudFRpbWVyKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgY291bnRUaW1lcigpIHtcclxuICAgIHRoaXMuZHVyYXRpb24rKztcclxuICAgIGxldCBtaW51dGVTdHIgPSBTdHJpbmcoTWF0aC5mbG9vcih0aGlzLmR1cmF0aW9uIC8gNjApKS5wYWRTdGFydCgyLCBcIjBcIik7XHJcbiAgICBsZXQgc2Vjb25kU3RyID0gU3RyaW5nKHRoaXMuZHVyYXRpb24gJSA2MCkucGFkU3RhcnQoMiwgXCIwXCIpO1xyXG4gICAgbGV0IGR1cmF0aW9uU3RyID0gbWludXRlU3RyICsgXCI6XCIgKyBzZWNvbmRTdHI7XHJcbiAgICB0aGlzLmR1cmF0aW9uU3RyID0gZHVyYXRpb25TdHI7XHJcbiAgICB0aGlzLmNvbm5TdGF0dXMgPSBg5b2V6Z+z5Lit77yIJHt0aGlzLmR1cmF0aW9uU3Ryfe+8iWA7XHJcbiAgICB0aGlzLm9uRHVyYXRpb25TdHJDaGFuZ2UgJiYgdGhpcy5vbkR1cmF0aW9uU3RyQ2hhbmdlKGR1cmF0aW9uU3RyKTtcclxuICB9XHJcblxyXG4gIC8vIOe7k+aenOWkhOeQhlxyXG4gIHJlbmRlclJlc3VsdChyZXN1bHREYXRhOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBqc29uRGF0YSA9IEpTT04ucGFyc2UocmVzdWx0RGF0YSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoanNvbkRhdGEuZGF0YSAmJiBqc29uRGF0YS5kYXRhLnJlc3VsdCkge1xyXG4gICAgICAgIGxldCBkYXRhID0ganNvbkRhdGEuZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XHJcbiAgICAgICAgbGV0IHdzID0gZGF0YS53cztcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBzdHIgPSBzdHIgKyB3c1tpXS5jd1swXS53O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5aSE55CG5Yqo5oCB5L+u5q2jXHJcbiAgICAgICAgaWYgKGRhdGEucGdzKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YS5wZ3MgPT09IFwiYXBkXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRUZXh0ID0gdGhpcy5yZXN1bHRUZXh0VGVtcDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVzdWx0VGV4dFRlbXAgPSB0aGlzLnJlc3VsdFRleHQgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzdWx0VGV4dCA9IHRoaXMucmVzdWx0VGV4dCArIHN0cjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25JbnB1dENoYW5nZSAmJiB0aGlzLm9uSW5wdXRDaGFuZ2UodGhpcy5nZXRVc2VySW5wdXQoKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOWkhOeQhue7k+adn+eKtuaAgVxyXG4gICAgICBpZiAoanNvbkRhdGEuY29kZSA9PT0gMCAmJiBqc29uRGF0YS5kYXRhLnN0YXR1cyA9PT0gMikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQVNSIHNlc3Npb24gY29tcGxldGVkLCB3aWxsIHJlY29ubmVjdCBpZiBzdGlsbCByZWNvcmRpbmdcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuaWF0V1MgJiYgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgICAgdGhpcy5pYXRXUy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5aSE55CG6ZSZ6K+vXHJcbiAgICAgIGlmIChqc29uRGF0YS5jb2RlICE9PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkFTUiBlcnJvcjpcIiwganNvbkRhdGEpO1xyXG4gICAgICAgIGlmICh0aGlzLmlhdFdTICYmIHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgICAgIHRoaXMuaWF0V1MuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIHJlc3VsdDpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VXNlcklucHV0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJcIiArICh0aGlzLnJlc3VsdFRleHRUZW1wIHx8IHRoaXMucmVzdWx0VGV4dCk7XHJcbiAgfVxyXG5cclxuICAvLyDmnYPpmZDlkozliJ3lp4vljJZcclxuICBhc3luYyBvcGVuV2l0aFByaXZpbGVkZ2UoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3RQZXJtaXNzaW9uKCk7XHJcbiAgICBcclxuICAgIGlmIChSZWNvcmRlci5Jc09wZW4oKSkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgLy8g6L+Z6YeM5LiN5Yib5bu65b2V5Yi25Zmo77yM5Zug5Li65oiR5Lus5L2/55So54us56uL55qE5b2V5Yi25ZmoXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIOmfs+mikeWkhOeQhuaWueazlVxyXG4gIGFzeW5jIHBjbUJsb2JUb1dhdkJsb2IocGNtQmxvYjogQmxvYiwgc2FtcGxlUmF0ZTogbnVtYmVyKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIGxldCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgXHJcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICBsZXQgcGNtRGF0YTogYW55ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBsZXQgd2F2QmxvYiA9IHBjbXRvV2F2KHBjbURhdGEsIHNhbXBsZVJhdGUsIDEsIDE2KTtcclxuICAgICAgICByZXNvbHZlKHdhdkJsb2IpO1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihwY21CbG9iKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGxheVBDTShwY21CbG9iOiBCbG9iLCBzYW1wbGVSYXRlOiBudW1iZXIpIHtcclxuICAgIGxldCB3YXZCbG9iID0gYXdhaXQgdGhpcy5wY21CbG9iVG9XYXZCbG9iKHBjbUJsb2IsIHNhbXBsZVJhdGUpO1xyXG4gICAgbGV0IHdhdlVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHdhdkJsb2IpO1xyXG4gICAgbGV0IGF1ZGlvID0gbmV3IEF1ZGlvKCk7XHJcbiAgICBhdWRpby5zcmMgPSB3YXZVcmw7XHJcbiAgICBhdWRpby5wbGF5KCk7XHJcbiAgfVxyXG5cclxuICBwbGF5UmVjb3JkKCkge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkUGNtQmxvYikge1xyXG4gICAgICB0aGlzLnBsYXlQQ00odGhpcy5yZWNvcmRQY21CbG9iLCA0NDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBXZWJTb2NrZXQgVVJM55Sf5oiQXHJcbiAgZ2V0V2ViU29ja2V0VXJsKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdXJsID0gXCJ3c3M6Ly9pYXQtYXBpLnhmeXVuLmNuL3YyL2lhdFwiO1xyXG4gICAgbGV0IGhvc3QgPSBcImlhdC1hcGkueGZ5dW4uY25cIjtcclxuICAgIFxyXG4gICAgbGV0IGFwaUtleSA9IHRoaXMuQVBJX0tFWTtcclxuICAgIGxldCBhcGlTZWNyZXQgPSB0aGlzLkFQSV9TRUNSRVQ7XHJcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKTtcclxuICAgIGxldCBhbGdvcml0aG0gPSBcImhtYWMtc2hhMjU2XCI7XHJcbiAgICBsZXQgaGVhZGVycyA9IFwiaG9zdCBkYXRlIHJlcXVlc3QtbGluZVwiO1xyXG4gICAgbGV0IHNpZ25hdHVyZU9yaWdpbiA9IGBob3N0OiAke2hvc3R9XFxuZGF0ZTogJHtkYXRlfVxcbkdFVCAvdjIvaWF0IEhUVFAvMS4xYDtcclxuICAgIGxldCBzaWduYXR1cmVTaGEgPSBDcnlwdG9KUy5IbWFjU0hBMjU2KHNpZ25hdHVyZU9yaWdpbiwgYXBpU2VjcmV0KTtcclxuICAgIGxldCBzaWduYXR1cmUgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShzaWduYXR1cmVTaGEpO1xyXG4gICAgbGV0IGF1dGhvcml6YXRpb25PcmlnaW4gPSBgYXBpX2tleT1cIiR7YXBpS2V5fVwiLCBhbGdvcml0aG09XCIke2FsZ29yaXRobX1cIiwgaGVhZGVycz1cIiR7aGVhZGVyc31cIiwgc2lnbmF0dXJlPVwiJHtzaWduYXR1cmV9XCJgO1xyXG4gICAgbGV0IGF1dGhvcml6YXRpb24gPSBidG9hKGF1dGhvcml6YXRpb25PcmlnaW4pO1xyXG4gICAgdXJsID0gYCR7dXJsfT9hdXRob3JpemF0aW9uPSR7YXV0aG9yaXphdGlvbn0mZGF0ZT0ke2RhdGV9Jmhvc3Q9JHtob3N0fWA7XHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuXHJcbiAgdG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgICB2YXIgYmluYXJ5ID0gXCJcIjtcclxuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICB2YXIgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICAvLyDnp7vliqjnq6/mnYPpmZDmlrnms5VcclxuICBpc0NhcGFjaXRvcigpOiBib29sZWFuIHtcclxuICAgIGlmKCF0aGlzLnBsYXRmb3JtPy5pcykgcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybS5pcyhcImNhcGFjaXRvclwiKSB8fCB0aGlzLnBsYXRmb3JtLmlzKFwiY29yZG92YVwiKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RQZXJtaXNzaW9uKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzQ2FwYWNpdG9yKCkpIHJldHVybjtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0U3RvYWdlUGVybWlzc2lvbigpO1xyXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RDYW1lcmFQZXJtaXNzaW9uKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdE1pY1Blcm1pc3Npb24oKTtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0UmVjb3JkQXVkaW9QZXJtaXNzaW9uKCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVxdWVzdFJlY29yZEF1ZGlvUGVybWlzc2lvbigpIHtsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5yZXF1ZXN0UnVudGltZVBlcm1pc3Npb25zKFt0aGlzLmRpYWdub3N0aWMucGVybWlzc2lvbi5SRUNPUkRfQVVESU9dKTtcclxuICAgIGNvbnNvbGUubG9nKFwicmVjb3JkIHBlcm1pc3Npb24gcmVxdWVzdDpcIiwgZGF0YSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0TWljUGVybWlzc2lvbigpIHtcclxuICAgIGxldCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5pc01pY3JvcGhvbmVBdXRob3JpemVkKCk7XHJcbiAgICBjb25zb2xlLmxvZyhcInBlcm1pc3Nvbl9NSUM6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdE1pY3JvcGhvbmVBdXRob3JpemF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0U3RvYWdlUGVybWlzc2lvbigpIHtcclxuICAgIGxldCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5pc0V4dGVybmFsU3RvcmFnZUF1dGhvcml6ZWQoKTtcclxuICAgIGNvbnNvbGUubG9nKFwicGVybWlzc29uX1NUT1JBR0U6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdEV4dGVybmFsU3RvcmFnZUF1dGhvcml6YXRpb24oKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RDYW1lcmFQZXJtaXNzaW9uKCkge1xyXG4gICAgbGV0IGlzQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLmlzQ2FtZXJhQXV0aG9yaXplZCgpO1xyXG4gICAgY29uc29sZS5sb2coXCJwZXJtaXNzb25fQ2FtZXJhOlwiLCBpc0F2YWlsYWJsZSk7XHJcbiAgICBpZiAoIWlzQXZhaWxhYmxlKSB7XHJcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLnJlcXVlc3RDYW1lcmFBdXRob3JpemF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyDlhbbku5bovoXliqnmlrnms5VcclxuICBzcGxpdEF1ZGlvRGF0YShhdWRpb0RhdGE6IGFueSkge1xyXG4gICAgY29uc3Qgc2VnbWVudFNpemUgPSAxMjgwO1xyXG4gICAgY29uc3Qgc2VnbWVudENvdW50ID0gTWF0aC5jZWlsKGF1ZGlvRGF0YS5sZW5ndGggLyBzZWdtZW50U2l6ZSk7XHJcbiAgICBjb25zdCBzZWdtZW50cyA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudENvdW50OyBpKyspIHtcclxuICAgICAgY29uc3Qgc3RhcnQgPSBpICogc2VnbWVudFNpemU7XHJcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgc2VnbWVudFNpemU7XHJcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBhdWRpb0RhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xyXG4gIH1cclxuXHJcbiAgQnVmZmVyVG9CbG9iKGJ1ZmZlcjogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2F1ZGlvL3BjbScgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwbGF5QnVmZmVycygpIHtcclxuICAgIGxldCBhdWRpb0Jsb2IgPSBhd2FpdCB0aGlzLkJ1ZmZlcnNUb0Jsb2IodGhpcy5hbGxSZWNvcmRlZEJ1ZmZlcnMpO1xyXG4gICAgdGhpcy5wbGF5UENNKGF1ZGlvQmxvYiwgNDQxMDApO1xyXG4gIH1cclxuXHJcbiAgQnVmZmVyc1RvQmxvYihidWZmZXJzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgYXVkaW9CdWZmZXI6IGFueSA9IFtdO1xyXG4gICAgYnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XHJcbiAgICAgIGJ1ZmZlci5mb3JFYWNoKGludDE2ID0+IHtcclxuICAgICAgICBhdWRpb0J1ZmZlci5wdXNoKGludDE2KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBuZXcgQmxvYihbYXVkaW9CdWZmZXJdLCB7IHR5cGU6ICdhdWRpby9wY20nIH0pO1xyXG4gIH1cclxufSJdfQ==
|
|
636
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtdm9pY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy92b2ljZS9mbW9kZS12b2ljZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxrRUFBa0U7QUFDbEUsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBRXBDLFlBQVk7QUFDWixTQUFTLG1CQUFtQjtJQUMxQixJQUFJLENBQUM7UUFDSCxPQUFPLENBQ0osTUFBYyxDQUFDLGdCQUFnQjtZQUMvQixNQUFjLENBQUMsWUFBWTtZQUMzQixNQUFjLENBQUMsWUFBWSxFQUFFLFlBQVk7WUFDMUMsQ0FBQyxnRUFBZ0UsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBQ0QsUUFBUSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixFQUFFLENBQUMsQ0FBQyw0QkFBNEI7QUFFbkYsT0FBTyxpQ0FBaUMsQ0FBQTtBQUN4QyxPQUFPLGlDQUFpQyxDQUFBO0FBQ3hDLE9BQU8sMENBQTBDLENBQUE7QUFDakQscUNBQXFDO0FBQ3JDLHFDQUFxQztBQUNyQyw2Q0FBNkM7QUFDN0MsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDBCQUEwQixFQUFpQixjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUszRiw2REFBNkQ7QUFFN0QsTUFBTSxPQUFPLGlCQUFpQjtJQXlENUIsWUFDVSxRQUFrQixFQUNsQixVQUFzQjtRQUR0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGVBQVUsR0FBVixV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QUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCBSZWNvcmRlck1hbmFnZXIgZnJvbSBcIi4vbGliL3h1bmZlaS1yZWNvcmRlclwiXHJcbi8vIGltcG9ydCB7UmVjb3JkZXJNYW5hZ2VyfSBmcm9tIFwiLi9saWIvcmVjb3JkZXIvcmVjb3JkZXItbWFuYWdlclwiXHJcbmltcG9ydCBSZWNvcmRlciBmcm9tICdyZWNvcmRlci1jb3JlJ1xyXG5cclxuLy8g5qOA5rWL5rWP6KeI5Zmo5pSv5oyB5oOF5Ya1XHJcbmZ1bmN0aW9uIGNoZWNrV29ya2xldFN1cHBvcnQoKSB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb1dvcmtsZXROb2RlICYmXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb0NvbnRleHQgJiYgXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb0NvbnRleHQ/LmF1ZGlvV29ya2xldCAmJlxyXG4gICAgICAhL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpXHJcbiAgICApO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuUmVjb3JkZXIuQ29ubmVjdEVuYWJsZVdvcmtsZXQgPSBjaGVja1dvcmtsZXRTdXBwb3J0KCk7IC8vIOaYjuehruemgeeUqEF1ZGlvV29ya2xldCDlhbzlrrnkuI3mlK/mjIHnmoTlnLrmma9cclxuXHJcbmltcG9ydCAncmVjb3JkZXItY29yZS9zcmMvZW5naW5lL3BjbS5qcydcclxuaW1wb3J0ICdyZWNvcmRlci1jb3JlL3NyYy9lbmdpbmUvd2F2LmpzJ1xyXG5pbXBvcnQgJ3JlY29yZGVyLWNvcmUvc3JjL2V4dGVuc2lvbnMvd2F2ZXZpZXcuanMnXHJcbi8vIGltcG9ydCAnLi9saWIvcmVjb3JkZXIvZW5naW5lLXBjbSdcclxuLy8gaW1wb3J0ICcuL2xpYi9yZWNvcmRlci9lbmdpbmUtd2F2J1xyXG4vLyBpbXBvcnQgJy4vbGliL3JlY29yZGVyL2V4dGVuc2lvbi13YXZldmlldydcclxuaW1wb3J0IENyeXB0b0pTIGZyb20gXCJjcnlwdG8tanNcIlxyXG5pbXBvcnQgeyBwY210b1dhdiB9IGZyb20gJy4vbGliL3BjbTJ3YXYnO1xyXG5pbXBvcnQgeyBjb252ZXJ0RnJhbWVCdWZmZXJUb0Jhc2U2NCwgcmVzYW1wbGVBdWRpbywgcmVzYW1wbGVCdWZmZXIgfSBmcm9tICcuL2xpYi9yZXNhbXBsZSc7XHJcbi8vIGltcG9ydCB7IFdlYlNwZWVjaCB9IGZyb20gJy4vY2xhc3MtYXNyJztcclxuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbi8vIGltcG9ydCB7IERpYWdub3N0aWMgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZGlhZ25vc3RpYy9uZ3gnO1xyXG5pbXBvcnQgeyBEaWFnbm9zdGljIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2RpYWdub3N0aWMvbmd4JztcclxuLy8gaW1wb3J0IHsgRm1vZGVUVFNYdW5mZWkgfSBmcm8uL2NsYXNzLXR0cy14dW5mZWkudHMuYmFrZmVpJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEZtb2RlVm9pY2VTZXJ2aWNlIHtcclxuICBkaXNhYmxlQVNSOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gd2ViU3BlZWNoID0gV2ViU3BlZWNoO1xyXG5cclxuICAvLyDnirbmgIHnrqHnkIZcclxuICBwcml2YXRlIGlzUmVjb3JkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpc1VzZXJGaW5pc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHNob3VsZFJlY29ubmVjdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSByZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIG1heFJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXIgPSAzO1xyXG4gIHByaXZhdGUgcmVjb25uZWN0RGVsYXk6IG51bWJlciA9IDEwMDA7XHJcblxyXG4gIC8vIOW9leWItuebuOWFsyAtIOeLrOeri+S6jldlYlNvY2tldFxyXG4gIHJlY29yZFdhdkJsb2I6IEJsb2IgPSBudWxsO1xyXG4gIHJlY29yZFBjbUJsb2I6IEJsb2IgPSBudWxsO1xyXG4gIHJlY29yZER1cmF0aW9uOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgYWxsUmVjb3JkZWRCdWZmZXJzOiBBcnJheTxhbnk+ID0gW107IC8vIOWtmOWCqOaJgOacieW9leWItueahGJ1ZmZlclxyXG4gIHByaXZhdGUgY3VycmVudFJlY29yZGVyOiBhbnkgPSBudWxsOyAvLyDlvZPliY3nmoTlvZXliLblmajlrp7kvotcclxuICBcclxuICAvLyBXZWJTb2NrZXTnm7jlhbNcclxuICBpYXRXUzogV2ViU29ja2V0O1xyXG4gIGJ0blN0YXR1cyA9IFwiVU5ERUZJTkVEXCI7XHJcbiAgY29ublN0YXR1cyA9IFwiXCI7XHJcbiAgXHJcbiAgLy8g57uT5p6c55u45YWzXHJcbiAgcmVzdWx0VGV4dCA9IFwiXCI7XHJcbiAgcmVzdWx0VGV4dFRlbXAgPSBcIlwiO1xyXG4gIFxyXG4gIC8vIOiuoeaXtuebuOWFs1xyXG4gIGNvdW50ZG93bkludGVydmFsOiBhbnk7XHJcbiAgZHVyYXRpb25JbnRlcnZhbDogYW55O1xyXG4gIGR1cmF0aW9uU3RyOiBzdHJpbmcgPSBcIjAwOjAwXCI7XHJcbiAgZHVyYXRpb246IG51bWJlciA9IDA7XHJcbiAgbm93OiBEYXRlO1xyXG4gIFxyXG4gIC8vIOazouW9ouebuOWFs1xyXG4gIHdhdmVDbGllbnQ6IGFueTtcclxuICByZWNvcmRUeXBlID0gXCJwY21cIjtcclxuICBlbmNvZGluZ1R5cGUgPSBcInJhd1wiO1xyXG5cclxuICAvLyDlm57osIPlh73mlbBcclxuICBvblJlc3VsdFRleHRDaGFuZ2VkOiBGdW5jdGlvbjtcclxuICBvbkJlZm9yZUZpbmlzaFRhbGs6IEZ1bmN0aW9uO1xyXG4gIG9uQWZ0ZXJGaW5pc2hUYWxrOiBGdW5jdGlvbjtcclxuICBvbklucHV0Q2hhbmdlOiBGdW5jdGlvbjtcclxuICBvbkJlZm9yZVN0YXJ0VGFsazogRnVuY3Rpb247XHJcbiAgb25BZnRlclN0YXJ0VGFsazogRnVuY3Rpb247XHJcbiAgb25CZWZvcmVDYW5jZWxUYWxrOiBGdW5jdGlvbjtcclxuICBvbkFmdGVyQ2FuY2VsVGFsazogRnVuY3Rpb247XHJcbiAgb25BZnRlclJlY29yZFN0YXJ0OiBGdW5jdGlvbjtcclxuICBvbkR1cmF0aW9uU3RyQ2hhbmdlOiBGdW5jdGlvbjtcclxuXHJcbiAgLy8gQVBJ6YWN572uXHJcbiAgQVBQSUQgPSBcIjUwZjRhNDZjXCI7XHJcbiAgQVBJX1NFQ1JFVCA9IFwiTnpGbE5tRmhaREpqTUROa1pHTTNOekkwTXpnMk9HTm1cIjtcclxuICBBUElfS0VZID0gXCIxMDZkZGM0MGRmZDRiOWNhNmQ3YjQ3YzcwZmFkYTc0OVwiO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxyXG4gICAgcHJpdmF0ZSBkaWFnbm9zdGljOiBEaWFnbm9zdGljLFxyXG4gICkge1xyXG4gICAgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8g55So5oi35pON5L2c5pa55rOVXHJcbiAgdG9nZ2xlUmVjb3JkKCkge1xyXG4gICAgY29uc29sZS5sb2coJ3RvZ2dsZVJlY29yZCcsIHRoaXMuYnRuU3RhdHVzKTtcclxuICAgIGlmICh0aGlzLmJ0blN0YXR1cyA9PT0gXCJVTkRFRklORURcIiB8fCB0aGlzLmJ0blN0YXR1cyA9PT0gXCJDTE9TRURcIikge1xyXG4gICAgICB0aGlzLnN0YXJ0VGFsaygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJ0blN0YXR1cyA9PT0gXCJDT05ORUNUSU5HXCIgfHwgdGhpcy5idG5TdGF0dXMgPT09IFwiT1BFTlwiKSB7XHJcbiAgICAgIHRoaXMuZmluaXNoVGFsaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RhcnRUYWxrKGV2ZW50Pykge1xyXG4gICAgY29uc29sZS5sb2coJ3N0YXJ0VGFsayBjYWxsZWQnKTtcclxuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xyXG4gICAgdGhpcy5vbkJlZm9yZVN0YXJ0VGFsayAmJiB0aGlzLm9uQmVmb3JlU3RhcnRUYWxrKCk7XHJcbiAgICBcclxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLm9wZW5XaXRoUHJpdmlsZWRnZSgpO1xyXG4gICAgICBcclxuICAgICAgLy8gMS4g6aaW5YWI5ZCv5Yqo54us56uL5b2V5Yi2XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRJbmRlcGVuZGVudFJlY29yZGluZygpO1xyXG4gICAgICBcclxuICAgICAgLy8gMi4g54S25ZCO5ZCv5YqoV2ViU29ja2V06L+e5o6lXHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3VsZFJlY29ubmVjdCA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xyXG4gICAgICBcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0V2ViU29ja2V0KCk7XHJcbiAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICB0aGlzLnN0YXJ0Q291bnRkb3duKCk7XHJcbiAgICAgIHRoaXMub25BZnRlclN0YXJ0VGFsayAmJiB0aGlzLm9uQWZ0ZXJTdGFydFRhbGsoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCB0YWxrOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5yZXNldFN0YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBmaW5pc2hUYWxrKCkge1xyXG4gICAgY29uc29sZS5sb2coJ2ZpbmlzaFRhbGsgY2FsbGVkJyk7XHJcbiAgICB0aGlzLmlzVXNlckZpbmlzaCA9IHRydWU7XHJcbiAgICB0aGlzLnNob3VsZFJlY29ubmVjdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkJlZm9yZUZpbmlzaFRhbGsgJiYgdGhpcy5vbkJlZm9yZUZpbmlzaFRhbGsoKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gMS4g5YWI5YWz6ZetV2ViU29ja2V0XHJcbiAgICAgIHRoaXMuY2xvc2VXZWJTb2NrZXQoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDIuIOWBnOatoueLrOeri+W9leWItuW5tuiOt+WPluWujOaVtOmfs+mikVxyXG4gICAgICBhd2FpdCB0aGlzLnN0b3BJbmRlcGVuZGVudFJlY29yZGluZygpO1xyXG4gICAgICBcclxuICAgICAgLy8gMy4g5riF55CG54q25oCBXHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gICAgICB0aGlzLmNoYW5nZUJ0blN0YXR1cyhcIkNMT1NFRFwiKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDQuIOW7tui/n+Wbnuiwg+ehruS/neaJgOacieWkhOeQhuWujOaIkFxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc1VzZXJGaW5pc2gpIHtcclxuICAgICAgICAgIHRoaXMub25BZnRlckZpbmlzaFRhbGsgJiYgdGhpcy5vbkFmdGVyRmluaXNoVGFsaygpO1xyXG4gICAgICAgICAgdGhpcy5pc1VzZXJGaW5pc2ggPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICAgIFxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmluaXNoaW5nIHRhbGs6JywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsVGFsaygpIHtcclxuICAgIGNvbnNvbGUubG9nKCdjYW5jZWxUYWxrIGNhbGxlZCcpO1xyXG4gICAgdGhpcy5vbkJlZm9yZUNhbmNlbFRhbGsgJiYgdGhpcy5vbkJlZm9yZUNhbmNlbFRhbGsoKTtcclxuICAgIFxyXG4gICAgdGhpcy5pc1VzZXJGaW5pc2ggPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvdWxkUmVjb25uZWN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICBcclxuICAgIC8vIOWFs+mXrVdlYlNvY2tldFxyXG4gICAgdGhpcy5jbG9zZVdlYlNvY2tldCgpO1xyXG4gICAgXHJcbiAgICAvLyDlgZzmraLni6znq4vlvZXliLbkvYbkuI3kv53lrZjnu5PmnpxcclxuICAgIHRoaXMuY2FuY2VsSW5kZXBlbmRlbnRSZWNvcmRpbmcoKTtcclxuICAgIFxyXG4gICAgdGhpcy5yZXNldFN0YXRlKCk7XHJcbiAgICB0aGlzLm9uQWZ0ZXJDYW5jZWxUYWxrICYmIHRoaXMub25BZnRlckNhbmNlbFRhbGsoKTtcclxuICB9XHJcblxyXG4gIC8vIOeLrOeri+W9leWItuaWueazlSAtIOS4jldlYlNvY2tldOWujOWFqOino+iAplxyXG4gIGFzeW5jIHN0YXJ0SW5kZXBlbmRlbnRSZWNvcmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zb2xlLmxvZygnU3RhcnRpbmcgaW5kZXBlbmRlbnQgcmVjb3JkaW5nJyk7XHJcbiAgICBcclxuICAgIHRoaXMuYWxsUmVjb3JkZWRCdWZmZXJzID0gW107XHJcbiAgICB0aGlzLmNyZWF0ZUluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50UmVjb3JkZXIub3BlbigoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0luZGVwZW5kZW50IHJlY29yZGVyIG9wZW5lZCcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWIm+W7uuWPr+inhuWMllxyXG4gICAgICAgIGxldCB3YXZlRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5yZWNvcmQtd2F2ZVwiKTtcclxuICAgICAgICBpZiAod2F2ZURpdiAmJiBSZWNvcmRlci5XYXZlVmlldykge1xyXG4gICAgICAgICAgdGhpcy53YXZlQ2xpZW50ID0gUmVjb3JkZXIuV2F2ZVZpZXcoeyBlbGVtOiBcIi5yZWNvcmQtd2F2ZVwiIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5zdGFydCgpO1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlY29yZFN0YXJ0ICYmIHRoaXMub25BZnRlclJlY29yZFN0YXJ0KCk7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9LCAobXNnLCBpc1VzZXJOb3RBbGxvdykgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBvcGVuIGluZGVwZW5kZW50IHJlY29yZGVyOicsIG1zZyk7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN0b3BJbmRlcGVuZGVudFJlY29yZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnNvbGUubG9nKCdTdG9wcGluZyBpbmRlcGVuZGVudCByZWNvcmRpbmcnKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRSZWNvcmRlcikge1xyXG4gICAgICBjb25zb2xlLmxvZygnTm8gaW5kZXBlbmRlbnQgcmVjb3JkZXIgdG8gc3RvcCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudFJlY29yZGVyLnN0b3AoXHJcbiAgICAgICAgYXN5bmMgKGJsb2I6IEJsb2IsIGR1cmF0aW9uOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdJbmRlcGVuZGVudCByZWNvcmRpbmcgc3RvcHBlZCBzdWNjZXNzZnVsbHknLCBibG9iLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIOS/neWtmOWujOaVtOeahOW9leWItue7k+aenFxyXG4gICAgICAgICAgdGhpcy5yZWNvcmRQY21CbG9iID0gYmxvYjtcclxuICAgICAgICAgIHRoaXMucmVjb3JkV2F2QmxvYiA9IGF3YWl0IHRoaXMucGNtQmxvYlRvV2F2QmxvYihibG9iLCA0NDEwMCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIOa4heeQhuW9leWItuWZqFxyXG4gICAgICAgICAgdGhpcy5jbGVhbnVwSW5kZXBlbmRlbnRSZWNvcmRlcigpO1xyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKG1zZykgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIueLrOeri+W9lemfs+WBnOatouWksei0pTpcIiArIG1zZyk7XHJcbiAgICAgICAgICB0aGlzLmNsZWFudXBJbmRlcGVuZGVudFJlY29yZGVyKCk7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxJbmRlcGVuZGVudFJlY29yZGluZygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdDYW5jZWxsaW5nIGluZGVwZW5kZW50IHJlY29yZGluZycpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5jdXJyZW50UmVjb3JkZXIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyDnm7TmjqXlhbPpl63vvIzkuI3kv53lrZjnu5PmnpxcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5jbG9zZSgpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNsb3NpbmcgaW5kZXBlbmRlbnQgcmVjb3JkZXI6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIHRoaXMucmVjb3JkUGNtQmxvYiA9IG51bGw7XHJcbiAgICB0aGlzLnJlY29yZFdhdkJsb2IgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVJbmRlcGVuZGVudFJlY29yZGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFJlY29yZGVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRSZWNvcmRlciA9IFJlY29yZGVyKHtcclxuICAgICAgdHlwZTogdGhpcy5yZWNvcmRUeXBlLFxyXG4gICAgICBzYW1wbGVSYXRlOiA0NDEwMCxcclxuICAgICAgYml0UmF0ZTogMTYsXHJcbiAgICAgIG9uUHJvY2VzczogKGJ1ZmZlcnMsIHBvd2VyTGV2ZWwsIGJ1ZmZlckR1cmF0aW9uLCBidWZmZXJTYW1wbGVSYXRlLCBuZXdCdWZmZXJJZHgsIGFzeW5jRW5kKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVjb3JkaW5nKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIOS/neWtmOaJgOaciWJ1ZmZlcueUqOS6juacgOe7iOWQiOaIkOWujOaVtOmfs+mikVxyXG4gICAgICAgIHRoaXMuYWxsUmVjb3JkZWRCdWZmZXJzID0gYnVmZmVycztcclxuXHJcbiAgICAgICAgLy8g6I635Y+W5pyA5paw55qE6Z+z6aKR54mH5q6155So5LqO5a6e5pe2QVNSXHJcbiAgICAgICAgbGV0IGZyYW1lQnVmZmVyID0gYnVmZmVycy5sZW5ndGggJiYgYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmICghZnJhbWVCdWZmZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8g6YeN6YeH5qC35YiwMTZrSHrnlKjkuo5BU1JcclxuICAgICAgICBmcmFtZUJ1ZmZlciA9IHJlc2FtcGxlQnVmZmVyKGZyYW1lQnVmZmVyLCA0NDEwMCwgMTYwMDApO1xyXG5cclxuICAgICAgICAvLyDlj5HpgIHliLBXZWJTb2NrZXTov5vooYzlrp7ml7ZBU1JcclxuICAgICAgICB0aGlzLnNlbmRBdWRpb1RvV2ViU29ja2V0KGZyYW1lQnVmZmVyKTtcclxuXHJcbiAgICAgICAgLy8g5pu05paw5rOi5b2i5pi+56S6XHJcbiAgICAgICAgdGhpcy53YXZlQ2xpZW50Py5pbnB1dChidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV0sIHBvd2VyTGV2ZWwsIGJ1ZmZlclNhbXBsZVJhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UmVjb3JkZXIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5jbG9zZSgpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNsZWFuaW5nIHVwIGluZGVwZW5kZW50IHJlY29yZGVyOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRBdWRpb1RvV2ViU29ja2V0KGZyYW1lQnVmZmVyOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlhdFdTICYmIHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4gJiYgIXRoaXMuZGlzYWJsZUFTUikge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHN0YXR1czogMSxcclxuICAgICAgICAgICAgZm9ybWF0OiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgIGVuY29kaW5nOiB0aGlzLmVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgYXVkaW86IGNvbnZlcnRGcmFtZUJ1ZmZlclRvQmFzZTY0KGZyYW1lQnVmZmVyKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNlbmRpbmcgYXVkaW8gZGF0YSB0byBXZWJTb2NrZXQ6XCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2ViU29ja2V055u45YWz5pa55rOVIC0g5LuF55So5LqOQVNS77yM5LiN5o6n5Yi25b2V5Yi2XHJcbiAgY29ubmVjdFdlYlNvY2tldCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiY29ubmVjdFdlYlNvY2tldCBjYWxsZWQsIHNob3VsZFJlY29ubmVjdDpcIiwgdGhpcy5zaG91bGRSZWNvbm5lY3QpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb25uZWN0IHx8ICF0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiTm90IGNvbm5lY3RpbmcgV2ViU29ja2V0IC0gc2hvdWxkUmVjb25uZWN0OlwiLCB0aGlzLnNob3VsZFJlY29ubmVjdCwgXCJpc1JlY29yZGluZzpcIiwgdGhpcy5pc1JlY29yZGluZyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlhbPpl63njrDmnInov57mjqVcclxuICAgIHRoaXMuY2xvc2VXZWJTb2NrZXQoKTtcclxuXHJcbiAgICBjb25zdCB3ZWJzb2NrZXRVcmwgPSB0aGlzLmdldFdlYlNvY2tldFVybCgpO1xyXG4gICAgY29uc29sZS5sb2coXCJDb25uZWN0aW5nIHRvOlwiLCB3ZWJzb2NrZXRVcmwpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcIldlYlNvY2tldFwiIGluIHdpbmRvdykge1xyXG4gICAgICAgIHRoaXMuaWF0V1MgPSBuZXcgV2ViU29ja2V0KHdlYnNvY2tldFVybCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIua1j+iniOWZqOS4jeaUr+aMgVdlYlNvY2tldFwiKTtcclxuICAgICAgICBhbGVydChcIua1j+iniOWZqOS4jeaUr+aMgVdlYlNvY2tldFwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlQnRuU3RhdHVzKFwiQ09OTkVDVElOR1wiKTtcclxuXHJcbiAgICAgIHRoaXMuaWF0V1Mub25vcGVuID0gKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIldlYlNvY2tldCBjb25uZWN0ZWQgZm9yIEFTUlwiKTtcclxuICAgICAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzID0gMDtcclxuICAgICAgICB0aGlzLmNoYW5nZUJ0blN0YXR1cyhcIk9QRU5cIik7XHJcblxyXG4gICAgICAgIC8vIOWPkemAgeWIneWni+WPguaVsFxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgIGNvbW1vbjoge1xyXG4gICAgICAgICAgICBhcHBfaWQ6IHRoaXMuQVBQSUQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYnVzaW5lc3M6IHtcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6IFwiemhfY25cIixcclxuICAgICAgICAgICAgZG9tYWluOiBcImlhdFwiLFxyXG4gICAgICAgICAgICBhY2NlbnQ6IFwibWFuZGFyaW5cIixcclxuICAgICAgICAgICAgdmFkX2VvczogMTAwMDAsIC8vIOWinuWKoOWIsDEw56eSXHJcbiAgICAgICAgICAgIGR3YTogXCJ3cGdzXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBzdGF0dXM6IDAsXHJcbiAgICAgICAgICAgIGZvcm1hdDogXCJhdWRpby9MMTY7cmF0ZT0xNjAwMFwiLFxyXG4gICAgICAgICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5pYXRXUy5zZW5kKEpTT04uc3RyaW5naWZ5KHBhcmFtcykpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5pYXRXUy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVuZGVyUmVzdWx0KGUuZGF0YSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmlhdFdTLm9uZXJyb3IgPSAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXZWJTb2NrZXQgZXJyb3I6XCIsIGUpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlV2ViU29ja2V0RXJyb3IoKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaWF0V1Mub25jbG9zZSA9IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJXZWJTb2NrZXQgY2xvc2VkOlwiLCBlLmNvZGUsIGUucmVhc29uKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldENsb3NlKGUpO1xyXG4gICAgICB9O1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIFdlYlNvY2tldDpcIiwgZXJyb3IpO1xyXG4gICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldEVycm9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdlYlNvY2tldENsb3NlKGV2ZW50OiBDbG9zZUV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImhhbmRsZVdlYlNvY2tldENsb3NlXCIsIHtcclxuICAgICAgY29kZTogZXZlbnQuY29kZSxcclxuICAgICAgcmVhc29uOiBldmVudC5yZWFzb24sXHJcbiAgICAgIHNob3VsZFJlY29ubmVjdDogdGhpcy5zaG91bGRSZWNvbm5lY3QsXHJcbiAgICAgIGlzUmVjb3JkaW5nOiB0aGlzLmlzUmVjb3JkaW5nLFxyXG4gICAgICBpc1VzZXJGaW5pc2g6IHRoaXMuaXNVc2VyRmluaXNoXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDlpoLmnpznlKjmiLflt7Lnu4/nu5PmnZ/miJbkuI3lupTor6Xph43ov57vvIzliJnkuI3lpITnkIZcclxuICAgIGlmICh0aGlzLmlzVXNlckZpbmlzaCB8fCAhdGhpcy5zaG91bGRSZWNvbm5lY3QgfHwgIXRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWPkemAgee7k+adn+W4p++8iOWmguaenOmcgOimge+8iVxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuaWF0V1MgJiYgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgICBcInN0YXR1c1wiOiAyLFxyXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgIFwiZW5jb2RpbmdcIjogdGhpcy5lbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICAgIFwiYXVkaW9cIjogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgZW5kIGZyYW1lIG9uIGNsb3NlOicsIGVycik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5q2j5bi45YWz6Zet56CB5oiW5pyN5Yqh56uv5Li75Yqo5YWz6Zet77yM5bCd6K+V6YeN6L+eXHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gMTAwMCB8fCBldmVudC5jb2RlID09PSAxMDA2IHx8IGV2ZW50LmNvZGUgPT09IDEwMTEpIHtcclxuICAgICAgdGhpcy5hdHRlbXB0UmVjb25uZWN0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiV2ViU29ja2V0IGNsb3NlZCB3aXRoIGVycm9yIGNvZGU6XCIsIGV2ZW50LmNvZGUpO1xyXG4gICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldEVycm9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdlYlNvY2tldEVycm9yKCkge1xyXG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29ubmVjdCB8fCAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0dGVtcHRSZWNvbm5lY3QoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXR0ZW1wdFJlY29ubmVjdCgpIHtcclxuICAgIGlmICh0aGlzLnJlY29ubmVjdEF0dGVtcHRzID49IHRoaXMubWF4UmVjb25uZWN0QXR0ZW1wdHMpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIk1heCByZWNvbm5lY3QgYXR0ZW1wdHMgcmVhY2hlZFwiKTtcclxuICAgICAgLy8g5LiN5pS55Y+Y5b2V5Yi254q25oCB77yM5Y+q5pivQVNS5pqC5pe25LiN5Y+v55SoXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzKys7XHJcbiAgICBjb25zb2xlLmxvZyhgQXR0ZW1wdGluZyBXZWJTb2NrZXQgcmVjb25uZWN0ICR7dGhpcy5yZWNvbm5lY3RBdHRlbXB0c30vJHt0aGlzLm1heFJlY29ubmVjdEF0dGVtcHRzfWApO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zaG91bGRSZWNvbm5lY3QgJiYgdGhpcy5pc1JlY29yZGluZyAmJiAhdGhpcy5pc1VzZXJGaW5pc2gpIHtcclxuICAgICAgICB0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgdGhpcy5yZWNvbm5lY3REZWxheSAqIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZVdlYlNvY2tldCgpIHtcclxuICAgIGlmICh0aGlzLmlhdFdTKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8g5Y+R6YCB57uT5p2f5binXHJcbiAgICAgICAgaWYgKHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICAgICAgXCJzdGF0dXNcIjogMixcclxuICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgICAgXCJlbmNvZGluZ1wiOiB0aGlzLmVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgICBcImF1ZGlvXCI6IFwiXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTiB8fCB0aGlzLmlhdFdTLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XHJcbiAgICAgICAgICB0aGlzLmlhdFdTLmNsb3NlKDEwMDAsIFwiVXNlciBpbml0aWF0ZWQgY2xvc2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBjbG9zaW5nIFdlYlNvY2tldDpcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaWF0V1MgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g54q25oCB566h55CGXHJcbiAgcHJpdmF0ZSByZXNldFN0YXRlKCkge1xyXG4gICAgdGhpcy5yZXN1bHRUZXh0ID0gXCJcIjtcclxuICAgIHRoaXMucmVzdWx0VGV4dFRlbXAgPSBcIlwiO1xyXG4gICAgdGhpcy5kdXJhdGlvblN0ciA9IFwiMDA6MDBcIjtcclxuICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG4gICAgdGhpcy5yZWNvcmREdXJhdGlvbiA9IDA7XHJcbiAgICB0aGlzLmFsbFJlY29yZGVkQnVmZmVycyA9IFtdO1xyXG4gICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclRpbWVycygpIHtcclxuICAgIGlmICh0aGlzLmNvdW50ZG93bkludGVydmFsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jb3VudGRvd25JbnRlcnZhbCk7XHJcbiAgICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHVyYXRpb25JbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZHVyYXRpb25JbnRlcnZhbCk7XHJcbiAgICAgIHRoaXMuZHVyYXRpb25JbnRlcnZhbCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VCdG5TdGF0dXMoc3RhdHVzOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYnRuU3RhdHVzID0gc3RhdHVzO1xyXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgY2FzZSBcIkNPTk5FQ1RJTkdcIjpcclxuICAgICAgICB0aGlzLmNvbm5TdGF0dXMgPSBcIuW7uueri+i/nuaOpeS4rVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiT1BFTlwiOlxyXG4gICAgICAgIHRoaXMuY29ublN0YXR1cyA9IGDlvZXpn7PkuK3vvIgke3RoaXMuZHVyYXRpb25TdHJ977yJYDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkNMT1NJTkdcIjpcclxuICAgICAgICB0aGlzLmNvbm5TdGF0dXMgPSBcIuWFs+mXrei/nuaOpeS4rVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiQ0xPU0VEXCI6XHJcbiAgICAgICAgdGhpcy5jb25uU3RhdHVzID0gXCLlvIDlp4vlvZXpn7NcIjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOiuoeaXtuWZqFxyXG4gIHN0YXJ0Q291bnRkb3duKCkge1xyXG4gICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gICAgdGhpcy5yZWNvcmREdXJhdGlvbiA9IDA7XHJcbiAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuICAgIHRoaXMubm93ID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAvLyDlvZXpn7Pml7bplb/orqHml7blmajvvIgxMDBtc+eyvuW6pu+8iVxyXG4gICAgdGhpcy5kdXJhdGlvbkludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgIHRoaXMucmVjb3JkRHVyYXRpb24gKz0gMTAwO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICAgIC8vIOaYvuekuuaXtumVv+iuoeaXtuWZqO+8iDHnp5Lnsr7luqbvvIlcclxuICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jb3VudFRpbWVyKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgY291bnRUaW1lcigpIHtcclxuICAgIHRoaXMuZHVyYXRpb24rKztcclxuICAgIGxldCBtaW51dGVTdHIgPSBTdHJpbmcoTWF0aC5mbG9vcih0aGlzLmR1cmF0aW9uIC8gNjApKS5wYWRTdGFydCgyLCBcIjBcIik7XHJcbiAgICBsZXQgc2Vjb25kU3RyID0gU3RyaW5nKHRoaXMuZHVyYXRpb24gJSA2MCkucGFkU3RhcnQoMiwgXCIwXCIpO1xyXG4gICAgbGV0IGR1cmF0aW9uU3RyID0gbWludXRlU3RyICsgXCI6XCIgKyBzZWNvbmRTdHI7XHJcbiAgICB0aGlzLmR1cmF0aW9uU3RyID0gZHVyYXRpb25TdHI7XHJcbiAgICB0aGlzLmNvbm5TdGF0dXMgPSBg5b2V6Z+z5Lit77yIJHt0aGlzLmR1cmF0aW9uU3Ryfe+8iWA7XHJcbiAgICB0aGlzLm9uRHVyYXRpb25TdHJDaGFuZ2UgJiYgdGhpcy5vbkR1cmF0aW9uU3RyQ2hhbmdlKGR1cmF0aW9uU3RyKTtcclxuICB9XHJcblxyXG4gIC8vIOe7k+aenOWkhOeQhlxyXG4gIHJlbmRlclJlc3VsdChyZXN1bHREYXRhOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBqc29uRGF0YSA9IEpTT04ucGFyc2UocmVzdWx0RGF0YSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoanNvbkRhdGEuZGF0YSAmJiBqc29uRGF0YS5kYXRhLnJlc3VsdCkge1xyXG4gICAgICAgIGxldCBkYXRhID0ganNvbkRhdGEuZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XHJcbiAgICAgICAgbGV0IHdzID0gZGF0YS53cztcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBzdHIgPSBzdHIgKyB3c1tpXS5jd1swXS53O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5aSE55CG5Yqo5oCB5L+u5q2jXHJcbiAgICAgICAgaWYgKGRhdGEucGdzKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YS5wZ3MgPT09IFwiYXBkXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRUZXh0ID0gdGhpcy5yZXN1bHRUZXh0VGVtcDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVzdWx0VGV4dFRlbXAgPSB0aGlzLnJlc3VsdFRleHQgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzdWx0VGV4dCA9IHRoaXMucmVzdWx0VGV4dCArIHN0cjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25JbnB1dENoYW5nZSAmJiB0aGlzLm9uSW5wdXRDaGFuZ2UodGhpcy5nZXRVc2VySW5wdXQoKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOWkhOeQhue7k+adn+eKtuaAgVxyXG4gICAgICBpZiAoanNvbkRhdGEuY29kZSA9PT0gMCAmJiBqc29uRGF0YS5kYXRhLnN0YXR1cyA9PT0gMikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQVNSIHNlc3Npb24gY29tcGxldGVkLCB3aWxsIHJlY29ubmVjdCBpZiBzdGlsbCByZWNvcmRpbmdcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuaWF0V1MgJiYgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgICAgdGhpcy5pYXRXUy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5aSE55CG6ZSZ6K+vXHJcbiAgICAgIGlmIChqc29uRGF0YS5jb2RlICE9PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkFTUiBlcnJvcjpcIiwganNvbkRhdGEpO1xyXG4gICAgICAgIGlmICh0aGlzLmlhdFdTICYmIHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgICAgIHRoaXMuaWF0V1MuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIHJlc3VsdDpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VXNlcklucHV0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJcIiArICh0aGlzLnJlc3VsdFRleHRUZW1wIHx8IHRoaXMucmVzdWx0VGV4dCk7XHJcbiAgfVxyXG5cclxuICAvLyDmnYPpmZDlkozliJ3lp4vljJZcclxuICBhc3luYyBvcGVuV2l0aFByaXZpbGVkZ2UoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3RQZXJtaXNzaW9uKCk7XHJcbiAgICBcclxuICAgIGlmIChSZWNvcmRlci5Jc09wZW4oKSkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgLy8g6L+Z6YeM5LiN5Yib5bu65b2V5Yi25Zmo77yM5Zug5Li65oiR5Lus5L2/55So54us56uL55qE5b2V5Yi25ZmoXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIOmfs+mikeWkhOeQhuaWueazlVxyXG4gIGFzeW5jIHBjbUJsb2JUb1dhdkJsb2IocGNtQmxvYjogQmxvYiwgc2FtcGxlUmF0ZTogbnVtYmVyKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIGxldCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgXHJcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICBsZXQgcGNtRGF0YTogYW55ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBsZXQgd2F2QmxvYiA9IHBjbXRvV2F2KHBjbURhdGEsIHNhbXBsZVJhdGUsIDEsIDE2KTtcclxuICAgICAgICByZXNvbHZlKHdhdkJsb2IpO1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihwY21CbG9iKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGxheVBDTShwY21CbG9iOiBCbG9iLCBzYW1wbGVSYXRlOiBudW1iZXIpIHtcclxuICAgIGxldCB3YXZCbG9iID0gYXdhaXQgdGhpcy5wY21CbG9iVG9XYXZCbG9iKHBjbUJsb2IsIHNhbXBsZVJhdGUpO1xyXG4gICAgbGV0IHdhdlVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHdhdkJsb2IpO1xyXG4gICAgbGV0IGF1ZGlvID0gbmV3IEF1ZGlvKCk7XHJcbiAgICBhdWRpby5zcmMgPSB3YXZVcmw7XHJcbiAgICBhdWRpby5wbGF5KCk7XHJcbiAgfVxyXG5cclxuICBwbGF5UmVjb3JkKCkge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkUGNtQmxvYikge1xyXG4gICAgICB0aGlzLnBsYXlQQ00odGhpcy5yZWNvcmRQY21CbG9iLCA0NDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBXZWJTb2NrZXQgVVJM55Sf5oiQXHJcbiAgZ2V0V2ViU29ja2V0VXJsKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdXJsID0gXCJ3c3M6Ly9pYXQtYXBpLnhmeXVuLmNuL3YyL2lhdFwiO1xyXG4gICAgbGV0IGhvc3QgPSBcImlhdC1hcGkueGZ5dW4uY25cIjtcclxuICAgIFxyXG4gICAgbGV0IGFwaUtleSA9IHRoaXMuQVBJX0tFWTtcclxuICAgIGxldCBhcGlTZWNyZXQgPSB0aGlzLkFQSV9TRUNSRVQ7XHJcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKTtcclxuICAgIGxldCBhbGdvcml0aG0gPSBcImhtYWMtc2hhMjU2XCI7XHJcbiAgICBsZXQgaGVhZGVycyA9IFwiaG9zdCBkYXRlIHJlcXVlc3QtbGluZVwiO1xyXG4gICAgbGV0IHNpZ25hdHVyZU9yaWdpbiA9IGBob3N0OiAke2hvc3R9XFxuZGF0ZTogJHtkYXRlfVxcbkdFVCAvdjIvaWF0IEhUVFAvMS4xYDtcclxuICAgIGxldCBzaWduYXR1cmVTaGEgPSBDcnlwdG9KUy5IbWFjU0hBMjU2KHNpZ25hdHVyZU9yaWdpbiwgYXBpU2VjcmV0KTtcclxuICAgIGxldCBzaWduYXR1cmUgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShzaWduYXR1cmVTaGEpO1xyXG4gICAgbGV0IGF1dGhvcml6YXRpb25PcmlnaW4gPSBgYXBpX2tleT1cIiR7YXBpS2V5fVwiLCBhbGdvcml0aG09XCIke2FsZ29yaXRobX1cIiwgaGVhZGVycz1cIiR7aGVhZGVyc31cIiwgc2lnbmF0dXJlPVwiJHtzaWduYXR1cmV9XCJgO1xyXG4gICAgbGV0IGF1dGhvcml6YXRpb24gPSBidG9hKGF1dGhvcml6YXRpb25PcmlnaW4pO1xyXG4gICAgdXJsID0gYCR7dXJsfT9hdXRob3JpemF0aW9uPSR7YXV0aG9yaXphdGlvbn0mZGF0ZT0ke2RhdGV9Jmhvc3Q9JHtob3N0fWA7XHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuXHJcbiAgdG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgICB2YXIgYmluYXJ5ID0gXCJcIjtcclxuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICB2YXIgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICAvLyDnp7vliqjnq6/mnYPpmZDmlrnms5VcclxuICBpc0NhcGFjaXRvcigpOiBib29sZWFuIHtcclxuICAgIGlmKCF0aGlzLnBsYXRmb3JtPy5pcykgcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybS5pcyhcImNhcGFjaXRvclwiKSB8fCB0aGlzLnBsYXRmb3JtLmlzKFwiY29yZG92YVwiKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RQZXJtaXNzaW9uKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzQ2FwYWNpdG9yKCkpIHJldHVybjtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0U3RvYWdlUGVybWlzc2lvbigpO1xyXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RDYW1lcmFQZXJtaXNzaW9uKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdE1pY1Blcm1pc3Npb24oKTtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0UmVjb3JkQXVkaW9QZXJtaXNzaW9uKCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVxdWVzdFJlY29yZEF1ZGlvUGVybWlzc2lvbigpIHtsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5yZXF1ZXN0UnVudGltZVBlcm1pc3Npb25zKFt0aGlzLmRpYWdub3N0aWMucGVybWlzc2lvbi5SRUNPUkRfQVVESU9dKTtcclxuICAgIGNvbnNvbGUubG9nKFwicmVjb3JkIHBlcm1pc3Npb24gcmVxdWVzdDpcIiwgZGF0YSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0TWljUGVybWlzc2lvbigpIHtcclxuICAgIGxldCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5pc01pY3JvcGhvbmVBdXRob3JpemVkKCk7XHJcbiAgICBjb25zb2xlLmxvZyhcInBlcm1pc3Nvbl9NSUM6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdE1pY3JvcGhvbmVBdXRob3JpemF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0U3RvYWdlUGVybWlzc2lvbigpIHtcclxuICAgIGxldCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5pc0V4dGVybmFsU3RvcmFnZUF1dGhvcml6ZWQoKTtcclxuICAgIGNvbnNvbGUubG9nKFwicGVybWlzc29uX1NUT1JBR0U6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdEV4dGVybmFsU3RvcmFnZUF1dGhvcml6YXRpb24oKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RDYW1lcmFQZXJtaXNzaW9uKCkge1xyXG4gICAgbGV0IGlzQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLmlzQ2FtZXJhQXV0aG9yaXplZCgpO1xyXG4gICAgY29uc29sZS5sb2coXCJwZXJtaXNzb25fQ2FtZXJhOlwiLCBpc0F2YWlsYWJsZSk7XHJcbiAgICBpZiAoIWlzQXZhaWxhYmxlKSB7XHJcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLnJlcXVlc3RDYW1lcmFBdXRob3JpemF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyDlhbbku5bovoXliqnmlrnms5VcclxuICBzcGxpdEF1ZGlvRGF0YShhdWRpb0RhdGE6IGFueSkge1xyXG4gICAgY29uc3Qgc2VnbWVudFNpemUgPSAxMjgwO1xyXG4gICAgY29uc3Qgc2VnbWVudENvdW50ID0gTWF0aC5jZWlsKGF1ZGlvRGF0YS5sZW5ndGggLyBzZWdtZW50U2l6ZSk7XHJcbiAgICBjb25zdCBzZWdtZW50cyA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudENvdW50OyBpKyspIHtcclxuICAgICAgY29uc3Qgc3RhcnQgPSBpICogc2VnbWVudFNpemU7XHJcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgc2VnbWVudFNpemU7XHJcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBhdWRpb0RhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xyXG4gIH1cclxuXHJcbiAgQnVmZmVyVG9CbG9iKGJ1ZmZlcjogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2F1ZGlvL3BjbScgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwbGF5QnVmZmVycygpIHtcclxuICAgIGxldCBhdWRpb0Jsb2IgPSBhd2FpdCB0aGlzLkJ1ZmZlcnNUb0Jsb2IodGhpcy5hbGxSZWNvcmRlZEJ1ZmZlcnMpO1xyXG4gICAgdGhpcy5wbGF5UENNKGF1ZGlvQmxvYiwgNDQxMDApO1xyXG4gIH1cclxuXHJcbiAgQnVmZmVyc1RvQmxvYihidWZmZXJzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgYXVkaW9CdWZmZXI6IGFueSA9IFtdO1xyXG4gICAgYnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XHJcbiAgICAgIGJ1ZmZlci5mb3JFYWNoKGludDE2ID0+IHtcclxuICAgICAgICBhdWRpb0J1ZmZlci5wdXNoKGludDE2KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBuZXcgQmxvYihbYXVkaW9CdWZmZXJdLCB7IHR5cGU6ICdhdWRpby9wY20nIH0pO1xyXG4gIH1cclxufSJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
// 使用显式文件路径,避免裸路径目录导入(Deno/Node ESM 不支持)
|
|
1
2
|
export * from "./fmode-chat";
|
|
2
3
|
export * from "./interface";
|
|
3
|
-
export * from "./completion";
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
export * from "./completion/index";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvYWdlbnQvY2hhdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIOS9v+eUqOaYvuW8j+aWh+S7tui3r+W+hO+8jOmBv+WFjeijuOi3r+W+hOebruW9leWvvOWFpe+8iERlbm8vTm9kZSBFU00g5LiN5pSv5oyB77yJXHJcbmV4cG9ydCAqIGZyb20gXCIuL2Ztb2RlLWNoYXRcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wbGV0aW9uL2luZGV4XCIiXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export * from "./
|
|
3
|
-
export * from "./
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
6
|
-
|
|
1
|
+
// 使用显式 index 文件路径,避免裸路径目录导入(Deno/Node ESM 不支持)
|
|
2
|
+
export * from "./prompt/index";
|
|
3
|
+
export * from "./story/index";
|
|
4
|
+
export * from "./task/index";
|
|
5
|
+
export * from "./chat/index";
|
|
6
|
+
export * from "./waiting/index";
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvYWdlbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxlQUFlLENBQUE7QUFDN0IsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxpQkFBaUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIOS9v+eUqOaYvuW8jyBpbmRleCDmlofku7bot6/lvoTvvIzpgb/lhY3oo7jot6/lvoTnm67lvZXlr7zlhaXvvIhEZW5vL05vZGUgRVNNIOS4jeaUr+aMge+8iVxyXG5leHBvcnQgKiBmcm9tIFwiLi9wcm9tcHQvaW5kZXhcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9zdG9yeS9pbmRleFwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2svaW5kZXhcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9jaGF0L2luZGV4XCJcclxuZXhwb3J0ICogZnJvbSBcIi4vd2FpdGluZy9pbmRleFwiIl19
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
export * from "./
|
|
3
|
-
export * from "./
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
1
|
+
// 使用显式 index 文件路径,避免裸路径目录导入(Deno/Node ESM 不支持)
|
|
2
|
+
export * from "./agent/index";
|
|
3
|
+
export * from "./voice/index";
|
|
4
|
+
export * from "./parse/index";
|
|
5
|
+
export * from "./social/index";
|
|
6
|
+
export * from "./storage/index";
|
|
6
7
|
export * from "./storage/util-file-md5";
|
|
7
8
|
export * from "./storage/util-file-metadata";
|
|
8
|
-
export * from "./ecom";
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
export * from "./ecom/index";
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMsOEJBQThCLENBQUE7QUFDNUMsY0FBYyxjQUFjLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDkvb/nlKjmmL7lvI8gaW5kZXgg5paH5Lu26Lev5b6E77yM6YG/5YWN6KO46Lev5b6E55uu5b2V5a+85YWl77yIRGVuby9Ob2RlIEVTTSDkuI3mlK/mjIHvvIlcclxuZXhwb3J0ICogZnJvbSBcIi4vYWdlbnQvaW5kZXhcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi92b2ljZS9pbmRleFwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3BhcnNlL2luZGV4XCJcclxuZXhwb3J0ICogZnJvbSBcIi4vc29jaWFsL2luZGV4XCJcclxuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmFnZS9pbmRleFwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3N0b3JhZ2UvdXRpbC1maWxlLW1kNVwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3N0b3JhZ2UvdXRpbC1maWxlLW1ldGFkYXRhXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vZWNvbS9pbmRleFwiXHJcbiJdfQ==
|
|
@@ -1,20 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
|
|
2
|
+
/**
|
|
3
|
+
* HwobsProvider 基于 S3 协议的华为云 OBS 存储提供者
|
|
4
|
+
* 使用 @aws-sdk/client-s3 实现,兼容 S3 协议
|
|
5
|
+
*/
|
|
3
6
|
export class HwobsProvider {
|
|
4
7
|
constructor(conf) {
|
|
5
8
|
this.conf = conf;
|
|
6
|
-
this.client = new
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
this.client = new S3Client({
|
|
10
|
+
region: this.extractRegion(conf.server),
|
|
11
|
+
credentials: {
|
|
12
|
+
accessKeyId: conf.access_key_id,
|
|
13
|
+
secretAccessKey: conf.secret_access_key,
|
|
14
|
+
sessionToken: conf.session_token
|
|
15
|
+
},
|
|
16
|
+
endpoint: conf.server,
|
|
17
|
+
forcePathStyle: true // OBS 需要强制路径风格
|
|
10
18
|
});
|
|
11
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* 从 server URL 提取 region
|
|
22
|
+
*/
|
|
23
|
+
extractRegion(server) {
|
|
24
|
+
if (!server) {
|
|
25
|
+
return 'cn-south-1';
|
|
26
|
+
}
|
|
27
|
+
// 从 URL 中提取 region,例如 obs.cn-south-1.myhuaweicloud.com
|
|
28
|
+
const match = server.match(/obs\.([^.]+)\.myhuaweicloud\.com/);
|
|
29
|
+
return match ? match[1] : 'cn-south-1';
|
|
30
|
+
}
|
|
12
31
|
setConfig(conf) {
|
|
13
32
|
this.conf = conf;
|
|
14
|
-
this.client = new
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
33
|
+
this.client = new S3Client({
|
|
34
|
+
region: this.extractRegion(conf.server),
|
|
35
|
+
credentials: {
|
|
36
|
+
accessKeyId: conf.access_key_id,
|
|
37
|
+
secretAccessKey: conf.secret_access_key,
|
|
38
|
+
sessionToken: conf.session_token
|
|
39
|
+
},
|
|
40
|
+
endpoint: conf.server,
|
|
41
|
+
forcePathStyle: true
|
|
18
42
|
});
|
|
19
43
|
}
|
|
20
44
|
genFileKey(name) {
|
|
@@ -28,28 +52,67 @@ export class HwobsProvider {
|
|
|
28
52
|
const rand = Math.random().toString(36).slice(2, 8);
|
|
29
53
|
return `storage/web-2023/${yyyy}${mm}${dd}/${hh}${mi}${ss}-${rand}-${name}`;
|
|
30
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* 获取文件的 Content-Type
|
|
57
|
+
*/
|
|
58
|
+
getContentType(fileName) {
|
|
59
|
+
const ext = fileName.split('.').pop()?.toLowerCase();
|
|
60
|
+
const mimeTypes = {
|
|
61
|
+
'html': 'text/html; charset=utf-8',
|
|
62
|
+
'css': 'text/css; charset=utf-8',
|
|
63
|
+
'js': 'application/javascript; charset=utf-8',
|
|
64
|
+
'mjs': 'application/javascript; charset=utf-8',
|
|
65
|
+
'json': 'application/json; charset=utf-8',
|
|
66
|
+
'xml': 'application/xml; charset=utf-8',
|
|
67
|
+
'png': 'image/png',
|
|
68
|
+
'jpg': 'image/jpeg',
|
|
69
|
+
'jpeg': 'image/jpeg',
|
|
70
|
+
'gif': 'image/gif',
|
|
71
|
+
'svg': 'image/svg+xml',
|
|
72
|
+
'ico': 'image/x-icon',
|
|
73
|
+
'webp': 'image/webp',
|
|
74
|
+
'woff': 'font/woff',
|
|
75
|
+
'woff2': 'font/woff2',
|
|
76
|
+
'ttf': 'font/ttf',
|
|
77
|
+
'eot': 'application/vnd.ms-fontobject',
|
|
78
|
+
'otf': 'font/otf',
|
|
79
|
+
'pdf': 'application/pdf',
|
|
80
|
+
'zip': 'application/zip',
|
|
81
|
+
'txt': 'text/plain; charset=utf-8',
|
|
82
|
+
'md': 'text/markdown; charset=utf-8',
|
|
83
|
+
'map': 'application/json'
|
|
84
|
+
};
|
|
85
|
+
return mimeTypes[ext || ''] || 'application/octet-stream';
|
|
86
|
+
}
|
|
31
87
|
async upload(file, options) {
|
|
32
88
|
const name = file.name || 'blob.bin';
|
|
33
89
|
const key = options?.key || this.genFileKey(name);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
url,
|
|
45
|
-
name,
|
|
46
|
-
type: file.type || '',
|
|
47
|
-
size: file.size || 0,
|
|
48
|
-
};
|
|
49
|
-
resolve(nv);
|
|
50
|
-
}
|
|
90
|
+
try {
|
|
91
|
+
// 将 File/Blob 转换为 ArrayBuffer
|
|
92
|
+
const arrayBuffer = await file.arrayBuffer();
|
|
93
|
+
const uint8Array = new Uint8Array(arrayBuffer);
|
|
94
|
+
const command = new PutObjectCommand({
|
|
95
|
+
Bucket: this.conf.bucket,
|
|
96
|
+
Key: key,
|
|
97
|
+
Body: uint8Array,
|
|
98
|
+
ContentType: this.getContentType(name),
|
|
99
|
+
ACL: 'public-read'
|
|
51
100
|
});
|
|
52
|
-
|
|
101
|
+
await this.client.send(command);
|
|
102
|
+
const host = this.conf.host || '';
|
|
103
|
+
const url = host ? `${host}${key}` : key;
|
|
104
|
+
const nv = {
|
|
105
|
+
key,
|
|
106
|
+
url,
|
|
107
|
+
name,
|
|
108
|
+
type: file.type || '',
|
|
109
|
+
size: file.size || 0,
|
|
110
|
+
};
|
|
111
|
+
return nv;
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
throw new Error(`上传失败: ${error instanceof Error ? error.message : '未知错误'}`);
|
|
115
|
+
}
|
|
53
116
|
}
|
|
54
117
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHdvYnMucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvc3RvcmFnZS9od29icy5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxhQUFhO0FBQ2IsT0FBTyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFFM0MsTUFBTSxPQUFPLGFBQWE7SUFJeEIsWUFBWSxJQUFpQjtRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDO1lBQzFCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQWlCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDMUIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBWTtRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sb0JBQW9CLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM5RSxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFpQixFQUFFLE9BQStCO1FBQzdELE1BQU0sSUFBSSxHQUFJLElBQWEsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO1FBQy9DLE1BQU0sR0FBRyxHQUFHLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsRCxPQUFPLElBQUksT0FBTyxDQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUNuQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFDeEQsQ0FBQyxHQUFRLEVBQUUsTUFBVyxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNkLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLDBCQUEwQjtvQkFDcEUsTUFBTSxFQUFFLEdBQWE7d0JBQ25CLEdBQUc7d0JBQ0gsR0FBRzt3QkFDSCxJQUFJO3dCQUNKLElBQUksRUFBRyxJQUFhLENBQUMsSUFBSSxJQUFJLEVBQUU7d0JBQy9CLElBQUksRUFBRyxJQUFhLENBQUMsSUFBSSxJQUFJLENBQUM7cUJBQy9CLENBQUM7b0JBQ0YsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm92YUZpbGUsIFByb3ZpZGVyVXBsb2FkT3B0aW9ucywgSHdvYnNDb25maWcsIFN0b3JhZ2VQcm92aWRlciB9IGZyb20gJy4vdHlwZXMnO1xyXG4vLyBAdHMtaWdub3JlXHJcbmltcG9ydCBPYnNDbGllbnQgZnJvbSAnZXNkay1vYnMtYnJvd3NlcmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBId29ic1Byb3ZpZGVyIGltcGxlbWVudHMgU3RvcmFnZVByb3ZpZGVyIHtcclxuICBwcml2YXRlIGNsaWVudDogYW55O1xyXG4gIHByaXZhdGUgY29uZjogSHdvYnNDb25maWc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbmY6IEh3b2JzQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvbmYgPSBjb25mO1xyXG4gICAgdGhpcy5jbGllbnQgPSBuZXcgT2JzQ2xpZW50KHtcclxuICAgICAgYWNjZXNzX2tleV9pZDogY29uZi5hY2Nlc3Nfa2V5X2lkLFxyXG4gICAgICBzZWNyZXRfYWNjZXNzX2tleTogY29uZi5zZWNyZXRfYWNjZXNzX2tleSxcclxuICAgICAgc2VydmVyOiBjb25mLnNlcnZlcixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnKGNvbmY6IEh3b2JzQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvbmYgPSBjb25mO1xyXG4gICAgdGhpcy5jbGllbnQgPSBuZXcgT2JzQ2xpZW50KHtcclxuICAgICAgYWNjZXNzX2tleV9pZDogY29uZi5hY2Nlc3Nfa2V5X2lkLFxyXG4gICAgICBzZWNyZXRfYWNjZXNzX2tleTogY29uZi5zZWNyZXRfYWNjZXNzX2tleSxcclxuICAgICAgc2VydmVyOiBjb25mLnNlcnZlcixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5GaWxlS2V5KG5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IHl5eXkgPSBub3cuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1tID0gU3RyaW5nKG5vdy5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IGRkID0gU3RyaW5nKG5vdy5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBoaCA9IFN0cmluZyhub3cuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IG1pID0gU3RyaW5nKG5vdy5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBzcyA9IFN0cmluZyhub3cuZ2V0U2Vjb25kcygpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgY29uc3QgcmFuZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpO1xyXG4gICAgcmV0dXJuIGBzdG9yYWdlL3dlYi0yMDIzLyR7eXl5eX0ke21tfSR7ZGR9LyR7aGh9JHttaX0ke3NzfS0ke3JhbmR9LSR7bmFtZX1gO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkKGZpbGU6IEZpbGUgfCBCbG9iLCBvcHRpb25zPzogUHJvdmlkZXJVcGxvYWRPcHRpb25zKTogUHJvbWlzZTxOb3ZhRmlsZT4ge1xyXG4gICAgY29uc3QgbmFtZSA9IChmaWxlIGFzIEZpbGUpLm5hbWUgfHwgJ2Jsb2IuYmluJztcclxuICAgIGNvbnN0IGtleSA9IG9wdGlvbnM/LmtleSB8fCB0aGlzLmdlbkZpbGVLZXkobmFtZSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPE5vdmFGaWxlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuY2xpZW50LnB1dE9iamVjdChcclxuICAgICAgICB7IEJ1Y2tldDogdGhpcy5jb25mLmJ1Y2tldCwgS2V5OiBrZXksIFNvdXJjZUZpbGU6IGZpbGUgfSxcclxuICAgICAgICAoZXJyOiBhbnksIHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgaG9zdCA9IHRoaXMuY29uZi5ob3N0IHx8ICcnO1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBob3N0ID8gYCR7aG9zdH0ke2tleX1gIDoga2V5OyAvLyDlpoLmnpzmnKrphY3nva4gaG9zdO+8jOi/lOWbniBrZXkg5L6b5aSW5bGC5ou85o6lXHJcbiAgICAgICAgICAgIGNvbnN0IG52OiBOb3ZhRmlsZSA9IHtcclxuICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICAgdHlwZTogKGZpbGUgYXMgRmlsZSkudHlwZSB8fCAnJyxcclxuICAgICAgICAgICAgICBzaXplOiAoZmlsZSBhcyBGaWxlKS5zaXplIHx8IDAsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlc29sdmUobnYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxufSJdfQ==
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHdvYnMucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvc3RvcmFnZS9od29icy5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFJeEIsWUFBWSxJQUFpQjtRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDO1lBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDdkMsV0FBVyxFQUFFO2dCQUNYLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDL0IsZUFBZSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7Z0JBQ3ZDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTthQUNqQztZQUNELFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNyQixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWU7U0FDckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYSxDQUFDLE1BQWU7UUFDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUNELHVEQUF1RDtRQUN2RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDL0QsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBaUI7UUFDekIsSUFBSSxDQUFDLElB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LENBQUM7YUFDL0IsQ0FBQztZQUNGLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm92YUZpbGUsIFByb3ZpZGVyVXBsb2FkT3B0aW9ucywgSHdvYnNDb25maWcsIFN0b3JhZ2VQcm92aWRlciB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBTM0NsaWVudCwgUHV0T2JqZWN0Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XHJcblxyXG4vKipcclxuICogSHdvYnNQcm92aWRlciDln7rkuo4gUzMg5Y2P6K6u55qE5Y2O5Li65LqRIE9CUyDlrZjlgqjmj5DkvpvogIVcclxuICog5L2/55SoIEBhd3Mtc2RrL2NsaWVudC1zMyDlrp7njrDvvIzlhbzlrrkgUzMg5Y2P6K6uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSHdvYnNQcm92aWRlciBpbXBsZW1lbnRzIFN0b3JhZ2VQcm92aWRlciB7XHJcbiAgcHJpdmF0ZSBjbGllbnQ6IFMzQ2xpZW50O1xyXG4gIHByaXZhdGUgY29uZjogSHdvYnNDb25maWc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbmY6IEh3b2JzQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvbmYgPSBjb25mO1xyXG4gICAgdGhpcy5jbGllbnQgPSBuZXcgUzNDbGllbnQoe1xyXG4gICAgICByZWdpb246IHRoaXMuZXh0cmFjdFJlZ2lvbihjb25mLnNlcnZlciksXHJcbiAgICAgIGNyZWRlbnRpYWxzOiB7XHJcbiAgICAgICAgYWNjZXNzS2V5SWQ6IGNvbmYuYWNjZXNzX2tleV9pZCxcclxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IGNvbmYuc2VjcmV0X2FjY2Vzc19rZXksXHJcbiAgICAgICAgc2Vzc2lvblRva2VuOiBjb25mLnNlc3Npb25fdG9rZW5cclxuICAgICAgfSxcclxuICAgICAgZW5kcG9pbnQ6IGNvbmYuc2VydmVyLFxyXG4gICAgICBmb3JjZVBhdGhTdHlsZTogdHJ1ZSAvLyBPQlMg6ZyA6KaB5by65Yi26Lev5b6E6aOO5qC8XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOS7jiBzZXJ2ZXIgVVJMIOaPkOWPliByZWdpb25cclxuICAgKi9cclxuICBwcml2YXRlIGV4dHJhY3RSZWdpb24oc2VydmVyPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghc2VydmVyKSB7XHJcbiAgICAgIHJldHVybiAnY24tc291dGgtMSc7XHJcbiAgICB9XHJcbiAgICAvLyDku44gVVJMIOS4reaPkOWPliByZWdpb27vvIzkvovlpoIgb2JzLmNuLXNvdXRoLTEubXlodWF3ZWljbG91ZC5jb21cclxuICAgIGNvbnN0IG1hdGNoID0gc2VydmVyLm1hdGNoKC9vYnNcXC4oW14uXSspXFwubXlodWF3ZWljbG91ZFxcLmNvbS8pO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnY24tc291dGgtMSc7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcoY29uZjogSHdvYnNDb25maWcpIHtcclxuICAgIHRoaXMuY29uZiA9IGNvbmY7XHJcbiAgICB0aGlzLmNsaWVudCA9IG5ldyBTM0NsaWVudCh7XHJcbiAgICAgIHJlZ2lvbjogdGhpcy5leHRyYWN0UmVnaW9uKGNvbmYuc2VydmVyKSxcclxuICAgICAgY3JlZGVudGlhbHM6IHtcclxuICAgICAgICBhY2Nlc3NLZXlJZDogY29uZi5hY2Nlc3Nfa2V5X2lkLFxyXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleTogY29uZi5zZWNyZXRfYWNjZXNzX2tleSxcclxuICAgICAgICBzZXNzaW9uVG9rZW46IGNvbmYuc2Vzc2lvbl90b2tlblxyXG4gICAgICB9LFxyXG4gICAgICBlbmRwb2ludDogY29uZi5zZXJ2ZXIsXHJcbiAgICAgIGZvcmNlUGF0aFN0eWxlOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuRmlsZUtleShuYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCB5eXl5ID0gbm93LmdldEZ1bGxZZWFyKCk7XHJcbiAgICBjb25zdCBtbSA9IFN0cmluZyhub3cuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBkZCA9IFN0cmluZyhub3cuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgY29uc3QgaGggPSBTdHJpbmcobm93LmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBtaSA9IFN0cmluZyhub3cuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgY29uc3Qgc3MgPSBTdHJpbmcobm93LmdldFNlY29uZHMoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IHJhbmQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA4KTtcclxuICAgIHJldHVybiBgc3RvcmFnZS93ZWItMjAyMy8ke3l5eXl9JHttbX0ke2RkfS8ke2hofSR7bWl9JHtzc30tJHtyYW5kfS0ke25hbWV9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluaWh+S7tueahCBDb250ZW50LVR5cGVcclxuICAgKi9cclxuICBwcml2YXRlIGdldENvbnRlbnRUeXBlKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZXh0ID0gZmlsZU5hbWUuc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IG1pbWVUeXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgJ2h0bWwnOiAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JyxcclxuICAgICAgJ2Nzcyc6ICd0ZXh0L2NzczsgY2hhcnNldD11dGYtOCcsXHJcbiAgICAgICdqcyc6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04JyxcclxuICAgICAgJ21qcyc6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04JyxcclxuICAgICAgJ2pzb24nOiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcsXHJcbiAgICAgICd4bWwnOiAnYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PXV0Zi04JyxcclxuICAgICAgJ3BuZyc6ICdpbWFnZS9wbmcnLFxyXG4gICAgICAnanBnJzogJ2ltYWdlL2pwZWcnLFxyXG4gICAgICAnanBlZyc6ICdpbWFnZS9qcGVnJyxcclxuICAgICAgJ2dpZic6ICdpbWFnZS9naWYnLFxyXG4gICAgICAnc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnLFxyXG4gICAgICAnaWNvJzogJ2ltYWdlL3gtaWNvbicsXHJcbiAgICAgICd3ZWJwJzogJ2ltYWdlL3dlYnAnLFxyXG4gICAgICAnd29mZic6ICdmb250L3dvZmYnLFxyXG4gICAgICAnd29mZjInOiAnZm9udC93b2ZmMicsXHJcbiAgICAgICd0dGYnOiAnZm9udC90dGYnLFxyXG4gICAgICAnZW90JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JyxcclxuICAgICAgJ290Zic6ICdmb250L290ZicsXHJcbiAgICAgICdwZGYnOiAnYXBwbGljYXRpb24vcGRmJyxcclxuICAgICAgJ3ppcCc6ICdhcHBsaWNhdGlvbi96aXAnLFxyXG4gICAgICAndHh0JzogJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnLFxyXG4gICAgICAnbWQnOiAndGV4dC9tYXJrZG93bjsgY2hhcnNldD11dGYtOCcsXHJcbiAgICAgICdtYXAnOiAnYXBwbGljYXRpb24vanNvbidcclxuICAgIH07XHJcbiAgICByZXR1cm4gbWltZVR5cGVzW2V4dCB8fCAnJ10gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWQoZmlsZTogRmlsZSB8IEJsb2IsIG9wdGlvbnM/OiBQcm92aWRlclVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPE5vdmFGaWxlPiB7XHJcbiAgICBjb25zdCBuYW1lID0gKGZpbGUgYXMgRmlsZSkubmFtZSB8fCAnYmxvYi5iaW4nO1xyXG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucz8ua2V5IHx8IHRoaXMuZ2VuRmlsZUtleShuYW1lKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyDlsIYgRmlsZS9CbG9iIOi9rOaNouS4uiBBcnJheUJ1ZmZlclxyXG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IChmaWxlIGFzIEZpbGUpLmFycmF5QnVmZmVyKCk7XHJcbiAgICAgIGNvbnN0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XHJcblxyXG4gICAgICBjb25zdCBjb21tYW5kID0gbmV3IFB1dE9iamVjdENvbW1hbmQoe1xyXG4gICAgICAgIEJ1Y2tldDogdGhpcy5jb25mLmJ1Y2tldCxcclxuICAgICAgICBLZXk6IGtleSxcclxuICAgICAgICBCb2R5OiB1aW50OEFycmF5LFxyXG4gICAgICAgIENvbnRlbnRUeXBlOiB0aGlzLmdldENvbnRlbnRUeXBlKG5hbWUpLFxyXG4gICAgICAgIEFDTDogJ3B1YmxpYy1yZWFkJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnNlbmQoY29tbWFuZCk7XHJcblxyXG4gICAgICBjb25zdCBob3N0ID0gdGhpcy5jb25mLmhvc3QgfHwgJyc7XHJcbiAgICAgIGNvbnN0IHVybCA9IGhvc3QgPyBgJHtob3N0fSR7a2V5fWAgOiBrZXk7XHJcbiAgICAgIGNvbnN0IG52OiBOb3ZhRmlsZSA9IHtcclxuICAgICAgICBrZXksXHJcbiAgICAgICAgdXJsLFxyXG4gICAgICAgIG5hbWUsXHJcbiAgICAgICAgdHlwZTogKGZpbGUgYXMgRmlsZSkudHlwZSB8fCAnJyxcclxuICAgICAgICBzaXplOiAoZmlsZSBhcyBGaWxlKS5zaXplIHx8IDAsXHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBudjtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihg5LiK5Lyg5aSx6LSlOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ+acquefpemUmeivryd9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -2,6 +2,7 @@ export * from './types';
|
|
|
2
2
|
export * from './nova-storage';
|
|
3
3
|
export * from './qiniu.provider';
|
|
4
4
|
export * from './hwobs.provider';
|
|
5
|
+
export * from './s3.provider';
|
|
5
6
|
export * from './util-file-md5';
|
|
6
7
|
export * from './util-file-metadata';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvc3RvcmFnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3R5cGVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9ub3ZhLXN0b3JhZ2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Fpbml1LnByb3ZpZGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9od29icy5wcm92aWRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vczMucHJvdmlkZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWwtZmlsZS1tZDUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWwtZmlsZS1tZXRhZGF0YSc7Il19
|