sonamu 0.7.18 → 0.7.20
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/dist/api/config.d.ts +21 -3
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/context.d.ts +3 -3
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +1 -1
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +4 -8
- package/dist/api/index.d.ts +0 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -3
- package/dist/api/sonamu.d.ts +5 -3
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +10 -8
- package/dist/bin/cli.js +3 -3
- package/dist/database/db.d.ts +2 -2
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +23 -30
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/storage/drivers.d.ts +14 -0
- package/dist/storage/drivers.d.ts.map +1 -0
- package/dist/storage/drivers.js +11 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +6 -0
- package/dist/storage/storage-manager.d.ts +21 -0
- package/dist/storage/storage-manager.d.ts.map +1 -0
- package/dist/storage/storage-manager.js +33 -0
- package/dist/storage/types.d.ts +12 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +5 -0
- package/dist/storage/uploaded-file.d.ts +35 -0
- package/dist/storage/uploaded-file.d.ts.map +1 -0
- package/dist/storage/uploaded-file.js +58 -0
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +8 -5
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +4 -4
- package/dist/ui-web/assets/{index-DFqVuxOB.js → index-B87IyofX.js} +1 -1
- package/dist/ui-web/index.html +1 -1
- package/package.json +6 -1
- package/src/api/config.ts +21 -3
- package/src/api/context.ts +3 -3
- package/src/api/decorators.ts +3 -8
- package/src/api/index.ts +0 -2
- package/src/api/sonamu.ts +12 -9
- package/src/bin/cli.ts +2 -2
- package/src/database/db.ts +40 -43
- package/src/index.ts +0 -1
- package/src/storage/drivers.ts +15 -0
- package/src/storage/index.ts +5 -0
- package/src/storage/storage-manager.ts +39 -0
- package/src/storage/types.ts +12 -0
- package/src/storage/uploaded-file.ts +81 -0
- package/src/template/implementations/service.template.ts.txt +328 -0
- package/src/template/implementations/services.template.ts +7 -4
- package/src/testing/fixture-manager.ts +3 -4
- package/dist/file-storage/driver.d.ts +0 -48
- package/dist/file-storage/driver.d.ts.map +0 -1
- package/dist/file-storage/driver.js +0 -79
- package/dist/file-storage/file-storage.d.ts +0 -50
- package/dist/file-storage/file-storage.d.ts.map +0 -1
- package/dist/file-storage/file-storage.js +0 -75
- package/src/file-storage/driver.ts +0 -131
- package/src/file-storage/file-storage.ts +0 -100
package/dist/api/sonamu.js
CHANGED
|
@@ -85,10 +85,12 @@ class SonamuClass {
|
|
|
85
85
|
return this._secrets;
|
|
86
86
|
}
|
|
87
87
|
_storage = null;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
/**
|
|
89
|
+
* StorageManager 인스턴스
|
|
90
|
+
*/ get storage() {
|
|
91
|
+
if (!this._storage) {
|
|
92
|
+
throw new Error("Storage has not been initialized. Check storage config.");
|
|
93
|
+
}
|
|
92
94
|
return this._storage;
|
|
93
95
|
}
|
|
94
96
|
_workflows = null;
|
|
@@ -188,9 +190,10 @@ class SonamuClass {
|
|
|
188
190
|
const fastify = (await import("fastify")).default;
|
|
189
191
|
const server = fastify(options.fastify);
|
|
190
192
|
this.server = server;
|
|
191
|
-
// Storage 설정
|
|
193
|
+
// Storage 설정 → StorageManager 생성
|
|
192
194
|
if (options.storage) {
|
|
193
|
-
|
|
195
|
+
const { StorageManager } = await import("../storage/storage-manager.js");
|
|
196
|
+
this._storage = new StorageManager(options.storage);
|
|
194
197
|
}
|
|
195
198
|
// 플러그인 등록
|
|
196
199
|
if (options.plugins) {
|
|
@@ -532,9 +535,8 @@ class SonamuClass {
|
|
|
532
535
|
await BaseModel.destroy();
|
|
533
536
|
await this._workflows?.destroy();
|
|
534
537
|
await this.watcher?.close();
|
|
535
|
-
this.storage?.destroy();
|
|
536
538
|
}
|
|
537
539
|
}
|
|
538
540
|
export const Sonamu = new SonamuClass();
|
|
539
541
|
|
|
540
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvc29uYW11LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiYXN5bmNfaG9va3NcIjtcbmltcG9ydCB0eXBlIHsgRlNXYXRjaGVyIH0gZnJvbSBcImNob2tpZGFyXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlJbnN0YW5jZSwgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IEluY29taW5nTWVzc2FnZSwgU2VydmVyLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBab2RPYmplY3QgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2NrU1NFRmFjdG9yeSwgREIsIGlzRGFlbW9uU2VydmVyIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlciB9IGZyb20gXCIuLi9maWxlLXN0b3JhZ2UvZHJpdmVyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHR5cGUgeyBTeW5jZXIgfSBmcm9tIFwiLi4vc3luY2VyL3N5bmNlclwiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd01hbmFnZXIgfSBmcm9tIFwiLi4vdGFza3Mvd29ya2Zsb3ctbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBTb25hbXVGYXN0aWZ5Q29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdUNvbmZpZywgU29uYW11U2VydmVyT3B0aW9ucywgU29uYW11VGFza09wdGlvbnMgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQXV0aENvbnRleHQsIENvbnRleHQsIFVwbG9hZENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgdHlwZSBTb25hbXVTZWNyZXRzID0ge1xuICBhbnRocm9waWNfYXBpX2tleT86IHN0cmluZztcbiAgdm95YWdlX2FwaV9rZXk/OiBzdHJpbmc7XG4gIG9wZW5haV9hcGlfa2V5Pzogc3RyaW5nO1xufTtcbmNsYXNzIFNvbmFtdUNsYXNzIHtcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGFzeW5jTG9jYWxTdG9yYWdlOiBBc3luY0xvY2FsU3RvcmFnZTx7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgfT4gPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2UoKTtcblxuICBwdWJsaWMgdXBsb2FkU3RvcmFnZTogQXN5bmNMb2NhbFN0b3JhZ2U8e1xuICAgIHVwbG9hZENvbnRleHQ6IFVwbG9hZENvbnRleHQ7XG4gIH0+ID0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlKCk7XG5cbiAgcHVibGljIGdldENvbnRleHQoKTogQ29udGV4dCB7XG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmFzeW5jTG9jYWxTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgaWYgKHN0b3JlPy5jb250ZXh0KSB7XG4gICAgICByZXR1cm4gc3RvcmUuY29udGV4dDtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICAvLyDthYzsiqTtjIUg7ZmY6rK97JeQ7IScIOy7qO2FjeyKpO2KuOqwgCDso7zsnoXrkJjsp4Ag7JWK7J2AIOqyveyasCDruYgg7Luo7YWN7Iqk7Yq4IOumrO2EtFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWVzdDogbnVsbCxcbiAgICAgICAgcmVwbHk6IG51bGwsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBjcmVhdGVTU0U6IChzY2hlbWE6IFpvZE9iamVjdCkgPT4gY3JlYXRlTW9ja1NTRUZhY3Rvcnkoc2NoZW1hKSxcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiDthYzsiqTtjIUg7ZmY6rK97JeQ7IScIOy7qO2FjeyKpO2KuOqwgCDso7zsnoXrkJjsp4Ag7JWK7J2AIOqyveyasCDruYgg7Luo7YWN7Iqk7Yq4IOumrO2EtFxuICAgICAgICBuYWl0ZVN0b3JlOiBuZXcgTWFwPHN0cmluZywgYW55PigpLFxuICAgICAgfSBhcyB1bmtub3duIGFzIENvbnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvbmFtdSBjYW5ub3QgZmluZCBjb250ZXh0XCIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRVcGxvYWRDb250ZXh0KCk6IFVwbG9hZENvbnRleHQge1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy51cGxvYWRTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgaWYgKHN0b3JlPy51cGxvYWRDb250ZXh0KSB7XG4gICAgICByZXR1cm4gc3RvcmUudXBsb2FkQ29udGV4dDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU29uYW11IGNhbm5vdCBmaW5kIHVwbG9hZCBjb250ZXh0LiBEaWQgeW91IHVzZSBAdXBsb2FkIGRlY29yYXRvcj9cIik7XG4gIH1cblxuICBwcml2YXRlIF9hcGlSb290UGF0aDogQWJzb2x1dGVQYXRoIHwgbnVsbCA9IG51bGw7XG4gIHNldCBhcGlSb290UGF0aChhcGlSb290UGF0aDogQWJzb2x1dGVQYXRoKSB7XG4gICAgdGhpcy5fYXBpUm9vdFBhdGggPSBhcGlSb290UGF0aDtcbiAgfVxuICBnZXQgYXBpUm9vdFBhdGgoKTogQWJzb2x1dGVQYXRoIHtcbiAgICBpZiAodGhpcy5fYXBpUm9vdFBhdGggPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvbmFtdSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWRcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hcGlSb290UGF0aDtcbiAgfVxuICBnZXQgYXBwUm9vdFBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGlSb290UGF0aC5zcGxpdChwYXRoLnNlcCkuc2xpY2UoMCwgLTEpLmpvaW4ocGF0aC5zZXApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGJDb25maWc6IFNvbmFtdURCQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIHNldCBkYkNvbmZpZyhkYkNvbmZpZzogU29uYW11REJDb25maWcpIHtcbiAgICB0aGlzLl9kYkNvbmZpZyA9IGRiQ29uZmlnO1xuICB9XG4gIGdldCBkYkNvbmZpZygpOiBTb25hbXVEQkNvbmZpZyB7XG4gICAgaWYgKHRoaXMuX2RiQ29uZmlnID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGJDb25maWc7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jZXI6IFN5bmNlciB8IG51bGwgPSBudWxsO1xuICBzZXQgc3luY2VyKHN5bmNlcjogU3luY2VyKSB7XG4gICAgdGhpcy5fc3luY2VyID0gc3luY2VyO1xuICB9XG4gIGdldCBzeW5jZXIoKTogU3luY2VyIHtcbiAgICBpZiAodGhpcy5fc3luY2VyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3luY2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlnOiBTb25hbXVDb25maWcgfCBudWxsID0gbnVsbDtcbiAgc2V0IGNvbmZpZyhjb25maWc6IFNvbmFtdUNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgfVxuICBnZXQgY29uZmlnKCk6IFNvbmFtdUNvbmZpZyB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU29uYW11IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgX3NlY3JldHM6IFNvbmFtdVNlY3JldHMgfCBudWxsID0gbnVsbDtcbiAgc2V0IHNlY3JldHMoc2VjcmV0czogU29uYW11U2VjcmV0cykge1xuICAgIHRoaXMuX3NlY3JldHMgPSBzZWNyZXRzO1xuICB9XG4gIGdldCBzZWNyZXRzKCk6IFNvbmFtdVNlY3JldHMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjcmV0cztcbiAgfVxuXG4gIHByaXZhdGUgX3N0b3JhZ2U6IERyaXZlciB8IG51bGwgPSBudWxsO1xuICBzZXQgc3RvcmFnZShzdG9yYWdlOiBEcml2ZXIpIHtcbiAgICB0aGlzLl9zdG9yYWdlID0gc3RvcmFnZTtcbiAgfVxuICBnZXQgc3RvcmFnZSgpOiBEcml2ZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZTtcbiAgfVxuXG4gIHByaXZhdGUgX3dvcmtmbG93czogV29ya2Zsb3dNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gIGdldCB3b3JrZmxvd3MoKTogV29ya2Zsb3dNYW5hZ2VyIHtcbiAgICBpZiAodGhpcy5fd29ya2Zsb3dzID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl93b3JrZmxvd3M7XG4gIH1cblxuICAvLyBITVIg7LKY66asXG4gIHB1YmxpYyB3YXRjaGVyOiBGU1dhdGNoZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZW5kaW5nRmlsZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgaG1yU3RhcnRUaW1lOiBudW1iZXIgPSAwO1xuXG4gIHB1YmxpYyBzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuXG4gIGFzeW5jIGluaXRGb3JUZXN0aW5nKCkge1xuICAgIGF3YWl0IHRoaXMuaW5pdCh0cnVlLCBmYWxzZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQoXG4gICAgZG9TaWxlbnQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBlbmFibGVTeW5jOiBib29sZWFuID0gdHJ1ZSxcbiAgICBhcGlSb290UGF0aD86IEFic29sdXRlUGF0aCxcbiAgICBmb3JUZXN0aW5nOiBib29sZWFuID0gZmFsc2UsXG4gICkge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRvU2lsZW50KSB7XG4gICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgIGNvbnNvbGUudGltZShjaGFsay5jeWFuKGBTb25hbXUuaW5pdCR7Zm9yVGVzdGluZyA/IFwiIGZvciB0ZXN0aW5nXCIgOiBcIlwifWApKTtcbiAgICB9XG5cbiAgICAvLyBBUEkg66Oo7Yq4IO2MqOyKpFxuICAgIGNvbnN0IHsgZmluZEFwaVJvb3RQYXRoIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy91dGlsc1wiKTtcbiAgICB0aGlzLmFwaVJvb3RQYXRoID0gYXBpUm9vdFBhdGggPz8gZmluZEFwaVJvb3RQYXRoKCk7XG5cbiAgICBjb25zdCB7IGxvYWRDb25maWcgfSA9IGF3YWl0IGltcG9ydChcIi4vY29uZmlnXCIpO1xuICAgIHRoaXMuY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZyh0aGlzLmFwaVJvb3RQYXRoKTtcbiAgICAvLyBzb25hbXUuY29uZmlnLnRzIOq4sOuzuOqwkiDshKTsoJVcbiAgICB0aGlzLmNvbmZpZy5kYXRhYmFzZS5kYXRhYmFzZSA9IHRoaXMuY29uZmlnLmRhdGFiYXNlLmRhdGFiYXNlID8/IFwicG9zdGdyZXNxbFwiO1xuXG4gICAgLy8gQVBJIO2CpCDtmZjqsr3rs4DsiJgg66Gc65OcXG4gICAgY29uc3Qgc2VjcmV0czogU29uYW11U2VjcmV0cyA9IHt9O1xuICAgIGlmIChwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWSkge1xuICAgICAgc2VjcmV0cy5hbnRocm9waWNfYXBpX2tleSA9IHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuVk9ZQUdFX0FQSV9LRVkpIHtcbiAgICAgIHNlY3JldHMudm95YWdlX2FwaV9rZXkgPSBwcm9jZXNzLmVudi5WT1lBR0VfQVBJX0tFWTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZKSB7XG4gICAgICBzZWNyZXRzLm9wZW5haV9hcGlfa2V5ID0gcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVk7XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhzZWNyZXRzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlY3JldHMgPSBzZWNyZXRzO1xuICAgIH1cblxuICAgIC8vIERCIOuhnOuTnFxuICAgIGNvbnN0IHsgREIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2RhdGFiYXNlL2RiXCIpO1xuICAgIHRoaXMuZGJDb25maWcgPSBEQi5nZW5lcmF0ZURCQ29uZmlnKHRoaXMuY29uZmlnLmRhdGFiYXNlKTtcbiAgICBpZiAoIWRvU2lsZW50KSB7XG4gICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKFwiREIgQ29uZmlnIExvYWRlZCFcIikpO1xuICAgIH1cblxuICAgIC8vIEVudGl0eSDroZzrk5xcbiAgICAvLyDthYzsiqTtirjsl5DshJzrj4QgRW50aXR5IOygleuztOuKlCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8gdXBzZXJ06rCAIOygnOuMgOuhnCDsnpHrj5ntlZjroKTrqbQgZW50aXR57J2YIHVuaXF1ZSBpbmRleCDsoJXrs7TqsIAg7ZWE7JqU7ZWY6riwIOuVjOusuOyeheuLiOuLpC5cbiAgICBjb25zdCB7IEVudGl0eU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiKTtcbiAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKGRvU2lsZW50KTtcblxuICAgIC8vIO2FjOyKpO2MheyduCDqsr3smrAg7Iux7YGsIOyXhuydtCDspJHri6hcbiAgICBpZiAoZm9yVGVzdGluZykge1xuICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUYXNrIOuTseuhnVxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVdvcmtmbG93cyh0aGlzLmNvbmZpZy50YXNrcyk7XG5cbiAgICAvLyBTeW5jZXJcbiAgICBjb25zdCB7IFN5bmNlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vc3luY2VyL3N5bmNlclwiKTtcbiAgICB0aGlzLnN5bmNlciA9IG5ldyBTeW5jZXIoKTtcblxuICAgIC8vIEF1dG9sb2FkOiBNb2RlbHMgLyBUeXBlcyAvIEFQSXNcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5hdXRvbG9hZFR5cGVzKCk7XG4gICAgYXdhaXQgdGhpcy5zeW5jZXIuYXV0b2xvYWRNb2RlbHMoKTtcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5hdXRvbG9hZEFwaXMoKTtcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5hdXRvbG9hZFdvcmtmbG93cygpO1xuXG4gICAgY29uc3QgeyBUZW1wbGF0ZU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL3RlbXBsYXRlXCIpO1xuICAgIGF3YWl0IFRlbXBsYXRlTWFuYWdlci5hdXRvbG9hZCgpO1xuXG4gICAgY29uc3QgeyBpc0xvY2FsLCBpc1Rlc3QgfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIik7XG4gICAgaWYgKGlzTG9jYWwoKSkge1xuICAgICAgLy8g66Gc7Lus7JeQ7ISc64qUIOy9lOuTnCDsg53shLHsnYQg7JyE7ZW0IEJpb21lIOyFi+yXheydtCDtlYTsmpTtlaggKO2YhOyerCBhcGlSb290UGF0aCDsoITri6ztlZjsl6wg7Iuk7ZaJKVxuICAgICAgKGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL2Zvcm1hdHRlclwiKSkuc2V0dXBCaW9tZSh0aGlzLmFwaVJvb3RQYXRoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGlzSG90UmVsb2FkU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy9jb250cm9sbGVyXCIpO1xuICAgIGlmIChpc0xvY2FsKCkgJiYgIWlzVGVzdCgpICYmIGlzSG90UmVsb2FkU2VydmVyKCkgJiYgZW5hYmxlU3luYykge1xuICAgICAgYXdhaXQgdGhpcy5zeW5jZXIuc3luYygpO1xuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0V2F0Y2hlcigpO1xuICAgIH1cblxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgaWYgKCFkb1NpbGVudCkge1xuICAgICAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHQ7XG4gICAgICBjb25zb2xlLnRpbWVFbmQoY2hhbGsuY3lhbihcIlNvbmFtdS5pbml0XCIpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXJ2ZXIoaW5pdE9wdGlvbnM/OiB7IGVuYWJsZVN5bmM/OiBib29sZWFuOyBkb1NpbGVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQgPT09IGZhbHNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXQoaW5pdE9wdGlvbnM/LmRvU2lsZW50LCBpbml0T3B0aW9ucz8uZW5hYmxlU3luYyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY29uZmlnLnNlcnZlcjtcbiAgICBjb25zdCBmYXN0aWZ5ID0gKGF3YWl0IGltcG9ydChcImZhc3RpZnlcIikpLmRlZmF1bHQ7XG4gICAgY29uc3Qgc2VydmVyID0gZmFzdGlmeShvcHRpb25zLmZhc3RpZnkpO1xuICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuXG4gICAgLy8gU3RvcmFnZSDshKTsoJUg7KCA7J6lXG4gICAgaWYgKG9wdGlvbnMuc3RvcmFnZSkge1xuICAgICAgdGhpcy5zdG9yYWdlID0gb3B0aW9ucy5zdG9yYWdlO1xuICAgIH1cblxuICAgIC8vIO2UjOufrOq3uOyduCDrk7HroZ1cbiAgICBpZiAob3B0aW9ucy5wbHVnaW5zKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyUGx1Z2lucyhzZXJ2ZXIsIG9wdGlvbnMucGx1Z2lucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYXV0aCkge1xuICAgICAgaWYgKCFvcHRpb25zLnBsdWdpbnM/LnNlc3Npb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXV0aCByZXF1aXJlcyBzZXNzaW9uIHBsdWdpbi4gUGxlYXNlIGFkZCBwbHVnaW5zLnNlc3Npb24gY29uZmlndXJhdGlvbi5cIik7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJBdXRoKHNlcnZlciwgb3B0aW9ucy5hdXRoKTtcbiAgICB9XG5cbiAgICAvLyBBUEkg65287Jqw7YyFIOyEpOyglVxuICAgIGF3YWl0IHRoaXMud2l0aEZhc3RpZnkoc2VydmVyLCBvcHRpb25zLmFwaUNvbmZpZywge1xuICAgICAgZW5hYmxlU3luYzogaW5pdE9wdGlvbnM/LmVuYWJsZVN5bmMsXG4gICAgICBkb1NpbGVudDogaW5pdE9wdGlvbnM/LmRvU2lsZW50LFxuICAgIH0pO1xuXG4gICAgLy8g7ISc67KEIOyLnOyekVxuICAgIGF3YWl0IHRoaXMuYm9vdChzZXJ2ZXIsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHNlcnZlcjtcbiAgfVxuXG4gIGFzeW5jIHdpdGhGYXN0aWZ5KFxuICAgIHNlcnZlcjogRmFzdGlmeUluc3RhbmNlPFNlcnZlciwgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZT4sXG4gICAgY29uZmlnOiBTb25hbXVGYXN0aWZ5Q29uZmlnLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBlbmFibGVTeW5jPzogYm9vbGVhbjtcbiAgICAgIGRvU2lsZW50PzogYm9vbGVhbjtcbiAgICB9LFxuICApIHtcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0KG9wdGlvbnM/LmRvU2lsZW50LCBvcHRpb25zPy5lbmFibGVTeW5jKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlcnZlciA9IHNlcnZlcjtcblxuICAgIC8vIHRpbWV6b25lIOyEpOyglVxuICAgIGNvbnN0IHRpbWV6b25lID0gdGhpcy5jb25maWcuYXBpLnRpbWV6b25lO1xuICAgIGlmICh0aW1lem9uZSkge1xuICAgICAgLy8g7YOA7J6E7KG07JeQIOunnuqyjCDsnZHri7Ug64Kg7KecIOyKpO2KuOungeydhCDrs4DtmZjtlbTso7zslrTslbwg7ZWp64uI64ukLlxuICAgICAgLy8g6rCA66C5IHRpbWV6b25l7J20IFwiQXNpYS9TZW91bFwiIOydtOuptFxuICAgICAgLy8gXCIyMDI1LTExLTIxVDAwOjAwOjAwLjAwMFpcIiDrpbwgXCIyMDI1LTExLTIxVDA5OjAwOjAwKzA5OjAwXCIg7Jy866GcIOuzgO2ZmO2VtOyjvOyWtOyVvCDtlanri4jri6QuXG4gICAgICBjb25zdCB7IGZvcm1hdEluVGltZVpvbmUgfSA9IGF3YWl0IGltcG9ydChcImRhdGUtZm5zLXR6XCIpO1xuXG4gICAgICAvLyBJU08gODYwMSDrgqDsp5wg7ZiV7IudIOygleq3nOyLnSAo7JiIOiAyMDI0LTAxLTE1VDA5OjMwOjAwLjAwMFopXG4gICAgICBjb25zdCBJU09fREFURV9SRUdFWCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oXFwuXFxkezN9KT9aJC87XG5cbiAgICAgIC8vIFTrpbwg65GY65+s7Iu8IOyekeydgOuUsOyYtO2RnOqwgCDsl4bri6TrqbQgXCIyMDI1LTExLTE5MTc2MzU0NjE4OTAwMDE4OjU2OjI5KzA5OjAwXCLsmYAg6rCZ7J2AIOqysOqzvOqwgCDrgpjsmLXri4jri6QuXG4gICAgICAvLyDsnbTripQgZGF0ZS1mbnMg7Yq57J6F64uI64ukLlxuICAgICAgLy8g7J2066CH6rKMIO2VtOuPhCDqtJzssK7sirXri4jri6QuIFwiMjAyNS0xMS0xOVQxODo1NjoyOSswOTowMFwiIOuqqOyWkeycvOuhnCDsnpgg64KY7Ji164uI64ukLlxuICAgICAgY29uc3QgREFURV9GT1JNQVQgPSBcInl5eXktTU0tZGQnVCdISDptbTpzc1hYWFwiO1xuXG4gICAgICBzZXJ2ZXIuc2V0UmVwbHlTZXJpYWxpemVyKChwYXlsb2FkKSA9PiB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwYXlsb2FkLCAoX2tleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIElTT19EQVRFX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0SW5UaW1lWm9uZShcbiAgICAgICAgICAgICAgbmV3IERhdGUodmFsdWUpLFxuICAgICAgICAgICAgICB0aW1lem9uZSBhcyBgJHtzdHJpbmd9LyR7c3RyaW5nfWAsXG4gICAgICAgICAgICAgIERBVEVfRk9STUFULFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFvcHRpb25zPy5kb1NpbGVudCkge1xuICAgICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYFRpbWV6b25lIHNldCB0byAke3RpbWV6b25lfWApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDsoITssrQg65287Jqw7YyFIOumrOyKpO2KuFxuICAgIHNlcnZlci5nZXQoXG4gICAgICBgJHt0aGlzLmNvbmZpZy5hcGkucm91dGUucHJlZml4fS9yb3V0ZXNgLFxuICAgICAgYXN5bmMgKF9yZXF1ZXN0LCBfcmVwbHkpOiBQcm9taXNlPHR5cGVvZiB0aGlzLnN5bmNlci5hcGlzPiA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5bmNlci5hcGlzO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gSGVhbHRoY2hlY2sgQVBJXG4gICAgc2VydmVyLmdldChcbiAgICAgIGAke3RoaXMuY29uZmlnLmFwaS5yb3V0ZS5wcmVmaXh9L2hlYWx0aGNoZWNrYCxcbiAgICAgIGFzeW5jIChfcmVxdWVzdCwgX3JlcGx5KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICAgICAgcmV0dXJuIFwib2tcIjtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFNvbmFtdSBVSSBBUElcbiAgICBjb25zdCB7IHNvbmFtdVVJQXBpUGx1Z2luIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91aS9hcGlcIik7XG4gICAgc2VydmVyLnJlZ2lzdGVyKHNvbmFtdVVJQXBpUGx1Z2luKTtcblxuICAgIC8vIEFQSSDrnbzsmrDtjIUgKOuhnOy7rEhNUiDsg4Htg5zsmYAg6rWs67aEKVxuICAgIGNvbnN0IHsgaXNMb2NhbCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvY29udHJvbGxlclwiKTtcbiAgICBpZiAoaXNMb2NhbCgpKSB7XG4gICAgICBzZXJ2ZXIuYWxsKFwiKlwiLCBhc3luYyAocmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgLy8gU29uYW11IFVJXG4gICAgICAgIGlmIChyZXF1ZXN0LnVybC5zdGFydHNXaXRoKFwiL3NvbmFtdS11aVwiKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zeW5jZXIuYXBpcy5maW5kKFxuICAgICAgICAgIChhcGkpID0+XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5hcGkucm91dGUucHJlZml4ICsgYXBpLnBhdGggPT09IHJlcXVlc3QudXJsLnNwbGl0KFwiP1wiKVswXSAmJlxuICAgICAgICAgICAgKGFwaS5vcHRpb25zLmh0dHBNZXRob2QgPz8gXCJHRVRcIikgPT09IHJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUFwaUhhbmRsZXIoZm91bmQsIGNvbmZpZykocmVxdWVzdCwgcmVwbHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3QudXJsLnN0YXJ0c1dpdGgoXCIvYXBpL1wiKSkge1xuICAgICAgICAgIGNvbnN0IHsgTm90Rm91bmRFeGNlcHRpb24gfSA9IGF3YWl0IGltcG9ydChcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiKTtcbiAgICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oYOyhtOyerO2VmOyngCDslYrripQgQVBJIOygkeq3vOyeheuLiOuLpC4gJHtyZXF1ZXN0LnVybH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOydvOuwmCDtjIzsnbwg7KCR6re87IucIOuzhOuPhOydmCDsl5Drn6wg7Lac66Cl7ZWY7KeAIOyViuydjFxuICAgICAgICByZXR1cm47XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBhcGkgb2YgdGhpcy5zeW5jZXIuYXBpcykge1xuICAgICAgICAvLyBtb2RlbFxuICAgICAgICBpZiAodGhpcy5zeW5jZXIubW9kZWxzW2FwaS5tb2RlbE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOygleydmOuQmOyngCDslYrsnYAg66qo64247JeQIOygkeq3vCAke2FwaS5tb2RlbE5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByb3V0ZVxuICAgICAgICBzZXJ2ZXIucm91dGUoe1xuICAgICAgICAgIG1ldGhvZDogYXBpLm9wdGlvbnMuaHR0cE1ldGhvZCA/PyBcIkdFVFwiLFxuICAgICAgICAgIHVybDogdGhpcy5jb25maWcuYXBpLnJvdXRlLnByZWZpeCArIGFwaS5wYXRoLFxuICAgICAgICAgIGhhbmRsZXI6IHRoaXMuY3JlYXRlQXBpSGFuZGxlcihhcGksIGNvbmZpZyksXG4gICAgICAgIH0pOyAvLyBFTkQgc2VydmVyLnJvdXRlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQXBpSGFuZGxlcihcbiAgICBhcGk6IEV4dGVuZGVkQXBpLFxuICAgIGNvbmZpZzogU29uYW11RmFzdGlmeUNvbmZpZyxcbiAgKTogKHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCByZXBseTogRmFzdGlmeVJlcGx5KSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gYXN5bmMgKHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCByZXBseTogRmFzdGlmeVJlcGx5KTogUHJvbWlzZTx1bmtub3duPiA9PiB7XG4gICAgICAoYXBpLm9wdGlvbnMuZ3VhcmRzID8/IFtdKS5ldmVyeSgoZ3VhcmQpID0+IGNvbmZpZy5ndWFyZEhhbmRsZXIoZ3VhcmQsIHJlcXVlc3QsIGFwaSkpO1xuXG4gICAgICAvLyDtjIzrnbzrr7jthLAg7KCV67O066GcIHpvZCDsiqTtgqTrp4gg67mM65OcXG4gICAgICBjb25zdCB7IGdldFpvZE9iamVjdEZyb21BcGkgfSA9IGF3YWl0IGltcG9ydChcIi4vY29kZS1jb252ZXJ0ZXJzXCIpO1xuICAgICAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGkoYXBpLCB0aGlzLnN5bmNlci50eXBlcyk7XG5cbiAgICAgIC8vIHJlcXVlc3Qg7YyM7IuxXG4gICAgICBjb25zdCB3aGljaCA9IGFwaS5vcHRpb25zLmh0dHBNZXRob2QgPT09IFwiR0VUXCIgPyBcInF1ZXJ5XCIgOiBcImJvZHlcIjtcbiAgICAgIGxldCByZXFCb2R5OiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBmYXN0aWZ5Q2FzdGVyIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2Nhc3RlclwiKTtcbiAgICAgICAgcmVxQm9keSA9IGZhc3RpZnlDYXN0ZXIoUmVxVHlwZSkucGFyc2UocmVxdWVzdFt3aGljaF0gPz8ge30pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCB7IFpvZEVycm9yIH0gPSBhd2FpdCBpbXBvcnQoXCJ6b2RcIik7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgWm9kRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCB7IGh1bWFuaXplWm9kRXJyb3IgfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL3pvZC1lcnJvclwiKTtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IGh1bWFuaXplWm9kRXJyb3IoZSlcbiAgICAgICAgICAgIC5tYXAoKGlzc3VlKSA9PiBpc3N1ZS5tZXNzYWdlKVxuICAgICAgICAgICAgLmpvaW4oXCIgXCIpO1xuICAgICAgICAgIGNvbnN0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCIpO1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKG1lc3NhZ2VzLCB7XG4gICAgICAgICAgICB6b2RFcnJvcjogZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRlbnQtVHlwZVxuICAgICAgcmVwbHkudHlwZShhcGkub3B0aW9ucy5jb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIik7XG5cbiAgICAgIC8vIENvbnRleHQg7IOd7ISxXG4gICAgICBjb25zdCBjb250ZXh0OiBDb250ZXh0ID0gYXdhaXQgdGhpcy5jcmVhdGVDb250ZXh0KGNvbmZpZywgcmVxdWVzdCwgcmVwbHkpO1xuXG4gICAgICAvLyDrqqjrjbgg66mU7IaM65OcIGFyZ3Mg7IOd7ISx7ZWY7JesIO2YuOy2nFxuICAgICAgY29uc3QgeyBBcGlQYXJhbVR5cGUgfSA9IGF3YWl0IGltcG9ydChcIi4uL3R5cGVzL3R5cGVzXCIpO1xuICAgICAgY29uc3QgYXJncyA9IGFwaS5wYXJhbWV0ZXJzLm1hcCgocGFyYW0pID0+IHtcbiAgICAgICAgLy8gQ29udGV4dCDsnbjsoJ3shZhcbiAgICAgICAgaWYgKEFwaVBhcmFtVHlwZS5pc0NvbnRleHQocGFyYW0udHlwZSkpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVxQm9keVtwYXJhbS5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5pbnZva2VNb2RlbE1ldGhvZChhcGksIGFyZ3MsIGNvbnRleHQsIHJlcGx5KTtcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgaW52b2tlTW9kZWxNZXRob2QoXG4gICAgYXBpOiBFeHRlbmRlZEFwaSxcbiAgICBhcmdzOiB1bmtub3duW10sXG4gICAgY29udGV4dDogQ29udGV4dCxcbiAgICByZXBseTogRmFzdGlmeVJlcGx5LFxuICApOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuc3luY2VyLm1vZGVsc1thcGkubW9kZWxOYW1lXTtcbiAgICByZXR1cm4gdGhpcy5hc3luY0xvY2FsU3RvcmFnZS5ydW4oeyBjb250ZXh0IH0sIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogbW9kZWzsnYAg66qo6424IOyduOyKpO2EtOyKpOydtOuvgOuhnCDrqZTshJzrk5wg7Zi47LacIOqwgOuKpVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKG1vZGVsIGFzIGFueSlbYXBpLm1ldGhvZE5hbWVdLmFwcGx5KG1vZGVsLCBhcmdzKTtcbiAgICAgIHJlcGx5LnR5cGUoYXBpLm9wdGlvbnMuY29udGVudFR5cGUgPz8gXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQ29udGV4dChcbiAgICBjb25maWc6IFNvbmFtdUZhc3RpZnlDb25maWcsXG4gICAgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsXG4gICAgcmVwbHk6IEZhc3RpZnlSZXBseSxcbiAgKTogUHJvbWlzZTxDb250ZXh0PiB7XG4gICAgLy8gY3JlYXRlU1NFRmFjdG9yeSDtlajsiJjsl5Ag66+466asIHJlcXVlc3TsnZggc29ja2V06rO8IHJlcGx566W8IOuwlOyduOuUqS5cbiAgICBjb25zdCB7IGNyZWF0ZVNTRUZhY3RvcnkgfSA9IGF3YWl0IGltcG9ydChcIi4uL3N0cmVhbS9zc2VcIik7XG4gICAgY29uc3QgY3JlYXRlU1NFID0gKDxUIGV4dGVuZHMgWm9kT2JqZWN0PihcbiAgICAgIF9yZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgICAgIF9yZXBseTogRmFzdGlmeVJlcGx5LFxuICAgICAgX2V2ZW50czogVCxcbiAgICApID0+IGNyZWF0ZVNTRUZhY3RvcnkoX3JlcXVlc3Quc29ja2V0LCBfcmVwbHksIF9ldmVudHMpKS5iaW5kKG51bGwsIHJlcXVlc3QsIHJlcGx5KTtcblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB7XG4gICAgICAuLi4oYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICBjb25maWcuY29udGV4dFByb3ZpZGVyKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICByZXBseSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycyxcbiAgICAgICAgICAgIGNyZWF0ZVNTRSxcbiAgICAgICAgICAgIG5haXRlU3RvcmU6IE5haXRlLmNyZWF0ZVN0b3JlKCksXG4gICAgICAgICAgICAvLyBhdXRoXG4gICAgICAgICAgICB1c2VyOiByZXF1ZXN0LnVzZXIgPz8gbnVsbCxcbiAgICAgICAgICAgIHBhc3Nwb3J0OiB7XG4gICAgICAgICAgICAgIGxvZ2luOiByZXF1ZXN0LmxvZ2luLmJpbmQocmVxdWVzdCkgYXMgQXV0aENvbnRleHRbXCJwYXNzcG9ydFwiXVtcImxvZ2luXCJdLFxuICAgICAgICAgICAgICBsb2dvdXQ6IHJlcXVlc3QubG9nb3V0LmJpbmQocmVxdWVzdCkgYXMgQXV0aENvbnRleHRbXCJwYXNzcG9ydFwiXVtcImxvZ291dFwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIHJlcGx5LFxuICAgICAgICApLFxuICAgICAgKSksXG4gICAgfTtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2F0Y2hlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB3YXRjaFBhdGggPSBbcGF0aC5qb2luKHRoaXMuYXBpUm9vdFBhdGgsIFwic3JjXCIpXTtcblxuICAgIGNvbnN0IGNob2tpZGFyID0gKGF3YWl0IGltcG9ydChcImNob2tpZGFyXCIpKS5kZWZhdWx0O1xuICAgIHRoaXMud2F0Y2hlciA9IGNob2tpZGFyLndhdGNoKHdhdGNoUGF0aCwge1xuICAgICAgaWdub3JlZDogKHBhdGgsIHN0YXRzKSA9PlxuICAgICAgICAhIXN0YXRzPy5pc0ZpbGUoKSAmJiAhcGF0aC5lbmRzV2l0aChcIi50c1wiKSAmJiAhcGF0aC5lbmRzV2l0aChcIi5qc29uXCIpLFxuICAgICAgcGVyc2lzdGVudDogdHJ1ZSxcbiAgICAgIGlnbm9yZUluaXRpYWw6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLndhdGNoZXIub24oXCJhbGxcIiwgYXN5bmMgKGV2ZW50OiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGZpbGVQYXRoIGFzIEFic29sdXRlUGF0aDtcbiAgICAgIGFzc2VydChcbiAgICAgICAgYWJzb2x1dGVQYXRoLnN0YXJ0c1dpdGgodGhpcy5hcGlSb290UGF0aCksXG4gICAgICAgIFwiRmlsZSBwYXRoIGlzIG5vdCB3aXRoaW4gdGhlIEFQSSByb290IHBhdGhcIixcbiAgICAgICk7XG5cbiAgICAgIGlmIChldmVudCAhPT0gXCJjaGFuZ2VcIiAmJiBldmVudCAhPT0gXCJhZGRcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHNvbmFtdS5jb25maWcudHMg67OA6rK9IOyLnCDsnqzsi5zsnpFcbiAgICAgICAgY29uc3QgaXNDb25maWdUcyA9IGZpbGVQYXRoID09PSBwYXRoLmpvaW4odGhpcy5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJzb25hbXUuY29uZmlnLnRzXCIpO1xuXG4gICAgICAgIGlmIChpc0NvbmZpZ1RzKSB7XG4gICAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gZmlsZVBhdGgucmVwbGFjZSh0aGlzLmFwaVJvb3RQYXRoLCBcImFwaVwiKTtcbiAgICAgICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNoYWxrLmJvbGQoYERldGVjdGVkKCR7ZXZlbnR9KTogJHtjaGFsay5ibHVlKHJlbGF0aXZlUGF0aCl9IC0gUmVzdGFydGluZy4uLmApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcHJvY2Vzcy5raWxsKHByb2Nlc3MucGlkLCBcIlNJR1VTUjJcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWxlQ2hhbmdlKGV2ZW50LCBhYnNvbHV0ZVBhdGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICAgQSBmdW5jdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyBpbml0IGFuZCBkZXN0cm95IHdoZW4gdXNpbmcgU29uYW11IHZpYSBzY3JpcHRzLiAgICBcbiAgKi9cbiAgYXN5bmMgcnVuU2NyaXB0KGZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgYXdhaXQgdGhpcy5pbml0KHRydWUsIGZhbHNlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWdpc3RlclBsdWdpbnMoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UsIHBsdWdpbnM6IFNvbmFtdVNlcnZlck9wdGlvbnNbXCJwbHVnaW5zXCJdKSB7XG4gICAgaWYgKCFwbHVnaW5zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGx1Z2luc01vZHVsZXMgPSB7XG4gICAgICBjb3JzOiBcIkBmYXN0aWZ5L2NvcnNcIixcbiAgICAgIGZvcm1ib2R5OiBcIkBmYXN0aWZ5L2Zvcm1ib2R5XCIsXG4gICAgICBtdWx0aXBhcnQ6IFwiQGZhc3RpZnkvbXVsdGlwYXJ0XCIsXG4gICAgICBxczogXCJmYXN0aWZ5LXFzXCIsXG4gICAgICBzc2U6IFwiZmFzdGlmeS1zc2UtdjJcIixcbiAgICAgIHN0YXRpYzogXCJAZmFzdGlmeS9zdGF0aWNcIixcbiAgICAgIHNlc3Npb246IFwiQGZhc3RpZnkvc2VjdXJlLXNlc3Npb25cIixcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgY29uc3QgcmVnaXN0ZXJQbHVnaW4gPSBhc3luYyA8SyBleHRlbmRzIGtleW9mIE5vbk51bGxhYmxlPHR5cGVvZiBwbHVnaW5zPj4oXG4gICAgICBrZXk6IEssXG4gICAgICBwbHVnaW5OYW1lOiBzdHJpbmcsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb24gPSBwbHVnaW5zW2tleV07XG4gICAgICBpZiAoIW9wdGlvbikgcmV0dXJuO1xuXG4gICAgICBpZiAob3B0aW9uID09PSB0cnVlKSB7XG4gICAgICAgIHNlcnZlci5yZWdpc3RlcigoYXdhaXQgaW1wb3J0KHBsdWdpbk5hbWUpKS5kZWZhdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlcnZlci5yZWdpc3RlcigoYXdhaXQgaW1wb3J0KHBsdWdpbk5hbWUpKS5kZWZhdWx0LCBvcHRpb24pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHBsdWdpbk5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHBsdWdpbnNNb2R1bGVzKSkge1xuICAgICAgYXdhaXQgcmVnaXN0ZXJQbHVnaW4oa2V5IGFzIGtleW9mIHR5cGVvZiBwbHVnaW5zLCBwbHVnaW5OYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocGx1Z2lucy5jdXN0b20pIHtcbiAgICAgIHBsdWdpbnMuY3VzdG9tKHNlcnZlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWdpc3RlckF1dGgoXG4gICAgc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UsXG4gICAgb3B0aW9uczogTm9uTnVsbGFibGU8U29uYW11U2VydmVyT3B0aW9uc1tcImF1dGhcIl0+LFxuICApIHtcbiAgICAvLyBhd2FpdCBpbXBvcnQoXCJmYXN0aWZ5XCIpO1xuICAgIGNvbnN0IGZhc3RpZnlQYXNzcG9ydCA9IChhd2FpdCBpbXBvcnQoXCJAZmFzdGlmeS9wYXNzcG9ydFwiKSkuZGVmYXVsdDtcbiAgICBzZXJ2ZXIucmVnaXN0ZXIoZmFzdGlmeVBhc3Nwb3J0LmluaXRpYWxpemUoKSk7XG4gICAgc2VydmVyLnJlZ2lzdGVyKGZhc3RpZnlQYXNzcG9ydC5zZWN1cmVTZXNzaW9uKCkpO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImJvb2xlYW5cIikge1xuICAgICAgZmFzdGlmeVBhc3Nwb3J0LnJlZ2lzdGVyVXNlclNlcmlhbGl6ZXIoYXN5bmMgKHVzZXIsIF9yZXF1ZXN0KSA9PiB1c2VyKTtcbiAgICAgIGZhc3RpZnlQYXNzcG9ydC5yZWdpc3RlclVzZXJEZXNlcmlhbGl6ZXIoYXN5bmMgKHNlcmlhbGl6ZWQsIF9yZXF1ZXN0KSA9PiBzZXJpYWxpemVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFzdGlmeVBhc3Nwb3J0LnJlZ2lzdGVyVXNlclNlcmlhbGl6ZXIob3B0aW9ucy51c2VyU2VyaWFsaXplcik7XG4gICAgICBmYXN0aWZ5UGFzc3BvcnQucmVnaXN0ZXJVc2VyRGVzZXJpYWxpemVyKG9wdGlvbnMudXNlckRlc2VyaWFsaXplcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplV29ya2Zsb3dzKG9wdGlvbnM6IFNvbmFtdVRhc2tPcHRpb25zIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgeyBXb3JrZmxvd01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL3Rhc2tzL3dvcmtmbG93LW1hbmFnZXJcIik7XG4gICAgLy8gTk9URTogQHNvbmFtdS1raXQvdGFza3Mg7JWI7JeQ7ISgIGtuZXggY29uZmln66W8IOyImOygle2VmOq4sCDrlYzrrLjsl5AgY29ubmVjdGlvbuydtCDslYTri4wgY29uZmlnIOynuOuhnCDrs7Trg4Xri4jri6QuXG4gICAgdGhpcy5fd29ya2Zsb3dzID0gbmV3IFdvcmtmbG93TWFuYWdlcihEQi5nZXREQkNvbmZpZyhcIndcIikpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVuYWJsZVdvcmtlciA9IG9wdGlvbnMuZW5hYmxlV29ya2VyID8/IGlzRGFlbW9uU2VydmVyKCk7XG4gICAgY29uc3QgZGVmYXVsdFdvcmtlck9wdGlvbnMgPSB7XG4gICAgICBjb25jdXJyZW5jeTogb3MuY3B1cygpLmxlbmd0aCAtIDEsXG4gICAgICB1c2VQdWJTdWI6IHRydWUsXG4gICAgICBsaXN0ZW5EZWxheTogNTAwLFxuICAgIH07XG5cbiAgICBpZiAoZW5hYmxlV29ya2VyKSB7XG4gICAgICB0aGlzLndvcmtmbG93cy5zZXR1cFdvcmtlcih7XG4gICAgICAgIC4uLmRlZmF1bHRXb3JrZXJPcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zLndvcmtlck9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJvb3Qoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UsIG9wdGlvbnM6IFNvbmFtdVNlcnZlck9wdGlvbnMpIHtcbiAgICBjb25zdCBwb3J0ID0gb3B0aW9ucy5saXN0ZW4/LnBvcnQgPz8gMzAwMDtcbiAgICBjb25zdCBob3N0ID0gb3B0aW9ucy5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIjtcblxuICAgIHNlcnZlci5hZGRIb29rKFwib25DbG9zZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBvcHRpb25zLmxpZmVjeWNsZT8ub25TaHV0ZG93bj8uKHNlcnZlcik7XG4gICAgICBhd2FpdCB0aGlzLndvcmtmbG93cy5kZXN0cm95KCk7XG4gICAgICBhd2FpdCB0aGlzLmRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNodXRkb3duID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZHVyaW5nIHNodXRkb3duOlwiLCBlcnIpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgc2h1dGRvd24pO1xuICAgIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIHNodXRkb3duKTtcblxuICAgIGlmIChvcHRpb25zLmxpZmVjeWNsZT8ub25FcnJvcikge1xuICAgICAgc2VydmVyLnNldEVycm9ySGFuZGxlcihvcHRpb25zLmxpZmVjeWNsZT8ub25FcnJvcik7XG4gICAgfVxuXG4gICAgc2VydmVyXG4gICAgICAubGlzdGVuKHsgcG9ydCwgaG9zdCB9KVxuICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLndvcmtmbG93cy5zdGFydFdvcmtlcigpO1xuICAgICAgICBhd2FpdCBvcHRpb25zLmxpZmVjeWNsZT8ub25TdGFydD8uKHNlcnZlcik7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHQ7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiRmFpbGVkIHRvIHN0YXJ0IHNlcnZlcjpcIiwgZXJyKSk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlRmlsZUNoYW5nZShldmVudDogc3RyaW5nLCBmaWxlUGF0aDogQWJzb2x1dGVQYXRoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7LKrIOuyiOynuCDtjIzsnbzsnbTrqbQgSE1SIOyLnOyekSDsi5zqsIQg6riw66GdXG4gICAgaWYgKHRoaXMucGVuZGluZ0ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5obXJTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdGaWxlcy5wdXNoKGZpbGVQYXRoKTtcblxuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUodGhpcy5hcGlSb290UGF0aCwgZmlsZVBhdGgpO1xuICAgIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0O1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYERldGVjdGVkKCR7ZXZlbnR9KTogJHtjaGFsay5ibHVlKHJlbGF0aXZlUGF0aCl9YCkpO1xuXG4gICAgYXdhaXQgdGhpcy5zeW5jZXIuc3luY0Zyb21XYXRjaGVyKGV2ZW50LCBmaWxlUGF0aCk7XG5cbiAgICAvLyDsspjrpqwg7JmE66OM65CcIO2MjOydvOydhCDrjIDquLAg66qp66Gd7JeQ7IScIOygnOqxsFxuICAgIHRoaXMucGVuZGluZ0ZpbGVzID0gdGhpcy5wZW5kaW5nRmlsZXMuc2xpY2UoMSk7XG5cbiAgICAvLyDrqqjrk6Ag7YyM7J28IOyymOumrOqwgCDsmYTro4zrkJjrqbQg7LWc7KKFIOuplOyLnOyngCDstpzroKVcbiAgICBpZiAodGhpcy5wZW5kaW5nRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaEhNUigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluaXNoSE1SKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3luY2VyLnJlbmV3Q2hlY2tzdW1zKCk7XG5cbiAgICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0b3RhbFRpbWUgPSBlbmRUaW1lIC0gdGhpcy5obXJTdGFydFRpbWU7XG4gICAgY29uc3QgW2NoYWxrLCB7IGNlbnRlclRleHQgfV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHQsXG4gICAgICBpbXBvcnQoXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIiksXG4gICAgXSk7XG4gICAgY29uc3QgbXNnID0gYEhNUiBEb25lISAke2NoYWxrLmJvbGQud2hpdGUoYCR7dG90YWxUaW1lfW1zYCl9YDtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsYWNrLmJnR3JlZW4oY2VudGVyVGV4dChtc2cpKSk7XG4gIH1cblxuICBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgQmFzZU1vZGVsIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCIpO1xuICAgIGF3YWl0IEJhc2VNb2RlbC5kZXN0cm95KCk7XG4gICAgYXdhaXQgdGhpcy5fd29ya2Zsb3dzPy5kZXN0cm95KCk7XG4gICAgYXdhaXQgdGhpcy53YXRjaGVyPy5jbG9zZSgpO1xuICAgIHRoaXMuc3RvcmFnZT8uZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnQgY29uc3QgU29uYW11ID0gbmV3IFNvbmFtdUNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiQXN5bmNMb2NhbFN0b3JhZ2UiLCJvcyIsInBhdGgiLCJjcmVhdGVNb2NrU1NFRmFjdG9yeSIsIkRCIiwiaXNEYWVtb25TZXJ2ZXIiLCJOYWl0ZSIsIlNvbmFtdUNsYXNzIiwiaXNJbml0aWFsaXplZCIsImFzeW5jTG9jYWxTdG9yYWdlIiwidXBsb2FkU3RvcmFnZSIsImdldENvbnRleHQiLCJzdG9yZSIsImdldFN0b3JlIiwiY29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInJlcXVlc3QiLCJyZXBseSIsImhlYWRlcnMiLCJjcmVhdGVTU0UiLCJzY2hlbWEiLCJuYWl0ZVN0b3JlIiwiTWFwIiwiRXJyb3IiLCJnZXRVcGxvYWRDb250ZXh0IiwidXBsb2FkQ29udGV4dCIsIl9hcGlSb290UGF0aCIsImFwaVJvb3RQYXRoIiwiYXBwUm9vdFBhdGgiLCJzcGxpdCIsInNlcCIsInNsaWNlIiwiam9pbiIsIl9kYkNvbmZpZyIsImRiQ29uZmlnIiwiX3N5bmNlciIsInN5bmNlciIsIl9jb25maWciLCJjb25maWciLCJfc2VjcmV0cyIsInNlY3JldHMiLCJfc3RvcmFnZSIsInN0b3JhZ2UiLCJfd29ya2Zsb3dzIiwid29ya2Zsb3dzIiwid2F0Y2hlciIsInBlbmRpbmdGaWxlcyIsImhtclN0YXJ0VGltZSIsInNlcnZlciIsImluaXRGb3JUZXN0aW5nIiwiaW5pdCIsInVuZGVmaW5lZCIsImRvU2lsZW50IiwiZW5hYmxlU3luYyIsImZvclRlc3RpbmciLCJjaGFsayIsImRlZmF1bHQiLCJjb25zb2xlIiwidGltZSIsImN5YW4iLCJmaW5kQXBpUm9vdFBhdGgiLCJsb2FkQ29uZmlnIiwiZGF0YWJhc2UiLCJBTlRIUk9QSUNfQVBJX0tFWSIsImFudGhyb3BpY19hcGlfa2V5IiwiVk9ZQUdFX0FQSV9LRVkiLCJ2b3lhZ2VfYXBpX2tleSIsIk9QRU5BSV9BUElfS0VZIiwib3BlbmFpX2FwaV9rZXkiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiZ2VuZXJhdGVEQkNvbmZpZyIsImxvZyIsImdyZWVuIiwiRW50aXR5TWFuYWdlciIsImF1dG9sb2FkIiwiaW5pdGlhbGl6ZVdvcmtmbG93cyIsInRhc2tzIiwiU3luY2VyIiwiYXV0b2xvYWRUeXBlcyIsImF1dG9sb2FkTW9kZWxzIiwiYXV0b2xvYWRBcGlzIiwiYXV0b2xvYWRXb3JrZmxvd3MiLCJUZW1wbGF0ZU1hbmFnZXIiLCJpc0xvY2FsIiwiaXNUZXN0Iiwic2V0dXBCaW9tZSIsImlzSG90UmVsb2FkU2VydmVyIiwic3luYyIsInN0YXJ0V2F0Y2hlciIsInRpbWVFbmQiLCJjcmVhdGVTZXJ2ZXIiLCJpbml0T3B0aW9ucyIsIm9wdGlvbnMiLCJmYXN0aWZ5IiwicGx1Z2lucyIsInJlZ2lzdGVyUGx1Z2lucyIsImF1dGgiLCJzZXNzaW9uIiwicmVnaXN0ZXJBdXRoIiwid2l0aEZhc3RpZnkiLCJhcGlDb25maWciLCJib290IiwidGltZXpvbmUiLCJhcGkiLCJmb3JtYXRJblRpbWVab25lIiwiSVNPX0RBVEVfUkVHRVgiLCJEQVRFX0ZPUk1BVCIsInNldFJlcGx5U2VyaWFsaXplciIsInBheWxvYWQiLCJKU09OIiwic3RyaW5naWZ5IiwiX2tleSIsInZhbHVlIiwidGVzdCIsIkRhdGUiLCJnZXQiLCJyb3V0ZSIsInByZWZpeCIsIl9yZXF1ZXN0IiwiX3JlcGx5IiwiYXBpcyIsInNvbmFtdVVJQXBpUGx1Z2luIiwicmVnaXN0ZXIiLCJhbGwiLCJ1cmwiLCJzdGFydHNXaXRoIiwiZm91bmQiLCJmaW5kIiwiaHR0cE1ldGhvZCIsIm1ldGhvZCIsInRvVXBwZXJDYXNlIiwiY3JlYXRlQXBpSGFuZGxlciIsIk5vdEZvdW5kRXhjZXB0aW9uIiwibW9kZWxzIiwibW9kZWxOYW1lIiwiaGFuZGxlciIsImd1YXJkcyIsImV2ZXJ5IiwiZ3VhcmQiLCJndWFyZEhhbmRsZXIiLCJnZXRab2RPYmplY3RGcm9tQXBpIiwiUmVxVHlwZSIsInR5cGVzIiwid2hpY2giLCJyZXFCb2R5IiwiZmFzdGlmeUNhc3RlciIsInBhcnNlIiwiZSIsIlpvZEVycm9yIiwiaHVtYW5pemVab2RFcnJvciIsIm1lc3NhZ2VzIiwibWFwIiwiaXNzdWUiLCJtZXNzYWdlIiwiQmFkUmVxdWVzdEV4Y2VwdGlvbiIsInpvZEVycm9yIiwidHlwZSIsImNvbnRlbnRUeXBlIiwiY3JlYXRlQ29udGV4dCIsIkFwaVBhcmFtVHlwZSIsImFyZ3MiLCJwYXJhbWV0ZXJzIiwicGFyYW0iLCJpc0NvbnRleHQiLCJuYW1lIiwiaW52b2tlTW9kZWxNZXRob2QiLCJtb2RlbCIsInJ1biIsInJlc3VsdCIsIm1ldGhvZE5hbWUiLCJhcHBseSIsImNyZWF0ZVNTRUZhY3RvcnkiLCJfZXZlbnRzIiwic29ja2V0IiwiYmluZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY29udGV4dFByb3ZpZGVyIiwiY3JlYXRlU3RvcmUiLCJ1c2VyIiwicGFzc3BvcnQiLCJsb2dpbiIsImxvZ291dCIsIndhdGNoUGF0aCIsImNob2tpZGFyIiwid2F0Y2giLCJpZ25vcmVkIiwic3RhdHMiLCJpc0ZpbGUiLCJlbmRzV2l0aCIsInBlcnNpc3RlbnQiLCJpZ25vcmVJbml0aWFsIiwib24iLCJldmVudCIsImZpbGVQYXRoIiwiYWJzb2x1dGVQYXRoIiwiaXNDb25maWdUcyIsInJlbGF0aXZlUGF0aCIsInJlcGxhY2UiLCJib2xkIiwiYmx1ZSIsImtpbGwiLCJwaWQiLCJoYW5kbGVGaWxlQ2hhbmdlIiwiZXJyb3IiLCJydW5TY3JpcHQiLCJmbiIsImRlc3Ryb3kiLCJwbHVnaW5zTW9kdWxlcyIsImNvcnMiLCJmb3JtYm9keSIsIm11bHRpcGFydCIsInFzIiwic3NlIiwic3RhdGljIiwicmVnaXN0ZXJQbHVnaW4iLCJrZXkiLCJwbHVnaW5OYW1lIiwib3B0aW9uIiwiZW50cmllcyIsImN1c3RvbSIsImZhc3RpZnlQYXNzcG9ydCIsImluaXRpYWxpemUiLCJzZWN1cmVTZXNzaW9uIiwicmVnaXN0ZXJVc2VyU2VyaWFsaXplciIsInJlZ2lzdGVyVXNlckRlc2VyaWFsaXplciIsInNlcmlhbGl6ZWQiLCJ1c2VyU2VyaWFsaXplciIsInVzZXJEZXNlcmlhbGl6ZXIiLCJXb3JrZmxvd01hbmFnZXIiLCJnZXREQkNvbmZpZyIsImVuYWJsZVdvcmtlciIsImRlZmF1bHRXb3JrZXJPcHRpb25zIiwiY29uY3VycmVuY3kiLCJjcHVzIiwidXNlUHViU3ViIiwibGlzdGVuRGVsYXkiLCJzZXR1cFdvcmtlciIsIndvcmtlck9wdGlvbnMiLCJwb3J0IiwibGlzdGVuIiwiaG9zdCIsImFkZEhvb2siLCJsaWZlY3ljbGUiLCJvblNodXRkb3duIiwic2h1dGRvd24iLCJjbG9zZSIsImV4aXQiLCJlcnIiLCJvbkVycm9yIiwic2V0RXJyb3JIYW5kbGVyIiwidGhlbiIsInN0YXJ0V29ya2VyIiwib25TdGFydCIsImNhdGNoIiwicmVkIiwibm93IiwicHVzaCIsInJlbGF0aXZlIiwic3luY0Zyb21XYXRjaGVyIiwiZmluaXNoSE1SIiwicmVuZXdDaGVja3N1bXMiLCJlbmRUaW1lIiwidG90YWxUaW1lIiwiY2VudGVyVGV4dCIsIm1zZyIsIndoaXRlIiwiYmxhY2siLCJiZ0dyZWVuIiwiQmFzZU1vZGVsIiwiU29uYW11Il0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNB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
|
|
542
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvc29uYW11LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiYXN5bmNfaG9va3NcIjtcbmltcG9ydCB0eXBlIHsgRlNXYXRjaGVyIH0gZnJvbSBcImNob2tpZGFyXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlJbnN0YW5jZSwgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IEluY29taW5nTWVzc2FnZSwgU2VydmVyLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBab2RPYmplY3QgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2NrU1NFRmFjdG9yeSwgREIsIGlzRGFlbW9uU2VydmVyIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHR5cGUgeyBTdG9yYWdlTWFuYWdlciB9IGZyb20gXCIuLi9zdG9yYWdlL3N0b3JhZ2UtbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBTeW5jZXIgfSBmcm9tIFwiLi4vc3luY2VyL3N5bmNlclwiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd01hbmFnZXIgfSBmcm9tIFwiLi4vdGFza3Mvd29ya2Zsb3ctbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBTb25hbXVGYXN0aWZ5Q29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdUNvbmZpZywgU29uYW11U2VydmVyT3B0aW9ucywgU29uYW11VGFza09wdGlvbnMgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQXV0aENvbnRleHQsIENvbnRleHQsIFVwbG9hZENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgdHlwZSBTb25hbXVTZWNyZXRzID0ge1xuICBhbnRocm9waWNfYXBpX2tleT86IHN0cmluZztcbiAgdm95YWdlX2FwaV9rZXk/OiBzdHJpbmc7XG4gIG9wZW5haV9hcGlfa2V5Pzogc3RyaW5nO1xufTtcbmNsYXNzIFNvbmFtdUNsYXNzIHtcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGFzeW5jTG9jYWxTdG9yYWdlOiBBc3luY0xvY2FsU3RvcmFnZTx7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgfT4gPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2UoKTtcblxuICBwdWJsaWMgdXBsb2FkU3RvcmFnZTogQXN5bmNMb2NhbFN0b3JhZ2U8e1xuICAgIHVwbG9hZENvbnRleHQ6IFVwbG9hZENvbnRleHQ7XG4gIH0+ID0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlKCk7XG5cbiAgcHVibGljIGdldENvbnRleHQoKTogQ29udGV4dCB7XG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmFzeW5jTG9jYWxTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgaWYgKHN0b3JlPy5jb250ZXh0KSB7XG4gICAgICByZXR1cm4gc3RvcmUuY29udGV4dDtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICAvLyDthYzsiqTtjIUg7ZmY6rK97JeQ7IScIOy7qO2FjeyKpO2KuOqwgCDso7zsnoXrkJjsp4Ag7JWK7J2AIOqyveyasCDruYgg7Luo7YWN7Iqk7Yq4IOumrO2EtFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWVzdDogbnVsbCxcbiAgICAgICAgcmVwbHk6IG51bGwsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBjcmVhdGVTU0U6IChzY2hlbWE6IFpvZE9iamVjdCkgPT4gY3JlYXRlTW9ja1NTRUZhY3Rvcnkoc2NoZW1hKSxcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiDthYzsiqTtjIUg7ZmY6rK97JeQ7IScIOy7qO2FjeyKpO2KuOqwgCDso7zsnoXrkJjsp4Ag7JWK7J2AIOqyveyasCDruYgg7Luo7YWN7Iqk7Yq4IOumrO2EtFxuICAgICAgICBuYWl0ZVN0b3JlOiBuZXcgTWFwPHN0cmluZywgYW55PigpLFxuICAgICAgfSBhcyB1bmtub3duIGFzIENvbnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvbmFtdSBjYW5ub3QgZmluZCBjb250ZXh0XCIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRVcGxvYWRDb250ZXh0KCk6IFVwbG9hZENvbnRleHQge1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy51cGxvYWRTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgaWYgKHN0b3JlPy51cGxvYWRDb250ZXh0KSB7XG4gICAgICByZXR1cm4gc3RvcmUudXBsb2FkQ29udGV4dDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU29uYW11IGNhbm5vdCBmaW5kIHVwbG9hZCBjb250ZXh0LiBEaWQgeW91IHVzZSBAdXBsb2FkIGRlY29yYXRvcj9cIik7XG4gIH1cblxuICBwcml2YXRlIF9hcGlSb290UGF0aDogQWJzb2x1dGVQYXRoIHwgbnVsbCA9IG51bGw7XG4gIHNldCBhcGlSb290UGF0aChhcGlSb290UGF0aDogQWJzb2x1dGVQYXRoKSB7XG4gICAgdGhpcy5fYXBpUm9vdFBhdGggPSBhcGlSb290UGF0aDtcbiAgfVxuICBnZXQgYXBpUm9vdFBhdGgoKTogQWJzb2x1dGVQYXRoIHtcbiAgICBpZiAodGhpcy5fYXBpUm9vdFBhdGggPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvbmFtdSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWRcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hcGlSb290UGF0aDtcbiAgfVxuICBnZXQgYXBwUm9vdFBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGlSb290UGF0aC5zcGxpdChwYXRoLnNlcCkuc2xpY2UoMCwgLTEpLmpvaW4ocGF0aC5zZXApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGJDb25maWc6IFNvbmFtdURCQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIHNldCBkYkNvbmZpZyhkYkNvbmZpZzogU29uYW11REJDb25maWcpIHtcbiAgICB0aGlzLl9kYkNvbmZpZyA9IGRiQ29uZmlnO1xuICB9XG4gIGdldCBkYkNvbmZpZygpOiBTb25hbXVEQkNvbmZpZyB7XG4gICAgaWYgKHRoaXMuX2RiQ29uZmlnID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGJDb25maWc7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jZXI6IFN5bmNlciB8IG51bGwgPSBudWxsO1xuICBzZXQgc3luY2VyKHN5bmNlcjogU3luY2VyKSB7XG4gICAgdGhpcy5fc3luY2VyID0gc3luY2VyO1xuICB9XG4gIGdldCBzeW5jZXIoKTogU3luY2VyIHtcbiAgICBpZiAodGhpcy5fc3luY2VyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3luY2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlnOiBTb25hbXVDb25maWcgfCBudWxsID0gbnVsbDtcbiAgc2V0IGNvbmZpZyhjb25maWc6IFNvbmFtdUNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgfVxuICBnZXQgY29uZmlnKCk6IFNvbmFtdUNvbmZpZyB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU29uYW11IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgX3NlY3JldHM6IFNvbmFtdVNlY3JldHMgfCBudWxsID0gbnVsbDtcbiAgc2V0IHNlY3JldHMoc2VjcmV0czogU29uYW11U2VjcmV0cykge1xuICAgIHRoaXMuX3NlY3JldHMgPSBzZWNyZXRzO1xuICB9XG4gIGdldCBzZWNyZXRzKCk6IFNvbmFtdVNlY3JldHMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjcmV0cztcbiAgfVxuXG4gIHByaXZhdGUgX3N0b3JhZ2U6IFN0b3JhZ2VNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBTdG9yYWdlTWFuYWdlciDsnbjsiqTthLTsiqRcbiAgICovXG4gIGdldCBzdG9yYWdlKCk6IFN0b3JhZ2VNYW5hZ2VyIHtcbiAgICBpZiAoIXRoaXMuX3N0b3JhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0b3JhZ2UgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiBDaGVjayBzdG9yYWdlIGNvbmZpZy5cIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zdG9yYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBfd29ya2Zsb3dzOiBXb3JrZmxvd01hbmFnZXIgfCBudWxsID0gbnVsbDtcbiAgZ2V0IHdvcmtmbG93cygpOiBXb3JrZmxvd01hbmFnZXIge1xuICAgIGlmICh0aGlzLl93b3JrZmxvd3MgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvbmFtdSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3dvcmtmbG93cztcbiAgfVxuXG4gIC8vIEhNUiDsspjrpqxcbiAgcHVibGljIHdhdGNoZXI6IEZTV2F0Y2hlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBlbmRpbmdGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBobXJTdGFydFRpbWU6IG51bWJlciA9IDA7XG5cbiAgcHVibGljIHNlcnZlcjogRmFzdGlmeUluc3RhbmNlIHwgbnVsbCA9IG51bGw7XG5cbiAgYXN5bmMgaW5pdEZvclRlc3RpbmcoKSB7XG4gICAgYXdhaXQgdGhpcy5pbml0KHRydWUsIGZhbHNlLCB1bmRlZmluZWQsIHRydWUpO1xuICB9XG5cbiAgYXN5bmMgaW5pdChcbiAgICBkb1NpbGVudDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGVuYWJsZVN5bmM6IGJvb2xlYW4gPSB0cnVlLFxuICAgIGFwaVJvb3RQYXRoPzogQWJzb2x1dGVQYXRoLFxuICAgIGZvclRlc3Rpbmc6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKSB7XG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZG9TaWxlbnQpIHtcbiAgICAgIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0O1xuICAgICAgY29uc29sZS50aW1lKGNoYWxrLmN5YW4oYFNvbmFtdS5pbml0JHtmb3JUZXN0aW5nID8gXCIgZm9yIHRlc3RpbmdcIiA6IFwiXCJ9YCkpO1xuICAgIH1cblxuICAgIC8vIEFQSSDro6jtirgg7Yyo7IqkXG4gICAgY29uc3QgeyBmaW5kQXBpUm9vdFBhdGggfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL3V0aWxzXCIpO1xuICAgIHRoaXMuYXBpUm9vdFBhdGggPSBhcGlSb290UGF0aCA/PyBmaW5kQXBpUm9vdFBhdGgoKTtcblxuICAgIGNvbnN0IHsgbG9hZENvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jb25maWdcIik7XG4gICAgdGhpcy5jb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKHRoaXMuYXBpUm9vdFBhdGgpO1xuICAgIC8vIHNvbmFtdS5jb25maWcudHMg6riw67O46rCSIOyEpOyglVxuICAgIHRoaXMuY29uZmlnLmRhdGFiYXNlLmRhdGFiYXNlID0gdGhpcy5jb25maWcuZGF0YWJhc2UuZGF0YWJhc2UgPz8gXCJwb3N0Z3Jlc3FsXCI7XG5cbiAgICAvLyBBUEkg7YKkIO2ZmOqyveuzgOyImCDroZzrk5xcbiAgICBjb25zdCBzZWNyZXRzOiBTb25hbXVTZWNyZXRzID0ge307XG4gICAgaWYgKHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZKSB7XG4gICAgICBzZWNyZXRzLmFudGhyb3BpY19hcGlfa2V5ID0gcHJvY2Vzcy5lbnYuQU5USFJPUElDX0FQSV9LRVk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5WT1lBR0VfQVBJX0tFWSkge1xuICAgICAgc2VjcmV0cy52b3lhZ2VfYXBpX2tleSA9IHByb2Nlc3MuZW52LlZPWUFHRV9BUElfS0VZO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVkpIHtcbiAgICAgIHNlY3JldHMub3BlbmFpX2FwaV9rZXkgPSBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHNlY3JldHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VjcmV0cyA9IHNlY3JldHM7XG4gICAgfVxuXG4gICAgLy8gREIg66Gc65OcXG4gICAgY29uc3QgeyBEQiB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZGF0YWJhc2UvZGJcIik7XG4gICAgdGhpcy5kYkNvbmZpZyA9IERCLmdlbmVyYXRlREJDb25maWcodGhpcy5jb25maWcuZGF0YWJhc2UpO1xuICAgIGlmICghZG9TaWxlbnQpIHtcbiAgICAgIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0O1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oXCJEQiBDb25maWcgTG9hZGVkIVwiKSk7XG4gICAgfVxuXG4gICAgLy8gRW50aXR5IOuhnOuTnFxuICAgIC8vIO2FjOyKpO2KuOyXkOyEnOuPhCBFbnRpdHkg7KCV67O064qUIO2VhOyalO2VqeuLiOuLpC5cbiAgICAvLyB1cHNlcnTqsIAg7KCc64yA66GcIOyekeuPme2VmOugpOuptCBlbnRpdHnsnZggdW5pcXVlIGluZGV4IOygleuztOqwgCDtlYTsmpTtlZjquLAg65WM66y47J6F64uI64ukLlxuICAgIGNvbnN0IHsgRW50aXR5TWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCIpO1xuICAgIGF3YWl0IEVudGl0eU1hbmFnZXIuYXV0b2xvYWQoZG9TaWxlbnQpO1xuXG4gICAgLy8g7YWM7Iqk7YyF7J24IOqyveyasCDsi7Htgawg7JeG7J20IOykkeuLqFxuICAgIGlmIChmb3JUZXN0aW5nKSB7XG4gICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRhc2sg65Ox66GdXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya2Zsb3dzKHRoaXMuY29uZmlnLnRhc2tzKTtcblxuICAgIC8vIFN5bmNlclxuICAgIGNvbnN0IHsgU3luY2VyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9zeW5jZXIvc3luY2VyXCIpO1xuICAgIHRoaXMuc3luY2VyID0gbmV3IFN5bmNlcigpO1xuXG4gICAgLy8gQXV0b2xvYWQ6IE1vZGVscyAvIFR5cGVzIC8gQVBJc1xuICAgIGF3YWl0IHRoaXMuc3luY2VyLmF1dG9sb2FkVHlwZXMoKTtcbiAgICBhd2FpdCB0aGlzLnN5bmNlci5hdXRvbG9hZE1vZGVscygpO1xuICAgIGF3YWl0IHRoaXMuc3luY2VyLmF1dG9sb2FkQXBpcygpO1xuICAgIGF3YWl0IHRoaXMuc3luY2VyLmF1dG9sb2FkV29ya2Zsb3dzKCk7XG5cbiAgICBjb25zdCB7IFRlbXBsYXRlTWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdGVtcGxhdGVcIik7XG4gICAgYXdhaXQgVGVtcGxhdGVNYW5hZ2VyLmF1dG9sb2FkKCk7XG5cbiAgICBjb25zdCB7IGlzTG9jYWwsIGlzVGVzdCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvY29udHJvbGxlclwiKTtcbiAgICBpZiAoaXNMb2NhbCgpKSB7XG4gICAgICAvLyDroZzsu6zsl5DshJzripQg7L2U65OcIOyDneyEseydhCDsnITtlbQgQmlvbWUg7IWL7JeF7J20IO2VhOyalO2VqCAo7ZiE7J6sIGFwaVJvb3RQYXRoIOyghOuLrO2VmOyXrCDsi6TtlokpXG4gICAgICAoYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvZm9ybWF0dGVyXCIpKS5zZXR1cEJpb21lKHRoaXMuYXBpUm9vdFBhdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgaXNIb3RSZWxvYWRTZXJ2ZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIik7XG4gICAgaWYgKGlzTG9jYWwoKSAmJiAhaXNUZXN0KCkgJiYgaXNIb3RSZWxvYWRTZXJ2ZXIoKSAmJiBlbmFibGVTeW5jKSB7XG4gICAgICBhd2FpdCB0aGlzLnN5bmNlci5zeW5jKCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRXYXRjaGVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICBpZiAoIWRvU2lsZW50KSB7XG4gICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgIGNvbnNvbGUudGltZUVuZChjaGFsay5jeWFuKFwiU29uYW11LmluaXRcIikpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlcnZlcihpbml0T3B0aW9ucz86IHsgZW5hYmxlU3luYz86IGJvb2xlYW47IGRvU2lsZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCA9PT0gZmFsc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdChpbml0T3B0aW9ucz8uZG9TaWxlbnQsIGluaXRPcHRpb25zPy5lbmFibGVTeW5jKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jb25maWcuc2VydmVyO1xuICAgIGNvbnN0IGZhc3RpZnkgPSAoYXdhaXQgaW1wb3J0KFwiZmFzdGlmeVwiKSkuZGVmYXVsdDtcbiAgICBjb25zdCBzZXJ2ZXIgPSBmYXN0aWZ5KG9wdGlvbnMuZmFzdGlmeSk7XG4gICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXI7XG5cbiAgICAvLyBTdG9yYWdlIOyEpOyglSDihpIgU3RvcmFnZU1hbmFnZXIg7IOd7ISxXG4gICAgaWYgKG9wdGlvbnMuc3RvcmFnZSkge1xuICAgICAgY29uc3QgeyBTdG9yYWdlTWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vc3RvcmFnZS9zdG9yYWdlLW1hbmFnZXJcIik7XG4gICAgICB0aGlzLl9zdG9yYWdlID0gbmV3IFN0b3JhZ2VNYW5hZ2VyKG9wdGlvbnMuc3RvcmFnZSk7XG4gICAgfVxuXG4gICAgLy8g7ZSM65+s6re47J24IOuTseuhnVxuICAgIGlmIChvcHRpb25zLnBsdWdpbnMpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJQbHVnaW5zKHNlcnZlciwgb3B0aW9ucy5wbHVnaW5zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hdXRoKSB7XG4gICAgICBpZiAoIW9wdGlvbnMucGx1Z2lucz8uc2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdXRoIHJlcXVpcmVzIHNlc3Npb24gcGx1Z2luLiBQbGVhc2UgYWRkIHBsdWdpbnMuc2Vzc2lvbiBjb25maWd1cmF0aW9uLlwiKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5yZWdpc3RlckF1dGgoc2VydmVyLCBvcHRpb25zLmF1dGgpO1xuICAgIH1cblxuICAgIC8vIEFQSSDrnbzsmrDtjIUg7ISk7KCVXG4gICAgYXdhaXQgdGhpcy53aXRoRmFzdGlmeShzZXJ2ZXIsIG9wdGlvbnMuYXBpQ29uZmlnLCB7XG4gICAgICBlbmFibGVTeW5jOiBpbml0T3B0aW9ucz8uZW5hYmxlU3luYyxcbiAgICAgIGRvU2lsZW50OiBpbml0T3B0aW9ucz8uZG9TaWxlbnQsXG4gICAgfSk7XG5cbiAgICAvLyDshJzrsoQg7Iuc7J6RXG4gICAgYXdhaXQgdGhpcy5ib290KHNlcnZlciwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gc2VydmVyO1xuICB9XG5cbiAgYXN5bmMgd2l0aEZhc3RpZnkoXG4gICAgc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2U8U2VydmVyLCBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlPixcbiAgICBjb25maWc6IFNvbmFtdUZhc3RpZnlDb25maWcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGVuYWJsZVN5bmM/OiBib29sZWFuO1xuICAgICAgZG9TaWxlbnQ/OiBib29sZWFuO1xuICAgIH0sXG4gICkge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQgPT09IGZhbHNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXQob3B0aW9ucz8uZG9TaWxlbnQsIG9wdGlvbnM/LmVuYWJsZVN5bmMpO1xuICAgIH1cblxuICAgIHRoaXMuc2VydmVyID0gc2VydmVyO1xuXG4gICAgLy8gdGltZXpvbmUg7ISk7KCVXG4gICAgY29uc3QgdGltZXpvbmUgPSB0aGlzLmNvbmZpZy5hcGkudGltZXpvbmU7XG4gICAgaWYgKHRpbWV6b25lKSB7XG4gICAgICAvLyDtg4DsnoTsobTsl5Ag66ee6rKMIOydkeuLtSDrgqDsp5wg7Iqk7Yq466eB7J2EIOuzgO2ZmO2VtOyjvOyWtOyVvCDtlanri4jri6QuXG4gICAgICAvLyDqsIDroLkgdGltZXpvbmXsnbQgXCJBc2lhL1Nlb3VsXCIg7J2066m0XG4gICAgICAvLyBcIjIwMjUtMTEtMjFUMDA6MDA6MDAuMDAwWlwiIOulvCBcIjIwMjUtMTEtMjFUMDk6MDA6MDArMDk6MDBcIiDsnLzroZwg67OA7ZmY7ZW07KO87Ja07JW8IO2VqeuLiOuLpC5cbiAgICAgIGNvbnN0IHsgZm9ybWF0SW5UaW1lWm9uZSB9ID0gYXdhaXQgaW1wb3J0KFwiZGF0ZS1mbnMtdHpcIik7XG5cbiAgICAgIC8vIElTTyA4NjAxIOuCoOynnCDtmJXsi50g7KCV6rec7IudICjsmIg6IDIwMjQtMDEtMTVUMDk6MzA6MDAuMDAwWilcbiAgICAgIGNvbnN0IElTT19EQVRFX1JFR0VYID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfShcXC5cXGR7M30pP1okLztcblxuICAgICAgLy8gVOulvCDrkZjrn6zsi7wg7J6R7J2A65Sw7Ji07ZGc6rCAIOyXhuuLpOuptCBcIjIwMjUtMTEtMTkxNzYzNTQ2MTg5MDAwMTg6NTY6MjkrMDk6MDBcIuyZgCDqsJnsnYAg6rKw6rO86rCAIOuCmOyYteuLiOuLpC5cbiAgICAgIC8vIOydtOuKlCBkYXRlLWZucyDtirnsnoXri4jri6QuXG4gICAgICAvLyDsnbTroIfqsowg7ZW064+EIOq0nOywruyKteuLiOuLpC4gXCIyMDI1LTExLTE5VDE4OjU2OjI5KzA5OjAwXCIg66qo7JaR7Jy866GcIOyemCDrgpjsmLXri4jri6QuXG4gICAgICBjb25zdCBEQVRFX0ZPUk1BVCA9IFwieXl5eS1NTS1kZCdUJ0hIOm1tOnNzWFhYXCI7XG5cbiAgICAgIHNlcnZlci5zZXRSZXBseVNlcmlhbGl6ZXIoKHBheWxvYWQpID0+IHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIChfa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgSVNPX0RBVEVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRJblRpbWVab25lKFxuICAgICAgICAgICAgICBuZXcgRGF0ZSh2YWx1ZSksXG4gICAgICAgICAgICAgIHRpbWV6b25lIGFzIGAke3N0cmluZ30vJHtzdHJpbmd9YCxcbiAgICAgICAgICAgICAgREFURV9GT1JNQVQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoIW9wdGlvbnM/LmRvU2lsZW50KSB7XG4gICAgICAgIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0O1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgVGltZXpvbmUgc2V0IHRvICR7dGltZXpvbmV9YCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOyghOyytCDrnbzsmrDtjIUg66as7Iqk7Yq4XG4gICAgc2VydmVyLmdldChcbiAgICAgIGAke3RoaXMuY29uZmlnLmFwaS5yb3V0ZS5wcmVmaXh9L3JvdXRlc2AsXG4gICAgICBhc3luYyAoX3JlcXVlc3QsIF9yZXBseSk6IFByb21pc2U8dHlwZW9mIHRoaXMuc3luY2VyLmFwaXM+ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luY2VyLmFwaXM7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBIZWFsdGhjaGVjayBBUElcbiAgICBzZXJ2ZXIuZ2V0KFxuICAgICAgYCR7dGhpcy5jb25maWcuYXBpLnJvdXRlLnByZWZpeH0vaGVhbHRoY2hlY2tgLFxuICAgICAgYXN5bmMgKF9yZXF1ZXN0LCBfcmVwbHkpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgICAgICByZXR1cm4gXCJva1wiO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gU29uYW11IFVJIEFQSVxuICAgIGNvbnN0IHsgc29uYW11VUlBcGlQbHVnaW4gfSA9IGF3YWl0IGltcG9ydChcIi4uL3VpL2FwaVwiKTtcbiAgICBzZXJ2ZXIucmVnaXN0ZXIoc29uYW11VUlBcGlQbHVnaW4pO1xuXG4gICAgLy8gQVBJIOudvOyasO2MhSAo66Gc7LusSE1SIOyDge2DnOyZgCDqtazrtoQpXG4gICAgY29uc3QgeyBpc0xvY2FsIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy9jb250cm9sbGVyXCIpO1xuICAgIGlmIChpc0xvY2FsKCkpIHtcbiAgICAgIHNlcnZlci5hbGwoXCIqXCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICAvLyBTb25hbXUgVUlcbiAgICAgICAgaWYgKHJlcXVlc3QudXJsLnN0YXJ0c1dpdGgoXCIvc29uYW11LXVpXCIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnN5bmNlci5hcGlzLmZpbmQoXG4gICAgICAgICAgKGFwaSkgPT5cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmFwaS5yb3V0ZS5wcmVmaXggKyBhcGkucGF0aCA9PT0gcmVxdWVzdC51cmwuc3BsaXQoXCI/XCIpWzBdICYmXG4gICAgICAgICAgICAoYXBpLm9wdGlvbnMuaHR0cE1ldGhvZCA/PyBcIkdFVFwiKSA9PT0gcmVxdWVzdC5tZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQXBpSGFuZGxlcihmb3VuZCwgY29uZmlnKShyZXF1ZXN0LCByZXBseSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdC51cmwuc3RhcnRzV2l0aChcIi9hcGkvXCIpKSB7XG4gICAgICAgICAgY29uc3QgeyBOb3RGb3VuZEV4Y2VwdGlvbiB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCIpO1xuICAgICAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihg7KG07J6s7ZWY7KeAIOyViuuKlCBBUEkg7KCR6re87J6F64uI64ukLiAke3JlcXVlc3QudXJsfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7J2867CYIO2MjOydvCDsoJHqt7zsi5wg67OE64+E7J2YIOyXkOufrCDstpzroKXtlZjsp4Ag7JWK7J2MXG4gICAgICAgIHJldHVybjtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGFwaSBvZiB0aGlzLnN5bmNlci5hcGlzKSB7XG4gICAgICAgIC8vIG1vZGVsXG4gICAgICAgIGlmICh0aGlzLnN5bmNlci5tb2RlbHNbYXBpLm1vZGVsTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7KCV7J2Y65CY7KeAIOyViuydgCDrqqjrjbjsl5Ag7KCR6re8ICR7YXBpLm1vZGVsTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJvdXRlXG4gICAgICAgIHNlcnZlci5yb3V0ZSh7XG4gICAgICAgICAgbWV0aG9kOiBhcGkub3B0aW9ucy5odHRwTWV0aG9kID8/IFwiR0VUXCIsXG4gICAgICAgICAgdXJsOiB0aGlzLmNvbmZpZy5hcGkucm91dGUucHJlZml4ICsgYXBpLnBhdGgsXG4gICAgICAgICAgaGFuZGxlcjogdGhpcy5jcmVhdGVBcGlIYW5kbGVyKGFwaSwgY29uZmlnKSxcbiAgICAgICAgfSk7IC8vIEVORCBzZXJ2ZXIucm91dGVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjcmVhdGVBcGlIYW5kbGVyKFxuICAgIGFwaTogRXh0ZW5kZWRBcGksXG4gICAgY29uZmlnOiBTb25hbXVGYXN0aWZ5Q29uZmlnLFxuICApOiAocmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsIHJlcGx5OiBGYXN0aWZ5UmVwbHkpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBhc3luYyAocmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsIHJlcGx5OiBGYXN0aWZ5UmVwbHkpOiBQcm9taXNlPHVua25vd24+ID0+IHtcbiAgICAgIChhcGkub3B0aW9ucy5ndWFyZHMgPz8gW10pLmV2ZXJ5KChndWFyZCkgPT4gY29uZmlnLmd1YXJkSGFuZGxlcihndWFyZCwgcmVxdWVzdCwgYXBpKSk7XG5cbiAgICAgIC8vIO2MjOudvOuvuO2EsCDsoJXrs7TroZwgem9kIOyKpO2CpOuniCDruYzrk5xcbiAgICAgIGNvbnN0IHsgZ2V0Wm9kT2JqZWN0RnJvbUFwaSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jb2RlLWNvbnZlcnRlcnNcIik7XG4gICAgICBjb25zdCBSZXFUeXBlID0gZ2V0Wm9kT2JqZWN0RnJvbUFwaShhcGksIHRoaXMuc3luY2VyLnR5cGVzKTtcblxuICAgICAgLy8gcmVxdWVzdCDtjIzsi7FcbiAgICAgIGNvbnN0IHdoaWNoID0gYXBpLm9wdGlvbnMuaHR0cE1ldGhvZCA9PT0gXCJHRVRcIiA/IFwicXVlcnlcIiA6IFwiYm9keVwiO1xuICAgICAgbGV0IHJlcUJvZHk6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICAgIH07XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGZhc3RpZnlDYXN0ZXIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2FzdGVyXCIpO1xuICAgICAgICByZXFCb2R5ID0gZmFzdGlmeUNhc3RlcihSZXFUeXBlKS5wYXJzZShyZXF1ZXN0W3doaWNoXSA/PyB7fSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IHsgWm9kRXJyb3IgfSA9IGF3YWl0IGltcG9ydChcInpvZFwiKTtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBab2RFcnJvcikge1xuICAgICAgICAgIGNvbnN0IHsgaHVtYW5pemVab2RFcnJvciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvem9kLWVycm9yXCIpO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gaHVtYW5pemVab2RFcnJvcihlKVxuICAgICAgICAgICAgLm1hcCgoaXNzdWUpID0+IGlzc3VlLm1lc3NhZ2UpXG4gICAgICAgICAgICAuam9pbihcIiBcIik7XG4gICAgICAgICAgY29uc3QgeyBCYWRSZXF1ZXN0RXhjZXB0aW9uIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIik7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24obWVzc2FnZXMsIHtcbiAgICAgICAgICAgIHpvZEVycm9yOiBlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ29udGVudC1UeXBlXG4gICAgICByZXBseS50eXBlKGFwaS5vcHRpb25zLmNvbnRlbnRUeXBlID8/IFwiYXBwbGljYXRpb24vanNvblwiKTtcblxuICAgICAgLy8gQ29udGV4dCDsg53shLFcbiAgICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbnRleHQoY29uZmlnLCByZXF1ZXN0LCByZXBseSk7XG5cbiAgICAgIC8vIOuqqOuNuCDrqZTshozrk5wgYXJncyDsg53shLHtlZjsl6wg7Zi47LacXG4gICAgICBjb25zdCB7IEFwaVBhcmFtVHlwZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdHlwZXMvdHlwZXNcIik7XG4gICAgICBjb25zdCBhcmdzID0gYXBpLnBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgICAvLyBDb250ZXh0IOyduOygneyFmFxuICAgICAgICBpZiAoQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZXFCb2R5W3BhcmFtLm5hbWVdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLmludm9rZU1vZGVsTWV0aG9kKGFwaSwgYXJncywgY29udGV4dCwgcmVwbHkpO1xuICAgIH07XG4gIH1cblxuICBhc3luYyBpbnZva2VNb2RlbE1ldGhvZChcbiAgICBhcGk6IEV4dGVuZGVkQXBpLFxuICAgIGFyZ3M6IHVua25vd25bXSxcbiAgICBjb250ZXh0OiBDb250ZXh0LFxuICAgIHJlcGx5OiBGYXN0aWZ5UmVwbHksXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zeW5jZXIubW9kZWxzW2FwaS5tb2RlbE5hbWVdO1xuICAgIHJldHVybiB0aGlzLmFzeW5jTG9jYWxTdG9yYWdlLnJ1bih7IGNvbnRleHQgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBtb2RlbOydgCDrqqjrjbgg7J247Iqk7YS07Iqk7J2066+A66GcIOuplOyEnOuTnCDtmLjstpwg6rCA64qlXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAobW9kZWwgYXMgYW55KVthcGkubWV0aG9kTmFtZV0uYXBwbHkobW9kZWwsIGFyZ3MpO1xuICAgICAgcmVwbHkudHlwZShhcGkub3B0aW9ucy5jb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIik7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVDb250ZXh0KFxuICAgIGNvbmZpZzogU29uYW11RmFzdGlmeUNvbmZpZyxcbiAgICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgICByZXBseTogRmFzdGlmeVJlcGx5LFxuICApOiBQcm9taXNlPENvbnRleHQ+IHtcbiAgICAvLyBjcmVhdGVTU0VGYWN0b3J5IO2VqOyImOyXkCDrr7jrpqwgcmVxdWVzdOydmCBzb2NrZXTqs7wgcmVwbHnrpbwg67CU7J2465SpLlxuICAgIGNvbnN0IHsgY3JlYXRlU1NFRmFjdG9yeSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vc3RyZWFtL3NzZVwiKTtcbiAgICBjb25zdCBjcmVhdGVTU0UgPSAoPFQgZXh0ZW5kcyBab2RPYmplY3Q+KFxuICAgICAgX3JlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICAgICAgX3JlcGx5OiBGYXN0aWZ5UmVwbHksXG4gICAgICBfZXZlbnRzOiBULFxuICAgICkgPT4gY3JlYXRlU1NFRmFjdG9yeShfcmVxdWVzdC5zb2NrZXQsIF9yZXBseSwgX2V2ZW50cykpLmJpbmQobnVsbCwgcmVxdWVzdCwgcmVwbHkpO1xuXG4gICAgY29uc3QgY29udGV4dDogQ29udGV4dCA9IHtcbiAgICAgIC4uLihhd2FpdCBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgIGNvbmZpZy5jb250ZXh0UHJvdmlkZXIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIHJlcGx5LFxuICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgY3JlYXRlU1NFLFxuICAgICAgICAgICAgbmFpdGVTdG9yZTogTmFpdGUuY3JlYXRlU3RvcmUoKSxcbiAgICAgICAgICAgIC8vIGF1dGhcbiAgICAgICAgICAgIHVzZXI6IHJlcXVlc3QudXNlciA/PyBudWxsLFxuICAgICAgICAgICAgcGFzc3BvcnQ6IHtcbiAgICAgICAgICAgICAgbG9naW46IHJlcXVlc3QubG9naW4uYmluZChyZXF1ZXN0KSBhcyBBdXRoQ29udGV4dFtcInBhc3Nwb3J0XCJdW1wibG9naW5cIl0sXG4gICAgICAgICAgICAgIGxvZ291dDogcmVxdWVzdC5sb2dvdXQuYmluZChyZXF1ZXN0KSBhcyBBdXRoQ29udGV4dFtcInBhc3Nwb3J0XCJdW1wibG9nb3V0XCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgcmVwbHksXG4gICAgICAgICksXG4gICAgICApKSxcbiAgICB9O1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXYXRjaGVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHdhdGNoUGF0aCA9IFtwYXRoLmpvaW4odGhpcy5hcGlSb290UGF0aCwgXCJzcmNcIildO1xuXG4gICAgY29uc3QgY2hva2lkYXIgPSAoYXdhaXQgaW1wb3J0KFwiY2hva2lkYXJcIikpLmRlZmF1bHQ7XG4gICAgdGhpcy53YXRjaGVyID0gY2hva2lkYXIud2F0Y2god2F0Y2hQYXRoLCB7XG4gICAgICBpZ25vcmVkOiAocGF0aCwgc3RhdHMpID0+XG4gICAgICAgICEhc3RhdHM/LmlzRmlsZSgpICYmICFwYXRoLmVuZHNXaXRoKFwiLnRzXCIpICYmICFwYXRoLmVuZHNXaXRoKFwiLmpzb25cIiksXG4gICAgICBwZXJzaXN0ZW50OiB0cnVlLFxuICAgICAgaWdub3JlSW5pdGlhbDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMud2F0Y2hlci5vbihcImFsbFwiLCBhc3luYyAoZXZlbnQ6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gZmlsZVBhdGggYXMgQWJzb2x1dGVQYXRoO1xuICAgICAgYXNzZXJ0KFxuICAgICAgICBhYnNvbHV0ZVBhdGguc3RhcnRzV2l0aCh0aGlzLmFwaVJvb3RQYXRoKSxcbiAgICAgICAgXCJGaWxlIHBhdGggaXMgbm90IHdpdGhpbiB0aGUgQVBJIHJvb3QgcGF0aFwiLFxuICAgICAgKTtcblxuICAgICAgaWYgKGV2ZW50ICE9PSBcImNoYW5nZVwiICYmIGV2ZW50ICE9PSBcImFkZFwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gc29uYW11LmNvbmZpZy50cyDrs4Dqsr0g7IucIOyerOyLnOyekVxuICAgICAgICBjb25zdCBpc0NvbmZpZ1RzID0gZmlsZVBhdGggPT09IHBhdGguam9pbih0aGlzLmFwaVJvb3RQYXRoLCBcInNyY1wiLCBcInNvbmFtdS5jb25maWcudHNcIik7XG5cbiAgICAgICAgaWYgKGlzQ29uZmlnVHMpIHtcbiAgICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBmaWxlUGF0aC5yZXBsYWNlKHRoaXMuYXBpUm9vdFBhdGgsIFwiYXBpXCIpO1xuICAgICAgICAgIGNvbnN0IGNoYWxrID0gKGF3YWl0IGltcG9ydChcImNoYWxrXCIpKS5kZWZhdWx0O1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY2hhbGsuYm9sZChgRGV0ZWN0ZWQoJHtldmVudH0pOiAke2NoYWxrLmJsdWUocmVsYXRpdmVQYXRoKX0gLSBSZXN0YXJ0aW5nLi4uYCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsIFwiU0lHVVNSMlwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpbGVDaGFuZ2UoZXZlbnQsIGFic29sdXRlUGF0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAgICBBIGZ1bmN0aW9uIHRoYXQgYXV0b21hdGljYWxseSBoYW5kbGVzIGluaXQgYW5kIGRlc3Ryb3kgd2hlbiB1c2luZyBTb25hbXUgdmlhIHNjcmlwdHMuICAgIFxuICAqL1xuICBhc3luYyBydW5TY3JpcHQoZm46ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICBhd2FpdCB0aGlzLmluaXQodHJ1ZSwgZmFsc2UsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZ2lzdGVyUGx1Z2lucyhzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSwgcGx1Z2luczogU29uYW11U2VydmVyT3B0aW9uc1tcInBsdWdpbnNcIl0pIHtcbiAgICBpZiAoIXBsdWdpbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwbHVnaW5zTW9kdWxlcyA9IHtcbiAgICAgIGNvcnM6IFwiQGZhc3RpZnkvY29yc1wiLFxuICAgICAgZm9ybWJvZHk6IFwiQGZhc3RpZnkvZm9ybWJvZHlcIixcbiAgICAgIG11bHRpcGFydDogXCJAZmFzdGlmeS9tdWx0aXBhcnRcIixcbiAgICAgIHFzOiBcImZhc3RpZnktcXNcIixcbiAgICAgIHNzZTogXCJmYXN0aWZ5LXNzZS12MlwiLFxuICAgICAgc3RhdGljOiBcIkBmYXN0aWZ5L3N0YXRpY1wiLFxuICAgICAgc2Vzc2lvbjogXCJAZmFzdGlmeS9zZWN1cmUtc2Vzc2lvblwiLFxuICAgIH0gYXMgY29uc3Q7XG5cbiAgICBjb25zdCByZWdpc3RlclBsdWdpbiA9IGFzeW5jIDxLIGV4dGVuZHMga2V5b2YgTm9uTnVsbGFibGU8dHlwZW9mIHBsdWdpbnM+PihcbiAgICAgIGtleTogSyxcbiAgICAgIHBsdWdpbk5hbWU6IHN0cmluZyxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHBsdWdpbnNba2V5XTtcbiAgICAgIGlmICghb3B0aW9uKSByZXR1cm47XG5cbiAgICAgIGlmIChvcHRpb24gPT09IHRydWUpIHtcbiAgICAgICAgc2VydmVyLnJlZ2lzdGVyKChhd2FpdCBpbXBvcnQocGx1Z2luTmFtZSkpLmRlZmF1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VydmVyLnJlZ2lzdGVyKChhd2FpdCBpbXBvcnQocGx1Z2luTmFtZSkpLmRlZmF1bHQsIG9wdGlvbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgcGx1Z2luTmFtZV0gb2YgT2JqZWN0LmVudHJpZXMocGx1Z2luc01vZHVsZXMpKSB7XG4gICAgICBhd2FpdCByZWdpc3RlclBsdWdpbihrZXkgYXMga2V5b2YgdHlwZW9mIHBsdWdpbnMsIHBsdWdpbk5hbWUpO1xuICAgIH1cblxuICAgIGlmIChwbHVnaW5zLmN1c3RvbSkge1xuICAgICAgcGx1Z2lucy5jdXN0b20oc2VydmVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZ2lzdGVyQXV0aChcbiAgICBzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSxcbiAgICBvcHRpb25zOiBOb25OdWxsYWJsZTxTb25hbXVTZXJ2ZXJPcHRpb25zW1wiYXV0aFwiXT4sXG4gICkge1xuICAgIC8vIGF3YWl0IGltcG9ydChcImZhc3RpZnlcIik7XG4gICAgY29uc3QgZmFzdGlmeVBhc3Nwb3J0ID0gKGF3YWl0IGltcG9ydChcIkBmYXN0aWZ5L3Bhc3Nwb3J0XCIpKS5kZWZhdWx0O1xuICAgIHNlcnZlci5yZWdpc3RlcihmYXN0aWZ5UGFzc3BvcnQuaW5pdGlhbGl6ZSgpKTtcbiAgICBzZXJ2ZXIucmVnaXN0ZXIoZmFzdGlmeVBhc3Nwb3J0LnNlY3VyZVNlc3Npb24oKSk7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBmYXN0aWZ5UGFzc3BvcnQucmVnaXN0ZXJVc2VyU2VyaWFsaXplcihhc3luYyAodXNlciwgX3JlcXVlc3QpID0+IHVzZXIpO1xuICAgICAgZmFzdGlmeVBhc3Nwb3J0LnJlZ2lzdGVyVXNlckRlc2VyaWFsaXplcihhc3luYyAoc2VyaWFsaXplZCwgX3JlcXVlc3QpID0+IHNlcmlhbGl6ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYXN0aWZ5UGFzc3BvcnQucmVnaXN0ZXJVc2VyU2VyaWFsaXplcihvcHRpb25zLnVzZXJTZXJpYWxpemVyKTtcbiAgICAgIGZhc3RpZnlQYXNzcG9ydC5yZWdpc3RlclVzZXJEZXNlcmlhbGl6ZXIob3B0aW9ucy51c2VyRGVzZXJpYWxpemVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVXb3JrZmxvd3Mob3B0aW9uczogU29uYW11VGFza09wdGlvbnMgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB7IFdvcmtmbG93TWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdGFza3Mvd29ya2Zsb3ctbWFuYWdlclwiKTtcbiAgICAvLyBOT1RFOiBAc29uYW11LWtpdC90YXNrcyDslYjsl5DshKAga25leCBjb25maWfrpbwg7IiY7KCV7ZWY6riwIOuVjOusuOyXkCBjb25uZWN0aW9u7J20IOyVhOuLjCBjb25maWcg7Ke466GcIOuztOuDheuLiOuLpC5cbiAgICB0aGlzLl93b3JrZmxvd3MgPSBuZXcgV29ya2Zsb3dNYW5hZ2VyKERCLmdldERCQ29uZmlnKFwid1wiKSk7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW5hYmxlV29ya2VyID0gb3B0aW9ucy5lbmFibGVXb3JrZXIgPz8gaXNEYWVtb25TZXJ2ZXIoKTtcbiAgICBjb25zdCBkZWZhdWx0V29ya2VyT3B0aW9ucyA9IHtcbiAgICAgIGNvbmN1cnJlbmN5OiBvcy5jcHVzKCkubGVuZ3RoIC0gMSxcbiAgICAgIHVzZVB1YlN1YjogdHJ1ZSxcbiAgICAgIGxpc3RlbkRlbGF5OiA1MDAsXG4gICAgfTtcblxuICAgIGlmIChlbmFibGVXb3JrZXIpIHtcbiAgICAgIHRoaXMud29ya2Zsb3dzLnNldHVwV29ya2VyKHtcbiAgICAgICAgLi4uZGVmYXVsdFdvcmtlck9wdGlvbnMsXG4gICAgICAgIC4uLm9wdGlvbnMud29ya2VyT3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYm9vdChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSwgb3B0aW9uczogU29uYW11U2VydmVyT3B0aW9ucykge1xuICAgIGNvbnN0IHBvcnQgPSBvcHRpb25zLmxpc3Rlbj8ucG9ydCA/PyAzMDAwO1xuICAgIGNvbnN0IGhvc3QgPSBvcHRpb25zLmxpc3Rlbj8uaG9zdCA/PyBcImxvY2FsaG9zdFwiO1xuXG4gICAgc2VydmVyLmFkZEhvb2soXCJvbkNsb3NlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IG9wdGlvbnMubGlmZWN5Y2xlPy5vblNodXRkb3duPy4oc2VydmVyKTtcbiAgICAgIGF3YWl0IHRoaXMud29ya2Zsb3dzLmRlc3Ryb3koKTtcbiAgICAgIGF3YWl0IHRoaXMuZGVzdHJveSgpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2h1dGRvd24gPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBkdXJpbmcgc2h1dGRvd246XCIsIGVycik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCBzaHV0ZG93bik7XG4gICAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgc2h1dGRvd24pO1xuXG4gICAgaWYgKG9wdGlvbnMubGlmZWN5Y2xlPy5vbkVycm9yKSB7XG4gICAgICBzZXJ2ZXIuc2V0RXJyb3JIYW5kbGVyKG9wdGlvbnMubGlmZWN5Y2xlPy5vbkVycm9yKTtcbiAgICB9XG5cbiAgICBzZXJ2ZXJcbiAgICAgIC5saXN0ZW4oeyBwb3J0LCBob3N0IH0pXG4gICAgICAudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMud29ya2Zsb3dzLnN0YXJ0V29ya2VyKCk7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMubGlmZWN5Y2xlPy5vblN0YXJ0Py4oc2VydmVyKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goYXN5bmMgKGVycikgPT4ge1xuICAgICAgICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdDtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJGYWlsZWQgdG8gc3RhcnQgc2VydmVyOlwiLCBlcnIpKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd24oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVGaWxlQ2hhbmdlKGV2ZW50OiBzdHJpbmcsIGZpbGVQYXRoOiBBYnNvbHV0ZVBhdGgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyDssqsg67KI7Ke4IO2MjOydvOydtOuptCBITVIg7Iuc7J6RIOyLnOqwhCDquLDroZ1cbiAgICBpZiAodGhpcy5wZW5kaW5nRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmhtclN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0ZpbGVzLnB1c2goZmlsZVBhdGgpO1xuXG4gICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFwaVJvb3RQYXRoLCBmaWxlUGF0aCk7XG4gICAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHQ7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChgRGV0ZWN0ZWQoJHtldmVudH0pOiAke2NoYWxrLmJsdWUocmVsYXRpdmVQYXRoKX1gKSk7XG5cbiAgICBhd2FpdCB0aGlzLnN5bmNlci5zeW5jRnJvbVdhdGNoZXIoZXZlbnQsIGZpbGVQYXRoKTtcblxuICAgIC8vIOyymOumrCDsmYTro4zrkJwg7YyM7J287J2EIOuMgOq4sCDrqqnroZ3sl5DshJwg7KCc6rGwXG4gICAgdGhpcy5wZW5kaW5nRmlsZXMgPSB0aGlzLnBlbmRpbmdGaWxlcy5zbGljZSgxKTtcblxuICAgIC8vIOuqqOuToCDtjIzsnbwg7LKY66as6rCAIOyZhOujjOuQmOuptCDstZzsooUg66mU7Iuc7KeAIOy2nOugpVxuICAgIGlmICh0aGlzLnBlbmRpbmdGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuZmluaXNoSE1SKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5pc2hITVIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zeW5jZXIucmVuZXdDaGVja3N1bXMoKTtcblxuICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRvdGFsVGltZSA9IGVuZFRpbWUgLSB0aGlzLmhtclN0YXJ0VGltZTtcbiAgICBjb25zdCBbY2hhbGssIHsgY2VudGVyVGV4dCB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdCxcbiAgICAgIGltcG9ydChcIi4uL3V0aWxzL2NvbnNvbGUtdXRpbFwiKSxcbiAgICBdKTtcbiAgICBjb25zdCBtc2cgPSBgSE1SIERvbmUhICR7Y2hhbGsuYm9sZC53aGl0ZShgJHt0b3RhbFRpbWV9bXNgKX1gO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuYmxhY2suYmdHcmVlbihjZW50ZXJUZXh0KG1zZykpKTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBCYXNlTW9kZWwgfSA9IGF3YWl0IGltcG9ydChcIi4uL2RhdGFiYXNlL2Jhc2UtbW9kZWxcIik7XG4gICAgYXdhaXQgQmFzZU1vZGVsLmRlc3Ryb3koKTtcbiAgICBhd2FpdCB0aGlzLl93b3JrZmxvd3M/LmRlc3Ryb3koKTtcbiAgICBhd2FpdCB0aGlzLndhdGNoZXI/LmNsb3NlKCk7XG4gIH1cbn1cbmV4cG9ydCBjb25zdCBTb25hbXUgPSBuZXcgU29uYW11Q2xhc3MoKTtcbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJBc3luY0xvY2FsU3RvcmFnZSIsIm9zIiwicGF0aCIsImNyZWF0ZU1vY2tTU0VGYWN0b3J5IiwiREIiLCJpc0RhZW1vblNlcnZlciIsIk5haXRlIiwiU29uYW11Q2xhc3MiLCJpc0luaXRpYWxpemVkIiwiYXN5bmNMb2NhbFN0b3JhZ2UiLCJ1cGxvYWRTdG9yYWdlIiwiZ2V0Q29udGV4dCIsInN0b3JlIiwiZ2V0U3RvcmUiLCJjb250ZXh0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicmVxdWVzdCIsInJlcGx5IiwiaGVhZGVycyIsImNyZWF0ZVNTRSIsInNjaGVtYSIsIm5haXRlU3RvcmUiLCJNYXAiLCJFcnJvciIsImdldFVwbG9hZENvbnRleHQiLCJ1cGxvYWRDb250ZXh0IiwiX2FwaVJvb3RQYXRoIiwiYXBpUm9vdFBhdGgiLCJhcHBSb290UGF0aCIsInNwbGl0Iiwic2VwIiwic2xpY2UiLCJqb2luIiwiX2RiQ29uZmlnIiwiZGJDb25maWciLCJfc3luY2VyIiwic3luY2VyIiwiX2NvbmZpZyIsImNvbmZpZyIsIl9zZWNyZXRzIiwic2VjcmV0cyIsIl9zdG9yYWdlIiwic3RvcmFnZSIsIl93b3JrZmxvd3MiLCJ3b3JrZmxvd3MiLCJ3YXRjaGVyIiwicGVuZGluZ0ZpbGVzIiwiaG1yU3RhcnRUaW1lIiwic2VydmVyIiwiaW5pdEZvclRlc3RpbmciLCJpbml0IiwidW5kZWZpbmVkIiwiZG9TaWxlbnQiLCJlbmFibGVTeW5jIiwiZm9yVGVzdGluZyIsImNoYWxrIiwiZGVmYXVsdCIsImNvbnNvbGUiLCJ0aW1lIiwiY3lhbiIsImZpbmRBcGlSb290UGF0aCIsImxvYWRDb25maWciLCJkYXRhYmFzZSIsIkFOVEhST1BJQ19BUElfS0VZIiwiYW50aHJvcGljX2FwaV9rZXkiLCJWT1lBR0VfQVBJX0tFWSIsInZveWFnZV9hcGlfa2V5IiwiT1BFTkFJX0FQSV9LRVkiLCJvcGVuYWlfYXBpX2tleSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJnZW5lcmF0ZURCQ29uZmlnIiwibG9nIiwiZ3JlZW4iLCJFbnRpdHlNYW5hZ2VyIiwiYXV0b2xvYWQiLCJpbml0aWFsaXplV29ya2Zsb3dzIiwidGFza3MiLCJTeW5jZXIiLCJhdXRvbG9hZFR5cGVzIiwiYXV0b2xvYWRNb2RlbHMiLCJhdXRvbG9hZEFwaXMiLCJhdXRvbG9hZFdvcmtmbG93cyIsIlRlbXBsYXRlTWFuYWdlciIsImlzTG9jYWwiLCJpc1Rlc3QiLCJzZXR1cEJpb21lIiwiaXNIb3RSZWxvYWRTZXJ2ZXIiLCJzeW5jIiwic3RhcnRXYXRjaGVyIiwidGltZUVuZCIsImNyZWF0ZVNlcnZlciIsImluaXRPcHRpb25zIiwib3B0aW9ucyIsImZhc3RpZnkiLCJTdG9yYWdlTWFuYWdlciIsInBsdWdpbnMiLCJyZWdpc3RlclBsdWdpbnMiLCJhdXRoIiwic2Vzc2lvbiIsInJlZ2lzdGVyQXV0aCIsIndpdGhGYXN0aWZ5IiwiYXBpQ29uZmlnIiwiYm9vdCIsInRpbWV6b25lIiwiYXBpIiwiZm9ybWF0SW5UaW1lWm9uZSIsIklTT19EQVRFX1JFR0VYIiwiREFURV9GT1JNQVQiLCJzZXRSZXBseVNlcmlhbGl6ZXIiLCJwYXlsb2FkIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9rZXkiLCJ2YWx1ZSIsInRlc3QiLCJEYXRlIiwiZ2V0Iiwicm91dGUiLCJwcmVmaXgiLCJfcmVxdWVzdCIsIl9yZXBseSIsImFwaXMiLCJzb25hbXVVSUFwaVBsdWdpbiIsInJlZ2lzdGVyIiwiYWxsIiwidXJsIiwic3RhcnRzV2l0aCIsImZvdW5kIiwiZmluZCIsImh0dHBNZXRob2QiLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsImNyZWF0ZUFwaUhhbmRsZXIiLCJOb3RGb3VuZEV4Y2VwdGlvbiIsIm1vZGVscyIsIm1vZGVsTmFtZSIsImhhbmRsZXIiLCJndWFyZHMiLCJldmVyeSIsImd1YXJkIiwiZ3VhcmRIYW5kbGVyIiwiZ2V0Wm9kT2JqZWN0RnJvbUFwaSIsIlJlcVR5cGUiLCJ0eXBlcyIsIndoaWNoIiwicmVxQm9keSIsImZhc3RpZnlDYXN0ZXIiLCJwYXJzZSIsImUiLCJab2RFcnJvciIsImh1bWFuaXplWm9kRXJyb3IiLCJtZXNzYWdlcyIsIm1hcCIsImlzc3VlIiwibWVzc2FnZSIsIkJhZFJlcXVlc3RFeGNlcHRpb24iLCJ6b2RFcnJvciIsInR5cGUiLCJjb250ZW50VHlwZSIsImNyZWF0ZUNvbnRleHQiLCJBcGlQYXJhbVR5cGUiLCJhcmdzIiwicGFyYW1ldGVycyIsInBhcmFtIiwiaXNDb250ZXh0IiwibmFtZSIsImludm9rZU1vZGVsTWV0aG9kIiwibW9kZWwiLCJydW4iLCJyZXN1bHQiLCJtZXRob2ROYW1lIiwiYXBwbHkiLCJjcmVhdGVTU0VGYWN0b3J5IiwiX2V2ZW50cyIsInNvY2tldCIsImJpbmQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvbnRleHRQcm92aWRlciIsImNyZWF0ZVN0b3JlIiwidXNlciIsInBhc3Nwb3J0IiwibG9naW4iLCJsb2dvdXQiLCJ3YXRjaFBhdGgiLCJjaG9raWRhciIsIndhdGNoIiwiaWdub3JlZCIsInN0YXRzIiwiaXNGaWxlIiwiZW5kc1dpdGgiLCJwZXJzaXN0ZW50IiwiaWdub3JlSW5pdGlhbCIsIm9uIiwiZXZlbnQiLCJmaWxlUGF0aCIsImFic29sdXRlUGF0aCIsImlzQ29uZmlnVHMiLCJyZWxhdGl2ZVBhdGgiLCJyZXBsYWNlIiwiYm9sZCIsImJsdWUiLCJraWxsIiwicGlkIiwiaGFuZGxlRmlsZUNoYW5nZSIsImVycm9yIiwicnVuU2NyaXB0IiwiZm4iLCJkZXN0cm95IiwicGx1Z2luc01vZHVsZXMiLCJjb3JzIiwiZm9ybWJvZHkiLCJtdWx0aXBhcnQiLCJxcyIsInNzZSIsInN0YXRpYyIsInJlZ2lzdGVyUGx1Z2luIiwia2V5IiwicGx1Z2luTmFtZSIsIm9wdGlvbiIsImVudHJpZXMiLCJjdXN0b20iLCJmYXN0aWZ5UGFzc3BvcnQiLCJpbml0aWFsaXplIiwic2VjdXJlU2Vzc2lvbiIsInJlZ2lzdGVyVXNlclNlcmlhbGl6ZXIiLCJyZWdpc3RlclVzZXJEZXNlcmlhbGl6ZXIiLCJzZXJpYWxpemVkIiwidXNlclNlcmlhbGl6ZXIiLCJ1c2VyRGVzZXJpYWxpemVyIiwiV29ya2Zsb3dNYW5hZ2VyIiwiZ2V0REJDb25maWciLCJlbmFibGVXb3JrZXIiLCJkZWZhdWx0V29ya2VyT3B0aW9ucyIsImNvbmN1cnJlbmN5IiwiY3B1cyIsInVzZVB1YlN1YiIsImxpc3RlbkRlbGF5Iiwic2V0dXBXb3JrZXIiLCJ3b3JrZXJPcHRpb25zIiwicG9ydCIsImxpc3RlbiIsImhvc3QiLCJhZGRIb29rIiwibGlmZWN5Y2xlIiwib25TaHV0ZG93biIsInNodXRkb3duIiwiY2xvc2UiLCJleGl0IiwiZXJyIiwib25FcnJvciIsInNldEVycm9ySGFuZGxlciIsInRoZW4iLCJzdGFydFdvcmtlciIsIm9uU3RhcnQiLCJjYXRjaCIsInJlZCIsIm5vdyIsInB1c2giLCJyZWxhdGl2ZSIsInN5bmNGcm9tV2F0Y2hlciIsImZpbmlzaEhNUiIsInJlbmV3Q2hlY2tzdW1zIiwiZW5kVGltZSIsInRvdGFsVGltZSIsImNlbnRlclRleHQiLCJtc2ciLCJ3aGl0ZSIsImJsYWNrIiwiYmdHcmVlbiIsIkJhc2VNb2RlbCIsIlNvbmFtdSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLFNBQVNDLGlCQUFpQixRQUFRLGNBQWM7QUFJaEQsT0FBT0MsUUFBUSxLQUFLO0FBQ3BCLE9BQU9DLFVBQVUsT0FBTztBQUV4QixTQUFTQyxvQkFBb0IsRUFBRUMsRUFBRSxFQUFFQyxjQUFjLFFBQVEsY0FBSztBQUU5RCxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBZXZDLE1BQU1DO0lBQ0dDLGdCQUF5QixNQUFNO0lBQy9CQyxvQkFFRixJQUFJVCxvQkFBb0I7SUFFdEJVLGdCQUVGLElBQUlWLG9CQUFvQjtJQUV0QlcsYUFBc0I7UUFDM0IsTUFBTUMsUUFBUSxJQUFJLENBQUNILGlCQUFpQixDQUFDSSxRQUFRO1FBQzdDLElBQUlELE9BQU9FLFNBQVM7WUFDbEIsT0FBT0YsTUFBTUUsT0FBTztRQUN0QjtRQUVBLElBQUlDLFFBQVFDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLLFFBQVE7WUFDbkMsc0NBQXNDO1lBQ3RDLE9BQU87Z0JBQ0xDLFNBQVM7Z0JBQ1RDLE9BQU87Z0JBQ1BDLFNBQVMsQ0FBQztnQkFDVkMsV0FBVyxDQUFDQyxTQUFzQm5CLHFCQUFxQm1CO2dCQUN2RCxrRkFBa0Y7Z0JBQ2xGQyxZQUFZLElBQUlDO1lBQ2xCO1FBQ0YsT0FBTztZQUNMLE1BQU0sSUFBSUMsTUFBTTtRQUNsQjtJQUNGO0lBRU9DLG1CQUFrQztRQUN2QyxNQUFNZCxRQUFRLElBQUksQ0FBQ0YsYUFBYSxDQUFDRyxRQUFRO1FBQ3pDLElBQUlELE9BQU9lLGVBQWU7WUFDeEIsT0FBT2YsTUFBTWUsYUFB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
|
package/dist/bin/cli.js
CHANGED
|
@@ -324,13 +324,13 @@ async function fixture_init() {
|
|
|
324
324
|
const targets = [
|
|
325
325
|
{
|
|
326
326
|
label: "(REMOTE) Fixture DB",
|
|
327
|
-
config: Sonamu.dbConfig.
|
|
327
|
+
config: Sonamu.dbConfig.fixture
|
|
328
328
|
},
|
|
329
329
|
{
|
|
330
330
|
label: "(LOCAL) Testing DB",
|
|
331
331
|
config: Sonamu.dbConfig.test,
|
|
332
332
|
toSkip: (()=>{
|
|
333
|
-
const remoteConn = Sonamu.dbConfig.
|
|
333
|
+
const remoteConn = Sonamu.dbConfig.fixture.connection;
|
|
334
334
|
const localConn = Sonamu.dbConfig.test.connection;
|
|
335
335
|
return remoteConn.host === localConn.host && remoteConn.database === localConn.database;
|
|
336
336
|
})()
|
|
@@ -448,4 +448,4 @@ async function scaffold_model_test(entityId) {
|
|
|
448
448
|
});
|
|
449
449
|
}
|
|
450
450
|
|
|
451
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCB7IGV4ZWNTeW5jLCBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGtuZXgsIHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IHRzaWNsaSB9IGZyb20gXCJ0c2ljbGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgQlVJTERfRElSLCBTV0NfQlVJTERfQ09NTUFORCwgVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gIGNvbnN0IG5vdFRvSW5pdCA9IFtcImRldlwiLCBcImJ1aWxkXCIsIFwic3RhcnRcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHRzaWNsaShwcm9jZXNzLmFyZ3YsIHtcbiAgICAgIHR5cGVzOiB7XG4gICAgICAgIFwiI2VudGl0eUlkXCI6IHtcbiAgICAgICAgICB0eXBlOiBcImF1dG9jb21wbGV0ZVwiLFxuICAgICAgICAgIG5hbWU6IFwiI2VudGl0eUlkXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI2VudGl0eUlkXCIsXG4gICAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxQYXJlbnRJZHMoKS5tYXAoKGVudGl0eUlkKSA9PiAoe1xuICAgICAgICAgICAgdGl0bGU6IGVudGl0eUlkLFxuICAgICAgICAgICAgdmFsdWU6IGVudGl0eUlkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAgXCIjcmVjb3JkSWRzXCI6IFwibnVtYmVyW11cIixcbiAgICAgICAgXCIjbmFtZVwiOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImNoZWNrXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwicm9sbGJhY2tcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJyZXNldFwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImNsZWFyXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwic3RhdHVzXCJdLFxuICAgICAgICBbXCJzdHViXCIsIFwicHJhY3RpY2VcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1wic3R1YlwiLCBcImVudGl0eVwiLCBcIiNuYW1lXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcIm1vZGVsXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcIm1vZGVsX3Rlc3RcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwidmlld19saXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfZm9ybVwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic3luY1wiXSxcbiAgICAgICAgW1wiZGV2XCJdLFxuICAgICAgICBbXCJidWlsZFwiXSxcbiAgICAgICAgW1wic3RhcnRcIl0sXG4gICAgICBdLFxuICAgICAgcnVubmVyczoge1xuICAgICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgICAgbWlncmF0ZV9ydW4sXG4gICAgICAgIGZpeHR1cmVfaW5pdCxcbiAgICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICAgIGZpeHR1cmVfc3luYyxcbiAgICAgICAgc3R1Yl9wcmFjdGljZSxcbiAgICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICAgIHNjYWZmb2xkX21vZGVsLFxuICAgICAgICBzY2FmZm9sZF9tb2RlbF90ZXN0LFxuICAgICAgICAvLyBzY2FmZm9sZF92aWV3X2xpc3QsXG4gICAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgICAgc3luYyxcbiAgICAgICAgZGV2LFxuICAgICAgICBidWlsZCxcbiAgICAgICAgc3RhcnQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IFNvbmFtdS5kZXN0cm95KCk7XG4gIH1cbn1cblxuYm9vdHN0cmFwKCkuZmluYWxseShhc3luYyAoKSA9PiB7XG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLmRlc3Ryb3koKTtcbn0pO1xuXG4vKipcbiAqIHBucG0gc3luYyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOulvCDsi7Htgaztlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN5bmMoKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuc3luYygpO1xufVxuXG4vKipcbiAqIHBucG0gZGV2IO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog7ZSE66Gc7KCd7Yq47JeQIOuMgO2VtCBITVIg7KeA7JuQ7ZWY64qUIOqwnOuwnCDshJzrsoTrpbwg652E7JuM7KSN64uI64ukLlxuICpcbiAqIFR5cGVTY3JpcHTrpbwg67CU66GcIOyLpO2Wie2VoCDsiJgg7J6I64+E66GdIEBzb25hbXUta2l0L3RzLWxvYWRlcuulvCxcbiAqIEhNUuydhCDsp4Dsm5DtlZjquLAg7JyE7ZW0IEBzb25hbXUta2l0L2htci1ob29r7J2EIGltcG9ydO2VmOupsCxcbiAqIOyGjOyKpOuntSDsp4Dsm5DsnYQg7JyE7ZW0IC0tZW5hYmxlLXNvdXJjZS1tYXBzIO2UjOuemOq3uOulvCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOydtOuVjCBAc29uYW11LWtpdC90cy1sb2FkZXLsmYAgQHNvbmFtdS1raXQvaG1yLWhvb2vripQgc29uYW116rCAIOyekOyytOyggeycvOuhnCDqsIDsp4Dqs6Ag7J6I64qUIGRlcGVuZGVuY3nsnoXri4jri6QuXG4gKiDrmJDtlZwg7Iuk7ZaJ7JeQIOyCrOyaqe2VmOuKlCBAc29uYW11LWtpdC9obXItcnVubmVy64+EIOuniOywrOqwgOyngOuhnCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuUsOudvOyEnCDsgqzsmqnsnpAg7ZSE66Gc7KCd7Yq47JeQ7ISc64qUIOydtCDshLgg7Yyo7YKk7KeA66W8IOyngeygkSDshKTsuZjtlaAg7ZWE7JqU6rCAIOyXhuyKteuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXYoKSB7XG4gIGNvbnN0IGFwaVJvb3QgPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgY29uc3QgZW50cnlQb2ludCA9IFwic3JjL2luZGV4LnRzXCI7XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCLwn5qAIFN0YXJ0aW5nIFNvbmFtdSBkZXYgc2VydmVyLi4uXFxuXCIpKTtcblxuICAvLyDsnbQgc29uYW11IO2MqO2CpOyngOqwgCBkZXBlbmRlbmNpZXProZwg6rCA7KeA6rOgIOyeiOuKlCBAc29uYW11LWtpdC9obXItcnVubmVy7J2YIGJpbi9ydW4uanPrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICAvLyDsnbQg6rK966GcKC9iaW4vcnVuLmpzKeuKlCBAc29uYW11LWtpdC9obXItcnVubmVy7J2YIHBhY2thZ2UuanNvbuydmCBiaW4g7ZWE65Oc7JeQIOuqheyLnOuQmOyWtCDsnojripQg6re46rKD6rO8IOqwmeyKteuLiOuLpC5cbiAgY29uc3QgaG90UnVubmVyQmluUGF0aCA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKS5yZXNvbHZlKFxuICAgIFwiQHNvbmFtdS1raXQvaG1yLXJ1bm5lci9iaW4vcnVuLmpzXCIsXG4gICk7XG5cbiAgY29uc3Qgc2VydmVyUHJvY2VzcyA9IHNwYXduKFxuICAgIHByb2Nlc3MuZXhlY1BhdGgsIC8vIG5vZGVcbiAgICBbXG4gICAgICBob3RSdW5uZXJCaW5QYXRoLCAvLyDsnbTroIfqsowg7ZW07IScIGhvdC1ydW5uZXLrpbwg7Iuk7ZaJ7ZWY6rWs7JqUXG4gICAgICBcIi0tY2xlYXItc2NyZWVuPWZhbHNlXCIsIC8vIOydtO2VmCBob3QtcnVubmVy7JeQ6rKMIOuEmOqyqOykhCDsnbjsnpDrk6TsnoXri4jri6QuXG4gICAgICBcIi0tbm9kZS1hcmdzPS0taW1wb3J0PXNvbmFtdS90cy1sb2FkZXItcmVnaXN0ZXJcIiwgLy8gVHlwZVNjcmlwdCDshJztj6ztirjrpbwg7JyE7ZWcIOuhnOuNlCxcbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L2htci1ob29rLXJlZ2lzdGVyXCIsIC8vIEhNUuydhCDsp4Dsm5DtlZjquLAg7JyE7ZWcIGhvb2ssXG4gICAgICBcIi0tbm9kZS1hcmdzPS0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIC8vIOq3uOumrOqzoCDshozsiqTrp7Ug7KeA7JuQ7J2EIOychO2VnCDtlIzrnpjqt7jsnoXri4jri6QuXG4gICAgICBcIi0tb24ta2V5PXI6cmVzdGFydDpSZXN0YXJ0IHNlcnZlclwiLCAvLyByIOuIhOultOuptCDshJzrsoQg7J6s7Iuc7J6R7ZWY6rKMIO2VtOykmOyalC5cbiAgICAgIGAtLW9uLWtleT1mOnNoZWxsKHJtICR7cGF0aC5qb2luKGFwaVJvb3QsIFwic29uYW11LmxvY2tcIil9KTpyZXN0YXJ0OkZvcmNlIHJlc3RhcnRgLCAvLyBmIOuIhOultOuptCBzb25hbXUubG9jayDtjIzsnbzsnYQg7KeA7Jqw6rOgIOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuXG4gICAgICBcIi0tb24ta2V5PWVudGVyOnNoZWxsKGVjaG8gaGkpOktleSBiaW5kaW5nIHRlc3RcIiwgLy8gZW50ZXLrpbwga2V566GcIOyTuCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1jdHJsK2YgY3RybCtmOnNoZWxsKGdpdCBwdWxsICYmIHBucG0gaW5zdGFsbCAmJiBwbnBtIC0tZmlsdGVyIHNvbmFtdSBidWlsZCAmJiBlY2hvICdTb25hbXUgaXMgbm93IHVwLXRvLWRhdGUhJyk6cmVzdGFydDpQdWxsICYgaW5zdGFsbCAmIGJ1aWxkICYgcmVzdGFydFwiLCAvLyBtb2RpZmllcuyZgOydmCDsobDtlaksIOq3uOumrOqzoCDrkZAg6rCc7J2YIGNob3Jk66W8IOyCrOyaqe2VoCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgZW50cnlQb2ludCwgLy8g66eI7KeA66eJ7Jy866GcIOyLpOygnCDsi6TtlontlaAg7Iqk7YGs66a97Yq47J2YIOqyveuhnOulvCDrhJjqsqjspI3ri4jri6QuXG4gICAgXSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIE5PREVfRU5WOiBcImRldmVsb3BtZW50XCIsXG4gICAgICAgIEhPVDogXCJ5ZXNcIiwgLy8g7JaY6rCAIOyeiOyWtOyVvCBITVLsnbQg7Zmc7ISx7ZmU65Cp64uI64ukLlxuICAgICAgICBBUElfUk9PVF9QQVRIOiBhcGlSb290LCAvLyDsnbQg6rK966Gc6rCAIGhtci1ob29r7J2YIOujqO2KuCDrlJTroInthqDrpqzqsIAg65Cp64uI64ukLlxuICAgICAgfSxcbiAgICB9LFxuICApO1xuXG4gIC8vIOyiheujjCDsspjrpqxcbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJcXG5cXG7wn5GLIFNodXR0aW5nIGRvd24uLi5cIikpO1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9O1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgY2xlYW51cCk7XG4gIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIGNsZWFudXApO1xuXG4gIHNlcnZlclByb2Nlc3Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGDinYwgU2VydmVyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlIHx8IDEpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBidWlsZCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOulvCDruYzrk5ztlanri4jri6QuXG4gKlxuICog67mM65Oc7JeQIO2VhOyalO2VnCAuc3djcmPripQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkOyEnCDssL7qs6AsIOyXhuycvOuptCBzb25hbXXqsIAg6rSA66as7ZWY64qUIC5zd2NyYy5wcm9qZWN0LWRlZmF1bHTrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICogc29uYW11LmNvbmZpZy50c+uKlCBzcmPsl5Ag65Ok7Ja07J6I7KeAIOyViuq4sCDrlYzrrLjsl5AgU1dDX0JVSUxEX0NPTU1BTkTroZwg67mM65Oc65CY7KeAIOyViuyKteuLiOuLpC5cbiAqIOuUsOudvOyEnCDrlLDroZwg67mM65Oc7ZW07KSN64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkKCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG5cbiAgLy8g7Lac66ClIOuUlOugie2GoOumrOulvCDsoJzqsbDtlanri4jri6QuXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJlbW92aW5nIGJ1aWxkIGRpcmVjdG9yeS4uLlwiKSk7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhCVUlMRF9ESVIpKSB7XG4gICAgICBhd2FpdCBybShCVUlMRF9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJSZW1vdmUgYnVpbGQgZGlyZWN0b3J5IGZhaWxlZC5cIiksIGVycm9yKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyAuc3djcmMg7YyM7J287J2EIOyngOygle2VqeuLiOuLpC5cbiAgbGV0IHN3Y0ZpbGVQYXRoID0gXCIuc3djcmNcIjtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHN3Y0ZpbGVQYXRoKSkge1xuICAgICAgLy8g7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkCAuc3djcmPqsIAg7J6I7Jy866m0IOyasOyEoOycvOuhnCDsgqzsmqntlanri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiVXNpbmcgLnN3Y3JjIGZyb20gcHJvamVjdCByb290Li4uXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g7JWE64uI652866m0IHNvbmFtdeqwgCDqtIDrpqztlZjripQgLnN3Y3JjLnByb2plY3QtZGVmYXVsdOulvCDqsIDsoLjri6Qg7JSB64uI64ukLlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlVzaW5nIGRlZmF1bHQgLnN3Y3JjIGZyb20gc29uYW11IHBhY2thZ2UuLi5cIikpO1xuICAgICAgc3djRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLnN3Y3JjLnByb2plY3QtZGVmYXVsdFwiKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJTZXR0aW5nIHVwIHN3YyBjb25maWcgZmlsZSBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8g7IaM7IqkIOuUlOugie2GoOumrOulvCDruYzrk5ztlanri4jri6QuXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIkJ1aWxkaW5nIHdpdGggc3djLi4uXCIpKTtcbiAgICBleGVjU3luYyhTV0NfQlVJTERfQ09NTUFORChzd2NGaWxlUGF0aCksIHsgY3dkOiBhcGlSb290LCBzdGRpbzogXCJpbmhlcml0XCIgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJCdWlsZCBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8g66eI7KeA66eJ7JeQ64qUIO2DgOyehSDssrTtgazrpbwg7ZW07JqULlxuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJDaGVja2luZyB0eXBlcyB3aXRoIHRzYy4uLlwiKSk7XG4gICAgZXhlY1N5bmMoVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCwge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiVHlwZSBjaGVjayBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogcG5wbSBzdGFydCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOu5jOuTnOuQnCDtlITroZzsoJ3tirjrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOuQnCDqsrDqs7zrrLwoZGlzdCDrlJTroInthqDrpqzsnZggaW5kZXguanMg7JeU7Yq466as7Y+s7J247Yq4KeydtCDsl4bri6TrqbQg7Iuk7ZaJ7J2EIOykkeuLqO2VqeuLiOuLpC5cbiAqIOyGjOyKpOuntSDsp4Dsm5Dqs7wgZG90ZW52IOyngOybkOydhCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcImRpc3QvaW5kZXguanNcIjtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoZW50cnlQb2ludCkpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2VudHJ5UG9pbnR9IG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIHlvdXIgcHJvamVjdCBmaXJzdC5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJ1bjogeWFybiBzb25hbXUgYnVpbGRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcImNoaWxkX3Byb2Nlc3NcIik7XG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIFtcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIFwiLXJcIiwgXCJkb3RlbnYvY29uZmlnXCIsIGVudHJ5UG9pbnRdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9LFxuICApO1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBNaWdyYXRvcigpIHtcbiAgLy8gbWlncmF0b3JcbiAgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBGaXh0dXJlTWFuYWdlcigpIHtcbiAgRml4dHVyZU1hbmFnZXIuaW5pdCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3J1bigpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcbiAgICBcImFwcGx5XCIsXG4gICAgT2JqZWN0LmtleXMoU29uYW11LmRiQ29uZmlnKSBhcyAoa2V5b2YgU29uYW11REJDb25maWcpW10gLyrsi7kg64ukISovLFxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3N0YXR1cygpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuICAvLyBzdGF0dXM7XG4gIGNvbnNvbGUubG9nKHN0YXR1cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW5pdCgpIHtcbiAgY29uc3Qgc3JjQ29uZmlnID0gU29uYW11LmRiQ29uZmlnLmRldmVsb3BtZW50X21hc3RlcjtcbiAgY29uc3QgdGFyZ2V0cyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCIoUkVNT1RFKSBGaXh0dXJlIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlX3JlbW90ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBcIihMT0NBTCkgVGVzdGluZyBEQlwiLFxuICAgICAgY29uZmlnOiBTb25hbXUuZGJDb25maWcudGVzdCxcbiAgICAgIHRvU2tpcDogKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVtb3RlQ29ubiA9IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlX3JlbW90ZS5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgICAgICAgY29uc3QgbG9jYWxDb25uID0gU29uYW11LmRiQ29uZmlnLnRlc3QuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIHJldHVybiByZW1vdGVDb25uLmhvc3QgPT09IGxvY2FsQ29ubi5ob3N0ICYmIHJlbW90ZUNvbm4uZGF0YWJhc2UgPT09IGxvY2FsQ29ubi5kYXRhYmFzZTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgXSBhcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb25maWc6IEtuZXguQ29uZmlnO1xuICAgIHRvU2tpcD86IGJvb2xlYW47XG4gIH1bXTtcblxuICAvLyAxLiDquLDspIBEQiDsiqTtgqTrp4jrpbwg642k7ZSEXG4gIGNvbnNvbGUubG9nKFwiRFVNUC4uLlwiKTtcbiAgY29uc3QgZHVtcEZpbGVuYW1lID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGNvbnN0IHNyY0Nvbm4gPSBzcmNDb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gIGNvbnN0IG1pZ3JhdGlvbnNEdW1wID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC1taWdyYXRpb25zLSR7RGF0ZS5ub3coKX0uc3FsYDtcbiAgZXhlY1N5bmMoXG4gICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLWQgLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9ID4gJHtkdW1wRmlsZW5hbWV9YCxcbiAgKTtcbiAgY29uc3QgX2RiID0ga25leChzcmNDb25maWcpO1xuICBjb25zdCBbW21pZ3JhdGlvbnNdXSA9IGF3YWl0IF9kYi5yYXcoXG4gICAgXCJTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSA9ID8gQU5EIHRhYmxlX25hbWUgPSAna25leF9taWdyYXRpb25zJ1wiLFxuICAgIFtzcmNDb25uLmRhdGFiYXNlXSxcbiAgKTtcbiAgaWYgKG1pZ3JhdGlvbnMuY291bnQgPiAwKSB7XG4gICAgZXhlY1N5bmMoXG4gICAgICBgbXlzcWxkdW1wIC1oJHtzcmNDb25uLmhvc3R9IC11JHtzcmNDb25uLnVzZXJ9IC1wJHtzcmNDb25uLnBhc3N3b3JkfSAtLXNpbmdsZS10cmFuc2FjdGlvbiAtLW5vLWNyZWF0ZS1kYiAtLXRyaWdnZXJzICR7c3JjQ29ubi5kYXRhYmFzZX0ga25leF9taWdyYXRpb25zIGtuZXhfbWlncmF0aW9uc19sb2NrID4gJHttaWdyYXRpb25zRHVtcH1gLFxuICAgICk7XG4gIH1cblxuICAvLyAyLiDrjIDsg4FEQiDqsIHqsIHsl5Ag64yA7ZWY7JesIOyhtOyerOyXrOu2gCDtmZXsnbgg7ZuEIOu2k+q4sFxuICBmb3IgYXdhaXQgKGNvbnN0IHsgbGFiZWwsIGNvbmZpZywgdG9Ta2lwIH0gb2YgdGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbm4gPSBjb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG5cbiAgICBpZiAodG9Ta2lwID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7bGFiZWx9OiBTa2lwcGVkIWApKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRiID0ga25leCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLigoY29uZmlnLmNvbm5lY3Rpb24gPz8ge30pIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZyksXG4gICAgICAgIGRhdGFiYXNlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IFtbcm93XV0gPSBhd2FpdCBkYi5yYXcoYFNIT1cgREFUQUJBU0VTIExJS0UgXCIke2Nvbm4uZGF0YWJhc2V9XCJgKTtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCR7bGFiZWx9OiBEYXRhYmFzZSBcIiR7Y29ubi5kYXRhYmFzZX1cIiBBbHJlYWR5IGV4aXN0c2ApKTtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBTWU5DIHRvICR7bGFiZWx9Li4uYCk7XG4gICAgY29uc3QgbXlzcWxDbWQgPSBgbXlzcWwgLWgke2Nvbm4uaG9zdH0gLXUke2Nvbm4udXNlcn0gLXAke2Nvbm4ucGFzc3dvcmR9YDtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gLWUgJ0RST1AgREFUQUJBU0UgSUYgRVhJU1RTIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdDUkVBVEUgREFUQUJBU0UgXFxgJHtjb25uLmRhdGFiYXNlfVxcYCdgKTtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7ZHVtcEZpbGVuYW1lfWApO1xuICAgIGlmIChhd2FpdCBleGlzdHMobWlncmF0aW9uc0R1bXApKSB7XG4gICAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7bWlncmF0aW9uc0R1bXB9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXdhaXQgX2RiLmRlc3Ryb3koKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgcmVjb3JkSWRzOiBudW1iZXJbXSkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuaW1wb3J0Rml4dHVyZShlbnRpdHlJZCwgcmVjb3JkSWRzKTtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX3N5bmMoKSB7XG4gIGF3YWl0IHNldHVwRml4dHVyZU1hbmFnZXIoKTtcblxuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5zeW5jKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfcHJhY3RpY2UobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByYWN0aWNlRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJwcmFjdGljZXNcIik7XG4gIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlYWRkaXIocHJhY3RpY2VEaXIpO1xuXG4gIGNvbnN0IG1heFNlcU5vID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIShhd2FpdCBleGlzdHMocHJhY3RpY2VEaXIpKSkge1xuICAgICAgYXdhaXQgbWtkaXIocHJhY3RpY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkU2VxcyA9IGZpbGVOYW1lc1xuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IGZpbGVOYW1lLnN0YXJ0c1dpdGgoXCJwXCIpICYmIGZpbGVOYW1lLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgWywgc2VxTm9dID0gZmlsZU5hbWUubWF0Y2goL15wKFswLTldKyktLykgPz8gW1wiMFwiLCBcIjBcIl07XG4gICAgICAgIHJldHVybiBwYXJzZUludChzZXFObyk7XG4gICAgICB9KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcblxuICAgIGlmIChmaWx0ZXJlZFNlcXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkU2Vxc1swXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSkoKTtcblxuICBjb25zdCBjdXJyZW50U2VxTm8gPSBtYXhTZXFObyArIDE7XG4gIGNvbnN0IGZpbGVOYW1lID0gYHAke2N1cnJlbnRTZXFOb30tJHtuYW1lfS50c2A7XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLmpvaW4ocHJhY3RpY2VEaXIsIGZpbGVOYW1lKTtcblxuICBjb25zdCBjb2RlID0gW1xuICAgIGBpbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICBcIlwiLFxuICAgIGBjb25zb2xlLmNsZWFyKCk7YCxcbiAgICBgY29uc29sZS5sb2coXCIke2ZpbGVOYW1lfVwiKTtgLFxuICAgIFwiXCIsXG4gICAgYFNvbmFtdS5ydW5TY3JpcHQoYXN5bmMgKCkgPT4ge2AsXG4gICAgYCAvLyBUT0RPYCxcbiAgICBgfSk7YCxcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZShkc3RQYXRoLCBjb2RlKTtcblxuICBleGVjU3luYyhgY29kZSAke2RzdFBhdGh9YCk7XG5cbiAgY29uc3QgcnVuQ29kZSA9IGB5YXJuIG5vZGUgLXIgZG90ZW52L2NvbmZpZyAtLWVuYWJsZS1zb3VyY2UtbWFwcyBkaXN0L3ByYWN0aWNlcy8ke2ZpbGVOYW1lLnJlcGxhY2UoXG4gICAgXCIudHNcIixcbiAgICBcIi5qc1wiLFxuICApfWA7XG4gIGNvbnNvbGUubG9nKGAke2NoYWxrLmJsdWUocnVuQ29kZSl9IGNvcGllZCB0byBjbGlwYm9hcmQuYCk7XG4gIGV4ZWNTeW5jKGBlY2hvIFwiJHtydW5Db2RlfVwiIHwgcGJjb3B5YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfZW50aXR5KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoeyBlbnRpdHlJZCwgdGl0bGU6IGVudGl0eUlkIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsXCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsX3Rlc3QoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbF90ZXN0XCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJkb3RlbnYiLCJjb25maWciLCJleGVjU3luYyIsInNwYXduIiwibWtkaXIiLCJyZWFkZGlyIiwicm0iLCJ3cml0ZUZpbGUiLCJrbmV4IiwiY3JlYXRlUmVxdWlyZSIsInBhdGgiLCJwcm9jZXNzIiwidHNpY2xpIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIk1pZ3JhdG9yIiwiRml4dHVyZU1hbmFnZXIiLCJleGlzdHMiLCJmaW5kQXBpUm9vdFBhdGgiLCJCVUlMRF9ESVIiLCJTV0NfQlVJTERfQ09NTUFORCIsIlRTQ19UWVBFX0NIRUNLX0NPTU1BTkQiLCJtaWdyYXRvciIsImJvb3RzdHJhcCIsIm5vdFRvSW5pdCIsImluY2x1ZGVzIiwiYXJndiIsImluaXQiLCJ0eXBlcyIsInR5cGUiLCJuYW1lIiwibWVzc2FnZSIsImNob2ljZXMiLCJnZXRBbGxQYXJlbnRJZHMiLCJtYXAiLCJlbnRpdHlJZCIsInRpdGxlIiwidmFsdWUiLCJhcmdzIiwicnVubmVycyIsIm1pZ3JhdGVfc3RhdHVzIiwibWlncmF0ZV9ydW4iLCJmaXh0dXJlX2luaXQiLCJmaXh0dXJlX2ltcG9ydCIsImZpeHR1cmVfc3luYyIsInN0dWJfcHJhY3RpY2UiLCJzdHViX2VudGl0eSIsInNjYWZmb2xkX21vZGVsIiwic2NhZmZvbGRfbW9kZWxfdGVzdCIsInN5bmMiLCJkZXYiLCJidWlsZCIsInN0YXJ0IiwiZGVzdHJveSIsImZpbmFsbHkiLCJzeW5jZXIiLCJhcGlSb290IiwiZW50cnlQb2ludCIsImNvbnNvbGUiLCJsb2ciLCJ5ZWxsb3ciLCJib2xkIiwiaG90UnVubmVyQmluUGF0aCIsInVybCIsInJlc29sdmUiLCJzZXJ2ZXJQcm9jZXNzIiwiZXhlY1BhdGgiLCJqb2luIiwiY3dkIiwic3RkaW8iLCJlbnYiLCJOT0RFX0VOViIsIkhPVCIsIkFQSV9ST09UX1BBVEgiLCJjbGVhbnVwIiwia2lsbCIsImV4aXQiLCJvbiIsImNvZGUiLCJlcnJvciIsInJlZCIsImJsdWUiLCJyZWN1cnNpdmUiLCJmb3JjZSIsInN3Y0ZpbGVQYXRoIiwiZGlybmFtZSIsInNldHVwTWlncmF0b3IiLCJzZXR1cEZpeHR1cmVNYW5hZ2VyIiwicnVuQWN0aW9uIiwiT2JqZWN0Iiwia2V5cyIsImRiQ29uZmlnIiwic3RhdHVzIiwiZ2V0U3RhdHVzIiwic3JjQ29uZmlnIiwiZGV2ZWxvcG1lbnRfbWFzdGVyIiwidGFyZ2V0cyIsImxhYmVsIiwiZml4dHVyZV9yZW1vdGUiLCJ0ZXN0IiwidG9Ta2lwIiwicmVtb3RlQ29ubiIsImNvbm5lY3Rpb24iLCJsb2NhbENvbm4iLCJob3N0IiwiZGF0YWJhc2UiLCJkdW1wRmlsZW5hbWUiLCJEYXRlIiwibm93Iiwic3JjQ29ubiIsIm1pZ3JhdGlvbnNEdW1wIiwidXNlciIsInBhc3N3b3JkIiwiX2RiIiwibWlncmF0aW9ucyIsInJhdyIsImNvdW50IiwiY29ubiIsImRiIiwidW5kZWZpbmVkIiwicm93IiwibXlzcWxDbWQiLCJyZWNvcmRJZHMiLCJpbXBvcnRGaXh0dXJlIiwicHJhY3RpY2VEaXIiLCJhcGlSb290UGF0aCIsImZpbGVOYW1lcyIsIm1heFNlcU5vIiwiZmlsdGVyZWRTZXFzIiwiZmlsdGVyIiwiZmlsZU5hbWUiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzZXFObyIsIm1hdGNoIiwicGFyc2VJbnQiLCJzb3J0IiwiYSIsImIiLCJsZW5ndGgiLCJjdXJyZW50U2VxTm8iLCJkc3RQYXRoIiwicnVuQ29kZSIsInJlcGxhY2UiLCJjcmVhdGVFbnRpdHkiLCJnZW5lcmF0ZVRlbXBsYXRlIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsWUFBWSxTQUFTO0FBRTVCQSxPQUFPQyxNQUFNO0FBRWIsU0FBU0MsUUFBUSxFQUFFQyxLQUFLLFFBQVEsZ0JBQWdCO0FBQ2hELFNBQVNDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxFQUFFLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUM1RCxPQUFPQyxVQUF5QixPQUFPO0FBQ3ZDLFNBQVNDLGFB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
|
|
451
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCB7IGV4ZWNTeW5jLCBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGtuZXgsIHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IHRzaWNsaSB9IGZyb20gXCJ0c2ljbGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgQlVJTERfRElSLCBTV0NfQlVJTERfQ09NTUFORCwgVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gIGNvbnN0IG5vdFRvSW5pdCA9IFtcImRldlwiLCBcImJ1aWxkXCIsIFwic3RhcnRcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHRzaWNsaShwcm9jZXNzLmFyZ3YsIHtcbiAgICAgIHR5cGVzOiB7XG4gICAgICAgIFwiI2VudGl0eUlkXCI6IHtcbiAgICAgICAgICB0eXBlOiBcImF1dG9jb21wbGV0ZVwiLFxuICAgICAgICAgIG5hbWU6IFwiI2VudGl0eUlkXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI2VudGl0eUlkXCIsXG4gICAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxQYXJlbnRJZHMoKS5tYXAoKGVudGl0eUlkKSA9PiAoe1xuICAgICAgICAgICAgdGl0bGU6IGVudGl0eUlkLFxuICAgICAgICAgICAgdmFsdWU6IGVudGl0eUlkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAgXCIjcmVjb3JkSWRzXCI6IFwibnVtYmVyW11cIixcbiAgICAgICAgXCIjbmFtZVwiOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImNoZWNrXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwicm9sbGJhY2tcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJyZXNldFwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImNsZWFyXCJdLFxuICAgICAgICBbXCJtaWdyYXRlXCIsIFwic3RhdHVzXCJdLFxuICAgICAgICBbXCJzdHViXCIsIFwicHJhY3RpY2VcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1wic3R1YlwiLCBcImVudGl0eVwiLCBcIiNuYW1lXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcIm1vZGVsXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcIm1vZGVsX3Rlc3RcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwidmlld19saXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfZm9ybVwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic3luY1wiXSxcbiAgICAgICAgW1wiZGV2XCJdLFxuICAgICAgICBbXCJidWlsZFwiXSxcbiAgICAgICAgW1wic3RhcnRcIl0sXG4gICAgICBdLFxuICAgICAgcnVubmVyczoge1xuICAgICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgICAgbWlncmF0ZV9ydW4sXG4gICAgICAgIGZpeHR1cmVfaW5pdCxcbiAgICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICAgIGZpeHR1cmVfc3luYyxcbiAgICAgICAgc3R1Yl9wcmFjdGljZSxcbiAgICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICAgIHNjYWZmb2xkX21vZGVsLFxuICAgICAgICBzY2FmZm9sZF9tb2RlbF90ZXN0LFxuICAgICAgICAvLyBzY2FmZm9sZF92aWV3X2xpc3QsXG4gICAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgICAgc3luYyxcbiAgICAgICAgZGV2LFxuICAgICAgICBidWlsZCxcbiAgICAgICAgc3RhcnQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IFNvbmFtdS5kZXN0cm95KCk7XG4gIH1cbn1cblxuYm9vdHN0cmFwKCkuZmluYWxseShhc3luYyAoKSA9PiB7XG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLmRlc3Ryb3koKTtcbn0pO1xuXG4vKipcbiAqIHBucG0gc3luYyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOulvCDsi7Htgaztlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN5bmMoKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuc3luYygpO1xufVxuXG4vKipcbiAqIHBucG0gZGV2IO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog7ZSE66Gc7KCd7Yq47JeQIOuMgO2VtCBITVIg7KeA7JuQ7ZWY64qUIOqwnOuwnCDshJzrsoTrpbwg652E7JuM7KSN64uI64ukLlxuICpcbiAqIFR5cGVTY3JpcHTrpbwg67CU66GcIOyLpO2Wie2VoCDsiJgg7J6I64+E66GdIEBzb25hbXUta2l0L3RzLWxvYWRlcuulvCxcbiAqIEhNUuydhCDsp4Dsm5DtlZjquLAg7JyE7ZW0IEBzb25hbXUta2l0L2htci1ob29r7J2EIGltcG9ydO2VmOupsCxcbiAqIOyGjOyKpOuntSDsp4Dsm5DsnYQg7JyE7ZW0IC0tZW5hYmxlLXNvdXJjZS1tYXBzIO2UjOuemOq3uOulvCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOydtOuVjCBAc29uYW11LWtpdC90cy1sb2FkZXLsmYAgQHNvbmFtdS1raXQvaG1yLWhvb2vripQgc29uYW116rCAIOyekOyytOyggeycvOuhnCDqsIDsp4Dqs6Ag7J6I64qUIGRlcGVuZGVuY3nsnoXri4jri6QuXG4gKiDrmJDtlZwg7Iuk7ZaJ7JeQIOyCrOyaqe2VmOuKlCBAc29uYW11LWtpdC9obXItcnVubmVy64+EIOuniOywrOqwgOyngOuhnCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuUsOudvOyEnCDsgqzsmqnsnpAg7ZSE66Gc7KCd7Yq47JeQ7ISc64qUIOydtCDshLgg7Yyo7YKk7KeA66W8IOyngeygkSDshKTsuZjtlaAg7ZWE7JqU6rCAIOyXhuyKteuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXYoKSB7XG4gIGNvbnN0IGFwaVJvb3QgPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgY29uc3QgZW50cnlQb2ludCA9IFwic3JjL2luZGV4LnRzXCI7XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCLwn5qAIFN0YXJ0aW5nIFNvbmFtdSBkZXYgc2VydmVyLi4uXFxuXCIpKTtcblxuICAvLyDsnbQgc29uYW11IO2MqO2CpOyngOqwgCBkZXBlbmRlbmNpZXProZwg6rCA7KeA6rOgIOyeiOuKlCBAc29uYW11LWtpdC9obXItcnVubmVy7J2YIGJpbi9ydW4uanPrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICAvLyDsnbQg6rK966GcKC9iaW4vcnVuLmpzKeuKlCBAc29uYW11LWtpdC9obXItcnVubmVy7J2YIHBhY2thZ2UuanNvbuydmCBiaW4g7ZWE65Oc7JeQIOuqheyLnOuQmOyWtCDsnojripQg6re46rKD6rO8IOqwmeyKteuLiOuLpC5cbiAgY29uc3QgaG90UnVubmVyQmluUGF0aCA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKS5yZXNvbHZlKFxuICAgIFwiQHNvbmFtdS1raXQvaG1yLXJ1bm5lci9iaW4vcnVuLmpzXCIsXG4gICk7XG5cbiAgY29uc3Qgc2VydmVyUHJvY2VzcyA9IHNwYXduKFxuICAgIHByb2Nlc3MuZXhlY1BhdGgsIC8vIG5vZGVcbiAgICBbXG4gICAgICBob3RSdW5uZXJCaW5QYXRoLCAvLyDsnbTroIfqsowg7ZW07IScIGhvdC1ydW5uZXLrpbwg7Iuk7ZaJ7ZWY6rWs7JqUXG4gICAgICBcIi0tY2xlYXItc2NyZWVuPWZhbHNlXCIsIC8vIOydtO2VmCBob3QtcnVubmVy7JeQ6rKMIOuEmOqyqOykhCDsnbjsnpDrk6TsnoXri4jri6QuXG4gICAgICBcIi0tbm9kZS1hcmdzPS0taW1wb3J0PXNvbmFtdS90cy1sb2FkZXItcmVnaXN0ZXJcIiwgLy8gVHlwZVNjcmlwdCDshJztj6ztirjrpbwg7JyE7ZWcIOuhnOuNlCxcbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L2htci1ob29rLXJlZ2lzdGVyXCIsIC8vIEhNUuydhCDsp4Dsm5DtlZjquLAg7JyE7ZWcIGhvb2ssXG4gICAgICBcIi0tbm9kZS1hcmdzPS0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIC8vIOq3uOumrOqzoCDshozsiqTrp7Ug7KeA7JuQ7J2EIOychO2VnCDtlIzrnpjqt7jsnoXri4jri6QuXG4gICAgICBcIi0tb24ta2V5PXI6cmVzdGFydDpSZXN0YXJ0IHNlcnZlclwiLCAvLyByIOuIhOultOuptCDshJzrsoQg7J6s7Iuc7J6R7ZWY6rKMIO2VtOykmOyalC5cbiAgICAgIGAtLW9uLWtleT1mOnNoZWxsKHJtICR7cGF0aC5qb2luKGFwaVJvb3QsIFwic29uYW11LmxvY2tcIil9KTpyZXN0YXJ0OkZvcmNlIHJlc3RhcnRgLCAvLyBmIOuIhOultOuptCBzb25hbXUubG9jayDtjIzsnbzsnYQg7KeA7Jqw6rOgIOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuXG4gICAgICBcIi0tb24ta2V5PWVudGVyOnNoZWxsKGVjaG8gaGkpOktleSBiaW5kaW5nIHRlc3RcIiwgLy8gZW50ZXLrpbwga2V566GcIOyTuCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1jdHJsK2YgY3RybCtmOnNoZWxsKGdpdCBwdWxsICYmIHBucG0gaW5zdGFsbCAmJiBwbnBtIC0tZmlsdGVyIHNvbmFtdSBidWlsZCAmJiBlY2hvICdTb25hbXUgaXMgbm93IHVwLXRvLWRhdGUhJyk6cmVzdGFydDpQdWxsICYgaW5zdGFsbCAmIGJ1aWxkICYgcmVzdGFydFwiLCAvLyBtb2RpZmllcuyZgOydmCDsobDtlaksIOq3uOumrOqzoCDrkZAg6rCc7J2YIGNob3Jk66W8IOyCrOyaqe2VoCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgZW50cnlQb2ludCwgLy8g66eI7KeA66eJ7Jy866GcIOyLpOygnCDsi6TtlontlaAg7Iqk7YGs66a97Yq47J2YIOqyveuhnOulvCDrhJjqsqjspI3ri4jri6QuXG4gICAgXSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIE5PREVfRU5WOiBcImRldmVsb3BtZW50XCIsXG4gICAgICAgIEhPVDogXCJ5ZXNcIiwgLy8g7JaY6rCAIOyeiOyWtOyVvCBITVLsnbQg7Zmc7ISx7ZmU65Cp64uI64ukLlxuICAgICAgICBBUElfUk9PVF9QQVRIOiBhcGlSb290LCAvLyDsnbQg6rK966Gc6rCAIGhtci1ob29r7J2YIOujqO2KuCDrlJTroInthqDrpqzqsIAg65Cp64uI64ukLlxuICAgICAgfSxcbiAgICB9LFxuICApO1xuXG4gIC8vIOyiheujjCDsspjrpqxcbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJcXG5cXG7wn5GLIFNodXR0aW5nIGRvd24uLi5cIikpO1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9O1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgY2xlYW51cCk7XG4gIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIGNsZWFudXApO1xuXG4gIHNlcnZlclByb2Nlc3Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGDinYwgU2VydmVyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlIHx8IDEpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBidWlsZCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOulvCDruYzrk5ztlanri4jri6QuXG4gKlxuICog67mM65Oc7JeQIO2VhOyalO2VnCAuc3djcmPripQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkOyEnCDssL7qs6AsIOyXhuycvOuptCBzb25hbXXqsIAg6rSA66as7ZWY64qUIC5zd2NyYy5wcm9qZWN0LWRlZmF1bHTrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICogc29uYW11LmNvbmZpZy50c+uKlCBzcmPsl5Ag65Ok7Ja07J6I7KeAIOyViuq4sCDrlYzrrLjsl5AgU1dDX0JVSUxEX0NPTU1BTkTroZwg67mM65Oc65CY7KeAIOyViuyKteuLiOuLpC5cbiAqIOuUsOudvOyEnCDrlLDroZwg67mM65Oc7ZW07KSN64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkKCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG5cbiAgLy8g7Lac66ClIOuUlOugie2GoOumrOulvCDsoJzqsbDtlanri4jri6QuXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJlbW92aW5nIGJ1aWxkIGRpcmVjdG9yeS4uLlwiKSk7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhCVUlMRF9ESVIpKSB7XG4gICAgICBhd2FpdCBybShCVUlMRF9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJSZW1vdmUgYnVpbGQgZGlyZWN0b3J5IGZhaWxlZC5cIiksIGVycm9yKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyAuc3djcmMg7YyM7J287J2EIOyngOygle2VqeuLiOuLpC5cbiAgbGV0IHN3Y0ZpbGVQYXRoID0gXCIuc3djcmNcIjtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHN3Y0ZpbGVQYXRoKSkge1xuICAgICAgLy8g7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkCAuc3djcmPqsIAg7J6I7Jy866m0IOyasOyEoOycvOuhnCDsgqzsmqntlanri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiVXNpbmcgLnN3Y3JjIGZyb20gcHJvamVjdCByb290Li4uXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g7JWE64uI652866m0IHNvbmFtdeqwgCDqtIDrpqztlZjripQgLnN3Y3JjLnByb2plY3QtZGVmYXVsdOulvCDqsIDsoLjri6Qg7JSB64uI64ukLlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlVzaW5nIGRlZmF1bHQgLnN3Y3JjIGZyb20gc29uYW11IHBhY2thZ2UuLi5cIikpO1xuICAgICAgc3djRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLnN3Y3JjLnByb2plY3QtZGVmYXVsdFwiKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJTZXR0aW5nIHVwIHN3YyBjb25maWcgZmlsZSBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8g7IaM7IqkIOuUlOugie2GoOumrOulvCDruYzrk5ztlanri4jri6QuXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIkJ1aWxkaW5nIHdpdGggc3djLi4uXCIpKTtcbiAgICBleGVjU3luYyhTV0NfQlVJTERfQ09NTUFORChzd2NGaWxlUGF0aCksIHsgY3dkOiBhcGlSb290LCBzdGRpbzogXCJpbmhlcml0XCIgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJCdWlsZCBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8g66eI7KeA66eJ7JeQ64qUIO2DgOyehSDssrTtgazrpbwg7ZW07JqULlxuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJDaGVja2luZyB0eXBlcyB3aXRoIHRzYy4uLlwiKSk7XG4gICAgZXhlY1N5bmMoVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCwge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiVHlwZSBjaGVjayBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogcG5wbSBzdGFydCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOu5jOuTnOuQnCDtlITroZzsoJ3tirjrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOuQnCDqsrDqs7zrrLwoZGlzdCDrlJTroInthqDrpqzsnZggaW5kZXguanMg7JeU7Yq466as7Y+s7J247Yq4KeydtCDsl4bri6TrqbQg7Iuk7ZaJ7J2EIOykkeuLqO2VqeuLiOuLpC5cbiAqIOyGjOyKpOuntSDsp4Dsm5Dqs7wgZG90ZW52IOyngOybkOydhCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcImRpc3QvaW5kZXguanNcIjtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoZW50cnlQb2ludCkpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2VudHJ5UG9pbnR9IG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIHlvdXIgcHJvamVjdCBmaXJzdC5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJ1bjogeWFybiBzb25hbXUgYnVpbGRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcImNoaWxkX3Byb2Nlc3NcIik7XG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIFtcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIFwiLXJcIiwgXCJkb3RlbnYvY29uZmlnXCIsIGVudHJ5UG9pbnRdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9LFxuICApO1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBNaWdyYXRvcigpIHtcbiAgLy8gbWlncmF0b3JcbiAgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBGaXh0dXJlTWFuYWdlcigpIHtcbiAgRml4dHVyZU1hbmFnZXIuaW5pdCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3J1bigpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcbiAgICBcImFwcGx5XCIsXG4gICAgT2JqZWN0LmtleXMoU29uYW11LmRiQ29uZmlnKSBhcyAoa2V5b2YgU29uYW11REJDb25maWcpW10gLyrsi7kg64ukISovLFxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3N0YXR1cygpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuICAvLyBzdGF0dXM7XG4gIGNvbnNvbGUubG9nKHN0YXR1cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW5pdCgpIHtcbiAgY29uc3Qgc3JjQ29uZmlnID0gU29uYW11LmRiQ29uZmlnLmRldmVsb3BtZW50X21hc3RlcjtcbiAgY29uc3QgdGFyZ2V0cyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCIoUkVNT1RFKSBGaXh0dXJlIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiKExPQ0FMKSBUZXN0aW5nIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy50ZXN0LFxuICAgICAgdG9Ta2lwOiAoKCkgPT4ge1xuICAgICAgICBjb25zdCByZW1vdGVDb25uID0gU29uYW11LmRiQ29uZmlnLmZpeHR1cmUuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIGNvbnN0IGxvY2FsQ29ubiA9IFNvbmFtdS5kYkNvbmZpZy50ZXN0LmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICAgICAgICByZXR1cm4gcmVtb3RlQ29ubi5ob3N0ID09PSBsb2NhbENvbm4uaG9zdCAmJiByZW1vdGVDb25uLmRhdGFiYXNlID09PSBsb2NhbENvbm4uZGF0YWJhc2U7XG4gICAgICB9KSgpLFxuICAgIH0sXG4gIF0gYXMge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY29uZmlnOiBLbmV4LkNvbmZpZztcbiAgICB0b1NraXA/OiBib29sZWFuO1xuICB9W107XG5cbiAgLy8gMS4g6riw7KSAREIg7Iqk7YKk66eI66W8IOuNpO2UhFxuICBjb25zb2xlLmxvZyhcIkRVTVAuLi5cIik7XG4gIGNvbnN0IGR1bXBGaWxlbmFtZSA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtJHtEYXRlLm5vdygpfS5zcWxgO1xuICBjb25zdCBzcmNDb25uID0gc3JjQ29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICBjb25zdCBtaWdyYXRpb25zRHVtcCA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtbWlncmF0aW9ucy0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGV4ZWNTeW5jKFxuICAgIGBteXNxbGR1bXAgLWgke3NyY0Nvbm4uaG9zdH0gLXUke3NyY0Nvbm4udXNlcn0gLXAke3NyY0Nvbm4ucGFzc3dvcmR9IC0tc2luZ2xlLXRyYW5zYWN0aW9uIC1kIC0tbm8tY3JlYXRlLWRiIC0tdHJpZ2dlcnMgJHtzcmNDb25uLmRhdGFiYXNlfSA+ICR7ZHVtcEZpbGVuYW1lfWAsXG4gICk7XG4gIGNvbnN0IF9kYiA9IGtuZXgoc3JjQ29uZmlnKTtcbiAgY29uc3QgW1ttaWdyYXRpb25zXV0gPSBhd2FpdCBfZGIucmF3KFxuICAgIFwiU0VMRUNUIENPVU5UKCopIGFzIGNvdW50IEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWEgPSA/IEFORCB0YWJsZV9uYW1lID0gJ2tuZXhfbWlncmF0aW9ucydcIixcbiAgICBbc3JjQ29ubi5kYXRhYmFzZV0sXG4gICk7XG4gIGlmIChtaWdyYXRpb25zLmNvdW50ID4gMCkge1xuICAgIGV4ZWNTeW5jKFxuICAgICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9IGtuZXhfbWlncmF0aW9ucyBrbmV4X21pZ3JhdGlvbnNfbG9jayA+ICR7bWlncmF0aW9uc0R1bXB9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g64yA7IOBREIg6rCB6rCB7JeQIOuMgO2VmOyXrCDsobTsnqzsl6zrtoAg7ZmV7J24IO2bhCDrtpPquLBcbiAgZm9yIGF3YWl0IChjb25zdCB7IGxhYmVsLCBjb25maWcsIHRvU2tpcCB9IG9mIHRhcmdldHMpIHtcbiAgICBjb25zdCBjb25uID0gY29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuXG4gICAgaWYgKHRvU2tpcCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2xhYmVsfTogU2tpcHBlZCFgKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IGtuZXgoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAuLi4oKGNvbmZpZy5jb25uZWN0aW9uID8/IHt9KSBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWcpLFxuICAgICAgICBkYXRhYmFzZTogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBbW3Jvd11dID0gYXdhaXQgZGIucmF3KGBTSE9XIERBVEFCQVNFUyBMSUtFIFwiJHtjb25uLmRhdGFiYXNlfVwiYCk7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAke2xhYmVsfTogRGF0YWJhc2UgXCIke2Nvbm4uZGF0YWJhc2V9XCIgQWxyZWFkeSBleGlzdHNgKSk7XG4gICAgICBhd2FpdCBkYi5kZXN0cm95KCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgU1lOQyB0byAke2xhYmVsfS4uLmApO1xuICAgIGNvbnN0IG15c3FsQ21kID0gYG15c3FsIC1oJHtjb25uLmhvc3R9IC11JHtjb25uLnVzZXJ9IC1wJHtjb25uLnBhc3N3b3JkfWA7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBcXGAke2Nvbm4uZGF0YWJhc2V9XFxgJ2ApO1xuICAgIGV4ZWNTeW5jKGAke215c3FsQ21kfSAtZSAnQ1JFQVRFIERBVEFCQVNFIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke2R1bXBGaWxlbmFtZX1gKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKG1pZ3JhdGlvbnNEdW1wKSkge1xuICAgICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke21pZ3JhdGlvbnNEdW1wfWApO1xuICAgIH1cblxuICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGF3YWl0IF9kYi5kZXN0cm95KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIHJlY29yZElkczogbnVtYmVyW10pIHtcbiAgYXdhaXQgc2V0dXBGaXh0dXJlTWFuYWdlcigpO1xuXG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLmltcG9ydEZpeHR1cmUoZW50aXR5SWQsIHJlY29yZElkcyk7XG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLnN5bmMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9zeW5jKCkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX3ByYWN0aWNlKG5hbWU6IHN0cmluZykge1xuICBjb25zdCBwcmFjdGljZURpciA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwicHJhY3RpY2VzXCIpO1xuICBjb25zdCBmaWxlTmFtZXMgPSBhd2FpdCByZWFkZGlyKHByYWN0aWNlRGlyKTtcblxuICBjb25zdCBtYXhTZXFObyA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKCEoYXdhaXQgZXhpc3RzKHByYWN0aWNlRGlyKSkpIHtcbiAgICAgIGF3YWl0IG1rZGlyKHByYWN0aWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZFNlcXMgPSBmaWxlTmFtZXNcbiAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5zdGFydHNXaXRoKFwicFwiKSAmJiBmaWxlTmFtZS5lbmRzV2l0aChcIi50c1wiKSlcbiAgICAgIC5tYXAoKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IFssIHNlcU5vXSA9IGZpbGVOYW1lLm1hdGNoKC9ecChbMC05XSspLS8pID8/IFtcIjBcIiwgXCIwXCJdO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc2VxTm8pO1xuICAgICAgfSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XG5cbiAgICBpZiAoZmlsdGVyZWRTZXFzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZFNlcXNbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pKCk7XG5cbiAgY29uc3QgY3VycmVudFNlcU5vID0gbWF4U2VxTm8gKyAxO1xuICBjb25zdCBmaWxlTmFtZSA9IGBwJHtjdXJyZW50U2VxTm99LSR7bmFtZX0udHNgO1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5qb2luKHByYWN0aWNlRGlyLCBmaWxlTmFtZSk7XG5cbiAgY29uc3QgY29kZSA9IFtcbiAgICBgaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgXCJcIixcbiAgICBgY29uc29sZS5jbGVhcigpO2AsXG4gICAgYGNvbnNvbGUubG9nKFwiJHtmaWxlTmFtZX1cIik7YCxcbiAgICBcIlwiLFxuICAgIGBTb25hbXUucnVuU2NyaXB0KGFzeW5jICgpID0+IHtgLFxuICAgIGAgLy8gVE9ET2AsXG4gICAgYH0pO2AsXG4gICAgXCJcIixcbiAgXS5qb2luKFwiXFxuXCIpO1xuICBhd2FpdCB3cml0ZUZpbGUoZHN0UGF0aCwgY29kZSk7XG5cbiAgZXhlY1N5bmMoYGNvZGUgJHtkc3RQYXRofWApO1xuXG4gIGNvbnN0IHJ1bkNvZGUgPSBgeWFybiBub2RlIC1yIGRvdGVudi9jb25maWcgLS1lbmFibGUtc291cmNlLW1hcHMgZGlzdC9wcmFjdGljZXMvJHtmaWxlTmFtZS5yZXBsYWNlKFxuICAgIFwiLnRzXCIsXG4gICAgXCIuanNcIixcbiAgKX1gO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay5ibHVlKHJ1bkNvZGUpfSBjb3BpZWQgdG8gY2xpcGJvYXJkLmApO1xuICBleGVjU3luYyhgZWNobyBcIiR7cnVuQ29kZX1cIiB8IHBiY29weWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX2VudGl0eShlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuY3JlYXRlRW50aXR5KHsgZW50aXR5SWQsIHRpdGxlOiBlbnRpdHlJZCB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRfbW9kZWwoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbFwiLCB7XG4gICAgZW50aXR5SWQsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbF90ZXN0KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5nZW5lcmF0ZVRlbXBsYXRlKFwibW9kZWxfdGVzdFwiLCB7XG4gICAgZW50aXR5SWQsXG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbImNoYWxrIiwiZG90ZW52IiwiY29uZmlnIiwiZXhlY1N5bmMiLCJzcGF3biIsIm1rZGlyIiwicmVhZGRpciIsInJtIiwid3JpdGVGaWxlIiwia25leCIsImNyZWF0ZVJlcXVpcmUiLCJwYXRoIiwicHJvY2VzcyIsInRzaWNsaSIsIlNvbmFtdSIsIkVudGl0eU1hbmFnZXIiLCJNaWdyYXRvciIsIkZpeHR1cmVNYW5hZ2VyIiwiZXhpc3RzIiwiZmluZEFwaVJvb3RQYXRoIiwiQlVJTERfRElSIiwiU1dDX0JVSUxEX0NPTU1BTkQiLCJUU0NfVFlQRV9DSEVDS19DT01NQU5EIiwibWlncmF0b3IiLCJib290c3RyYXAiLCJub3RUb0luaXQiLCJpbmNsdWRlcyIsImFyZ3YiLCJpbml0IiwidHlwZXMiLCJ0eXBlIiwibmFtZSIsIm1lc3NhZ2UiLCJjaG9pY2VzIiwiZ2V0QWxsUGFyZW50SWRzIiwibWFwIiwiZW50aXR5SWQiLCJ0aXRsZSIsInZhbHVlIiwiYXJncyIsInJ1bm5lcnMiLCJtaWdyYXRlX3N0YXR1cyIsIm1pZ3JhdGVfcnVuIiwiZml4dHVyZV9pbml0IiwiZml4dHVyZV9pbXBvcnQiLCJmaXh0dXJlX3N5bmMiLCJzdHViX3ByYWN0aWNlIiwic3R1Yl9lbnRpdHkiLCJzY2FmZm9sZF9tb2RlbCIsInNjYWZmb2xkX21vZGVsX3Rlc3QiLCJzeW5jIiwiZGV2IiwiYnVpbGQiLCJzdGFydCIsImRlc3Ryb3kiLCJmaW5hbGx5Iiwic3luY2VyIiwiYXBpUm9vdCIsImVudHJ5UG9pbnQiLCJjb25zb2xlIiwibG9nIiwieWVsbG93IiwiYm9sZCIsImhvdFJ1bm5lckJpblBhdGgiLCJ1cmwiLCJyZXNvbHZlIiwic2VydmVyUHJvY2VzcyIsImV4ZWNQYXRoIiwiam9pbiIsImN3ZCIsInN0ZGlvIiwiZW52IiwiTk9ERV9FTlYiLCJIT1QiLCJBUElfUk9PVF9QQVRIIiwiY2xlYW51cCIsImtpbGwiLCJleGl0Iiwib24iLCJjb2RlIiwiZXJyb3IiLCJyZWQiLCJibHVlIiwicmVjdXJzaXZlIiwiZm9yY2UiLCJzd2NGaWxlUGF0aCIsImRpcm5hbWUiLCJzZXR1cE1pZ3JhdG9yIiwic2V0dXBGaXh0dXJlTWFuYWdlciIsInJ1bkFjdGlvbiIsIk9iamVjdCIsImtleXMiLCJkYkNvbmZpZyIsInN0YXR1cyIsImdldFN0YXR1cyIsInNyY0NvbmZpZyIsImRldmVsb3BtZW50X21hc3RlciIsInRhcmdldHMiLCJsYWJlbCIsImZpeHR1cmUiLCJ0ZXN0IiwidG9Ta2lwIiwicmVtb3RlQ29ubiIsImNvbm5lY3Rpb24iLCJsb2NhbENvbm4iLCJob3N0IiwiZGF0YWJhc2UiLCJkdW1wRmlsZW5hbWUiLCJEYXRlIiwibm93Iiwic3JjQ29ubiIsIm1pZ3JhdGlvbnNEdW1wIiwidXNlciIsInBhc3N3b3JkIiwiX2RiIiwibWlncmF0aW9ucyIsInJhdyIsImNvdW50IiwiY29ubiIsImRiIiwidW5kZWZpbmVkIiwicm93IiwibXlzcWxDbWQiLCJyZWNvcmRJZHMiLCJpbXBvcnRGaXh0dXJlIiwicHJhY3RpY2VEaXIiLCJhcGlSb290UGF0aCIsImZpbGVOYW1lcyIsIm1heFNlcU5vIiwiZmlsdGVyZWRTZXFzIiwiZmlsdGVyIiwiZmlsZU5hbWUiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzZXFObyIsIm1hdGNoIiwicGFyc2VJbnQiLCJzb3J0IiwiYSIsImIiLCJsZW5ndGgiLCJjdXJyZW50U2VxTm8iLCJkc3RQYXRoIiwicnVuQ29kZSIsInJlcGxhY2UiLCJjcmVhdGVFbnRpdHkiLCJnZW5lcmF0ZVRlbXBsYXRlIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsWUFBWSxTQUFTO0FBRTVCQSxPQUFPQyxNQUFNO0FBRWIsU0FBU0MsUUFBUSxFQUFFQyxLQUFLLFFBQVEsZ0JBQWdCO0FBQ2hELFNBQVNDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxFQUFFLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUM1RCxPQUFPQyxVQUF5QixPQUFPO0FBQ3ZDLFNBQVNDLGFBQWEsUUFBUSxTQUFTO0FBQ3ZDLE9B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
|
package/dist/database/db.d.ts
CHANGED
|
@@ -6,10 +6,10 @@ export type DBPreset = "w" | "r";
|
|
|
6
6
|
export type SonamuDBConfig = {
|
|
7
7
|
development_master: Knex.Config;
|
|
8
8
|
development_slave: Knex.Config;
|
|
9
|
-
test: Knex.Config;
|
|
10
|
-
fixture_remote: Knex.Config;
|
|
11
9
|
production_master: Knex.Config;
|
|
12
10
|
production_slave: Knex.Config;
|
|
11
|
+
fixture: Knex.Config;
|
|
12
|
+
test: Knex.Config;
|
|
13
13
|
};
|
|
14
14
|
export declare class DBClass {
|
|
15
15
|
private wdb?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAa,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAIvC,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAa,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAIvC,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAU3D,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;IAChC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IAEZ,kBAAkB,wCAA+C;IAEjE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7D,qBAAqB,IAAI,kBAAkB;IAIlD,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAgC5B,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM;IA2BnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWvB,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,cAAc;IAsDlE,eAAe,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAQ;IACjD,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;IAKlD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAIzC;AACD,eAAO,MAAM,EAAE,SAAgB,CAAC"}
|