tnx-shared 6.0.10 → 6.0.11
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/bundles/tnx-shared.umd.js +0 -3
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/esm2015/services/common/t06helper.js +1 -2
- package/esm2015/services/permission.service.js +1 -3
- package/fesm2015/tnx-shared.js +0 -3
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +1 -1
- package/services/common/t06helper.d.ts.map +1 -1
- package/services/permission.service.d.ts.map +1 -1
|
@@ -24,7 +24,6 @@ export class T06HelperService {
|
|
|
24
24
|
return '';
|
|
25
25
|
const keyLen = this.keyBytes.length;
|
|
26
26
|
const encBytes = this.base64UrlToBytes(encryptedText);
|
|
27
|
-
console.log('encBytes__', encBytes.map((b, i) => String.fromCharCode(b ^ this.keyBytes[i % keyLen])).join(''));
|
|
28
27
|
return encBytes.map((b, i) => String.fromCharCode(b ^ this.keyBytes[i % keyLen])).join('');
|
|
29
28
|
}
|
|
30
29
|
}
|
|
@@ -32,4 +31,4 @@ T06HelperService.ɵprov = i0.ɵɵdefineInjectable({ factory: function T06HelperS
|
|
|
32
31
|
T06HelperService.decorators = [
|
|
33
32
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
34
33
|
];
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidDA2aGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NvbW1vbi90MDZoZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUQ3QjtRQUdFLDJDQUEyQztRQUMxQixlQUFVLEdBQUcsa0VBQWtFLENBQUM7UUFDaEYsYUFBUSxHQUFhLEtBQUssQ0FBQyxJQUFJLENBQzlDLElBQUksQ0FBQyxVQUFVLEVBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUNyQixDQUFDO0tBd0JIO0lBdEJTLGdCQUFnQixDQUFDLEdBQVc7UUFDbEMsTUFBTSxNQUFNLEdBQUcsR0FBRzthQUNmLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV4RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFlO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3pELE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQ25CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQ25CLE9BQU8sQ0FBQyxJQUFJLEVBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksQ0FBQyxhQUFxQjtRQUN4QixJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE1BQU0sTUFBTSxHQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RCxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLENBQUM7Ozs7WUEvQkYsVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBUMDZIZWxwZXJTZXJ2aWNlIHtcclxuXHJcbiAgLy8vIFBo4bqjaSBraOG7m3AgaG/DoG4gdG/DoG4gduG7m2kgQyMgU3BlY2lhbENoYXJzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBTRUNSRVRfS0VZID0gJzY0QjZFQ0MwMUYxQjM5RDk3NzIwQzQxNEVGQ0RFNEIyM0REOUE0Q0NGMzgwQzdDQzJBM0VFRjRFNEQzNkQ5N0MnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkga2V5Qnl0ZXM6IG51bWJlcltdID0gQXJyYXkuZnJvbShcclxuICAgIHRoaXMuU0VDUkVUX0tFWSxcclxuICAgIGMgPT4gYy5jaGFyQ29kZUF0KDApLFxyXG4gICk7XHJcblxyXG4gIHByaXZhdGUgYmFzZTY0VXJsVG9CeXRlcyhzdHI6IHN0cmluZyk6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IGJhc2U2NCA9IHN0clxyXG4gICAgICAucmVwbGFjZSgvLS9nLCAnKycpXHJcbiAgICAgIC5yZXBsYWNlKC9fL2csICcvJylcclxuICAgICAgLnBhZEVuZChzdHIubGVuZ3RoICsgKDQgLSAoc3RyLmxlbmd0aCAlIDQpKSAlIDQsICc9Jyk7XHJcblxyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYXRvYihiYXNlNjQpLCBjID0+IGMuY2hhckNvZGVBdCgwKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ5dGVzVG9CYXNlNjRVcmwoYnl0ZXM6IG51bWJlcltdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBidG9hKGJ5dGVzLm1hcChiID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoYikpLmpvaW4oJycpKVxyXG4gICAgICAucmVwbGFjZSgvXFwrL2csICctJylcclxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXHJcbiAgICAgIC5yZXBsYWNlKC89L2csICAnJyk7XHJcbiAgfVxyXG5cclxuICB0NmQxKGVuY3J5cHRlZFRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWVuY3J5cHRlZFRleHQpIHJldHVybiAnJztcclxuICAgIGNvbnN0IGtleUxlbiAgID0gdGhpcy5rZXlCeXRlcy5sZW5ndGg7XHJcbiAgICBjb25zdCBlbmNCeXRlcyA9IHRoaXMuYmFzZTY0VXJsVG9CeXRlcyhlbmNyeXB0ZWRUZXh0KTtcclxuICAgIHJldHVybiBlbmNCeXRlcy5tYXAoKGIsIGkpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoYiBeIHRoaXMua2V5Qnl0ZXNbaSAlIGtleUxlbl0pKS5qb2luKCcnKTtcclxuICB9XHJcbn0iXX0=
|
|
@@ -393,7 +393,6 @@ export class PermissionService extends BaseService {
|
|
|
393
393
|
// element = this.t6helper.fromIndexString(element, this.t6str);
|
|
394
394
|
}));
|
|
395
395
|
}
|
|
396
|
-
// console.log(`Lấy quyền từ local storage với key [${key}] và giá trị ${result}`);
|
|
397
396
|
return arr;
|
|
398
397
|
}
|
|
399
398
|
}
|
|
@@ -413,7 +412,6 @@ export class PermissionService extends BaseService {
|
|
|
413
412
|
// element = this.t6helper.fromIndexString(element, this.t6str);
|
|
414
413
|
}));
|
|
415
414
|
}
|
|
416
|
-
console.log(`Lấy quyền với key [${key}] và giá trị ${arr}`);
|
|
417
415
|
return arr;
|
|
418
416
|
});
|
|
419
417
|
}
|
|
@@ -442,4 +440,4 @@ PermissionService.ctorParameters = () => [
|
|
|
442
440
|
{ type: Common },
|
|
443
441
|
{ type: T06HelperService }
|
|
444
442
|
];
|
|
445
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFLdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7OztBQUV0RCxNQUFNLE9BQU8sY0FBYztJQVN2QixZQUFZLElBQW9CO1FBTGhDLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFDM0Isa0JBQWEsR0FBYyxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBQ2pDLHdCQUFtQixHQUFjLEVBQUUsQ0FBQztRQUdoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztDQUNKO0FBS0QsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFTOUMsWUFDSSxJQUFnQixFQUNo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QUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDZCxnRUFBZ0U7Z0JBQ3BFLENBQUMsQ0FBQSxDQUFDLENBQUM7YUFDTjtZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEdBQUcsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUQsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDO0tBQUE7SUFFRCx3QkFBd0IsQ0FBQyxVQUFrQixFQUFFLE1BQWM7UUFDdkQsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSw2QkFBNkIsVUFBVSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBcUI7UUFDcEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxxQkFBcUIsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Ozs7WUE3YUosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFqQ1EsVUFBVTtZQUNFLFFBQVE7WUFTcEIsbUJBQW1CO1lBQ25CLFdBQVc7WUFUWCxZQUFZO1lBRVoseUJBQXlCO1lBUXpCLE1BQU07WUFDTixnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9BdXRoU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xyXG5cclxuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2FwcGxpY2F0aW9uLWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb24gfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbic7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IFRuVXNlciB9IGZyb20gJy4uL21vZGVscy90bi11c2VyJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL2NvbW1vbi9jb21tb24nO1xyXG5pbXBvcnQgeyBUMDZIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24vdDA2aGVscGVyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQaGFuUXV5ZW5Nb2RlbCB7XHJcbiAgICBzdWJqZWN0VHlwZTogbnVtYmVyO1xyXG4gICAgaWRVc2VyR3JvdXBzPzogc3RyaW5nW107XHJcbiAgICBpZFVzZXJzPzogc3RyaW5nW107XHJcbiAgICBhZGRSb2xlSWRzPzogc3RyaW5nW10gPSBbXTtcclxuICAgIHJlbW92ZVJvbGVJZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgYWRkUGVybWlzc2lvbklkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICByZW1vdmVQZXJtaXNzaW9uSWRzPzogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihpbml0OiBQaGFuUXV5ZW5Nb2RlbCkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGluaXQpIHtcclxuICAgICAgICAgICAgdGhpc1trZXldID0gaW5pdFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcclxuXHJcbiAgICByZWFkb25seSBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2U7XHJcbiAgICByZWFkb25seSBfY29uZmlnOiBhbnk7XHJcbiAgICByZWFkb25seSBpZ25vcmVBZG1pbiA9IGZhbHNlO1xyXG4gICAgZGVsYXlDaGVja1Blcm1pc3Npb25zID0gW107XHJcbiAgICByb290OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcclxuICAgIGFwcENvZGU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZSwgcHJpdmF0ZSBjb21tb246IENvbW1vbiwgcHJpdmF0ZSB0NmhlbHBlcjogVDA2SGVscGVyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke2NvbW1vbi50Nm0yKGNvbW1vbi5BVV9FUCl9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vcGVybWlzc2lvbmApO1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IHRoaXMuY29tbW9uLnQ2bTIoY29tbW9uLkFVX0VQKTtcclxuICAgICAgICB0aGlzLmlnbm9yZUFkbWluID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50LmlzSWdub3JlQWRtaW47XHJcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fY29uZmlnLmFwcENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJQZXJtaXNzaW9uQ2FjaGVBbGwoKSB7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICBjb25zdCBsc3RBcGlFbmRwb2ludCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFwaURvbWFpbiA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW47XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5OYW1lIGluIGFwaURvbWFpbikge1xyXG4gICAgICAgICAgICBpZiAoZG9tYWluTmFtZS5zdGFydHNXaXRoKCctJykgfHwgZG9tYWluTmFtZS5zdGFydHNXaXRoKCcxJykgfHwgZG9tYWluTmFtZSA9PSAnZ2F0ZXdheScpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCByZWFsRG9tYWluTmFtZSA9IGRvbWFpbk5hbWUuc3BsaXQoJ0VuZHBvaW50JykgPyBkb21haW5OYW1lLnNwbGl0KCdFbmRwb2ludCcpWzBdIDogZG9tYWluTmFtZTtcclxuICAgICAgICAgICAgbHN0QXBpRW5kcG9pbnQucHVzaChyZWFsRG9tYWluTmFtZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJQZXJtaXNzaW9uQ2FjaGUoWy4uLmxzdEFwcENvZGVzLCAuLi5sc3RBcGlFbmRwb2ludF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGVybWlzc2lvbkNhY2hlKGxzdE1vZHVsZTogc3RyaW5nW10pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NsZWFyUGVybWlzc2lvbkNhY2hlYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdE1vZHVsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEN1cnJlbnRVc2VyUGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEFsbEJhc2VQZXJtaXNzaW9uKHVzZXJJZD86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWxsQmFzZVBlcm1pc3Npb25gO1xyXG4gICAgICAgIC8vIHJldHVybiBz4bubbSB2w6wgxJHDonkgbMOgIHRyxrDhu51uZyBo4bujcCBs4bqleSBwZXJtaXNzaW9uIHRoZW8gSWQgY+G7p2EgVXNlclxyXG4gICAgICAgIC8vIGtvIHNldCBsb2NhbCBzdG9yYWdlIHbDrCBz4bq9IGzDoG0gaOG7j25nIHF1eeG7gW4gY+G7p2EgbmfGsOG7nWkgZMO5bmcgaGnhu4duIHThuqFpXHJcbiAgICAgICAgaWYgKHVzZXJJZCAmJiB1c2VySWQgIT0gJycgJiYgdXNlcklkICE9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwgKyBgP3VzZXJJZD0ke3VzZXJJZH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICBpZiAodXNlclxyXG4gICAgICAgICAgICAmJiAodXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKVxyXG4gICAgICAgICAgICB8fCAodXNlci5pc2FkbWluICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICAvLyBO4bq/dSBDw7MgZXJyb3IgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiB04buVbmcgaOG7o3AgdGjDrCBxdWF5IHbhu4EgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiBk4buxYSB2w6BvIHThu6tuZyBtb2R1bGVcclxuICAgICAgICBpZiAoIXJlcyB8fCAhcmVzLnN1Y2Nlc3MgfHwgcmVzLmRhdGEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlQXJyOiBQcm9taXNlPHN0cmluZ1tdPltdID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiBsc3RBcHBDb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZUFyci5wdXNoKHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oY29kZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgbG9jYWwgc3RvcmFnZSBjaG8gcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiBsc3RBcHBDb2Rlcykge1xyXG4gICAgICAgICAgICBsZXQgcGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvZGUgPSBzZXJ2aWNlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LnRvVXBwZXJDYXNlKCkgIT0gc2VydmljZUNvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zID0gcmVzLmRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBBVC4ke3NlcnZpY2VDb2RlfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShwZXJtaXNzaW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRydXnhu4FuIHbDoG8gZGFuaCBzw6FjaCBwZXJtaXNpb24gY+G6p24gY2hlY2tcclxuICAgICAqIEBwYXJhbSBsc3RQZXJtaXNzaW9uQ29kZSBuaOG7r25nIHBlcnJtaXNpb24gY29kZSBj4bqnbiBjaGVjayA9PiBuw6puIGTDuW5nIHRyb25nIHRyxrDhu51uZyBo4bujcCBjaGVjayBjw6FjIGJ1dHRvbiB0cm9uZyBjb2RlXHJcbiAgICAgKiBAcmV0dXJucyB0cuG6oyByYSBjw6FjIHBlcnJtaXNpb25Db2RlIGPDsyBxdXnhu4FuXHJcbiAgICAgKi9cclxuICAgIGdldFBlcm1pc3Npb25BdXRob3JpemVkKGxzdFBlcm1pc3Npb25Db2RlOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbHN0UGVybWlzc2lvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmlzQXV0aG9yaXplZFBlcm1pc3Npb24oaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGlzQXV0aG9yaXplZFBlcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgIHdoaWxlICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tQZXJtaXNzaW9uKHRoaXMuYXBwQ29kZSwgcGVybWlzc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaXNBdXRob3JpemVkKHNlcnZpY2U6IHN0cmluZywgcGVybWlzc2lvbjogc3RyaW5nLCBjaGVjRm9yTWVudTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fYXBwQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5kZWxheSgxMDApO1xyXG4gICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbihzZXJ2aWNlLCBwZXJtaXNzaW9uLCBjaGVjRm9yTWVudSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tQZXJtaXNzaW9uKHNlcnZpY2UsIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcsIGNoZWNrRm9yTWVudTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlSXNEZXZNb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIHZhbHVlSXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgdmFsdWVJc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbiAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4gJiYgdmFsdWVJc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IGF3YWl0IHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oc2VydmljZSk7XHJcbiAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvbnMgJiYgdXNlclBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGVja0Zvck1lbnVcclxuICAgICAgICAgICAgICAgICAgICA/IHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uVG9DaGVjaylcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NoZWNrUGVybWlzc2lvbih1c2VyUGVybWlzc2lvbnMsIHBlcm1pc3Npb25Ub0NoZWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBLaMO0bmcgY8OzIHF1eeG7gW4gduG7m2kgcGjDom4gaOG7hyBbJHtzZXJ2aWNlfV1gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrUGVybWlzc2lvbih1c2VyUGVybWlzc2lvbnM6IHN0cmluZ1tdLCBwZXJtaXNzaW9uVG9DaGVjazogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNoZWNrIHBlcm1pc3Npb24gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICAvLyBkdXnhu4d0IHF1YSB04burbmcgcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgIGZvciAoY29uc3QgdXNlclBlcm1pc3Npb24gb2YgdXNlclBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIC8vIGJp4bq/biDEkeG7gyBicmVhayBraOG7j2kgdsOybmcga2hpIG5nxrDhu51pIGTDuW5nIMSRxrDhu6NjIGF1dGhvcml6ZWRcclxuICAgICAgICAgICAgbGV0IGJyZWFrT3V0ZXJMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIHBvaW50ZXIgcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgICAgICBsZXQgdXNlclBlcm1pc3Npb25Qb2ludGVyID0gMDtcclxuICAgICAgICAgICAgLy8gcG9pbnRlciBwZXJtaXNzaW9uIMSRYW5nIGNoZWNrXHJcbiAgICAgICAgICAgIGxldCBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAvLyBtYXJrIGNvIHRoZSBjaGVjayBxdWVyeSBwYXJhbVxyXG4gICAgICAgICAgICBsZXQgYWJvdXRUb0NoZWNrUXVlcnlQYXJhbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBjaGVjayB04burbmcgY2hhciBj4bunYSAyIG3huqNuZ1xyXG4gICAgICAgICAgICBmb3IgKDsgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyIDwgcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoOykge1xyXG4gICAgICAgICAgICAgICAgLy8gbuG6v3UgY2hhciBsw6Aga8O9IHThu7EgYuG6r3QgxJHhuqd1IHRlbXBsYXRlID0+IHThu4tuaCB0aeG6v24gcG9pbnRlciBj4bunYSAyIG3huqNuZ1xyXG4gICAgICAgICAgICAgICAgbGV0IG5lZWRSZWNoZWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSA9PSAneycpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjaG8gxJHhur9uIGtoaSB0w6xtIMSRxrDhu6NjIGvDvSB04buxICcvJyB0aeG6v3AgdGhlbyB0aMOsIGThu6tuZyBs4bqhaVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIgPCB1c2VyUGVybWlzc2lvbi5sZW5ndGg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblBvaW50ZXIgPT0gdXNlclBlcm1pc3Npb24ubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0gIT0gJ30nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSA9PT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm91dFRvQ2hlY2tRdWVyeVBhcmFtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICArK3VzZXJQZXJtaXNzaW9uUG9pbnRlcjsgLy8gdGnhur9uIHRp4bq/biDEkeG6v24ga8O9IHThu7Egc2F1IGvhur90IHRow7pjIHRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRyxrDhu51uZyBo4bujcCB0csaw4budbmcgaOG7o3AgY2h14buXaSB0ZW1wbGF0ZSBjw7MgZOG6oW5nIFwie3RlbXBsYXRlfWFjc2VramZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA9PiBj4bqnbiBjaGVjayBjw6FjIGvDvSB04buxIHNhdSB0ZW1wbGF0ZSB2w6AgdHLGsOG7m2Mga8O9IHThu7EgJy8nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdICE9ICcvJyAmJiAoYWJvdXRUb0NoZWNrUXVlcnlQYXJhbSAmJiB1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdICE9ICcmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRSZWNoZWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIgPCB1c2VyUGVybWlzc2lvbi5sZW5ndGg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyIDwgcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoOyBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2tQb2ludGVyID09IHBlcm1pc3Npb25Ub0NoZWNrLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uVG9DaGVja1twZXJtaXNzaW9uVG9DaGVja1BvaW50ZXJdID09ICcvJyB8fCAoYWJvdXRUb0NoZWNrUXVlcnlQYXJhbSAmJiBwZXJtaXNzaW9uVG9DaGVja1twZXJtaXNzaW9uVG9DaGVja1BvaW50ZXJdID09ICcmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBicmVha0lubmVyTG9vcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRSZWNoZWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgbOG6oWkgY2hvIHRyxrDhu51uZyBo4bujcCBjaHXhu5dpIHRlbXBsYXRlIGPDsyBk4bqhbmcgXCJ7dGVtcGxhdGV9YWNzbGVrZmpcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGR1eeG7h3QgbmfGsOG7o2MgbOG6oWkgY2hvIMSR4bq/biBraGkgZ+G6t3Aga8O9IHThu7Ega+G6v3QgdGjDumMgdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcFVzZXJQb2ludGVyID0gdXNlclBlcm1pc3Npb25Qb2ludGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVG9DaGVja1BvaW50ZXIgPSBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHVzZXJQZXJtaXNzaW9uW3RlbXBVc2VyUG9pbnRlcl0gIT0gJ30nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGvDvSB04buxIGtow6FjIG5oYXUgPT4gYnJlYWsga2jhu49pIHbDsm5nIGtp4buDbSB0cmEgdHJvbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3RlbXBVc2VyUG9pbnRlcl0udG9Mb3dlckNhc2UoKSAhPSBwZXJtaXNzaW9uVG9DaGVja1t0ZW1wVG9DaGVja1BvaW50ZXJdLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrSW5uZXJMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBVc2VyUG9pbnRlci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wVG9DaGVja1BvaW50ZXItLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrSW5uZXJMb29wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlckNoYXIgPSB1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0b0NoZWNrQ2hhciA9IHBlcm1pc3Npb25Ub0NoZWNrW3Blcm1pc3Npb25Ub0NoZWNrUG9pbnRlcl0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIC8vIG7hur91IHVzZXJQZXJtaXNzaW9uIMSRYW5nIOG7nyBpbmRleCBjdeG7kWlcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblBvaW50ZXIgPT0gdXNlclBlcm1pc3Npb24ubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXIgY3Xhu5FpIGPhu6dhIDIgbeG6o25nICh0cuG7qyBraGkgbMOgIGvDvSB04buxIGvhur90IHRow7pjIHRlbXBsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHbDoCBjxaluZyBwaOG6o2kgbMOgIGNoYXIgY3Xhu5FpIGPhu6dhIG3huqNuZyBwZXJtaXNzaW9uIGPhuqduIGNoZWNrXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gPT4gbmfGsOG7nWkgZMO5bmcgYXV0aG9yaXplZCB2w6AgYnJlYWsga2jhu49pIHbDsm5nIGzhurdwIG5nb8OgaSBjw7luZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgodXNlckNoYXIgPT0gJ30nIHx8IHVzZXJDaGFyID09IHRvQ2hlY2tDaGFyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPT0gcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha091dGVyTG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXIgY8OzIGdp4buRbmcgbmhhdSBraMO0bmcsIGtow7RuZyBnaeG7kW5nIHRow6wgYnJlYWsga2jhu49pIHbDsm5nIGNoZWNrXHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckNoYXIgIT0gdG9DaGVja0NoYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBu4bq/dSBjaGFyIGdp4buRbmcgbmhhdSB0aMOsIHRp4bq/cCB04bulYyB2w7JuZyBsxINwXHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIrKztcclxuICAgICAgICAgICAgICAgIHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChicmVha091dGVyTG9vcCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzQXV0aG9yaXplZDtcclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tQZXJtaXNzaW9uT2xkKHVzZXJQZXJtaXNzaW9uczogc3RyaW5nW10sIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2hlY2sgcXV54buBbiB0aGVvIGPDoWNoIGPFqSBu4bq/dSB0csaw4budbmcgaOG7jXAgbMOgIHBow6JuIHF1eeG7gW4gbW9kdWxlXHJcbiAgICAgICAgaWYgKHBlcm1pc3Npb25Ub0NoZWNrLmluY2x1ZGVzKCdNT0RVTEUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXNlclBlcm1pc3Npb25zLmluY2x1ZGVzKHBlcm1pc3Npb25Ub0NoZWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCB1c2VyUGVybWlzc2lvbiBvZiB1c2VyUGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgLy8gQ+G6r3QgY2h14buXaSBwZXJtaXNzaW9uIHRow6BuaCBt4bqjbmcgxJHhu4MgeGVtIG3hu5dpIGZyYWdlbWVudCBjw7Mga2jhu5twIG5oYXUga2jDtG5nXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9uRnJhZ21lbnRzID0gKHVzZXJQZXJtaXNzaW9uIGFzIHN0cmluZykuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbkZyYWdtZW50cyA9IHBlcm1pc3Npb25Ub0NoZWNrLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBN4bqjbmcga2jDoWMgxJHhu5kgZMOgaSB0aMOsIHRob8OhdCBz4bubbVxyXG4gICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoICE9IHBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYmnhur9uIGZsYWcgcmEgaGnhu4d1IG5nxrDhu51pIGTDuW5nIGF1dGhvcml6ZWQgdsOgIG91dCB2w7JuZ1xyXG4gICAgICAgICAgICBsZXQgYnJlYWtMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIG7hur91IHThuqV0IGPhuqMgcGjhuqduIHThu60ga2jhu5twIG5oYXUgPT4gcGVybWlzc2lvbiBuw6B5IHRyw7luZyB2w6AgbmfGsOG7nWkgZMO5bmcgxJHGsOG7o2MgYXV0aG9yaXplZFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJGcmFnZW1lbnQgPSB1c2VyUGVybWlzc2lvbkZyYWdtZW50c1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uRnJhZ21lbnQgPSBwZXJtaXNzaW9uRnJhZ21lbnRzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIC8vIHNraXAgcXVhIGPDoWMgcGjhuqduIHThu60gY8OzIGvDvSB04buxIGLhuq90IMSR4bqndSBsw6AgJ3snXHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckZyYWdlbWVudFswXSA9PSAneycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrTG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJGcmFnZW1lbnQudG9Mb3dlckNhc2UoKSAhPSBwZXJtaXNzaW9uRnJhZ21lbnQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IHBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYnJlYWtMb29wKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNBdXRob3JpemVkO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpc0F1dGhvcml6ZWRCeVBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBBcnJheTxQZXJtaXNzaW9uPiwgb3BlcmF0b3IgPSAnT1InLCBpZ25vcmVBZG1pbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wZXJhdG9yLnRvVXBwZXJDYXNlKCkgPT0gJ09SJykge1xyXG4gICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlcnZpY2VQZXJtaXNzaW9uKGl0ZW0uc2VydmljZSkudGhlbihwZXJtaXNzaW9uUmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVybWlzc2lvblJlc3VsdC5pbmNsdWRlcyhpdGVtLnBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShpc0F1dGhvcml6ZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNlcnZpY2VQZXJtaXNzaW9uKHNlcnZpY2UsIG92ZXJyaWRlTG9jYWxTdG9yYWdlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gYEFULiR7c2VydmljZS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIHZhciBzdHIgPSBcIlwiO1xyXG4gICAgICAgIGlmICghb3ZlcnJpZGVMb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZUl0ZW0gJiYgc3RvcmFnZUl0ZW0gIT09ICdudWxsJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goYXN5bmMgZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IGF3YWl0IHRoaXMudDZoZWxwZXIudDZkMShlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goc3RyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudCA9IHRoaXMudDZoZWxwZXIuZnJvbUluZGV4U3RyaW5nKGVsZW1lbnQsIHRoaXMudDZzdHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYEzhuqV5IHF1eeG7gW4gdOG7qyBsb2NhbCBzdG9yYWdlIHbhu5tpIGtleSBbJHtrZXl9XSB2w6AgZ2nDoSB0cuG7iyAke3Jlc3VsdH1gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGVybWlzc2lvbnNCeVNlcnZpY2U/c2VydmljZT0ke3NlcnZpY2V9YDtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3ZlcnJpZGVMb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhKSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT0gbnVsbCAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5mb3JFYWNoKGFzeW5jIGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gYXdhaXQgdGhpcy50NmhlbHBlci50NmQxKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc3RyKTtcclxuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgPSB0aGlzLnQ2aGVscGVyLmZyb21JbmRleFN0cmluZyhlbGVtZW50LCB0aGlzLnQ2c3RyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBM4bqleSBxdXnhu4FuIHbhu5tpIGtleSBbJHtrZXl9XSB2w6AgZ2nDoSB0cuG7iyAke2Fycn1gKTtcclxuICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25JZHNCeU1vZHVsZShtb2R1bGVDb2RlOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uSWRzQnlNb2R1bGUvJHttb2R1bGVDb2RlfS8ke3VzZXJJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwaGFuUXV5ZW5OZ3VvaUR1bmcobW9kZWw6IFBoYW5RdXllbk1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9QaGFuUXV5ZW5OZ3VvaUR1bmdgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbW9kZWwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
443
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFLdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7OztBQUV0RCxNQUFNLE9BQU8sY0FBYztJQVN2QixZQUFZLElBQW9CO1FBTGhDLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFDM0Isa0JBQWEsR0FBYyxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBQ2pDLHdCQUFtQixHQUFjLEVBQUUsQ0FBQztRQUdoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztDQUNKO0FBS0QsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFTOUMsWUFDSSxJQUFnQixFQUNo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QUFDLENBQUM7b0JBQ2QsZ0VBQWdFO2dCQUNwRSxDQUFDLENBQUEsQ0FBQyxDQUFDO2FBQ047WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUM7S0FBQTtJQUVELHdCQUF3QixDQUFDLFVBQWtCLEVBQUUsTUFBYztRQUN2RCxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLDZCQUE2QixVQUFVLElBQUksTUFBTSxFQUFFLENBQUM7UUFDbEYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFxQjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLHFCQUFxQixDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7OztZQTNhSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQWpDUSxVQUFVO1lBQ0UsUUFBUTtZQVNwQixtQkFBbUI7WUFDbkIsV0FBVztZQVRYLFlBQVk7WUFFWix5QkFBeUI7WUFRekIsTUFBTTtZQUNOLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbiB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3RuLXVzZXInO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vY29tbW9uL2NvbW1vbic7XHJcbmltcG9ydCB7IFQwNkhlbHBlclNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi90MDZoZWxwZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBoYW5RdXllbk1vZGVsIHtcclxuICAgIHN1YmplY3RUeXBlOiBudW1iZXI7XHJcbiAgICBpZFVzZXJHcm91cHM/OiBzdHJpbmdbXTtcclxuICAgIGlkVXNlcnM/OiBzdHJpbmdbXTtcclxuICAgIGFkZFJvbGVJZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcmVtb3ZlUm9sZUlkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICBhZGRQZXJtaXNzaW9uSWRzPzogc3RyaW5nW10gPSBbXTtcclxuICAgIHJlbW92ZVBlcm1pc3Npb25JZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGluaXQ6IFBoYW5RdXllbk1vZGVsKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdCkge1xyXG4gICAgICAgICAgICB0aGlzW2tleV0gPSBpbml0W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xyXG5cclxuICAgIHJlYWRvbmx5IHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZTtcclxuICAgIHJlYWRvbmx5IF9jb25maWc6IGFueTtcclxuICAgIHJlYWRvbmx5IGlnbm9yZUFkbWluID0gZmFsc2U7XHJcbiAgICBkZWxheUNoZWNrUGVybWlzc2lvbnMgPSBbXTtcclxuICAgIHJvb3Q6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xyXG4gICAgYXBwQ29kZTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9vYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hcHBDb250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLCBwcml2YXRlIGNvbW1vbjogQ29tbW9uLCBwcml2YXRlIHQ2aGVscGVyOiBUMDZIZWxwZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihodHRwLCBpbmplY3RvciwgYCR7Y29tbW9uLnQ2bTIoY29tbW9uLkFVX0VQKX0vJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9wZXJtaXNzaW9uYCk7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcclxuICAgICAgICB0aGlzLmVuZFBvaW50ID0gdGhpcy5jb21tb24udDZtMihjb21tb24uQVVfRVApO1xyXG4gICAgICAgIHRoaXMuaWdub3JlQWRtaW4gPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuaXNJZ25vcmVBZG1pbjtcclxuICAgICAgICB0aGlzLmFwcENvZGUgPSB0aGlzLl9jb25maWcuYXBwQ29kZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclBlcm1pc3Npb25DYWNoZUFsbCgpIHtcclxuICAgICAgICBjb25zdCBsc3RBcHBDb2RlcyA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YT8uYXBwU3dpdGNoZXI/Lm1hcChhcHAgPT4gYXBwLmNvZGUpID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IGxzdEFwaUVuZHBvaW50ID0gW107XHJcbiAgICAgICAgY29uc3QgYXBpRG9tYWluID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbjtcclxuICAgICAgICBmb3IgKGNvbnN0IGRvbWFpbk5hbWUgaW4gYXBpRG9tYWluKSB7XHJcbiAgICAgICAgICAgIGlmIChkb21haW5OYW1lLnN0YXJ0c1dpdGgoJy0nKSB8fCBkb21haW5OYW1lLnN0YXJ0c1dpdGgoJzEnKSB8fCBkb21haW5OYW1lID09ICdnYXRld2F5JykgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWxEb21haW5OYW1lID0gZG9tYWluTmFtZS5zcGxpdCgnRW5kcG9pbnQnKSA/IGRvbWFpbk5hbWUuc3BsaXQoJ0VuZHBvaW50JylbMF0gOiBkb21haW5OYW1lO1xyXG4gICAgICAgICAgICBsc3RBcGlFbmRwb2ludC5wdXNoKHJlYWxEb21haW5OYW1lLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jbGVhclBlcm1pc3Npb25DYWNoZShbLi4ubHN0QXBwQ29kZXMsIC4uLmxzdEFwaUVuZHBvaW50XSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJQZXJtaXNzaW9uQ2FjaGUobHN0TW9kdWxlOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ2xlYXJQZXJtaXNzaW9uQ2FjaGVgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbHN0TW9kdWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50VXNlclBlcm1pc3Npb24oKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0QWxsQmFzZVBlcm1pc3Npb24odXNlcklkPzogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBbGxCYXNlUGVybWlzc2lvbmA7XHJcbiAgICAgICAgLy8gcmV0dXJuIHPhu5ttIHbDrCDEkcOieSBsw6AgdHLGsOG7nW5nIGjhu6NwIGzhuqV5IHBlcm1pc3Npb24gdGhlbyBJZCBj4bunYSBVc2VyXHJcbiAgICAgICAgLy8ga28gc2V0IGxvY2FsIHN0b3JhZ2UgdsOsIHPhur0gbMOgbSBo4buPbmcgcXV54buBbiBj4bunYSBuZ8aw4budaSBkw7luZyBoaeG7h24gdOG6oWlcclxuICAgICAgICBpZiAodXNlcklkICYmIHVzZXJJZCAhPSAnJyAmJiB1c2VySWQgIT0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkRW1wdHkoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCArIGA/dXNlcklkPSR7dXNlcklkfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICh1c2VyXHJcbiAgICAgICAgICAgICYmICh1c2VyLmlzc3VwZXJ1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpXHJcbiAgICAgICAgICAgIHx8ICh1c2VyLmlzYWRtaW4gJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgICAgICBjb25zdCBsc3RBcHBDb2RlcyA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YT8uYXBwU3dpdGNoZXI/Lm1hcChhcHAgPT4gYXBwLmNvZGUpID8/IFtdO1xyXG4gICAgICAgIC8vIE7hur91IEPDsyBlcnJvciBs4bqleSBk4buvIGxp4buHdSBxdXnhu4FuIHThu5VuZyBo4bujcCB0aMOsIHF1YXkgduG7gSBs4bqleSBk4buvIGxp4buHdSBxdXnhu4FuIGThu7FhIHbDoG8gdOG7q25nIG1vZHVsZVxyXG4gICAgICAgIGlmICghcmVzIHx8ICFyZXMuc3VjY2VzcyB8fCByZXMuZGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VBcnI6IFByb21pc2U8c3RyaW5nW10+W10gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2RlIG9mIGxzdEFwcENvZGVzKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlQXJyLnB1c2godGhpcy5nZXRTZXJ2aWNlUGVybWlzc2lvbihjb2RlLCB0cnVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCBsb2NhbCBzdG9yYWdlIGNobyBwZXJtaXNzaW9uIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIGxzdEFwcENvZGVzKSB7XHJcbiAgICAgICAgICAgIGxldCBwZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlQ29kZSA9IHNlcnZpY2UudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkudG9VcHBlckNhc2UoKSAhPSBzZXJ2aWNlQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgPSByZXMuZGF0YVtrZXldO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gYEFULiR7c2VydmljZUNvZGV9YDtcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZUl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHBlcm1pc3Npb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJ1eeG7gW4gdsOgbyBkYW5oIHPDoWNoIHBlcm1pc2lvbiBj4bqnbiBjaGVja1xyXG4gICAgICogQHBhcmFtIGxzdFBlcm1pc3Npb25Db2RlIG5o4buvbmcgcGVycm1pc2lvbiBjb2RlIGPhuqduIGNoZWNrID0+IG7Dqm4gZMO5bmcgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGNoZWNrIGPDoWMgYnV0dG9uIHRyb25nIGNvZGVcclxuICAgICAqIEByZXR1cm5zIHRy4bqjIHJhIGPDoWMgcGVycm1pc2lvbkNvZGUgY8OzIHF1eeG7gW5cclxuICAgICAqL1xyXG4gICAgZ2V0UGVybWlzc2lvbkF1dGhvcml6ZWQobHN0UGVybWlzc2lvbkNvZGU6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGxzdFBlcm1pc3Npb25Db2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGxzdFBlcm1pc3Npb25Db2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsc3RQZXJtaXNzaW9uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF3YWl0IHRoaXMuaXNBdXRob3JpemVkUGVybWlzc2lvbihpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaXNBdXRob3JpemVkUGVybWlzc2lvbihwZXJtaXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XHJcbiAgICAgICAgd2hpbGUgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuZGVsYXkoMTAwKTtcclxuICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xyXG4gICAgICAgICAgICBpZiAocmV0cnlDb3VudCA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jaGVja1Blcm1pc3Npb24odGhpcy5hcHBDb2RlLCBwZXJtaXNzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpc0F1dGhvcml6ZWQoc2VydmljZTogc3RyaW5nLCBwZXJtaXNzaW9uOiBzdHJpbmcsIGNoZWNGb3JNZW51OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLl9hcHBDb250ZXh0LmdldFJvb3RDb250ZXh0KCk7XHJcbiAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgIHdoaWxlICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tQZXJtaXNzaW9uKHNlcnZpY2UsIHBlcm1pc3Npb24sIGNoZWNGb3JNZW51KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja1Blcm1pc3Npb24oc2VydmljZSwgcGVybWlzc2lvblRvQ2hlY2s6IHN0cmluZywgY2hlY2tGb3JNZW51OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVJc0Rldk1vZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgdmFsdWVJc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiB2YWx1ZUlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc2FkbWluICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbiAmJiB2YWx1ZUlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gYXdhaXQgdGhpcy5nZXRTZXJ2aWNlUGVybWlzc2lvbihzZXJ2aWNlKTtcclxuICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9ucyAmJiB1c2VyUGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrRm9yTWVudVxyXG4gICAgICAgICAgICAgICAgICAgID8gdXNlclBlcm1pc3Npb25zLmluY2x1ZGVzKHBlcm1pc3Npb25Ub0NoZWNrKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fY2hlY2tQZXJtaXNzaW9uKHVzZXJQZXJtaXNzaW9ucywgcGVybWlzc2lvblRvQ2hlY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYEtow7RuZyBjw7MgcXV54buBbiB24bubaSBwaMOibiBo4buHIFske3NlcnZpY2V9XWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tQZXJtaXNzaW9uKHVzZXJQZXJtaXNzaW9uczogc3RyaW5nW10sIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2hlY2sgcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgIC8vIGR1eeG7h3QgcXVhIHThu6tuZyBwZXJtaXNzaW9uIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgZm9yIChjb25zdCB1c2VyUGVybWlzc2lvbiBvZiB1c2VyUGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgLy8gYmnhur9uIMSR4buDIGJyZWFrIGto4buPaSB2w7JuZyBraGkgbmfGsOG7nWkgZMO5bmcgxJHGsOG7o2MgYXV0aG9yaXplZFxyXG4gICAgICAgICAgICBsZXQgYnJlYWtPdXRlckxvb3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gcG9pbnRlciBwZXJtaXNzaW9uIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgICAgIGxldCB1c2VyUGVybWlzc2lvblBvaW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAvLyBwb2ludGVyIHBlcm1pc3Npb24gxJFhbmcgY2hlY2tcclxuICAgICAgICAgICAgbGV0IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA9IDA7XHJcbiAgICAgICAgICAgIC8vIG1hcmsgY28gdGhlIGNoZWNrIHF1ZXJ5IHBhcmFtXHJcbiAgICAgICAgICAgIGxldCBhYm91dFRvQ2hlY2tRdWVyeVBhcmFtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIHThu6tuZyBjaGFyIGPhu6dhIDIgbeG6o25nXHJcbiAgICAgICAgICAgIGZvciAoOyBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPCBwZXJtaXNzaW9uVG9DaGVjay5sZW5ndGg7KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBu4bq/dSBjaGFyIGzDoCBrw70gdOG7sSBi4bqvdCDEkeG6p3UgdGVtcGxhdGUgPT4gdOG7i25oIHRp4bq/biBwb2ludGVyIGPhu6dhIDIgbeG6o25nXHJcbiAgICAgICAgICAgICAgICBsZXQgbmVlZFJlY2hlY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdID09ICd7Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNobyDEkeG6v24ga2hpIHTDrG0gxJHGsOG7o2Mga8O9IHThu7EgJy8nIHRp4bq/cCB0aGVvIHRow6wgZOG7q25nIGzhuqFpXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlciA8IHVzZXJQZXJtaXNzaW9uLmxlbmd0aDsgdXNlclBlcm1pc3Npb25Qb2ludGVyKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnfScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdID09PSAnPycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3V0VG9DaGVja1F1ZXJ5UGFyYW0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsrdXNlclBlcm1pc3Npb25Qb2ludGVyOyAvLyB0aeG6v24gdGnhur9uIMSR4bq/biBrw70gdOG7sSBzYXUga+G6v3QgdGjDumMgdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdHLGsOG7nW5nIGjhu6NwIHRyxrDhu51uZyBo4bujcCBjaHXhu5dpIHRlbXBsYXRlIGPDsyBk4bqhbmcgXCJ7dGVtcGxhdGV9YWNzZWtqZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vID0+IGPhuqduIGNoZWNrIGPDoWMga8O9IHThu7Egc2F1IHRlbXBsYXRlIHbDoCB0csaw4bubYyBrw70gdOG7sSAnLydcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0gIT0gJy8nICYmIChhYm91dFRvQ2hlY2tRdWVyeVBhcmFtICYmIHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0gIT0gJyYnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFJlY2hlY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlciA8IHVzZXJQZXJtaXNzaW9uLmxlbmd0aDsgdXNlclBlcm1pc3Npb25Qb2ludGVyKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25Qb2ludGVyID09IHVzZXJQZXJtaXNzaW9uLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdICE9ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPCBwZXJtaXNzaW9uVG9DaGVjay5sZW5ndGg7IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPT0gcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25Ub0NoZWNrW3Blcm1pc3Npb25Ub0NoZWNrUG9pbnRlcl0gPT0gJy8nIHx8IChhYm91dFRvQ2hlY2tRdWVyeVBhcmFtICYmIHBlcm1pc3Npb25Ub0NoZWNrW3Blcm1pc3Npb25Ub0NoZWNrUG9pbnRlcl0gPT0gJyYnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJyZWFrSW5uZXJMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAobmVlZFJlY2hlY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBs4bqhaSBjaG8gdHLGsOG7nW5nIGjhu6NwIGNodeG7l2kgdGVtcGxhdGUgY8OzIGThuqFuZyBcInt0ZW1wbGF0ZX1hY3NsZWtmalwiXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZHV54buHdCBuZ8aw4bujYyBs4bqhaSBjaG8gxJHhur9uIGtoaSBn4bq3cCBrw70gdOG7sSBr4bq/dCB0aMO6YyB0ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVXNlclBvaW50ZXIgPSB1c2VyUGVybWlzc2lvblBvaW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBUb0NoZWNrUG9pbnRlciA9IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodXNlclBlcm1pc3Npb25bdGVtcFVzZXJQb2ludGVyXSAhPSAnfScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ga8O9IHThu7Ega2jDoWMgbmhhdSA9PiBicmVhayBraOG7j2kgdsOybmcga2nhu4NtIHRyYSB0cm9uZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdGVtcFVzZXJQb2ludGVyXS50b0xvd2VyQ2FzZSgpICE9IHBlcm1pc3Npb25Ub0NoZWNrW3RlbXBUb0NoZWNrUG9pbnRlcl0udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtJbm5lckxvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFVzZXJQb2ludGVyLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUb0NoZWNrUG9pbnRlci0tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYnJlYWtJbm5lckxvb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyQ2hhciA9IHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2tDaGFyID0gcGVybWlzc2lvblRvQ2hlY2tbcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gbuG6v3UgdXNlclBlcm1pc3Npb24gxJFhbmcg4bufIGluZGV4IGN14buRaVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgY2hhciBjdeG7kWkgY+G7p2EgMiBt4bqjbmcgKHRy4burIGtoaSBsw6Aga8O9IHThu7Ega+G6v3QgdGjDumMgdGVtcGxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdsOgIGPFqW5nIHBo4bqjaSBsw6AgY2hhciBjdeG7kWkgY+G7p2EgbeG6o25nIHBlcm1pc3Npb24gY+G6p24gY2hlY2tcclxuICAgICAgICAgICAgICAgICAgICAvLyA9PiBuZ8aw4budaSBkw7luZyBhdXRob3JpemVkIHbDoCBicmVhayBraOG7j2kgdsOybmcgbOG6t3Agbmdvw6BpIGPDuW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh1c2VyQ2hhciA9PSAnfScgfHwgdXNlckNoYXIgPT0gdG9DaGVja0NoYXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA9PSBwZXJtaXNzaW9uVG9DaGVjay5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrT3V0ZXJMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgY2hhciBjw7MgZ2nhu5FuZyBuaGF1IGtow7RuZywga2jDtG5nIGdp4buRbmcgdGjDrCBicmVhayBraOG7j2kgdsOybmcgY2hlY2tcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyQ2hhciAhPSB0b0NoZWNrQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG7hur91IGNoYXIgZ2nhu5FuZyBuaGF1IHRow6wgdGnhur9wIHThu6VjIHbDsm5nIGzEg3BcclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlcisrO1xyXG4gICAgICAgICAgICAgICAgdXNlclBlcm1pc3Npb25Qb2ludGVyKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJyZWFrT3V0ZXJMb29wKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNBdXRob3JpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja1Blcm1pc3Npb25PbGQodXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSwgcGVybWlzc2lvblRvQ2hlY2s6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAvLyBjaGVjayBxdXnhu4FuIHRoZW8gY8OhY2ggY8WpIG7hur91IHRyxrDhu51uZyBo4buNcCBsw6AgcGjDom4gcXV54buBbiBtb2R1bGVcclxuICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2suaW5jbHVkZXMoJ01PRFVMRScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvblRvQ2hlY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IHVzZXJQZXJtaXNzaW9uIG9mIHVzZXJQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICAvLyBD4bqvdCBjaHXhu5dpIHBlcm1pc3Npb24gdGjDoG5oIG3huqNuZyDEkeG7gyB4ZW0gbeG7l2kgZnJhZ2VtZW50IGPDsyBraOG7m3AgbmhhdSBraMO0bmdcclxuICAgICAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25GcmFnbWVudHMgPSAodXNlclBlcm1pc3Npb24gYXMgc3RyaW5nKS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uRnJhZ21lbnRzID0gcGVybWlzc2lvblRvQ2hlY2suc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE3huqNuZyBraMOhYyDEkeG7mSBkw6BpIHRow6wgdGhvw6F0IHPhu5ttXHJcbiAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggIT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBiaeG6v24gZmxhZyByYSBoaeG7h3UgbmfGsOG7nWkgZMO5bmcgYXV0aG9yaXplZCB2w6Agb3V0IHbDsm5nXHJcbiAgICAgICAgICAgIGxldCBicmVha0xvb3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gbuG6v3UgdOG6pXQgY+G6oyBwaOG6p24gdOG7rSBraOG7m3AgbmhhdSA9PiBwZXJtaXNzaW9uIG7DoHkgdHLDuW5nIHbDoCBuZ8aw4budaSBkw7luZyDEkcaw4bujYyBhdXRob3JpemVkXHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwZXJtaXNzaW9uRnJhZ21lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlckZyYWdlbWVudCA9IHVzZXJQZXJtaXNzaW9uRnJhZ21lbnRzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25GcmFnbWVudCA9IHBlcm1pc3Npb25GcmFnbWVudHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBxdWEgY8OhYyBwaOG6p24gdOG7rSBjw7Mga8O9IHThu7EgYuG6r3QgxJHhuqd1IGzDoCAneydcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyRnJhZ2VtZW50WzBdID09ICd7Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBwZXJtaXNzaW9uRnJhZ21lbnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckZyYWdlbWVudC50b0xvd2VyQ2FzZSgpICE9IHBlcm1pc3Npb25GcmFnbWVudC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVha0xvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChicmVha0xvb3ApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0F1dGhvcml6ZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlzQXV0aG9yaXplZEJ5UGVybWlzc2lvbnMocGVybWlzc2lvbnM6IEFycmF5PFBlcm1pc3Npb24+LCBvcGVyYXRvciA9ICdPUicsIGlnbm9yZUFkbWluOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IChhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKSBhcyBUblVzZXI7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGlzQXV0aG9yaXplZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oaXRlbS5zZXJ2aWNlKS50aGVuKHBlcm1pc3Npb25SZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvci50b1VwcGVyQ2FzZSgpID09ICdPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25SZXN1bHQuaW5jbHVkZXMoaXRlbS5wZXJtaXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKGlzQXV0aG9yaXplZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0U2VydmljZVBlcm1pc3Npb24oc2VydmljZSwgb3ZlcnJpZGVMb2NhbFN0b3JhZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICBjb25zdCBrZXkgPSBgQVQuJHtzZXJ2aWNlLnRvVXBwZXJDYXNlKCl9YDtcclxuICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgdmFyIHN0ciA9IFwiXCI7XHJcbiAgICAgICAgaWYgKCFvdmVycmlkZUxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlSXRlbSAmJiBzdG9yYWdlSXRlbSAhPT0gJ251bGwnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuZm9yRWFjaChhc3luYyBlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gYXdhaXQgdGhpcy50NmhlbHBlci50NmQxKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChzdHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGVtZW50ID0gdGhpcy50NmhlbHBlci5mcm9tSW5kZXhTdHJpbmcoZWxlbWVudCwgdGhpcy50NnN0cik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25zQnlTZXJ2aWNlP3NlcnZpY2U9JHtzZXJ2aWNlfWA7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG92ZXJyaWRlTG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSkpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhICE9IG51bGwgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZm9yRWFjaChhc3luYyBlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIHN0ciA9IGF3YWl0IHRoaXMudDZoZWxwZXIudDZkMShlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHN0cik7XHJcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50ID0gdGhpcy50NmhlbHBlci5mcm9tSW5kZXhTdHJpbmcoZWxlbWVudCwgdGhpcy50NnN0cik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25JZHNCeU1vZHVsZShtb2R1bGVDb2RlOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uSWRzQnlNb2R1bGUvJHttb2R1bGVDb2RlfS8ke3VzZXJJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwaGFuUXV5ZW5OZ3VvaUR1bmcobW9kZWw6IFBoYW5RdXllbk1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9QaGFuUXV5ZW5OZ3VvaUR1bmdgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbW9kZWwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
package/fesm2015/tnx-shared.js
CHANGED
|
@@ -18361,7 +18361,6 @@ class T06HelperService {
|
|
|
18361
18361
|
return '';
|
|
18362
18362
|
const keyLen = this.keyBytes.length;
|
|
18363
18363
|
const encBytes = this.base64UrlToBytes(encryptedText);
|
|
18364
|
-
console.log('encBytes__', encBytes.map((b, i) => String.fromCharCode(b ^ this.keyBytes[i % keyLen])).join(''));
|
|
18365
18364
|
return encBytes.map((b, i) => String.fromCharCode(b ^ this.keyBytes[i % keyLen])).join('');
|
|
18366
18365
|
}
|
|
18367
18366
|
}
|
|
@@ -18747,7 +18746,6 @@ class PermissionService extends BaseService {
|
|
|
18747
18746
|
// element = this.t6helper.fromIndexString(element, this.t6str);
|
|
18748
18747
|
}));
|
|
18749
18748
|
}
|
|
18750
|
-
// console.log(`Lấy quyền từ local storage với key [${key}] và giá trị ${result}`);
|
|
18751
18749
|
return arr;
|
|
18752
18750
|
}
|
|
18753
18751
|
}
|
|
@@ -18767,7 +18765,6 @@ class PermissionService extends BaseService {
|
|
|
18767
18765
|
// element = this.t6helper.fromIndexString(element, this.t6str);
|
|
18768
18766
|
}));
|
|
18769
18767
|
}
|
|
18770
|
-
console.log(`Lấy quyền với key [${key}] và giá trị ${arr}`);
|
|
18771
18768
|
return arr;
|
|
18772
18769
|
});
|
|
18773
18770
|
}
|