@pega/angular-sdk-components 0.23.1 → 0.23.2

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.
Files changed (48) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +2 -23
  3. package/SECURITY.md +10 -0
  4. package/esm2022/lib/_components/designSystemExtension/alert/alert.component.mjs +3 -3
  5. package/esm2022/lib/_components/designSystemExtension/banner/banner.component.mjs +3 -3
  6. package/esm2022/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.mjs +3 -3
  7. package/esm2022/lib/_components/designSystemExtension/material-details/material-details.component.mjs +3 -3
  8. package/esm2022/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.mjs +3 -3
  9. package/esm2022/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.mjs +3 -3
  10. package/esm2022/lib/_components/designSystemExtension/material-utility/material-utility.component.mjs +2 -2
  11. package/esm2022/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.mjs +3 -3
  12. package/esm2022/lib/_components/designSystemExtension/operator/operator.component.mjs +3 -3
  13. package/esm2022/lib/_components/designSystemExtension/pulse/pulse.component.mjs +3 -3
  14. package/esm2022/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.mjs +3 -3
  15. package/esm2022/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.mjs +3 -3
  16. package/esm2022/lib/_components/field/cancel-alert/cancel-alert.component.mjs +3 -3
  17. package/esm2022/lib/_components/field/date-time/date-time.component.mjs +3 -1
  18. package/esm2022/lib/_components/field/dropdown/dropdown.component.mjs +2 -2
  19. package/esm2022/lib/_components/field/semantic-link/semantic-link.component.mjs +3 -3
  20. package/esm2022/lib/_components/field/text/text.component.mjs +3 -3
  21. package/esm2022/lib/_components/field/user-reference/user-reference.component.mjs +3 -3
  22. package/esm2022/lib/_components/infra/Containers/flow-container/flow-container.component.mjs +3 -3
  23. package/esm2022/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.mjs +3 -3
  24. package/esm2022/lib/_components/infra/Containers/view-container/view-container.component.mjs +3 -3
  25. package/esm2022/lib/_components/infra/assignment-card/assignment-card.component.mjs +3 -3
  26. package/esm2022/lib/_components/infra/multi-step/multi-step.component.mjs +3 -3
  27. package/esm2022/lib/_components/infra/navbar/navbar.component.mjs +3 -3
  28. package/esm2022/lib/_components/infra/root-container/root-container.component.mjs +3 -3
  29. package/esm2022/lib/_components/infra/stages/stages.component.mjs +3 -3
  30. package/esm2022/lib/_components/template/app-shell/app-shell.component.mjs +3 -3
  31. package/esm2022/lib/_components/template/case-summary/case-summary.component.mjs +3 -3
  32. package/esm2022/lib/_components/template/case-view/case-view.component.mjs +3 -3
  33. package/esm2022/lib/_components/template/field-group-list/field-group-list.component.mjs +3 -3
  34. package/esm2022/lib/_components/template/list-view/list-view.component.mjs +3 -3
  35. package/esm2022/lib/_components/template/one-column-tab/one-column-tab.component.mjs +3 -3
  36. package/esm2022/lib/_components/template/simple-table-manual/simple-table-manual.component.mjs +3 -3
  37. package/esm2022/lib/_components/template/wss-nav-bar/wss-nav-bar.component.mjs +3 -3
  38. package/esm2022/lib/_components/widget/app-announcement/app-announcement.component.mjs +3 -3
  39. package/esm2022/lib/_components/widget/attachment/attachment.component.mjs +3 -3
  40. package/esm2022/lib/_components/widget/feed-container/feed-container.component.mjs +3 -3
  41. package/esm2022/lib/_components/widget/file-utility/file-utility.component.mjs +11 -4
  42. package/esm2022/lib/_components/widget/list-utility/list-utility.component.mjs +3 -3
  43. package/esm2022/lib/_components/widget/todo/todo.component.mjs +3 -3
  44. package/fesm2022/pega-angular-sdk-components.mjs +87 -78
  45. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  46. package/lib/_components/field/date-time/date-time.component.d.ts +1 -1
  47. package/package.json +4 -7
  48. package/_shared/styles.scss +0 -28
@@ -514,12 +514,12 @@ export class FeedContainerComponent {
514
514
  this.pulseComment[messageID] = event.target.value;
515
515
  }
516
516
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FeedContainerComponent, deps: [{ token: i1.AngularPConnectService }, { token: i0.ChangeDetectorRef }, { token: i2.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
517
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FeedContainerComponent, isStandalone: true, selector: "app-feed-container", inputs: { pConn$: "pConn$" }, providers: [Utils], ngImport: i0, template: "<div>\n <div style=\"text-align: left\">\n <h3>Pulse</h3>\n\n <div class=\"psdk-pulse-divider\"></div>\n\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea matInput rows=\"5\" id=\"pulseMessage\" placeholder=\"Start a conversation\" type=\"text\" (change)=\"messageChange($event)\"></textarea>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-grid-list cols=\"2\" rowHeight=\"6.25rem\">\n <mat-grid-tile> </mat-grid-tile>\n <mat-grid-tile>\n <button mat-raised-button color=\"primary\" (click)=\"postClick()\">Post</button>\n </mat-grid-tile>\n</mat-grid-list>\n\n<div *ngFor=\"let pulseMessage of pulseMessages$; let odd = odd\" style=\"text-align: left\" [style.background-color]=\"odd ? 'white' : '#eeeeee'\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ pulseMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-message-group\">\n <div class=\"psdk-pulse-message-by\">{{ pulseMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-message-time\">{{ pulseMessage.displayPostedTime }}</div>\n </div>\n </div>\n <div class=\"psdk-pulse-message-text\">{{ pulseMessage.message }}</div>\n <div class=\"psdk-pulse-message-actions\">\n <div class=\"psdk-pulse-message-action-group\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n <label class=\"psdk-pulse-message-like-label\"\n >Comment <span *ngIf=\"pulseMessage?.replies.length > 0\"> | {{ pulseMessage.replies.length }}</span></label\n >\n </button>\n </div>\n <div class=\"psdk-pulse-message-action-like\">\n <div *ngIf=\"pulseMessage?.likeCount; else notLiked\">\n <button *ngIf=\"pulseMessage?.likedByMe == 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, true, 'top')\">\n <!-- <mat-icon class=\"psdk-icon-liked-by-me\" svgIcon=\"thumb-up\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n <button *ngIf=\"pulseMessage?.likedByMe != 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n </div>\n <ng-template #notLiked>\n <button mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like</label>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"pulseMessage?.replies\" class=\"psdk-pulse-reply\">\n <div *ngFor=\"let replyMessage of pulseMessage.replies\" class=\"psdk-pulse-reply-align\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-reply-group\">\n <div class=\"psdk-avatar\">{{ replyMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-reply-by\">{{ replyMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-reply-message\">{{ replyMessage.message }}</div>\n </div>\n <div class=\"psdk-pulse-reply-actions\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\" class=\"psdk-pulse-reply-comment\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n </button>\n <div *ngIf=\"replyMessage?.likeCount; else replyNotLiked\">\n <button\n *ngIf=\"replyMessage?.likedByMe === 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, true, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n </button>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n <label class=\"psdk-pulse-reply-like-label\">Like | {{ replyMessage.likeCount }}</label>\n </div>\n <ng-template #replyNotLiked>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n </ng-template>\n\n <div class=\"psdk-pulse-reply-time\">{{ replyMessage.displayPostedTime }}</div>\n </div>\n <br />\n </div>\n\n <div *ngIf=\"showReplyComment$[pulseMessage.ID] == true\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-comment-group\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea\n matInput\n rows=\"5\"\n id=\"pulseMessage\"\n placeholder=\"Add a comment\"\n type=\"text\"\n (change)=\"newCommentChange($event, pulseMessage.ID)\"\n ></textarea>\n </mat-form-field>\n <button mat-button (click)=\"postCommentClick(pulseMessage.ID)\" class=\"psdk-pulse-comment-post\">\n <img class=\"psdk-send-svg-icon\" src=\"{{ svgSend$ }}\" />\n </button>\n </div>\n </div>\n </div>\n <br />\n</div>\n", styles: [".psdk-pulse-divider{border-bottom:.0625rem solid lightgrey}.psdk-full-width{width:100%;padding-left:.625rem}.psdk-icon{padding:0rem .125rem;min-width:unset;display:inline-block}.psdk-icon-liked-by-me{padding:0rem .125rem;min-width:unset;display:inline-block;color:#673ab7}.psdk-send-svg-icon{width:1.4rem}.psdk-comment-svg-icon,.psdk-like-svg-icon{width:1.4rem;padding:0rem .3215rem}.psdk-liked-by-me-svg-icon{width:1.4rem;padding:0rem .3215rem;filter:invert(23%) sepia(23%) saturate(6785%) hue-rotate(250deg) brightness(93%) contrast(88%)}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:#673ab7;color:#fff;font-weight:700;font-size:1.25rem}.psdk-avatar-big{margin:0rem;padding:0rem;min-width:3.125rem;min-height:3.125rem;max-width:3.125rem;max-height:3.125rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:#673ab7;color:#fff;font-weight:700;font-size:1.5625rem}.psdk-pulse{display:inline-flex;width:100%;padding-bottom:.625rem}.psdk-pulse-message-group{display:flex;flex-direction:column;padding-left:.625rem}.psdk-pulse-message-by{margin-bottom:0rem;font-weight:700;font-size:.9375rem}.psdk-pulse-message-time{color:#aaa}.psdk-pulse-message-text{white-space:pre-line}.psdk-pulse-message-actions{display:flex;flex-direction:row;padding-top:1.25rem}.psdk-pulse-message-action-group,.psdk-pulse-message-action-like{flex-basis:15em}.psdk-pulse-message-like-label{vertical-align:middle}.psdk-pulse-reply{padding-left:1.25rem}.psdk-pulse-reply-align{text-align:left}.psdk-pulse-reply-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-reply-by{padding:0rem .625rem;font-weight:700;font-size:.9375rem}.psdk-pulse-reply-message{background-color:#ddd;border-radius:.625rem;padding:0rem 1.25rem;white-space:pre-line}.psdk-pulse-reply-actions{display:flex;flex-direction:row;align-items:center;padding-left:3.125rem}.psdk-pulse-reply-comment,.psdk-pulse-reply-like{padding:0rem;min-width:1.875rem}.psdk-pulse-reply-like-label{vertical-align:middle;padding-right:.3125rem}.psdk-pulse-reply-time{color:#aaa;padding-left:.625rem}.psdk-pulse-comment-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-comment-post{padding:0rem;min-width:1.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatGridListModule }, { kind: "component", type: i6.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] }); }
517
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FeedContainerComponent, isStandalone: true, selector: "app-feed-container", inputs: { pConn$: "pConn$" }, providers: [Utils], ngImport: i0, template: "<div>\n <div style=\"text-align: left\">\n <h3>Pulse</h3>\n\n <div class=\"psdk-pulse-divider\"></div>\n\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea matInput rows=\"5\" id=\"pulseMessage\" placeholder=\"Start a conversation\" type=\"text\" (change)=\"messageChange($event)\"></textarea>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-grid-list cols=\"2\" rowHeight=\"6.25rem\">\n <mat-grid-tile> </mat-grid-tile>\n <mat-grid-tile>\n <button mat-raised-button color=\"primary\" (click)=\"postClick()\">Post</button>\n </mat-grid-tile>\n</mat-grid-list>\n\n<div *ngFor=\"let pulseMessage of pulseMessages$; let odd = odd\" style=\"text-align: left\" [style.background-color]=\"odd ? 'white' : '#eeeeee'\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ pulseMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-message-group\">\n <div class=\"psdk-pulse-message-by\">{{ pulseMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-message-time\">{{ pulseMessage.displayPostedTime }}</div>\n </div>\n </div>\n <div class=\"psdk-pulse-message-text\">{{ pulseMessage.message }}</div>\n <div class=\"psdk-pulse-message-actions\">\n <div class=\"psdk-pulse-message-action-group\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n <label class=\"psdk-pulse-message-like-label\"\n >Comment <span *ngIf=\"pulseMessage?.replies.length > 0\"> | {{ pulseMessage.replies.length }}</span></label\n >\n </button>\n </div>\n <div class=\"psdk-pulse-message-action-like\">\n <div *ngIf=\"pulseMessage?.likeCount; else notLiked\">\n <button *ngIf=\"pulseMessage?.likedByMe == 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, true, 'top')\">\n <!-- <mat-icon class=\"psdk-icon-liked-by-me\" svgIcon=\"thumb-up\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n <button *ngIf=\"pulseMessage?.likedByMe != 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n </div>\n <ng-template #notLiked>\n <button mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like</label>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"pulseMessage?.replies\" class=\"psdk-pulse-reply\">\n <div *ngFor=\"let replyMessage of pulseMessage.replies\" class=\"psdk-pulse-reply-align\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-reply-group\">\n <div class=\"psdk-avatar\">{{ replyMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-reply-by\">{{ replyMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-reply-message\">{{ replyMessage.message }}</div>\n </div>\n <div class=\"psdk-pulse-reply-actions\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\" class=\"psdk-pulse-reply-comment\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n </button>\n <div *ngIf=\"replyMessage?.likeCount; else replyNotLiked\">\n <button\n *ngIf=\"replyMessage?.likedByMe === 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, true, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n </button>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n <label class=\"psdk-pulse-reply-like-label\">Like | {{ replyMessage.likeCount }}</label>\n </div>\n <ng-template #replyNotLiked>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n </ng-template>\n\n <div class=\"psdk-pulse-reply-time\">{{ replyMessage.displayPostedTime }}</div>\n </div>\n <br />\n </div>\n\n <div *ngIf=\"showReplyComment$[pulseMessage.ID] == true\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-comment-group\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea\n matInput\n rows=\"5\"\n id=\"pulseMessage\"\n placeholder=\"Add a comment\"\n type=\"text\"\n (change)=\"newCommentChange($event, pulseMessage.ID)\"\n ></textarea>\n </mat-form-field>\n <button mat-button (click)=\"postCommentClick(pulseMessage.ID)\" class=\"psdk-pulse-comment-post\">\n <img class=\"psdk-send-svg-icon\" src=\"{{ svgSend$ }}\" />\n </button>\n </div>\n </div>\n </div>\n <br />\n</div>\n", styles: [".psdk-pulse-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-full-width{width:100%;padding-left:.625rem}.psdk-icon{padding:0rem .125rem;min-width:unset;display:inline-block}.psdk-icon-liked-by-me{padding:0rem .125rem;min-width:unset;display:inline-block;color:var(--app-primary-color)}.psdk-send-svg-icon{width:1.4rem}.psdk-comment-svg-icon,.psdk-like-svg-icon{width:1.4rem;padding:0rem .3215rem}.psdk-liked-by-me-svg-icon{width:1.4rem;padding:0rem .3215rem;filter:var(--app-primary-color-filter)}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.25rem}.psdk-avatar-big{margin:0rem;padding:0rem;min-width:3.125rem;min-height:3.125rem;max-width:3.125rem;max-height:3.125rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.5625rem}.psdk-pulse{display:inline-flex;width:100%;padding-bottom:.625rem}.psdk-pulse-message-group{display:flex;flex-direction:column;padding-left:.625rem}.psdk-pulse-message-by{margin-bottom:0rem;font-weight:700;font-size:.9375rem}.psdk-pulse-message-time{color:var(--app-pulse-message-color)}.psdk-pulse-message-text{white-space:pre-line}.psdk-pulse-message-actions{display:flex;flex-direction:row;padding-top:1.25rem}.psdk-pulse-message-action-group,.psdk-pulse-message-action-like{flex-basis:15em}.psdk-pulse-message-like-label{vertical-align:middle}.psdk-pulse-reply{padding-left:1.25rem}.psdk-pulse-reply-align{text-align:left}.psdk-pulse-reply-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-reply-by{padding:0rem .625rem;font-weight:700;font-size:.9375rem}.psdk-pulse-reply-message{background-color:var(--app-pulse-message-background-color);border-radius:.625rem;padding:0rem 1.25rem;white-space:pre-line}.psdk-pulse-reply-actions{display:flex;flex-direction:row;align-items:center;padding-left:3.125rem}.psdk-pulse-reply-comment,.psdk-pulse-reply-like{padding:0rem;min-width:1.875rem}.psdk-pulse-reply-like-label{vertical-align:middle;padding-right:.3125rem}.psdk-pulse-reply-time{color:var(--app-pulse-message-color);padding-left:.625rem}.psdk-pulse-comment-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-comment-post{padding:0rem;min-width:1.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatGridListModule }, { kind: "component", type: i6.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] }); }
518
518
  }
519
519
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FeedContainerComponent, decorators: [{
520
520
  type: Component,
521
- args: [{ selector: 'app-feed-container', providers: [Utils], standalone: true, imports: [CommonModule, MatFormFieldModule, MatInputModule, MatGridListModule, MatButtonModule], template: "<div>\n <div style=\"text-align: left\">\n <h3>Pulse</h3>\n\n <div class=\"psdk-pulse-divider\"></div>\n\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea matInput rows=\"5\" id=\"pulseMessage\" placeholder=\"Start a conversation\" type=\"text\" (change)=\"messageChange($event)\"></textarea>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-grid-list cols=\"2\" rowHeight=\"6.25rem\">\n <mat-grid-tile> </mat-grid-tile>\n <mat-grid-tile>\n <button mat-raised-button color=\"primary\" (click)=\"postClick()\">Post</button>\n </mat-grid-tile>\n</mat-grid-list>\n\n<div *ngFor=\"let pulseMessage of pulseMessages$; let odd = odd\" style=\"text-align: left\" [style.background-color]=\"odd ? 'white' : '#eeeeee'\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ pulseMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-message-group\">\n <div class=\"psdk-pulse-message-by\">{{ pulseMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-message-time\">{{ pulseMessage.displayPostedTime }}</div>\n </div>\n </div>\n <div class=\"psdk-pulse-message-text\">{{ pulseMessage.message }}</div>\n <div class=\"psdk-pulse-message-actions\">\n <div class=\"psdk-pulse-message-action-group\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n <label class=\"psdk-pulse-message-like-label\"\n >Comment <span *ngIf=\"pulseMessage?.replies.length > 0\"> | {{ pulseMessage.replies.length }}</span></label\n >\n </button>\n </div>\n <div class=\"psdk-pulse-message-action-like\">\n <div *ngIf=\"pulseMessage?.likeCount; else notLiked\">\n <button *ngIf=\"pulseMessage?.likedByMe == 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, true, 'top')\">\n <!-- <mat-icon class=\"psdk-icon-liked-by-me\" svgIcon=\"thumb-up\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n <button *ngIf=\"pulseMessage?.likedByMe != 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n </div>\n <ng-template #notLiked>\n <button mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like</label>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"pulseMessage?.replies\" class=\"psdk-pulse-reply\">\n <div *ngFor=\"let replyMessage of pulseMessage.replies\" class=\"psdk-pulse-reply-align\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-reply-group\">\n <div class=\"psdk-avatar\">{{ replyMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-reply-by\">{{ replyMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-reply-message\">{{ replyMessage.message }}</div>\n </div>\n <div class=\"psdk-pulse-reply-actions\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\" class=\"psdk-pulse-reply-comment\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n </button>\n <div *ngIf=\"replyMessage?.likeCount; else replyNotLiked\">\n <button\n *ngIf=\"replyMessage?.likedByMe === 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, true, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n </button>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n <label class=\"psdk-pulse-reply-like-label\">Like | {{ replyMessage.likeCount }}</label>\n </div>\n <ng-template #replyNotLiked>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n </ng-template>\n\n <div class=\"psdk-pulse-reply-time\">{{ replyMessage.displayPostedTime }}</div>\n </div>\n <br />\n </div>\n\n <div *ngIf=\"showReplyComment$[pulseMessage.ID] == true\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-comment-group\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea\n matInput\n rows=\"5\"\n id=\"pulseMessage\"\n placeholder=\"Add a comment\"\n type=\"text\"\n (change)=\"newCommentChange($event, pulseMessage.ID)\"\n ></textarea>\n </mat-form-field>\n <button mat-button (click)=\"postCommentClick(pulseMessage.ID)\" class=\"psdk-pulse-comment-post\">\n <img class=\"psdk-send-svg-icon\" src=\"{{ svgSend$ }}\" />\n </button>\n </div>\n </div>\n </div>\n <br />\n</div>\n", styles: [".psdk-pulse-divider{border-bottom:.0625rem solid lightgrey}.psdk-full-width{width:100%;padding-left:.625rem}.psdk-icon{padding:0rem .125rem;min-width:unset;display:inline-block}.psdk-icon-liked-by-me{padding:0rem .125rem;min-width:unset;display:inline-block;color:#673ab7}.psdk-send-svg-icon{width:1.4rem}.psdk-comment-svg-icon,.psdk-like-svg-icon{width:1.4rem;padding:0rem .3215rem}.psdk-liked-by-me-svg-icon{width:1.4rem;padding:0rem .3215rem;filter:invert(23%) sepia(23%) saturate(6785%) hue-rotate(250deg) brightness(93%) contrast(88%)}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:#673ab7;color:#fff;font-weight:700;font-size:1.25rem}.psdk-avatar-big{margin:0rem;padding:0rem;min-width:3.125rem;min-height:3.125rem;max-width:3.125rem;max-height:3.125rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:#673ab7;color:#fff;font-weight:700;font-size:1.5625rem}.psdk-pulse{display:inline-flex;width:100%;padding-bottom:.625rem}.psdk-pulse-message-group{display:flex;flex-direction:column;padding-left:.625rem}.psdk-pulse-message-by{margin-bottom:0rem;font-weight:700;font-size:.9375rem}.psdk-pulse-message-time{color:#aaa}.psdk-pulse-message-text{white-space:pre-line}.psdk-pulse-message-actions{display:flex;flex-direction:row;padding-top:1.25rem}.psdk-pulse-message-action-group,.psdk-pulse-message-action-like{flex-basis:15em}.psdk-pulse-message-like-label{vertical-align:middle}.psdk-pulse-reply{padding-left:1.25rem}.psdk-pulse-reply-align{text-align:left}.psdk-pulse-reply-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-reply-by{padding:0rem .625rem;font-weight:700;font-size:.9375rem}.psdk-pulse-reply-message{background-color:#ddd;border-radius:.625rem;padding:0rem 1.25rem;white-space:pre-line}.psdk-pulse-reply-actions{display:flex;flex-direction:row;align-items:center;padding-left:3.125rem}.psdk-pulse-reply-comment,.psdk-pulse-reply-like{padding:0rem;min-width:1.875rem}.psdk-pulse-reply-like-label{vertical-align:middle;padding-right:.3125rem}.psdk-pulse-reply-time{color:#aaa;padding-left:.625rem}.psdk-pulse-comment-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-comment-post{padding:0rem;min-width:1.875rem}\n"] }]
521
+ args: [{ selector: 'app-feed-container', providers: [Utils], standalone: true, imports: [CommonModule, MatFormFieldModule, MatInputModule, MatGridListModule, MatButtonModule], template: "<div>\n <div style=\"text-align: left\">\n <h3>Pulse</h3>\n\n <div class=\"psdk-pulse-divider\"></div>\n\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea matInput rows=\"5\" id=\"pulseMessage\" placeholder=\"Start a conversation\" type=\"text\" (change)=\"messageChange($event)\"></textarea>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-grid-list cols=\"2\" rowHeight=\"6.25rem\">\n <mat-grid-tile> </mat-grid-tile>\n <mat-grid-tile>\n <button mat-raised-button color=\"primary\" (click)=\"postClick()\">Post</button>\n </mat-grid-tile>\n</mat-grid-list>\n\n<div *ngFor=\"let pulseMessage of pulseMessages$; let odd = odd\" style=\"text-align: left\" [style.background-color]=\"odd ? 'white' : '#eeeeee'\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ pulseMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-message-group\">\n <div class=\"psdk-pulse-message-by\">{{ pulseMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-message-time\">{{ pulseMessage.displayPostedTime }}</div>\n </div>\n </div>\n <div class=\"psdk-pulse-message-text\">{{ pulseMessage.message }}</div>\n <div class=\"psdk-pulse-message-actions\">\n <div class=\"psdk-pulse-message-action-group\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n <label class=\"psdk-pulse-message-like-label\"\n >Comment <span *ngIf=\"pulseMessage?.replies.length > 0\"> | {{ pulseMessage.replies.length }}</span></label\n >\n </button>\n </div>\n <div class=\"psdk-pulse-message-action-like\">\n <div *ngIf=\"pulseMessage?.likeCount; else notLiked\">\n <button *ngIf=\"pulseMessage?.likedByMe == 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, true, 'top')\">\n <!-- <mat-icon class=\"psdk-icon-liked-by-me\" svgIcon=\"thumb-up\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n <button *ngIf=\"pulseMessage?.likedByMe != 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n </div>\n <ng-template #notLiked>\n <button mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like</label>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"pulseMessage?.replies\" class=\"psdk-pulse-reply\">\n <div *ngFor=\"let replyMessage of pulseMessage.replies\" class=\"psdk-pulse-reply-align\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-reply-group\">\n <div class=\"psdk-avatar\">{{ replyMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-reply-by\">{{ replyMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-reply-message\">{{ replyMessage.message }}</div>\n </div>\n <div class=\"psdk-pulse-reply-actions\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\" class=\"psdk-pulse-reply-comment\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n </button>\n <div *ngIf=\"replyMessage?.likeCount; else replyNotLiked\">\n <button\n *ngIf=\"replyMessage?.likedByMe === 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, true, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n </button>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n <label class=\"psdk-pulse-reply-like-label\">Like | {{ replyMessage.likeCount }}</label>\n </div>\n <ng-template #replyNotLiked>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n </ng-template>\n\n <div class=\"psdk-pulse-reply-time\">{{ replyMessage.displayPostedTime }}</div>\n </div>\n <br />\n </div>\n\n <div *ngIf=\"showReplyComment$[pulseMessage.ID] == true\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-comment-group\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea\n matInput\n rows=\"5\"\n id=\"pulseMessage\"\n placeholder=\"Add a comment\"\n type=\"text\"\n (change)=\"newCommentChange($event, pulseMessage.ID)\"\n ></textarea>\n </mat-form-field>\n <button mat-button (click)=\"postCommentClick(pulseMessage.ID)\" class=\"psdk-pulse-comment-post\">\n <img class=\"psdk-send-svg-icon\" src=\"{{ svgSend$ }}\" />\n </button>\n </div>\n </div>\n </div>\n <br />\n</div>\n", styles: [".psdk-pulse-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-full-width{width:100%;padding-left:.625rem}.psdk-icon{padding:0rem .125rem;min-width:unset;display:inline-block}.psdk-icon-liked-by-me{padding:0rem .125rem;min-width:unset;display:inline-block;color:var(--app-primary-color)}.psdk-send-svg-icon{width:1.4rem}.psdk-comment-svg-icon,.psdk-like-svg-icon{width:1.4rem;padding:0rem .3215rem}.psdk-liked-by-me-svg-icon{width:1.4rem;padding:0rem .3215rem;filter:var(--app-primary-color-filter)}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.25rem}.psdk-avatar-big{margin:0rem;padding:0rem;min-width:3.125rem;min-height:3.125rem;max-width:3.125rem;max-height:3.125rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.5625rem}.psdk-pulse{display:inline-flex;width:100%;padding-bottom:.625rem}.psdk-pulse-message-group{display:flex;flex-direction:column;padding-left:.625rem}.psdk-pulse-message-by{margin-bottom:0rem;font-weight:700;font-size:.9375rem}.psdk-pulse-message-time{color:var(--app-pulse-message-color)}.psdk-pulse-message-text{white-space:pre-line}.psdk-pulse-message-actions{display:flex;flex-direction:row;padding-top:1.25rem}.psdk-pulse-message-action-group,.psdk-pulse-message-action-like{flex-basis:15em}.psdk-pulse-message-like-label{vertical-align:middle}.psdk-pulse-reply{padding-left:1.25rem}.psdk-pulse-reply-align{text-align:left}.psdk-pulse-reply-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-reply-by{padding:0rem .625rem;font-weight:700;font-size:.9375rem}.psdk-pulse-reply-message{background-color:var(--app-pulse-message-background-color);border-radius:.625rem;padding:0rem 1.25rem;white-space:pre-line}.psdk-pulse-reply-actions{display:flex;flex-direction:row;align-items:center;padding-left:3.125rem}.psdk-pulse-reply-comment,.psdk-pulse-reply-like{padding:0rem;min-width:1.875rem}.psdk-pulse-reply-like-label{vertical-align:middle;padding-right:.3125rem}.psdk-pulse-reply-time{color:var(--app-pulse-message-color);padding-left:.625rem}.psdk-pulse-comment-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-comment-post{padding:0rem;min-width:1.875rem}\n"] }]
522
522
  }], ctorParameters: function () { return [{ type: i1.AngularPConnectService }, { type: i0.ChangeDetectorRef }, { type: i2.Utils }]; }, propDecorators: { pConn$: [{
523
523
  type: Input
524
524
  }] } });
525
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL3dpZGdldC9mZWVkLWNvbnRhaW5lci9mZWVkLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvd2lkZ2V0L2ZlZWQtY29udGFpbmVyL2ZlZWQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7QUFZaEQsTUFBTSxPQUFPLHNCQUFzQjtJQXFDakMsWUFDVSxlQUF1QyxFQUN2QyxLQUF3QixFQUN4QixLQUFZO1FBRlosb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQU87UUFyQ3RCLDRCQUE0QjtRQUM1Qix3QkFBbUIsR0FBd0IsRUFBRSxDQUFDO1FBUzlDLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQVEvQixhQUFRLEdBQWtCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFcEMsaUJBQVksR0FBVyxFQUFFLENBQUM7SUFrQnZCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDckUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzQyw4RkFBOEY7UUFDOUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV4Ryw4Q0FBOEM7UUFDOUMsWUFBWTtRQUVaLFVBQVU7UUFDVixtQkFBbUI7UUFDbkIsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQiw0QkFBNEI7UUFDNUIsc0NBQXNDO1FBQ3RDLGtDQUFrQztRQUNsQyxrQ0FBa0M7UUFFbEMsc0VBQXNFO1FBQ3RFLHdFQUF3RTtRQUV4RSwrRkFBK0Y7UUFDL0Ysa0dBQWtHO1FBQ2xHLHVFQUF1RTtRQUN2RSw4RUFBOEU7UUFFOUUsaURBQWlEO1FBRWpELGtEQUFrRDtRQUVsRCw0REFBNEQ7UUFDNUQsdUNBQXVDO1FBQ3ZDLDRFQUE0RTtRQUU1RSx5REFBeUQ7UUFFekQsc0NBQXNDO1FBRXRDLHlHQUF5RztRQUV6RyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2hFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxHQUFHLFlBQVksQ0FBQztZQUN0QixTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQzFEO2FBQU07WUFDTCxLQUFLLEdBQUcsZ0JBQWdCLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQztZQUMzQixTQUFTLEdBQUcsWUFBWSxDQUFDO1NBQzFCO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDbEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUU3QixNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2hELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN6QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNuRCxJQUFJLFdBQVcsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtnQkFDdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7d0JBeUJRO2FBQ1Q7aUJBQU07Z0JBQ0wsdURBQXVEO2dCQUN2RCxLQUFLLEVBQUUsQ0FBQzthQUNUO1FBQ0gsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztVQXFIRTtRQUVGLGtGQUFrRjtRQUVsRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1VBMkVFO1FBRUYsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUU7WUFDMUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxhQUFhO1FBQ1gsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksUUFBUSxFQUFFO1lBQ1osOERBQThEO1lBQzlELFlBQVk7U0FDYjtRQUNELDBGQUEwRjtRQUMxRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JFLGtGQUFrRjtRQUVsRix3REFBd0Q7UUFDeEQsNEVBQTRFO1FBQzVFLGlDQUFpQztRQUNqQyxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ0wsbUZBQW1GO1lBQ25GLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBRXZELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ25CO1NBQ0Y7UUFFRCxtRkFBbUY7UUFDbkYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sVUFBVSxHQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFVLENBQUMsVUFBVSxDQUFDO1FBQ3BFLE1BQU0sUUFBUSxHQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFVLENBQUMsV0FBVyxDQUFDO1FBQ25FLHFGQUFxRjtRQUNyRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRWxFLG1GQUFtRjtRQUNuRixNQUFNLEtBQUssR0FBUSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRS9DLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUV2RSxzQ0FBc0M7WUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUUvRCxrQ0FBa0M7WUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRW5FLHFCQUFxQjtZQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hHO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFlO1FBQzVCLE1BQU0sVUFBVSxHQUFVLEVBQUUsQ0FBQztRQUU3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlCO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFFBQWU7UUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDdEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUV4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUUzQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUV0Riw0QkFBNEI7WUFDNUIsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO2dCQUN2QixPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3pEO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDeEQ7WUFFRCxPQUFPLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXBGLDRDQUE0QztZQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWpDLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ3pDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUV6RiwwREFBMEQ7Z0JBQzFELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7Z0JBRXRDLElBQUksVUFBVSxFQUFFO29CQUNkLEtBQUssQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDeEMsS0FBSyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDekU7YUFDRjtTQUNGLENBQUMsTUFBTTtRQUVSLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUV0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUUzQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUV0RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbEQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsT0FBTyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUMzQyxPQUFPLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzVFO2lCQUFNO2dCQUNMLE1BQU0sV0FBVyxHQUFHO29CQUNsQixVQUFVLEVBQUUsT0FBTyxDQUFDLFFBQVE7aUJBQzdCLENBQUM7Z0JBQ0YsZ0NBQWdDO2FBQ2pDO1lBRUQsNENBQTRDO1lBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFakMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDekMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBRXpGLDBEQUEwRDtnQkFDMUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFFdEMsSUFBSSxVQUFVLEVBQUU7b0JBQ2QsS0FBSyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO29CQUN4QyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN6RTthQUNGO1NBQ0YsQ0FBQyxNQUFNO0lBQ1YsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDUCw2QkFBNkI7UUFDN0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsRUFBRTtZQUMxRCx1QkFBdUI7WUFDdkIsZ0RBQWdEO1lBQ2hELHFDQUFxQztZQUNyQyxvREFBb0Q7WUFDcEQsS0FBSztZQUVMLFlBQVk7WUFDWiwwREFBMEQ7WUFDMUQsb0VBQW9FO1lBRXBFLCtDQUErQztZQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksRUFBQyxjQUFlLFdBQVcsQ0FBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUN0RztpQkFBTTtnQkFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7YUFDM0M7U0FDRjtRQUVELHVCQUF1QjtRQUN0QixRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBdUIsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQzFFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQWlCLEVBQUUsVUFBa0IsRUFBRSxVQUFtQixFQUFFLEtBQWE7UUFDakYsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBRXRCLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNuQixZQUFZLEdBQUc7Z0JBQ2IsWUFBWSxFQUFFLFVBQVU7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRTtnQkFDekMsT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLFNBQVM7YUFDVixDQUFDO1NBQ0g7YUFBTTtZQUNMLFlBQVksR0FBRztnQkFDYixZQUFZLEVBQUUsVUFBVTtnQkFDeEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFO2dCQUN6QyxPQUFPLEVBQUUsVUFBVTtnQkFDbkIsU0FBUzthQUNWLENBQUM7U0FDSDtRQUVELFlBQVk7UUFDWixJQUFJLEVBQUMsY0FBZSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFTO1FBQ3BCLCtEQUErRDtRQUMvRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUM7UUFFbkYsSUFBSSxZQUFZLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDaEQ7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUFTO1FBQ3hCLFlBQVk7UUFFWixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEUsdUJBQXVCO1lBQ3ZCLGdEQUFnRDtZQUNoRCwyQ0FBMkM7WUFDM0MsNkJBQTZCO1lBQzdCLGdCQUFnQjtZQUNoQixLQUFLO1lBRUwsWUFBWTtZQUNaLDBEQUEwRDtZQUMxRCxzRUFBc0U7WUFDdEUsd0JBQXdCO1lBQ3hCLDJCQUEyQjtZQUMzQixxR0FBcUc7WUFDckcsSUFBSSxFQUFDLGNBQWUsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRS9FLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQzsrR0FqbEJVLHNCQUFzQjttR0FBdEIsc0JBQXNCLCtGQUp0QixDQUFDLEtBQUssQ0FBQywwQkNqQnBCLG9yTUF5SUEsODRFRHRIWSxZQUFZLCtQQUFFLGtCQUFrQix5T0FBRSxjQUFjLDBXQUFFLGlCQUFpQixpVEFBRSxlQUFlOzs0RkFFbkYsc0JBQXNCO2tCQVJsQyxTQUFTOytCQUNFLG9CQUFvQixhQUduQixDQUFDLEtBQUssQ0FBQyxjQUNOLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxDQUFDO2lLQUd0RixNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRHcmlkTGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2dyaWQtbGlzdCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IEFuZ3VsYXJQQ29ubmVjdERhdGEsIEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fYnJpZGdlL2FuZ3VsYXItcGNvbm5lY3QnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9faGVscGVycy91dGlscyc7XG5cbmRlY2xhcmUgY29uc3Qgd2luZG93OiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1mZWVkLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWVkLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZlZWQtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1V0aWxzXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0R3JpZExpc3RNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgRmVlZENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcENvbm4kOiB0eXBlb2YgUENvbm5lY3Q7XG5cbiAgLy8gVXNlZCB3aXRoIEFuZ3VsYXJQQ29ubmVjdFxuICBhbmd1bGFyUENvbm5lY3REYXRhOiBBbmd1bGFyUENvbm5lY3REYXRhID0ge307XG5cbiAgdXNlck5hbWUkOiBzdHJpbmc7XG4gIGltYWdlS2V5JDogc3RyaW5nO1xuXG4gIGN1cnJlbnRVc2VySW5pdGlhbHMkOiBzdHJpbmc7XG4gIGN1cnJlbnRVc2VyTmFtZSQ6IHN0cmluZztcblxuICBwdWxzZU1lc3NhZ2VzJDogYW55W107XG4gIHNob3dSZXBseUNvbW1lbnQkOiBPYmplY3QgPSB7fTtcblxuICBzdmdDb21tZW50JDogc3RyaW5nO1xuICBzdmdMaWtlJDogc3RyaW5nO1xuICBzdmdMaWtlZEJ5TWUkOiBzdHJpbmc7XG4gIHN2Z1NlbmQkOiBzdHJpbmc7XG5cbiAgcHVsc2VDb252ZXJzYXRpb246IHN0cmluZztcbiAgdXNlckRhdGE6IE1hcDxhbnksIGFueT4gPSBuZXcgTWFwKCk7XG5cbiAgcHVsc2VDb21tZW50OiBPYmplY3QgPSB7fTtcblxuICAvLyBmdW5jdGlvbnNcbiAgYWN0aW9uc0FQSTogYW55O1xuICAvLyB1bnRpbCBGZWVkQVBJIG1vdmVkIGJhY2sgdG8gUENvcmUsIHdlIGFjY2VzcyB0aGUgbWV0aG9kcyBkaXJlY3RseSAoc2VlIG5nSW5pdClcbiAgZmVlZEFQSTogYW55O1xuXG4gIHB1bHNlRGF0YTogYW55O1xuXG4gIC8vIFRlbXBvcmFyeSB3YXkgdG8gdXNlIEZlZWRBcGkuLi5cbiAgZmV0Y2hNZXNzYWdlczogYW55O1xuICBsaWtlTWVzc2FnZTogYW55O1xuICBwb3N0TWVzc2FnZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYW5ndWxhclBDb25uZWN0OiBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdXRpbHM6IFV0aWxzXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJOYW1lJCA9IFBDb3JlLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9yTmFtZSgpO1xuICAgIHRoaXMuaW1hZ2VLZXkkID0gUENvcmUuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JJbWFnZUluc0tleSgpO1xuICAgIHRoaXMudXBkYXRlQ3VycmVudFVzZXJOYW1lKHRoaXMudXNlck5hbWUkKTtcblxuICAgIC8vIEZpcnN0IHRoaW5nIGluIGluaXRpYWxpemF0aW9uIGlzIHJlZ2lzdGVyaW5nIGFuZCBzdWJzY3JpYmluZyB0byB0aGUgQW5ndWxhclBDb25uZWN0IHNlcnZpY2VcbiAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5yZWdpc3RlckFuZFN1YnNjcmliZUNvbXBvbmVudCh0aGlzLCB0aGlzLm9uU3RhdGVDaGFuZ2UpO1xuXG4gICAgLy8gVGhlbiwgY29udGludWUgb24gd2l0aCBvdGhlciBpbml0aWFsaXphdGlvblxuICAgIC8vIGRlYnVnZ2VyO1xuXG4gICAgLy8gY29uc3Qge1xuICAgIC8vICAgZmV0Y2hNZXNzYWdlcyxcbiAgICAvLyAgIGxpa2VNZXNzYWdlLFxuICAgIC8vICAgcG9zdE1lc3NhZ2VcbiAgICAvLyB9ID0gRmVlZEFwaSh0aGlzLnBDb25uJCk7XG4gICAgLy8gdGhpcy5mZXRjaE1lc3NhZ2VzID0gZmV0Y2hNZXNzYWdlcztcbiAgICAvLyB0aGlzLmxpa2VNZXNzYWdlID0gbGlrZU1lc3NhZ2U7XG4gICAgLy8gdGhpcy5wb3N0TWVzc2FnZSA9IHBvc3RNZXNzYWdlO1xuXG4gICAgLy8gLy8gdGhpcy51c2VyTmFtZSQgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZShcInB4UmVxdWVzdG9yLnB4VXNlck5hbWVcIik7XG4gICAgLy8gLy8gdGhpcy5pbWFnZUtleSQgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZShcIk9wZXJhdG9ySUQucHlJbWFnZUluc0tleVwiKTtcblxuICAgIC8vIC8vdGhpcy51c2VyTmFtZSQgPSB0aGlzLnBDb25uJC5nZXREYXRhT2JqZWN0KClbXCJEX3B4RW52aXJvbm1lbnRJbmZvXCJdLnB4T3BlcmF0b3IucHlVc2VyTmFtZTtcbiAgICAvLyAvL3RoaXMuaW1hZ2VLZXkkID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpW1wiRF9weEVudmlyb25tZW50SW5mb1wiXS5weE9wZXJhdG9yLnB5SW1hZ2VJbnNLZXk7XG4gICAgLy8gdGhpcy51c2VyTmFtZSQgPSB0aGlzLnBDb25uJC5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvck5hbWUoKTtcbiAgICAvLyB0aGlzLmltYWdlS2V5JCA9IHRoaXMucENvbm4kLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9ySW1hZ2VJbnNLZXkoKTtcblxuICAgIC8vIHRoaXMuYWN0aW9uc0FQSSA9IHRoaXMucENvbm4kLmdldEFjdGlvbnNBcGkoKTtcblxuICAgIC8vIGxldCBvd25lciA9IHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkudmFsdWU7XG5cbiAgICAvLyAvLyB3aXRoIG5ldyBGZWVkQVBJOiBvd25lciBpcyB0aGUgcHJvcGVyIHZhbHVlIHRvIHBhc3MgaW5cbiAgICAvLyAvLyAgYW5kIG5vIGxvbmdlciB0YWtlcyAybmQgYXJndW1lbnRcbiAgICAvLyB0aGlzLi8qZmVlZEFQSS4qL2ZldGNoTWVzc2FnZXMob3duZXIgLyosIHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCkqLyk7XG5cbiAgICAvLyBjb25zdCBjb25maWdQcm9wczogYW55ID0gdGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKTtcblxuICAgIC8vIGNvbnN0IHsgbWVzc2FnZUlEcyB9ID0gY29uZmlnUHJvcHM7XG5cbiAgICAvLyBjb25zdCB7IGZldGNoTWVzc2FnZXMsIHBvc3RNZXNzYWdlLCBnZXRNZW50aW9uU3VnZ2VzdGlvbnMsIGdldFRhZ1N1Z2dlc3Rpb25zIH0gPSBGZWVkQXBpKHRoaXMucENvbm4kKTtcblxuICAgIGNvbnN0IGFwcE5hbWUgPSBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRBcHBsaWNhdGlvbk5hbWUoKTtcbiAgICBsZXQgdmFsdWUgPSAnJztcbiAgICBsZXQgZmVlZElEID0gJyc7XG4gICAgbGV0IGZlZWRDbGFzcyA9ICcnO1xuXG4gICAgaWYgKHRoaXMucENvbm4kLmdldENhc2VTdW1tYXJ5KCkuSUQpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5wQ29ubiQuZ2V0Q2FzZVN1bW1hcnkoKS5JRDtcbiAgICAgIGZlZWRJRCA9ICdweUNhc2VGZWVkJztcbiAgICAgIGZlZWRDbGFzcyA9IHRoaXMucENvbm4kLmdldENhc2VTdW1tYXJ5KCkuY29udGVudC5jbGFzc0lEO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGBEQVRBLVBPUlRBTCAkJHthcHBOYW1lfWA7XG4gICAgICBmZWVkSUQgPSAncHlEYXNoYm9hcmRGZWVkJztcbiAgICAgIGZlZWRDbGFzcyA9ICdAYmFzZWNsYXNzJztcbiAgICB9XG5cbiAgICBjb25zdCBvblVwbG9hZFByb2dyZXNzID0gKCkgPT4ge307XG4gICAgY29uc3QgZXJyb3JIYW5kbGVyID0gKCkgPT4ge307XG4gICAgY29uc3QgYXR0YWNobWVudHMgPSAoKSA9PiB7fTtcblxuICAgIGNvbnN0IHBvc3RDb21tZW50ID0gKHsgdmFsdWU6IG1lc3NhZ2UsIGNsZWFyIH0pID0+IHtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRJRHMgPSBbXTtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVdGlscyA9IFBDb3JlLmdldEF0dGFjaG1lbnRVdGlscygpO1xuICAgICAgaWYgKGF0dGFjaG1lbnRzICYmICEhYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgICAgIC8qIGF0dGFjaG1lbnRzO1xuICAgICAgICAgIC5maWx0ZXIoKGZpbGUpID0+ICFmaWxlLmVycm9yKVxuICAgICAgICAgIC5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhdHRhY2htZW50VXRpbHNcbiAgICAgICAgICAgICAgLnVwbG9hZEF0dGFjaG1lbnQoZmlsZSwgb25VcGxvYWRQcm9ncmVzcywgZXJyb3JIYW5kbGVyKVxuICAgICAgICAgICAgICAudGhlbigoZmlsZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiRmlsZVwiLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IFwiRmlsZVwiLFxuICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgIElEOiBmaWxlUmVzcG9uc2UuZGF0YS5JRFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudElEcy5wdXNoKGZpbGVDb25maWcpO1xuICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPT09IGF0dGFjaG1lbnRJRHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU1hcmtkb3duVG9Nc2cobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRJRHNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjbGVhcigpO1xuICAgICAgICAgICAgICAgICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gICAgICAgICAgfSk7ICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwb3N0TWVzc2FnZSh2YWx1ZSwgdHJhbnNmb3JtTWFya2Rvd25Ub01zZyhtZXNzYWdlKSk7XG4gICAgICAgIGNsZWFyKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qXG5cbiAgICBjb25zdCB7IGdldFBDb25uZWN0LCBtZXNzYWdlSURzIH0gPSBwcm9wcztcbiAgICBjb25zdCBbbWVudGlvblJlc3VsdHMsIHNldE1lbnRpb25SZXN1bHRzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbdGFnUmVzdWx0cywgc2V0VGFnUmVzdWx0c10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2F0dGFjaG1lbnRzLCBzZXRBdHRhY2htZW50c10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2ZlZWRGaWx0ZXJzLCBzZXRGZWVkRmlsdGVyc10gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGZldGNoTWVzc2FnZXMsXG4gICAgICBwb3N0TWVzc2FnZSxcbiAgICAgIGdldE1lbnRpb25TdWdnZXN0aW9ucyxcbiAgICAgIGdldFRhZ1N1Z2dlc3Rpb25zXG4gICAgfSA9IEZlZWRBcGkoZ2V0UENvbm5lY3QoKSk7XG4gICAgY29uc3QgYXBwTmFtZSA9IFBDb3JlLmdldEVudmlyb25tZW50SW5mbygpLmdldEFwcGxpY2F0aW9uTmFtZSgpO1xuICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgbGV0IGZlZWRJRCA9IFwiXCI7XG4gICAgbGV0IGZlZWRDbGFzcyA9IFwiXCI7XG4gICAgaWYgKGdldFBDb25uZWN0KCkuZ2V0Q2FzZVN1bW1hcnkoKS5JRCkge1xuICAgICAgdmFsdWUgPSBnZXRQQ29ubmVjdCgpLmdldENhc2VTdW1tYXJ5KCkuSUQ7XG4gICAgICBmZWVkSUQgPSBcInB5Q2FzZUZlZWRcIjtcbiAgICAgIGZlZWRDbGFzcyA9IGdldFBDb25uZWN0KCkuZ2V0Q2FzZVN1bW1hcnkoKS5jb250ZW50LmNsYXNzSUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gYERBVEEtUE9SVEFMICQke2FwcE5hbWV9YDtcbiAgICAgIGZlZWRJRCA9IFwicHlEYXNoYm9hcmRGZWVkXCI7XG4gICAgICBmZWVkQ2xhc3MgPSBcIkBiYXNlY2xhc3NcIjtcbiAgICB9XG4gICAgLy8gRm9yIGNhbmNlbGxpbmcgZmV0Y2hyZXF1ZXN0IGZvciBmaWxldHJzXG4gICAgY29uc3QgZmV0Y2hNZXNzYWdlc0NhbmNlbFRva2VuU291cmNlID0gdXNlUmVmKFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBmZXRjaE1lc3NhZ2VzKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZmVlZElELFxuICAgICAgICBmZWVkQ2xhc3MsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGZldGNoTWVzc2FnZXNDYW5jZWxUb2tlblNvdXJjZS5jdXJyZW50XG4gICAgICApLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBzZXRGZWVkRmlsdGVycyhyZXMpO1xuICAgICAgfSk7XG4gICAgICBQQ29yZS5nZXRBc3NldExvYWRlcigpLmdldExvYWRlcihcImNvbXBvbmVudC1sb2FkZXJcIikoW1wiQWN0aXZpdHlcIl0pO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IG9uVXBsb2FkUHJvZ3Jlc3MgPSB1c2VDYWxsYmFjaygoZmlsZSkgPT4ge1xuICAgICAgcmV0dXJuICh7IGxvYWRlZCwgdG90YWwgfSkgPT4ge1xuICAgICAgICBmaWxlLnByb2dyZXNzID0gTWF0aC5mbG9vcigobG9hZGVkIC8gdG90YWwpICogMTAwKTtcbiAgICAgICAgc2V0QXR0YWNobWVudHMoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudC5tYXAoKGN1cnJGaWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3VyckZpbGUubmFtZSA9PT0gZmlsZS5uYW1lID8gZmlsZSA6IGN1cnJGaWxlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgZXJyb3JIYW5kbGVyID0gdXNlQ2FsbGJhY2soKGlzRmV0Y2hDYW5jZWxlZCwgZmlsZSkgPT4ge1xuICAgICAgcmV0dXJuIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoIWlzRmV0Y2hDYW5jZWxlZChlcnJvcikpIHtcbiAgICAgICAgICBsZXQgbG9jYWxpemVkVmFsdWUgPSBcIlVwbG9hZCBmYWlsZWRcIjtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuZGF0YSAmJlxuICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvckRldGFpbHNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxvY2FsaXplZFZhbHVlID0gZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvckRldGFpbHNbMF0ubG9jYWxpemVkVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBmaWxlLnByb2dyZXNzO1xuICAgICAgICAgIHNldEF0dGFjaG1lbnRzKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudC5tYXAoKGN1cnJGaWxlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjdXJyRmlsZS5uYW1lID09PSBmaWxlLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyRmlsZS5tZXRhID0gbG9jYWxpemVkVmFsdWU7XG4gICAgICAgICAgICAgICAgY3VyckZpbGUuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBjdXJyRmlsZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVycm9yLmlzSGFuZGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IHBvc3RDb21tZW50ID0gKHsgdmFsdWU6IG1lc3NhZ2UsIGNsZWFyIH0pID0+IHtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRJRHMgPSBbXTtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVdGlscyA9IFBDb3JlLmdldEF0dGFjaG1lbnRVdGlscygpO1xuICAgICAgaWYgKGF0dGFjaG1lbnRzICYmICEhYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGF0dGFjaG1lbnRzXG4gICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gIWZpbGUuZXJyb3IpXG4gICAgICAgICAgLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnRVdGlsc1xuICAgICAgICAgICAgICAudXBsb2FkQXR0YWNobWVudChmaWxlLCBvblVwbG9hZFByb2dyZXNzLCBlcnJvckhhbmRsZXIpXG4gICAgICAgICAgICAgIC50aGVuKChmaWxlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJGaWxlXCIsXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogXCJGaWxlXCIsXG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgSUQ6IGZpbGVSZXNwb25zZS5kYXRhLklEXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50SURzLnB1c2goZmlsZUNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gYXR0YWNobWVudElEcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtTWFya2Rvd25Ub01zZyhtZXNzYWdlKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudElEc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIC5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvc3RNZXNzYWdlKHZhbHVlLCB0cmFuc2Zvcm1NYXJrZG93blRvTXNnKG1lc3NhZ2UpKTtcbiAgICAgICAgY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgKi9cblxuICAgIC8qIE9uIHNlYXJjaCBpcyBjYWxsZWQgd2hlbiBAIGNoYXJhY3RlciBpcyBlbnRlcmVkIGFuZCB3aWxsIGRpc3BsYXkgdGhlIG1lbnRpb24gKi9cblxuICAgIC8qXG4gICAgY29uc3Qgb25TZWFyY2ggPSBkZWJvdW5jZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcIm1lbnRpb25cIikge1xuICAgICAgICBnZXRNZW50aW9uU3VnZ2VzdGlvbnMoe1xuICAgICAgICAgIHB1bHNlQ29udGV4dDogdmFsdWUsXG4gICAgICAgICAgc2VhcmNoRm9yOiBldmVudC5zZWFyY2hcbiAgICAgICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgc2V0TWVudGlvblJlc3VsdHMocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRUYWdTdWdnZXN0aW9ucyh7XG4gICAgICAgICAgc2VhcmNoRm9yOiBldmVudC5zZWFyY2hcbiAgICAgICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgc2V0VGFnUmVzdWx0cyhyZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCAxNTApO1xuXG4gICAgY29uc3QgdXNlck5hbWUgPSBnZXRQQ29ubmVjdCgpLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9yTmFtZSgpO1xuICAgIGNvbnN0IGltYWdlS2V5ID0gZ2V0UENvbm5lY3QoKS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvckltYWdlSW5zS2V5KCk7XG5cbiAgICBjb25zdCBvbkZpbGVzQWRkZWQgPSB1c2VDYWxsYmFjaygobmV3bHlBZGRlZEZpbGVzKSA9PiB7XG4gICAgICBzZXRBdHRhY2htZW50cygoY3VycmVudCkgPT4gW1xuICAgICAgICAuLi5uZXdseUFkZGVkRmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZU1heFNpemUoZmlsZSwgNSkpIHtcbiAgICAgICAgICAgIGZpbGUuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgZmlsZS5tZXRhID0gXCJGaWxlIGlzIHRvbyBiaWcuIE1heCBhbGxvd2VkIHNpemUgaXMgNU1CLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWxlLmljb24gPSBnZXRJY29uRnJvbUZpbGVUeXBlKGZpbGUudHlwZSk7XG4gICAgICAgICAgZmlsZS5vbkRlbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHNldEF0dGFjaG1lbnRzKChjKSA9PiBjLmZpbHRlcigoZikgPT4gZi5uYW1lICE9PSBmaWxlLm5hbWUpKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgICB9KSxcbiAgICAgICAgLi4uY3VycmVudFxuICAgICAgXSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3Qgb25GaWx0ZXJDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChmaWx0ZXJJRCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkRmlsdGVycyA9IFsuLi5mZWVkRmlsdGVyc107XG4gICAgICAgIGNvbnN0IGZpbHRlclRvVXBkYXRlID0gdXBkYXRlZEZpbHRlcnMuZmluZChcbiAgICAgICAgICAoZmVlZEl0ZW0pID0+IGZlZWRJdGVtLmlkID09PSBmaWx0ZXJJRFxuICAgICAgICApO1xuICAgICAgICBmaWx0ZXJUb1VwZGF0ZS5vbiA9ICFmaWx0ZXJUb1VwZGF0ZS5vbjtcbiAgICAgICAgaWYgKGZpbHRlcklEID09PSBcIkFsbFwiKVxuICAgICAgICAgIHVwZGF0ZWRGaWx0ZXJzLmZvckVhY2goKGZlZWRGaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIGZlZWRGaWx0ZXIub24gPSBmaWx0ZXJUb1VwZGF0ZS5vbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgdXBkYXRlZEZpbHRlcnMuZmluZChcbiAgICAgICAgICAgIChmZWVkSXRlbSkgPT4gZmVlZEl0ZW0ub24gPT09IGZhbHNlICYmIGZlZWRJdGVtLmlkICE9PSBcIkFsbFwiXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgdXBkYXRlZEZpbHRlcnMuZmluZCgoZmVlZEl0ZW0pID0+IGZlZWRJdGVtLmlkID09PSBcIkFsbFwiKS5vbiA9IGZhbHNlO1xuICAgICAgICBlbHNlIHVwZGF0ZWRGaWx0ZXJzLmZpbmQoKGZlZWRJdGVtKSA9PiBmZWVkSXRlbS5pZCA9PT0gXCJBbGxcIikub24gPSB0cnVlO1xuICAgICAgICBzZXRGZWVkRmlsdGVycyh1cGRhdGVkRmlsdGVycyk7XG4gICAgICAgIGZldGNoTWVzc2FnZXMoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZmVlZElELFxuICAgICAgICAgIGZlZWRDbGFzcyxcbiAgICAgICAgICBmZWVkRmlsdGVycyxcbiAgICAgICAgICBmZXRjaE1lc3NhZ2VzQ2FuY2VsVG9rZW5Tb3VyY2UuY3VycmVudFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGZlZWRJRCxcbiAgICAgICAgZmVlZENsYXNzLFxuICAgICAgICBmZWVkRmlsdGVycyxcbiAgICAgICAgZmV0Y2hNZXNzYWdlc0NhbmNlbFRva2VuU291cmNlLFxuICAgICAgICBmZXRjaE1lc3NhZ2VzXG4gICAgICBdXG4gICAgKTtcblxuICAgICovXG5cbiAgICAvLyBzZXQgdXAgc3ZnIGltYWdlc1xuICAgIHRoaXMuc3ZnQ29tbWVudCQgPSB0aGlzLnV0aWxzLmdldEltYWdlU3JjKCdjaGF0JywgdGhpcy51dGlscy5nZXRTREtTdGF0aWNDb250ZW50VXJsKCkpO1xuICAgIHRoaXMuc3ZnTGlrZSQgPSB0aGlzLnV0aWxzLmdldEltYWdlU3JjKCd0aHVtYnMtdXAnLCB0aGlzLnV0aWxzLmdldFNES1N0YXRpY0NvbnRlbnRVcmwoKSk7XG4gICAgdGhpcy5zdmdMaWtlZEJ5TWUkID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygndGh1bWJzLXVwLXNvbGlkJywgdGhpcy51dGlscy5nZXRTREtTdGF0aWNDb250ZW50VXJsKCkpO1xuICAgIHRoaXMuc3ZnU2VuZCQgPSB0aGlzLnV0aWxzLmdldEltYWdlU3JjKCdzZW5kJywgdGhpcy51dGlscy5nZXRTREtTdGF0aWNDb250ZW50VXJsKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENhbGxiYWNrIHBhc3NlZCB3aGVuIHN1YnNjcmliaW5nIHRvIHN0b3JlIGNoYW5nZVxuICBvblN0YXRlQ2hhbmdlKCkge1xuICAgIGNvbnN0IGJMb2dnaW5nID0gZmFsc2U7XG4gICAgaWYgKGJMb2dnaW5nKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyggYGluICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBvblN0YXRlQ2hhbmdlYCApO1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgfVxuICAgIC8vIFNob3VsZCBhbHdheXMgY2hlY2sgdGhlIGJyaWRnZSB0byBzZWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICAgIGNvbnN0IGJVcGRhdGVTZWxmID0gdGhpcy5hbmd1bGFyUENvbm5lY3Quc2hvdWxkQ29tcG9uZW50VXBkYXRlKHRoaXMpO1xuICAgIC8vIGNvbnNvbGUubG9nKCBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IHNob3VsZENvbXBvbmVudFVwZGF0ZTogJHtiVXBkYXRlU2VsZn1gKTtcblxuICAgIC8vIE9OTFkgY2FsbCB1cGRhdGVTZWxmIHdoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlXG4gICAgLy8gICAgQU5EIHJlbW92aW5nIHRoZSBcImdhdGVcIiB0aGF0IHdhcyBwdXQgdGhlcmUgc2luY2Ugc2hvdWxkQ29tcG9uZW50VXBkYXRlXG4gICAgLy8gICAgICBzaG91bGQgYmUgdGhlIHJlYWwgXCJnYXRlXCJcbiAgICBpZiAoYlVwZGF0ZVNlbGYpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdHMtaWdub3JlIC0gcGFyYW1ldGVyIOKAnGNvbnRleHROYW1l4oCdIGZvciBnZXREYXRhT2JqZWN0IG1ldGhvZCBzaG91bGQgYmUgb3B0aW9uYWxcbiAgICAgIGNvbnN0IG5ld1B1bHNlRGF0YSA9IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoKS5wdWxzZTtcblxuICAgICAgaWYgKCFpc0VxdWFsKG5ld1B1bHNlRGF0YSwgdGhpcy5wdWxzZURhdGEpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmUgLSBwYXJhbWV0ZXIg4oCcY29udGV4dE5hbWXigJ0gZm9yIGdldERhdGFPYmplY3QgbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgIHRoaXMucHVsc2VEYXRhID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpLnB1bHNlO1xuICB9XG5cbiAgdXBkYXRlU2VsZigpIHtcbiAgICB0aGlzLmdldE1lc3NhZ2VEYXRhKCk7XG4gIH1cblxuICBnZXRNZXNzYWdlRGF0YSgpIHtcbiAgICBjb25zdCBtZXNzYWdlSURzID0gKHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkgYXMgYW55KS5tZXNzYWdlSURzO1xuICAgIGNvbnN0IHVzZXJOYW1lID0gKHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkgYXMgYW55KS5jdXJyZW50VXNlcjtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2Vjb25kIHBhcmFtZXRlciBwYWdlUmVmZXJlbmNlIGZvciBnZXRWYWx1ZSBtZXRob2Qgc2hvdWxkIGJlIG9wdGlvbmFsXG4gICAgY29uc3QgaW1hZ2VLZXkgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSgnT3BlcmF0b3JJRC5weUltYWdlSW5zS2V5Jyk7XG5cbiAgICAvLyBAdHMtaWdub3JlIC0gcGFyYW1ldGVyIOKAnGNvbnRleHROYW1l4oCdIGZvciBnZXREYXRhT2JqZWN0IG1ldGhvZCBzaG91bGQgYmUgb3B0aW9uYWxcbiAgICBjb25zdCBvRGF0YTogYW55ID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpO1xuXG4gICAgaWYgKG1lc3NhZ2VJRHMgJiYgbWVzc2FnZUlEcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnB1bHNlTWVzc2FnZXMkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvRGF0YS5wdWxzZS5tZXNzYWdlcykpO1xuXG4gICAgICAvLyBjb252ZXJ0IHRvIGp1c3QgYW4gYXJyYXkgb2Ygb2JqZWN0c1xuICAgICAgdGhpcy5wdWxzZU1lc3NhZ2VzJCA9IHRoaXMuY29udmVydFRvQXJyYXkodGhpcy5wdWxzZU1lc3NhZ2VzJCk7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIGNvcHksIHNvIHdlIGNhbiBtb2RpZnlcbiAgICAgIHRoaXMucHVsc2VNZXNzYWdlcyQgPSB0aGlzLmFwcGVuZFB1bHNlTWVzc2FnZSh0aGlzLnB1bHNlTWVzc2FnZXMkKTtcblxuICAgICAgLy8gbW9zdCByZWNlbnQgb24gdG9wXG4gICAgICB0aGlzLnB1bHNlTWVzc2FnZXMkID0gdGhpcy5wdWxzZU1lc3NhZ2VzJC5zb3J0KChhLCBiKSA9PiAoYS51cGRhdGVUaW1lVVRDIDwgYi51cGRhdGVUaW1lVVRDID8gMSA6IC0xKSk7XG4gICAgfVxuICB9XG5cbiAgY29udmVydFRvQXJyYXkobWVzc2FnZXM6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IGFyTWVzc2FnZXM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhck1lc3NhZ2VzLnB1c2gobWVzc2FnZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiBhck1lc3NhZ2VzO1xuICB9XG5cbiAgYXBwZW5kUHVsc2VNZXNzYWdlKG1lc3NhZ2VzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbaV07XG4gICAgICBjb25zdCBwb3N0ZWRUaW1lID0gbWVzc2FnZS5wb3N0ZWRUaW1lO1xuICAgICAgY29uc3QgdXBkYXRlZFRpbWUgPSBtZXNzYWdlLnVwZGF0ZWRUaW1lO1xuXG4gICAgICB0aGlzLnNob3dSZXBseUNvbW1lbnQkW21lc3NhZ2UuSURdID0gZmFsc2U7XG5cbiAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZFRpbWUgPSB0aGlzLnV0aWxzLmdlbmVyYXRlRGF0ZVRpbWUocG9zdGVkVGltZSwgJ0RhdGVUaW1lLVNpbmNlJyk7XG5cbiAgICAgIC8vIGZvciBzb3J0aW5nIGxhc3RlZCB1cGRhdGVcbiAgICAgIGlmICh1cGRhdGVkVGltZSAhPSBudWxsKSB7XG4gICAgICAgIG1lc3NhZ2UudXBkYXRlVGltZVVUQyA9IG5ldyBEYXRlKHVwZGF0ZWRUaW1lKS5nZXRUaW1lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlLnVwZGF0ZVRpbWVVVEMgPSBuZXcgRGF0ZShwb3N0ZWRUaW1lKS5nZXRUaW1lKCk7XG4gICAgICB9XG5cbiAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5ID0gbWVzc2FnZS5wb3N0ZWRCeVVzZXIubmFtZTtcbiAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5SW5pdGlhbHMgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKG1lc3NhZ2UucG9zdGVkQnlVc2VyLm5hbWUpO1xuXG4gICAgICAvLyBpZiBkaWRuJ3QgYnJlYWssIHRoZW4gbG9vayBhdCB0aGUgcmVwbGllc1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtZXNzYWdlLnJlcGxpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgcmVwbHkgPSBtZXNzYWdlLnJlcGxpZXNbal07XG5cbiAgICAgICAgY29uc3QgcmVwbHlQb3N0ZWRUaW1lID0gcmVwbHkucG9zdGVkVGltZTtcbiAgICAgICAgcmVwbHkuZGlzcGxheVBvc3RlZFRpbWUgPSB0aGlzLnV0aWxzLmdlbmVyYXRlRGF0ZVRpbWUocmVwbHlQb3N0ZWRUaW1lLCAnRGF0ZVRpbWUtU2luY2UnKTtcblxuICAgICAgICAvLyBsZXQgb1JlcGx5VXNlciA9IHRoaXMudXNlckRhdGEuZ2V0KHJlcGx5LnBvc3RlZEJ5VXNlcik7XG4gICAgICAgIGNvbnN0IG9SZXBseVVzZXIgPSByZXBseS5wb3N0ZWRCeVVzZXI7XG5cbiAgICAgICAgaWYgKG9SZXBseVVzZXIpIHtcbiAgICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkQnkgPSBvUmVwbHlVc2VyLm5hbWU7XG4gICAgICAgICAgcmVwbHkuZGlzcGxheVBvc3RlZEJ5SW5pdGlhbHMgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKG9SZXBseVVzZXIubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGZvclxuXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xuICB9XG5cbiAgdXBkYXRlTWVzc2FnZXNXaXRoT3BlcmF0b3JzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wdWxzZU1lc3NhZ2VzJC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucHVsc2VNZXNzYWdlcyRbaV07XG5cbiAgICAgIGNvbnN0IHBvc3RlZFRpbWUgPSBtZXNzYWdlLnBvc3RlZFRpbWU7XG5cbiAgICAgIHRoaXMuc2hvd1JlcGx5Q29tbWVudCRbbWVzc2FnZS5JRF0gPSBmYWxzZTtcblxuICAgICAgbWVzc2FnZS5kaXNwbGF5UG9zdGVkVGltZSA9IHRoaXMudXRpbHMuZ2VuZXJhdGVEYXRlVGltZShwb3N0ZWRUaW1lLCAnRGF0ZVRpbWUtU2luY2UnKTtcblxuICAgICAgY29uc3Qgb1VzZXIgPSB0aGlzLnVzZXJEYXRhLmdldChtZXNzYWdlLnBvc3RlZEJ5KTtcblxuICAgICAgaWYgKG9Vc2VyKSB7XG4gICAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5ID0gb1VzZXIucHlVc2VyTmFtZTtcbiAgICAgICAgbWVzc2FnZS5kaXNwbGF5UG9zdGVkQnlJbml0aWFscyA9IHRoaXMudXRpbHMuZ2V0SW5pdGlhbHMob1VzZXIucHlVc2VyTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvVXNlclBhcmFtcyA9IHtcbiAgICAgICAgICBPcGVyYXRvcklkOiBtZXNzYWdlLnBvc3RlZEJ5XG4gICAgICAgIH07XG4gICAgICAgIC8vIERvIHNvbWV0aGluZyB3aXRoIG9Vc2VyUGFyYW1zXG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGRpZG4ndCBicmVhaywgdGhlbiBsb29rIGF0IHRoZSByZXBsaWVzXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1lc3NhZ2UucmVwbGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCByZXBseSA9IG1lc3NhZ2UucmVwbGllc1tqXTtcblxuICAgICAgICBjb25zdCByZXBseVBvc3RlZFRpbWUgPSByZXBseS5wb3N0ZWRUaW1lO1xuICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkVGltZSA9IHRoaXMudXRpbHMuZ2VuZXJhdGVEYXRlVGltZShyZXBseVBvc3RlZFRpbWUsICdEYXRlVGltZS1TaW5jZScpO1xuXG4gICAgICAgIC8vIGxldCBvUmVwbHlVc2VyID0gdGhpcy51c2VyRGF0YS5nZXQocmVwbHkucG9zdGVkQnlVc2VyKTtcbiAgICAgICAgY29uc3Qgb1JlcGx5VXNlciA9IHJlcGx5LnBvc3RlZEJ5VXNlcjtcblxuICAgICAgICBpZiAob1JlcGx5VXNlcikge1xuICAgICAgICAgIHJlcGx5LmRpc3BsYXlQb3N0ZWRCeSA9IG9SZXBseVVzZXIubmFtZTtcbiAgICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkQnlJbml0aWFscyA9IHRoaXMudXRpbHMuZ2V0SW5pdGlhbHMob1JlcGx5VXNlci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gZm9yXG4gIH1cblxuICB1cGRhdGVDdXJyZW50VXNlck5hbWUoc1VzZXI6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudFVzZXJJbml0aWFscyQgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKHNVc2VyKTtcbiAgICB0aGlzLmN1cnJlbnRVc2VyTmFtZSQgPSBzVXNlcjtcbiAgfVxuXG4gIHBvc3RDbGljaygpIHtcbiAgICAvLyBkb24ndCBzZW5kIGEgYmxhbmsgbWVzc2FnZVxuICAgIGlmICh0aGlzLnB1bHNlQ29udmVyc2F0aW9uICYmIHRoaXMucHVsc2VDb252ZXJzYXRpb24gIT0gJycpIHtcbiAgICAgIC8vIGxldCBwdWxzZU1lc3NhZ2UgPSB7XG4gICAgICAvLyAgIGNvbnRleHROYW1lIDogdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKSxcbiAgICAgIC8vICAgbWVzc2FnZTogdGhpcy5wdWxzZUNvbnZlcnNhdGlvbixcbiAgICAgIC8vICAgcHVsc2VDb250ZXh0OiB0aGlzLnBDb25uJC5nZXRWYWx1ZShcIi5wekluc0tleVwiKVxuICAgICAgLy8gfTtcblxuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAvLyB1c2VkIHRvIGJlOiB0aGlzLi8qZmVlZEFQSS4qL3Bvc3RNZXNzYWdlKHB1bHNlTWVzc2FnZSk7XG4gICAgICAvLyBXaXRoIGxhdGVzdCBGZWVkQVBJLCB0aGUgMXN0IGFyZyBzaG91bGQgYmUgZ2V0Q29uZmlnUHJvcHMoKS52YWx1ZVxuXG4gICAgICAvLyBJZiBmZWVkQVBJIGlzIGRlZmluZWQgdGhlbiBvbmx5IHBvc3QgbWVzc2FnZVxuICAgICAgaWYgKHRoaXMuZmVlZEFQSSkge1xuICAgICAgICB0aGlzLi8qIGZlZWRBUEkuICovIHBvc3RNZXNzYWdlKCh0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpIGFzIGFueSkudmFsdWUsIHRoaXMucHVsc2VDb252ZXJzYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJXZSBkb24ndCBzdXBwb3J0IFB1bHNlIHlldFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjbGVhciBvdXQgbG9jYWwgY29weVxuICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHVsc2VNZXNzYWdlJykgYXMgSFRNTEVsZW1lbnQgfCBhbnkpLnZhbHVlID0gJyc7XG4gICAgdGhpcy5wdWxzZUNvbnZlcnNhdGlvbiA9ICcnO1xuICB9XG5cbiAgbWVzc2FnZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5wdWxzZUNvbnZlcnNhdGlvbiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuXG4gIGxpa2VDbGljayhtZXNzYWdlSUQ6IHN0cmluZywgck1lc3NhZ2VJRDogc3RyaW5nLCBiTGlrZWRCeU1lOiBib29sZWFuLCBsZXZlbDogc3RyaW5nKSB7XG4gICAgbGV0IHB1bHNlTWVzc2FnZSA9IHt9O1xuXG4gICAgaWYgKGxldmVsID09PSAndG9wJykge1xuICAgICAgcHVsc2VNZXNzYWdlID0ge1xuICAgICAgICBwdWxzZUNvbnRleHQ6IHJNZXNzYWdlSUQsXG4gICAgICAgIGlzUmVwbHk6IG51bGwsXG4gICAgICAgIGNvbnRleHROYW1lOiB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpLFxuICAgICAgICBsaWtlZEJ5OiBiTGlrZWRCeU1lLFxuICAgICAgICBtZXNzYWdlSURcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1bHNlTWVzc2FnZSA9IHtcbiAgICAgICAgcHVsc2VDb250ZXh0OiByTWVzc2FnZUlELFxuICAgICAgICBpc1JlcGx5OiB0cnVlLFxuICAgICAgICBjb250ZXh0TmFtZTogdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKSxcbiAgICAgICAgbGlrZWRCeTogYkxpa2VkQnlNZSxcbiAgICAgICAgbWVzc2FnZUlEXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHRoaXMuLyogZmVlZEFQSS4gKi8gbGlrZU1lc3NhZ2UocHVsc2VNZXNzYWdlKTtcbiAgfVxuXG4gIGNvbW1lbnRDbGljayhtZXNzYWdlSUQpIHtcbiAgICAvLyBpdGVyYXRvciB0aHJvdWdoIG1lc3NhZ2VzLCBmaW5kIG1hdGNoLCB0dXJuIG9uIGNvbW1lbnQgZW50cnlcbiAgICBjb25zdCBmb3VuZE1lc3NhZ2UgPSB0aGlzLnB1bHNlTWVzc2FnZXMkLmZpbmQobWVzc2FnZSA9PiBtZXNzYWdlLklEID09PSBtZXNzYWdlSUQpO1xuXG4gICAgaWYgKGZvdW5kTWVzc2FnZSkge1xuICAgICAgdGhpcy5zaG93UmVwbHlDb21tZW50JFtmb3VuZE1lc3NhZ2UuSURdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHBvc3RDb21tZW50Q2xpY2sobWVzc2FnZUlEKSB7XG4gICAgLy8gZGVidWdnZXI7XG5cbiAgICBpZiAodGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSAmJiB0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdICE9ICcnKSB7XG4gICAgICAvLyBsZXQgcHVsc2VNZXNzYWdlID0ge1xuICAgICAgLy8gICBjb250ZXh0TmFtZSA6IHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCksXG4gICAgICAvLyAgIG1lc3NhZ2U6IHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0sXG4gICAgICAvLyAgIHB1bHNlQ29udGV4dDogbWVzc2FnZUlELFxuICAgICAgLy8gICByZXBseTogdHJ1ZVxuICAgICAgLy8gfTtcblxuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAvLyBVc2VkIHRvIGJlOiB0aGlzLi8qZmVlZEFQSS4qL3Bvc3RNZXNzYWdlKHB1bHNlTWVzc2FnZSk7XG4gICAgICAvLyAgTGF0ZXN0IHVwZGF0ZSB0byBBUEkgaGFzIGNoYW5nZWQgYW5kIHRoZSBwb3N0TWVzc2FnZSBhY3R1YWxseSBnZXRzXG4gICAgICAvLyAgdGhlIHB1bHNlIGNvbnRleHQuLi5cbiAgICAgIC8vIHVzZWQgdG8gdXNlOiBjb250ZXh0TmFtZVxuICAgICAgLy8gbmV3IEZlZWRBUEkgd2FudHMgYXJncyB0byBiZSBtZXNzYWdlSUQsIHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0sIHRydWUgKHNpbmNlIHRoaXMgaXMgYSByZXBseSlcbiAgICAgIHRoaXMuLyogZmVlZEFQSS4gKi8gcG9zdE1lc3NhZ2UobWVzc2FnZUlELCB0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdLCB0cnVlKTtcblxuICAgICAgdGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIG5ld0NvbW1lbnRDaGFuZ2UoZXZlbnQsIG1lc3NhZ2VJRCkge1xuICAgIHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0gPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbn1cbiIsIjxkaXY+XG4gIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XG4gICAgPGgzPlB1bHNlPC9oMz5cblxuICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgIDxiciAvPlxuICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXItYmlnXCI+e3sgdGhpcy5jdXJyZW50VXNlckluaXRpYWxzJCB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicHNkay1mdWxsLXdpZHRoXCI+XG4gICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCByb3dzPVwiNVwiIGlkPVwicHVsc2VNZXNzYWdlXCIgcGxhY2Vob2xkZXI9XCJTdGFydCBhIGNvbnZlcnNhdGlvblwiIHR5cGU9XCJ0ZXh0XCIgKGNoYW5nZSk9XCJtZXNzYWdlQ2hhbmdlKCRldmVudClcIj48L3RleHRhcmVhPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1ncmlkLWxpc3QgY29scz1cIjJcIiByb3dIZWlnaHQ9XCI2LjI1cmVtXCI+XG4gIDxtYXQtZ3JpZC10aWxlPiA8L21hdC1ncmlkLXRpbGU+XG4gIDxtYXQtZ3JpZC10aWxlPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInBvc3RDbGljaygpXCI+UG9zdDwvYnV0dG9uPlxuICA8L21hdC1ncmlkLXRpbGU+XG48L21hdC1ncmlkLWxpc3Q+XG5cbjxkaXYgKm5nRm9yPVwibGV0IHB1bHNlTWVzc2FnZSBvZiBwdWxzZU1lc3NhZ2VzJDsgbGV0IG9kZCA9IG9kZFwiIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIm9kZCA/ICd3aGl0ZScgOiAnI2VlZWVlZSdcIj5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtZGl2aWRlclwiPjwvZGl2PlxuICA8YnIgLz5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXItYmlnXCI+e3sgcHVsc2VNZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeUluaXRpYWxzIH19PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1ncm91cFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1ieVwiPnt7IHB1bHNlTWVzc2FnZS5kaXNwbGF5UG9zdGVkQnkgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtdGltZVwiPnt7IHB1bHNlTWVzc2FnZS5kaXNwbGF5UG9zdGVkVGltZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS10ZXh0XCI+e3sgcHVsc2VNZXNzYWdlLm1lc3NhZ2UgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1hY3Rpb25zXCI+XG4gICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1hY3Rpb24tZ3JvdXBcIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiY29tbWVudENsaWNrKHB1bHNlTWVzc2FnZS5JRClcIj5cbiAgICAgICAgPGltZyBjbGFzcz1cInBzZGstY29tbWVudC1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0NvbW1lbnQkIH19XCIgLz5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWxpa2UtbGFiZWxcIlxuICAgICAgICAgID5Db21tZW50IDxzcGFuICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5yZXBsaWVzLmxlbmd0aCA+IDBcIj4gfCB7eyBwdWxzZU1lc3NhZ2UucmVwbGllcy5sZW5ndGggfX08L3NwYW4+PC9sYWJlbFxuICAgICAgICA+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWFjdGlvbi1saWtlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5saWtlQ291bnQ7IGVsc2Ugbm90TGlrZWRcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1bHNlTWVzc2FnZT8ubGlrZWRCeU1lID09ICd0cnVlJ1wiIG1hdC1idXR0b24gKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHB1bHNlTWVzc2FnZS5JRCwgdHJ1ZSwgJ3RvcCcpXCI+XG4gICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJwc2RrLWljb24tbGlrZWQtYnktbWVcIiBzdmdJY29uPVwidGh1bWItdXBcIiBtYXN0TGlzdEljb24gPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2VkLWJ5LW1lLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZWRCeU1lJCB9fVwiIC8+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWxpa2UtbGFiZWxcIj5MaWtlIHwge3sgcHVsc2VNZXNzYWdlLmxpa2VDb3VudCB9fTwvbGFiZWw+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5saWtlZEJ5TWUgIT0gJ3RydWUnXCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcHVsc2VNZXNzYWdlLklELCBmYWxzZSwgJ3RvcCcpXCI+XG4gICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJwc2RrLWljb25cIiBzdmdJY29uPVwidGh1bWItdXAtb3V0bGluZVwiIG1hc3RMaXN0SWNvbiA+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstbGlrZS1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0xpa2UkIH19XCIgLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtbGlrZS1sYWJlbFwiPkxpa2UgfCB7eyBwdWxzZU1lc3NhZ2UubGlrZUNvdW50IH19PC9sYWJlbD5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm90TGlrZWQ+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcHVsc2VNZXNzYWdlLklELCBmYWxzZSwgJ3RvcCcpXCI+XG4gICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJwc2RrLWljb25cIiBzdmdJY29uPVwidGh1bWItdXAtb3V0bGluZVwiIG1hc3RMaXN0SWNvbiA+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstbGlrZS1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0xpa2UkIH19XCIgLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtbGlrZS1sYWJlbFwiPkxpa2U8L2xhYmVsPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJwdWxzZU1lc3NhZ2U/LnJlcGxpZXNcIiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHlcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCByZXBseU1lc3NhZ2Ugb2YgcHVsc2VNZXNzYWdlLnJlcGxpZXNcIiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktYWxpZ25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgIDxiciAvPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktZ3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstYXZhdGFyXCI+e3sgcmVwbHlNZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeUluaXRpYWxzIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWJ5XCI+e3sgcmVwbHlNZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1tZXNzYWdlXCI+e3sgcmVwbHlNZXNzYWdlLm1lc3NhZ2UgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImNvbW1lbnRDbGljayhwdWxzZU1lc3NhZ2UuSUQpXCIgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWNvbW1lbnRcIj5cbiAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1jb21tZW50LXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnQ29tbWVudCQgfX1cIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInJlcGx5TWVzc2FnZT8ubGlrZUNvdW50OyBlbHNlIHJlcGx5Tm90TGlrZWRcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInJlcGx5TWVzc2FnZT8ubGlrZWRCeU1lID09PSAndHJ1ZSdcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHJlcGx5TWVzc2FnZS5JRCwgdHJ1ZSwgJ3JlcGx5JylcIlxuICAgICAgICAgICAgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWxpa2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2VkLWJ5LW1lLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZWRCeU1lJCB9fVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJyZXBseU1lc3NhZ2U/Lmxpa2VkQnlNZSAhPSAndHJ1ZSdcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHJlcGx5TWVzc2FnZS5JRCwgZmFsc2UsICdyZXBseScpXCJcbiAgICAgICAgICAgIGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1saWtlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1saWtlLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZSQgfX1cIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktbGlrZS1sYWJlbFwiPkxpa2UgfCB7eyByZXBseU1lc3NhZ2UubGlrZUNvdW50IH19PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwbHlOb3RMaWtlZD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInJlcGx5TWVzc2FnZT8ubGlrZWRCeU1lICE9ICd0cnVlJ1wiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcmVwbHlNZXNzYWdlLklELCBmYWxzZSwgJ3JlcGx5JylcIlxuICAgICAgICAgICAgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWxpa2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2Utc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdMaWtlJCB9fVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktdGltZVwiPnt7IHJlcGx5TWVzc2FnZS5kaXNwbGF5UG9zdGVkVGltZSB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8YnIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93UmVwbHlDb21tZW50JFtwdWxzZU1lc3NhZ2UuSURdID09IHRydWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgIDxiciAvPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtY29tbWVudC1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXJcIj57eyB0aGlzLmN1cnJlbnRVc2VySW5pdGlhbHMkIH19PC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInBzZGstZnVsbC13aWR0aFwiPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIHJvd3M9XCI1XCJcbiAgICAgICAgICAgIGlkPVwicHVsc2VNZXNzYWdlXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWRkIGEgY29tbWVudFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm5ld0NvbW1lbnRDaGFuZ2UoJGV2ZW50LCBwdWxzZU1lc3NhZ2UuSUQpXCJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJwb3N0Q29tbWVudENsaWNrKHB1bHNlTWVzc2FnZS5JRClcIiBjbGFzcz1cInBzZGstcHVsc2UtY29tbWVudC1wb3N0XCI+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstc2VuZC1zdmctaWNvblwiIHNyYz1cInt7IHN2Z1NlbmQkIH19XCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxiciAvPlxuPC9kaXY+XG4iXX0=
525
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL3dpZGdldC9mZWVkLWNvbnRhaW5lci9mZWVkLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvd2lkZ2V0L2ZlZWQtY29udGFpbmVyL2ZlZWQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7QUFZaEQsTUFBTSxPQUFPLHNCQUFzQjtJQXFDakMsWUFDVSxlQUF1QyxFQUN2QyxLQUF3QixFQUN4QixLQUFZO1FBRlosb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQU87UUFyQ3RCLDRCQUE0QjtRQUM1Qix3QkFBbUIsR0FBd0IsRUFB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dCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRHcmlkTGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2dyaWQtbGlzdCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IEFuZ3VsYXJQQ29ubmVjdERhdGEsIEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fYnJpZGdlL2FuZ3VsYXItcGNvbm5lY3QnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9faGVscGVycy91dGlscyc7XG5cbmRlY2xhcmUgY29uc3Qgd2luZG93OiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1mZWVkLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWVkLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZlZWQtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1V0aWxzXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0R3JpZExpc3RNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgRmVlZENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcENvbm4kOiB0eXBlb2YgUENvbm5lY3Q7XG5cbiAgLy8gVXNlZCB3aXRoIEFuZ3VsYXJQQ29ubmVjdFxuICBhbmd1bGFyUENvbm5lY3REYXRhOiBBbmd1bGFyUENvbm5lY3REYXRhID0ge307XG5cbiAgdXNlck5hbWUkOiBzdHJpbmc7XG4gIGltYWdlS2V5JDogc3RyaW5nO1xuXG4gIGN1cnJlbnRVc2VySW5pdGlhbHMkOiBzdHJpbmc7XG4gIGN1cnJlbnRVc2VyTmFtZSQ6IHN0cmluZztcblxuICBwdWxzZU1lc3NhZ2VzJDogYW55W107XG4gIHNob3dSZXBseUNvbW1lbnQkOiBPYmplY3QgPSB7fTtcblxuICBzdmdDb21tZW50JDogc3RyaW5nO1xuICBzdmdMaWtlJDogc3RyaW5nO1xuICBzdmdMaWtlZEJ5TWUkOiBzdHJpbmc7XG4gIHN2Z1NlbmQkOiBzdHJpbmc7XG5cbiAgcHVsc2VDb252ZXJzYXRpb246IHN0cmluZztcbiAgdXNlckRhdGE6IE1hcDxhbnksIGFueT4gPSBuZXcgTWFwKCk7XG5cbiAgcHVsc2VDb21tZW50OiBPYmplY3QgPSB7fTtcblxuICAvLyBmdW5jdGlvbnNcbiAgYWN0aW9uc0FQSTogYW55O1xuICAvLyB1bnRpbCBGZWVkQVBJIG1vdmVkIGJhY2sgdG8gUENvcmUsIHdlIGFjY2VzcyB0aGUgbWV0aG9kcyBkaXJlY3RseSAoc2VlIG5nSW5pdClcbiAgZmVlZEFQSTogYW55O1xuXG4gIHB1bHNlRGF0YTogYW55O1xuXG4gIC8vIFRlbXBvcmFyeSB3YXkgdG8gdXNlIEZlZWRBcGkuLi5cbiAgZmV0Y2hNZXNzYWdlczogYW55O1xuICBsaWtlTWVzc2FnZTogYW55O1xuICBwb3N0TWVzc2FnZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYW5ndWxhclBDb25uZWN0OiBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdXRpbHM6IFV0aWxzXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJOYW1lJCA9IFBDb3JlLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9yTmFtZSgpO1xuICAgIHRoaXMuaW1hZ2VLZXkkID0gUENvcmUuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JJbWFnZUluc0tleSgpO1xuICAgIHRoaXMudXBkYXRlQ3VycmVudFVzZXJOYW1lKHRoaXMudXNlck5hbWUkKTtcblxuICAgIC8vIEZpcnN0IHRoaW5nIGluIGluaXRpYWxpemF0aW9uIGlzIHJlZ2lzdGVyaW5nIGFuZCBzdWJzY3JpYmluZyB0byB0aGUgQW5ndWxhclBDb25uZWN0IHNlcnZpY2VcbiAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5yZWdpc3RlckFuZFN1YnNjcmliZUNvbXBvbmVudCh0aGlzLCB0aGlzLm9uU3RhdGVDaGFuZ2UpO1xuXG4gICAgLy8gVGhlbiwgY29udGludWUgb24gd2l0aCBvdGhlciBpbml0aWFsaXphdGlvblxuICAgIC8vIGRlYnVnZ2VyO1xuXG4gICAgLy8gY29uc3Qge1xuICAgIC8vICAgZmV0Y2hNZXNzYWdlcyxcbiAgICAvLyAgIGxpa2VNZXNzYWdlLFxuICAgIC8vICAgcG9zdE1lc3NhZ2VcbiAgICAvLyB9ID0gRmVlZEFwaSh0aGlzLnBDb25uJCk7XG4gICAgLy8gdGhpcy5mZXRjaE1lc3NhZ2VzID0gZmV0Y2hNZXNzYWdlcztcbiAgICAvLyB0aGlzLmxpa2VNZXNzYWdlID0gbGlrZU1lc3NhZ2U7XG4gICAgLy8gdGhpcy5wb3N0TWVzc2FnZSA9IHBvc3RNZXNzYWdlO1xuXG4gICAgLy8gLy8gdGhpcy51c2VyTmFtZSQgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZShcInB4UmVxdWVzdG9yLnB4VXNlck5hbWVcIik7XG4gICAgLy8gLy8gdGhpcy5pbWFnZUtleSQgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZShcIk9wZXJhdG9ySUQucHlJbWFnZUluc0tleVwiKTtcblxuICAgIC8vIC8vdGhpcy51c2VyTmFtZSQgPSB0aGlzLnBDb25uJC5nZXREYXRhT2JqZWN0KClbXCJEX3B4RW52aXJvbm1lbnRJbmZvXCJdLnB4T3BlcmF0b3IucHlVc2VyTmFtZTtcbiAgICAvLyAvL3RoaXMuaW1hZ2VLZXkkID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpW1wiRF9weEVudmlyb25tZW50SW5mb1wiXS5weE9wZXJhdG9yLnB5SW1hZ2VJbnNLZXk7XG4gICAgLy8gdGhpcy51c2VyTmFtZSQgPSB0aGlzLnBDb25uJC5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvck5hbWUoKTtcbiAgICAvLyB0aGlzLmltYWdlS2V5JCA9IHRoaXMucENvbm4kLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9ySW1hZ2VJbnNLZXkoKTtcblxuICAgIC8vIHRoaXMuYWN0aW9uc0FQSSA9IHRoaXMucENvbm4kLmdldEFjdGlvbnNBcGkoKTtcblxuICAgIC8vIGxldCBvd25lciA9IHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkudmFsdWU7XG5cbiAgICAvLyAvLyB3aXRoIG5ldyBGZWVkQVBJOiBvd25lciBpcyB0aGUgcHJvcGVyIHZhbHVlIHRvIHBhc3MgaW5cbiAgICAvLyAvLyAgYW5kIG5vIGxvbmdlciB0YWtlcyAybmQgYXJndW1lbnRcbiAgICAvLyB0aGlzLi8qZmVlZEFQSS4qL2ZldGNoTWVzc2FnZXMob3duZXIgLyosIHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCkqLyk7XG5cbiAgICAvLyBjb25zdCBjb25maWdQcm9wczogYW55ID0gdGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKTtcblxuICAgIC8vIGNvbnN0IHsgbWVzc2FnZUlEcyB9ID0gY29uZmlnUHJvcHM7XG5cbiAgICAvLyBjb25zdCB7IGZldGNoTWVzc2FnZXMsIHBvc3RNZXNzYWdlLCBnZXRNZW50aW9uU3VnZ2VzdGlvbnMsIGdldFRhZ1N1Z2dlc3Rpb25zIH0gPSBGZWVkQXBpKHRoaXMucENvbm4kKTtcblxuICAgIGNvbnN0IGFwcE5hbWUgPSBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRBcHBsaWNhdGlvbk5hbWUoKTtcbiAgICBsZXQgdmFsdWUgPSAnJztcbiAgICBsZXQgZmVlZElEID0gJyc7XG4gICAgbGV0IGZlZWRDbGFzcyA9ICcnO1xuXG4gICAgaWYgKHRoaXMucENvbm4kLmdldENhc2VTdW1tYXJ5KCkuSUQpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5wQ29ubiQuZ2V0Q2FzZVN1bW1hcnkoKS5JRDtcbiAgICAgIGZlZWRJRCA9ICdweUNhc2VGZWVkJztcbiAgICAgIGZlZWRDbGFzcyA9IHRoaXMucENvbm4kLmdldENhc2VTdW1tYXJ5KCkuY29udGVudC5jbGFzc0lEO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGBEQVRBLVBPUlRBTCAkJHthcHBOYW1lfWA7XG4gICAgICBmZWVkSUQgPSAncHlEYXNoYm9hcmRGZWVkJztcbiAgICAgIGZlZWRDbGFzcyA9ICdAYmFzZWNsYXNzJztcbiAgICB9XG5cbiAgICBjb25zdCBvblVwbG9hZFByb2dyZXNzID0gKCkgPT4ge307XG4gICAgY29uc3QgZXJyb3JIYW5kbGVyID0gKCkgPT4ge307XG4gICAgY29uc3QgYXR0YWNobWVudHMgPSAoKSA9PiB7fTtcblxuICAgIGNvbnN0IHBvc3RDb21tZW50ID0gKHsgdmFsdWU6IG1lc3NhZ2UsIGNsZWFyIH0pID0+IHtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRJRHMgPSBbXTtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVdGlscyA9IFBDb3JlLmdldEF0dGFjaG1lbnRVdGlscygpO1xuICAgICAgaWYgKGF0dGFjaG1lbnRzICYmICEhYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgICAgIC8qIGF0dGFjaG1lbnRzO1xuICAgICAgICAgIC5maWx0ZXIoKGZpbGUpID0+ICFmaWxlLmVycm9yKVxuICAgICAgICAgIC5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhdHRhY2htZW50VXRpbHNcbiAgICAgICAgICAgICAgLnVwbG9hZEF0dGFjaG1lbnQoZmlsZSwgb25VcGxvYWRQcm9ncmVzcywgZXJyb3JIYW5kbGVyKVxuICAgICAgICAgICAgICAudGhlbigoZmlsZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiRmlsZVwiLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IFwiRmlsZVwiLFxuICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgIElEOiBmaWxlUmVzcG9uc2UuZGF0YS5JRFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudElEcy5wdXNoKGZpbGVDb25maWcpO1xuICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPT09IGF0dGFjaG1lbnRJRHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU1hcmtkb3duVG9Nc2cobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRJRHNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjbGVhcigpO1xuICAgICAgICAgICAgICAgICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gICAgICAgICAgfSk7ICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwb3N0TWVzc2FnZSh2YWx1ZSwgdHJhbnNmb3JtTWFya2Rvd25Ub01zZyhtZXNzYWdlKSk7XG4gICAgICAgIGNsZWFyKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qXG5cbiAgICBjb25zdCB7IGdldFBDb25uZWN0LCBtZXNzYWdlSURzIH0gPSBwcm9wcztcbiAgICBjb25zdCBbbWVudGlvblJlc3VsdHMsIHNldE1lbnRpb25SZXN1bHRzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbdGFnUmVzdWx0cywgc2V0VGFnUmVzdWx0c10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2F0dGFjaG1lbnRzLCBzZXRBdHRhY2htZW50c10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2ZlZWRGaWx0ZXJzLCBzZXRGZWVkRmlsdGVyc10gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGZldGNoTWVzc2FnZXMsXG4gICAgICBwb3N0TWVzc2FnZSxcbiAgICAgIGdldE1lbnRpb25TdWdnZXN0aW9ucyxcbiAgICAgIGdldFRhZ1N1Z2dlc3Rpb25zXG4gICAgfSA9IEZlZWRBcGkoZ2V0UENvbm5lY3QoKSk7XG4gICAgY29uc3QgYXBwTmFtZSA9IFBDb3JlLmdldEVudmlyb25tZW50SW5mbygpLmdldEFwcGxpY2F0aW9uTmFtZSgpO1xuICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgbGV0IGZlZWRJRCA9IFwiXCI7XG4gICAgbGV0IGZlZWRDbGFzcyA9IFwiXCI7XG4gICAgaWYgKGdldFBDb25uZWN0KCkuZ2V0Q2FzZVN1bW1hcnkoKS5JRCkge1xuICAgICAgdmFsdWUgPSBnZXRQQ29ubmVjdCgpLmdldENhc2VTdW1tYXJ5KCkuSUQ7XG4gICAgICBmZWVkSUQgPSBcInB5Q2FzZUZlZWRcIjtcbiAgICAgIGZlZWRDbGFzcyA9IGdldFBDb25uZWN0KCkuZ2V0Q2FzZVN1bW1hcnkoKS5jb250ZW50LmNsYXNzSUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gYERBVEEtUE9SVEFMICQke2FwcE5hbWV9YDtcbiAgICAgIGZlZWRJRCA9IFwicHlEYXNoYm9hcmRGZWVkXCI7XG4gICAgICBmZWVkQ2xhc3MgPSBcIkBiYXNlY2xhc3NcIjtcbiAgICB9XG4gICAgLy8gRm9yIGNhbmNlbGxpbmcgZmV0Y2hyZXF1ZXN0IGZvciBmaWxldHJzXG4gICAgY29uc3QgZmV0Y2hNZXNzYWdlc0NhbmNlbFRva2VuU291cmNlID0gdXNlUmVmKFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBmZXRjaE1lc3NhZ2VzKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZmVlZElELFxuICAgICAgICBmZWVkQ2xhc3MsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGZldGNoTWVzc2FnZXNDYW5jZWxUb2tlblNvdXJjZS5jdXJyZW50XG4gICAgICApLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBzZXRGZWVkRmlsdGVycyhyZXMpO1xuICAgICAgfSk7XG4gICAgICBQQ29yZS5nZXRBc3NldExvYWRlcigpLmdldExvYWRlcihcImNvbXBvbmVudC1sb2FkZXJcIikoW1wiQWN0aXZpdHlcIl0pO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IG9uVXBsb2FkUHJvZ3Jlc3MgPSB1c2VDYWxsYmFjaygoZmlsZSkgPT4ge1xuICAgICAgcmV0dXJuICh7IGxvYWRlZCwgdG90YWwgfSkgPT4ge1xuICAgICAgICBmaWxlLnByb2dyZXNzID0gTWF0aC5mbG9vcigobG9hZGVkIC8gdG90YWwpICogMTAwKTtcbiAgICAgICAgc2V0QXR0YWNobWVudHMoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudC5tYXAoKGN1cnJGaWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3VyckZpbGUubmFtZSA9PT0gZmlsZS5uYW1lID8gZmlsZSA6IGN1cnJGaWxlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgZXJyb3JIYW5kbGVyID0gdXNlQ2FsbGJhY2soKGlzRmV0Y2hDYW5jZWxlZCwgZmlsZSkgPT4ge1xuICAgICAgcmV0dXJuIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoIWlzRmV0Y2hDYW5jZWxlZChlcnJvcikpIHtcbiAgICAgICAgICBsZXQgbG9jYWxpemVkVmFsdWUgPSBcIlVwbG9hZCBmYWlsZWRcIjtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuZGF0YSAmJlxuICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvckRldGFpbHNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxvY2FsaXplZFZhbHVlID0gZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvckRldGFpbHNbMF0ubG9jYWxpemVkVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBmaWxlLnByb2dyZXNzO1xuICAgICAgICAgIHNldEF0dGFjaG1lbnRzKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudC5tYXAoKGN1cnJGaWxlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjdXJyRmlsZS5uYW1lID09PSBmaWxlLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyRmlsZS5tZXRhID0gbG9jYWxpemVkVmFsdWU7XG4gICAgICAgICAgICAgICAgY3VyckZpbGUuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBjdXJyRmlsZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVycm9yLmlzSGFuZGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IHBvc3RDb21tZW50ID0gKHsgdmFsdWU6IG1lc3NhZ2UsIGNsZWFyIH0pID0+IHtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRJRHMgPSBbXTtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVdGlscyA9IFBDb3JlLmdldEF0dGFjaG1lbnRVdGlscygpO1xuICAgICAgaWYgKGF0dGFjaG1lbnRzICYmICEhYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGF0dGFjaG1lbnRzXG4gICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gIWZpbGUuZXJyb3IpXG4gICAgICAgICAgLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnRVdGlsc1xuICAgICAgICAgICAgICAudXBsb2FkQXR0YWNobWVudChmaWxlLCBvblVwbG9hZFByb2dyZXNzLCBlcnJvckhhbmRsZXIpXG4gICAgICAgICAgICAgIC50aGVuKChmaWxlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJGaWxlXCIsXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogXCJGaWxlXCIsXG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgSUQ6IGZpbGVSZXNwb25zZS5kYXRhLklEXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50SURzLnB1c2goZmlsZUNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gYXR0YWNobWVudElEcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtTWFya2Rvd25Ub01zZyhtZXNzYWdlKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudElEc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIC5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvc3RNZXNzYWdlKHZhbHVlLCB0cmFuc2Zvcm1NYXJrZG93blRvTXNnKG1lc3NhZ2UpKTtcbiAgICAgICAgY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgKi9cblxuICAgIC8qIE9uIHNlYXJjaCBpcyBjYWxsZWQgd2hlbiBAIGNoYXJhY3RlciBpcyBlbnRlcmVkIGFuZCB3aWxsIGRpc3BsYXkgdGhlIG1lbnRpb24gKi9cblxuICAgIC8qXG4gICAgY29uc3Qgb25TZWFyY2ggPSBkZWJvdW5jZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcIm1lbnRpb25cIikge1xuICAgICAgICBnZXRNZW50aW9uU3VnZ2VzdGlvbnMoe1xuICAgICAgICAgIHB1bHNlQ29udGV4dDogdmFsdWUsXG4gICAgICAgICAgc2VhcmNoRm9yOiBldmVudC5zZWFyY2hcbiAgICAgICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgc2V0TWVudGlvblJlc3VsdHMocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRUYWdTdWdnZXN0aW9ucyh7XG4gICAgICAgICAgc2VhcmNoRm9yOiBldmVudC5zZWFyY2hcbiAgICAgICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgc2V0VGFnUmVzdWx0cyhyZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCAxNTApO1xuXG4gICAgY29uc3QgdXNlck5hbWUgPSBnZXRQQ29ubmVjdCgpLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9yTmFtZSgpO1xuICAgIGNvbnN0IGltYWdlS2V5ID0gZ2V0UENvbm5lY3QoKS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvckltYWdlSW5zS2V5KCk7XG5cbiAgICBjb25zdCBvbkZpbGVzQWRkZWQgPSB1c2VDYWxsYmFjaygobmV3bHlBZGRlZEZpbGVzKSA9PiB7XG4gICAgICBzZXRBdHRhY2htZW50cygoY3VycmVudCkgPT4gW1xuICAgICAgICAuLi5uZXdseUFkZGVkRmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZU1heFNpemUoZmlsZSwgNSkpIHtcbiAgICAgICAgICAgIGZpbGUuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgZmlsZS5tZXRhID0gXCJGaWxlIGlzIHRvbyBiaWcuIE1heCBhbGxvd2VkIHNpemUgaXMgNU1CLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWxlLmljb24gPSBnZXRJY29uRnJvbUZpbGVUeXBlKGZpbGUudHlwZSk7XG4gICAgICAgICAgZmlsZS5vbkRlbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHNldEF0dGFjaG1lbnRzKChjKSA9PiBjLmZpbHRlcigoZikgPT4gZi5uYW1lICE9PSBmaWxlLm5hbWUpKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgICB9KSxcbiAgICAgICAgLi4uY3VycmVudFxuICAgICAgXSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3Qgb25GaWx0ZXJDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChmaWx0ZXJJRCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkRmlsdGVycyA9IFsuLi5mZWVkRmlsdGVyc107XG4gICAgICAgIGNvbnN0IGZpbHRlclRvVXBkYXRlID0gdXBkYXRlZEZpbHRlcnMuZmluZChcbiAgICAgICAgICAoZmVlZEl0ZW0pID0+IGZlZWRJdGVtLmlkID09PSBmaWx0ZXJJRFxuICAgICAgICApO1xuICAgICAgICBmaWx0ZXJUb1VwZGF0ZS5vbiA9ICFmaWx0ZXJUb1VwZGF0ZS5vbjtcbiAgICAgICAgaWYgKGZpbHRlcklEID09PSBcIkFsbFwiKVxuICAgICAgICAgIHVwZGF0ZWRGaWx0ZXJzLmZvckVhY2goKGZlZWRGaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIGZlZWRGaWx0ZXIub24gPSBmaWx0ZXJUb1VwZGF0ZS5vbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgdXBkYXRlZEZpbHRlcnMuZmluZChcbiAgICAgICAgICAgIChmZWVkSXRlbSkgPT4gZmVlZEl0ZW0ub24gPT09IGZhbHNlICYmIGZlZWRJdGVtLmlkICE9PSBcIkFsbFwiXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgdXBkYXRlZEZpbHRlcnMuZmluZCgoZmVlZEl0ZW0pID0+IGZlZWRJdGVtLmlkID09PSBcIkFsbFwiKS5vbiA9IGZhbHNlO1xuICAgICAgICBlbHNlIHVwZGF0ZWRGaWx0ZXJzLmZpbmQoKGZlZWRJdGVtKSA9PiBmZWVkSXRlbS5pZCA9PT0gXCJBbGxcIikub24gPSB0cnVlO1xuICAgICAgICBzZXRGZWVkRmlsdGVycyh1cGRhdGVkRmlsdGVycyk7XG4gICAgICAgIGZldGNoTWVzc2FnZXMoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZmVlZElELFxuICAgICAgICAgIGZlZWRDbGFzcyxcbiAgICAgICAgICBmZWVkRmlsdGVycyxcbiAgICAgICAgICBmZXRjaE1lc3NhZ2VzQ2FuY2VsVG9rZW5Tb3VyY2UuY3VycmVudFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGZlZWRJRCxcbiAgICAgICAgZmVlZENsYXNzLFxuICAgICAgICBmZWVkRmlsdGVycyxcbiAgICAgICAgZmV0Y2hNZXNzYWdlc0NhbmNlbFRva2VuU291cmNlLFxuICAgICAgICBmZXRjaE1lc3NhZ2VzXG4gICAgICBdXG4gICAgKTtcblxuICAgICovXG5cbiAgICAvLyBzZXQgdXAgc3ZnIGltYWdlc1xuICAgIHRoaXMuc3ZnQ29tbWVudCQgPSB0aGlzLnV0aWxzLmdldEltYWdlU3JjKCdjaGF0JywgdGhpcy51dGlscy5nZXRTREtTdGF0aWNDb250ZW50VXJsKCkpO1xuICAgIHRoaXMuc3ZnTGlrZSQgPSB0aGlzLnV0aWxzLmdldEltYWdlU3JjKCd0aHVtYnMtdXAnLCB0aGlzLnV0aWxzLmdldFNES1N0YXRpY0NvbnRlbnRVcmwoKSk7XG4gICAgdGhpcy5zdmdMaWtlZEJ5TWUkID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygndGh1bWJzLXVwLXNvbGlkJywgdGhpcy51dGlscy5nZXRTREtTdGF0aWNDb250ZW50VXJsKCkpO1xuICAgIHRoaXMuc3ZnU2VuZCQgPSB0aGlzLnV0aWxzLmdldEltYWdlU3JjKCdzZW5kJywgdGhpcy51dGlscy5nZXRTREtTdGF0aWNDb250ZW50VXJsKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENhbGxiYWNrIHBhc3NlZCB3aGVuIHN1YnNjcmliaW5nIHRvIHN0b3JlIGNoYW5nZVxuICBvblN0YXRlQ2hhbmdlKCkge1xuICAgIGNvbnN0IGJMb2dnaW5nID0gZmFsc2U7XG4gICAgaWYgKGJMb2dnaW5nKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyggYGluICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBvblN0YXRlQ2hhbmdlYCApO1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgfVxuICAgIC8vIFNob3VsZCBhbHdheXMgY2hlY2sgdGhlIGJyaWRnZSB0byBzZWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICAgIGNvbnN0IGJVcGRhdGVTZWxmID0gdGhpcy5hbmd1bGFyUENvbm5lY3Quc2hvdWxkQ29tcG9uZW50VXBkYXRlKHRoaXMpO1xuICAgIC8vIGNvbnNvbGUubG9nKCBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IHNob3VsZENvbXBvbmVudFVwZGF0ZTogJHtiVXBkYXRlU2VsZn1gKTtcblxuICAgIC8vIE9OTFkgY2FsbCB1cGRhdGVTZWxmIHdoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlXG4gICAgLy8gICAgQU5EIHJlbW92aW5nIHRoZSBcImdhdGVcIiB0aGF0IHdhcyBwdXQgdGhlcmUgc2luY2Ugc2hvdWxkQ29tcG9uZW50VXBkYXRlXG4gICAgLy8gICAgICBzaG91bGQgYmUgdGhlIHJlYWwgXCJnYXRlXCJcbiAgICBpZiAoYlVwZGF0ZVNlbGYpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdHMtaWdub3JlIC0gcGFyYW1ldGVyIOKAnGNvbnRleHROYW1l4oCdIGZvciBnZXREYXRhT2JqZWN0IG1ldGhvZCBzaG91bGQgYmUgb3B0aW9uYWxcbiAgICAgIGNvbnN0IG5ld1B1bHNlRGF0YSA9IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoKS5wdWxzZTtcblxuICAgICAgaWYgKCFpc0VxdWFsKG5ld1B1bHNlRGF0YSwgdGhpcy5wdWxzZURhdGEpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmUgLSBwYXJhbWV0ZXIg4oCcY29udGV4dE5hbWXigJ0gZm9yIGdldERhdGFPYmplY3QgbWV0aG9kIHNob3VsZCBiZSBvcHRpb25hbFxuICAgIHRoaXMucHVsc2VEYXRhID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpLnB1bHNlO1xuICB9XG5cbiAgdXBkYXRlU2VsZigpIHtcbiAgICB0aGlzLmdldE1lc3NhZ2VEYXRhKCk7XG4gIH1cblxuICBnZXRNZXNzYWdlRGF0YSgpIHtcbiAgICBjb25zdCBtZXNzYWdlSURzID0gKHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkgYXMgYW55KS5tZXNzYWdlSURzO1xuICAgIGNvbnN0IHVzZXJOYW1lID0gKHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkgYXMgYW55KS5jdXJyZW50VXNlcjtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2Vjb25kIHBhcmFtZXRlciBwYWdlUmVmZXJlbmNlIGZvciBnZXRWYWx1ZSBtZXRob2Qgc2hvdWxkIGJlIG9wdGlvbmFsXG4gICAgY29uc3QgaW1hZ2VLZXkgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSgnT3BlcmF0b3JJRC5weUltYWdlSW5zS2V5Jyk7XG5cbiAgICAvLyBAdHMtaWdub3JlIC0gcGFyYW1ldGVyIOKAnGNvbnRleHROYW1l4oCdIGZvciBnZXREYXRhT2JqZWN0IG1ldGhvZCBzaG91bGQgYmUgb3B0aW9uYWxcbiAgICBjb25zdCBvRGF0YTogYW55ID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpO1xuXG4gICAgaWYgKG1lc3NhZ2VJRHMgJiYgbWVzc2FnZUlEcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnB1bHNlTWVzc2FnZXMkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvRGF0YS5wdWxzZS5tZXNzYWdlcykpO1xuXG4gICAgICAvLyBjb252ZXJ0IHRvIGp1c3QgYW4gYXJyYXkgb2Ygb2JqZWN0c1xuICAgICAgdGhpcy5wdWxzZU1lc3NhZ2VzJCA9IHRoaXMuY29udmVydFRvQXJyYXkodGhpcy5wdWxzZU1lc3NhZ2VzJCk7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIGNvcHksIHNvIHdlIGNhbiBtb2RpZnlcbiAgICAgIHRoaXMucHVsc2VNZXNzYWdlcyQgPSB0aGlzLmFwcGVuZFB1bHNlTWVzc2FnZSh0aGlzLnB1bHNlTWVzc2FnZXMkKTtcblxuICAgICAgLy8gbW9zdCByZWNlbnQgb24gdG9wXG4gICAgICB0aGlzLnB1bHNlTWVzc2FnZXMkID0gdGhpcy5wdWxzZU1lc3NhZ2VzJC5zb3J0KChhLCBiKSA9PiAoYS51cGRhdGVUaW1lVVRDIDwgYi51cGRhdGVUaW1lVVRDID8gMSA6IC0xKSk7XG4gICAgfVxuICB9XG5cbiAgY29udmVydFRvQXJyYXkobWVzc2FnZXM6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IGFyTWVzc2FnZXM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhck1lc3NhZ2VzLnB1c2gobWVzc2FnZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiBhck1lc3NhZ2VzO1xuICB9XG5cbiAgYXBwZW5kUHVsc2VNZXNzYWdlKG1lc3NhZ2VzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbaV07XG4gICAgICBjb25zdCBwb3N0ZWRUaW1lID0gbWVzc2FnZS5wb3N0ZWRUaW1lO1xuICAgICAgY29uc3QgdXBkYXRlZFRpbWUgPSBtZXNzYWdlLnVwZGF0ZWRUaW1lO1xuXG4gICAgICB0aGlzLnNob3dSZXBseUNvbW1lbnQkW21lc3NhZ2UuSURdID0gZmFsc2U7XG5cbiAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZFRpbWUgPSB0aGlzLnV0aWxzLmdlbmVyYXRlRGF0ZVRpbWUocG9zdGVkVGltZSwgJ0RhdGVUaW1lLVNpbmNlJyk7XG5cbiAgICAgIC8vIGZvciBzb3J0aW5nIGxhc3RlZCB1cGRhdGVcbiAgICAgIGlmICh1cGRhdGVkVGltZSAhPSBudWxsKSB7XG4gICAgICAgIG1lc3NhZ2UudXBkYXRlVGltZVVUQyA9IG5ldyBEYXRlKHVwZGF0ZWRUaW1lKS5nZXRUaW1lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlLnVwZGF0ZVRpbWVVVEMgPSBuZXcgRGF0ZShwb3N0ZWRUaW1lKS5nZXRUaW1lKCk7XG4gICAgICB9XG5cbiAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5ID0gbWVzc2FnZS5wb3N0ZWRCeVVzZXIubmFtZTtcbiAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5SW5pdGlhbHMgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKG1lc3NhZ2UucG9zdGVkQnlVc2VyLm5hbWUpO1xuXG4gICAgICAvLyBpZiBkaWRuJ3QgYnJlYWssIHRoZW4gbG9vayBhdCB0aGUgcmVwbGllc1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtZXNzYWdlLnJlcGxpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgcmVwbHkgPSBtZXNzYWdlLnJlcGxpZXNbal07XG5cbiAgICAgICAgY29uc3QgcmVwbHlQb3N0ZWRUaW1lID0gcmVwbHkucG9zdGVkVGltZTtcbiAgICAgICAgcmVwbHkuZGlzcGxheVBvc3RlZFRpbWUgPSB0aGlzLnV0aWxzLmdlbmVyYXRlRGF0ZVRpbWUocmVwbHlQb3N0ZWRUaW1lLCAnRGF0ZVRpbWUtU2luY2UnKTtcblxuICAgICAgICAvLyBsZXQgb1JlcGx5VXNlciA9IHRoaXMudXNlckRhdGEuZ2V0KHJlcGx5LnBvc3RlZEJ5VXNlcik7XG4gICAgICAgIGNvbnN0IG9SZXBseVVzZXIgPSByZXBseS5wb3N0ZWRCeVVzZXI7XG5cbiAgICAgICAgaWYgKG9SZXBseVVzZXIpIHtcbiAgICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkQnkgPSBvUmVwbHlVc2VyLm5hbWU7XG4gICAgICAgICAgcmVwbHkuZGlzcGxheVBvc3RlZEJ5SW5pdGlhbHMgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKG9SZXBseVVzZXIubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGZvclxuXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xuICB9XG5cbiAgdXBkYXRlTWVzc2FnZXNXaXRoT3BlcmF0b3JzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wdWxzZU1lc3NhZ2VzJC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucHVsc2VNZXNzYWdlcyRbaV07XG5cbiAgICAgIGNvbnN0IHBvc3RlZFRpbWUgPSBtZXNzYWdlLnBvc3RlZFRpbWU7XG5cbiAgICAgIHRoaXMuc2hvd1JlcGx5Q29tbWVudCRbbWVzc2FnZS5JRF0gPSBmYWxzZTtcblxuICAgICAgbWVzc2FnZS5kaXNwbGF5UG9zdGVkVGltZSA9IHRoaXMudXRpbHMuZ2VuZXJhdGVEYXRlVGltZShwb3N0ZWRUaW1lLCAnRGF0ZVRpbWUtU2luY2UnKTtcblxuICAgICAgY29uc3Qgb1VzZXIgPSB0aGlzLnVzZXJEYXRhLmdldChtZXNzYWdlLnBvc3RlZEJ5KTtcblxuICAgICAgaWYgKG9Vc2VyKSB7XG4gICAgICAgIG1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5ID0gb1VzZXIucHlVc2VyTmFtZTtcbiAgICAgICAgbWVzc2FnZS5kaXNwbGF5UG9zdGVkQnlJbml0aWFscyA9IHRoaXMudXRpbHMuZ2V0SW5pdGlhbHMob1VzZXIucHlVc2VyTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvVXNlclBhcmFtcyA9IHtcbiAgICAgICAgICBPcGVyYXRvcklkOiBtZXNzYWdlLnBvc3RlZEJ5XG4gICAgICAgIH07XG4gICAgICAgIC8vIERvIHNvbWV0aGluZyB3aXRoIG9Vc2VyUGFyYW1zXG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGRpZG4ndCBicmVhaywgdGhlbiBsb29rIGF0IHRoZSByZXBsaWVzXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1lc3NhZ2UucmVwbGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCByZXBseSA9IG1lc3NhZ2UucmVwbGllc1tqXTtcblxuICAgICAgICBjb25zdCByZXBseVBvc3RlZFRpbWUgPSByZXBseS5wb3N0ZWRUaW1lO1xuICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkVGltZSA9IHRoaXMudXRpbHMuZ2VuZXJhdGVEYXRlVGltZShyZXBseVBvc3RlZFRpbWUsICdEYXRlVGltZS1TaW5jZScpO1xuXG4gICAgICAgIC8vIGxldCBvUmVwbHlVc2VyID0gdGhpcy51c2VyRGF0YS5nZXQocmVwbHkucG9zdGVkQnlVc2VyKTtcbiAgICAgICAgY29uc3Qgb1JlcGx5VXNlciA9IHJlcGx5LnBvc3RlZEJ5VXNlcjtcblxuICAgICAgICBpZiAob1JlcGx5VXNlcikge1xuICAgICAgICAgIHJlcGx5LmRpc3BsYXlQb3N0ZWRCeSA9IG9SZXBseVVzZXIubmFtZTtcbiAgICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkQnlJbml0aWFscyA9IHRoaXMudXRpbHMuZ2V0SW5pdGlhbHMob1JlcGx5VXNlci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gZm9yXG4gIH1cblxuICB1cGRhdGVDdXJyZW50VXNlck5hbWUoc1VzZXI6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudFVzZXJJbml0aWFscyQgPSB0aGlzLnV0aWxzLmdldEluaXRpYWxzKHNVc2VyKTtcbiAgICB0aGlzLmN1cnJlbnRVc2VyTmFtZSQgPSBzVXNlcjtcbiAgfVxuXG4gIHBvc3RDbGljaygpIHtcbiAgICAvLyBkb24ndCBzZW5kIGEgYmxhbmsgbWVzc2FnZVxuICAgIGlmICh0aGlzLnB1bHNlQ29udmVyc2F0aW9uICYmIHRoaXMucHVsc2VDb252ZXJzYXRpb24gIT0gJycpIHtcbiAgICAgIC8vIGxldCBwdWxzZU1lc3NhZ2UgPSB7XG4gICAgICAvLyAgIGNvbnRleHROYW1lIDogdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKSxcbiAgICAgIC8vICAgbWVzc2FnZTogdGhpcy5wdWxzZUNvbnZlcnNhdGlvbixcbiAgICAgIC8vICAgcHVsc2VDb250ZXh0OiB0aGlzLnBDb25uJC5nZXRWYWx1ZShcIi5wekluc0tleVwiKVxuICAgICAgLy8gfTtcblxuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAvLyB1c2VkIHRvIGJlOiB0aGlzLi8qZmVlZEFQSS4qL3Bvc3RNZXNzYWdlKHB1bHNlTWVzc2FnZSk7XG4gICAgICAvLyBXaXRoIGxhdGVzdCBGZWVkQVBJLCB0aGUgMXN0IGFyZyBzaG91bGQgYmUgZ2V0Q29uZmlnUHJvcHMoKS52YWx1ZVxuXG4gICAgICAvLyBJZiBmZWVkQVBJIGlzIGRlZmluZWQgdGhlbiBvbmx5IHBvc3QgbWVzc2FnZVxuICAgICAgaWYgKHRoaXMuZmVlZEFQSSkge1xuICAgICAgICB0aGlzLi8qIGZlZWRBUEkuICovIHBvc3RNZXNzYWdlKCh0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpIGFzIGFueSkudmFsdWUsIHRoaXMucHVsc2VDb252ZXJzYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJXZSBkb24ndCBzdXBwb3J0IFB1bHNlIHlldFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjbGVhciBvdXQgbG9jYWwgY29weVxuICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHVsc2VNZXNzYWdlJykgYXMgSFRNTEVsZW1lbnQgfCBhbnkpLnZhbHVlID0gJyc7XG4gICAgdGhpcy5wdWxzZUNvbnZlcnNhdGlvbiA9ICcnO1xuICB9XG5cbiAgbWVzc2FnZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5wdWxzZUNvbnZlcnNhdGlvbiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuXG4gIGxpa2VDbGljayhtZXNzYWdlSUQ6IHN0cmluZywgck1lc3NhZ2VJRDogc3RyaW5nLCBiTGlrZWRCeU1lOiBib29sZWFuLCBsZXZlbDogc3RyaW5nKSB7XG4gICAgbGV0IHB1bHNlTWVzc2FnZSA9IHt9O1xuXG4gICAgaWYgKGxldmVsID09PSAndG9wJykge1xuICAgICAgcHVsc2VNZXNzYWdlID0ge1xuICAgICAgICBwdWxzZUNvbnRleHQ6IHJNZXNzYWdlSUQsXG4gICAgICAgIGlzUmVwbHk6IG51bGwsXG4gICAgICAgIGNvbnRleHROYW1lOiB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpLFxuICAgICAgICBsaWtlZEJ5OiBiTGlrZWRCeU1lLFxuICAgICAgICBtZXNzYWdlSURcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1bHNlTWVzc2FnZSA9IHtcbiAgICAgICAgcHVsc2VDb250ZXh0OiByTWVzc2FnZUlELFxuICAgICAgICBpc1JlcGx5OiB0cnVlLFxuICAgICAgICBjb250ZXh0TmFtZTogdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKSxcbiAgICAgICAgbGlrZWRCeTogYkxpa2VkQnlNZSxcbiAgICAgICAgbWVzc2FnZUlEXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHRoaXMuLyogZmVlZEFQSS4gKi8gbGlrZU1lc3NhZ2UocHVsc2VNZXNzYWdlKTtcbiAgfVxuXG4gIGNvbW1lbnRDbGljayhtZXNzYWdlSUQpIHtcbiAgICAvLyBpdGVyYXRvciB0aHJvdWdoIG1lc3NhZ2VzLCBmaW5kIG1hdGNoLCB0dXJuIG9uIGNvbW1lbnQgZW50cnlcbiAgICBjb25zdCBmb3VuZE1lc3NhZ2UgPSB0aGlzLnB1bHNlTWVzc2FnZXMkLmZpbmQobWVzc2FnZSA9PiBtZXNzYWdlLklEID09PSBtZXNzYWdlSUQpO1xuXG4gICAgaWYgKGZvdW5kTWVzc2FnZSkge1xuICAgICAgdGhpcy5zaG93UmVwbHlDb21tZW50JFtmb3VuZE1lc3NhZ2UuSURdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHBvc3RDb21tZW50Q2xpY2sobWVzc2FnZUlEKSB7XG4gICAgLy8gZGVidWdnZXI7XG5cbiAgICBpZiAodGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSAmJiB0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdICE9ICcnKSB7XG4gICAgICAvLyBsZXQgcHVsc2VNZXNzYWdlID0ge1xuICAgICAgLy8gICBjb250ZXh0TmFtZSA6IHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCksXG4gICAgICAvLyAgIG1lc3NhZ2U6IHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0sXG4gICAgICAvLyAgIHB1bHNlQ29udGV4dDogbWVzc2FnZUlELFxuICAgICAgLy8gICByZXBseTogdHJ1ZVxuICAgICAgLy8gfTtcblxuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAvLyBVc2VkIHRvIGJlOiB0aGlzLi8qZmVlZEFQSS4qL3Bvc3RNZXNzYWdlKHB1bHNlTWVzc2FnZSk7XG4gICAgICAvLyAgTGF0ZXN0IHVwZGF0ZSB0byBBUEkgaGFzIGNoYW5nZWQgYW5kIHRoZSBwb3N0TWVzc2FnZSBhY3R1YWxseSBnZXRzXG4gICAgICAvLyAgdGhlIHB1bHNlIGNvbnRleHQuLi5cbiAgICAgIC8vIHVzZWQgdG8gdXNlOiBjb250ZXh0TmFtZVxuICAgICAgLy8gbmV3IEZlZWRBUEkgd2FudHMgYXJncyB0byBiZSBtZXNzYWdlSUQsIHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0sIHRydWUgKHNpbmNlIHRoaXMgaXMgYSByZXBseSlcbiAgICAgIHRoaXMuLyogZmVlZEFQSS4gKi8gcG9zdE1lc3NhZ2UobWVzc2FnZUlELCB0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdLCB0cnVlKTtcblxuICAgICAgdGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIG5ld0NvbW1lbnRDaGFuZ2UoZXZlbnQsIG1lc3NhZ2VJRCkge1xuICAgIHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0gPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbn1cbiIsIjxkaXY+XG4gIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XG4gICAgPGgzPlB1bHNlPC9oMz5cblxuICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgIDxiciAvPlxuICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXItYmlnXCI+e3sgdGhpcy5jdXJyZW50VXNlckluaXRpYWxzJCB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicHNkay1mdWxsLXdpZHRoXCI+XG4gICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCByb3dzPVwiNVwiIGlkPVwicHVsc2VNZXNzYWdlXCIgcGxhY2Vob2xkZXI9XCJTdGFydCBhIGNvbnZlcnNhdGlvblwiIHR5cGU9XCJ0ZXh0XCIgKGNoYW5nZSk9XCJtZXNzYWdlQ2hhbmdlKCRldmVudClcIj48L3RleHRhcmVhPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1ncmlkLWxpc3QgY29scz1cIjJcIiByb3dIZWlnaHQ9XCI2LjI1cmVtXCI+XG4gIDxtYXQtZ3JpZC10aWxlPiA8L21hdC1ncmlkLXRpbGU+XG4gIDxtYXQtZ3JpZC10aWxlPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInBvc3RDbGljaygpXCI+UG9zdDwvYnV0dG9uPlxuICA8L21hdC1ncmlkLXRpbGU+XG48L21hdC1ncmlkLWxpc3Q+XG5cbjxkaXYgKm5nRm9yPVwibGV0IHB1bHNlTWVzc2FnZSBvZiBwdWxzZU1lc3NhZ2VzJDsgbGV0IG9kZCA9IG9kZFwiIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIm9kZCA/ICd3aGl0ZScgOiAnI2VlZWVlZSdcIj5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtZGl2aWRlclwiPjwvZGl2PlxuICA8YnIgLz5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXItYmlnXCI+e3sgcHVsc2VNZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeUluaXRpYWxzIH19PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1ncm91cFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1ieVwiPnt7IHB1bHNlTWVzc2FnZS5kaXNwbGF5UG9zdGVkQnkgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtdGltZVwiPnt7IHB1bHNlTWVzc2FnZS5kaXNwbGF5UG9zdGVkVGltZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS10ZXh0XCI+e3sgcHVsc2VNZXNzYWdlLm1lc3NhZ2UgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1hY3Rpb25zXCI+XG4gICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1hY3Rpb24tZ3JvdXBcIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiY29tbWVudENsaWNrKHB1bHNlTWVzc2FnZS5JRClcIj5cbiAgICAgICAgPGltZyBjbGFzcz1cInBzZGstY29tbWVudC1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0NvbW1lbnQkIH19XCIgLz5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWxpa2UtbGFiZWxcIlxuICAgICAgICAgID5Db21tZW50IDxzcGFuICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5yZXBsaWVzLmxlbmd0aCA+IDBcIj4gfCB7eyBwdWxzZU1lc3NhZ2UucmVwbGllcy5sZW5ndGggfX08L3NwYW4+PC9sYWJlbFxuICAgICAgICA+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWFjdGlvbi1saWtlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5saWtlQ291bnQ7IGVsc2Ugbm90TGlrZWRcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1bHNlTWVzc2FnZT8ubGlrZWRCeU1lID09ICd0cnVlJ1wiIG1hdC1idXR0b24gKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHB1bHNlTWVzc2FnZS5JRCwgdHJ1ZSwgJ3RvcCcpXCI+XG4gICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJwc2RrLWljb24tbGlrZWQtYnktbWVcIiBzdmdJY29uPVwidGh1bWItdXBcIiBtYXN0TGlzdEljb24gPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2VkLWJ5LW1lLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZWRCeU1lJCB9fVwiIC8+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWxpa2UtbGFiZWxcIj5MaWtlIHwge3sgcHVsc2VNZXNzYWdlLmxpa2VDb3VudCB9fTwvbGFiZWw+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5saWtlZEJ5TWUgIT0gJ3RydWUnXCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcHVsc2VNZXNzYWdlLklELCBmYWxzZSwgJ3RvcCcpXCI+XG4gICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJwc2RrLWljb25cIiBzdmdJY29uPVwidGh1bWItdXAtb3V0bGluZVwiIG1hc3RMaXN0SWNvbiA+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstbGlrZS1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0xpa2UkIH19XCIgLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtbGlrZS1sYWJlbFwiPkxpa2UgfCB7eyBwdWxzZU1lc3NhZ2UubGlrZUNvdW50IH19PC9sYWJlbD5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm90TGlrZWQ+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcHVsc2VNZXNzYWdlLklELCBmYWxzZSwgJ3RvcCcpXCI+XG4gICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJwc2RrLWljb25cIiBzdmdJY29uPVwidGh1bWItdXAtb3V0bGluZVwiIG1hc3RMaXN0SWNvbiA+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstbGlrZS1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0xpa2UkIH19XCIgLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtbGlrZS1sYWJlbFwiPkxpa2U8L2xhYmVsPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJwdWxzZU1lc3NhZ2U/LnJlcGxpZXNcIiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHlcIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCByZXBseU1lc3NhZ2Ugb2YgcHVsc2VNZXNzYWdlLnJlcGxpZXNcIiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktYWxpZ25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgIDxiciAvPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktZ3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstYXZhdGFyXCI+e3sgcmVwbHlNZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeUluaXRpYWxzIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWJ5XCI+e3sgcmVwbHlNZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1tZXNzYWdlXCI+e3sgcmVwbHlNZXNzYWdlLm1lc3NhZ2UgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImNvbW1lbnRDbGljayhwdWxzZU1lc3NhZ2UuSUQpXCIgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWNvbW1lbnRcIj5cbiAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1jb21tZW50LXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnQ29tbWVudCQgfX1cIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInJlcGx5TWVzc2FnZT8ubGlrZUNvdW50OyBlbHNlIHJlcGx5Tm90TGlrZWRcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInJlcGx5TWVzc2FnZT8ubGlrZWRCeU1lID09PSAndHJ1ZSdcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHJlcGx5TWVzc2FnZS5JRCwgdHJ1ZSwgJ3JlcGx5JylcIlxuICAgICAgICAgICAgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWxpa2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2VkLWJ5LW1lLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZWRCeU1lJCB9fVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJyZXBseU1lc3NhZ2U/Lmxpa2VkQnlNZSAhPSAndHJ1ZSdcIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImxpa2VDbGljayhwdWxzZU1lc3NhZ2UuSUQsIHJlcGx5TWVzc2FnZS5JRCwgZmFsc2UsICdyZXBseScpXCJcbiAgICAgICAgICAgIGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1saWtlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1saWtlLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZSQgfX1cIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktbGlrZS1sYWJlbFwiPkxpa2UgfCB7eyByZXBseU1lc3NhZ2UubGlrZUNvdW50IH19PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwbHlOb3RMaWtlZD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInJlcGx5TWVzc2FnZT8ubGlrZWRCeU1lICE9ICd0cnVlJ1wiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcmVwbHlNZXNzYWdlLklELCBmYWxzZSwgJ3JlcGx5JylcIlxuICAgICAgICAgICAgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWxpa2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2Utc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdMaWtlJCB9fVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktdGltZVwiPnt7IHJlcGx5TWVzc2FnZS5kaXNwbGF5UG9zdGVkVGltZSB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8YnIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93UmVwbHlDb21tZW50JFtwdWxzZU1lc3NhZ2UuSURdID09IHRydWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgIDxiciAvPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtY29tbWVudC1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXJcIj57eyB0aGlzLmN1cnJlbnRVc2VySW5pdGlhbHMkIH19PC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInBzZGstZnVsbC13aWR0aFwiPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIHJvd3M9XCI1XCJcbiAgICAgICAgICAgIGlkPVwicHVsc2VNZXNzYWdlXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWRkIGEgY29tbWVudFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm5ld0NvbW1lbnRDaGFuZ2UoJGV2ZW50LCBwdWxzZU1lc3NhZ2UuSUQpXCJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJwb3N0Q29tbWVudENsaWNrKHB1bHNlTWVzc2FnZS5JRClcIiBjbGFzcz1cInBzZGstcHVsc2UtY29tbWVudC1wb3N0XCI+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstc2VuZC1zdmctaWNvblwiIHNyYz1cInt7IHN2Z1NlbmQkIH19XCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxiciAvPlxuPC9kaXY+XG4iXX0=