@atlasauth/angular 0.15.0 → 0.16.0
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/CHANGELOG.md +8 -0
- package/dist/esm2022/lib/components/attempt-flow.component.mjs +69 -11
- package/dist/esm2022/lib/components/email-link.component.mjs +103 -0
- package/dist/esm2022/lib/components/flow-controller.mjs +6 -3
- package/dist/esm2022/lib/components/sign-in.component.mjs +22 -5
- package/dist/esm2022/lib/components/sign-up.component.mjs +22 -5
- package/dist/esm2022/lib/i18n.mjs +19 -1
- package/dist/esm2022/lib/version.mjs +2 -2
- package/dist/esm2022/public-api.mjs +2 -1
- package/dist/fesm2022/atlasauth-angular.mjs +227 -21
- package/dist/fesm2022/atlasauth-angular.mjs.map +1 -1
- package/dist/lib/components/attempt-flow.component.d.ts +5 -1
- package/dist/lib/components/email-link.component.d.ts +26 -0
- package/dist/lib/components/sign-in.component.d.ts +4 -0
- package/dist/lib/components/sign-up.component.d.ts +4 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/public-api.d.ts +1 -0
- package/package.json +2 -2
|
@@ -422,8 +422,11 @@ export class AtlasFlowController {
|
|
|
422
422
|
return;
|
|
423
423
|
this.pollTimer = setInterval(() => {
|
|
424
424
|
void (async () => {
|
|
425
|
-
const
|
|
426
|
-
this.
|
|
425
|
+
const polled = this.state();
|
|
426
|
+
const { state: next, ticket } = await pollAttempt(this.client, polled);
|
|
427
|
+
// A resend rotated the secret meanwhile: this answer is stale.
|
|
428
|
+
if (this.state().pollSecret === polled.pollSecret)
|
|
429
|
+
this.setState(next);
|
|
427
430
|
// e.g. a passkey sign-up whose email was just proven: only this tab can go on.
|
|
428
431
|
if (!ticket && !shouldKeepPolling(next))
|
|
429
432
|
this.stopPolling();
|
|
@@ -455,4 +458,4 @@ export class AtlasFlowController {
|
|
|
455
458
|
this.signUpCaptcha.destroy();
|
|
456
459
|
}
|
|
457
460
|
}
|
|
458
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zsb3ctY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsNEJBQTRCLEVBQzVCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsYUFBYSxFQUNiLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLFlBQVksR0FRYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUzQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQStEWDtJQUNBO0lBR0E7SUFFQTtJQXBFVixLQUFLLENBQTRCO0lBQzFDOzs7O09BSUc7SUFDTSxRQUFRLEdBQUcsTUFBTSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUMxRDs7O09BR0c7SUFDTSxVQUFVLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUNsRCx5RUFBeUU7SUFDaEUsT0FBTyxHQUFzQix1QkFBdUIsQ0FBQyxTQUFTLEVBQUU7UUFDdkUseUVBQXlFO1FBQ3pFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQzlDLENBQUMsQ0FBQztJQUNILHFEQUFxRDtJQUM1QyxhQUFhLEdBQXNCLHVCQUF1QixDQUFDLFNBQVMsRUFBRTtRQUM3RSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUM5QyxDQUFDLENBQUM7SUFDSCx3RUFBd0U7SUFDL0QsWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0Qyw4RUFBOEU7SUFDckUsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDOzs7O09BSUc7SUFDTSxjQUFjLEdBQUcsTUFBTSxDQUFxQyxJQUFJLENBQUMsQ0FBQztJQUMzRTs7OztPQUlHO0lBQ00saUJBQWlCLEdBQUcsTUFBTSxDQUE2RCxJQUFJLENBQUMsQ0FBQztJQUN0RyxpSEFBaUg7SUFDeEcsZUFBZSxHQUFHLE1BQU0sQ0FBNkQsSUFBSSxDQUFDLENBQUM7SUFDcEc7OztPQUdHO0lBQ00sVUFBVSxDQUEwQjtJQUM3QyxpREFBaUQ7SUFDeEMsZUFBZSxDQUFxQztJQUM3RDs7O09BR0c7SUFDTSxRQUFRLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RDs7O09BR0c7SUFDTSxPQUFPLENBQTBCO0lBQzFDLHlHQUF5RztJQUNoRyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsU0FBUyxHQUEwQyxJQUFJLENBQUM7SUFDeEQsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUV4QixZQUNtQixNQUFrQixFQUNsQixNQUE4QixFQUMvQyxPQUE4QztJQUM5QyxzRUFBc0U7SUFDckQsSUFBNkIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO0lBQzVFLDBGQUEwRjtJQUN6RSw0QkFBNEIsS0FBSztRQU5qQyxXQUFNLEdBQU4sTUFBTSxDQUFZO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQXdCO1FBRzlCLE1BQUMsR0FBRCxDQUFDLENBQTBEO1FBRTNELDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBUTtRQUVsRCw4RUFBOEU7UUFDOUUsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQXFCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLE9BQU8sR0FBRyw2QkFBNkIsQ0FBQztZQUMzQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTztZQUMzQixnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDO1NBQzFELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELHdGQUF3RjtJQUMvRSxvQkFBb0IsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBRTVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsWUFBb0I7UUFDeEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXO1lBQUUsT0FBTztRQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RixJQUFJLEtBQUssSUFBSSxPQUFPO1lBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztZQUNyRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsd0hBQXdIO0lBQ3hILGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxLQUFLLElBQUksQ0FBQztJQUNyRyxDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLFVBQVU7UUFDUixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGtGQUFrRjtJQUMxRSxjQUFjO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDckMsSUFBSSxPQUFPLEVBQUUsTUFBTSxLQUFLLHNCQUFzQixJQUFJLE9BQU8sQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztZQUMzRixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsS0FBSyxDQUFDLFlBQVk7UUFDaEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO2dCQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0scUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDckcsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWTtRQUNWLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNoRCxJQUFJLElBQUksRUFBRSxJQUFJLEtBQUssc0JBQXNCO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDckYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUztRQUNQLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsU0FBUyxLQUFLLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvRixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUM5RixDQUFDO0lBRUQsMERBQTBEO0lBQzFELFdBQVc7UUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsQ0FBQyxjQUFjLEtBQUssS0FBSyxDQUFDO0lBQ2pFLENBQUM7SUFFRCx1RkFBdUY7SUFDdkYsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBcUM7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTztRQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsTUFBTSxJQUFJLEdBQ1IsUUFBUSxLQUFLLEtBQUs7WUFDaEIsQ0FBQyxDQUFDLE1BQU0sd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGdGQUFnRjtJQUN4RSxXQUFXO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ3BCLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDdkYsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ2pELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQzNCLElBQUksRUFBRSxVQUFVO1lBQ2hCLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDO1NBQ3ZELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxRQUFRLENBQUMsSUFBZTtRQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLGlEQUFpRDtRQUNqRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxRQUFRO1lBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkcsc0VBQXNFO1FBQ3RFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEtBQUssb0JBQW9CO1lBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakYsbUZBQW1GO1FBQ25GLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEtBQUsscUJBQXFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNoRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU8sV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDMUM7Ozs7T0FJRztJQUNLLFFBQVE7UUFDZCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDNUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsT0FBTztRQUNwRSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssWUFBWTtZQUFFLE9BQU87UUFDM0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBOEI7UUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFekUsK0VBQStFO1FBQy9FLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLFlBQVksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFO1lBQ3RFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ1YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELDhGQUE4RjtJQUM5RixLQUFLLENBQUMsWUFBWSxDQUFDLE1BQWU7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsMkZBQTJGO0lBQzNGLGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ2IsR0FBRyxXQUFXO1lBQ2QsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDckcsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUE4QixFQUFFLE9BQU8sR0FBRyxJQUFJO1FBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO1lBQ25ELE9BQU87WUFDUCxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDM0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxxQkFBcUI7UUFDekIsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQjtRQUN2QixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CLENBQ2hDLFFBQThCLEVBQzlCLEdBQStFO1FBRS9FLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTztRQUNoQixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLEtBQUssQ0FBQyxZQUFZO1FBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQThCLEVBQUUsT0FBTyxHQUFHLElBQUk7UUFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEosQ0FBQztJQUVELHlGQUF5RjtJQUN6RixLQUFLLENBQUMsYUFBYTtRQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxnSEFBZ0g7SUFDaEgscUJBQXFCO1FBQ25CLE9BQU8sNEJBQTRCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxLQUFLLENBQUMsNEJBQTRCO1FBQ2hDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQWU7UUFDbEMsK0VBQStFO1FBQy9FLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixxRkFBcUY7WUFDckYsaUdBQWlHO1lBQ2pHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTTtnQkFDckIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxVQUFVLEVBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xJLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM5RSxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDeEMsMkVBQTJFO1lBQzNFLHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFO29CQUNoRSxVQUFVLEVBQUcsSUFBSSxDQUFDLE9BQTJCLENBQUMsRUFBRTtvQkFDaEQsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2lCQUNwQixDQUFDLENBQUM7Z0JBQ0gsU0FBUyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUNELElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN0RixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDdEQsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQiwyRUFBMkU7WUFDM0UsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLFdBQVc7UUFDVCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNmLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BCLCtFQUErRTtnQkFDL0UsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztvQkFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzVELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztvQkFBRSxPQUFPO2dCQUVyQyx3RUFBd0U7Z0JBQ3hFLG9CQUFvQjtnQkFDcEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtvQkFDaEUsVUFBVSxFQUFHLElBQUksQ0FBQyxPQUEyQixDQUFDLEVBQUU7b0JBQ2hELE1BQU07aUJBQ1AsQ0FBQyxDQUFDO2dCQUNILE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELGdHQUFnRztJQUNoRyxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyaXRhYmxlU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZhcGlDbGllbnQsXG4gIGFkdmFuY2VXaXRoQ2FwdGNoYSxcbiAgYXRsYXNDYXB0Y2hhTGFiZWxzLFxuICBhdHRlbXB0UGFzc3dvcmRIb2xkUHJvb2YsXG4gIHByZXBhcmVQYXNzd29yZEhvbGRQcm9vZixcbiAgY3JlYXRlQ2FwdGNoYUNvbnRyb2xsZXIsXG4gIGNyZWF0ZVBhc3NrZXlTaWduSW5Db250cm9sbGVyLFxuICBjcmVhdGVQYXNza2V5U2lnblVwLFxuICBjcmVhdGVTaWduVXAsXG4gIGZpbmlzaFBhc3NrZXlTaWduVXAsXG4gIGZldGNoSW5zdGFuY2VTZXR0aW5ncyxcbiAgZmV0Y2hMYXN0U2lnbkluTWV0aG9kLFxuICBzdGFydFNpZ25JbldpdGhBdGxhcyxcbiAgY3JlYXRlTWZhRW5yb2xsbWVudCxcbiAgYWNrbm93bGVkZ2VFeGlzdGluZ0FjY291bnQsXG4gIGFja25vd2xlZGdlUmVjb3ZlcnlDb2RlcyxcbiAgcGVuZGluZ0V4aXN0aW5nQWNjb3VudE5vdGljZSxcbiAgcGVuZGluZ1JlY292ZXJ5Q29kZXMsXG4gIG1mYUNob2ljZXNGcm9tLFxuICBwcmVwYXJlU2Vjb25kRmFjdG9yQ29kZSxcbiAgcmVzZW5kU2lnblVwVmVyaWZpY2F0aW9uLFxuICBmbG93TmVlZHNDYXB0Y2hhLFxuICBzaWduSW5DYXB0Y2hhT3B0aW9ucyxcbiAgZmxvd0Zyb21QZW5kaW5nLFxuICBpbml0aWFsRmxvdyxcbiAgbmV4dFN0ZXAsXG4gIG9mZmVyZWRGaXJzdEZhY3RvcnMsXG4gIHBvbGxBdHRlbXB0LFxuICBwcmVwYXJlRmFjdG9yLFxuICBwbGFuRmlyc3RGYWN0b3IsXG4gIHNob3VsZEtlZXBQb2xsaW5nLFxuICBQb2xpY3lBY2NlcHRhbmNlQ29udHJvbGxlcixcbiAgbG9hZFBvbGljaWVzLFxuICB0eXBlIENhcHRjaGFDb250cm9sbGVyLFxuICB0eXBlIEZsb3dTdGF0ZSxcbiAgdHlwZSBJbnN0YW5jZVNldHRpbmdzLFxuICB0eXBlIE1mYUNob2ljZXMsXG4gIHR5cGUgTWZhRW5yb2xsbWVudENvbnRyb2xsZXIsXG4gIHR5cGUgTWZhRW5yb2xsbWVudFN0YXRlLFxuICB0eXBlIFBhc3NrZXlTaWduSW5Db250cm9sbGVyLFxufSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IEVOX1VTLCB0cmFuc2xhdGUgfSBmcm9tICcuLi9pMThuJztcblxuLyoqXG4gKiBUaGUgc2VydmVyLWRyaXZlbiBzaWduLWluIC8gc2lnbi11cCBlbmdpbmUsIHNoYXJlZCBieSBgPGF0bGFzLXNpZ24taW4+YCBhbmRcbiAqIGA8YXRsYXMtc2lnbi11cD5gIOKAlCB0aGUgQW5ndWxhciBjb3VudGVycGFydCBvZiBSZWFjdCdzIGB1c2VGbG93YCBob29rLlxuICpcbiAqIEl0IG93bnMgbm8gZGVjaXNpb24gYWJvdXQgd2hhdCBjb21lcyBuZXh0OiBldmVyeSBzdGF0dXMgY29tZXMgYmFjayBmcm9tIHRoZVxuICogc2VydmVyIHZpYSBgYWR2YW5jZWAsIGFuZCB0aGlzIGNvbnRyb2xsZXIgb25seSBwb3N0cyB3aGF0ZXZlciB0aGUgY3VycmVudCBzdGVwXG4gKiBuZWVkcyBhbmQgcmUtcmVuZGVycyB0aGUgcmV0dXJuZWQgc3RhdHVzLiBTdGF0ZSBsaXZlcyBpbiBhIHNpZ25hbCBzbyB0ZW1wbGF0ZXNcbiAqIHVwZGF0ZSB3aGV0aGVyIHRoZSBhcHAgcnVucyB6b25lZCBvciB6b25lbGVzcy5cbiAqXG4gKiBgPGF0bGFzLXNpZ24tdXA+YCBzdGFydHMgdGhlIGF0dGVtcHQgd2l0aCB7QGxpbmsgY3JlYXRlfVxuICogKGBQT1NUIC92MS9jbGllbnQvc2lnbl91cHNgKTsgdGhlIGVtYWlsZWQtY29kZSBzdGVwIHRoZW4gcnVucyB0aHJvdWdoIHRoZSBzYW1lXG4gKiB7QGxpbmsgc3VibWl0fS4gQm90aCBmbG93cyBkcmF3IHRoZSBpbnN0YW5jZSdzIGNhcHRjaGEgKGZyb21cbiAqIHtAbGluayBsb2FkU2V0dGluZ3N9KSB3aGVuIGl0IGlzIHJlcXVpcmVkLlxuICovXG5leHBvcnQgY2xhc3MgQXRsYXNGbG93Q29udHJvbGxlciB7XG4gIHJlYWRvbmx5IHN0YXRlOiBXcml0YWJsZVNpZ25hbDxGbG93U3RhdGU+O1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlJ3MgcHVibGljIHNpZ24taW4gLyBzaWduLXVwIHNldHRpbmdzIChjYXB0Y2hhLCBzaWduLXVwIGZpZWxkcyxcbiAgICogbGVnYWwgY29uc2VudCkgZnJvbSBgR0VUIC92MS9hcHBlYXJhbmNlYDsgbnVsbCB1bnRpbCB7QGxpbmsgbG9hZFNldHRpbmdzfVxuICAgKiByZXNvbHZlcywgb3Igd2hlbiB0aGUgc2VydmVyIGNvdWxkIG5vdCBiZSByZWFjaGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3MgPSBzaWduYWw8SW5zdGFuY2VTZXR0aW5ncyB8IG51bGw+KG51bGwpO1xuICAvKipcbiAgICogVGhlIG1ldGhvZCB0aGlzIGJyb3dzZXIgbGFzdCBzaWduZWQgaW4gd2l0aCAoYHBhc3N3b3JkYCwgYG9hdXRoX2dpdGh1YmAsIOKApilcbiAgICogZm9yIHRoZSBcIkxhc3QgdXNlZFwiIGhpbnQ7IG51bGwgd2hlbiBub25lLCBvciB0aGUgaW5zdGFuY2UgdHVybmVkIGl0IG9mZi5cbiAgICovXG4gIHJlYWRvbmx5IGxhc3RNZXRob2QgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUaGUgc2lnbi1pbiBjYXB0Y2hhIChpZGVudGlmaWVyIHN0ZXAgLyBgbmVlZHNfY2FwdGNoYWAgY2hhbGxlbmdlKS4gKi9cbiAgcmVhZG9ubHkgY2FwdGNoYTogQ2FwdGNoYUNvbnRyb2xsZXIgPSBjcmVhdGVDYXB0Y2hhQ29udHJvbGxlcih1bmRlZmluZWQsIHtcbiAgICAvLyBUaGUgQXRsYXMgY2FwdGNoYSdzIHdvcmRzIGZvbGxvdyB0aGUgZm9ybSdzIGNhdGFsb2cgKHJlYWQgd2hlbiBkcmF3bikuXG4gICAgYXRsYXNMYWJlbHM6ICgpID0+IGF0bGFzQ2FwdGNoYUxhYmVscyh0aGlzLnQpLFxuICB9KTtcbiAgLyoqIFRoZSBzaWduLXVwIGNhcHRjaGEgKHRoZSBjcmVhdGUtYWNjb3VudCBzdGVwKS4gKi9cbiAgcmVhZG9ubHkgc2lnblVwQ2FwdGNoYTogQ2FwdGNoYUNvbnRyb2xsZXIgPSBjcmVhdGVDYXB0Y2hhQ29udHJvbGxlcih1bmRlZmluZWQsIHtcbiAgICBhdGxhc0xhYmVsczogKCkgPT4gYXRsYXNDYXB0Y2hhTGFiZWxzKHRoaXMudCksXG4gIH0pO1xuICAvKiogV2hldGhlciB7QGxpbmsgY2FwdGNoYX0gY3VycmVudGx5IGRyYXdzIGEgd2lkZ2V0IChmb3IgdGVtcGxhdGVzKS4gKi9cbiAgcmVhZG9ubHkgY2FwdGNoYURyYXduID0gc2lnbmFsKGZhbHNlKTtcbiAgLyoqIFdoZXRoZXIge0BsaW5rIHNpZ25VcENhcHRjaGF9IGN1cnJlbnRseSBkcmF3cyBhIHdpZGdldCAoZm9yIHRlbXBsYXRlcykuICovXG4gIHJlYWRvbmx5IHNpZ25VcENhcHRjaGFEcmF3biA9IHNpZ25hbChmYWxzZSk7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgZmFjdG9yIHRoZSBzZXJ2ZXIgd2FzIGFza2VkIHRvIHNlbmQgKHtAbGluayBwcmVwYXJlfSkgb24gdGhlXG4gICAqIGN1cnJlbnQgYG5lZWRzX2ZpcnN0X2ZhY3RvcmAgc3RlcCDigJQgdGhlIGZvcm0gdGhlbiBjb2xsZWN0cyBpdHMgY29kZS4gTnVsbFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBwcmVwYXJlZEZhY3RvciA9IHNpZ25hbDwnZW1haWxfY29kZScgfCAnZW1haWxfbGluaycgfCBudWxsPihudWxsKTtcbiAgLyoqXG4gICAqIFwiRW1haWwgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAoe0BsaW5rIHNlbmRFbWFpbFNlY29uZEZhY3Rvcn0pOlxuICAgKiBpbiBmbGlnaHQsIHdoZXJlIHRoZSBjb2RlIHdlbnQsIG9yIHdoeSBpdCB3YXMgbm90IHNlbnQuIE51bGwgdW50aWwgYXNrZWQsXG4gICAqIGFuZCBhZ2FpbiBvbmNlIHRoZSBmbG93IGxlYXZlcyB0aGF0IHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBlbWFpbFNlY29uZEZhY3RvciA9IHNpZ25hbDx7IGJ1c3k/OiBib29sZWFuOyBzZW50VG8/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nIH0gfCBudWxsPihudWxsKTtcbiAgLyoqIFwiVGV4dCBtZSBhIGNvZGUgaW5zdGVhZFwiIGF0IHRoZSBzZWNvbmQgZmFjdG9yICh7QGxpbmsgc2VuZFNtc1NlY29uZEZhY3Rvcn0pOiBhcyB7QGxpbmsgZW1haWxTZWNvbmRGYWN0b3J9LiAqL1xuICByZWFkb25seSBzbXNTZWNvbmRGYWN0b3IgPSBzaWduYWw8eyBidXN5PzogYm9vbGVhbjsgc2VudFRvPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9IHwgbnVsbD4obnVsbCk7XG4gIC8qKlxuICAgKiBUaGUgTUZBIGVucm9sbWVudCBzdGVwIChgbmVlZHNfbWZhX2Vucm9sbG1lbnRgKTogdGhlIGF1dGhlbnRpY2F0b3IgYXBwJ3NcbiAgICogc2V0dXAgKFFSIGNvZGUsIHNldHVwIGtleSkgb3IgYSB0ZXh0ZWQgY29kZS4gU3RhcnRlZCBhbmQgcmVzZXQgd2l0aCB0aGUgZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IGVucm9sbG1lbnQ6IE1mYUVucm9sbG1lbnRDb250cm9sbGVyO1xuICAvKioge0BsaW5rIGVucm9sbG1lbnR9J3Mgc3RhdGUsIGZvciB0ZW1wbGF0ZXMuICovXG4gIHJlYWRvbmx5IGVucm9sbG1lbnRTdGF0ZTogV3JpdGFibGVTaWduYWw8TWZhRW5yb2xsbWVudFN0YXRlPjtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSdzIHBvbGljaWVzICh0ZXJtcywgcHJpdmFjeSwg4oCmKSBmb3IgdGhlIGNyZWF0ZS1hY2NvdW50IGZvcm06XG4gICAqIHtAbGluayBjcmVhdGV9IHNlbmRzIHRoZWlyIGFjY2VwdGFuY2VzIGFuZCByZWxvYWRzIHRoZW0gYWZ0ZXIgYSByZWZ1c2FsLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWNpZXMgPSBuZXcgUG9saWN5QWNjZXB0YW5jZUNvbnRyb2xsZXIoW10pO1xuICAvKipcbiAgICogUGFzc2tleSBzaWduLWluICh0aGUgXCJTaWduIGluIHdpdGggYSBwYXNza2V5XCIgYnV0dG9uIGFuZCBwYXNza2V5IGF1dG9maWxsIG9uXG4gICAqIHRoZSBpZGVudGlmaWVyIGZpZWxkKS4gVGhlIG91dGNvbWUgZ29lcyB0aHJvdWdoIHRoZSBzYW1lIGNvbXBsZXRpb24gYXMgZXZlcnkgc2lnbi1pbi5cbiAgICovXG4gIHJlYWRvbmx5IHBhc3NrZXk6IFBhc3NrZXlTaWduSW5Db250cm9sbGVyO1xuICAvKiogV2hldGhlciB0aGlzIGJyb3dzZXIgY2FuIHJ1biBXZWJBdXRobjsgYDxhdGxhcy1zaWduLWluPmAgc2V0cyBpdCBhZnRlciBpdCBpcyBjcmVhdGVkIGluIGEgYnJvd3Nlci4gKi9cbiAgcmVhZG9ubHkgcGFzc2tleVN1cHBvcnRlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcG9sbFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpZGVudGlmaWVyID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IEZhcGlDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWxvYWQ6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4sXG4gICAgcGVuZGluZzogeyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9IHwgbnVsbCxcbiAgICAvKiogUmVzb2x2ZXMgdGhlIGNhcHRjaGEgbWVzc2FnZXMnIGNhdGFsb2cga2V5cy4gRGVmYXVsdHMgdG8gZW4tVVMuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB0OiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyA9IChrZXkpID0+IHRyYW5zbGF0ZShFTl9VUywga2V5KSxcbiAgICAvKiogV2FpdCBmb3Ige0BsaW5rIGNvbnRpbnVlQWZ0ZXJFeGlzdGluZ0FjY291bnR9IChgPGF0bGFzLXNpZ24tdXA+YCBkcmF3cyB0aGUgbm90aWNlKS4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvbGRFeGlzdGluZ0FjY291bnROb3RpY2UgPSBmYWxzZSxcbiAgKSB7XG4gICAgLy8gU2VlZGVkIGZyb20gYSByZWRpcmVjdCB0aGF0IGNhbWUgYmFjayBtaWQtZmxvdyAoZS5nLiBPQXV0aCBuZWVkaW5nIGEgc2Vjb25kXG4gICAgLy8gZmFjdG9yKSBzbyB0aGUgdXNlciByZXN1bWVzIGF0IHRoZSBkZW1hbmRlZCBzdGVwIGluc3RlYWQgb2Ygc3RhcnRpbmcgb3Zlci5cbiAgICB0aGlzLnN0YXRlID0gc2lnbmFsPEZsb3dTdGF0ZT4ocGVuZGluZyA/IGZsb3dGcm9tUGVuZGluZyhwZW5kaW5nKSA6IGluaXRpYWxGbG93KTtcbiAgICB0aGlzLmVucm9sbG1lbnQgPSBjcmVhdGVNZmFFbnJvbGxtZW50KHRoaXMuY2xpZW50LCAoKSA9PiB0aGlzLm1mYUNob2ljZXMoKSk7XG4gICAgdGhpcy5lbnJvbGxtZW50U3RhdGUgPSBzaWduYWw8TWZhRW5yb2xsbWVudFN0YXRlPih0aGlzLmVucm9sbG1lbnQuc3RhdGUpO1xuICAgIHRoaXMuZW5yb2xsbWVudC5zdWJzY3JpYmUoKG5leHQpID0+IHRoaXMuZW5yb2xsbWVudFN0YXRlLnNldChuZXh0KSk7XG4gICAgdGhpcy5wYXNza2V5ID0gY3JlYXRlUGFzc2tleVNpZ25JbkNvbnRyb2xsZXIoe1xuICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgIG9uU3RhcnQ6ICgpID0+IHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKSxcbiAgICAgIG9uUmVzdWx0OiAobmV4dCkgPT4gdGhpcy5maW5pc2gobmV4dCksXG4gICAgICBjYXB0Y2hhOiAoKSA9PiB0aGlzLmNhcHRjaGEsXG4gICAgICBjYW5jZWxsZWRNZXNzYWdlOiAoKSA9PiB0aGlzLnQoJ3NpZ25Jbi5wYXNza2V5Q2FuY2VsbGVkJyksXG4gICAgfSk7XG4gICAgdGhpcy5zeW5jQ2FwdGNoYSgpO1xuICAgIHRoaXMuc3luY0Vucm9sbG1lbnQoKTtcbiAgfVxuXG4gIC8qKiBXaHkgXCJDb250aW51ZSB3aXRoIEF0bGFzXCIgY291bGQgbm90IHN0YXJ0ICh0aGUgc2VydmVyJ3MgbWVzc2FnZSk7IG51bGwgb3RoZXJ3aXNlLiAqL1xuICByZWFkb25seSBzaWduSW5XaXRoQXRsYXNFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogXCJDb250aW51ZSB3aXRoIEF0bGFzXCIgKHdoZW4gYHNldHRpbmdzKCkuc2lnbkluV2l0aEF0bGFzYCBpcyBzZXQpOiBzdGFydHMgdGhlXG4gICAqIFNTTyBzaWduLWluIGFuZCBzZW5kcyB0aGUgYnJvd3NlciB0byBBdGxhcy5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhBdGxhcyhjb25uZWN0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIHRoaXMuc2lnbkluV2l0aEF0bGFzRXJyb3Iuc2V0KG51bGwpO1xuICAgIGNvbnN0IHN0YXJ0ZWQgPSBhd2FpdCBzdGFydFNpZ25JbldpdGhBdGxhcyh0aGlzLmNsaWVudCwgY29ubmVjdGlvbklkLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgaWYgKCd1cmwnIGluIHN0YXJ0ZWQpIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oc3RhcnRlZC51cmwpO1xuICAgIGVsc2UgdGhpcy5zaWduSW5XaXRoQXRsYXNFcnJvci5zZXQoc3RhcnRlZC5lcnJvcik7XG4gIH1cblxuICAvKiogXCJTaWduIGluIHdpdGggYSBwYXNza2V5XCIgaXMgb2ZmZXJlZDogdGhlIGZpcnN0IHN0ZXAsIHRoZSBpbnN0YW5jZSB0dXJuZWQgcGFzc2tleSBzaWduLWluIG9uLCBhbmQgdGhlIGJyb3dzZXIgY2FuLiAqL1xuICBwYXNza2V5T2ZmZXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXNza2V5U3VwcG9ydGVkKCkgJiYgIXRoaXMuc3RhdGUoKS5hdHRlbXB0ICYmIHRoaXMuc2V0dGluZ3MoKT8ucGFzc2tleVNpZ25JbiA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBXaGF0IHRoZSBhcHAgbGV0cyB0aGUgTUZBIHN0ZXBzIG9mZmVyIChmcm9tIHtAbGluayBzZXR0aW5nc30pLiAqL1xuICBtZmFDaG9pY2VzKCk6IE1mYUNob2ljZXMge1xuICAgIHJldHVybiBtZmFDaG9pY2VzRnJvbSh0aGlzLnNldHRpbmdzKCk/LmFjY291bnQpO1xuICB9XG5cbiAgLyoqIFN0YXJ0IHRoZSBlbnJvbG1lbnQgc3RlcCBmb3IgaXRzIGF0dGVtcHQsIG9yIHJlc2V0IGl0IG9uY2UgdGhlIGZsb3cgbGVhdmVzLiAqL1xuICBwcml2YXRlIHN5bmNFbnJvbGxtZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGF0dGVtcHQgPSB0aGlzLnN0YXRlKCkuYXR0ZW1wdDtcbiAgICBpZiAoYXR0ZW1wdD8uc3RhdHVzID09PSAnbmVlZHNfbWZhX2Vucm9sbG1lbnQnICYmIGF0dGVtcHQuaWQpIHRoaXMuZW5yb2xsbWVudC5zdGFydChhdHRlbXB0LmlkKTtcbiAgICBlbHNlIHRoaXMuZW5yb2xsbWVudC5yZXNldCgpO1xuICB9XG5cbiAgLyoqIEZldGNoIHRoZSBpbnN0YW5jZSdzIHB1YmxpYyBzZXR0aW5ncyBhbmQgZHJhdyB3aGF0ZXZlciBjYXB0Y2hhIHRoZXkgcmVxdWlyZS4gKi9cbiAgYXN5bmMgbG9hZFNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGZldGNoSW5zdGFuY2VTZXR0aW5ncyh0aGlzLmNsaWVudCk7XG4gICAgaWYgKGxvYWRlZCkge1xuICAgICAgdGhpcy5zZXR0aW5ncy5zZXQobG9hZGVkKTtcbiAgICAgIHRoaXMuc3luY0NhcHRjaGEoKTtcbiAgICAgIGlmIChsb2FkZWQuYWNjb3VudC5sYXN0U2lnbkluTWV0aG9kKSB0aGlzLmxhc3RNZXRob2Quc2V0KGF3YWl0IGZldGNoTGFzdFNpZ25Jbk1ldGhvZCh0aGlzLmNsaWVudCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgZmFjdG9ycyB0byBvZmZlciBvbiBhIGBuZWVkc19maXJzdF9mYWN0b3JgIHN0ZXA6IHRoZSBzZXJ2ZXIncyBsaXN0XG4gICAqIHdpdGhvdXQgZW1haWwgY29kZSAvIGxpbmsgd2hpbGUgdGhlIGFwcCBjYW5ub3QgZGVsaXZlciBlbWFpbFxuICAgKiAoYHNldHRpbmdzLmVtYWlsRGVsaXZlcnkuYXZhaWxhYmxlID09PSBmYWxzZWApLiBFbXB0eSBvbiBhbnkgb3RoZXIgc3RlcC5cbiAgICovXG4gIGZpcnN0RmFjdG9ycygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYXR0ZW1wdCA9IHRoaXMuc3RhdGUoKS5hdHRlbXB0O1xuICAgIGNvbnN0IHN0ZXAgPSBhdHRlbXB0ID8gbmV4dFN0ZXAoYXR0ZW1wdCkgOiBudWxsO1xuICAgIGlmIChzdGVwPy5raW5kICE9PSAnY29sbGVjdF9maXJzdF9mYWN0b3InKSByZXR1cm4gW107XG4gICAgY29uc3Qgb2ZmZXJlZCA9IG9mZmVyZWRGaXJzdEZhY3RvcnMoc3RlcC5zdHJhdGVnaWVzLCB0aGlzLnNldHRpbmdzKCk/LmVtYWlsRGVsaXZlcnkpO1xuICAgIGNvbnN0IHByb29mID0gdGhpcy5ob2xkUHJvb2YoKTtcbiAgICByZXR1cm4gcHJvb2YgJiYgIW9mZmVyZWQuaW5jbHVkZXMocHJvb2YpID8gWy4uLm9mZmVyZWQsIHByb29mXSA6IG9mZmVyZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGVtYWlsZWQgcHJvb2YgYSBwYXNzd29yZCBob2xkIHN0aWxsIHdhaXRzIG9uIChgRmxvd1N0YXRlLnBhc3N3b3JkSG9sZGApOiB0aGVcbiAgICogY29kZSwgb3IgYSBsaW5rIHdoZXJlIHRoZSBpbnN0YW5jZSB2ZXJpZmllcyBieSBsaW5rIG9ubHkuIE51bGwgd2l0aCBubyBob2xkLCBvbmNlXG4gICAqIHByb3Zlbiwgb3Igd2hpbGUgdGhlIGFwcCBjYW5ub3QgZGVsaXZlciBlbWFpbC5cbiAgICovXG4gIGhvbGRQcm9vZigpOiAnZW1haWxfY29kZScgfCAnZW1haWxfbGluaycgfCBudWxsIHtcbiAgICBjb25zdCBob2xkID0gdGhpcy5zdGF0ZSgpLnBhc3N3b3JkSG9sZDtcbiAgICBpZiAoIWhvbGQgfHwgaG9sZC5yZWxlYXNlZCB8fCB0aGlzLnNldHRpbmdzKCk/LmVtYWlsRGVsaXZlcnk/LmF2YWlsYWJsZSA9PT0gZmFsc2UpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzKCk/LmFjY291bnQ/LmVtYWlsVmVyaWZpY2F0aW9uID09PSAnbGluaycgPyAnZW1haWxfbGluaycgOiAnZW1haWxfY29kZSc7XG4gIH1cblxuICAvKiogQmFjayBmcm9tIHRoZSBlbWFpbGVkIGZhY3RvciB0byB0aGUgcGFzc3dvcmQgZmllbGQuICovXG4gIHVzZVBhc3N3b3JkKCk6IHZvaWQge1xuICAgIHRoaXMucHJlcGFyZWRGYWN0b3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBwcmVwYXJlZDogbnVsbCwgcG9sbFNlY3JldDogbnVsbCwgZXJyb3JzOiBbXSB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVHJ1ZSB3aGVuIGVtYWlsICsgcGFzc3dvcmQgc2lnbi11cCBjYW5ub3QgY29tcGxldGUgYmVjYXVzZSB0aGUgYXBwIGNhbm5vdFxuICAgKiBzZW5kIHRoZSB2ZXJpZmljYXRpb24gZW1haWwgKGBzZXR0aW5ncy5lbWFpbERlbGl2ZXJ5LnBhc3N3b3JkU2lnblVwID09PSBmYWxzZWApOlxuICAgKiBgPGF0bGFzLXNpZ24tdXA+YCBzaG93cyB0aGUgXCJjYW4ndCBzZW5kIGVtYWlsXCIgbm90aWNlIGluc3RlYWQgb2YgdGhlIGZvcm0uXG4gICAqL1xuICBzaWduVXBFbWFpbFVuYXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzKCk/LmVtYWlsRGVsaXZlcnkucGFzc3dvcmRTaWduVXAgPT09IGZhbHNlO1xuICB9XG5cbiAgLyoqIEZhbHNlIHdoZW4gYSBwYXNzd29yZCByZXNldCBlbWFpbCBjYW5ub3QgYmUgZGVsaXZlcmVkIOKAlCBoaWRlIFwiRm9yZ290IHBhc3N3b3JkP1wiLiAqL1xuICBwYXNzd29yZFJlc2V0QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzKCk/LmVtYWlsRGVsaXZlcnkucGFzc3dvcmRSZXNldCAhPT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQXNrIHRoZSBzZXJ2ZXIgdG8gZW1haWwgYSBzaWduLWluIGNvZGUgZm9yIHRoZSBjdXJyZW50IGBuZWVkc19maXJzdF9mYWN0b3JgXG4gICAqIHN0ZXAgKGBQT1NUIOKApi9wcmVwYXJlX2ZpcnN0X2ZhY3RvcmApOyB0aGUgZm9ybSB0aGVuIGNvbGxlY3RzIHRoZSBjb2RlLCB3aGljaFxuICAgKiB7QGxpbmsgc3VibWl0fSBwb3N0cyBhcyB0aGUgYGVtYWlsX2NvZGVgIHN0cmF0ZWd5LiBXaGlsZSBhIHBhc3N3b3JkIGhvbGQgd2FpdHNcbiAgICogb24gaXQgKHtAbGluayBob2xkUHJvb2Z9KSwgdGhpcyBlbWFpbHMgdGhhdCBwcm9vZiBpbnN0ZWFkLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZShzdHJhdGVneTogJ2VtYWlsX2NvZGUnIHwgJ2VtYWlsX2xpbmsnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmZpcnN0RmFjdG9ycygpLmluY2x1ZGVzKHN0cmF0ZWd5KSkgcmV0dXJuO1xuICAgIGNvbnN0IHByb29mID0gdGhpcy5ob2xkUHJvb2YoKTtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSk7XG4gICAgY29uc3QgbmV4dCA9XG4gICAgICBzdHJhdGVneSA9PT0gcHJvb2ZcbiAgICAgICAgPyBhd2FpdCBwcmVwYXJlUGFzc3dvcmRIb2xkUHJvb2YodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgcHJvb2YpXG4gICAgICAgIDogYXdhaXQgcHJlcGFyZUZhY3Rvcih0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpLCBzdHJhdGVneSk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0KTtcbiAgICBpZiAoIW5leHQuZXJyb3JzLmxlbmd0aCkgdGhpcy5wcmVwYXJlZEZhY3Rvci5zZXQoc3RyYXRlZ3kpO1xuICAgIHRoaXMuc3luY1BvbGxpbmcoKTtcbiAgfVxuXG4gIC8qKiBLZWVwIGJvdGggY2FwdGNoYXMgaW4gc3RlcCB3aXRoIHRoZSBzZXR0aW5ncyBhbmQgdGhlIGZsb3cncyBjdXJyZW50IHN0ZXAuICovXG4gIHByaXZhdGUgc3luY0NhcHRjaGEoKTogdm9pZCB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzKCk7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlKCk7XG4gICAgdGhpcy5jYXB0Y2hhLmNvbmZpZ3VyZShcbiAgICAgIHNpZ25JbkNhcHRjaGFPcHRpb25zKHNldHRpbmdzPy5jYXB0Y2hhRmxvd3Muc2lnbkluLCBzdGF0ZSwgKCkgPT4gdm9pZCB0aGlzLnN1Ym1pdCh7fSkpLFxuICAgICk7XG4gICAgY29uc3Qgc2lnblVwRmxvdyA9IHNldHRpbmdzPy5jYXB0Y2hhRmxvd3Muc2lnblVwO1xuICAgIHRoaXMuc2lnblVwQ2FwdGNoYS5jb25maWd1cmUoe1xuICAgICAgZmxvdzogc2lnblVwRmxvdyxcbiAgICAgIGFjdGl2ZTogIXN0YXRlLmF0dGVtcHQgJiYgZmxvd05lZWRzQ2FwdGNoYShzaWduVXBGbG93KSxcbiAgICB9KTtcbiAgICB0aGlzLmNhcHRjaGFEcmF3bi5zZXQodGhpcy5jYXB0Y2hhLm5lZWRlZCk7XG4gICAgdGhpcy5zaWduVXBDYXB0Y2hhRHJhd24uc2V0KHRoaXMuc2lnblVwQ2FwdGNoYS5uZWVkZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdGF0ZShuZXh0OiBGbG93U3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuc3RhdGUoKTtcbiAgICBjb25zdCBwcmV2aW91c0lkID0gcHJldmlvdXMuYXR0ZW1wdD8uaWQgPz8gbnVsbDtcbiAgICB0aGlzLnN0YXRlLnNldChuZXh0KTtcbiAgICAvLyBBIHByb3ZlbiBob2xkIGdvZXMgYmFjayB0byB0aGUgcGFzc3dvcmQgZmllbGQuXG4gICAgaWYgKG5leHQucGFzc3dvcmRIb2xkPy5yZWxlYXNlZCAmJiAhcHJldmlvdXMucGFzc3dvcmRIb2xkPy5yZWxlYXNlZCkgdGhpcy5wcmVwYXJlZEZhY3Rvci5zZXQobnVsbCk7XG4gICAgLy8gQSBwcmVwYXJlZCBmYWN0b3IgYmVsb25ncyB0byB0aGUgZmlyc3QtZmFjdG9yIHN0ZXAgaXQgd2FzIHNlbnQgZm9yLlxuICAgIGlmIChuZXh0LmF0dGVtcHQ/LnN0YXR1cyAhPT0gJ25lZWRzX2ZpcnN0X2ZhY3RvcicpIHRoaXMucHJlcGFyZWRGYWN0b3Iuc2V0KG51bGwpO1xuICAgIC8vIEFuIGVtYWlsZWQgc2Vjb25kLWZhY3RvciBjb2RlIGJlbG9uZ3MgdG8gdGhlIHNlY29uZC1mYWN0b3Igc3RlcCBvZiB0aGlzIGF0dGVtcHQuXG4gICAgaWYgKG5leHQuYXR0ZW1wdD8uc3RhdHVzICE9PSAnbmVlZHNfc2Vjb25kX2ZhY3RvcicgfHwgKG5leHQuYXR0ZW1wdD8uaWQgPz8gbnVsbCkgIT09IHByZXZpb3VzSWQpIHtcbiAgICAgIHRoaXMuZW1haWxTZWNvbmRGYWN0b3Iuc2V0KG51bGwpO1xuICAgICAgdGhpcy5zbXNTZWNvbmRGYWN0b3Iuc2V0KG51bGwpO1xuICAgIH1cbiAgICB0aGlzLnN5bmNDYXB0Y2hhKCk7XG4gICAgdGhpcy5zeW5jRW5yb2xsbWVudCgpO1xuICAgIHRoaXMuYXV0b1NlbmQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0b1NlbnRGb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAvKipcbiAgICogV2l0aCBubyBwYXNzd29yZCBvbiBvZmZlciwgZW1haWwgdGhlIGNvZGUgYXMgc29vbiBhcyB0aGUgc2VydmVyIGFza3MgZm9yIGFcbiAgICogZmlyc3QgZmFjdG9yIOKAlCBvbmNlIHBlciBhdHRlbXB0LCBzbyBhIGZhaWxlZCBzZW5kIHdhaXRzIGZvciB0aGUgdXNlcidzIHJldHJ5XG4gICAqICh0aGUgXCJFbWFpbCBtZSBhIGNvZGVcIiBidXR0b24pIGluc3RlYWQgb2YgbG9vcGluZy5cbiAgICovXG4gIHByaXZhdGUgYXV0b1NlbmQoKTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnN0YXRlKCkuYXR0ZW1wdD8uaWQgPz8gbnVsbDtcbiAgICBpZiAoIWlkIHx8IHRoaXMuYXV0b1NlbnRGb3IgPT09IGlkIHx8IHRoaXMucHJlcGFyZWRGYWN0b3IoKSkgcmV0dXJuO1xuICAgIGlmIChwbGFuRmlyc3RGYWN0b3IodGhpcy5maXJzdEZhY3RvcnMoKSkuYXV0b1NlbmQgIT09ICdlbWFpbF9jb2RlJykgcmV0dXJuO1xuICAgIHRoaXMuYXV0b1NlbnRGb3IgPSBpZDtcbiAgICB2b2lkIHRoaXMucHJlcGFyZSgnZW1haWxfY29kZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkdmFuY2UgdGhlIGZsb3cgd2l0aCB0aGUgdmFsdWVzIHRoZSB1c2VyIHR5cGVkLiBPbiBjb21wbGV0aW9uLCBleGNoYW5nZSB0aGVcbiAgICogb25lLXRpbWUgdGlja2V0IGZvciBjb29raWVzIG92ZXIgYSBzYW1lLW9yaWdpbiByZXF1ZXN0IChGQVBJIGlzIGNyb3NzLW9yaWdpblxuICAgKiBhbmQgY2Fubm90IHNldCB0aGUgY29va2llIG9uIGl0cyBvd24gcmVzcG9uc2UpLCB0aGVuIHJlLWJvb3Qgc28gdGhlIHJlc3Qgb2ZcbiAgICogdGhlIGFwcCBzZWVzIGEgc2lnbmVkLWluIHVzZXIuXG4gICAqL1xuICBhc3luYyBzdWJtaXQodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuXG4gICAgLy8gQSBjb2RlIHRoYXQgbGlmdHMgYSBwYXNzd29yZCBob2xkIGdvZXMgdG8gaXRzIG93biBhdHRlbXB0LCBub3QgdGhpcyBzaWduLWluLlxuICAgIGlmICh0aGlzLnByZXBhcmVkRmFjdG9yKCkgPT09ICdlbWFpbF9jb2RlJyAmJiB0aGlzLmhvbGRQcm9vZigpID09PSAnZW1haWxfY29kZScpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoYXdhaXQgYXR0ZW1wdFBhc3N3b3JkSG9sZFByb29mKHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCksIHZhbHVlcy5jb2RlID8/ICcnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG91dCA9IGF3YWl0IGFkdmFuY2VXaXRoQ2FwdGNoYSh0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpLCB2YWx1ZXMsIHtcbiAgICAgIGNhcHRjaGE6IHRoaXMuY2FwdGNoYSxcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIHQ6IHRoaXMudCxcbiAgICB9KTtcbiAgICB0aGlzLmlkZW50aWZpZXIgPSBvdXQuaWRlbnRpZmllcjtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChvdXQuc3RhdGUpO1xuICB9XG5cbiAgLyoqIExvYWQgdGhlIHNpZ24tdXAncyBwb2xpY2llcyBpbnRvIHtAbGluayBwb2xpY2llc30gKGA8YXRsYXMtc2lnbi11cD5gIGNhbGxzIGl0IG9uIGluaXQpLiAqL1xuICBhc3luYyBsb2FkUG9saWNpZXMobG9jYWxlPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wb2xpY2llcy5zZXRQb2xpY2llcyhhd2FpdCBsb2FkUG9saWNpZXModGhpcy5jbGllbnQsIHsgbG9jYWxlIH0pKTtcbiAgfVxuXG4gIC8qKiBUaGUgdXNlciBkZWNsaW5lZCBhIHBvbGljeSBhIHNpZ24taW4gd2FzIHdhaXRpbmcgb246IGNhbmNlbCB0aGUgYXR0ZW1wdCBhbmQgc2F5IHdoeS4gKi9cbiAgZGVjbGluZVBvbGljeSh0aXRsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5zZXQoe1xuICAgICAgLi4uaW5pdGlhbEZsb3csXG4gICAgICBlcnJvcnM6IFt7IGNvZGU6ICdQT0xJQ1lfREVDTElORUQnLCBtZXNzYWdlOiB0aGlzLnQoJ3BvbGljeS5kZWNsaW5lZCcpLnJlcGxhY2UoJ3twb2xpY3l9JywgdGl0bGUpIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhY2NvdW50IChgUE9TVCAvdjEvY2xpZW50L3NpZ25fdXBzYCkgZnJvbSBhIGNyZWF0ZS1hY2NvdW50IGZvcm0nc1xuICAgKiB2YWx1ZXMg4oCUIGVtYWlsLCBwYXNzd29yZCBhbmQgYW55IGNvbmZpZ3VyZWQgc2lnbi11cCBmaWVsZHMg4oCUIGNhcnJ5aW5nIHRoZVxuICAgKiBzaWduLXVwIGNhcHRjaGEncyB0b2tlbiB3aGVuIHRoZSBpbnN0YW5jZSByZXF1aXJlcyBvbmUuIFRoZSBlbWFpbGVkIGNvZGUgaXNcbiAgICogdGhlbiBwb3N0ZWQgd2l0aCB7QGxpbmsgc3VibWl0fS5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZSh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNvbnNlbnQgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIGNvbnN0IG5leHQgPSBhd2FpdCBjcmVhdGVTaWduVXAodGhpcy5jbGllbnQsIHZhbHVlcywge1xuICAgICAgY29uc2VudCxcbiAgICAgIGNhcHRjaGE6IHRoaXMuc2lnblVwQ2FwdGNoYSxcbiAgICAgIHQ6IHRoaXMudCxcbiAgICAgIHBvbGljaWVzOiB0aGlzLnBvbGljaWVzLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKG5leHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiRW1haWwgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAodGhlIGluc3RhbmNlJ3NcbiAgICogYGFjY291bnQuZW1haWxTZWNvbmRGYWN0b3JgKTogbWFpbHMgYSBjb2RlIHRvIHRoZSBhY2NvdW50J3MgdmVyaWZpZWQgZW1haWw7XG4gICAqIGl0IGlzIHRoZW4gcG9zdGVkIHdpdGgge0BsaW5rIHN1Ym1pdH0gbGlrZSBhbnkgMkZBIGNvZGUuXG4gICAqL1xuICBhc3luYyBzZW5kRW1haWxTZWNvbmRGYWN0b3IoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kU2Vjb25kRmFjdG9yQ29kZSgnZW1haWxfY29kZScsIHRoaXMuZW1haWxTZWNvbmRGYWN0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiVGV4dCBtZSBhIGNvZGUgaW5zdGVhZFwiIGF0IHRoZSBzZWNvbmQgZmFjdG9yICh3aGVyZSB0aGUgYXBwIG9mZmVycyB0ZXh0ZWRcbiAgICogY29kZXMsIHtAbGluayBtZmFDaG9pY2VzfWAoKS5zbXNgKTogdGV4dHMgYSBjb2RlIHRvIHRoZSBhY2NvdW50J3MgZW5yb2xsZWRcbiAgICogcGhvbmU7IGl0IGlzIHRoZW4gcG9zdGVkIHdpdGgge0BsaW5rIHN1Ym1pdH0gbGlrZSBhbnkgMkZBIGNvZGUuXG4gICAqL1xuICBhc3luYyBzZW5kU21zU2Vjb25kRmFjdG9yKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZFNlY29uZEZhY3RvckNvZGUoJ3NtcycsIHRoaXMuc21zU2Vjb25kRmFjdG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZFNlY29uZEZhY3RvckNvZGUoXG4gICAgc3RyYXRlZ3k6ICdzbXMnIHwgJ2VtYWlsX2NvZGUnLFxuICAgIG91dDogV3JpdGFibGVTaWduYWw8eyBidXN5PzogYm9vbGVhbjsgc2VudFRvPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9IHwgbnVsbD4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zdGF0ZSgpLmF0dGVtcHQ/LmlkO1xuICAgIGlmICghaWQpIHJldHVybjtcbiAgICBvdXQuc2V0KHsgYnVzeTogdHJ1ZSB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzZW50VG8gfSA9IGF3YWl0IHByZXBhcmVTZWNvbmRGYWN0b3JDb2RlKHRoaXMuY2xpZW50LCBpZCwgc3RyYXRlZ3kpO1xuICAgICAgb3V0LnNldCh7IHNlbnRUbyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb3V0LnNldCh7IGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IHRoaXMudCgnZXJyb3IuZ2VuZXJpYycpIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNlbmQgYSBzaWduLXVwJ3MgZW1haWxlZCBjb2RlIC8gbGluayAodGhlIGVhcmxpZXIgb25lIHN0b3BzIHdvcmtpbmcpLiAqL1xuICBhc3luYyByZXNlbmRTaWduVXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIHRoaXMuc3RhdGUuc2V0KGF3YWl0IHJlc2VuZFNpZ25VcFZlcmlmaWNhdGlvbih0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpKSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBwYXNza2V5LW9ubHkgc2lnbi11cCAoYFBPU1QgL3YxL2NsaWVudC9zaWduX3Vwcy9wYXNza2V5YCkgZnJvbSB0aGVcbiAgICogY3JlYXRlLWFjY291bnQgZm9ybSdzIHZhbHVlcyDigJQgbm8gcGFzc3dvcmQuIE9mZmVyZWQgd2hlbiB0aGUgaW5zdGFuY2Unc1xuICAgKiBgYWNjb3VudC5wYXNza2V5U2lnblVwYCBpcyBzZXQuXG4gICAqL1xuICBhc3luYyBjcmVhdGVXaXRoUGFzc2tleSh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNvbnNlbnQgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKGF3YWl0IGNyZWF0ZVBhc3NrZXlTaWduVXAodGhpcy5jbGllbnQsIHZhbHVlcywgeyBjb25zZW50LCBjYXB0Y2hhOiB0aGlzLnNpZ25VcENhcHRjaGEsIHQ6IHRoaXMudCwgcG9saWNpZXM6IHRoaXMucG9saWNpZXMgfSkpO1xuICB9XG5cbiAgLyoqIFRoZSBwYXNza2V5LW9ubHkgc2lnbi11cCdzIGxhc3Qgc3RlcDogY3JlYXRlIHRoZSBwYXNza2V5LCBhbmQgd2l0aCBpdCB0aGUgYWNjb3VudC4gKi9cbiAgYXN5bmMgY3JlYXRlUGFzc2tleSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSk7XG4gICAgYXdhaXQgdGhpcy5maW5pc2goYXdhaXQgZmluaXNoUGFzc2tleVNpZ25VcCh0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpLCB7IHQ6IHRoaXMudCB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlY292ZXJ5IGNvZGVzIGFuIE1GQSBlbnJvbG1lbnQganVzdCBjb21wbGV0ZWQgdGhlIHNpZ24taW4gd2l0aCwgc2hvd25cbiAgICogb25jZSBiZWZvcmUgaXQgZmluaXNoZXMgKHtAbGluayBzYXZlUmVjb3ZlcnlDb2Rlc30pOyBudWxsIG90aGVyd2lzZS4gVGhleVxuICAgKiBsaXZlIG9ubHkgaW4gdGhpcyBjb250cm9sbGVyJ3MgbWVtb3J5LlxuICAgKi9cbiAgcmVjb3ZlcnlDb2RlcygpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgIHJldHVybiBwZW5kaW5nUmVjb3ZlcnlDb2Rlcyh0aGlzLnN0YXRlKCkpO1xuICB9XG5cbiAgLyoqIFwiSSd2ZSBzYXZlZCBteSBjb2Rlc1wiOiBmb3JnZXQgdGhlIHJlY292ZXJ5IGNvZGVzIGFuZCBmaW5pc2ggdGhlIHNpZ24taW4uICovXG4gIGFzeW5jIHNhdmVSZWNvdmVyeUNvZGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKGFja25vd2xlZGdlUmVjb3ZlcnlDb2Rlcyh0aGlzLnN0YXRlKCkpKTtcbiAgfVxuXG4gIC8qKiBUaGUgYWRkcmVzcyBiZWxvbmdlZCB0byBhbiBleGlzdGluZyBhY2NvdW50OiB0aGUgbm90aWNlIGlzIHVwIHVudGlsIHtAbGluayBjb250aW51ZUFmdGVyRXhpc3RpbmdBY2NvdW50fS4gKi9cbiAgZXhpc3RpbmdBY2NvdW50Tm90aWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZW5kaW5nRXhpc3RpbmdBY2NvdW50Tm90aWNlKHRoaXMuc3RhdGUoKSk7XG4gIH1cblxuICAvKiogVGhlIHVzZXIgcmVhZCB0aGUgbm90aWNlOiBmaW5pc2ggdGhlIHNpZ24tdXAuICovXG4gIGFzeW5jIGNvbnRpbnVlQWZ0ZXJFeGlzdGluZ0FjY291bnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5maW5pc2goYWNrbm93bGVkZ2VFeGlzdGluZ0FjY291bnQodGhpcy5zdGF0ZSgpKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmlzaChuZXh0OiBGbG93U3RhdGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBbiBlbnJvbG1lbnQncyByZWNvdmVyeSBjb2RlcyBhcmUgc2hvd24gZmlyc3Q7IGBzYXZlUmVjb3ZlcnlDb2Rlc2AgZmluaXNoZXMuXG4gICAgaWYgKHBlbmRpbmdSZWNvdmVyeUNvZGVzKG5leHQpKSB7XG4gICAgICAvLyBUaGUgdGlja2V0IGRpZXMgaW4gNjAgc2Vjb25kcyBhbmQgc2F2aW5nIHRoZSBjb2RlcyBjYW4gdGFrZSBsb25nZXI6IHJlZGVlbSBpdCBub3csXG4gICAgICAvLyBhbmQgYHNhdmVSZWNvdmVyeUNvZGVzYCBmaW5pc2hlcy4gQSByZWZ1c2VkIGV4Y2hhbmdlIGtlZXBzIHRoZSB0aWNrZXQsIHNvIHRoZSBzYXZlIHJlcG9ydHMgaXQuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgLi4ubmV4dCwgYnVzeTogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHJlcyA9IG5leHQudGlja2V0XG4gICAgICAgID8gYXdhaXQgdGhpcy5jbGllbnQucG9zdCgnL3YxL2NsaWVudC90aWNrZXRzL2V4Y2hhbmdlJywgeyBhdHRlbXB0X2lkOiAobmV4dC5hdHRlbXB0IGFzIHsgaWQ/OiBzdHJpbmcgfSkuaWQsIHRpY2tldDogbmV4dC50aWNrZXQgfSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLm5leHQsIGJ1c3k6IGZhbHNlLCB0aWNrZXQ6IHJlcz8ub2sgPyBudWxsIDogbmV4dC50aWNrZXQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZXh0LmF0dGVtcHQ/LnN0YXR1cyA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgLy8gU3RheXMgYnVzeSB1bnRpbCB0aGlzIGJyb3dzZXIgYWN0dWFsbHkgaG9sZHMgdGhlIHNlc3Npb246IHRoZSBjb21wbGV0aW9uXG4gICAgICAvLyBhbG9uZSBzYXlzIG5vdGhpbmcgYWJvdXQgd2hldGhlciB0aGUgY29va2llIHdhcyBrZXB0LlxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLm5leHQsIGJ1c3k6IHRydWUgfSk7XG4gICAgICBsZXQgZXhjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIGlmIChuZXh0LnRpY2tldCkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0KCcvdjEvY2xpZW50L3RpY2tldHMvZXhjaGFuZ2UnLCB7XG4gICAgICAgICAgYXR0ZW1wdF9pZDogKG5leHQuYXR0ZW1wdCBhcyB7IGlkPzogc3RyaW5nIH0pLmlkLFxuICAgICAgICAgIHRpY2tldDogbmV4dC50aWNrZXQsXG4gICAgICAgIH0pO1xuICAgICAgICBleGNoYW5nZWQgPSByZXMub2s7XG4gICAgICB9XG4gICAgICBpZiAoZXhjaGFuZ2VkICYmIHRoaXMuaG9sZEV4aXN0aW5nQWNjb3VudE5vdGljZSAmJiBwZW5kaW5nRXhpc3RpbmdBY2NvdW50Tm90aWNlKG5leHQpKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi5uZXh0LCB0aWNrZXQ6IG51bGwsIGJ1c3k6IGZhbHNlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBrZXB0ID0gZXhjaGFuZ2VkICYmIChhd2FpdCB0aGlzLnJlbG9hZCgpKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi5uZXh0LCBidXN5OiBmYWxzZSwgc2Vzc2lvbktlcHQ6IGtlcHQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV4dCk7XG4gICAgICAvLyBBIG1hZ2ljLWxpbmsgc3RlcCBtYXkgbm93IGJlIHBvbGxhYmxlIChhIGxpbmsgb3BlbmVkIG9uIGFub3RoZXIgZGV2aWNlKS5cbiAgICAgIHRoaXMuc3luY1BvbGxpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU3RhcnQvc3RvcCB0aGUgwqc1LjMgbWFnaWMtbGluayBwb2xsIHRvIG1hdGNoIHRoZSBjdXJyZW50IHN0YXRlLiAqL1xuICBzeW5jUG9sbGluZygpOiB2b2lkIHtcbiAgICBpZiAoc2hvdWxkS2VlcFBvbGxpbmcodGhpcy5zdGF0ZSgpKSkge1xuICAgICAgdGhpcy5zdGFydFBvbGxpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRQb2xsaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvbGxUaW1lcikgcmV0dXJuO1xuICAgIHRoaXMucG9sbFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0YXRlOiBuZXh0LCB0aWNrZXQgfSA9IGF3YWl0IHBvbGxBdHRlbXB0KHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKG5leHQpO1xuICAgICAgICAvLyBlLmcuIGEgcGFzc2tleSBzaWduLXVwIHdob3NlIGVtYWlsIHdhcyBqdXN0IHByb3Zlbjogb25seSB0aGlzIHRhYiBjYW4gZ28gb24uXG4gICAgICAgIGlmICghdGlja2V0ICYmICFzaG91bGRLZWVwUG9sbGluZyhuZXh0KSkgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgICAgICBpZiAoIXRpY2tldCB8fCAhbmV4dC5hdHRlbXB0KSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIHRpY2tldCBpcyBleGNoYW5nZWQgYnkgYSBub3JtYWwgcmVxdWVzdCwgc28gbm8gc2Vzc2lvbiB0b2tlbiBldmVyXG4gICAgICAgIC8vIGFwcGVhcnMgaW4gYSBVUkwuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3QoJy92MS9jbGllbnQvdGlja2V0cy9leGNoYW5nZScsIHtcbiAgICAgICAgICBhdHRlbXB0X2lkOiAobmV4dC5hdHRlbXB0IGFzIHsgaWQ/OiBzdHJpbmcgfSkuaWQsXG4gICAgICAgICAgdGlja2V0LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qga2VwdCA9IHJlcy5vayAmJiAoYXdhaXQgdGhpcy5yZWxvYWQoKSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi50aGlzLnN0YXRlKCksIHNlc3Npb25LZXB0OiBrZXB0IH0pO1xuICAgICAgICB0aGlzLnN0b3BQb2xsaW5nKCk7XG4gICAgICB9KSgpO1xuICAgIH0sIDJfMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFBvbGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucG9sbFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucG9sbFRpbWVyKTtcbiAgICAgIHRoaXMucG9sbFRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogUmVsZWFzZSB0aGUgcG9sbCB0aW1lciBhbmQgdGhlIGNhcHRjaGEgd2lkZ2V0cyDigJQgY2FsbCBmcm9tIHRoZSBjb21wb25lbnQncyBgbmdPbkRlc3Ryb3lgLiAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucGFzc2tleS5zdG9wQXV0b2ZpbGwoKTtcbiAgICB0aGlzLnN0b3BQb2xsaW5nKCk7XG4gICAgdGhpcy5jYXB0Y2hhLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNpZ25VcENhcHRjaGEuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|
|
461
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zsb3ctY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsNEJBQTRCLEVBQzVCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsYUFBYSxFQUNiLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLFlBQVksR0FRYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUzQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQStEWDtJQUNBO0lBR0E7SUFFQTtJQXBFVixLQUFLLENBQTRCO0lBQzFDOzs7O09BSUc7SUFDTSxRQUFRLEdBQUcsTUFBTSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUMxRDs7O09BR0c7SUFDTSxVQUFVLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUNsRCx5RUFBeUU7SUFDaEUsT0FBTyxHQUFzQix1QkFBdUIsQ0FBQyxTQUFTLEVBQUU7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QztZQUNuQixhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0dBQWdHO0lBQ2hHLE9BQU87UUFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3JpdGFibGVTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRmFwaUNsaWVudCxcbiAgYWR2YW5jZVdpdGhDYXB0Y2hhLFxuICBhdGxhc0NhcHRjaGFMYWJlbHMsXG4gIGF0dGVtcHRQYXNzd29yZEhvbGRQcm9vZixcbiAgcHJlcGFyZVBhc3N3b3JkSG9sZFByb29mLFxuICBjcmVhdGVDYXB0Y2hhQ29udHJvbGxlcixcbiAgY3JlYXRlUGFzc2tleVNpZ25JbkNvbnRyb2xsZXIsXG4gIGNyZWF0ZVBhc3NrZXlTaWduVXAsXG4gIGNyZWF0ZVNpZ25VcCxcbiAgZmluaXNoUGFzc2tleVNpZ25VcCxcbiAgZmV0Y2hJbnN0YW5jZVNldHRpbmdzLFxuICBmZXRjaExhc3RTaWduSW5NZXRob2QsXG4gIHN0YXJ0U2lnbkluV2l0aEF0bGFzLFxuICBjcmVhdGVNZmFFbnJvbGxtZW50LFxuICBhY2tub3dsZWRnZUV4aXN0aW5nQWNjb3VudCxcbiAgYWNrbm93bGVkZ2VSZWNvdmVyeUNvZGVzLFxuICBwZW5kaW5nRXhpc3RpbmdBY2NvdW50Tm90aWNlLFxuICBwZW5kaW5nUmVjb3ZlcnlDb2RlcyxcbiAgbWZhQ2hvaWNlc0Zyb20sXG4gIHByZXBhcmVTZWNvbmRGYWN0b3JDb2RlLFxuICByZXNlbmRTaWduVXBWZXJpZmljYXRpb24sXG4gIGZsb3dOZWVkc0NhcHRjaGEsXG4gIHNpZ25JbkNhcHRjaGFPcHRpb25zLFxuICBmbG93RnJvbVBlbmRpbmcsXG4gIGluaXRpYWxGbG93LFxuICBuZXh0U3RlcCxcbiAgb2ZmZXJlZEZpcnN0RmFjdG9ycyxcbiAgcG9sbEF0dGVtcHQsXG4gIHByZXBhcmVGYWN0b3IsXG4gIHBsYW5GaXJzdEZhY3RvcixcbiAgc2hvdWxkS2VlcFBvbGxpbmcsXG4gIFBvbGljeUFjY2VwdGFuY2VDb250cm9sbGVyLFxuICBsb2FkUG9saWNpZXMsXG4gIHR5cGUgQ2FwdGNoYUNvbnRyb2xsZXIsXG4gIHR5cGUgRmxvd1N0YXRlLFxuICB0eXBlIEluc3RhbmNlU2V0dGluZ3MsXG4gIHR5cGUgTWZhQ2hvaWNlcyxcbiAgdHlwZSBNZmFFbnJvbGxtZW50Q29udHJvbGxlcixcbiAgdHlwZSBNZmFFbnJvbGxtZW50U3RhdGUsXG4gIHR5cGUgUGFzc2tleVNpZ25JbkNvbnRyb2xsZXIsXG59IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuaW1wb3J0IHsgRU5fVVMsIHRyYW5zbGF0ZSB9IGZyb20gJy4uL2kxOG4nO1xuXG4vKipcbiAqIFRoZSBzZXJ2ZXItZHJpdmVuIHNpZ24taW4gLyBzaWduLXVwIGVuZ2luZSwgc2hhcmVkIGJ5IGA8YXRsYXMtc2lnbi1pbj5gIGFuZFxuICogYDxhdGxhcy1zaWduLXVwPmAg4oCUIHRoZSBBbmd1bGFyIGNvdW50ZXJwYXJ0IG9mIFJlYWN0J3MgYHVzZUZsb3dgIGhvb2suXG4gKlxuICogSXQgb3ducyBubyBkZWNpc2lvbiBhYm91dCB3aGF0IGNvbWVzIG5leHQ6IGV2ZXJ5IHN0YXR1cyBjb21lcyBiYWNrIGZyb20gdGhlXG4gKiBzZXJ2ZXIgdmlhIGBhZHZhbmNlYCwgYW5kIHRoaXMgY29udHJvbGxlciBvbmx5IHBvc3RzIHdoYXRldmVyIHRoZSBjdXJyZW50IHN0ZXBcbiAqIG5lZWRzIGFuZCByZS1yZW5kZXJzIHRoZSByZXR1cm5lZCBzdGF0dXMuIFN0YXRlIGxpdmVzIGluIGEgc2lnbmFsIHNvIHRlbXBsYXRlc1xuICogdXBkYXRlIHdoZXRoZXIgdGhlIGFwcCBydW5zIHpvbmVkIG9yIHpvbmVsZXNzLlxuICpcbiAqIGA8YXRsYXMtc2lnbi11cD5gIHN0YXJ0cyB0aGUgYXR0ZW1wdCB3aXRoIHtAbGluayBjcmVhdGV9XG4gKiAoYFBPU1QgL3YxL2NsaWVudC9zaWduX3Vwc2ApOyB0aGUgZW1haWxlZC1jb2RlIHN0ZXAgdGhlbiBydW5zIHRocm91Z2ggdGhlIHNhbWVcbiAqIHtAbGluayBzdWJtaXR9LiBCb3RoIGZsb3dzIGRyYXcgdGhlIGluc3RhbmNlJ3MgY2FwdGNoYSAoZnJvbVxuICoge0BsaW5rIGxvYWRTZXR0aW5nc30pIHdoZW4gaXQgaXMgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBBdGxhc0Zsb3dDb250cm9sbGVyIHtcbiAgcmVhZG9ubHkgc3RhdGU6IFdyaXRhYmxlU2lnbmFsPEZsb3dTdGF0ZT47XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UncyBwdWJsaWMgc2lnbi1pbiAvIHNpZ24tdXAgc2V0dGluZ3MgKGNhcHRjaGEsIHNpZ24tdXAgZmllbGRzLFxuICAgKiBsZWdhbCBjb25zZW50KSBmcm9tIGBHRVQgL3YxL2FwcGVhcmFuY2VgOyBudWxsIHVudGlsIHtAbGluayBsb2FkU2V0dGluZ3N9XG4gICAqIHJlc29sdmVzLCBvciB3aGVuIHRoZSBzZXJ2ZXIgY291bGQgbm90IGJlIHJlYWNoZWQuXG4gICAqL1xuICByZWFkb25seSBzZXR0aW5ncyA9IHNpZ25hbDxJbnN0YW5jZVNldHRpbmdzIHwgbnVsbD4obnVsbCk7XG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIHRoaXMgYnJvd3NlciBsYXN0IHNpZ25lZCBpbiB3aXRoIChgcGFzc3dvcmRgLCBgb2F1dGhfZ2l0aHViYCwg4oCmKVxuICAgKiBmb3IgdGhlIFwiTGFzdCB1c2VkXCIgaGludDsgbnVsbCB3aGVuIG5vbmUsIG9yIHRoZSBpbnN0YW5jZSB0dXJuZWQgaXQgb2ZmLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdE1ldGhvZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgLyoqIFRoZSBzaWduLWluIGNhcHRjaGEgKGlkZW50aWZpZXIgc3RlcCAvIGBuZWVkc19jYXB0Y2hhYCBjaGFsbGVuZ2UpLiAqL1xuICByZWFkb25seSBjYXB0Y2hhOiBDYXB0Y2hhQ29udHJvbGxlciA9IGNyZWF0ZUNhcHRjaGFDb250cm9sbGVyKHVuZGVmaW5lZCwge1xuICAgIC8vIFRoZSBBdGxhcyBjYXB0Y2hhJ3Mgd29yZHMgZm9sbG93IHRoZSBmb3JtJ3MgY2F0YWxvZyAocmVhZCB3aGVuIGRyYXduKS5cbiAgICBhdGxhc0xhYmVsczogKCkgPT4gYXRsYXNDYXB0Y2hhTGFiZWxzKHRoaXMudCksXG4gIH0pO1xuICAvKiogVGhlIHNpZ24tdXAgY2FwdGNoYSAodGhlIGNyZWF0ZS1hY2NvdW50IHN0ZXApLiAqL1xuICByZWFkb25seSBzaWduVXBDYXB0Y2hhOiBDYXB0Y2hhQ29udHJvbGxlciA9IGNyZWF0ZUNhcHRjaGFDb250cm9sbGVyKHVuZGVmaW5lZCwge1xuICAgIGF0bGFzTGFiZWxzOiAoKSA9PiBhdGxhc0NhcHRjaGFMYWJlbHModGhpcy50KSxcbiAgfSk7XG4gIC8qKiBXaGV0aGVyIHtAbGluayBjYXB0Y2hhfSBjdXJyZW50bHkgZHJhd3MgYSB3aWRnZXQgKGZvciB0ZW1wbGF0ZXMpLiAqL1xuICByZWFkb25seSBjYXB0Y2hhRHJhd24gPSBzaWduYWwoZmFsc2UpO1xuICAvKiogV2hldGhlciB7QGxpbmsgc2lnblVwQ2FwdGNoYX0gY3VycmVudGx5IGRyYXdzIGEgd2lkZ2V0IChmb3IgdGVtcGxhdGVzKS4gKi9cbiAgcmVhZG9ubHkgc2lnblVwQ2FwdGNoYURyYXduID0gc2lnbmFsKGZhbHNlKTtcbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBmYWN0b3IgdGhlIHNlcnZlciB3YXMgYXNrZWQgdG8gc2VuZCAoe0BsaW5rIHByZXBhcmV9KSBvbiB0aGVcbiAgICogY3VycmVudCBgbmVlZHNfZmlyc3RfZmFjdG9yYCBzdGVwIOKAlCB0aGUgZm9ybSB0aGVuIGNvbGxlY3RzIGl0cyBjb2RlLiBOdWxsXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IHByZXBhcmVkRmFjdG9yID0gc2lnbmFsPCdlbWFpbF9jb2RlJyB8ICdlbWFpbF9saW5rJyB8IG51bGw+KG51bGwpO1xuICAvKipcbiAgICogXCJFbWFpbCBtZSBhIGNvZGUgaW5zdGVhZFwiIGF0IHRoZSBzZWNvbmQgZmFjdG9yICh7QGxpbmsgc2VuZEVtYWlsU2Vjb25kRmFjdG9yfSk6XG4gICAqIGluIGZsaWdodCwgd2hlcmUgdGhlIGNvZGUgd2VudCwgb3Igd2h5IGl0IHdhcyBub3Qgc2VudC4gTnVsbCB1bnRpbCBhc2tlZCxcbiAgICogYW5kIGFnYWluIG9uY2UgdGhlIGZsb3cgbGVhdmVzIHRoYXQgc3RlcC5cbiAgICovXG4gIHJlYWRvbmx5IGVtYWlsU2Vjb25kRmFjdG9yID0gc2lnbmFsPHsgYnVzeT86IGJvb2xlYW47IHNlbnRUbz86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xuICAvKiogXCJUZXh0IG1lIGEgY29kZSBpbnN0ZWFkXCIgYXQgdGhlIHNlY29uZCBmYWN0b3IgKHtAbGluayBzZW5kU21zU2Vjb25kRmFjdG9yfSk6IGFzIHtAbGluayBlbWFpbFNlY29uZEZhY3Rvcn0uICovXG4gIHJlYWRvbmx5IHNtc1NlY29uZEZhY3RvciA9IHNpZ25hbDx7IGJ1c3k/OiBib29sZWFuOyBzZW50VG8/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nIH0gfCBudWxsPihudWxsKTtcbiAgLyoqXG4gICAqIFRoZSBNRkEgZW5yb2xtZW50IHN0ZXAgKGBuZWVkc19tZmFfZW5yb2xsbWVudGApOiB0aGUgYXV0aGVudGljYXRvciBhcHAnc1xuICAgKiBzZXR1cCAoUVIgY29kZSwgc2V0dXAga2V5KSBvciBhIHRleHRlZCBjb2RlLiBTdGFydGVkIGFuZCByZXNldCB3aXRoIHRoZSBmbG93LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5yb2xsbWVudDogTWZhRW5yb2xsbWVudENvbnRyb2xsZXI7XG4gIC8qKiB7QGxpbmsgZW5yb2xsbWVudH0ncyBzdGF0ZSwgZm9yIHRlbXBsYXRlcy4gKi9cbiAgcmVhZG9ubHkgZW5yb2xsbWVudFN0YXRlOiBXcml0YWJsZVNpZ25hbDxNZmFFbnJvbGxtZW50U3RhdGU+O1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlJ3MgcG9saWNpZXMgKHRlcm1zLCBwcml2YWN5LCDigKYpIGZvciB0aGUgY3JlYXRlLWFjY291bnQgZm9ybTpcbiAgICoge0BsaW5rIGNyZWF0ZX0gc2VuZHMgdGhlaXIgYWNjZXB0YW5jZXMgYW5kIHJlbG9hZHMgdGhlbSBhZnRlciBhIHJlZnVzYWwuXG4gICAqL1xuICByZWFkb25seSBwb2xpY2llcyA9IG5ldyBQb2xpY3lBY2NlcHRhbmNlQ29udHJvbGxlcihbXSk7XG4gIC8qKlxuICAgKiBQYXNza2V5IHNpZ24taW4gKHRoZSBcIlNpZ24gaW4gd2l0aCBhIHBhc3NrZXlcIiBidXR0b24gYW5kIHBhc3NrZXkgYXV0b2ZpbGwgb25cbiAgICogdGhlIGlkZW50aWZpZXIgZmllbGQpLiBUaGUgb3V0Y29tZSBnb2VzIHRocm91Z2ggdGhlIHNhbWUgY29tcGxldGlvbiBhcyBldmVyeSBzaWduLWluLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFzc2tleTogUGFzc2tleVNpZ25JbkNvbnRyb2xsZXI7XG4gIC8qKiBXaGV0aGVyIHRoaXMgYnJvd3NlciBjYW4gcnVuIFdlYkF1dGhuOyBgPGF0bGFzLXNpZ24taW4+YCBzZXRzIGl0IGFmdGVyIGl0IGlzIGNyZWF0ZWQgaW4gYSBicm93c2VyLiAqL1xuICByZWFkb25seSBwYXNza2V5U3VwcG9ydGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBwb2xsVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlkZW50aWZpZXIgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogRmFwaUNsaWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbG9hZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPixcbiAgICBwZW5kaW5nOiB7IGlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0gfCBudWxsLFxuICAgIC8qKiBSZXNvbHZlcyB0aGUgY2FwdGNoYSBtZXNzYWdlcycgY2F0YWxvZyBrZXlzLiBEZWZhdWx0cyB0byBlbi1VUy4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHQ6IChrZXk6IHN0cmluZykgPT4gc3RyaW5nID0gKGtleSkgPT4gdHJhbnNsYXRlKEVOX1VTLCBrZXkpLFxuICAgIC8qKiBXYWl0IGZvciB7QGxpbmsgY29udGludWVBZnRlckV4aXN0aW5nQWNjb3VudH0gKGA8YXRsYXMtc2lnbi11cD5gIGRyYXdzIHRoZSBub3RpY2UpLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaG9sZEV4aXN0aW5nQWNjb3VudE5vdGljZSA9IGZhbHNlLFxuICApIHtcbiAgICAvLyBTZWVkZWQgZnJvbSBhIHJlZGlyZWN0IHRoYXQgY2FtZSBiYWNrIG1pZC1mbG93IChlLmcuIE9BdXRoIG5lZWRpbmcgYSBzZWNvbmRcbiAgICAvLyBmYWN0b3IpIHNvIHRoZSB1c2VyIHJlc3VtZXMgYXQgdGhlIGRlbWFuZGVkIHN0ZXAgaW5zdGVhZCBvZiBzdGFydGluZyBvdmVyLlxuICAgIHRoaXMuc3RhdGUgPSBzaWduYWw8Rmxvd1N0YXRlPihwZW5kaW5nID8gZmxvd0Zyb21QZW5kaW5nKHBlbmRpbmcpIDogaW5pdGlhbEZsb3cpO1xuICAgIHRoaXMuZW5yb2xsbWVudCA9IGNyZWF0ZU1mYUVucm9sbG1lbnQodGhpcy5jbGllbnQsICgpID0+IHRoaXMubWZhQ2hvaWNlcygpKTtcbiAgICB0aGlzLmVucm9sbG1lbnRTdGF0ZSA9IHNpZ25hbDxNZmFFbnJvbGxtZW50U3RhdGU+KHRoaXMuZW5yb2xsbWVudC5zdGF0ZSk7XG4gICAgdGhpcy5lbnJvbGxtZW50LnN1YnNjcmliZSgobmV4dCkgPT4gdGhpcy5lbnJvbGxtZW50U3RhdGUuc2V0KG5leHQpKTtcbiAgICB0aGlzLnBhc3NrZXkgPSBjcmVhdGVQYXNza2V5U2lnbkluQ29udHJvbGxlcih7XG4gICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgb25TdGFydDogKCkgPT4gdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpLFxuICAgICAgb25SZXN1bHQ6IChuZXh0KSA9PiB0aGlzLmZpbmlzaChuZXh0KSxcbiAgICAgIGNhcHRjaGE6ICgpID0+IHRoaXMuY2FwdGNoYSxcbiAgICAgIGNhbmNlbGxlZE1lc3NhZ2U6ICgpID0+IHRoaXMudCgnc2lnbkluLnBhc3NrZXlDYW5jZWxsZWQnKSxcbiAgICB9KTtcbiAgICB0aGlzLnN5bmNDYXB0Y2hhKCk7XG4gICAgdGhpcy5zeW5jRW5yb2xsbWVudCgpO1xuICB9XG5cbiAgLyoqIFdoeSBcIkNvbnRpbnVlIHdpdGggQXRsYXNcIiBjb3VsZCBub3Qgc3RhcnQgKHRoZSBzZXJ2ZXIncyBtZXNzYWdlKTsgbnVsbCBvdGhlcndpc2UuICovXG4gIHJlYWRvbmx5IHNpZ25JbldpdGhBdGxhc0Vycm9yID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8qKlxuICAgKiBcIkNvbnRpbnVlIHdpdGggQXRsYXNcIiAod2hlbiBgc2V0dGluZ3MoKS5zaWduSW5XaXRoQXRsYXNgIGlzIHNldCk6IHN0YXJ0cyB0aGVcbiAgICogU1NPIHNpZ24taW4gYW5kIHNlbmRzIHRoZSBicm93c2VyIHRvIEF0bGFzLlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aEF0bGFzKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgdGhpcy5zaWduSW5XaXRoQXRsYXNFcnJvci5zZXQobnVsbCk7XG4gICAgY29uc3Qgc3RhcnRlZCA9IGF3YWl0IHN0YXJ0U2lnbkluV2l0aEF0bGFzKHRoaXMuY2xpZW50LCBjb25uZWN0aW9uSWQsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICBpZiAoJ3VybCcgaW4gc3RhcnRlZCkgd2luZG93LmxvY2F0aW9uLmFzc2lnbihzdGFydGVkLnVybCk7XG4gICAgZWxzZSB0aGlzLnNpZ25JbldpdGhBdGxhc0Vycm9yLnNldChzdGFydGVkLmVycm9yKTtcbiAgfVxuXG4gIC8qKiBcIlNpZ24gaW4gd2l0aCBhIHBhc3NrZXlcIiBpcyBvZmZlcmVkOiB0aGUgZmlyc3Qgc3RlcCwgdGhlIGluc3RhbmNlIHR1cm5lZCBwYXNza2V5IHNpZ24taW4gb24sIGFuZCB0aGUgYnJvd3NlciBjYW4uICovXG4gIHBhc3NrZXlPZmZlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhc3NrZXlTdXBwb3J0ZWQoKSAmJiAhdGhpcy5zdGF0ZSgpLmF0dGVtcHQgJiYgdGhpcy5zZXR0aW5ncygpPy5wYXNza2V5U2lnbkluID09PSB0cnVlO1xuICB9XG5cbiAgLyoqIFdoYXQgdGhlIGFwcCBsZXRzIHRoZSBNRkEgc3RlcHMgb2ZmZXIgKGZyb20ge0BsaW5rIHNldHRpbmdzfSkuICovXG4gIG1mYUNob2ljZXMoKTogTWZhQ2hvaWNlcyB7XG4gICAgcmV0dXJuIG1mYUNob2ljZXNGcm9tKHRoaXMuc2V0dGluZ3MoKT8uYWNjb3VudCk7XG4gIH1cblxuICAvKiogU3RhcnQgdGhlIGVucm9sbWVudCBzdGVwIGZvciBpdHMgYXR0ZW1wdCwgb3IgcmVzZXQgaXQgb25jZSB0aGUgZmxvdyBsZWF2ZXMuICovXG4gIHByaXZhdGUgc3luY0Vucm9sbG1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYXR0ZW1wdCA9IHRoaXMuc3RhdGUoKS5hdHRlbXB0O1xuICAgIGlmIChhdHRlbXB0Py5zdGF0dXMgPT09ICduZWVkc19tZmFfZW5yb2xsbWVudCcgJiYgYXR0ZW1wdC5pZCkgdGhpcy5lbnJvbGxtZW50LnN0YXJ0KGF0dGVtcHQuaWQpO1xuICAgIGVsc2UgdGhpcy5lbnJvbGxtZW50LnJlc2V0KCk7XG4gIH1cblxuICAvKiogRmV0Y2ggdGhlIGluc3RhbmNlJ3MgcHVibGljIHNldHRpbmdzIGFuZCBkcmF3IHdoYXRldmVyIGNhcHRjaGEgdGhleSByZXF1aXJlLiAqL1xuICBhc3luYyBsb2FkU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9hZGVkID0gYXdhaXQgZmV0Y2hJbnN0YW5jZVNldHRpbmdzKHRoaXMuY2xpZW50KTtcbiAgICBpZiAobG9hZGVkKSB7XG4gICAgICB0aGlzLnNldHRpbmdzLnNldChsb2FkZWQpO1xuICAgICAgdGhpcy5zeW5jQ2FwdGNoYSgpO1xuICAgICAgaWYgKGxvYWRlZC5hY2NvdW50Lmxhc3RTaWduSW5NZXRob2QpIHRoaXMubGFzdE1ldGhvZC5zZXQoYXdhaXQgZmV0Y2hMYXN0U2lnbkluTWV0aG9kKHRoaXMuY2xpZW50KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBmYWN0b3JzIHRvIG9mZmVyIG9uIGEgYG5lZWRzX2ZpcnN0X2ZhY3RvcmAgc3RlcDogdGhlIHNlcnZlcidzIGxpc3RcbiAgICogd2l0aG91dCBlbWFpbCBjb2RlIC8gbGluayB3aGlsZSB0aGUgYXBwIGNhbm5vdCBkZWxpdmVyIGVtYWlsXG4gICAqIChgc2V0dGluZ3MuZW1haWxEZWxpdmVyeS5hdmFpbGFibGUgPT09IGZhbHNlYCkuIEVtcHR5IG9uIGFueSBvdGhlciBzdGVwLlxuICAgKi9cbiAgZmlyc3RGYWN0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBhdHRlbXB0ID0gdGhpcy5zdGF0ZSgpLmF0dGVtcHQ7XG4gICAgY29uc3Qgc3RlcCA9IGF0dGVtcHQgPyBuZXh0U3RlcChhdHRlbXB0KSA6IG51bGw7XG4gICAgaWYgKHN0ZXA/LmtpbmQgIT09ICdjb2xsZWN0X2ZpcnN0X2ZhY3RvcicpIHJldHVybiBbXTtcbiAgICBjb25zdCBvZmZlcmVkID0gb2ZmZXJlZEZpcnN0RmFjdG9ycyhzdGVwLnN0cmF0ZWdpZXMsIHRoaXMuc2V0dGluZ3MoKT8uZW1haWxEZWxpdmVyeSk7XG4gICAgY29uc3QgcHJvb2YgPSB0aGlzLmhvbGRQcm9vZigpO1xuICAgIHJldHVybiBwcm9vZiAmJiAhb2ZmZXJlZC5pbmNsdWRlcyhwcm9vZikgPyBbLi4ub2ZmZXJlZCwgcHJvb2ZdIDogb2ZmZXJlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZW1haWxlZCBwcm9vZiBhIHBhc3N3b3JkIGhvbGQgc3RpbGwgd2FpdHMgb24gKGBGbG93U3RhdGUucGFzc3dvcmRIb2xkYCk6IHRoZVxuICAgKiBjb2RlLCBvciBhIGxpbmsgd2hlcmUgdGhlIGluc3RhbmNlIHZlcmlmaWVzIGJ5IGxpbmsgb25seS4gTnVsbCB3aXRoIG5vIGhvbGQsIG9uY2VcbiAgICogcHJvdmVuLCBvciB3aGlsZSB0aGUgYXBwIGNhbm5vdCBkZWxpdmVyIGVtYWlsLlxuICAgKi9cbiAgaG9sZFByb29mKCk6ICdlbWFpbF9jb2RlJyB8ICdlbWFpbF9saW5rJyB8IG51bGwge1xuICAgIGNvbnN0IGhvbGQgPSB0aGlzLnN0YXRlKCkucGFzc3dvcmRIb2xkO1xuICAgIGlmICghaG9sZCB8fCBob2xkLnJlbGVhc2VkIHx8IHRoaXMuc2V0dGluZ3MoKT8uZW1haWxEZWxpdmVyeT8uYXZhaWxhYmxlID09PSBmYWxzZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MoKT8uYWNjb3VudD8uZW1haWxWZXJpZmljYXRpb24gPT09ICdsaW5rJyA/ICdlbWFpbF9saW5rJyA6ICdlbWFpbF9jb2RlJztcbiAgfVxuXG4gIC8qKiBCYWNrIGZyb20gdGhlIGVtYWlsZWQgZmFjdG9yIHRvIHRoZSBwYXNzd29yZCBmaWVsZC4gKi9cbiAgdXNlUGFzc3dvcmQoKTogdm9pZCB7XG4gICAgdGhpcy5wcmVwYXJlZEZhY3Rvci5zZXQobnVsbCk7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIHByZXBhcmVkOiBudWxsLCBwb2xsU2VjcmV0OiBudWxsLCBlcnJvcnM6IFtdIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnVlIHdoZW4gZW1haWwgKyBwYXNzd29yZCBzaWduLXVwIGNhbm5vdCBjb21wbGV0ZSBiZWNhdXNlIHRoZSBhcHAgY2Fubm90XG4gICAqIHNlbmQgdGhlIHZlcmlmaWNhdGlvbiBlbWFpbCAoYHNldHRpbmdzLmVtYWlsRGVsaXZlcnkucGFzc3dvcmRTaWduVXAgPT09IGZhbHNlYCk6XG4gICAqIGA8YXRsYXMtc2lnbi11cD5gIHNob3dzIHRoZSBcImNhbid0IHNlbmQgZW1haWxcIiBub3RpY2UgaW5zdGVhZCBvZiB0aGUgZm9ybS5cbiAgICovXG4gIHNpZ25VcEVtYWlsVW5hdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MoKT8uZW1haWxEZWxpdmVyeS5wYXNzd29yZFNpZ25VcCA9PT0gZmFsc2U7XG4gIH1cblxuICAvKiogRmFsc2Ugd2hlbiBhIHBhc3N3b3JkIHJlc2V0IGVtYWlsIGNhbm5vdCBiZSBkZWxpdmVyZWQg4oCUIGhpZGUgXCJGb3Jnb3QgcGFzc3dvcmQ/XCIuICovXG4gIHBhc3N3b3JkUmVzZXRBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MoKT8uZW1haWxEZWxpdmVyeS5wYXNzd29yZFJlc2V0ICE9PSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc2sgdGhlIHNlcnZlciB0byBlbWFpbCBhIHNpZ24taW4gY29kZSBmb3IgdGhlIGN1cnJlbnQgYG5lZWRzX2ZpcnN0X2ZhY3RvcmBcbiAgICogc3RlcCAoYFBPU1Qg4oCmL3ByZXBhcmVfZmlyc3RfZmFjdG9yYCk7IHRoZSBmb3JtIHRoZW4gY29sbGVjdHMgdGhlIGNvZGUsIHdoaWNoXG4gICAqIHtAbGluayBzdWJtaXR9IHBvc3RzIGFzIHRoZSBgZW1haWxfY29kZWAgc3RyYXRlZ3kuIFdoaWxlIGEgcGFzc3dvcmQgaG9sZCB3YWl0c1xuICAgKiBvbiBpdCAoe0BsaW5rIGhvbGRQcm9vZn0pLCB0aGlzIGVtYWlscyB0aGF0IHByb29mIGluc3RlYWQuXG4gICAqL1xuICBhc3luYyBwcmVwYXJlKHN0cmF0ZWd5OiAnZW1haWxfY29kZScgfCAnZW1haWxfbGluaycpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZmlyc3RGYWN0b3JzKCkuaW5jbHVkZXMoc3RyYXRlZ3kpKSByZXR1cm47XG4gICAgY29uc3QgcHJvb2YgPSB0aGlzLmhvbGRQcm9vZigpO1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICBjb25zdCBuZXh0ID1cbiAgICAgIHN0cmF0ZWd5ID09PSBwcm9vZlxuICAgICAgICA/IGF3YWl0IHByZXBhcmVQYXNzd29yZEhvbGRQcm9vZih0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpLCBwcm9vZilcbiAgICAgICAgOiBhd2FpdCBwcmVwYXJlRmFjdG9yKHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCksIHN0cmF0ZWd5KTtcbiAgICB0aGlzLnNldFN0YXRlKG5leHQpO1xuICAgIGlmICghbmV4dC5lcnJvcnMubGVuZ3RoKSB0aGlzLnByZXBhcmVkRmFjdG9yLnNldChzdHJhdGVneSk7XG4gICAgdGhpcy5zeW5jUG9sbGluZygpO1xuICB9XG5cbiAgLyoqIEtlZXAgYm90aCBjYXB0Y2hhcyBpbiBzdGVwIHdpdGggdGhlIHNldHRpbmdzIGFuZCB0aGUgZmxvdydzIGN1cnJlbnQgc3RlcC4gKi9cbiAgcHJpdmF0ZSBzeW5jQ2FwdGNoYSgpOiB2b2lkIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3MoKTtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUoKTtcbiAgICB0aGlzLmNhcHRjaGEuY29uZmlndXJlKFxuICAgICAgc2lnbkluQ2FwdGNoYU9wdGlvbnMoc2V0dGluZ3M/LmNhcHRjaGFGbG93cy5zaWduSW4sIHN0YXRlLCAoKSA9PiB2b2lkIHRoaXMuc3VibWl0KHt9KSksXG4gICAgKTtcbiAgICBjb25zdCBzaWduVXBGbG93ID0gc2V0dGluZ3M/LmNhcHRjaGFGbG93cy5zaWduVXA7XG4gICAgdGhpcy5zaWduVXBDYXB0Y2hhLmNvbmZpZ3VyZSh7XG4gICAgICBmbG93OiBzaWduVXBGbG93LFxuICAgICAgYWN0aXZlOiAhc3RhdGUuYXR0ZW1wdCAmJiBmbG93TmVlZHNDYXB0Y2hhKHNpZ25VcEZsb3cpLFxuICAgIH0pO1xuICAgIHRoaXMuY2FwdGNoYURyYXduLnNldCh0aGlzLmNhcHRjaGEubmVlZGVkKTtcbiAgICB0aGlzLnNpZ25VcENhcHRjaGFEcmF3bi5zZXQodGhpcy5zaWduVXBDYXB0Y2hhLm5lZWRlZCk7XG4gIH1cblxuICBwcml2YXRlIHNldFN0YXRlKG5leHQ6IEZsb3dTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGNvbnN0IHByZXZpb3VzSWQgPSBwcmV2aW91cy5hdHRlbXB0Py5pZCA/PyBudWxsO1xuICAgIHRoaXMuc3RhdGUuc2V0KG5leHQpO1xuICAgIC8vIEEgcHJvdmVuIGhvbGQgZ29lcyBiYWNrIHRvIHRoZSBwYXNzd29yZCBmaWVsZC5cbiAgICBpZiAobmV4dC5wYXNzd29yZEhvbGQ/LnJlbGVhc2VkICYmICFwcmV2aW91cy5wYXNzd29yZEhvbGQ/LnJlbGVhc2VkKSB0aGlzLnByZXBhcmVkRmFjdG9yLnNldChudWxsKTtcbiAgICAvLyBBIHByZXBhcmVkIGZhY3RvciBiZWxvbmdzIHRvIHRoZSBmaXJzdC1mYWN0b3Igc3RlcCBpdCB3YXMgc2VudCBmb3IuXG4gICAgaWYgKG5leHQuYXR0ZW1wdD8uc3RhdHVzICE9PSAnbmVlZHNfZmlyc3RfZmFjdG9yJykgdGhpcy5wcmVwYXJlZEZhY3Rvci5zZXQobnVsbCk7XG4gICAgLy8gQW4gZW1haWxlZCBzZWNvbmQtZmFjdG9yIGNvZGUgYmVsb25ncyB0byB0aGUgc2Vjb25kLWZhY3RvciBzdGVwIG9mIHRoaXMgYXR0ZW1wdC5cbiAgICBpZiAobmV4dC5hdHRlbXB0Py5zdGF0dXMgIT09ICduZWVkc19zZWNvbmRfZmFjdG9yJyB8fCAobmV4dC5hdHRlbXB0Py5pZCA/PyBudWxsKSAhPT0gcHJldmlvdXNJZCkge1xuICAgICAgdGhpcy5lbWFpbFNlY29uZEZhY3Rvci5zZXQobnVsbCk7XG4gICAgICB0aGlzLnNtc1NlY29uZEZhY3Rvci5zZXQobnVsbCk7XG4gICAgfVxuICAgIHRoaXMuc3luY0NhcHRjaGEoKTtcbiAgICB0aGlzLnN5bmNFbnJvbGxtZW50KCk7XG4gICAgdGhpcy5hdXRvU2VuZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRvU2VudEZvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBXaXRoIG5vIHBhc3N3b3JkIG9uIG9mZmVyLCBlbWFpbCB0aGUgY29kZSBhcyBzb29uIGFzIHRoZSBzZXJ2ZXIgYXNrcyBmb3IgYVxuICAgKiBmaXJzdCBmYWN0b3Ig4oCUIG9uY2UgcGVyIGF0dGVtcHQsIHNvIGEgZmFpbGVkIHNlbmQgd2FpdHMgZm9yIHRoZSB1c2VyJ3MgcmV0cnlcbiAgICogKHRoZSBcIkVtYWlsIG1lIGEgY29kZVwiIGJ1dHRvbikgaW5zdGVhZCBvZiBsb29waW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBhdXRvU2VuZCgpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc3RhdGUoKS5hdHRlbXB0Py5pZCA/PyBudWxsO1xuICAgIGlmICghaWQgfHwgdGhpcy5hdXRvU2VudEZvciA9PT0gaWQgfHwgdGhpcy5wcmVwYXJlZEZhY3RvcigpKSByZXR1cm47XG4gICAgaWYgKHBsYW5GaXJzdEZhY3Rvcih0aGlzLmZpcnN0RmFjdG9ycygpKS5hdXRvU2VuZCAhPT0gJ2VtYWlsX2NvZGUnKSByZXR1cm47XG4gICAgdGhpcy5hdXRvU2VudEZvciA9IGlkO1xuICAgIHZvaWQgdGhpcy5wcmVwYXJlKCdlbWFpbF9jb2RlJyk7XG4gIH1cblxuICAvKipcbiAgICogQWR2YW5jZSB0aGUgZmxvdyB3aXRoIHRoZSB2YWx1ZXMgdGhlIHVzZXIgdHlwZWQuIE9uIGNvbXBsZXRpb24sIGV4Y2hhbmdlIHRoZVxuICAgKiBvbmUtdGltZSB0aWNrZXQgZm9yIGNvb2tpZXMgb3ZlciBhIHNhbWUtb3JpZ2luIHJlcXVlc3QgKEZBUEkgaXMgY3Jvc3Mtb3JpZ2luXG4gICAqIGFuZCBjYW5ub3Qgc2V0IHRoZSBjb29raWUgb24gaXRzIG93biByZXNwb25zZSksIHRoZW4gcmUtYm9vdCBzbyB0aGUgcmVzdCBvZlxuICAgKiB0aGUgYXBwIHNlZXMgYSBzaWduZWQtaW4gdXNlci5cbiAgICovXG4gIGFzeW5jIHN1Ym1pdCh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSk7XG5cbiAgICAvLyBBIGNvZGUgdGhhdCBsaWZ0cyBhIHBhc3N3b3JkIGhvbGQgZ29lcyB0byBpdHMgb3duIGF0dGVtcHQsIG5vdCB0aGlzIHNpZ24taW4uXG4gICAgaWYgKHRoaXMucHJlcGFyZWRGYWN0b3IoKSA9PT0gJ2VtYWlsX2NvZGUnICYmIHRoaXMuaG9sZFByb29mKCkgPT09ICdlbWFpbF9jb2RlJykge1xuICAgICAgdGhpcy5zZXRTdGF0ZShhd2FpdCBhdHRlbXB0UGFzc3dvcmRIb2xkUHJvb2YodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgdmFsdWVzLmNvZGUgPz8gJycpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3V0ID0gYXdhaXQgYWR2YW5jZVdpdGhDYXB0Y2hhKHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCksIHZhbHVlcywge1xuICAgICAgY2FwdGNoYTogdGhpcy5jYXB0Y2hhLFxuICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgdDogdGhpcy50LFxuICAgIH0pO1xuICAgIHRoaXMuaWRlbnRpZmllciA9IG91dC5pZGVudGlmaWVyO1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKG91dC5zdGF0ZSk7XG4gIH1cblxuICAvKiogTG9hZCB0aGUgc2lnbi11cCdzIHBvbGljaWVzIGludG8ge0BsaW5rIHBvbGljaWVzfSAoYDxhdGxhcy1zaWduLXVwPmAgY2FsbHMgaXQgb24gaW5pdCkuICovXG4gIGFzeW5jIGxvYWRQb2xpY2llcyhsb2NhbGU/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnBvbGljaWVzLnNldFBvbGljaWVzKGF3YWl0IGxvYWRQb2xpY2llcyh0aGlzLmNsaWVudCwgeyBsb2NhbGUgfSkpO1xuICB9XG5cbiAgLyoqIFRoZSB1c2VyIGRlY2xpbmVkIGEgcG9saWN5IGEgc2lnbi1pbiB3YXMgd2FpdGluZyBvbjogY2FuY2VsIHRoZSBhdHRlbXB0IGFuZCBzYXkgd2h5LiAqL1xuICBkZWNsaW5lUG9saWN5KHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlLnNldCh7XG4gICAgICAuLi5pbml0aWFsRmxvdyxcbiAgICAgIGVycm9yczogW3sgY29kZTogJ1BPTElDWV9ERUNMSU5FRCcsIG1lc3NhZ2U6IHRoaXMudCgncG9saWN5LmRlY2xpbmVkJykucmVwbGFjZSgne3BvbGljeX0nLCB0aXRsZSkgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFjY291bnQgKGBQT1NUIC92MS9jbGllbnQvc2lnbl91cHNgKSBmcm9tIGEgY3JlYXRlLWFjY291bnQgZm9ybSdzXG4gICAqIHZhbHVlcyDigJQgZW1haWwsIHBhc3N3b3JkIGFuZCBhbnkgY29uZmlndXJlZCBzaWduLXVwIGZpZWxkcyDigJQgY2FycnlpbmcgdGhlXG4gICAqIHNpZ24tdXAgY2FwdGNoYSdzIHRva2VuIHdoZW4gdGhlIGluc3RhbmNlIHJlcXVpcmVzIG9uZS4gVGhlIGVtYWlsZWQgY29kZSBpc1xuICAgKiB0aGVuIHBvc3RlZCB3aXRoIHtAbGluayBzdWJtaXR9LlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlKHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY29uc2VudCA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSk7XG4gICAgY29uc3QgbmV4dCA9IGF3YWl0IGNyZWF0ZVNpZ25VcCh0aGlzLmNsaWVudCwgdmFsdWVzLCB7XG4gICAgICBjb25zZW50LFxuICAgICAgY2FwdGNoYTogdGhpcy5zaWduVXBDYXB0Y2hhLFxuICAgICAgdDogdGhpcy50LFxuICAgICAgcG9saWNpZXM6IHRoaXMucG9saWNpZXMsXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5maW5pc2gobmV4dCk7XG4gIH1cblxuICAvKipcbiAgICogXCJFbWFpbCBtZSBhIGNvZGUgaW5zdGVhZFwiIGF0IHRoZSBzZWNvbmQgZmFjdG9yICh0aGUgaW5zdGFuY2Unc1xuICAgKiBgYWNjb3VudC5lbWFpbFNlY29uZEZhY3RvcmApOiBtYWlscyBhIGNvZGUgdG8gdGhlIGFjY291bnQncyB2ZXJpZmllZCBlbWFpbDtcbiAgICogaXQgaXMgdGhlbiBwb3N0ZWQgd2l0aCB7QGxpbmsgc3VibWl0fSBsaWtlIGFueSAyRkEgY29kZS5cbiAgICovXG4gIGFzeW5jIHNlbmRFbWFpbFNlY29uZEZhY3RvcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRTZWNvbmRGYWN0b3JDb2RlKCdlbWFpbF9jb2RlJywgdGhpcy5lbWFpbFNlY29uZEZhY3Rvcik7XG4gIH1cblxuICAvKipcbiAgICogXCJUZXh0IG1lIGEgY29kZSBpbnN0ZWFkXCIgYXQgdGhlIHNlY29uZCBmYWN0b3IgKHdoZXJlIHRoZSBhcHAgb2ZmZXJzIHRleHRlZFxuICAgKiBjb2Rlcywge0BsaW5rIG1mYUNob2ljZXN9YCgpLnNtc2ApOiB0ZXh0cyBhIGNvZGUgdG8gdGhlIGFjY291bnQncyBlbnJvbGxlZFxuICAgKiBwaG9uZTsgaXQgaXMgdGhlbiBwb3N0ZWQgd2l0aCB7QGxpbmsgc3VibWl0fSBsaWtlIGFueSAyRkEgY29kZS5cbiAgICovXG4gIGFzeW5jIHNlbmRTbXNTZWNvbmRGYWN0b3IoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kU2Vjb25kRmFjdG9yQ29kZSgnc21zJywgdGhpcy5zbXNTZWNvbmRGYWN0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kU2Vjb25kRmFjdG9yQ29kZShcbiAgICBzdHJhdGVneTogJ3NtcycgfCAnZW1haWxfY29kZScsXG4gICAgb3V0OiBXcml0YWJsZVNpZ25hbDx7IGJ1c3k/OiBib29sZWFuOyBzZW50VG8/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nIH0gfCBudWxsPixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnN0YXRlKCkuYXR0ZW1wdD8uaWQ7XG4gICAgaWYgKCFpZCkgcmV0dXJuO1xuICAgIG91dC5zZXQoeyBidXN5OiB0cnVlIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHNlbnRUbyB9ID0gYXdhaXQgcHJlcGFyZVNlY29uZEZhY3RvckNvZGUodGhpcy5jbGllbnQsIGlkLCBzdHJhdGVneSk7XG4gICAgICBvdXQuc2V0KHsgc2VudFRvIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvdXQuc2V0KHsgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogdGhpcy50KCdlcnJvci5nZW5lcmljJykgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlc2VuZCBhIHNpZ24tdXAncyBlbWFpbGVkIGNvZGUgLyBsaW5rICh0aGUgZWFybGllciBvbmUgc3RvcHMgd29ya2luZykuICovXG4gIGFzeW5jIHJlc2VuZFNpZ25VcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSk7XG4gICAgdGhpcy5zdGF0ZS5zZXQoYXdhaXQgcmVzZW5kU2lnblVwVmVyaWZpY2F0aW9uKHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIHBhc3NrZXktb25seSBzaWduLXVwIChgUE9TVCAvdjEvY2xpZW50L3NpZ25fdXBzL3Bhc3NrZXlgKSBmcm9tIHRoZVxuICAgKiBjcmVhdGUtYWNjb3VudCBmb3JtJ3MgdmFsdWVzIOKAlCBubyBwYXNzd29yZC4gT2ZmZXJlZCB3aGVuIHRoZSBpbnN0YW5jZSdzXG4gICAqIGBhY2NvdW50LnBhc3NrZXlTaWduVXBgIGlzIHNldC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVdpdGhQYXNza2V5KHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY29uc2VudCA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSk7XG4gICAgYXdhaXQgdGhpcy5maW5pc2goYXdhaXQgY3JlYXRlUGFzc2tleVNpZ25VcCh0aGlzLmNsaWVudCwgdmFsdWVzLCB7IGNvbnNlbnQsIGNhcHRjaGE6IHRoaXMuc2lnblVwQ2FwdGNoYSwgdDogdGhpcy50LCBwb2xpY2llczogdGhpcy5wb2xpY2llcyB9KSk7XG4gIH1cblxuICAvKiogVGhlIHBhc3NrZXktb25seSBzaWduLXVwJ3MgbGFzdCBzdGVwOiBjcmVhdGUgdGhlIHBhc3NrZXksIGFuZCB3aXRoIGl0IHRoZSBhY2NvdW50LiAqL1xuICBhc3luYyBjcmVhdGVQYXNza2V5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChhd2FpdCBmaW5pc2hQYXNza2V5U2lnblVwKHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCksIHsgdDogdGhpcy50IH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVjb3ZlcnkgY29kZXMgYW4gTUZBIGVucm9sbWVudCBqdXN0IGNvbXBsZXRlZCB0aGUgc2lnbi1pbiB3aXRoLCBzaG93blxuICAgKiBvbmNlIGJlZm9yZSBpdCBmaW5pc2hlcyAoe0BsaW5rIHNhdmVSZWNvdmVyeUNvZGVzfSk7IG51bGwgb3RoZXJ3aXNlLiBUaGV5XG4gICAqIGxpdmUgb25seSBpbiB0aGlzIGNvbnRyb2xsZXIncyBtZW1vcnkuXG4gICAqL1xuICByZWNvdmVyeUNvZGVzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIHBlbmRpbmdSZWNvdmVyeUNvZGVzKHRoaXMuc3RhdGUoKSk7XG4gIH1cblxuICAvKiogXCJJJ3ZlIHNhdmVkIG15IGNvZGVzXCI6IGZvcmdldCB0aGUgcmVjb3ZlcnkgY29kZXMgYW5kIGZpbmlzaCB0aGUgc2lnbi1pbi4gKi9cbiAgYXN5bmMgc2F2ZVJlY292ZXJ5Q29kZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5maW5pc2goYWNrbm93bGVkZ2VSZWNvdmVyeUNvZGVzKHRoaXMuc3RhdGUoKSkpO1xuICB9XG5cbiAgLyoqIFRoZSBhZGRyZXNzIGJlbG9uZ2VkIHRvIGFuIGV4aXN0aW5nIGFjY291bnQ6IHRoZSBub3RpY2UgaXMgdXAgdW50aWwge0BsaW5rIGNvbnRpbnVlQWZ0ZXJFeGlzdGluZ0FjY291bnR9LiAqL1xuICBleGlzdGluZ0FjY291bnROb3RpY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBlbmRpbmdFeGlzdGluZ0FjY291bnROb3RpY2UodGhpcy5zdGF0ZSgpKTtcbiAgfVxuXG4gIC8qKiBUaGUgdXNlciByZWFkIHRoZSBub3RpY2U6IGZpbmlzaCB0aGUgc2lnbi11cC4gKi9cbiAgYXN5bmMgY29udGludWVBZnRlckV4aXN0aW5nQWNjb3VudCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChhY2tub3dsZWRnZUV4aXN0aW5nQWNjb3VudCh0aGlzLnN0YXRlKCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluaXNoKG5leHQ6IEZsb3dTdGF0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEFuIGVucm9sbWVudCdzIHJlY292ZXJ5IGNvZGVzIGFyZSBzaG93biBmaXJzdDsgYHNhdmVSZWNvdmVyeUNvZGVzYCBmaW5pc2hlcy5cbiAgICBpZiAocGVuZGluZ1JlY292ZXJ5Q29kZXMobmV4dCkpIHtcbiAgICAgIC8vIFRoZSB0aWNrZXQgZGllcyBpbiA2MCBzZWNvbmRzIGFuZCBzYXZpbmcgdGhlIGNvZGVzIGNhbiB0YWtlIGxvbmdlcjogcmVkZWVtIGl0IG5vdyxcbiAgICAgIC8vIGFuZCBgc2F2ZVJlY292ZXJ5Q29kZXNgIGZpbmlzaGVzLiBBIHJlZnVzZWQgZXhjaGFuZ2Uga2VlcHMgdGhlIHRpY2tldCwgc28gdGhlIHNhdmUgcmVwb3J0cyBpdC5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi5uZXh0LCBidXN5OiB0cnVlIH0pO1xuICAgICAgY29uc3QgcmVzID0gbmV4dC50aWNrZXRcbiAgICAgICAgPyBhd2FpdCB0aGlzLmNsaWVudC5wb3N0KCcvdjEvY2xpZW50L3RpY2tldHMvZXhjaGFuZ2UnLCB7IGF0dGVtcHRfaWQ6IChuZXh0LmF0dGVtcHQgYXMgeyBpZD86IHN0cmluZyB9KS5pZCwgdGlja2V0OiBuZXh0LnRpY2tldCB9KVxuICAgICAgICA6IG51bGw7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgLi4ubmV4dCwgYnVzeTogZmFsc2UsIHRpY2tldDogcmVzPy5vayA/IG51bGwgOiBuZXh0LnRpY2tldCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5leHQuYXR0ZW1wdD8uc3RhdHVzID09PSAnY29tcGxldGUnKSB7XG4gICAgICAvLyBTdGF5cyBidXN5IHVudGlsIHRoaXMgYnJvd3NlciBhY3R1YWxseSBob2xkcyB0aGUgc2Vzc2lvbjogdGhlIGNvbXBsZXRpb25cbiAgICAgIC8vIGFsb25lIHNheXMgbm90aGluZyBhYm91dCB3aGV0aGVyIHRoZSBjb29raWUgd2FzIGtlcHQuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgLi4ubmV4dCwgYnVzeTogdHJ1ZSB9KTtcbiAgICAgIGxldCBleGNoYW5nZWQgPSB0cnVlO1xuICAgICAgaWYgKG5leHQudGlja2V0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3QoJy92MS9jbGllbnQvdGlja2V0cy9leGNoYW5nZScsIHtcbiAgICAgICAgICBhdHRlbXB0X2lkOiAobmV4dC5hdHRlbXB0IGFzIHsgaWQ/OiBzdHJpbmcgfSkuaWQsXG4gICAgICAgICAgdGlja2V0OiBuZXh0LnRpY2tldCxcbiAgICAgICAgfSk7XG4gICAgICAgIGV4Y2hhbmdlZCA9IHJlcy5vaztcbiAgICAgIH1cbiAgICAgIGlmIChleGNoYW5nZWQgJiYgdGhpcy5ob2xkRXhpc3RpbmdBY2NvdW50Tm90aWNlICYmIHBlbmRpbmdFeGlzdGluZ0FjY291bnROb3RpY2UobmV4dCkpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLm5leHQsIHRpY2tldDogbnVsbCwgYnVzeTogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtlcHQgPSBleGNoYW5nZWQgJiYgKGF3YWl0IHRoaXMucmVsb2FkKCkpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLm5leHQsIGJ1c3k6IGZhbHNlLCBzZXNzaW9uS2VwdDoga2VwdCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXh0KTtcbiAgICAgIC8vIEEgbWFnaWMtbGluayBzdGVwIG1heSBub3cgYmUgcG9sbGFibGUgKGEgbGluayBvcGVuZWQgb24gYW5vdGhlciBkZXZpY2UpLlxuICAgICAgdGhpcy5zeW5jUG9sbGluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdGFydC9zdG9wIHRoZSDCpzUuMyBtYWdpYy1saW5rIHBvbGwgdG8gbWF0Y2ggdGhlIGN1cnJlbnQgc3RhdGUuICovXG4gIHN5bmNQb2xsaW5nKCk6IHZvaWQge1xuICAgIGlmIChzaG91bGRLZWVwUG9sbGluZyh0aGlzLnN0YXRlKCkpKSB7XG4gICAgICB0aGlzLnN0YXJ0UG9sbGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3BQb2xsaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFBvbGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucG9sbFRpbWVyKSByZXR1cm47XG4gICAgdGhpcy5wb2xsVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBvbGxlZCA9IHRoaXMuc3RhdGUoKTtcbiAgICAgICAgY29uc3QgeyBzdGF0ZTogbmV4dCwgdGlja2V0IH0gPSBhd2FpdCBwb2xsQXR0ZW1wdCh0aGlzLmNsaWVudCwgcG9sbGVkKTtcbiAgICAgICAgLy8gQSByZXNlbmQgcm90YXRlZCB0aGUgc2VjcmV0IG1lYW53aGlsZTogdGhpcyBhbnN3ZXIgaXMgc3RhbGUuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlKCkucG9sbFNlY3JldCA9PT0gcG9sbGVkLnBvbGxTZWNyZXQpIHRoaXMuc2V0U3RhdGUobmV4dCk7XG4gICAgICAgIC8vIGUuZy4gYSBwYXNza2V5IHNpZ24tdXAgd2hvc2UgZW1haWwgd2FzIGp1c3QgcHJvdmVuOiBvbmx5IHRoaXMgdGFiIGNhbiBnbyBvbi5cbiAgICAgICAgaWYgKCF0aWNrZXQgJiYgIXNob3VsZEtlZXBQb2xsaW5nKG5leHQpKSB0aGlzLnN0b3BQb2xsaW5nKCk7XG4gICAgICAgIGlmICghdGlja2V0IHx8ICFuZXh0LmF0dGVtcHQpIHJldHVybjtcblxuICAgICAgICAvLyBUaGUgdGlja2V0IGlzIGV4Y2hhbmdlZCBieSBhIG5vcm1hbCByZXF1ZXN0LCBzbyBubyBzZXNzaW9uIHRva2VuIGV2ZXJcbiAgICAgICAgLy8gYXBwZWFycyBpbiBhIFVSTC5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdCgnL3YxL2NsaWVudC90aWNrZXRzL2V4Y2hhbmdlJywge1xuICAgICAgICAgIGF0dGVtcHRfaWQ6IChuZXh0LmF0dGVtcHQgYXMgeyBpZD86IHN0cmluZyB9KS5pZCxcbiAgICAgICAgICB0aWNrZXQsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXB0ID0gcmVzLm9rICYmIChhd2FpdCB0aGlzLnJlbG9hZCgpKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLnRoaXMuc3RhdGUoKSwgc2Vzc2lvbktlcHQ6IGtlcHQgfSk7XG4gICAgICAgIHRoaXMuc3RvcFBvbGxpbmcoKTtcbiAgICAgIH0pKCk7XG4gICAgfSwgMl8wMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUG9sbGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wb2xsVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsVGltZXIpO1xuICAgICAgdGhpcy5wb2xsVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWxlYXNlIHRoZSBwb2xsIHRpbWVyIGFuZCB0aGUgY2FwdGNoYSB3aWRnZXRzIOKAlCBjYWxsIGZyb20gdGhlIGNvbXBvbmVudCdzIGBuZ09uRGVzdHJveWAuICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5wYXNza2V5LnN0b3BBdXRvZmlsbCgpO1xuICAgIHRoaXMuc3RvcFBvbGxpbmcoKTtcbiAgICB0aGlzLmNhcHRjaGEuZGVzdHJveSgpO1xuICAgIHRoaXMuc2lnblVwQ2FwdGNoYS5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input, computed, effect, inject, } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, computed, effect, afterNextRender, inject, signal, } from '@angular/core';
|
|
2
|
+
import { emailLinkFromUrl } from '@atlasauth/js';
|
|
2
3
|
import { lastUsedMethodLabel, passkeysSupported, signUp as hostedSignUp } from '@atlasauth/js';
|
|
3
4
|
import { AtlasService } from '../atlas.service';
|
|
4
5
|
import { translate } from '../i18n';
|
|
5
6
|
import { AttemptFlowComponent } from './attempt-flow.component';
|
|
7
|
+
import { EmailLinkComponent } from './email-link.component';
|
|
6
8
|
import { RecoveryCodesComponent } from './recovery-codes.component';
|
|
7
9
|
import { AtlasFlowController } from './flow-controller';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
@@ -18,6 +20,11 @@ import * as i0 from "@angular/core";
|
|
|
18
20
|
*/
|
|
19
21
|
export class SignInComponent {
|
|
20
22
|
atlas = inject(AtlasService);
|
|
23
|
+
/** Opened from a mailed link: that page, not the flow. Read after the first render, so hydration matches. */
|
|
24
|
+
emailLink = signal(null);
|
|
25
|
+
constructor() {
|
|
26
|
+
afterNextRender(() => this.emailLink.set(emailLinkFromUrl(undefined, 'sign_in')));
|
|
27
|
+
}
|
|
21
28
|
/** Where to send the user once the flow completes. Reserved for host routing. */
|
|
22
29
|
afterUrl;
|
|
23
30
|
/**
|
|
@@ -83,6 +90,9 @@ export class SignInComponent {
|
|
|
83
90
|
}
|
|
84
91
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignInComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
85
92
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SignInComponent, isStandalone: true, selector: "atlas-sign-in", inputs: { afterUrl: "afterUrl", signUpUrl: "signUpUrl" }, ngImport: i0, template: `
|
|
93
|
+
@if (emailLink(); as link) {
|
|
94
|
+
<atlas-email-link [link]="link"></atlas-email-link>
|
|
95
|
+
} @else {
|
|
86
96
|
@if (lastUsedLabel(); as label) {
|
|
87
97
|
<p class="atlas-text atlas-last-used-hint" data-atlas="last-used" [attr.data-atlas-method]="flow.lastMethod()">
|
|
88
98
|
{{ t('signIn.lastUsed') }}: {{ label }}
|
|
@@ -108,6 +118,7 @@ export class SignInComponent {
|
|
|
108
118
|
[captcha]="flow.captchaDrawn() ? flow.captcha : null"
|
|
109
119
|
[firstFactors]="flow.firstFactors()"
|
|
110
120
|
[preparedFactor]="flow.preparedFactor()"
|
|
121
|
+
[matchCode]="flow.state().matchCode ?? null"
|
|
111
122
|
[passwordHold]="flow.state().passwordHold ?? null"
|
|
112
123
|
[holdProof]="flow.holdProof()"
|
|
113
124
|
(usePassword)="flow.usePassword()"
|
|
@@ -140,7 +151,8 @@ export class SignInComponent {
|
|
|
140
151
|
{{ t('signIn.noAccount') }} <a class="atlas-link" [href]="href">{{ t('signIn.signUpLink') }}</a>
|
|
141
152
|
</p>
|
|
142
153
|
}
|
|
143
|
-
|
|
154
|
+
}
|
|
155
|
+
`, isInline: true, dependencies: [{ kind: "component", type: EmailLinkComponent, selector: "atlas-email-link", inputs: ["link"] }, { kind: "component", type: AttemptFlowComponent, selector: "atlas-attempt-flow", inputs: ["attempt", "busy", "errors", "sessionKept", "titleKey", "captcha", "firstFactors", "preparedFactor", "passwordHold", "holdProof", "offerEmailSecondFactor", "emailedSecondFactor", "offerSmsSecondFactor", "textedSecondFactor", "enrollment", "enrollmentState", "emailVerification", "matchCode"], outputs: ["submitFlow", "chooseFactor", "usePassword", "emailSecondFactor", "smsSecondFactor", "resend", "policyDeclined"] }, { kind: "component", type: RecoveryCodesComponent, selector: "atlas-recovery-codes", inputs: ["codes", "busy"], outputs: ["saved"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
144
156
|
}
|
|
145
157
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignInComponent, decorators: [{
|
|
146
158
|
type: Component,
|
|
@@ -148,8 +160,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
148
160
|
selector: 'atlas-sign-in',
|
|
149
161
|
standalone: true,
|
|
150
162
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
151
|
-
imports: [AttemptFlowComponent, RecoveryCodesComponent],
|
|
163
|
+
imports: [EmailLinkComponent, AttemptFlowComponent, RecoveryCodesComponent],
|
|
152
164
|
template: `
|
|
165
|
+
@if (emailLink(); as link) {
|
|
166
|
+
<atlas-email-link [link]="link"></atlas-email-link>
|
|
167
|
+
} @else {
|
|
153
168
|
@if (lastUsedLabel(); as label) {
|
|
154
169
|
<p class="atlas-text atlas-last-used-hint" data-atlas="last-used" [attr.data-atlas-method]="flow.lastMethod()">
|
|
155
170
|
{{ t('signIn.lastUsed') }}: {{ label }}
|
|
@@ -175,6 +190,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
175
190
|
[captcha]="flow.captchaDrawn() ? flow.captcha : null"
|
|
176
191
|
[firstFactors]="flow.firstFactors()"
|
|
177
192
|
[preparedFactor]="flow.preparedFactor()"
|
|
193
|
+
[matchCode]="flow.state().matchCode ?? null"
|
|
178
194
|
[passwordHold]="flow.state().passwordHold ?? null"
|
|
179
195
|
[holdProof]="flow.holdProof()"
|
|
180
196
|
(usePassword)="flow.usePassword()"
|
|
@@ -207,11 +223,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
207
223
|
{{ t('signIn.noAccount') }} <a class="atlas-link" [href]="href">{{ t('signIn.signUpLink') }}</a>
|
|
208
224
|
</p>
|
|
209
225
|
}
|
|
226
|
+
}
|
|
210
227
|
`,
|
|
211
228
|
}]
|
|
212
|
-
}], propDecorators: { afterUrl: [{
|
|
229
|
+
}], ctorParameters: () => [], propDecorators: { afterUrl: [{
|
|
213
230
|
type: Input
|
|
214
231
|
}], signUpUrl: [{
|
|
215
232
|
type: Input
|
|
216
233
|
}] } });
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi1pbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLElBQUksWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUV4RDs7Ozs7Ozs7O0dBU0c7QUFrRUgsTUFBTSxPQUFPLGVBQWU7SUFDVCxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTlDLGlGQUFpRjtJQUN4RSxRQUFRLENBQVU7SUFDM0I7Ozs7T0FJRztJQUNNLFNBQVMsQ0FBaUI7SUFFekIsQ0FBQyxDQUFDLEdBQVc7UUFDckIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELHNGQUFzRjtJQUM1RSxhQUFhO1FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0MsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMs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SUE1RGhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERULDREQTNEUyxvQkFBb0IsNGRBQUUsc0JBQXNCOzs0RkE2RDNDLGVBQWU7a0JBakUzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixDQUFDO29CQUN2RCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwRFQ7aUJBQ0Y7OEJBS1UsUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGFzdFVzZWRNZXRob2RMYWJlbCwgcGFzc2tleXNTdXBwb3J0ZWQsIHNpZ25VcCBhcyBob3N0ZWRTaWduVXAgfSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IEF0bGFzU2VydmljZSB9IGZyb20gJy4uL2F0bGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBBdHRlbXB0Rmxvd0NvbXBvbmVudCB9IGZyb20gJy4vYXR0ZW1wdC1mbG93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWNvdmVyeUNvZGVzQ29tcG9uZW50IH0gZnJvbSAnLi9yZWNvdmVyeS1jb2Rlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXRsYXNGbG93Q29udHJvbGxlciB9IGZyb20gJy4vZmxvdy1jb250cm9sbGVyJztcblxuLyoqXG4gKiBgPGF0bGFzLXNpZ24taW4+YCDigJQgdGhlIGZ1bGwsIG11bHRpLXN0ZXAgc2lnbi1pbiBmbG93IGRyaXZlbiBlbnRpcmVseSBieSB0aGVcbiAqIHNlcnZlci1zaWRlIGF0dGVtcHQgc3RhdHVzLiBUaGUgQW5ndWxhciBwZWVyIG9mIFJlYWN0J3MgYDxTaWduSW4vPmAuIERyYXdzIHRoZVxuICogaW5zdGFuY2UncyBzaWduLWluIGNhcHRjaGEgd2hlbiBpdCBpcyByZXF1aXJlZCAoYWx3YXlzLW9uLCBvciBhXG4gKiBgbmVlZHNfY2FwdGNoYWAgY2hhbGxlbmdlKS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8YXRsYXMtc2lnbi1pbiAqYXRsYXNTaWduZWRPdXQgYWZ0ZXJVcmw9XCIvZGFzaGJvYXJkXCI+PC9hdGxhcy1zaWduLWluPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F0bGFzLXNpZ24taW4nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0F0dGVtcHRGbG93Q29tcG9uZW50LCBSZWNvdmVyeUNvZGVzQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGxhc3RVc2VkTGFiZWwoKTsgYXMgbGFiZWwpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dCBhdGxhcy1sYXN0LXVzZWQtaGludFwiIGRhdGEtYXRsYXM9XCJsYXN0LXVzZWRcIiBbYXR0ci5kYXRhLWF0bGFzLW1ldGhvZF09XCJmbG93Lmxhc3RNZXRob2QoKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubGFzdFVzZWQnKSB9fToge3sgbGFiZWwgfX1cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChhdGxhc0Nvbm5lY3Rpb24oKTsgYXMgY29ubmVjdGlvbklkKSB7XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImF0bGFzLXNvY2lhbC1idXR0b25cIiBkYXRhLWF0bGFzLXByb3ZpZGVyPVwiYXRsYXNcIiAoY2xpY2spPVwiZmxvdy5zaWduSW5XaXRoQXRsYXMoY29ubmVjdGlvbklkKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4uY29udGludWVXaXRoQXRsYXMnKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICBAaWYgKGZsb3cuc2lnbkluV2l0aEF0bGFzRXJyb3IoKTsgYXMgbWVzc2FnZSkge1xuICAgICAgICA8cCBjbGFzcz1cImF0bGFzLWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+e3sgbWVzc2FnZSB9fTwvcD5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmIChmbG93LnJlY292ZXJ5Q29kZXMoKTsgYXMgY29kZXMpIHtcbiAgICAgIDxhdGxhcy1yZWNvdmVyeS1jb2RlcyBbY29kZXNdPVwiY29kZXNcIiBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiIChzYXZlZCk9XCJmbG93LnNhdmVSZWNvdmVyeUNvZGVzKClcIj48L2F0bGFzLXJlY292ZXJ5LWNvZGVzPlxuICAgIH0gQGVsc2Uge1xuICAgIDxhdGxhcy1hdHRlbXB0LWZsb3dcbiAgICAgIFthdHRlbXB0XT1cImZsb3cuc3RhdGUoKS5hdHRlbXB0XCJcbiAgICAgIFtidXN5XT1cImZsb3cuc3RhdGUoKS5idXN5XCJcbiAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICBbc2Vzc2lvbktlcHRdPVwiZmxvdy5zdGF0ZSgpLnNlc3Npb25LZXB0XCJcbiAgICAgIHRpdGxlS2V5PVwic2lnbkluLnRpdGxlXCJcbiAgICAgIFtjYXB0Y2hhXT1cImZsb3cuY2FwdGNoYURyYXduKCkgPyBmbG93LmNhcHRjaGEgOiBudWxsXCJcbiAgICAgIFtmaXJzdEZhY3RvcnNdPVwiZmxvdy5maXJzdEZhY3RvcnMoKVwiXG4gICAgICBbcHJlcGFyZWRGYWN0b3JdPVwiZmxvdy5wcmVwYXJlZEZhY3RvcigpXCJcbiAgICAgIFtwYXNzd29yZEhvbGRdPVwiZmxvdy5zdGF0ZSgpLnBhc3N3b3JkSG9sZCA/PyBudWxsXCJcbiAgICAgIFtob2xkUHJvb2ZdPVwiZmxvdy5ob2xkUHJvb2YoKVwiXG4gICAgICAodXNlUGFzc3dvcmQpPVwiZmxvdy51c2VQYXNzd29yZCgpXCJcbiAgICAgIFtvZmZlckVtYWlsU2Vjb25kRmFjdG9yXT1cImZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudD8uZW1haWxTZWNvbmRGYWN0b3IgPT09IHRydWVcIlxuICAgICAgW2VtYWlsZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5lbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzdWJtaXRGbG93KT1cInN1Ym1pdElkZW50aWZpZXIoJGV2ZW50KVwiXG4gICAgICAoY2hvb3NlRmFjdG9yKT1cImZsb3cucHJlcGFyZSgkZXZlbnQpXCJcbiAgICAgIFtvZmZlclNtc1NlY29uZEZhY3Rvcl09XCJmbG93LnNldHRpbmdzKCkgIT09IG51bGwgJiYgZmxvdy5tZmFDaG9pY2VzKCkuc21zXCJcbiAgICAgIFt0ZXh0ZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5zbXNTZWNvbmRGYWN0b3IoKVwiXG4gICAgICBbZW5yb2xsbWVudF09XCJmbG93LmVucm9sbG1lbnRcIlxuICAgICAgW2Vucm9sbG1lbnRTdGF0ZV09XCJmbG93LmVucm9sbG1lbnRTdGF0ZSgpXCJcbiAgICAgIChlbWFpbFNlY29uZEZhY3Rvcik9XCJmbG93LnNlbmRFbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzbXNTZWNvbmRGYWN0b3IpPVwiZmxvdy5zZW5kU21zU2Vjb25kRmFjdG9yKClcIlxuICAgICAgKHBvbGljeURlY2xpbmVkKT1cImZsb3cuZGVjbGluZVBvbGljeSgkZXZlbnQpXCJcbiAgICA+PC9hdGxhcy1hdHRlbXB0LWZsb3c+XG4gICAgfVxuICAgIEBpZiAoZmxvdy5wYXNza2V5T2ZmZXJlZCgpICYmICFmbG93LnJlY292ZXJ5Q29kZXMoKSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJhdGxhcy1zb2NpYWwtYnV0dG9uIGF0bGFzLXBhc3NrZXktYnV0dG9uXCJcbiAgICAgICAgZGF0YS1hdGxhcy1wYXNza2V5LXNpZ24taW49XCJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmxvdy5zdGF0ZSgpLmJ1c3lcIlxuICAgICAgICAoY2xpY2spPVwiZmxvdy5wYXNza2V5LnNpZ25JbigpXCJcbiAgICAgID5cbiAgICAgICAge3sgdCgnc2lnbkluLnBhc3NrZXlCdXR0b24nKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoZmxvdy5zdGF0ZSgpLmF0dGVtcHQ/LnN0YXR1cyAhPT0gJ2NvbXBsZXRlJyAmJiBzaWduVXBIcmVmKCk7IGFzIGhyZWYpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtZm9vdGVyXCIgZGF0YS1hdGxhcy1zaWduLXVwLXByb21wdD1cIlwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubm9BY2NvdW50JykgfX0gPGEgY2xhc3M9XCJhdGxhcy1saW5rXCIgW2hyZWZdPVwiaHJlZlwiPnt7IHQoJ3NpZ25Jbi5zaWduVXBMaW5rJykgfX08L2E+XG4gICAgICA8L3A+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBTaWduSW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcblxuICAvKiogV2hlcmUgdG8gc2VuZCB0aGUgdXNlciBvbmNlIHRoZSBmbG93IGNvbXBsZXRlcy4gUmVzZXJ2ZWQgZm9yIGhvc3Qgcm91dGluZy4gKi9cbiAgQElucHV0KCkgYWZ0ZXJVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVyZSBcIk5vIGFjY291bnQ/IFNpZ24gdXBcIiBnb2VzLiBEZWZhdWx0OiB0aGUgaW5zdGFuY2UncyBob3N0ZWQgc2lnbi11cFxuICAgKiBwYWdlIChjYXJyeWluZyB0aGUgdmlzaXRvcidzIHJlZmVycmFsKS4gYG51bGxgIGhpZGVzIGl0LiBBbHdheXMgc2hvd24sIG5ldmVyXG4gICAqIG9ubHkgYWZ0ZXIgYSBmYWlsZWQgc2lnbi1pbiwgc28gaXQgc2F5cyBub3RoaW5nIGFib3V0IHdoZXRoZXIgYW4gZW1haWwgaGFzIGFuIGFjY291bnQuXG4gICAqL1xuICBASW5wdXQoKSBzaWduVXBVcmw/OiBzdHJpbmcgfCBudWxsO1xuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpO1xuICB9XG5cbiAgLyoqIFwiTGFzdCB1c2VkOiBQYXNzd29yZFwiIG9uIHRoZSBpZGVudGlmaWVyIHN0ZXAsIHdoZW4gdGhlIGluc3RhbmNlIHNob3dzIHRoZSBoaW50LiAqL1xuICBwcm90ZWN0ZWQgbGFzdFVzZWRMYWJlbCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5mbG93LnN0YXRlKCkuYXR0ZW1wdCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGxhc3RVc2VkTWV0aG9kTGFiZWwodGhpcy5mbG93Lmxhc3RNZXRob2QoKSwgKGtleSkgPT4gdGhpcy50KGtleSkpO1xuICB9XG5cbiAgLyoqIFRoZSBcIlNpZ24gaW4gd2l0aCBBdGxhc1wiIGNvbm5lY3Rpb24sIG9uIHRoZSBmaXJzdCBzdGVwLCB3aGVuIHRoZSBpbnN0YW5jZSBoYXMgaXQgb24uICovXG4gIHByb3RlY3RlZCBhdGxhc0Nvbm5lY3Rpb24oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZmxvdy5zdGF0ZSgpLmF0dGVtcHQgfHwgdGhpcy5mbG93LnJlY292ZXJ5Q29kZXMoKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZmxvdy5zZXR0aW5ncygpPy5zaWduSW5XaXRoQXRsYXM/LmNvbm5lY3Rpb25JZCA/PyBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNpZ25VcEhyZWYoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2lnblVwVXJsID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5zaWduVXBVcmwpIHJldHVybiB0aGlzLnNpZ25VcFVybDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGhvc3RlZFNpZ25VcCh7XG4gICAgICAgIGZyb250ZW5kQXBpOiB0aGlzLmF0bGFzLmZyb250ZW5kQXBpLFxuICAgICAgICByZWRpcmVjdFVybDogdGhpcy5hZnRlclVybCA/PyAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6IHVuZGVmaW5lZCksXG4gICAgICAgIG5hdmlnYXRlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZsb3cgPSBuZXcgQXRsYXNGbG93Q29udHJvbGxlcihcbiAgICB0aGlzLmF0bGFzLmNyZWF0ZUZhcGlDbGllbnQoKSxcbiAgICAoKSA9PiB0aGlzLmF0bGFzLnJlbG9hZCgpLFxuICAgIC8vIFJlc3VtZSBtaWQtZmxvdyBpZiBhbiBPQXV0aCByZWRpcmVjdCBjYW1lIGJhY2sgb3dpbmcgYSBzZWNvbmQgZmFjdG9yLlxuICAgIHRoaXMuYXRsYXMucGVuZGluZ0F0dGVtcHQsXG4gICAgKGtleSkgPT4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpLFxuICApO1xuXG4gIC8vIFBhc3NrZXkgYXV0b2ZpbGwgcnVucyB3aGlsZSB0aGUgZmlyc3Qgc3RlcCBvZmZlcnMgcGFzc2tleXMgKGEgY29tcHV0ZWQsIHNvIGl0IHJlLWFybXMgb25seSB3aGVuIHRoYXQgY2hhbmdlcykuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFzc2tleU9mZmVyZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZsb3cucGFzc2tleU9mZmVyZWQoKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBwYXNza2V5QXV0b2ZpbGwgPSBlZmZlY3QoKCkgPT4gKHRoaXMucGFzc2tleU9mZmVyZWQoKSA/IHRoaXMuZmxvdy5wYXNza2V5LmFybUF1dG9maWxsKCkgOiB0aGlzLmZsb3cucGFzc2tleS5zdG9wQXV0b2ZpbGwoKSkpO1xuXG4gIHByb3RlY3RlZCBzdWJtaXRJZGVudGlmaWVyKHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMuZmxvdy5wYXNza2V5LnN0b3BBdXRvZmlsbCgpO1xuICAgIHZvaWQgdGhpcy5mbG93LnN1Ym1pdCh2YWx1ZXMpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB0aGlzLmZsb3cucGFzc2tleVN1cHBvcnRlZC5zZXQocGFzc2tleXNTdXBwb3J0ZWQoKSk7XG4gICAgLy8gSWYgc2VlZGVkIGZyb20gYSBwZW5kaW5nIGF0dGVtcHQgdGhhdCBpcyBhbHJlYWR5IHBvbGxhYmxlLCBzdGFydCBwb2xsaW5nLlxuICAgIHRoaXMuZmxvdy5zeW5jUG9sbGluZygpO1xuICAgIC8vIMKnNSB0aGUgaW5zdGFuY2UncyBjYXB0Y2hhIHNldHRpbmdzIChzd2l0Y2hpbmcgY2FwdGNoYSBvbiBpbiB0aGUgZGFzaGJvYXJkXG4gICAgLy8gZHJhd3MgaXQgaGVyZSB3aXRoIG5vIGNvZGUgY2hhbmdlKSBhbmQgZW1haWwgZGVsaXZlcnkgKG5vIGVtYWlsZWQtY29kZVxuICAgIC8vIG9wdGlvbiB3aGlsZSB0aGUgYXBwIGNhbm5vdCBzZW5kIGVtYWlsKS5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHZvaWQgdGhpcy5mbG93LmxvYWRTZXR0aW5ncygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mbG93LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi1pbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sZUFBZSxFQUNmLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxJQUFJLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFeEQ7Ozs7Ozs7OztHQVNHO0FBdUVILE1BQU0sT0FBTyxlQUFlO0lBQ1QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUU5Qyw2R0FBNkc7SUFDMUYsU0FBUyxHQUFHLE1BQU0sQ0FBbUIsSUFBSSxDQUFDLENBQUM7SUFFOUQ7UUFDRSxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsaUZBQWlGO0lBQ3hFLFFBQVEsQ0FBVTtJQUMzQjs7OztPQUlHO0lBQ00sU0FBUyxDQUFpQjtJQUV6QixDQUFDLENBQUMsR0FBVztRQUNyQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsc0ZBQXNGO0lBQzVFLGFBQWE7UUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUMzQyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsMkZBQTJGO0lBQ2pGLGVBQWU7UUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxlQUFlLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQztJQUNyRSxDQUFDO0lBRVMsVUFBVTtRQUNsQixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxZQUFZLENBQUM7Z0JBQ2xCLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7Z0JBQ25DLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNoRyxRQUFRLEVBQUUsS0FBSzthQUNoQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVrQixJQUFJLEdBQUcsSUFBSSxtQkFBbUIsQ0FDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUM3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtJQUN6Qix3RUFBd0U7SUFDeEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQ3pCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQ2pELENBQUM7SUFFRixpSEFBaUg7SUFDaEcsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDMUQsZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV0SSxnQkFBZ0IsQ0FBQyxNQUE4QjtRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLDRFQUE0RTtRQUM1RSx5RUFBeUU7UUFDekUsMkNBQTJDO1FBQzNDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztZQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdEIsQ0FBQzt3R0E5RVUsZUFBZTs0RkFBZixlQUFlLG1JQWpFaEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStEVCw0REFoRVMsa0JBQWtCLCtFQUFFLG9CQUFvQix5ZUFBRSxzQkFBc0I7OzRGQWtFL0QsZUFBZTtrQkF0RTNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLENBQUM7b0JBQzNFLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0RUO2lCQUNGO3dEQVlVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBlbWFpbExpbmtGcm9tVXJsLCB0eXBlIEVtYWlsTGluayB9IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuaW1wb3J0IHsgbGFzdFVzZWRNZXRob2RMYWJlbCwgcGFzc2tleXNTdXBwb3J0ZWQsIHNpZ25VcCBhcyBob3N0ZWRTaWduVXAgfSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IEF0bGFzU2VydmljZSB9IGZyb20gJy4uL2F0bGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBBdHRlbXB0Rmxvd0NvbXBvbmVudCB9IGZyb20gJy4vYXR0ZW1wdC1mbG93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbWFpbExpbmtDb21wb25lbnQgfSBmcm9tICcuL2VtYWlsLWxpbmsuY29tcG9uZW50JztcbmltcG9ydCB7IFJlY292ZXJ5Q29kZXNDb21wb25lbnQgfSBmcm9tICcuL3JlY292ZXJ5LWNvZGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdGxhc0Zsb3dDb250cm9sbGVyIH0gZnJvbSAnLi9mbG93LWNvbnRyb2xsZXInO1xuXG4vKipcbiAqIGA8YXRsYXMtc2lnbi1pbj5gIOKAlCB0aGUgZnVsbCwgbXVsdGktc3RlcCBzaWduLWluIGZsb3cgZHJpdmVuIGVudGlyZWx5IGJ5IHRoZVxuICogc2VydmVyLXNpZGUgYXR0ZW1wdCBzdGF0dXMuIFRoZSBBbmd1bGFyIHBlZXIgb2YgUmVhY3QncyBgPFNpZ25Jbi8+YC4gRHJhd3MgdGhlXG4gKiBpbnN0YW5jZSdzIHNpZ24taW4gY2FwdGNoYSB3aGVuIGl0IGlzIHJlcXVpcmVkIChhbHdheXMtb24sIG9yIGFcbiAqIGBuZWVkc19jYXB0Y2hhYCBjaGFsbGVuZ2UpLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxhdGxhcy1zaWduLWluICphdGxhc1NpZ25lZE91dCBhZnRlclVybD1cIi9kYXNoYm9hcmRcIj48L2F0bGFzLXNpZ24taW4+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRsYXMtc2lnbi1pbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbRW1haWxMaW5rQ29tcG9uZW50LCBBdHRlbXB0Rmxvd0NvbXBvbmVudCwgUmVjb3ZlcnlDb2Rlc0NvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChlbWFpbExpbmsoKTsgYXMgbGluaykge1xuICAgICAgPGF0bGFzLWVtYWlsLWxpbmsgW2xpbmtdPVwibGlua1wiPjwvYXRsYXMtZW1haWwtbGluaz5cbiAgICB9IEBlbHNlIHtcbiAgICBAaWYgKGxhc3RVc2VkTGFiZWwoKTsgYXMgbGFiZWwpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dCBhdGxhcy1sYXN0LXVzZWQtaGludFwiIGRhdGEtYXRsYXM9XCJsYXN0LXVzZWRcIiBbYXR0ci5kYXRhLWF0bGFzLW1ldGhvZF09XCJmbG93Lmxhc3RNZXRob2QoKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubGFzdFVzZWQnKSB9fToge3sgbGFiZWwgfX1cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChhdGxhc0Nvbm5lY3Rpb24oKTsgYXMgY29ubmVjdGlvbklkKSB7XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImF0bGFzLXNvY2lhbC1idXR0b25cIiBkYXRhLWF0bGFzLXByb3ZpZGVyPVwiYXRsYXNcIiAoY2xpY2spPVwiZmxvdy5zaWduSW5XaXRoQXRsYXMoY29ubmVjdGlvbklkKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4uY29udGludWVXaXRoQXRsYXMnKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICBAaWYgKGZsb3cuc2lnbkluV2l0aEF0bGFzRXJyb3IoKTsgYXMgbWVzc2FnZSkge1xuICAgICAgICA8cCBjbGFzcz1cImF0bGFzLWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+e3sgbWVzc2FnZSB9fTwvcD5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmIChmbG93LnJlY292ZXJ5Q29kZXMoKTsgYXMgY29kZXMpIHtcbiAgICAgIDxhdGxhcy1yZWNvdmVyeS1jb2RlcyBbY29kZXNdPVwiY29kZXNcIiBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiIChzYXZlZCk9XCJmbG93LnNhdmVSZWNvdmVyeUNvZGVzKClcIj48L2F0bGFzLXJlY292ZXJ5LWNvZGVzPlxuICAgIH0gQGVsc2Uge1xuICAgIDxhdGxhcy1hdHRlbXB0LWZsb3dcbiAgICAgIFthdHRlbXB0XT1cImZsb3cuc3RhdGUoKS5hdHRlbXB0XCJcbiAgICAgIFtidXN5XT1cImZsb3cuc3RhdGUoKS5idXN5XCJcbiAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICBbc2Vzc2lvbktlcHRdPVwiZmxvdy5zdGF0ZSgpLnNlc3Npb25LZXB0XCJcbiAgICAgIHRpdGxlS2V5PVwic2lnbkluLnRpdGxlXCJcbiAgICAgIFtjYXB0Y2hhXT1cImZsb3cuY2FwdGNoYURyYXduKCkgPyBmbG93LmNhcHRjaGEgOiBudWxsXCJcbiAgICAgIFtmaXJzdEZhY3RvcnNdPVwiZmxvdy5maXJzdEZhY3RvcnMoKVwiXG4gICAgICBbcHJlcGFyZWRGYWN0b3JdPVwiZmxvdy5wcmVwYXJlZEZhY3RvcigpXCJcbiAgICAgIFttYXRjaENvZGVdPVwiZmxvdy5zdGF0ZSgpLm1hdGNoQ29kZSA/PyBudWxsXCJcbiAgICAgIFtwYXNzd29yZEhvbGRdPVwiZmxvdy5zdGF0ZSgpLnBhc3N3b3JkSG9sZCA/PyBudWxsXCJcbiAgICAgIFtob2xkUHJvb2ZdPVwiZmxvdy5ob2xkUHJvb2YoKVwiXG4gICAgICAodXNlUGFzc3dvcmQpPVwiZmxvdy51c2VQYXNzd29yZCgpXCJcbiAgICAgIFtvZmZlckVtYWlsU2Vjb25kRmFjdG9yXT1cImZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudD8uZW1haWxTZWNvbmRGYWN0b3IgPT09IHRydWVcIlxuICAgICAgW2VtYWlsZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5lbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzdWJtaXRGbG93KT1cInN1Ym1pdElkZW50aWZpZXIoJGV2ZW50KVwiXG4gICAgICAoY2hvb3NlRmFjdG9yKT1cImZsb3cucHJlcGFyZSgkZXZlbnQpXCJcbiAgICAgIFtvZmZlclNtc1NlY29uZEZhY3Rvcl09XCJmbG93LnNldHRpbmdzKCkgIT09IG51bGwgJiYgZmxvdy5tZmFDaG9pY2VzKCkuc21zXCJcbiAgICAgIFt0ZXh0ZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5zbXNTZWNvbmRGYWN0b3IoKVwiXG4gICAgICBbZW5yb2xsbWVudF09XCJmbG93LmVucm9sbG1lbnRcIlxuICAgICAgW2Vucm9sbG1lbnRTdGF0ZV09XCJmbG93LmVucm9sbG1lbnRTdGF0ZSgpXCJcbiAgICAgIChlbWFpbFNlY29uZEZhY3Rvcik9XCJmbG93LnNlbmRFbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzbXNTZWNvbmRGYWN0b3IpPVwiZmxvdy5zZW5kU21zU2Vjb25kRmFjdG9yKClcIlxuICAgICAgKHBvbGljeURlY2xpbmVkKT1cImZsb3cuZGVjbGluZVBvbGljeSgkZXZlbnQpXCJcbiAgICA+PC9hdGxhcy1hdHRlbXB0LWZsb3c+XG4gICAgfVxuICAgIEBpZiAoZmxvdy5wYXNza2V5T2ZmZXJlZCgpICYmICFmbG93LnJlY292ZXJ5Q29kZXMoKSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJhdGxhcy1zb2NpYWwtYnV0dG9uIGF0bGFzLXBhc3NrZXktYnV0dG9uXCJcbiAgICAgICAgZGF0YS1hdGxhcy1wYXNza2V5LXNpZ24taW49XCJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmxvdy5zdGF0ZSgpLmJ1c3lcIlxuICAgICAgICAoY2xpY2spPVwiZmxvdy5wYXNza2V5LnNpZ25JbigpXCJcbiAgICAgID5cbiAgICAgICAge3sgdCgnc2lnbkluLnBhc3NrZXlCdXR0b24nKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoZmxvdy5zdGF0ZSgpLmF0dGVtcHQ/LnN0YXR1cyAhPT0gJ2NvbXBsZXRlJyAmJiBzaWduVXBIcmVmKCk7IGFzIGhyZWYpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtZm9vdGVyXCIgZGF0YS1hdGxhcy1zaWduLXVwLXByb21wdD1cIlwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubm9BY2NvdW50JykgfX0gPGEgY2xhc3M9XCJhdGxhcy1saW5rXCIgW2hyZWZdPVwiaHJlZlwiPnt7IHQoJ3NpZ25Jbi5zaWduVXBMaW5rJykgfX08L2E+XG4gICAgICA8L3A+XG4gICAgfVxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgU2lnbkluQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGF0bGFzID0gaW5qZWN0KEF0bGFzU2VydmljZSk7XG5cbiAgLyoqIE9wZW5lZCBmcm9tIGEgbWFpbGVkIGxpbms6IHRoYXQgcGFnZSwgbm90IHRoZSBmbG93LiBSZWFkIGFmdGVyIHRoZSBmaXJzdCByZW5kZXIsIHNvIGh5ZHJhdGlvbiBtYXRjaGVzLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW1haWxMaW5rID0gc2lnbmFsPEVtYWlsTGluayB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB0aGlzLmVtYWlsTGluay5zZXQoZW1haWxMaW5rRnJvbVVybCh1bmRlZmluZWQsICdzaWduX2luJykpKTtcbiAgfVxuXG4gIC8qKiBXaGVyZSB0byBzZW5kIHRoZSB1c2VyIG9uY2UgdGhlIGZsb3cgY29tcGxldGVzLiBSZXNlcnZlZCBmb3IgaG9zdCByb3V0aW5nLiAqL1xuICBASW5wdXQoKSBhZnRlclVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXJlIFwiTm8gYWNjb3VudD8gU2lnbiB1cFwiIGdvZXMuIERlZmF1bHQ6IHRoZSBpbnN0YW5jZSdzIGhvc3RlZCBzaWduLXVwXG4gICAqIHBhZ2UgKGNhcnJ5aW5nIHRoZSB2aXNpdG9yJ3MgcmVmZXJyYWwpLiBgbnVsbGAgaGlkZXMgaXQuIEFsd2F5cyBzaG93biwgbmV2ZXJcbiAgICogb25seSBhZnRlciBhIGZhaWxlZCBzaWduLWluLCBzbyBpdCBzYXlzIG5vdGhpbmcgYWJvdXQgd2hldGhlciBhbiBlbWFpbCBoYXMgYW4gYWNjb3VudC5cbiAgICovXG4gIEBJbnB1dCgpIHNpZ25VcFVybD86IHN0cmluZyB8IG51bGw7XG5cbiAgcHJvdGVjdGVkIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0cmFuc2xhdGUodGhpcy5hdGxhcy5sb2NhbGl6YXRpb24sIGtleSk7XG4gIH1cblxuICAvKiogXCJMYXN0IHVzZWQ6IFBhc3N3b3JkXCIgb24gdGhlIGlkZW50aWZpZXIgc3RlcCwgd2hlbiB0aGUgaW5zdGFuY2Ugc2hvd3MgdGhlIGhpbnQuICovXG4gIHByb3RlY3RlZCBsYXN0VXNlZExhYmVsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmZsb3cuc3RhdGUoKS5hdHRlbXB0KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbGFzdFVzZWRNZXRob2RMYWJlbCh0aGlzLmZsb3cubGFzdE1ldGhvZCgpLCAoa2V5KSA9PiB0aGlzLnQoa2V5KSk7XG4gIH1cblxuICAvKiogVGhlIFwiU2lnbiBpbiB3aXRoIEF0bGFzXCIgY29ubmVjdGlvbiwgb24gdGhlIGZpcnN0IHN0ZXAsIHdoZW4gdGhlIGluc3RhbmNlIGhhcyBpdCBvbi4gKi9cbiAgcHJvdGVjdGVkIGF0bGFzQ29ubmVjdGlvbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5mbG93LnN0YXRlKCkuYXR0ZW1wdCB8fCB0aGlzLmZsb3cucmVjb3ZlcnlDb2RlcygpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5mbG93LnNldHRpbmdzKCk/LnNpZ25JbldpdGhBdGxhcz8uY29ubmVjdGlvbklkID8/IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2lnblVwSHJlZigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5zaWduVXBVcmwgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLnNpZ25VcFVybCkgcmV0dXJuIHRoaXMuc2lnblVwVXJsO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gaG9zdGVkU2lnblVwKHtcbiAgICAgICAgZnJvbnRlbmRBcGk6IHRoaXMuYXRsYXMuZnJvbnRlbmRBcGksXG4gICAgICAgIHJlZGlyZWN0VXJsOiB0aGlzLmFmdGVyVXJsID8/ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5sb2NhdGlvbi5ocmVmIDogdW5kZWZpbmVkKSxcbiAgICAgICAgbmF2aWdhdGU6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmxvdyA9IG5ldyBBdGxhc0Zsb3dDb250cm9sbGVyKFxuICAgIHRoaXMuYXRsYXMuY3JlYXRlRmFwaUNsaWVudCgpLFxuICAgICgpID0+IHRoaXMuYXRsYXMucmVsb2FkKCksXG4gICAgLy8gUmVzdW1lIG1pZC1mbG93IGlmIGFuIE9BdXRoIHJlZGlyZWN0IGNhbWUgYmFjayBvd2luZyBhIHNlY29uZCBmYWN0b3IuXG4gICAgdGhpcy5hdGxhcy5wZW5kaW5nQXR0ZW1wdCxcbiAgICAoa2V5KSA9PiB0cmFuc2xhdGUodGhpcy5hdGxhcy5sb2NhbGl6YXRpb24sIGtleSksXG4gICk7XG5cbiAgLy8gUGFzc2tleSBhdXRvZmlsbCBydW5zIHdoaWxlIHRoZSBmaXJzdCBzdGVwIG9mZmVycyBwYXNza2V5cyAoYSBjb21wdXRlZCwgc28gaXQgcmUtYXJtcyBvbmx5IHdoZW4gdGhhdCBjaGFuZ2VzKS5cbiAgcHJpdmF0ZSByZWFkb25seSBwYXNza2V5T2ZmZXJlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmxvdy5wYXNza2V5T2ZmZXJlZCgpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhc3NrZXlBdXRvZmlsbCA9IGVmZmVjdCgoKSA9PiAodGhpcy5wYXNza2V5T2ZmZXJlZCgpID8gdGhpcy5mbG93LnBhc3NrZXkuYXJtQXV0b2ZpbGwoKSA6IHRoaXMuZmxvdy5wYXNza2V5LnN0b3BBdXRvZmlsbCgpKSk7XG5cbiAgcHJvdGVjdGVkIHN1Ym1pdElkZW50aWZpZXIodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5mbG93LnBhc3NrZXkuc3RvcEF1dG9maWxsKCk7XG4gICAgdm9pZCB0aGlzLmZsb3cuc3VibWl0KHZhbHVlcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHRoaXMuZmxvdy5wYXNza2V5U3VwcG9ydGVkLnNldChwYXNza2V5c1N1cHBvcnRlZCgpKTtcbiAgICAvLyBJZiBzZWVkZWQgZnJvbSBhIHBlbmRpbmcgYXR0ZW1wdCB0aGF0IGlzIGFscmVhZHkgcG9sbGFibGUsIHN0YXJ0IHBvbGxpbmcuXG4gICAgdGhpcy5mbG93LnN5bmNQb2xsaW5nKCk7XG4gICAgLy8gwqc1IHRoZSBpbnN0YW5jZSdzIGNhcHRjaGEgc2V0dGluZ3MgKHN3aXRjaGluZyBjYXB0Y2hhIG9uIGluIHRoZSBkYXNoYm9hcmRcbiAgICAvLyBkcmF3cyBpdCBoZXJlIHdpdGggbm8gY29kZSBjaGFuZ2UpIGFuZCBlbWFpbCBkZWxpdmVyeSAobm8gZW1haWxlZC1jb2RlXG4gICAgLy8gb3B0aW9uIHdoaWxlIHRoZSBhcHAgY2Fubm90IHNlbmQgZW1haWwpLlxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgdm9pZCB0aGlzLmZsb3cubG9hZFNldHRpbmdzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsb3cuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input, inject, signal, } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, afterNextRender, Input, inject, signal, } from '@angular/core';
|
|
2
|
+
import { emailLinkFromUrl } from '@atlasauth/js';
|
|
2
3
|
import { awaitingPasskey, existingAccountResetUrl, localizedErrorMessage, passkeysSupported, signInAfterProofUrl, signUpProvedByLink } from '@atlasauth/js';
|
|
3
4
|
import { AtlasService } from '../atlas.service';
|
|
4
5
|
import { classFor } from '../appearance';
|
|
5
6
|
import { translate } from '../i18n';
|
|
6
7
|
import { AttemptFlowComponent } from './attempt-flow.component';
|
|
8
|
+
import { EmailLinkComponent } from './email-link.component';
|
|
7
9
|
import { RecoveryCodesComponent } from './recovery-codes.component';
|
|
8
10
|
import { SignUpFormComponent } from './sign-up-form.component';
|
|
9
11
|
import { AtlasFlowController } from './flow-controller';
|
|
@@ -22,6 +24,11 @@ import * as i0 from "@angular/core";
|
|
|
22
24
|
*/
|
|
23
25
|
export class SignUpComponent {
|
|
24
26
|
atlas = inject(AtlasService);
|
|
27
|
+
/** Opened from a mailed link: that page, not the flow. Read after the first render, so hydration matches. */
|
|
28
|
+
emailLink = signal(null);
|
|
29
|
+
constructor() {
|
|
30
|
+
afterNextRender(() => this.emailLink.set(emailLinkFromUrl(undefined, 'sign_up')));
|
|
31
|
+
}
|
|
25
32
|
/** Where to send the user once the flow completes. Reserved for host routing. */
|
|
26
33
|
afterUrl;
|
|
27
34
|
/** Where the existing-account notice's "Forgot password?" goes. Default: the hosted sign-in page; `null` hides it. */
|
|
@@ -77,6 +84,9 @@ export class SignUpComponent {
|
|
|
77
84
|
}
|
|
78
85
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
79
86
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SignUpComponent, isStandalone: true, selector: "atlas-sign-up", inputs: { afterUrl: "afterUrl", resetPasswordUrl: "resetPasswordUrl", signInUrl: "signInUrl" }, ngImport: i0, template: `
|
|
87
|
+
@if (emailLink(); as link) {
|
|
88
|
+
<atlas-email-link [link]="link"></atlas-email-link>
|
|
89
|
+
} @else {
|
|
80
90
|
@if (flow.recoveryCodes(); as codes) {
|
|
81
91
|
<atlas-recovery-codes [codes]="codes" [busy]="flow.state().busy" (saved)="flow.saveRecoveryCodes()"></atlas-recovery-codes>
|
|
82
92
|
} @else if (flow.existingAccountNotice()) {
|
|
@@ -129,6 +139,7 @@ export class SignUpComponent {
|
|
|
129
139
|
[emailVerification]="flow.settings()?.account?.emailVerification ?? 'code'"
|
|
130
140
|
(submitFlow)="flow.submit($event)"
|
|
131
141
|
(resend)="flow.resendSignUp()"
|
|
142
|
+
[matchCode]="flow.state().matchCode ?? null"
|
|
132
143
|
[offerEmailSecondFactor]="flow.settings()?.account?.emailSecondFactor === true"
|
|
133
144
|
[emailedSecondFactor]="flow.emailSecondFactor()"
|
|
134
145
|
[offerSmsSecondFactor]="flow.settings() !== null && flow.mfaChoices().sms"
|
|
@@ -154,7 +165,8 @@ export class SignUpComponent {
|
|
|
154
165
|
"
|
|
155
166
|
></atlas-sign-up-form>
|
|
156
167
|
}
|
|
157
|
-
|
|
168
|
+
}
|
|
169
|
+
`, isInline: true, dependencies: [{ kind: "component", type: EmailLinkComponent, selector: "atlas-email-link", inputs: ["link"] }, { kind: "component", type: AttemptFlowComponent, selector: "atlas-attempt-flow", inputs: ["attempt", "busy", "errors", "sessionKept", "titleKey", "captcha", "firstFactors", "preparedFactor", "passwordHold", "holdProof", "offerEmailSecondFactor", "emailedSecondFactor", "offerSmsSecondFactor", "textedSecondFactor", "enrollment", "enrollmentState", "emailVerification", "matchCode"], outputs: ["submitFlow", "chooseFactor", "usePassword", "emailSecondFactor", "smsSecondFactor", "resend", "policyDeclined"] }, { kind: "component", type: RecoveryCodesComponent, selector: "atlas-recovery-codes", inputs: ["codes", "busy"], outputs: ["saved"] }, { kind: "component", type: SignUpFormComponent, selector: "atlas-sign-up-form", inputs: ["settings", "busy", "errors", "captcha", "passkey", "switchable", "policies"], outputs: ["switchMode", "submitSignUp"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
158
170
|
}
|
|
159
171
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpComponent, decorators: [{
|
|
160
172
|
type: Component,
|
|
@@ -162,8 +174,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
162
174
|
selector: 'atlas-sign-up',
|
|
163
175
|
standalone: true,
|
|
164
176
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
165
|
-
imports: [AttemptFlowComponent, RecoveryCodesComponent, SignUpFormComponent],
|
|
177
|
+
imports: [EmailLinkComponent, AttemptFlowComponent, RecoveryCodesComponent, SignUpFormComponent],
|
|
166
178
|
template: `
|
|
179
|
+
@if (emailLink(); as link) {
|
|
180
|
+
<atlas-email-link [link]="link"></atlas-email-link>
|
|
181
|
+
} @else {
|
|
167
182
|
@if (flow.recoveryCodes(); as codes) {
|
|
168
183
|
<atlas-recovery-codes [codes]="codes" [busy]="flow.state().busy" (saved)="flow.saveRecoveryCodes()"></atlas-recovery-codes>
|
|
169
184
|
} @else if (flow.existingAccountNotice()) {
|
|
@@ -216,6 +231,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
216
231
|
[emailVerification]="flow.settings()?.account?.emailVerification ?? 'code'"
|
|
217
232
|
(submitFlow)="flow.submit($event)"
|
|
218
233
|
(resend)="flow.resendSignUp()"
|
|
234
|
+
[matchCode]="flow.state().matchCode ?? null"
|
|
219
235
|
[offerEmailSecondFactor]="flow.settings()?.account?.emailSecondFactor === true"
|
|
220
236
|
[emailedSecondFactor]="flow.emailSecondFactor()"
|
|
221
237
|
[offerSmsSecondFactor]="flow.settings() !== null && flow.mfaChoices().sms"
|
|
@@ -241,13 +257,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
241
257
|
"
|
|
242
258
|
></atlas-sign-up-form>
|
|
243
259
|
}
|
|
260
|
+
}
|
|
244
261
|
`,
|
|
245
262
|
}]
|
|
246
|
-
}], propDecorators: { afterUrl: [{
|
|
263
|
+
}], ctorParameters: () => [], propDecorators: { afterUrl: [{
|
|
247
264
|
type: Input
|
|
248
265
|
}], resetPasswordUrl: [{
|
|
249
266
|
type: Input
|
|
250
267
|
}], signInUrl: [{
|
|
251
268
|
type: Input
|
|
252
269
|
}] } });
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi11cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi11cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDN0ssT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRXhEOzs7Ozs7Ozs7OztHQVdHO0FBc0ZILE1BQU0sT0FBTyxlQUFlO0lBQ1QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUU5QyxpRkFBaUY7SUFDeEUsUUFBUSxDQUFVO0lBRTNCLHNIQUFzSDtJQUM3RyxnQkFBZ0IsQ0FBaUI7SUFFMUMsbUpBQW1KO0lBQzFJLFNBQVMsQ0FBaUI7SUFFaEIsSUFBSSxHQUFHLElBQUksbUJBQW1CLENBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFDN0IsR0FBRyxFQUFFLENBQUMs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ekUsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUIsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLENBQUM7d0dBN0VVLGVBQWU7NEZBQWYsZUFBZSx5S0FoRmhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RVQsNERBL0VTLG9CQUFvQiw0ZEFBRSxzQkFBc0IsZ0hBQUUsbUJBQW1COzs0RkFpRmhFLGVBQWU7a0JBckYzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixDQUFDO29CQUM1RSxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThFVDtpQkFDRjs4QkFLVSxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhd2FpdGluZ1Bhc3NrZXksIGV4aXN0aW5nQWNjb3VudFJlc2V0VXJsLCBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UsIHBhc3NrZXlzU3VwcG9ydGVkLCBzaWduSW5BZnRlclByb29mVXJsLCBzaWduVXBQcm92ZWRCeUxpbmssIHR5cGUgRmllbGRFcnJvciB9IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuaW1wb3J0IHsgQXRsYXNTZXJ2aWNlIH0gZnJvbSAnLi4vYXRsYXMuc2VydmljZSc7XG5pbXBvcnQgeyBjbGFzc0ZvciwgdHlwZSBFbGVtZW50S2V5IH0gZnJvbSAnLi4vYXBwZWFyYW5jZSc7XG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEF0dGVtcHRGbG93Q29tcG9uZW50IH0gZnJvbSAnLi9hdHRlbXB0LWZsb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFJlY292ZXJ5Q29kZXNDb21wb25lbnQgfSBmcm9tICcuL3JlY292ZXJ5LWNvZGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaWduVXBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9zaWduLXVwLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEF0bGFzRmxvd0NvbnRyb2xsZXIgfSBmcm9tICcuL2Zsb3ctY29udHJvbGxlcic7XG5cbi8qKlxuICogYDxhdGxhcy1zaWduLXVwPmAg4oCUIGNyZWF0ZXMgYW4gYWNjb3VudC4gVGhlIEFuZ3VsYXIgcGVlciBvZiBSZWFjdCdzXG4gKiBgPFNpZ25VcC8+YC4gVGhlIGZpcnN0IHN0ZXAgaXMgdGhlIGNyZWF0ZS1hY2NvdW50IGZvcm0gKHRoZSBpbnN0YW5jZSdzXG4gKiBjb25maWd1cmVkIGZpZWxkcywgZW1haWwsIHBhc3N3b3JkLCBsZWdhbCBjb25zZW50IGFuZCDigJQgd2hlbiByZXF1aXJlZCDigJQgdGhlXG4gKiBjYXB0Y2hhKSwgd2hpY2ggUE9TVHMgYC92MS9jbGllbnQvc2lnbl91cHNgOyBmcm9tIHRoZXJlIGl0IHNoYXJlcyB0aGUgZmxvd1xuICogZW5naW5lIHdpdGggYDxhdGxhcy1zaWduLWluPmAgKHRoZSBlbWFpbGVkLWNvZGUgc3RlcCwgdGhlbiB0aGUgdGlja2V0XG4gKiBleGNoYW5nZSksIGJlY2F1c2UgdGhlIHNlcXVlbmNlIG9mIHN0ZXBzIGlzIGRlY2lkZWQgYnkgdGhlIHNlcnZlci5cbiAqXG4gKiBgYGBodG1sXG4gKiA8YXRsYXMtc2lnbi11cCAqYXRsYXNTaWduZWRPdXQ+PC9hdGxhcy1zaWduLXVwPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F0bGFzLXNpZ24tdXAnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0F0dGVtcHRGbG93Q29tcG9uZW50LCBSZWNvdmVyeUNvZGVzQ29tcG9uZW50LCBTaWduVXBGb3JtQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGZsb3cucmVjb3ZlcnlDb2RlcygpOyBhcyBjb2Rlcykge1xuICAgICAgPGF0bGFzLXJlY292ZXJ5LWNvZGVzIFtjb2Rlc109XCJjb2Rlc1wiIFtidXN5XT1cImZsb3cuc3RhdGUoKS5idXN5XCIgKHNhdmVkKT1cImZsb3cuc2F2ZVJlY292ZXJ5Q29kZXMoKVwiPjwvYXRsYXMtcmVjb3ZlcnktY29kZXM+XG4gICAgfSBAZWxzZSBpZiAoZmxvdy5leGlzdGluZ0FjY291bnROb3RpY2UoKSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiY2xzKCdjYXJkJywgJ2F0bGFzLWNhcmQnKVwiIGRhdGEtYXRsYXMtZXhpc3RpbmctYWNjb3VudD1cIlwiPlxuICAgICAgICA8aDEgW2NsYXNzXT1cImNscygnaGVhZGVyVGl0bGUnLCAnYXRsYXMtdGl0bGUnKVwiPnt7IHQoJ3NpZ25VcC50aXRsZScpIH19PC9oMT5cbiAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCI+e3sgdCgnc2lnblVwLmV4aXN0aW5nQWNjb3VudCcpIH19PC9wPlxuICAgICAgICBAaWYgKHJlc2V0SHJlZigpOyBhcyBocmVmKSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCI+PGEgY2xhc3M9XCJhdGxhcy1saW5rXCIgW2hyZWZdPVwiaHJlZlwiPnt7IHQoJ3NpZ25Jbi5mb3Jnb3RQYXNzd29yZCcpIH19PC9hPjwvcD5cbiAgICAgICAgfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblByaW1hcnknLCAnYXRsYXMtYnV0dG9uJylcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImZsb3cuY29udGludWVBZnRlckV4aXN0aW5nQWNjb3VudCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHQoJ3NpZ25VcC5zdWJtaXQnKSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2UgaWYgKGF3YWl0aW5nUGFzc2tleSgpKSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCJjbHMoJ2NhcmQnLCAnYXRsYXMtY2FyZCcpXCIgZGF0YS1hdGxhcy1wYXNza2V5LXNpZ24tdXA9XCJcIj5cbiAgICAgICAgPGgxIFtjbGFzc109XCJjbHMoJ2hlYWRlclRpdGxlJywgJ2F0bGFzLXRpdGxlJylcIj57eyB0KCdzaWduVXAudGl0bGUnKSB9fTwvaDE+XG4gICAgICAgIEBmb3IgKGVycm9yIG9mIGZsb3cuc3RhdGUoKS5lcnJvcnM7IHRyYWNrIGVycm9yLmNvZGUpIHtcbiAgICAgICAgICA8cCBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3JUZXh0KGVycm9yKSB9fTwvcD5cbiAgICAgICAgfVxuICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIj57eyB0KCdzaWduVXAucGFzc2tleVByb21wdCcpIH19PC9wPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblByaW1hcnknLCAnYXRsYXMtYnV0dG9uJylcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImZsb3cuY3JlYXRlUGFzc2tleSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHQoJ3NpZ25VcC5wYXNza2V5Q3JlYXRlJykgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIGlmIChlbWFpbENvbmZpcm1lZCgpKSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCJjbHMoJ2NhcmQnLCAnYXRsYXMtY2FyZCcpXCIgZGF0YS1hdGxhcy1lbWFpbC1jb25maXJtZWQ9XCJcIj5cbiAgICAgICAgPGgxIFtjbGFzc109XCJjbHMoJ2hlYWRlclRpdGxlJywgJ2F0bGFzLXRpdGxlJylcIj57eyB0KCdzaWduVXAudGl0bGUnKSB9fTwvaDE+XG4gICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiIHJvbGU9XCJzdGF0dXNcIj57eyB0KCdzaWduVXAuZW1haWxDb25maXJtZWQnKSB9fTwvcD5cbiAgICAgICAgQGlmIChzaWduSW5IcmVmKCk7IGFzIGhyZWYpIHtcbiAgICAgICAgICA8YSBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uUHJpbWFyeScsICdhdGxhcy1idXR0b24nKVwiIFtocmVmXT1cImhyZWZcIj57eyB0KCdzaWduSW4udGl0bGUnKSB9fTwvYT5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoZmxvdy5zdGF0ZSgpLmF0dGVtcHQpIHtcbiAgICAgIDxhdGxhcy1hdHRlbXB0LWZsb3dcbiAgICAgICAgW2F0dGVtcHRdPVwiZmxvdy5zdGF0ZSgpLmF0dGVtcHRcIlxuICAgICAgICBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICAgIFtzZXNzaW9uS2VwdF09XCJmbG93LnN0YXRlKCkuc2Vzc2lvbktlcHRcIlxuICAgICAgICB0aXRsZUtleT1cInNpZ25VcC50aXRsZVwiXG4gICAgICAgIFtlbWFpbFZlcmlmaWNhdGlvbl09XCJmbG93LnNldHRpbmdzKCk/LmFjY291bnQ/LmVtYWlsVmVyaWZpY2F0aW9uID8/ICdjb2RlJ1wiXG4gICAgICAgIChzdWJtaXRGbG93KT1cImZsb3cuc3VibWl0KCRldmVudClcIlxuICAgICAgICAocmVzZW5kKT1cImZsb3cucmVzZW5kU2lnblVwKClcIlxuICAgICAgICBbb2ZmZXJFbWFpbFNlY29uZEZhY3Rvcl09XCJmbG93LnNldHRpbmdzKCk/LmFjY291bnQ/LmVtYWlsU2Vjb25kRmFjdG9yID09PSB0cnVlXCJcbiAgICAgICAgW2VtYWlsZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5lbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgICAgW29mZmVyU21zU2Vjb25kRmFjdG9yXT1cImZsb3cuc2V0dGluZ3MoKSAhPT0gbnVsbCAmJiBmbG93Lm1mYUNob2ljZXMoKS5zbXNcIlxuICAgICAgICBbdGV4dGVkU2Vjb25kRmFjdG9yXT1cImZsb3cuc21zU2Vjb25kRmFjdG9yKClcIlxuICAgICAgICBbZW5yb2xsbWVudF09XCJmbG93LmVucm9sbG1lbnRcIlxuICAgICAgICBbZW5yb2xsbWVudFN0YXRlXT1cImZsb3cuZW5yb2xsbWVudFN0YXRlKClcIlxuICAgICAgICAoZW1haWxTZWNvbmRGYWN0b3IpPVwiZmxvdy5zZW5kRW1haWxTZWNvbmRGYWN0b3IoKVwiXG4gICAgICAgIChzbXNTZWNvbmRGYWN0b3IpPVwiZmxvdy5zZW5kU21zU2Vjb25kRmFjdG9yKClcIlxuICAgICAgICAocG9saWN5RGVjbGluZWQpPVwiZmxvdy5kZWNsaW5lUG9saWN5KCRldmVudClcIlxuICAgICAgPjwvYXRsYXMtYXR0ZW1wdC1mbG93PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGF0bGFzLXNpZ24tdXAtZm9ybVxuICAgICAgICBbc2V0dGluZ3NdPVwiZmxvdy5zZXR0aW5ncygpXCJcbiAgICAgICAgW2J1c3ldPVwiZmxvdy5zdGF0ZSgpLmJ1c3lcIlxuICAgICAgICBbZXJyb3JzXT1cImZsb3cuc3RhdGUoKS5lcnJvcnNcIlxuICAgICAgICBbY2FwdGNoYV09XCJmbG93LnNpZ25VcENhcHRjaGFEcmF3bigpID8gZmxvdy5zaWduVXBDYXB0Y2hhIDogbnVsbFwiXG4gICAgICAgIFtwb2xpY2llc109XCJmbG93LnBvbGljaWVzXCJcbiAgICAgICAgW3Bhc3NrZXldPVwicGFzc2tleUZvcm0oKVwiXG4gICAgICAgIFtzd2l0Y2hhYmxlXT1cImNhblBhc3NrZXkoKVwiXG4gICAgICAgIChzd2l0Y2hNb2RlKT1cInRvZ2dsZU1vZGUoKVwiXG4gICAgICAgIChzdWJtaXRTaWduVXApPVwiXG4gICAgICAgICAgcGFzc2tleUZvcm0oKSA/IGZsb3cuY3JlYXRlV2l0aFBhc3NrZXkoJGV2ZW50LnZhbHVlcywgJGV2ZW50LmNvbnNlbnQpIDogZmxvdy5jcmVhdGUoJGV2ZW50LnZhbHVlcywgJGV2ZW50LmNvbnNlbnQpXG4gICAgICAgIFwiXG4gICAgICA+PC9hdGxhcy1zaWduLXVwLWZvcm0+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBTaWduVXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcblxuICAvKiogV2hlcmUgdG8gc2VuZCB0aGUgdXNlciBvbmNlIHRoZSBmbG93IGNvbXBsZXRlcy4gUmVzZXJ2ZWQgZm9yIGhvc3Qgcm91dGluZy4gKi9cbiAgQElucHV0KCkgYWZ0ZXJVcmw/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXJlIHRoZSBleGlzdGluZy1hY2NvdW50IG5vdGljZSdzIFwiRm9yZ290IHBhc3N3b3JkP1wiIGdvZXMuIERlZmF1bHQ6IHRoZSBob3N0ZWQgc2lnbi1pbiBwYWdlOyBgbnVsbGAgaGlkZXMgaXQuICovXG4gIEBJbnB1dCgpIHJlc2V0UGFzc3dvcmRVcmw/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKiBXaGVyZSBcIlNpZ24gaW5cIiBnb2VzIG9uY2UgYW4gZW1haWxlZCBsaW5rIGNvbmZpcm1lZCB0aGUgYWRkcmVzcyBhbmQgbWFkZSBubyBzZXNzaW9uIGhlcmUuIERlZmF1bHQ6IHRoZSBob3N0ZWQgc2lnbi1pbiBwYWdlOyBgbnVsbGAgaGlkZXMgaXQuICovXG4gIEBJbnB1dCgpIHNpZ25JblVybD86IHN0cmluZyB8IG51bGw7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZsb3cgPSBuZXcgQXRsYXNGbG93Q29udHJvbGxlcihcbiAgICB0aGlzLmF0bGFzLmNyZWF0ZUZhcGlDbGllbnQoKSxcbiAgICAoKSA9PiB0aGlzLmF0bGFzLnJlbG9hZCgpLFxuICAgIHRoaXMuYXRsYXMucGVuZGluZ0F0dGVtcHQsXG4gICAgKGtleSkgPT4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpLFxuICAgIHRydWUsXG4gICk7XG5cbiAgLyoqIFBhc3N3b3JkIG9yIHBhc3NrZXktb25seSBzaWduLXVwICh0aGUgbGF0dGVyIHdoZW4gdGhlIGluc3RhbmNlIG9mZmVycyBpdCkuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBtb2RlID0gc2lnbmFsPCdwYXNzd29yZCcgfCAncGFzc2tleSc+KCdwYXNzd29yZCcpO1xuXG4gIHByb3RlY3RlZCBjYW5QYXNza2V5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZmxvdy5zZXR0aW5ncygpPy5hY2NvdW50LnBhc3NrZXlTaWduVXAgJiYgcGFzc2tleXNTdXBwb3J0ZWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXNza2V5Rm9ybSgpOiB7IGVtYWlsOiAnb2ZmJyB8ICdvcHRpb25hbCcgfCAncmVxdWlyZWQnIH0gfCBudWxsIHtcbiAgICBjb25zdCBvZmZlciA9IHRoaXMuZmxvdy5zZXR0aW5ncygpPy5hY2NvdW50LnBhc3NrZXlTaWduVXAgPz8gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5tb2RlKCkgPT09ICdwYXNza2V5JyAmJiBvZmZlciAmJiB0aGlzLmNhblBhc3NrZXkoKSA/IHsgZW1haWw6IG9mZmVyLmVtYWlsIH0gOiBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZU1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5mbG93LnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgZXJyb3JzOiBbXSB9KSk7XG4gICAgdGhpcy5tb2RlLnNldCh0aGlzLnBhc3NrZXlGb3JtKCkgPyAncGFzc3dvcmQnIDogJ3Bhc3NrZXknKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEhyZWYoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQWNjb3VudFJlc2V0VXJsKHsgdXJsOiB0aGlzLnJlc2V0UGFzc3dvcmRVcmwsIGZyb250ZW5kQXBpOiB0aGlzLmF0bGFzLmZyb250ZW5kQXBpLCByZWRpcmVjdFVybDogdGhpcy5hZnRlclVybCB9KTtcbiAgfVxuXG4gIC8qKiBBIGxpbmsgY29uZmlybWVkIHRoZSBhZGRyZXNzIGFuZCBtYWRlIG5vIHNlc3Npb24gaGVyZS4gU2F5cyB0aGUgc2FtZSBmb3IgYW55IGFkZHJlc3MuICovXG4gIHByb3RlY3RlZCBlbWFpbENvbmZpcm1lZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2lnblVwUHJvdmVkQnlMaW5rKHRoaXMuZmxvdy5zdGF0ZSgpLmF0dGVtcHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNpZ25JbkhyZWYoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHNpZ25JbkFmdGVyUHJvb2ZVcmwoeyB1cmw6IHRoaXMuc2lnbkluVXJsLCBmcm9udGVuZEFwaTogdGhpcy5hdGxhcy5mcm9udGVuZEFwaSwgcmVkaXJlY3RVcmw6IHRoaXMuYWZ0ZXJVcmwgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXdhaXRpbmdQYXNza2V5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhd2FpdGluZ1Bhc3NrZXkodGhpcy5mbG93LnN0YXRlKCkuYXR0ZW1wdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSh0aGlzLmF0bGFzLmxvY2FsaXphdGlvbiwga2V5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbHMoa2V5OiBFbGVtZW50S2V5LCBiYXNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBjbGFzc0ZvcihrZXksIHRoaXMuYXRsYXMuYXBwZWFyYW5jZSwgYmFzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXJyb3JUZXh0KGVycm9yOiBGaWVsZEVycm9yKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXllciA9ICh0aGlzLmF0bGFzIGFzIHsgZXJyb3JMb2NhbGl6YXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0pLmVycm9yTG9jYWxpemF0aW9uO1xuICAgIHJldHVybiBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UoZXJyb3IsIGxheWVyID8/IHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCB0aGlzLmF0bGFzLmxvY2FsaXphdGlvbik7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyDCpzUgdGhlIGluc3RhbmNlJ3Mgc2lnbi11cCBmaWVsZHMsIGNvbnNlbnQgcG9saWN5IGFuZCBjYXB0Y2hhIHNldHRpbmdzLlxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdm9pZCB0aGlzLmZsb3cubG9hZFNldHRpbmdzKCk7XG4gICAgICB2b2lkIHRoaXMuZmxvdy5sb2FkUG9saWNpZXModGhpcy5hdGxhcy5sb2NhbGUgPz8gdW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsb3cuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi11cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi11cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLEtBQUssRUFHTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDN0ssT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRXhEOzs7Ozs7Ozs7OztHQVdHO0FBMkZILE1BQU0sT0FBTyxlQUFlO0lBQ1QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUU5Qyw2R0FBNkc7SUFDMUYsU0FBUyxHQUFHLE1BQU0sQ0FBbUIsSUFBSSxDQUFDLENBQUM7SUFFOUQ7UUFDRSxlQUFlLENBQUMsR0FB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1GVDtpQkFDRjt3REFZVSxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGVtYWlsTGlua0Zyb21VcmwsIHR5cGUgRW1haWxMaW5rIH0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5pbXBvcnQgeyBhd2FpdGluZ1Bhc3NrZXksIGV4aXN0aW5nQWNjb3VudFJlc2V0VXJsLCBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UsIHBhc3NrZXlzU3VwcG9ydGVkLCBzaWduSW5BZnRlclByb29mVXJsLCBzaWduVXBQcm92ZWRCeUxpbmssIHR5cGUgRmllbGRFcnJvciB9IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuaW1wb3J0IHsgQXRsYXNTZXJ2aWNlIH0gZnJvbSAnLi4vYXRsYXMuc2VydmljZSc7XG5pbXBvcnQgeyBjbGFzc0ZvciwgdHlwZSBFbGVtZW50S2V5IH0gZnJvbSAnLi4vYXBwZWFyYW5jZSc7XG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEF0dGVtcHRGbG93Q29tcG9uZW50IH0gZnJvbSAnLi9hdHRlbXB0LWZsb3cuY29tcG9uZW50JztcbmltcG9ydCB7IEVtYWlsTGlua0NvbXBvbmVudCB9IGZyb20gJy4vZW1haWwtbGluay5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVjb3ZlcnlDb2Rlc0NvbXBvbmVudCB9IGZyb20gJy4vcmVjb3ZlcnktY29kZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNpZ25VcEZvcm1Db21wb25lbnQgfSBmcm9tICcuL3NpZ24tdXAtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXRsYXNGbG93Q29udHJvbGxlciB9IGZyb20gJy4vZmxvdy1jb250cm9sbGVyJztcblxuLyoqXG4gKiBgPGF0bGFzLXNpZ24tdXA+YCDigJQgY3JlYXRlcyBhbiBhY2NvdW50LiBUaGUgQW5ndWxhciBwZWVyIG9mIFJlYWN0J3NcbiAqIGA8U2lnblVwLz5gLiBUaGUgZmlyc3Qgc3RlcCBpcyB0aGUgY3JlYXRlLWFjY291bnQgZm9ybSAodGhlIGluc3RhbmNlJ3NcbiAqIGNvbmZpZ3VyZWQgZmllbGRzLCBlbWFpbCwgcGFzc3dvcmQsIGxlZ2FsIGNvbnNlbnQgYW5kIOKAlCB3aGVuIHJlcXVpcmVkIOKAlCB0aGVcbiAqIGNhcHRjaGEpLCB3aGljaCBQT1NUcyBgL3YxL2NsaWVudC9zaWduX3Vwc2A7IGZyb20gdGhlcmUgaXQgc2hhcmVzIHRoZSBmbG93XG4gKiBlbmdpbmUgd2l0aCBgPGF0bGFzLXNpZ24taW4+YCAodGhlIGVtYWlsZWQtY29kZSBzdGVwLCB0aGVuIHRoZSB0aWNrZXRcbiAqIGV4Y2hhbmdlKSwgYmVjYXVzZSB0aGUgc2VxdWVuY2Ugb2Ygc3RlcHMgaXMgZGVjaWRlZCBieSB0aGUgc2VydmVyLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxhdGxhcy1zaWduLXVwICphdGxhc1NpZ25lZE91dD48L2F0bGFzLXNpZ24tdXA+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRsYXMtc2lnbi11cCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbRW1haWxMaW5rQ29tcG9uZW50LCBBdHRlbXB0Rmxvd0NvbXBvbmVudCwgUmVjb3ZlcnlDb2Rlc0NvbXBvbmVudCwgU2lnblVwRm9ybUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChlbWFpbExpbmsoKTsgYXMgbGluaykge1xuICAgICAgPGF0bGFzLWVtYWlsLWxpbmsgW2xpbmtdPVwibGlua1wiPjwvYXRsYXMtZW1haWwtbGluaz5cbiAgICB9IEBlbHNlIHtcbiAgICBAaWYgKGZsb3cucmVjb3ZlcnlDb2RlcygpOyBhcyBjb2Rlcykge1xuICAgICAgPGF0bGFzLXJlY292ZXJ5LWNvZGVzIFtjb2Rlc109XCJjb2Rlc1wiIFtidXN5XT1cImZsb3cuc3RhdGUoKS5idXN5XCIgKHNhdmVkKT1cImZsb3cuc2F2ZVJlY292ZXJ5Q29kZXMoKVwiPjwvYXRsYXMtcmVjb3ZlcnktY29kZXM+XG4gICAgfSBAZWxzZSBpZiAoZmxvdy5leGlzdGluZ0FjY291bnROb3RpY2UoKSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiY2xzKCdjYXJkJywgJ2F0bGFzLWNhcmQnKVwiIGRhdGEtYXRsYXMtZXhpc3RpbmctYWNjb3VudD1cIlwiPlxuICAgICAgICA8aDEgW2NsYXNzXT1cImNscygnaGVhZGVyVGl0bGUnLCAnYXRsYXMtdGl0bGUnKVwiPnt7IHQoJ3NpZ25VcC50aXRsZScpIH19PC9oMT5cbiAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCI+e3sgdCgnc2lnblVwLmV4aXN0aW5nQWNjb3VudCcpIH19PC9wPlxuICAgICAgICBAaWYgKHJlc2V0SHJlZigpOyBhcyBocmVmKSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCI+PGEgY2xhc3M9XCJhdGxhcy1saW5rXCIgW2hyZWZdPVwiaHJlZlwiPnt7IHQoJ3NpZ25Jbi5mb3Jnb3RQYXNzd29yZCcpIH19PC9hPjwvcD5cbiAgICAgICAgfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblByaW1hcnknLCAnYXRsYXMtYnV0dG9uJylcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImZsb3cuY29udGludWVBZnRlckV4aXN0aW5nQWNjb3VudCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHQoJ3NpZ25VcC5zdWJtaXQnKSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2UgaWYgKGF3YWl0aW5nUGFzc2tleSgpKSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCJjbHMoJ2NhcmQnLCAnYXRsYXMtY2FyZCcpXCIgZGF0YS1hdGxhcy1wYXNza2V5LXNpZ24tdXA9XCJcIj5cbiAgICAgICAgPGgxIFtjbGFzc109XCJjbHMoJ2hlYWRlclRpdGxlJywgJ2F0bGFzLXRpdGxlJylcIj57eyB0KCdzaWduVXAudGl0bGUnKSB9fTwvaDE+XG4gICAgICAgIEBmb3IgKGVycm9yIG9mIGZsb3cuc3RhdGUoKS5lcnJvcnM7IHRyYWNrIGVycm9yLmNvZGUpIHtcbiAgICAgICAgICA8cCBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3JUZXh0KGVycm9yKSB9fTwvcD5cbiAgICAgICAgfVxuICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIj57eyB0KCdzaWduVXAucGFzc2tleVByb21wdCcpIH19PC9wPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblByaW1hcnknLCAnYXRsYXMtYnV0dG9uJylcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImZsb3cuY3JlYXRlUGFzc2tleSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHQoJ3NpZ25VcC5wYXNza2V5Q3JlYXRlJykgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIGlmIChlbWFpbENvbmZpcm1lZCgpKSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCJjbHMoJ2NhcmQnLCAnYXRsYXMtY2FyZCcpXCIgZGF0YS1hdGxhcy1lbWFpbC1jb25maXJtZWQ9XCJcIj5cbiAgICAgICAgPGgxIFtjbGFzc109XCJjbHMoJ2hlYWRlclRpdGxlJywgJ2F0bGFzLXRpdGxlJylcIj57eyB0KCdzaWduVXAudGl0bGUnKSB9fTwvaDE+XG4gICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiIHJvbGU9XCJzdGF0dXNcIj57eyB0KCdzaWduVXAuZW1haWxDb25maXJtZWQnKSB9fTwvcD5cbiAgICAgICAgQGlmIChzaWduSW5IcmVmKCk7IGFzIGhyZWYpIHtcbiAgICAgICAgICA8YSBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uUHJpbWFyeScsICdhdGxhcy1idXR0b24nKVwiIFtocmVmXT1cImhyZWZcIj57eyB0KCdzaWduSW4udGl0bGUnKSB9fTwvYT5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoZmxvdy5zdGF0ZSgpLmF0dGVtcHQpIHtcbiAgICAgIDxhdGxhcy1hdHRlbXB0LWZsb3dcbiAgICAgICAgW2F0dGVtcHRdPVwiZmxvdy5zdGF0ZSgpLmF0dGVtcHRcIlxuICAgICAgICBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICAgIFtzZXNzaW9uS2VwdF09XCJmbG93LnN0YXRlKCkuc2Vzc2lvbktlcHRcIlxuICAgICAgICB0aXRsZUtleT1cInNpZ25VcC50aXRsZVwiXG4gICAgICAgIFtlbWFpbFZlcmlmaWNhdGlvbl09XCJmbG93LnNldHRpbmdzKCk/LmFjY291bnQ/LmVtYWlsVmVyaWZpY2F0aW9uID8/ICdjb2RlJ1wiXG4gICAgICAgIChzdWJtaXRGbG93KT1cImZsb3cuc3VibWl0KCRldmVudClcIlxuICAgICAgICAocmVzZW5kKT1cImZsb3cucmVzZW5kU2lnblVwKClcIlxuICAgICAgICBbbWF0Y2hDb2RlXT1cImZsb3cuc3RhdGUoKS5tYXRjaENvZGUgPz8gbnVsbFwiXG4gICAgICAgIFtvZmZlckVtYWlsU2Vjb25kRmFjdG9yXT1cImZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudD8uZW1haWxTZWNvbmRGYWN0b3IgPT09IHRydWVcIlxuICAgICAgICBbZW1haWxlZFNlY29uZEZhY3Rvcl09XCJmbG93LmVtYWlsU2Vjb25kRmFjdG9yKClcIlxuICAgICAgICBbb2ZmZXJTbXNTZWNvbmRGYWN0b3JdPVwiZmxvdy5zZXR0aW5ncygpICE9PSBudWxsICYmIGZsb3cubWZhQ2hvaWNlcygpLnNtc1wiXG4gICAgICAgIFt0ZXh0ZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5zbXNTZWNvbmRGYWN0b3IoKVwiXG4gICAgICAgIFtlbnJvbGxtZW50XT1cImZsb3cuZW5yb2xsbWVudFwiXG4gICAgICAgIFtlbnJvbGxtZW50U3RhdGVdPVwiZmxvdy5lbnJvbGxtZW50U3RhdGUoKVwiXG4gICAgICAgIChlbWFpbFNlY29uZEZhY3Rvcik9XCJmbG93LnNlbmRFbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgICAgKHNtc1NlY29uZEZhY3Rvcik9XCJmbG93LnNlbmRTbXNTZWNvbmRGYWN0b3IoKVwiXG4gICAgICAgIChwb2xpY3lEZWNsaW5lZCk9XCJmbG93LmRlY2xpbmVQb2xpY3koJGV2ZW50KVwiXG4gICAgICA+PC9hdGxhcy1hdHRlbXB0LWZsb3c+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8YXRsYXMtc2lnbi11cC1mb3JtXG4gICAgICAgIFtzZXR0aW5nc109XCJmbG93LnNldHRpbmdzKClcIlxuICAgICAgICBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICAgIFtjYXB0Y2hhXT1cImZsb3cuc2lnblVwQ2FwdGNoYURyYXduKCkgPyBmbG93LnNpZ25VcENhcHRjaGEgOiBudWxsXCJcbiAgICAgICAgW3BvbGljaWVzXT1cImZsb3cucG9saWNpZXNcIlxuICAgICAgICBbcGFzc2tleV09XCJwYXNza2V5Rm9ybSgpXCJcbiAgICAgICAgW3N3aXRjaGFibGVdPVwiY2FuUGFzc2tleSgpXCJcbiAgICAgICAgKHN3aXRjaE1vZGUpPVwidG9nZ2xlTW9kZSgpXCJcbiAgICAgICAgKHN1Ym1pdFNpZ25VcCk9XCJcbiAgICAgICAgICBwYXNza2V5Rm9ybSgpID8gZmxvdy5jcmVhdGVXaXRoUGFzc2tleSgkZXZlbnQudmFsdWVzLCAkZXZlbnQuY29uc2VudCkgOiBmbG93LmNyZWF0ZSgkZXZlbnQudmFsdWVzLCAkZXZlbnQuY29uc2VudClcbiAgICAgICAgXCJcbiAgICAgID48L2F0bGFzLXNpZ24tdXAtZm9ybT5cbiAgICB9XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBTaWduVXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcblxuICAvKiogT3BlbmVkIGZyb20gYSBtYWlsZWQgbGluazogdGhhdCBwYWdlLCBub3QgdGhlIGZsb3cuIFJlYWQgYWZ0ZXIgdGhlIGZpcnN0IHJlbmRlciwgc28gaHlkcmF0aW9uIG1hdGNoZXMuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBlbWFpbExpbmsgPSBzaWduYWw8RW1haWxMaW5rIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHRoaXMuZW1haWxMaW5rLnNldChlbWFpbExpbmtGcm9tVXJsKHVuZGVmaW5lZCwgJ3NpZ25fdXAnKSkpO1xuICB9XG5cbiAgLyoqIFdoZXJlIHRvIHNlbmQgdGhlIHVzZXIgb25jZSB0aGUgZmxvdyBjb21wbGV0ZXMuIFJlc2VydmVkIGZvciBob3N0IHJvdXRpbmcuICovXG4gIEBJbnB1dCgpIGFmdGVyVXJsPzogc3RyaW5nO1xuXG4gIC8qKiBXaGVyZSB0aGUgZXhpc3RpbmctYWNjb3VudCBub3RpY2UncyBcIkZvcmdvdCBwYXNzd29yZD9cIiBnb2VzLiBEZWZhdWx0OiB0aGUgaG9zdGVkIHNpZ24taW4gcGFnZTsgYG51bGxgIGhpZGVzIGl0LiAqL1xuICBASW5wdXQoKSByZXNldFBhc3N3b3JkVXJsPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKiogV2hlcmUgXCJTaWduIGluXCIgZ29lcyBvbmNlIGFuIGVtYWlsZWQgbGluayBjb25maXJtZWQgdGhlIGFkZHJlc3MgYW5kIG1hZGUgbm8gc2Vzc2lvbiBoZXJlLiBEZWZhdWx0OiB0aGUgaG9zdGVkIHNpZ24taW4gcGFnZTsgYG51bGxgIGhpZGVzIGl0LiAqL1xuICBASW5wdXQoKSBzaWduSW5Vcmw/OiBzdHJpbmcgfCBudWxsO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBmbG93ID0gbmV3IEF0bGFzRmxvd0NvbnRyb2xsZXIoXG4gICAgdGhpcy5hdGxhcy5jcmVhdGVGYXBpQ2xpZW50KCksXG4gICAgKCkgPT4gdGhpcy5hdGxhcy5yZWxvYWQoKSxcbiAgICB0aGlzLmF0bGFzLnBlbmRpbmdBdHRlbXB0LFxuICAgIChrZXkpID0+IHRyYW5zbGF0ZSh0aGlzLmF0bGFzLmxvY2FsaXphdGlvbiwga2V5KSxcbiAgICB0cnVlLFxuICApO1xuXG4gIC8qKiBQYXNzd29yZCBvciBwYXNza2V5LW9ubHkgc2lnbi11cCAodGhlIGxhdHRlciB3aGVuIHRoZSBpbnN0YW5jZSBvZmZlcnMgaXQpLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kZSA9IHNpZ25hbDwncGFzc3dvcmQnIHwgJ3Bhc3NrZXknPigncGFzc3dvcmQnKTtcblxuICBwcm90ZWN0ZWQgY2FuUGFzc2tleSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudC5wYXNza2V5U2lnblVwICYmIHBhc3NrZXlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFzc2tleUZvcm0oKTogeyBlbWFpbDogJ29mZicgfCAnb3B0aW9uYWwnIHwgJ3JlcXVpcmVkJyB9IHwgbnVsbCB7XG4gICAgY29uc3Qgb2ZmZXIgPSB0aGlzLmZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudC5wYXNza2V5U2lnblVwID8/IG51bGw7XG4gICAgcmV0dXJuIHRoaXMubW9kZSgpID09PSAncGFzc2tleScgJiYgb2ZmZXIgJiYgdGhpcy5jYW5QYXNza2V5KCkgPyB7IGVtYWlsOiBvZmZlci5lbWFpbCB9IDogbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuZmxvdy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGVycm9yczogW10gfSkpO1xuICAgIHRoaXMubW9kZS5zZXQodGhpcy5wYXNza2V5Rm9ybSgpID8gJ3Bhc3N3b3JkJyA6ICdwYXNza2V5Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRIcmVmKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBleGlzdGluZ0FjY291bnRSZXNldFVybCh7IHVybDogdGhpcy5yZXNldFBhc3N3b3JkVXJsLCBmcm9udGVuZEFwaTogdGhpcy5hdGxhcy5mcm9udGVuZEFwaSwgcmVkaXJlY3RVcmw6IHRoaXMuYWZ0ZXJVcmwgfSk7XG4gIH1cblxuICAvKiogQSBsaW5rIGNvbmZpcm1lZCB0aGUgYWRkcmVzcyBhbmQgbWFkZSBubyBzZXNzaW9uIGhlcmUuIFNheXMgdGhlIHNhbWUgZm9yIGFueSBhZGRyZXNzLiAqL1xuICBwcm90ZWN0ZWQgZW1haWxDb25maXJtZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNpZ25VcFByb3ZlZEJ5TGluayh0aGlzLmZsb3cuc3RhdGUoKS5hdHRlbXB0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaWduSW5IcmVmKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBzaWduSW5BZnRlclByb29mVXJsKHsgdXJsOiB0aGlzLnNpZ25JblVybCwgZnJvbnRlbmRBcGk6IHRoaXMuYXRsYXMuZnJvbnRlbmRBcGksIHJlZGlyZWN0VXJsOiB0aGlzLmFmdGVyVXJsIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF3YWl0aW5nUGFzc2tleSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXdhaXRpbmdQYXNza2V5KHRoaXMuZmxvdy5zdGF0ZSgpLmF0dGVtcHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0cmFuc2xhdGUodGhpcy5hdGxhcy5sb2NhbGl6YXRpb24sIGtleSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xzKGtleTogRWxlbWVudEtleSwgYmFzZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2xhc3NGb3Ioa2V5LCB0aGlzLmF0bGFzLmFwcGVhcmFuY2UsIGJhc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVycm9yVGV4dChlcnJvcjogRmllbGRFcnJvcik6IHN0cmluZyB7XG4gICAgY29uc3QgbGF5ZXIgPSAodGhpcy5hdGxhcyBhcyB7IGVycm9yTG9jYWxpemF0aW9uPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9KS5lcnJvckxvY2FsaXphdGlvbjtcbiAgICByZXR1cm4gbG9jYWxpemVkRXJyb3JNZXNzYWdlKGVycm9yLCBsYXllciA/PyB0aGlzLmF0bGFzLmxvY2FsaXphdGlvbiwgdGhpcy5hdGxhcy5sb2NhbGl6YXRpb24pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gwqc1IHRoZSBpbnN0YW5jZSdzIHNpZ24tdXAgZmllbGRzLCBjb25zZW50IHBvbGljeSBhbmQgY2FwdGNoYSBzZXR0aW5ncy5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZvaWQgdGhpcy5mbG93LmxvYWRTZXR0aW5ncygpO1xuICAgICAgdm9pZCB0aGlzLmZsb3cubG9hZFBvbGljaWVzKHRoaXMuYXRsYXMubG9jYWxlID8/IHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mbG93LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|