@banta/sdk 4.6.4 → 4.6.6

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.
@@ -1,5 +1,7 @@
1
+ import { __awaiter } from "tslib";
1
2
  import { Component, Output, Input, HostBinding, ElementRef } from "@angular/core";
2
3
  import { Subject } from 'rxjs';
4
+ import { take } from 'rxjs/operators';
3
5
  export class CommentComponent {
4
6
  constructor(elementRef) {
5
7
  this.elementRef = elementRef;
@@ -15,6 +17,8 @@ export class CommentComponent {
15
17
  this.isNew = false;
16
18
  this.visible = false;
17
19
  this.showReplyAction = true;
20
+ this.loaded = new Subject();
21
+ this.isLoaded = false;
18
22
  this.mine = false;
19
23
  this.editing = false;
20
24
  this._editStarted = new Subject();
@@ -35,10 +39,35 @@ export class CommentComponent {
35
39
  setTimeout(() => this.isNew = false, 1000);
36
40
  }, randomTime);
37
41
  }
42
+ markAttachmentsLoaded() {
43
+ this.isLoaded = true;
44
+ this.loaded.next();
45
+ }
38
46
  get isHighlighted() {
39
47
  var _a, _b, _c;
40
48
  return (_c = (_b = (_a = this.message) === null || _a === void 0 ? void 0 : _a.transientState) === null || _b === void 0 ? void 0 : _b.highlighted) !== null && _c !== void 0 ? _c : false;
41
49
  }
50
+ get message() {
51
+ return this._message;
52
+ }
53
+ set message(value) {
54
+ var _a;
55
+ this._message = value;
56
+ if (((_a = this._message.attachments) === null || _a === void 0 ? void 0 : _a.length) > 0) {
57
+ this.isLoaded = false;
58
+ }
59
+ else {
60
+ this.isLoaded = true;
61
+ this.loaded.next();
62
+ }
63
+ }
64
+ waitForLoad() {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ if (this.isLoaded)
67
+ return true;
68
+ yield this.loaded.pipe(take(1)).toPromise();
69
+ });
70
+ }
42
71
  get userSelected() {
43
72
  return this._userSelected.asObservable();
44
73
  }
@@ -120,7 +149,7 @@ export class CommentComponent {
120
149
  CommentComponent.decorators = [
121
150
  { type: Component, args: [{
122
151
  selector: 'banta-comment',
123
- template: "\r\n<mat-menu #pointItemMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"share()\">\r\n <mat-icon>share</mat-icon>\r\n Share\r\n </button>\r\n <button *ngIf=\"!mine\" mat-menu-item (click)=\"report()\">\r\n <mat-icon>warning</mat-icon>\r\n Report\r\n </button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canEdit\" mat-menu-item (click)=\"startEdit()\">\r\n <mat-icon>edit</mat-icon>\r\n Edit\r\n </button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canDelete\" mat-menu-item (click)=\"delete()\">\r\n <mat-icon>delete</mat-icon>\r\n Delete\r\n </button>\r\n\r\n <button *ngFor=\"let menuItem of customMenuItems\" mat-menu-item (click)=\"menuItem.action(message)\">\r\n <mat-icon>{{menuItem.icon}}</mat-icon>\r\n {{menuItem.label}}\r\n </button>\r\n\r\n</mat-menu>\r\n\r\n<div class=\"message-content\">\r\n <div class=\"user\">\r\n <div class=\"user-1\">\r\n <a\r\n href=\"javascript:;\"\r\n class=\"avatar\"\r\n (click)=\"selectAvatar(message.user)\"\r\n [style.background-image]=\"avatarForUser(message.user)\"></a>\r\n <div class=\"user-identity\">\r\n <a href=\"javascript:;\" class=\"display-name\" (click)=\"selectUser()\">{{message.user.displayName}}</a>\r\n <a href=\"javascript:;\" class=\"username\" (click)=\"selectUsername(message.user)\">@{{message.user.username}}</a>\r\n </div>\r\n </div>\r\n <div class=\"user-2\">\r\n <span class=\"user-tag\" *ngIf=\"message.user.tag\">{{message.user.tag}}</span>\r\n <banta-timestamp [value]=\"message.sentAt\"></banta-timestamp>\r\n <span class=\"spacer\"></span>\r\n </div>\r\n </div>\r\n <div class=\"content\" *ngIf=\"!editing\">\r\n <span class=\"banta-message-content\" [innerHTML]=\"message.message | markdownToHtml\"></span>\r\n <banta-attachments [attachments]=\"message.attachments\"></banta-attachments>\r\n <ul class=\"message-facts\">\r\n <li *ngIf=\"message.edits?.length > 0\">(Edited)</li>\r\n </ul>\r\n </div>\r\n <div class=\"content\" *ngIf=\"editing\" style=\"padding-bottom: 2em;\">\r\n <div>\r\n <mat-form-field floatLabel=\"always\" appearance=\"outline\" style=\"width: 100%;\">\r\n <mat-label>Edit Message</mat-label>\r\n <textarea matInput [(ngModel)]=\"editedMessage\" [maxlength]=\"maxLength\"></textarea>\r\n </mat-form-field>\r\n </div>\r\n <button mat-raised-button (click)=\"saveEdit()\">Save</button> &nbsp;\r\n <button mat-button (click)=\"endEditing()\">Cancel</button>\r\n </div>\r\n\r\n\r\n <div class=\"actions\">\r\n <div class=\"spacer\"></div>\r\n <div class=\"counted-action\" *ngIf=\"showReplyAction\">\r\n <button mat-button [matTooltip]=\"replyCount > 0 ? 'Replies' : 'Reply'\" matTooltipPosition=\"below\" (click)=\"select()\">\r\n <mat-icon [inline]=\"true\">comment</mat-icon>\r\n <span class=\"count-indicator\">\r\n {{replyCount > 0 ? 'Replies' : 'Reply'}}\r\n {{replyCount > 0 ? '(' + replyCount + ')' : ''}}\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"counted-action\" [class.active]=\"message.userState?.liked\">\r\n <button \r\n *ngIf=\"message.transientState?.liking\"\r\n mat-icon-button \r\n [disabled]=\"true\" \r\n [matTooltip]=\"upvoting ? 'Please wait...' : message.userState?.liked ? 'Unlike' : 'Like'\" \r\n matTooltipPosition=\"below\" \r\n >\r\n <mat-spinner [diameter]=\"15\" style=\"margin-left: 1em;\"></mat-spinner>\r\n </button>\r\n <button \r\n *ngIf=\"!message.transientState?.liking\"\r\n mat-button \r\n [matTooltip]=\"permissions?.canLike ? upvoting ? 'Please wait...' : 'Like' : permissions?.canLikeErrorMessage\" \r\n matTooltipPosition=\"below\" \r\n (click)=\"message.userState?.liked ? unlike() : like()\" \r\n >\r\n <mat-icon [inline]=\"true\">thumb_up</mat-icon>\r\n <span class=\"count-indicator\" *ngIf=\"message.likes > 0\">\r\n {{message.likes}}\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <button mat-icon-button [matMenuTriggerFor]=\"pointItemMenu\">\r\n <mat-icon [inline]=\"true\">more_vert</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n",
152
+ template: "\r\n<mat-menu #pointItemMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"share()\">\r\n <mat-icon>share</mat-icon>\r\n Share\r\n </button>\r\n <button *ngIf=\"!mine\" mat-menu-item (click)=\"report()\">\r\n <mat-icon>warning</mat-icon>\r\n Report\r\n </button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canEdit\" mat-menu-item (click)=\"startEdit()\">\r\n <mat-icon>edit</mat-icon>\r\n Edit\r\n </button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canDelete\" mat-menu-item (click)=\"delete()\">\r\n <mat-icon>delete</mat-icon>\r\n Delete\r\n </button>\r\n\r\n <button *ngFor=\"let menuItem of customMenuItems\" mat-menu-item (click)=\"menuItem.action(message)\">\r\n <mat-icon>{{menuItem.icon}}</mat-icon>\r\n {{menuItem.label}}\r\n </button>\r\n\r\n</mat-menu>\r\n\r\n<div class=\"message-content\">\r\n <div class=\"user\">\r\n <div class=\"user-1\">\r\n <a\r\n href=\"javascript:;\"\r\n class=\"avatar\"\r\n (click)=\"selectAvatar(message.user)\"\r\n [style.background-image]=\"avatarForUser(message.user)\"></a>\r\n <div class=\"user-identity\">\r\n <a href=\"javascript:;\" class=\"display-name\" (click)=\"selectUser()\">{{message.user.displayName}}</a>\r\n <a href=\"javascript:;\" class=\"username\" (click)=\"selectUsername(message.user)\">@{{message.user.username}}</a>\r\n </div>\r\n </div>\r\n <div class=\"user-2\">\r\n <span class=\"user-tag\" *ngIf=\"message.user.tag\">{{message.user.tag}}</span>\r\n <banta-timestamp [value]=\"message.sentAt\"></banta-timestamp>\r\n <span class=\"spacer\"></span>\r\n </div>\r\n </div>\r\n <div class=\"content\" *ngIf=\"!editing\">\r\n <span class=\"banta-message-content\" [innerHTML]=\"message.message | markdownToHtml\"></span>\r\n <banta-attachments \r\n [attachments]=\"message.attachments\"\r\n (loaded)=\"markAttachmentsLoaded()\"\r\n ></banta-attachments>\r\n <ul class=\"message-facts\">\r\n <li *ngIf=\"message.edits?.length > 0\">(Edited)</li>\r\n </ul>\r\n </div>\r\n <div class=\"content\" *ngIf=\"editing\" style=\"padding-bottom: 2em;\">\r\n <div>\r\n <mat-form-field floatLabel=\"always\" appearance=\"outline\" style=\"width: 100%;\">\r\n <mat-label>Edit Message</mat-label>\r\n <textarea matInput [(ngModel)]=\"editedMessage\" [maxlength]=\"maxLength\"></textarea>\r\n </mat-form-field>\r\n </div>\r\n <button mat-raised-button (click)=\"saveEdit()\">Save</button> &nbsp;\r\n <button mat-button (click)=\"endEditing()\">Cancel</button>\r\n </div>\r\n\r\n\r\n <div class=\"actions\">\r\n <div class=\"spacer\"></div>\r\n <div class=\"counted-action\" *ngIf=\"showReplyAction\">\r\n <button mat-button [matTooltip]=\"replyCount > 0 ? 'Replies' : 'Reply'\" matTooltipPosition=\"below\" (click)=\"select()\">\r\n <mat-icon [inline]=\"true\">comment</mat-icon>\r\n <span class=\"count-indicator\">\r\n {{replyCount > 0 ? 'Replies' : 'Reply'}}\r\n {{replyCount > 0 ? '(' + replyCount + ')' : ''}}\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"counted-action\" [class.active]=\"message.userState?.liked\">\r\n <button \r\n *ngIf=\"message.transientState?.liking\"\r\n mat-icon-button \r\n [disabled]=\"true\" \r\n [matTooltip]=\"upvoting ? 'Please wait...' : message.userState?.liked ? 'Unlike' : 'Like'\" \r\n matTooltipPosition=\"below\" \r\n >\r\n <mat-spinner [diameter]=\"15\" style=\"margin-left: 1em;\"></mat-spinner>\r\n </button>\r\n <button \r\n *ngIf=\"!message.transientState?.liking\"\r\n mat-button \r\n [matTooltip]=\"permissions?.canLike ? upvoting ? 'Please wait...' : 'Like' : permissions?.canLikeErrorMessage\" \r\n matTooltipPosition=\"below\" \r\n (click)=\"message.userState?.liked ? unlike() : like()\" \r\n >\r\n <mat-icon [inline]=\"true\">thumb_up</mat-icon>\r\n <span class=\"count-indicator\" *ngIf=\"message.likes > 0\">\r\n {{message.likes}}\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <button mat-icon-button [matMenuTriggerFor]=\"pointItemMenu\">\r\n <mat-icon [inline]=\"true\">more_vert</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n",
124
153
  styles: ["@-webkit-keyframes comment-appear{0%{transform:translate(6em)}to{transform:translate(0)}}@keyframes comment-appear{0%{transform:translate(6em)}to{transform:translate(0)}}:host{display:flex;flex-direction:column;position:relative;padding:.5em;visibility:hidden}:host.new{visibility:visible;-webkit-animation-name:comment-appear;animation-name:comment-appear;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:both;animation-fill-mode:both}:host.highlighted{background:#00223a;outline:2px solid #003277}:host.visible{visibility:visible}:host:hover{background:#eee}:host .message-content .content{margin-left:60px;margin-right:.5em}:host .message-content .attachments-row{margin-top:15px;display:flex;gap:10px}:host .message-content .attachments-row img{border-radius:10px;width:300px;max-width:100%;max-height:20em;-o-object-fit:cover;object-fit:cover}:host.abbreviated .message-content .content{text-overflow:ellipsis;overflow-y:hidden}:host .actions{display:flex;padding-right:10px;margin-left:60px;align-items:center}:host .actions button,banta-timestamp{color:#666;flex-shrink:0}banta-timestamp{font-size:10pt;margin-left:1em;text-align:right}.user{position:relative;margin:1em 0 0;display:flex;align-items:center;flex-wrap:wrap}.user .user-1,.user .user-2{display:flex;flex-wrap:nowrap;align-items:center;min-width:0}.user .user-2{margin:1em 0}.user .user-identity{display:flex;flex-direction:column;min-width:0}.user .display-name,.user .username{z-index:1;position:relative;padding:0 0 0 1em;font-size:10pt;color:#000;margin:0 auto 0 0;display:block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex-shrink:1;flex-grow:0;min-width:0}.user .display-name.username.username.username,.user .username.username.username.username{color:#666}.avatar{height:48px;width:48px;background-position:50%;background-size:cover;background-color:#333;border-radius:100%;flex-shrink:0;flex-grow:0}.counted-action{display:flex;align-items:center}.counted-action.active .count-indicator,.counted-action.active button{color:#00a5ff}.counted-action button .count-indicator{margin-left:.5em}.count-indicator{font-size:9pt;padding:0 0 0 3px;color:#666}:host-context(.mat-dark-theme) .count-indicator{border-color:#333}:host-context(.mat-dark-theme):hover{background:#060606}.user-tag,:host-context(.mat-dark-theme) .user .display-name,:host-context(.mat-dark-theme) .user .username{color:#fff}.user-tag{text-transform:uppercase;font-size:12px;border:1px solid #b27373;background:#7a412b;padding:3px 5px;margin:0 .5em 0 1em;border-radius:3px}.spacer{flex-shrink:1;flex-grow:1}ul.message-facts{margin:0;padding:0;color:#666}ul.message-facts li{list-style-type:none;border-left:1px solid #666;font-size:10pt;padding-left:.5em;margin-left:.5em;margin-top:.5em}ul.message-facts li:first-child{border-left:1px solid transparent;margin-left:0;padding-left:0}@media (max-width:400px){.avatar{height:32px;width:32px}:host .actions{margin-left:0;margin-top:.5em}:host .message-content .content{margin-left:44px;margin-right:.5em}}:host-context(.banta-mobile) .avatar{height:32px;width:32px}:host-context(.banta-mobile) :host .actions{margin-left:0;margin-top:.5em}:host-context(.banta-mobile) :host .message-content .content{margin-left:44px;margin-right:.5em}.card-attachment a{display:flex;align-items:flex-start;gap:1em;width:100%;border:1px solid #666;border-radius:4px;padding:1em;box-sizing:border-box;background-color:#191919}.card-attachment a img{width:300px;aspect-ratio:16/9;-o-object-fit:cover;object-fit:cover;border-radius:10px}.card-attachment a h1{margin:0;font-size:30px}"]
125
154
  },] }
126
155
  ];
@@ -135,6 +164,7 @@ CommentComponent.propDecorators = {
135
164
  message: [{ type: Input }],
136
165
  customMenuItems: [{ type: Input }],
137
166
  showReplyAction: [{ type: Input }],
167
+ loaded: [{ type: Output }],
138
168
  userSelected: [{ type: Output }],
139
169
  usernameSelected: [{ type: Output }],
140
170
  avatarSelected: [{ type: Output }],
@@ -153,4 +183,4 @@ CommentComponent.propDecorators = {
153
183
  genericAvatarUrl: [{ type: Input }],
154
184
  commentId: [{ type: HostBinding, args: ['attr.data-comment-id',] }]
155
185
  };
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tZW50cy9jb21tZW50L2NvbW1lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFTL0IsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixZQUNZLFVBQW1DO1FBQW5DLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBUXZDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2hDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2hDLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzdCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRS9CLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBRXhDLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNwQyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDdEMsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVwQyxjQUFTLEdBQVcsSUFBSSxDQUFDO1FBZWxDLFVBQUssR0FBRyxLQUFLLENBQUM7UUFRZCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBU2hCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBdUJkLFNBQUksR0FBRyxLQUFLLENBQUM7UUFFYixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBbUNqQixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDbkMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsZUFBVSxHQUFHLElB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QUFFLE1BQU0sS0FBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUM7SUFDakYsQ0FBQzs7O1lBcExKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsMnRKQUF1Qzs7YUFFMUM7OztZQVQrQyxVQUFVOzs7d0JBK0JyRCxLQUFLO29CQWNMLFdBQVcsU0FBQyxXQUFXOzRCQUd2QixXQUFXLFNBQUMsbUJBQW1CO3NCQUsvQixXQUFXLFNBQUMsZUFBZTtzQkFHM0IsS0FBSzs4QkFHTCxLQUFLOzhCQUdMLEtBQUs7MkJBR1IsTUFBTTsrQkFLSCxNQUFNOzZCQUtULE1BQU07dUJBS0gsTUFBTTswQkFLTixLQUFLO21CQUNMLEtBQUs7c0JBRUwsS0FBSztvQkFvQkwsTUFBTTtzQkFLTixNQUFNO3VCQUtOLE1BQU07cUJBV04sTUFBTTtzQkFDTixNQUFNOzBCQUNOLE1BQU07d0JBQ04sTUFBTTtxQkFDTixNQUFNOytCQUVOLEtBQUs7d0JBRUwsV0FBVyxTQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBJbnB1dCwgSG9zdEJpbmRpbmcsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0UGVybWlzc2lvbnMsIFVzZXIgfSBmcm9tICdAYmFudGEvY29tbW9uJztcclxuaW1wb3J0IHsgTWVzc2FnZU1lbnVJdGVtIH0gZnJvbSBcIi4uLy4uL21lc3NhZ2UtbWVudS1pdGVtXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtY29tbWVudCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb21tZW50LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbW1lbnRDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVsZW1lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX2xpa2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3VubGlrZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIHByaXZhdGUgX3NoYXJlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG5cclxuXHRwcml2YXRlIF91c2VyU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cdHByaXZhdGUgX2F2YXRhclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8VXNlcj4oKTtcclxuXHRwcml2YXRlIF91c2VybmFtZVNlbGVjdGVkID0gbmV3IFN1YmplY3Q8VXNlcj4oKTtcclxuXHJcbiAgICBASW5wdXQoKSBtYXhMZW5ndGg6IG51bWJlciA9IDE1MDA7XHJcbiAgICBcclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGxldCBtYXhUaW1lID0gMTAwO1xyXG4gICAgICAgIGxldCBtaW5UaW1lID0gMDtcclxuICAgICAgICBsZXQgcmFuZG9tVGltZSA9IG1pblRpbWUgKyBNYXRoLnJhbmRvbSgpICogKG1heFRpbWUgLSBtaW5UaW1lKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNOZXcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaXNOZXcgPSBmYWxzZSwgMTAwMCk7XHJcbiAgICAgICAgfSwgcmFuZG9tVGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uZXcnKVxyXG4gICAgaXNOZXcgPSBmYWxzZTtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhpZ2hsaWdodGVkJylcclxuICAgIGdldCBpc0hpZ2hsaWdodGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U/LnRyYW5zaWVudFN0YXRlPy5oaWdobGlnaHRlZCA/PyBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnZpc2libGUnKVxyXG4gICAgdmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBtZXNzYWdlIDogQ2hhdE1lc3NhZ2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGN1c3RvbU1lbnVJdGVtczogTWVzc2FnZU1lbnVJdGVtW107XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNob3dSZXBseUFjdGlvbiA9IHRydWU7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG4gICAgZ2V0IHVzZXJTZWxlY3RlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgZ2V0IHVzZXJuYW1lU2VsZWN0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJuYW1lU2VsZWN0ZWQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdGdldCBhdmF0YXJTZWxlY3RlZCgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9hdmF0YXJTZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuXHR9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgcmVwb3J0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcG9ydGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHBlcm1pc3Npb25zOiBDaGF0UGVybWlzc2lvbnM7XHJcbiAgICBASW5wdXQoKSBtaW5lID0gZmFsc2U7XHJcbiAgICBcclxuICAgIEBJbnB1dCgpIGVkaXRpbmcgPSBmYWxzZTtcclxuICAgIGVkaXRlZE1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICBzYXZlRWRpdCgpIHtcclxuICAgICAgICB0aGlzLl9lZGl0ZWQubmV4dCh0aGlzLmVkaXRlZE1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuZEVkaXRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5fZWRpdEVuZGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydEVkaXQoKSB7XHJcbiAgICAgICAgdGhpcy5fZWRpdFN0YXJ0ZWQubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuZWRpdGVkTWVzc2FnZSA9IHRoaXMubWVzc2FnZS5tZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSgpIHtcclxuICAgICAgICB0aGlzLl9kZWxldGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCBsaWtlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGlrZWQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgdW5saWtlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdW5saWtlZC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCBzZWxlY3RlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZWRpdFN0YXJ0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfZGVsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF9lZGl0RW5kZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfZWRpdGVkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgXHJcblxyXG4gICAgQE91dHB1dCgpIGdldCBlZGl0ZWQoKSB7IHJldHVybiB0aGlzLl9lZGl0ZWQuYXNPYnNlcnZhYmxlKCk7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgZGVsZXRlZCgpIHsgcmV0dXJuIHRoaXMuX2RlbGV0ZWQuYXNPYnNlcnZhYmxlKCk7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgZWRpdFN0YXJ0ZWQoKSB7IHJldHVybiB0aGlzLl9lZGl0U3RhcnRlZC5hc09ic2VydmFibGUoKTsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBlZGl0RW5kZWQoKSB7IHJldHVybiB0aGlzLl9lZGl0RW5kZWQuYXNPYnNlcnZhYmxlKCk7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgc2hhcmVkKCl7IHJldHVybiB0aGlzLl9zaGFyZWQuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgICBASW5wdXQoKSBnZW5lcmljQXZhdGFyVXJsOiBzdHJpbmc7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtY29tbWVudC1pZCcpIGdldCBjb21tZW50SWQoKSB7IHJldHVybiB0aGlzLm1lc3NhZ2U/LmlkOyB9XHJcblxyXG4gICAgcmVwb3J0KCkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBsaWtlKCkge1xyXG4gICAgICAgIHRoaXMuX2xpa2VkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxpa2UoKSB7XHJcbiAgICAgICAgdGhpcy5fdW5saWtlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hhcmUoKSB7XHJcbiAgICAgICAgdGhpcy5fc2hhcmVkLm5leHQodGhpcy5tZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3QoKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuXHRzZWxlY3RVc2VyKCkge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZWxlY3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0VXNlcm5hbWUodXNlcjogVXNlcikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJuYW1lU2VsZWN0ZWQubmV4dCh1c2VyKTtcclxuXHRcdHRoaXMuc2VsZWN0VXNlcigpO1xyXG4gICAgfVxyXG5cclxuXHRzZWxlY3RBdmF0YXIodXNlcjogVXNlcikge1xyXG5cdFx0dGhpcy5fYXZhdGFyU2VsZWN0ZWQubmV4dCh1c2VyKTtcclxuXHRcdHRoaXMuc2VsZWN0VXNlcigpO1xyXG5cdH1cclxuXHJcbiAgICBhdmF0YXJGb3JVc2VyKHVzZXIgOiBVc2VyKSB7XHJcbiAgICAgICAgbGV0IHVybCA9IHRoaXMuZ2VuZXJpY0F2YXRhclVybDtcclxuXHJcbiAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5hdmF0YXJVcmwpIHtcclxuICAgICAgICAgICAgdXJsID0gdXNlci5hdmF0YXJVcmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYHVybCgke3VybH0pYDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVwbHlDb3VudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlLnN1Ym1lc3NhZ2VzPy5sZW5ndGggfHwgdGhpcy5tZXNzYWdlLnN1Ym1lc3NhZ2VDb3VudCB8fCAwO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tZW50cy9jb21tZW50L2NvbW1lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU90QyxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLFlBQ1ksVUFBbUM7UUFBbkMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFRdkMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsV0FBTSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDN0IsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFL0IsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFFeEMsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3BDLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN0QyxzQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRXBDLGNBQVMsR0FBVyxJQUFJLENBQUM7UUFvQmxDLFVBQUssR0FBRyxLQUFLLENBQUM7UUFRZCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBc0JoQixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUd2QixXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVyQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBNkJoQixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsWUFB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QVcsU0FBQyxlQUFlO3NCQUkzQixLQUFLOzhCQWVMLEtBQUs7OEJBR0wsS0FBSztxQkFHTCxNQUFNOzJCQVdULE1BQU07K0JBS0gsTUFBTTs2QkFLVCxNQUFNO3VCQUtILE1BQU07MEJBS04sS0FBSzttQkFDTCxLQUFLO3NCQUVMLEtBQUs7b0JBb0JMLE1BQU07c0JBS04sTUFBTTt1QkFLTixNQUFNO3FCQVdOLE1BQU07c0JBQ04sTUFBTTswQkFDTixNQUFNO3dCQUNOLE1BQU07cUJBQ04sTUFBTTsrQkFFTixLQUFLO3dCQUVMLFdBQVcsU0FBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE91dHB1dCwgSW5wdXQsIEhvc3RCaW5kaW5nLCBFbGVtZW50UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdFBlcm1pc3Npb25zLCBVc2VyIH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcbmltcG9ydCB7IE1lc3NhZ2VNZW51SXRlbSB9IGZyb20gXCIuLi8uLi9tZXNzYWdlLW1lbnUtaXRlbVwiO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWNvbW1lbnQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29tbWVudC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tZW50Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlbGVtZW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9yZXBvcnRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF9saWtlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF91bmxpa2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBwcml2YXRlIF9zaGFyZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuXHJcblx0cHJpdmF0ZSBfdXNlclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHRwcml2YXRlIF9hdmF0YXJTZWxlY3RlZCA9IG5ldyBTdWJqZWN0PFVzZXI+KCk7XHJcblx0cHJpdmF0ZSBfdXNlcm5hbWVTZWxlY3RlZCA9IG5ldyBTdWJqZWN0PFVzZXI+KCk7XHJcblxyXG4gICAgQElucHV0KCkgbWF4TGVuZ3RoOiBudW1iZXIgPSAxNTAwO1xyXG4gICAgXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBsZXQgbWF4VGltZSA9IDEwMDtcclxuICAgICAgICBsZXQgbWluVGltZSA9IDA7XHJcbiAgICAgICAgbGV0IHJhbmRvbVRpbWUgPSBtaW5UaW1lICsgTWF0aC5yYW5kb20oKSAqIChtYXhUaW1lIC0gbWluVGltZSk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmlzTmV3ID0gZmFsc2UsIDEwMDApO1xyXG4gICAgICAgIH0sIHJhbmRvbVRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBdHRhY2htZW50c0xvYWRlZCgpIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uZXcnKVxyXG4gICAgaXNOZXcgPSBmYWxzZTtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhpZ2hsaWdodGVkJylcclxuICAgIGdldCBpc0hpZ2hsaWdodGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U/LnRyYW5zaWVudFN0YXRlPy5oaWdobGlnaHRlZCA/PyBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnZpc2libGUnKVxyXG4gICAgdmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgX21lc3NhZ2UgOiBDaGF0TWVzc2FnZTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgbWVzc2FnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgbWVzc2FnZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5fbWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVkLm5leHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGN1c3RvbU1lbnVJdGVtczogTWVzc2FnZU1lbnVJdGVtW107XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNob3dSZXBseUFjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBsb2FkZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIHByaXZhdGUgaXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICBhc3luYyB3YWl0Rm9yTG9hZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0xvYWRlZClcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkZWQucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcblx0QE91dHB1dCgpXHJcbiAgICBnZXQgdXNlclNlbGVjdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU2VsZWN0ZWQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgdXNlcm5hbWVTZWxlY3RlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlcm5hbWVTZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcblx0QE91dHB1dCgpXHJcblx0Z2V0IGF2YXRhclNlbGVjdGVkKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2F2YXRhclNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cdH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCByZXBvcnRlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVwb3J0ZWQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcGVybWlzc2lvbnM6IENoYXRQZXJtaXNzaW9ucztcclxuICAgIEBJbnB1dCgpIG1pbmUgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgQElucHV0KCkgZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgZWRpdGVkTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIHNhdmVFZGl0KCkge1xyXG4gICAgICAgIHRoaXMuX2VkaXRlZC5uZXh0KHRoaXMuZWRpdGVkTWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5kRWRpdGluZygpIHtcclxuICAgICAgICB0aGlzLl9lZGl0RW5kZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0RWRpdCgpIHtcclxuICAgICAgICB0aGlzLl9lZGl0U3RhcnRlZC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5lZGl0ZWRNZXNzYWdlID0gdGhpcy5tZXNzYWdlLm1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKCkge1xyXG4gICAgICAgIHRoaXMuX2RlbGV0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgZ2V0IGxpa2VkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9saWtlZC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCB1bmxpa2VkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91bmxpa2VkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgZ2V0IHNlbGVjdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9lZGl0U3RhcnRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF9kZWxldGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX2VkaXRFbmRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF9lZGl0ZWQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBcclxuXHJcbiAgICBAT3V0cHV0KCkgZ2V0IGVkaXRlZCgpIHsgcmV0dXJuIHRoaXMuX2VkaXRlZC5hc09ic2VydmFibGUoKTsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBkZWxldGVkKCkgeyByZXR1cm4gdGhpcy5fZGVsZXRlZC5hc09ic2VydmFibGUoKTsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBlZGl0U3RhcnRlZCgpIHsgcmV0dXJuIHRoaXMuX2VkaXRTdGFydGVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IGVkaXRFbmRlZCgpIHsgcmV0dXJuIHRoaXMuX2VkaXRFbmRlZC5hc09ic2VydmFibGUoKTsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBzaGFyZWQoKXsgcmV0dXJuIHRoaXMuX3NoYXJlZC5hc09ic2VydmFibGUoKTsgfVxyXG5cclxuICAgIEBJbnB1dCgpIGdlbmVyaWNBdmF0YXJVcmw6IHN0cmluZztcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1jb21tZW50LWlkJykgZ2V0IGNvbW1lbnRJZCgpIHsgcmV0dXJuIHRoaXMubWVzc2FnZT8uaWQ7IH1cclxuXHJcbiAgICByZXBvcnQoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxpa2UoKSB7XHJcbiAgICAgICAgdGhpcy5fbGlrZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVubGlrZSgpIHtcclxuICAgICAgICB0aGlzLl91bmxpa2VkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaGFyZSgpIHtcclxuICAgICAgICB0aGlzLl9zaGFyZWQubmV4dCh0aGlzLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdCgpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG5cdHNlbGVjdFVzZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlbGVjdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVc2VybmFtZSh1c2VyOiBVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlcm5hbWVTZWxlY3RlZC5uZXh0KHVzZXIpO1xyXG5cdFx0dGhpcy5zZWxlY3RVc2VyKCk7XHJcbiAgICB9XHJcblxyXG5cdHNlbGVjdEF2YXRhcih1c2VyOiBVc2VyKSB7XHJcblx0XHR0aGlzLl9hdmF0YXJTZWxlY3RlZC5uZXh0KHVzZXIpO1xyXG5cdFx0dGhpcy5zZWxlY3RVc2VyKCk7XHJcblx0fVxyXG5cclxuICAgIGF2YXRhckZvclVzZXIodXNlciA6IFVzZXIpIHtcclxuICAgICAgICBsZXQgdXJsID0gdGhpcy5nZW5lcmljQXZhdGFyVXJsO1xyXG5cclxuICAgICAgICBpZiAodXNlciAmJiB1c2VyLmF2YXRhclVybCkge1xyXG4gICAgICAgICAgICB1cmwgPSB1c2VyLmF2YXRhclVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBgdXJsKCR7dXJsfSlgO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZXBseUNvdW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2Uuc3VibWVzc2FnZXM/Lmxlbmd0aCB8fCB0aGlzLm1lc3NhZ2Uuc3VibWVzc2FnZUNvdW50IHx8IDA7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -355,6 +355,9 @@ export class CommentFieldComponent {
355
355
  }
356
356
  finally {
357
357
  this.sending = false;
358
+ setTimeout(() => {
359
+ this.textareaEl.nativeElement.focus();
360
+ }, 100);
358
361
  }
359
362
  });
360
363
  }
@@ -413,4 +416,4 @@ CommentFieldComponent.propDecorators = {
413
416
  permissionDeniedError: [{ type: Output }],
414
417
  submit: [{ type: Input }]
415
418
  };
416
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tZW50cy9jb21tZW50LWZpZWxkL2NvbW1lbnQtZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBc0JyQyxNQUFNLE9BQU8scUJBQXFCO0lBQzlCLFlBQW9CLFdBQTRCO1FBQTVCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQWtDeEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFLbkMsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNULHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV4QixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDckMsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVuRCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBR1osVUFBSyxHQUFZLEVBQUUsQ0FBQztRQVlwQiw2QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFDaEMsd0JBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7UUF3RWhFLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDbkIsaUJBQVksR0FBRyxTQUFTLENBQUM7UUFDekIsVUFBSyxHQUFHLGdCQUFnQixDQUFDO1FBQ3pCLDBCQUFx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RSxVQUFVO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ2YsT0FBTztRQUNYLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OztZQTViSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsOG5LQUE2Qzs7YUFFaEQ7OztZQXhCUSxlQUFlOzs7cUJBOEJuQixLQUFLO21CQStCTCxLQUFLO3lCQUVMLFdBQVcsU0FBQyxtQkFBbUIsY0FDL0IsS0FBSzsrQkFFTCxLQUFLOzZCQUVMLE1BQU07aUNBQ04sTUFBTTsrQkFLTixLQUFLO3dCQXVGTCxLQUFLOzJCQUNMLEtBQUs7b0JBQ0wsS0FBSztvQ0FDTCxLQUFLOzBCQUNMLEtBQUs7d0JBQ0wsS0FBSzswQkFDTCxLQUFLOzBCQUNMLE1BQU07eUNBQ04sS0FBSzs2QkFFTCxTQUFTLFNBQUMsY0FBYztzQ0FDeEIsU0FBUyxTQUFDLHVCQUF1Qjt5QkFDakMsU0FBUyxTQUFDLFVBQVU7dUJBRXBCLEtBQUs7MkJBQ0wsS0FBSzsrQkFDTCxLQUFLO29DQU9MLE1BQU07cUJBNk5OLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VBdHRhY2htZW50LCBVc2VyIH0gZnJvbSBcIkBiYW50YS9jb21tb25cIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlIH0gZnJvbSBcIi4uLy4uL2NoYXQtYmFja2VuZC1iYXNlXCI7XHJcbmltcG9ydCB7IENoYXRTb3VyY2VCYXNlIH0gZnJvbSBcIi4uLy4uL2NoYXQtc291cmNlLWJhc2VcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudEZyYWdtZW50IH0gZnJvbSBcIi4uLy4uL2F0dGFjaG1lbnQtc2NyYXBlclwiO1xyXG5pbXBvcnQgeyBFTU9KSVMgfSBmcm9tIFwiLi4vLi4vZW1vamlcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0NvbXBsZXRlT3B0aW9uIHtcclxuICAgIGxhYmVsIDogc3RyaW5nO1xyXG4gICAgYWN0aW9uPyA6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSGFzaFRhZyB7XHJcbiAgICBoYXNodGFnIDogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb24gOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBBdHRhY2htZW50RnJhZ21lbnRTdGF0ZSB7XHJcbiAgICBmcmFnbWVudDogQXR0YWNobWVudEZyYWdtZW50O1xyXG4gICAgcmVzb2x1dGlvbjogUHJvbWlzZTxDaGF0TWVzc2FnZUF0dGFjaG1lbnQ+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtY29tbWVudC1maWVsZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbWVudC1maWVsZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb21tZW50LWZpZWxkLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbW1lbnRGaWVsZENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYXRCYWNrZW5kOiBDaGF0QmFja2VuZEJhc2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zb3VyY2UgOiBDaGF0U291cmNlQmFzZTtcclxuICAgIEBJbnB1dCgpIFxyXG4gICAgZ2V0IHNvdXJjZSgpIDogQ2hhdFNvdXJjZUJhc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHNvdXJjZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3Vicz8udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuX3N1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2UuY29ubmVjdGlvblN0YXRlQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuX3NvdXJjZS5jb25uZWN0aW9uU3RhdGVDaGFuZ2VkLnN1YnNjcmliZShzdGF0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2xvc3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE1lc3NhZ2UgPSBgUmVjb25uZWN0aW5nLi4uYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gJ3Jlc3RvcmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnRNZXNzYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnY29ubmVjdGluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50TWVzc2FnZSA9IGBDb25uZWN0aW5nLi4uYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3N1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICBASW5wdXQoKSB1c2VyIDogVXNlcjtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNhbi1jb21tZW50JylcclxuICAgIEBJbnB1dCgpIFxyXG4gICAgY2FuQ29tbWVudCA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBhbGxvd0F0dGFjaG1lbnRzID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpIHNpZ25JblNlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIEBPdXRwdXQoKSBlZGl0QXZhdGFyU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIHNlbmRpbmcgPSBmYWxzZTtcclxuICAgIHNlbmRFcnJvciA6IEVycm9yO1xyXG4gICAgZXhwYW5kRXJyb3IgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHRyYW5zaWVudE1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF90ZXh0IDogc3RyaW5nID0gJyc7XHJcbiAgICBnZXQgdGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgdGV4dCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5hdHRhY2htZW50U2NyYXBlVGltZW91dCk7XHJcbiAgICAgICAgdGhpcy5hdHRhY2htZW50U2NyYXBlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zY3JhcGVBdHRhY2htZW50cygpLCB0aGlzLmF0dGFjaG1lbnRTY3JhcGVEZWJvdW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhdHRhY2htZW50U2NyYXBlVGltZW91dDtcclxuICAgIHByaXZhdGUgYXR0YWNobWVudFNjcmFwZURlYm91bmNlID0gMTUwMDtcclxuICAgIHByaXZhdGUgYXR0YWNobWVudEZyYWdtZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBBdHRhY2htZW50RnJhZ21lbnRTdGF0ZT4oKTtcclxuICAgIHByaXZhdGUgc2NyYXBlQXR0YWNobWVudHMoKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICBsaWtlczogMCxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5fdGV4dCxcclxuICAgICAgICAgICAgc2VudEF0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVzZXI6IHRoaXMudXNlcixcclxuICAgICAgICAgICAgYXR0YWNobWVudHM6IHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50c1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBmb3VuZEZyYWdtZW50czogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgc2NyYXBlciBvZiB0aGlzLmNoYXRCYWNrZW5kLmF0dGFjaG1lbnRTY3JhcGVycykge1xyXG4gICAgICAgICAgICBsZXQgZnJhZ21lbnRzID0gc2NyYXBlci5maW5kRnJhZ21lbnRzKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBpZiAoIWZyYWdtZW50cykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQXR0YWNobWVudCBmcmFnbWVudCBzY3JhcGVyICR7c2NyYXBlci5jb25zdHJ1Y3Rvci5uYW1lfSBpcyBpbXBsZW1lbnRlZCBpbmNvcnJlY3RseTogUmV0dXJuZWQgbnVsbCBpbnN0ZWFkIG9mIGFycmF5YCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcclxuICAgICAgICAgICAgICAgIGZvdW5kRnJhZ21lbnRzLnB1c2goZnJhZ21lbnQudGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXR0YWNobWVudEZyYWdtZW50cy5oYXMoZnJhZ21lbnQudGV4dCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2NyYXBlZCBuZXcgZnJhZ21lbnQ6YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kaXIoZnJhZ21lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudEZyYWdtZW50cy5zZXQoZnJhZ21lbnQudGV4dCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbjogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBmcmFnbWVudHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBtZXNzYWdlLlxyXG4gICAgICAgIGxldCByZW1vdmVkRnJhZ21lbnRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IFtrZXldIG9mIHRoaXMuYXR0YWNobWVudEZyYWdtZW50cykge1xyXG4gICAgICAgICAgICBpZiAoIWZvdW5kRnJhZ21lbnRzLmluY2x1ZGVzKGtleSkpXHJcbiAgICAgICAgICAgICAgICByZW1vdmVkRnJhZ21lbnRzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgcmVtb3ZlZEZyYWdtZW50IG9mIHJlbW92ZWRGcmFnbWVudHMpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92ZWQgZnJhZ21lbnQ6ICR7cmVtb3ZlZEZyYWdtZW50fWApO1xyXG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRGcmFnbWVudHMuZGVsZXRlKHJlbW92ZWRGcmFnbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQcm9jZXNzIGFueSBmcmFnbWVudHMgdGhhdCBhcmUgbm90IHlldCByZXNvbHZlZCAob3IgYmVpbmcgXHJcbiAgICAgICAgLy8gcmVzb2x2ZWQpXHJcblxyXG4gICAgICAgIGZvciAobGV0IFtrZXksIHN0YXRlXSBvZiB0aGlzLmF0dGFjaG1lbnRGcmFnbWVudHMpIHtcclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlc29sdXRpb24pXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIHN0YXRlLnJlc29sdXRpb24gPSBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVzb2x2aW5nIGZyYWdtZW50ICR7a2V5fWApO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcmVzb2x2ZXIgb2YgdGhpcy5jaGF0QmFja2VuZC5hdHRhY2htZW50UmVzb2x2ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYC0gVHJ5aW5nIHJlc29sdmVyICR7cmVzb2x2ZXIuY29uc3RydWN0b3IubmFtZX0uLi5gKTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXR0YWNobWVudCA9IGF3YWl0IHJlc29sdmVyLnJlc29sdmVGcmFnbWVudChtZXNzYWdlLCBzdGF0ZS5mcmFnbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVzb2x2ZWQgZnJhZ21lbnQgJHtrZXl9IGludG8gYXR0YWNobWVudDpgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhdWdodCBlcnJvciBkdXJpbmcgYXR0YWNobWVudCByZXNvbHZlciAke3Jlc29sdmVyLmNvbnN0cnVjdG9yLm5hbWV9OmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBzZW5kTGFiZWwgPSAnU2VuZCc7XHJcbiAgICBASW5wdXQoKSBzZW5kaW5nTGFiZWwgPSAnU2VuZGluZyc7XHJcbiAgICBASW5wdXQoKSBsYWJlbCA9ICdQb3N0IGEgY29tbWVudCc7XHJcbiAgICBASW5wdXQoKSBwZXJtaXNzaW9uRGVuaWVkTGFiZWwgPSAnVW5hdmFpbGFibGUnO1xyXG4gICAgQElucHV0KCkgc2lnbkluTGFiZWwgPSAnU2lnbiBJbic7XHJcbiAgICBASW5wdXQoKSBtYXhMZW5ndGggPSAxNTAwO1xyXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICAgIEBPdXRwdXQoKSB0ZXh0Q2hhbmdlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBASW5wdXQoKSBzaG91bGRJbnRlcmNlcHRNZXNzYWdlU2VuZD86IChtZXNzYWdlOiBDaGF0TWVzc2FnZSwgc291cmNlOiBDaGF0U291cmNlQmFzZSkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnYXV0b2NvbXBsZXRlJykgYXV0b2NvbXBsZXRlRWwgOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICAgIEBWaWV3Q2hpbGQoJ2F1dG9jb21wbGV0ZUNvbnRhaW5lcicpIGF1dG9jb21wbGV0ZUNvbnRhaW5lckVsIDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCd0ZXh0YXJlYScpIHRleHRhcmVhRWwgOiBFbGVtZW50UmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+O1xyXG5cclxuICAgIEBJbnB1dCgpIGhhc2h0YWdzIDogSGFzaFRhZ1tdO1xyXG4gICAgQElucHV0KCkgcGFydGljaXBhbnRzIDogVXNlcltdID0gW107XHJcbiAgICBASW5wdXQoKSBnZW5lcmljQXZhdGFyVXJsOiBzdHJpbmc7XHJcblxyXG4gICAgZ2V0IHVzZXJBdmF0YXJVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcj8uYXZhdGFyVXJsIHx8IHRoaXMuZ2VuZXJpY0F2YXRhclVybDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3Blcm1pc3Npb25EZW5pZWRFcnJvciA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCBwZXJtaXNzaW9uRGVuaWVkRXJyb3IoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGVybWlzc2lvbkRlbmllZEVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgbGV0IHJvb3QgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ1tuZy12ZXJzaW9uXScpIHx8IGRvY3VtZW50LmJvZHk7XHJcbiAgICAgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQodGhpcy5hdXRvY29tcGxldGVFbC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2VuZFBlcm1pc3Npb25EZW5pZWQobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fcGVybWlzc2lvbkRlbmllZEVycm9yLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0F1dG9Db21wbGV0ZShvcHRpb25zIDogQXV0b0NvbXBsZXRlT3B0aW9uW10pIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkID0gMDtcclxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgIGxldCBwb3MgPSB0aGlzLmF1dG9jb21wbGV0ZUNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgbGV0IHNpemUgPSB0aGlzLmF1dG9jb21wbGV0ZUVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRWwubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7d2luZG93LnNjcm9sbFggKyBwb3MubGVmdH1weGA7XHJcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVFbC5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IGAke3dpbmRvdy5zY3JvbGxZICsgcG9zLnRvcH1weGA7XHJcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVFbC5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cG9zLndpZHRofXB4YDtcclxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGF1dG9jb21wbGV0ZVZpc2libGUgPSBmYWxzZTtcclxuICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgOiBBdXRvQ29tcGxldGVPcHRpb25bXSA9IFtdO1xyXG5cclxuICAgIGFjdGl2YXRlQXV0b0NvbXBsZXRlKG9wdGlvbiA6IEF1dG9Db21wbGV0ZU9wdGlvbikge1xyXG4gICAgICAgIG9wdGlvbi5hY3Rpb24oKTtcclxuICAgICAgICB0aGlzLmRpc21pc3NBdXRvQ29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNtaXNzQXV0b0NvbXBsZXRlKCkge1xyXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29tcGxldGlvbkZ1bmMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY29tcGxldGlvblByZWZpeCA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZXJyb3JUaW1lb3V0O1xyXG4gICAgaW5kaWNhdGVFcnJvcihtZXNzYWdlIDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZW5kRXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5leHBhbmRFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmVycm9yVGltZW91dCk7XHJcbiAgICAgICAgdGhpcy5lcnJvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5leHBhbmRFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sIDUqMTAwMCk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuXHJcbiAgICAgICAgLy8gT24gbW9iaWxlLCBqdXN0IHNob3cgYW4gYWxlcnQgZGlhbG9nXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgNDMwKVxyXG4gICAgICAgICAgICBhbGVydChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wbGV0aW9uRnVuYyA6IChzdHIgOiBzdHJpbmcpID0+IEF1dG9Db21wbGV0ZU9wdGlvbltdO1xyXG5cclxuICAgIGNvbXBsZXRpb25QcmVmaXggOiBzdHJpbmc7XHJcbiAgICBhdXRvQ29tcGxldGVTZWxlY3RlZCA6IG51bWJlciA9IDA7XHJcblxyXG4gICAgZ2V0IGlzVmFsaWRNZXNzYWdlKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy50ZXh0IHx8IHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaGFzUGVuZGluZ0F0dGFjaG1lbnRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMuc29tZSh4ID0+IHgudHJhbnNpZW50U3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZW5kQnV0dG9uRW5hYmxlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuQ29tbWVudCkge1xyXG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIHdhbnQgdG8gZW5hYmxlIHRoZSBidXR0b24gYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gXHJcbiAgICAgICAgICAgIC8vIHNlbmQgdGhlIHBlcm1pc3Npb25EZW5pZWQgbWVzc2FnZSB1cCB0byB0aGUgaG9zdC5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkTWVzc2FnZVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5oYXNQZW5kaW5nQXR0YWNobWVudHNcclxuICAgICAgICAgICAgJiYgIXRoaXMuc2VuZGluZ1xyXG4gICAgICAgIDtcclxuICAgIH1cclxuICAgIGFzeW5jIGF1dG9jb21wbGV0ZShyZXBsYWNlbWVudCA6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBlbCA9IHRoaXMudGV4dGFyZWFFbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMudGV4dC5zbGljZSgwLCBlbC5zZWxlY3Rpb25TdGFydCAtIHRoaXMuY29tcGxldGlvblByZWZpeC5sZW5ndGgpICsgcmVwbGFjZW1lbnQgKyB0aGlzLnRleHQuc2xpY2UoZWwuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluc2VydChzdHIgOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgZWwgPSB0aGlzLnRleHRhcmVhRWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQuc2xpY2UoMCwgZWwuc2VsZWN0aW9uU3RhcnQpICsgc3RyICsgdGhpcy50ZXh0LnNsaWNlKGVsLnNlbGVjdGlvblN0YXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbktleURvd24oZXZlbnQgOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlVmlzaWJsZSkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNtaXNzQXV0b0NvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdTaGlmdCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9uc1t0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVBdXRvQ29tcGxldGUodGhpcy5hdXRvY29tcGxldGVPcHRpb25zW3RoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWRdKTtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZCA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkID0gdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZCA9IHRoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWQgLSAxO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWQgPSAodGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZCArIDEpICUgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBldmVudC5jdHJsS2V5KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VuZE1lc3NhZ2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGlvbkZ1bmMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGlvblByZWZpeCA9IHRoaXMuY29tcGxldGlvblByZWZpeC5zbGljZSgwLCB0aGlzLmNvbXBsZXRpb25QcmVmaXgubGVuZ3RoIC0gMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29tcGxldGlvblByZWZpeCA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc21pc3NBdXRvQ29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnICcgfHwgZXZlbnQua2V5Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzbWlzc0F1dG9Db21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0aW9uUHJlZml4ICs9IGV2ZW50LmtleTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zaG93QXV0b0NvbXBsZXRlKHRoaXMuY29tcGxldGlvbkZ1bmModGhpcy5jb21wbGV0aW9uUHJlZml4KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJzonKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0QXV0b0NvbXBsZXRlKGV2ZW50LCBwcmVmaXggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeC5zbGljZSgxKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFrZXMgOi0pLCA6LSggZXRjIHdvcmsgKGFzIHRoZXkgYXJlIFwiOilcIiBldGMgaW4gdGhlIGRiKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXguc3RhcnRzV2l0aCgnLScpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBwcmVmaXguc2xpY2UoMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhFTU9KSVMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoayA9PiBrLmluY2x1ZGVzKHByZWZpeCkgfHwgRU1PSklTW2tdLmtleXdvcmRzLnNvbWUoa3cgPT4ga3cuaW5jbHVkZXMocHJlZml4KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoayA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke0VNT0pJU1trXS5jaGFyfSAke2t9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5hdXRvY29tcGxldGUoRU1PSklTW2tdLmNoYXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgNSlcclxuICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdAJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEF1dG9Db21wbGV0ZShldmVudCwgcHJlZml4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBwcmVmaXguc2xpY2UoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFydGljaXBhbnRzLmZpbHRlcih4ID0+IHgudXNlcm5hbWUuaW5jbHVkZXMocHJlZml4KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChwID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYEAke3AudXNlcm5hbWV9IC0tICR7cC5kaXNwbGF5TmFtZX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmF1dG9jb21wbGV0ZShgQCR7cC51c2VybmFtZX1gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICcjJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEF1dG9Db21wbGV0ZShldmVudCwgcHJlZml4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBwcmVmaXguc2xpY2UoMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc2h0YWdzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoaHQgPT4gaHQuaGFzaHRhZy5pbmNsdWRlcyhwcmVmaXgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGh0ID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYCMke2h0Lmhhc2h0YWd9JHtodC5kZXNjcmlwdGlvbiA/IGAgLS0gJHtodC5kZXNjcmlwdGlvbn1gIDogYGB9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5hdXRvY29tcGxldGUoYCMke2h0Lmhhc2h0YWd9YClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCA1KVxyXG4gICAgICAgICAgICAgICAgICAgIDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0QXV0b0NvbXBsZXRlKGV2ZW50IDogS2V5Ym9hcmRFdmVudCwgY29tcGxldGlvbkZ1bmMgOiAoc3RyIDogc3RyaW5nKSA9PiBBdXRvQ29tcGxldGVPcHRpb25bXSkge1xyXG4gICAgICAgIHRoaXMuY29tcGxldGlvblByZWZpeCA9IGV2ZW50LmtleTtcclxuICAgICAgICB0aGlzLmNvbXBsZXRpb25GdW5jID0gY29tcGxldGlvbkZ1bmM7XHJcbiAgICAgICAgdGhpcy5zaG93QXV0b0NvbXBsZXRlKHRoaXMuY29tcGxldGlvbkZ1bmModGhpcy5jb21wbGV0aW9uUHJlZml4KSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVyKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kaXNtaXNzQXV0b0NvbXBsZXRlKCksIDI1MCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zZXJ0RW1vamkodGV4dCA6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudGV4dCArPSB0ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTaWduSW4oKSB7XHJcbiAgICAgICAgdGhpcy5zaWduSW5TZWxlY3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0VkaXRBdmF0YXIoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0QXZhdGFyU2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzdWJtaXQ6IChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4gYm9vbGVhbjtcclxuXHJcbiAgICBhc3luYyBzZW5kTWVzc2FnZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc291cmNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZW5kRXJyb3IgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gKHRoaXMudGV4dCB8fCAnJykudHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FuQ29tbWVudCAmJiAhdGhpcy5pc1ZhbGlkTWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGxldCBtZXNzYWdlIDogQ2hhdE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiB0aGlzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICBzZW50QXQ6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICB1cmw6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gbG9jYXRpb24uaHJlZiA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGxpa2VzOiAwLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGV4dCxcclxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMuZmlsdGVyKHggPT4geC51cmwpXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSgpLCAxMDAwKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZGljYXRlRXJyb3IoZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGF0TWVzc2FnZUF0dGFjaG1lbnRzOiBDaGF0TWVzc2FnZUF0dGFjaG1lbnRbXSA9IFtdO1xyXG5cclxuICAgIGFkZGVkQXR0YWNobWVudChhdHRhY2htZW50OiBDaGF0TWVzc2FnZUF0dGFjaG1lbnQpIHtcclxuICAgICAgICB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBhdHRhY2htZW50RXJyb3IoYXR0YWNobWVudDogQ2hhdE1lc3NhZ2VBdHRhY2htZW50KSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50cyA9IHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50cy5maWx0ZXIoeCA9PiB4ICE9PSBhdHRhY2htZW50KTtcclxuICAgICAgICB9LCAzMDAwKTtcclxuICAgIH1cclxuXHJcblx0cmVtb3ZlQXR0YWNobWVudChhdHRhY2htZW50OiBDaGF0TWVzc2FnZUF0dGFjaG1lbnQpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMuaW5kZXhPZihhdHRhY2htZW50KTtcclxuICAgICAgICBpZiAoaW5kZXggPj0gMClcclxuXHRcdCAgICB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHR9XHJcblxyXG4gICAgYWxlcnRFcnJvcigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VuZEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgYWxlcnQodGhpcy5zZW5kRXJyb3IubWVzc2FnZSk7XHJcbiAgICB9XHJcbn1cclxuIl19
419
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tZW50cy9jb21tZW50LWZpZWxkL2NvbW1lbnQtZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBc0JyQyxNQUFNLE9BQU8scUJBQXFCO0lBQzlCLFlBQW9CLFdBQTRCO1FBQTVCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQWtDeEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFLbkMsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNULHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV4QixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDckMsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVuRCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBR1osVUFBSyxHQUFZLEVBQUUsQ0FBQztRQVlwQiw2QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFDaEMsd0JBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7UUF3RWhFLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDbkIsaUJBQVksR0FBRyxTQUFTLENBQUM7UUFDekIsVUFBSyxHQUFHLGdCQUFnQixDQUFDO1FBQ3pCLDBCQUFx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LENBQUM7UUFDNUQsSUFBSSxLQUFLLElBQUksQ0FBQztZQUNoQixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUUsVUFBVTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNmLE9BQU87UUFDWCxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDOzs7WUFoY0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLDhuS0FBNkM7O2FBRWhEOzs7WUF4QlEsZUFBZTs7O3FCQThCbkIsS0FBSzttQkErQkwsS0FBSzt5QkFFTCxXQUFXLFNBQUMsbUJBQW1CLGNBQy9CLEtBQUs7K0JBRUwsS0FBSzs2QkFFTCxNQUFNO2lDQUNOLE1BQU07K0JBS04sS0FBSzt3QkF1RkwsS0FBSzsyQkFDTCxLQUFLO29CQUNMLEtBQUs7b0NBQ0wsS0FBSzswQkFDTCxLQUFLO3dCQUNMLEtBQUs7MEJBQ0wsS0FBSzswQkFDTCxNQUFNO3lDQUNOLEtBQUs7NkJBRUwsU0FBUyxTQUFDLGNBQWM7c0NBQ3hCLFNBQVMsU0FBQyx1QkFBdUI7eUJBQ2pDLFNBQVMsU0FBQyxVQUFVO3VCQUVwQixLQUFLOzJCQUNMLEtBQUs7K0JBQ0wsS0FBSztvQ0FPTCxNQUFNO3FCQTZOTixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlQXR0YWNobWVudCwgVXNlciB9IGZyb20gXCJAYmFudGEvY29tbW9uXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kQmFzZSB9IGZyb20gXCIuLi8uLi9jaGF0LWJhY2tlbmQtYmFzZVwiO1xyXG5pbXBvcnQgeyBDaGF0U291cmNlQmFzZSB9IGZyb20gXCIuLi8uLi9jaGF0LXNvdXJjZS1iYXNlXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRGcmFnbWVudCB9IGZyb20gXCIuLi8uLi9hdHRhY2htZW50LXNjcmFwZXJcIjtcclxuaW1wb3J0IHsgRU1PSklTIH0gZnJvbSBcIi4uLy4uL2Vtb2ppXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9Db21wbGV0ZU9wdGlvbiB7XHJcbiAgICBsYWJlbCA6IHN0cmluZztcclxuICAgIGFjdGlvbj8gOiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhhc2hUYWcge1xyXG4gICAgaGFzaHRhZyA6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uIDogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQXR0YWNobWVudEZyYWdtZW50U3RhdGUge1xyXG4gICAgZnJhZ21lbnQ6IEF0dGFjaG1lbnRGcmFnbWVudDtcclxuICAgIHJlc29sdXRpb246IFByb21pc2U8Q2hhdE1lc3NhZ2VBdHRhY2htZW50PjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWNvbW1lbnQtZmllbGQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29tbWVudC1maWVsZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tZW50RmllbGRDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGF0QmFja2VuZDogQ2hhdEJhY2tlbmRCYXNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc291cmNlIDogQ2hhdFNvdXJjZUJhc2U7XHJcbiAgICBASW5wdXQoKSBcclxuICAgIGdldCBzb3VyY2UoKSA6IENoYXRTb3VyY2VCYXNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBzb3VyY2UodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1YnM/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlLmNvbm5lY3Rpb25TdGF0ZUNoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLl9zb3VyY2UuY29ubmVjdGlvblN0YXRlQ2hhbmdlZC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdsb3N0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnRNZXNzYWdlID0gYFJlY29ubmVjdGluZy4uLmA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09ICdyZXN0b3JlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50TWVzc2FnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gJ2Nvbm5lY3RpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE1lc3NhZ2UgPSBgQ29ubmVjdGluZy4uLmA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgQElucHV0KCkgdXNlciA6IFVzZXI7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jYW4tY29tbWVudCcpXHJcbiAgICBASW5wdXQoKSBcclxuICAgIGNhbkNvbW1lbnQgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgYWxsb3dBdHRhY2htZW50cyA9IGZhbHNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBzaWduSW5TZWxlY3RlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgZWRpdEF2YXRhclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBzZW5kaW5nID0gZmFsc2U7XHJcbiAgICBzZW5kRXJyb3IgOiBFcnJvcjtcclxuICAgIGV4cGFuZEVycm9yID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSB0cmFuc2llbnRNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBfdGV4dCA6IHN0cmluZyA9ICcnO1xyXG4gICAgZ2V0IHRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHRleHQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYXR0YWNobWVudFNjcmFwZVRpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMuYXR0YWNobWVudFNjcmFwZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2NyYXBlQXR0YWNobWVudHMoKSwgdGhpcy5hdHRhY2htZW50U2NyYXBlRGVib3VuY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXR0YWNobWVudFNjcmFwZVRpbWVvdXQ7XHJcbiAgICBwcml2YXRlIGF0dGFjaG1lbnRTY3JhcGVEZWJvdW5jZSA9IDE1MDA7XHJcbiAgICBwcml2YXRlIGF0dGFjaG1lbnRGcmFnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgQXR0YWNobWVudEZyYWdtZW50U3RhdGU+KCk7XHJcbiAgICBwcml2YXRlIHNjcmFwZUF0dGFjaG1lbnRzKCkge1xyXG4gICAgICAgIGxldCBtZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgbGlrZXM6IDAsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuX3RleHQsXHJcbiAgICAgICAgICAgIHNlbnRBdDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1c2VyOiB0aGlzLnVzZXIsXHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzOiB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgZm91bmRGcmFnbWVudHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IHNjcmFwZXIgb2YgdGhpcy5jaGF0QmFja2VuZC5hdHRhY2htZW50U2NyYXBlcnMpIHtcclxuICAgICAgICAgICAgbGV0IGZyYWdtZW50cyA9IHNjcmFwZXIuZmluZEZyYWdtZW50cyhtZXNzYWdlKTtcclxuICAgICAgICAgICAgaWYgKCFmcmFnbWVudHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEF0dGFjaG1lbnQgZnJhZ21lbnQgc2NyYXBlciAke3NjcmFwZXIuY29uc3RydWN0b3IubmFtZX0gaXMgaW1wbGVtZW50ZWQgaW5jb3JyZWN0bHk6IFJldHVybmVkIG51bGwgaW5zdGVhZCBvZiBhcnJheWApO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3VuZEZyYWdtZW50cy5wdXNoKGZyYWdtZW50LnRleHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF0dGFjaG1lbnRGcmFnbWVudHMuaGFzKGZyYWdtZW50LnRleHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNjcmFwZWQgbmV3IGZyYWdtZW50OmApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGZyYWdtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRGcmFnbWVudHMuc2V0KGZyYWdtZW50LnRleHQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb246IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgZnJhZ21lbnRzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgbWVzc2FnZS5cclxuICAgICAgICBsZXQgcmVtb3ZlZEZyYWdtZW50czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBba2V5XSBvZiB0aGlzLmF0dGFjaG1lbnRGcmFnbWVudHMpIHtcclxuICAgICAgICAgICAgaWYgKCFmb3VuZEZyYWdtZW50cy5pbmNsdWRlcyhrZXkpKVxyXG4gICAgICAgICAgICAgICAgcmVtb3ZlZEZyYWdtZW50cy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHJlbW92ZWRGcmFnbWVudCBvZiByZW1vdmVkRnJhZ21lbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZW1vdmVkIGZyYWdtZW50OiAke3JlbW92ZWRGcmFnbWVudH1gKTtcclxuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50RnJhZ21lbnRzLmRlbGV0ZShyZW1vdmVkRnJhZ21lbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJvY2VzcyBhbnkgZnJhZ21lbnRzIHRoYXQgYXJlIG5vdCB5ZXQgcmVzb2x2ZWQgKG9yIGJlaW5nIFxyXG4gICAgICAgIC8vIHJlc29sdmVkKVxyXG5cclxuICAgICAgICBmb3IgKGxldCBba2V5LCBzdGF0ZV0gb2YgdGhpcy5hdHRhY2htZW50RnJhZ21lbnRzKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXNvbHV0aW9uKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBzdGF0ZS5yZXNvbHV0aW9uID0gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlc29sdmluZyBmcmFnbWVudCAke2tleX1gKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHJlc29sdmVyIG9mIHRoaXMuY2hhdEJhY2tlbmQuYXR0YWNobWVudFJlc29sdmVycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAtIFRyeWluZyByZXNvbHZlciAke3Jlc29sdmVyLmNvbnN0cnVjdG9yLm5hbWV9Li4uYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF0dGFjaG1lbnQgPSBhd2FpdCByZXNvbHZlci5yZXNvbHZlRnJhZ21lbnQobWVzc2FnZSwgc3RhdGUuZnJhZ21lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlc29sdmVkIGZyYWdtZW50ICR7a2V5fSBpbnRvIGF0dGFjaG1lbnQ6YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRpcihhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYXVnaHQgZXJyb3IgZHVyaW5nIGF0dGFjaG1lbnQgcmVzb2x2ZXIgJHtyZXNvbHZlci5jb25zdHJ1Y3Rvci5uYW1lfTpgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgc2VuZExhYmVsID0gJ1NlbmQnO1xyXG4gICAgQElucHV0KCkgc2VuZGluZ0xhYmVsID0gJ1NlbmRpbmcnO1xyXG4gICAgQElucHV0KCkgbGFiZWwgPSAnUG9zdCBhIGNvbW1lbnQnO1xyXG4gICAgQElucHV0KCkgcGVybWlzc2lvbkRlbmllZExhYmVsID0gJ1VuYXZhaWxhYmxlJztcclxuICAgIEBJbnB1dCgpIHNpZ25JbkxhYmVsID0gJ1NpZ24gSW4nO1xyXG4gICAgQElucHV0KCkgbWF4TGVuZ3RoID0gMTUwMDtcclxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XHJcbiAgICBAT3V0cHV0KCkgdGV4dENoYW5nZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgQElucHV0KCkgc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmQ/OiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UsIHNvdXJjZTogQ2hhdFNvdXJjZUJhc2UpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2F1dG9jb21wbGV0ZScpIGF1dG9jb21wbGV0ZUVsIDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdhdXRvY29tcGxldGVDb250YWluZXInKSBhdXRvY29tcGxldGVDb250YWluZXJFbCA6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gICAgQFZpZXdDaGlsZCgndGV4dGFyZWEnKSB0ZXh0YXJlYUVsIDogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjtcclxuXHJcbiAgICBASW5wdXQoKSBoYXNodGFncyA6IEhhc2hUYWdbXTtcclxuICAgIEBJbnB1dCgpIHBhcnRpY2lwYW50cyA6IFVzZXJbXSA9IFtdO1xyXG4gICAgQElucHV0KCkgZ2VuZXJpY0F2YXRhclVybDogc3RyaW5nO1xyXG5cclxuICAgIGdldCB1c2VyQXZhdGFyVXJsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXI/LmF2YXRhclVybCB8fCB0aGlzLmdlbmVyaWNBdmF0YXJVcmw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9wZXJtaXNzaW9uRGVuaWVkRXJyb3IgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgcGVybWlzc2lvbkRlbmllZEVycm9yKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGxldCByb290ID0gZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCdbbmctdmVyc2lvbl0nKSB8fCBkb2N1bWVudC5ib2R5O1xyXG4gICAgICAgICAgICByb290LmFwcGVuZENoaWxkKHRoaXMuYXV0b2NvbXBsZXRlRWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbmRQZXJtaXNzaW9uRGVuaWVkKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvci5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dBdXRvQ29tcGxldGUob3B0aW9ucyA6IEF1dG9Db21wbGV0ZU9wdGlvbltdKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZCA9IDA7XHJcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICBsZXQgcG9zID0gdGhpcy5hdXRvY29tcGxldGVDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGxldCBzaXplID0gdGhpcy5hdXRvY29tcGxldGVFbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3dpbmRvdy5zY3JvbGxYICsgcG9zLmxlZnR9cHhgO1xyXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRWwubmF0aXZlRWxlbWVudC5zdHlsZS50b3AgPSBgJHt3aW5kb3cuc2Nyb2xsWSArIHBvcy50b3B9cHhgO1xyXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRWwubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3Bvcy53aWR0aH1weGA7XHJcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhdXRvY29tcGxldGVWaXNpYmxlID0gZmFsc2U7XHJcbiAgICBhdXRvY29tcGxldGVPcHRpb25zIDogQXV0b0NvbXBsZXRlT3B0aW9uW10gPSBbXTtcclxuXHJcbiAgICBhY3RpdmF0ZUF1dG9Db21wbGV0ZShvcHRpb24gOiBBdXRvQ29tcGxldGVPcHRpb24pIHtcclxuICAgICAgICBvcHRpb24uYWN0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5kaXNtaXNzQXV0b0NvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzbWlzc0F1dG9Db21wbGV0ZSgpIHtcclxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbXBsZXRpb25GdW5jID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbXBsZXRpb25QcmVmaXggPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVycm9yVGltZW91dDtcclxuICAgIGluZGljYXRlRXJyb3IobWVzc2FnZSA6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2VuZEVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5lcnJvclRpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMuZXJyb3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCA1KjEwMDApO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICAgIC8vIE9uIG1vYmlsZSwganVzdCBzaG93IGFuIGFsZXJ0IGRpYWxvZ1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDQzMClcclxuICAgICAgICAgICAgYWxlcnQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcGxldGlvbkZ1bmMgOiAoc3RyIDogc3RyaW5nKSA9PiBBdXRvQ29tcGxldGVPcHRpb25bXTtcclxuXHJcbiAgICBjb21wbGV0aW9uUHJlZml4IDogc3RyaW5nO1xyXG4gICAgYXV0b0NvbXBsZXRlU2VsZWN0ZWQgOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGdldCBpc1ZhbGlkTWVzc2FnZSgpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudGV4dCB8fCB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGhhc1BlbmRpbmdBdHRhY2htZW50cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLnNvbWUoeCA9PiB4LnRyYW5zaWVudFN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VuZEJ1dHRvbkVuYWJsZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbkNvbW1lbnQpIHtcclxuICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSB3YW50IHRvIGVuYWJsZSB0aGUgYnV0dG9uIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIFxyXG4gICAgICAgICAgICAvLyBzZW5kIHRoZSBwZXJtaXNzaW9uRGVuaWVkIG1lc3NhZ2UgdXAgdG8gdGhlIGhvc3QuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZE1lc3NhZ2VcclxuICAgICAgICAgICAgJiYgIXRoaXMuaGFzUGVuZGluZ0F0dGFjaG1lbnRzXHJcbiAgICAgICAgICAgICYmICF0aGlzLnNlbmRpbmdcclxuICAgICAgICA7XHJcbiAgICB9XHJcbiAgICBhc3luYyBhdXRvY29tcGxldGUocmVwbGFjZW1lbnQgOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgZWwgPSB0aGlzLnRleHRhcmVhRWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQuc2xpY2UoMCwgZWwuc2VsZWN0aW9uU3RhcnQgLSB0aGlzLmNvbXBsZXRpb25QcmVmaXgubGVuZ3RoKSArIHJlcGxhY2VtZW50ICsgdGhpcy50ZXh0LnNsaWNlKGVsLnNlbGVjdGlvblN0YXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbnNlcnQoc3RyIDogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGVsID0gdGhpcy50ZXh0YXJlYUVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnNsaWNlKDAsIGVsLnNlbGVjdGlvblN0YXJ0KSArIHN0ciArIHRoaXMudGV4dC5zbGljZShlbC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25LZXlEb3duKGV2ZW50IDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVZpc2libGUpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzbWlzc0F1dG9Db21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnU2hpZnQnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnNbdGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlQXV0b0NvbXBsZXRlKHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9uc1t0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWQgPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZCA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWQgPSB0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkIC0gMTtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkID0gKHRoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWQgKyAxKSAlIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgZXZlbnQuY3RybEtleSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNlbmRNZXNzYWdlKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBsZXRpb25GdW5jKSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRpb25QcmVmaXggPSB0aGlzLmNvbXBsZXRpb25QcmVmaXguc2xpY2UoMCwgdGhpcy5jb21wbGV0aW9uUHJlZml4Lmxlbmd0aCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbXBsZXRpb25QcmVmaXggPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNtaXNzQXV0b0NvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJyAnIHx8IGV2ZW50LmtleS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc21pc3NBdXRvQ29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGlvblByZWZpeCArPSBldmVudC5rZXk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0F1dG9Db21wbGV0ZSh0aGlzLmNvbXBsZXRpb25GdW5jKHRoaXMuY29tcGxldGlvblByZWZpeCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICc6Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEF1dG9Db21wbGV0ZShldmVudCwgcHJlZml4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBwcmVmaXguc2xpY2UoMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1ha2VzIDotKSwgOi0oIGV0YyB3b3JrIChhcyB0aGV5IGFyZSBcIjopXCIgZXRjIGluIHRoZSBkYilcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4LnN0YXJ0c1dpdGgoJy0nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4LnNsaWNlKDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoRU1PSklTKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gay5pbmNsdWRlcyhwcmVmaXgpIHx8IEVNT0pJU1trXS5rZXl3b3Jkcy5zb21lKGt3ID0+IGt3LmluY2x1ZGVzKHByZWZpeCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGsgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBgJHtFTU9KSVNba10uY2hhcn0gJHtrfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuYXV0b2NvbXBsZXRlKEVNT0pJU1trXS5jaGFyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIDUpXHJcbiAgICAgICAgICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRBdXRvQ29tcGxldGUoZXZlbnQsIHByZWZpeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnRpY2lwYW50cy5maWx0ZXIoeCA9PiB4LnVzZXJuYW1lLmluY2x1ZGVzKHByZWZpeCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAocCA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGBAJHtwLnVzZXJuYW1lfSAtLSAke3AuZGlzcGxheU5hbWV9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5hdXRvY29tcGxldGUoYEAke3AudXNlcm5hbWV9YClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnIycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRBdXRvQ29tcGxldGUoZXZlbnQsIHByZWZpeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4LnNsaWNlKDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNodGFnc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGh0ID0+IGh0Lmhhc2h0YWcuaW5jbHVkZXMocHJlZml4KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChodCA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAjJHtodC5oYXNodGFnfSR7aHQuZGVzY3JpcHRpb24gPyBgIC0tICR7aHQuZGVzY3JpcHRpb259YCA6IGBgfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuYXV0b2NvbXBsZXRlKGAjJHtodC5oYXNodGFnfWApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgNSlcclxuICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGFydEF1dG9Db21wbGV0ZShldmVudCA6IEtleWJvYXJkRXZlbnQsIGNvbXBsZXRpb25GdW5jIDogKHN0ciA6IHN0cmluZykgPT4gQXV0b0NvbXBsZXRlT3B0aW9uW10pIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRpb25QcmVmaXggPSBldmVudC5rZXk7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0aW9uRnVuYyA9IGNvbXBsZXRpb25GdW5jO1xyXG4gICAgICAgIHRoaXMuc2hvd0F1dG9Db21wbGV0ZSh0aGlzLmNvbXBsZXRpb25GdW5jKHRoaXMuY29tcGxldGlvblByZWZpeCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1cigpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGlzbWlzc0F1dG9Db21wbGV0ZSgpLCAyNTApO1xyXG4gICAgfVxyXG5cclxuICAgIGluc2VydEVtb2ppKHRleHQgOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnRleHQgKz0gdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2lnbkluKCkge1xyXG4gICAgICAgIHRoaXMuc2lnbkluU2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFZGl0QXZhdGFyKCkge1xyXG4gICAgICAgIHRoaXMuZWRpdEF2YXRhclNlbGVjdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc3VibWl0OiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IGJvb2xlYW47XHJcblxyXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVycm9yID0gbnVsbDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9ICh0aGlzLnRleHQgfHwgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbkNvbW1lbnQgJiYgIXRoaXMuaXNWYWxpZE1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyLFxyXG4gICAgICAgICAgICAgICAgc2VudEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgdXJsOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IGxvY2F0aW9uLmhyZWYgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBsaWtlczogMCxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRleHQsXHJcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50czogdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLmZpbHRlcih4ID0+IHgudXJsKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgMTAwMCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRpY2F0ZUVycm9yKGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0YXJlYUVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hhdE1lc3NhZ2VBdHRhY2htZW50czogQ2hhdE1lc3NhZ2VBdHRhY2htZW50W10gPSBbXTtcclxuXHJcbiAgICBhZGRlZEF0dGFjaG1lbnQoYXR0YWNobWVudDogQ2hhdE1lc3NhZ2VBdHRhY2htZW50KSB7XHJcbiAgICAgICAgdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXR0YWNobWVudEVycm9yKGF0dGFjaG1lbnQ6IENoYXRNZXNzYWdlQXR0YWNobWVudCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMgPSB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMuZmlsdGVyKHggPT4geCAhPT0gYXR0YWNobWVudCk7XHJcbiAgICAgICAgfSwgMzAwMCk7XHJcbiAgICB9XHJcblxyXG5cdHJlbW92ZUF0dGFjaG1lbnQoYXR0YWNobWVudDogQ2hhdE1lc3NhZ2VBdHRhY2htZW50KSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLmluZGV4T2YoYXR0YWNobWVudCk7XHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApXHJcblx0XHQgICAgdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLnNwbGljZShpbmRleCwgMSk7XHJcblx0fVxyXG5cclxuICAgIGFsZXJ0RXJyb3IoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbmRFcnJvcilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGFsZXJ0KHRoaXMuc2VuZEVycm9yLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -55,7 +55,6 @@ export class CommentViewComponent {
55
55
  console.log(`...Need to load more comments to find ${message.id}`);
56
56
  yield this.showMore();
57
57
  }
58
- console.log(`Finished loading comments, hasMore=${this.hasMore}`);
59
58
  if (!this.isMessageLoadedInContext(message)) {
60
59
  console.error(`Error while loading message in context: Failed to find message ${message.id}, maybe it was deleted!`);
61
60
  return false;
@@ -67,17 +66,11 @@ export class CommentViewComponent {
67
66
  console.error(`Error while loading message in context: Message was not present in message list!`);
68
67
  return false;
69
68
  }
70
- console.log(`Total messages: ${items.length}`);
71
- console.log(`Page size: ${pageSize}`);
72
- console.log(`Message index: ${index}`);
73
69
  let startIndex = Math.max(0, index - pageSize / 2);
74
- console.log(`Start index: ${index}`);
75
70
  this.newMessages = items.splice(0, startIndex);
76
71
  this.messages = items.splice(0, pageSize);
77
72
  this.olderMessages = items;
78
- console.log(`${this.olderMessages.length} older messages`);
79
- console.log(`${this.messages.length} current messages`);
80
- console.log(`${this.newMessages.length} newer messages`);
73
+ this.isViewingMore = true;
81
74
  });
82
75
  }
83
76
  /**
@@ -213,13 +206,14 @@ export class CommentViewComponent {
213
206
  else {
214
207
  lastMessage = (_b = this.olderMessages[this.olderMessages.length - 1]) !== null && _b !== void 0 ? _b : this.messages[this.messages.length - 1];
215
208
  }
216
- console.dir(lastMessage);
217
209
  if (!lastMessage) {
218
210
  this.isLoadingMore = false;
219
211
  this.hasMore = false;
220
212
  return;
221
213
  }
222
214
  let messages = yield this.source.loadAfter(lastMessage, nextPageSize);
215
+ if (this.newestLast)
216
+ messages = messages.slice().reverse();
223
217
  messages.forEach(m => { var _a; return (_a = m.transientState) !== null && _a !== void 0 ? _a : (m.transientState = {}); });
224
218
  if (this.newestLast)
225
219
  this.messages = messages.concat(this.messages);
@@ -274,6 +268,17 @@ export class CommentViewComponent {
274
268
  }
275
269
  return maxPagingCursor;
276
270
  }
271
+ /**
272
+ * Wait for all currently visible comments to be fully loaded, including all attachments.
273
+ * Doing this will prevent layout shift when scrolling to a specific comment.
274
+ */
275
+ waitForAllCommentsToLoad() {
276
+ return __awaiter(this, void 0, void 0, function* () {
277
+ yield new Promise(r => setTimeout(r, 100));
278
+ yield this.sourceLoaded;
279
+ yield Promise.all(this.comments.map(x => x.waitForLoad()));
280
+ });
281
+ }
277
282
  sortMessages() {
278
283
  if (!this.source)
279
284
  return;
@@ -356,4 +361,4 @@ CommentViewComponent.propDecorators = {
356
361
  newestLast: [{ type: Input }],
357
362
  sortOrderChanged: [{ type: Output }]
358
363
  };
359
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1lbnRzL2NvbW1lbnQtdmlldy9jb21tZW50LXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFZaEUsTUFBTSxPQUFPLG9CQUFvQjtJQUM3QixZQUNZLE9BQXdCO1FBQXhCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBSzVCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVqQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN2QyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUNwQyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN0QyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN2QyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDM0Msc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN4QyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDdEMsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDckMsYUFBUSxHQUFHLElBQUksT0FB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RS9DOzs7WUFkUSxlQUFlOzs7NkJBbUNuQixLQUFLOzJCQUdMLEtBQUs7OEJBR0wsS0FBSzs0QkFFTCxZQUFZLFNBQUMsZ0JBQWdCOzBCQXNFN0IsS0FBSyxZQUNMLFdBQVcsU0FBQyxvQkFBb0I7OEJBR2hDLEtBQUs7dUJBR0wsTUFBTTs0QkFLTixNQUFNOzJCQVNOLE1BQU07dUJBQ04sTUFBTTtvQkFDTixNQUFNO3NCQUNOLE1BQU07K0JBQ04sTUFBTTs2QkFDTixNQUFNO3FCQUNOLE1BQU07c0JBQ04sTUFBTTtxQkFNTixLQUFLOytCQTJGTCxLQUFLOytCQUdMLFNBQVMsU0FBQyxrQkFBa0I7MEJBRzVCLEtBQUs7aUNBR0wsS0FBSzt5QkFHTCxLQUFLOytCQWNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE91dHB1dCwgSG9zdEJpbmRpbmcsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVXNlciwgQ2hhdE1lc3NhZ2UsIENvbW1lbnRzT3JkZXIgfSBmcm9tICdAYmFudGEvY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kQmFzZSB9IGZyb20gXCIuLi8uLi9jaGF0LWJhY2tlbmQtYmFzZVwiO1xyXG5pbXBvcnQgeyBDaGF0U291cmNlQmFzZSB9IGZyb20gXCIuLi8uLi9jaGF0LXNvdXJjZS1iYXNlXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VNZW51SXRlbSB9IGZyb20gXCIuLi8uLi9tZXNzYWdlLW1lbnUtaXRlbVwiO1xyXG5pbXBvcnQgeyBDb21tZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbW1lbnQvY29tbWVudC5jb21wb25lbnRcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRWRpdEV2ZW50IHtcclxuICAgIG1lc3NhZ2U6IENoYXRNZXNzYWdlO1xyXG4gICAgbmV3TWVzc2FnZTogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtY29tbWVudC12aWV3JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21tZW50LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29tbWVudC12aWV3LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbW1lbnRWaWV3Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYmFja2VuZDogQ2hhdEJhY2tlbmRCYXNlXHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc291cmNlU3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHByaXZhdGUgX3NvdXJjZTogQ2hhdFNvdXJjZUJhc2U7XHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfbGlrZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3VubGlrZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF91c2VyU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3VzZXJuYW1lU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxVc2VyPigpO1xyXG4gICAgcHJpdmF0ZSBfYXZhdGFyU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxVc2VyPigpO1xyXG4gICAgcHJpdmF0ZSBfc2hhcmVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9kZWxldGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9tZXNzYWdlRWRpdGVkID0gbmV3IFN1YmplY3Q8RWRpdEV2ZW50PigpO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzaG93RW1wdHlTdGF0ZSA9IHRydWU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGFsbG93UmVwbGllcyA9IHRydWU7XHJcblxyXG4gICAgQElucHV0KCkgY3VzdG9tTWVudUl0ZW1zOiBNZXNzYWdlTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oQ29tbWVudENvbXBvbmVudClcclxuICAgIGNvbW1lbnRzUXVlcnk6IFF1ZXJ5TGlzdDxDb21tZW50Q29tcG9uZW50PjtcclxuXHJcbiAgICBnZXQgY29tbWVudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jb21tZW50c1F1ZXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG1lc3NhZ2UgY2FuIGJlIGZvdW5kIHdpdGhpbiBvbmUgb2YgdGhlIG1lc3NhZ2UgYnVmZmVycyAob2xkZXIsIGN1cnJlbnQsIG5ld2VyKVxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgXHJcbiAgICAgKi9cclxuICAgIGlzTWVzc2FnZUxvYWRlZEluQ29udGV4dChtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9sZGVyTWVzc2FnZXMuZmluZCh4ID0+IHguaWQgPT09IG1lc3NhZ2UuaWQpXHJcbiAgICAgICAgICAgIHx8IHRoaXMubWVzc2FnZXMuZmluZCh4ID0+IHguaWQgPT09IG1lc3NhZ2UuaWQpXHJcbiAgICAgICAgICAgIHx8IHRoaXMubmV3TWVzc2FnZXMuZmluZCh4ID0+IHguaWQgPT09IG1lc3NhZ2UuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRNZXNzYWdlSW5Db250ZXh0KG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2VMb2FkZWQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgbWVzc2FnZSAke21lc3NhZ2UuaWR9IGluIGNvbnRleHQuLi5gKTtcclxuICAgICAgICB3aGlsZSAodGhpcy5oYXNNb3JlICYmICF0aGlzLmlzTWVzc2FnZUxvYWRlZEluQ29udGV4dChtZXNzYWdlKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgLi4uTmVlZCB0byBsb2FkIG1vcmUgY29tbWVudHMgdG8gZmluZCAke21lc3NhZ2UuaWR9YCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd01vcmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCBsb2FkaW5nIGNvbW1lbnRzLCBoYXNNb3JlPSR7dGhpcy5oYXNNb3JlfWApO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNZXNzYWdlTG9hZGVkSW5Db250ZXh0KG1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHdoaWxlIGxvYWRpbmcgbWVzc2FnZSBpbiBjb250ZXh0OiBGYWlsZWQgdG8gZmluZCBtZXNzYWdlICR7bWVzc2FnZS5pZH0sIG1heWJlIGl0IHdhcyBkZWxldGVkIWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcGFnZVNpemUgPSB0aGlzLm1heFZpc2libGVNZXNzYWdlcztcclxuICAgICAgICBsZXQgaXRlbXMgPSBbXS5jb25jYXQodGhpcy5vbGRlck1lc3NhZ2VzLCB0aGlzLm1lc3NhZ2VzLCB0aGlzLm5ld01lc3NhZ2VzKTtcclxuICAgICAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBtZXNzYWdlLmlkKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB3aGlsZSBsb2FkaW5nIG1lc3NhZ2UgaW4gY29udGV4dDogTWVzc2FnZSB3YXMgbm90IHByZXNlbnQgaW4gbWVzc2FnZSBsaXN0IWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhgVG90YWwgbWVzc2FnZXM6ICR7aXRlbXMubGVuZ3RofWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBQYWdlIHNpemU6ICR7cGFnZVNpemV9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYE1lc3NhZ2UgaW5kZXg6ICR7aW5kZXh9YCk7XHJcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSBNYXRoLm1heCgwLCBpbmRleCAtIHBhZ2VTaXplIC8gMik7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFN0YXJ0IGluZGV4OiAke2luZGV4fWApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMubmV3TWVzc2FnZXMgPSBpdGVtcy5zcGxpY2UoMCwgc3RhcnRJbmRleCk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IGl0ZW1zLnNwbGljZSgwLCBwYWdlU2l6ZSk7XHJcbiAgICAgICAgdGhpcy5vbGRlck1lc3NhZ2VzID0gaXRlbXM7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMub2xkZXJNZXNzYWdlcy5sZW5ndGh9IG9sZGVyIG1lc3NhZ2VzYCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5tZXNzYWdlcy5sZW5ndGh9IGN1cnJlbnQgbWVzc2FnZXNgKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLm5ld01lc3NhZ2VzLmxlbmd0aH0gbmV3ZXIgbWVzc2FnZXNgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgQ29tbWVudENvbXBvbmVudCBpbnN0YW50aWF0ZWQgZm9yIHRoZSBnaXZlbiBDaGF0TWVzc2FnZSxcclxuICAgICAqIGlmIGl0IGV4aXN0cyBpbiB0aGUgY3VycmVudCB2aWV3LiBOb3RlIHRoYXQgbWVzc2FnZXMgd2hpY2ggYXJlIG5vdCBcclxuICAgICAqIGN1cnJlbnRseSBzaG93biB0byB0aGUgdXNlciB3aWxsIG5vdCByZXR1cm4gYSBDb21tZW50Q29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgZ2V0Q29tbWVudENvbXBvbmVudEZvck1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIW1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIHZhbGlkIENoYXRNZXNzYWdlYCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbWVudHMuZmluZCh4ID0+IHgubWVzc2FnZT8uaWQgPT09IG1lc3NhZ2UuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpeGVkLWhlaWdodCcpXHJcbiAgICBmaXhlZEhlaWdodDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2VsZWN0ZWRNZXNzYWdlOiBDaGF0TWVzc2FnZTtcclxuICAgIFxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgc2VsZWN0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBcclxuICAgIGdldCBtZXNzYWdlRWRpdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlRWRpdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVFZGl0KG1lc3NhZ2U6IENoYXRNZXNzYWdlLCBuZXdNZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlRWRpdGVkLm5leHQoeyBtZXNzYWdlLCBuZXdNZXNzYWdlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBnZXQgdXNlclNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fdXNlclNlbGVjdGVkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHJlcG9ydGVkKCkgeyByZXR1cm4gdGhpcy5fcmVwb3J0ZWQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgbGlrZWQoKSB7IHJldHVybiB0aGlzLl9saWtlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCB1bmxpa2VkKCkgeyByZXR1cm4gdGhpcy5fdW5saWtlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCB1c2VybmFtZVNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fdXNlcm5hbWVTZWxlY3RlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBhdmF0YXJTZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2F2YXRhclNlbGVjdGVkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHNoYXJlZCgpIHsgcmV0dXJuIHRoaXMuX3NoYXJlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBkZWxldGVkKCkgeyByZXR1cm4gdGhpcy5fZGVsZXRlZDsgfVxyXG5cclxuICAgIG1lbnVNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IG51bGw7XHJcbiAgICBtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSA9IFtdO1xyXG4gICAgY3VycmVudFVzZXI6IFVzZXI7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzb3VyY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBsaWtlTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2xpa2VkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5saWtlTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX3VubGlrZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXBvcnRNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RNZXNzYWdlVXNlcihtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZWxlY3RlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVzZXJuYW1lKHVzZXI6IFVzZXIpIHtcclxuICAgICAgICB0aGlzLl91c2VybmFtZVNlbGVjdGVkLm5leHQodXNlcik7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0QXZhdGFyKHVzZXI6IFVzZXIpIHtcclxuICAgICAgICB0aGlzLl9hdmF0YXJTZWxlY3RlZC5uZXh0KHVzZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHNoYXJlZE1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9zaGFyZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydEVkaXRpbmcobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VzLmZvckVhY2gobSA9PiBtLnRyYW5zaWVudFN0YXRlLmVkaXRpbmcgPSBmYWxzZSk7XHJcbiAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZS5lZGl0aW5nID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fZGVsZXRlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGN1c3RvbVNvcnRFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgbWFya1NvdXJjZUxvYWRlZDogKCkgPT4gdm9pZDtcclxuICAgIHNvdXJjZUxvYWRlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KHIgPT4gdGhpcy5tYXJrU291cmNlTG9hZGVkID0gcik7XHJcblxyXG4gICAgc2V0IHNvdXJjZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tU29ydEVuYWJsZWQgPSB2YWx1ZT8uc29ydE9yZGVyICE9PSBDb21tZW50c09yZGVyLk5FV0VTVDtcclxuICAgICAgICB0aGlzLm5ld01lc3NhZ2VzID0gW107XHJcbiAgICAgICAgdGhpcy5vbGRlck1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgICAgICh3aW5kb3cgYXMgYW55KS5iYW50YVNvdXJjZURlYnVnID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2VTdWJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3VicyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSAodmFsdWUubWVzc2FnZXMgfHwgW10pLnNsaWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSBtZXNzYWdlcztcclxuICAgICAgICAgICAgdGhpcy5vbGRlck1lc3NhZ2VzID0gbWVzc2FnZXMuc3BsaWNlKHRoaXMubWF4VmlzaWJsZU1lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLmhhc01vcmUgPSB0cnVlOyAvL3RoaXMub2xkZXJNZXNzYWdlcy5sZW5ndGggPiAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3Vicy5hZGQodGhpcy5fc291cmNlLm1lc3NhZ2VSZWNlaXZlZC5zdWJzY3JpYmUobXNnID0+IHRoaXMubWVzc2FnZVJlY2VpdmVkKG1zZykpKTtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3Vicy5hZGQodGhpcy5fc291cmNlLm1lc3NhZ2VTZW50LnN1YnNjcmliZShtc2cgPT4gdGhpcy5tZXNzYWdlU2VudChtc2cpKSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzLmFkZChcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja2VuZC51c2VyQ2hhbmdlZC5zdWJzY3JpYmUodXNlciA9PiB0aGlzLmN1cnJlbnRVc2VyID0gdXNlcilcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0SW5pdGlhbE1lc3NhZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0SW5pdGlhbE1lc3NhZ2VzKCkge1xyXG4gICAgICAgIGxldCBtZXNzYWdlcyA9IChhd2FpdCB0aGlzLl9zb3VyY2UuZ2V0RXhpc3RpbmdNZXNzYWdlcygpKTtcclxuICAgICAgICBtZXNzYWdlcy5mb3JFYWNoKG0gPT4gbS50cmFuc2llbnRTdGF0ZSA/Pz0ge30pO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm5ld2VzdExhc3QgPyBtZXNzYWdlcy5zbGljZSgpLnJldmVyc2UoKSA6IG1lc3NhZ2VzO1xyXG4gICAgICAgIHRoaXMuc29ydE1lc3NhZ2VzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMubWFya1NvdXJjZUxvYWRlZClcclxuICAgICAgICAgICAgdGhpcy5tYXJrU291cmNlTG9hZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdlbmVyaWNBdmF0YXJVcmw6IHN0cmluZztcclxuXHJcbiAgICBAVmlld0NoaWxkKCdtZXNzYWdlQ29udGFpbmVyJylcclxuICAgIG1lc3NhZ2VDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBtYXhNZXNzYWdlcyA9IDIwMDA7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIG1heFZpc2libGVNZXNzYWdlczogbnVtYmVyID0gMjAwO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBuZXdlc3RMYXN0ID0gZmFsc2U7XHJcblxyXG4gICAgaXNWaWV3aW5nTW9yZSA9IGZhbHNlO1xyXG4gICAgaXNMb2FkaW5nTW9yZSA9IGZhbHNlO1xyXG4gICAgaGFzTW9yZSA9IGZhbHNlO1xyXG5cclxuICAgIG5ld01lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdID0gW107XHJcbiAgICBvbGRlck1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdID0gW107XHJcblxyXG4gICAgbWVzc2FnZUlkZW50aXR5KGluZGV4OiBudW1iZXIsIGNoYXRNZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHJldHVybiBjaGF0TWVzc2FnZS5pZDtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHNvcnRPcmRlckNoYW5nZWQgPSBuZXcgU3ViamVjdDxDb21tZW50c09yZGVyPigpO1xyXG5cclxuICAgIGFzeW5jIHNob3dOZXcoKSB7XHJcbiAgICAgICAgbGV0IG5hdHVyYWxPcmRlciA9IENvbW1lbnRzT3JkZXIuTkVXRVNUO1xyXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5zb3J0T3JkZXIgIT09IG5hdHVyYWxPcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRPcmRlckNoYW5nZWQubmV4dChuYXR1cmFsT3JkZXIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzVmlld2luZ01vcmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmV3ZXN0TGFzdClcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHRoaXMubWVzc2FnZXMuY29uY2F0KHRoaXMubmV3TWVzc2FnZXMuc3BsaWNlKDAsIHRoaXMubmV3TWVzc2FnZXMubGVuZ3RoKSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5uZXdNZXNzYWdlcy5zcGxpY2UoMCwgdGhpcy5uZXdNZXNzYWdlcy5sZW5ndGgpLmNvbmNhdCh0aGlzLm1lc3NhZ2VzKTtcclxuICAgICAgICBsZXQgb3ZlcmZsb3cgPSB0aGlzLm1lc3NhZ2VzLnNwbGljZSh0aGlzLm1heFZpc2libGVNZXNzYWdlcywgdGhpcy5tZXNzYWdlcy5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMub2xkZXJNZXNzYWdlcyA9IG92ZXJmbG93LmNvbmNhdCh0aGlzLm9sZGVyTWVzc2FnZXMpO1xyXG4gICAgICAgIHRoaXMub2xkZXJNZXNzYWdlcy5zcGxpY2UodGhpcy5tYXhNZXNzYWdlcyAtIHRoaXMubWF4VmlzaWJsZU1lc3NhZ2VzLCB0aGlzLm9sZGVyTWVzc2FnZXMubGVuZ3RoKTtcclxuICAgICAgICB0aGlzLmhhc01vcmUgPSB0aGlzLm9sZGVyTWVzc2FnZXMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93TW9yZSgpIHtcclxuICAgICAgICB0aGlzLmlzVmlld2luZ01vcmUgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vbGRlck1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzLmNvbmNhdCh0aGlzLm9sZGVyTWVzc2FnZXMuc3BsaWNlKDAsIDUwKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGxldCBuZXh0UGFnZVNpemUgPSAyMDtcclxuICAgICAgICBsZXQgbGFzdE1lc3NhZ2U6IENoYXRNZXNzYWdlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5uZXdlc3RMYXN0KSB7XHJcbiAgICAgICAgICAgIGxhc3RNZXNzYWdlID0gdGhpcy5vbGRlck1lc3NhZ2VzWzBdID8/IHRoaXMubWVzc2FnZXNbMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFzdE1lc3NhZ2UgPSB0aGlzLm9sZGVyTWVzc2FnZXNbdGhpcy5vbGRlck1lc3NhZ2VzLmxlbmd0aCAtIDFdID8/IHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUuZGlyKGxhc3RNZXNzYWdlKTtcclxuXHJcbiAgICAgICAgaWYgKCFsYXN0TWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oYXNNb3JlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuc291cmNlLmxvYWRBZnRlcihsYXN0TWVzc2FnZSwgbmV4dFBhZ2VTaXplKTtcclxuICAgICAgICBtZXNzYWdlcy5mb3JFYWNoKG0gPT4gbS50cmFuc2llbnRTdGF0ZSA/Pz0ge30pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5uZXdlc3RMYXN0KVxyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gbWVzc2FnZXMuY29uY2F0KHRoaXMubWVzc2FnZXMpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHRoaXMubWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzKTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmUgPSBmYWxzZTtcclxuICAgICAgICBpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGxpc3QuYCk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZE1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuXHJcbiAgICAgICAgaWYgKCFtZXNzYWdlLnRyYW5zaWVudFN0YXRlKVxyXG4gICAgICAgICAgICBtZXNzYWdlLnRyYW5zaWVudFN0YXRlID8/PSB7fTtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgZGVzdGluYXRpb24gPSB0aGlzLm1lc3NhZ2VzO1xyXG4gICAgICAgIGxldCBidWNrZXQgPSB0aGlzLm9sZGVyTWVzc2FnZXM7XHJcbiAgICAgICAgbGV0IG5ld2VzdExhc3QgPSB0aGlzLm5ld2VzdExhc3Q7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzVmlld2luZ01vcmUpIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb24gPSB0aGlzLm5ld01lc3NhZ2VzO1xyXG4gICAgICAgICAgICBidWNrZXQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKG5ld2VzdExhc3QpIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb24ucHVzaChtZXNzYWdlKTtcclxuICAgICAgICAgICAgbGV0IG92ZXJmbG93ID0gZGVzdGluYXRpb24uc3BsaWNlKHRoaXMubWF4VmlzaWJsZU1lc3NhZ2VzLCBkZXN0aW5hdGlvbi5sZW5ndGgpO1xyXG4gICAgICAgICAgICBidWNrZXQ/LnB1c2goLi4ub3ZlcmZsb3cpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLnVuc2hpZnQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxldCBvdmVyZmxvdyA9IGRlc3RpbmF0aW9uLnNwbGljZSh0aGlzLm1heFZpc2libGVNZXNzYWdlcywgZGVzdGluYXRpb24ubGVuZ3RoKTtcclxuICAgICAgICAgICAgYnVja2V0Py51bnNoaWZ0KC4uLm92ZXJmbG93KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChidWNrZXQ/Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMuaGFzTW9yZSA9IHRydWU7XHJcblxyXG4gICAgICAgIG1lc3NhZ2UucGFnaW5nQ3Vyc29yID0gU3RyaW5nKHRoaXMuaW5jcmVtZW50UGFnaW5nQ3Vyc29ycygpKTtcclxuICAgICAgICB0aGlzLnNvcnRNZXNzYWdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5jcmVtZW50UGFnaW5nQ3Vyc29ycygpIHtcclxuICAgICAgICBpZiAodGhpcy5zb3VyY2Uuc29ydE9yZGVyICE9PSBDb21tZW50c09yZGVyLk5FV0VTVClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBtYXhQYWdpbmdDdXJzb3IgPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGdyb3VwIG9mIFt0aGlzLm1lc3NhZ2VzLCB0aGlzLm9sZGVyTWVzc2FnZXMsIHRoaXMubmV3TWVzc2FnZXNdKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IG1lc3NhZ2Ugb2YgZ3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhZ2luZ0N1cnNvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYWdpbmdDdXJzb3IgPSBOdW1iZXIobWVzc2FnZS5wYWdpbmdDdXJzb3IpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFnaW5nQ3Vyc29yID4gbWF4UGFnaW5nQ3Vyc29yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhQYWdpbmdDdXJzb3IgPSBwYWdpbmdDdXJzb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5wYWdpbmdDdXJzb3IgPSBTdHJpbmcocGFnaW5nQ3Vyc29yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1heFBhZ2luZ0N1cnNvcjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNvcnRNZXNzYWdlcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc291cmNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHNvcnRlcjogKGE6IENoYXRNZXNzYWdlLCBiOiBDaGF0TWVzc2FnZSkgPT4gbnVtYmVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zb3VyY2Uuc29ydE9yZGVyID09PSBDb21tZW50c09yZGVyLkxJS0VTKVxyXG4gICAgICAgICAgICBzb3J0ZXIgPSAoYSwgYikgPT4gYi5saWtlcyAtIGEubGlrZXM7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zb3VyY2Uuc29ydE9yZGVyID09PSBDb21tZW50c09yZGVyLk5FV0VTVClcclxuICAgICAgICAgICAgc29ydGVyID0gKGEsIGIpID0+IChiLnNlbnRBdCAtIGEuc2VudEF0KSAqICh0aGlzLm5ld2VzdExhc3QgPyAtMSA6IDEpO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc291cmNlLnNvcnRPcmRlciA9PT0gQ29tbWVudHNPcmRlci5PTERFU1QpXHJcbiAgICAgICAgICAgIHNvcnRlciA9IChhLCBiKSA9PiAoYS5zZW50QXQgLSBiLnNlbnRBdCkgKiAodGhpcy5uZXdlc3RMYXN0ID8gLTEgOiAxKTtcclxuXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcy5zb3J0KHNvcnRlcik7XHJcbiAgICAgICAgdGhpcy5vbGRlck1lc3NhZ2VzLnNvcnQoc29ydGVyKTtcclxuICAgICAgICB0aGlzLm5ld01lc3NhZ2VzLnNvcnQoc29ydGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VSZWNlaXZlZChtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShtZXNzYWdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxlZFRvTGF0ZXN0KCkpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zY3JvbGxUb0xhdGVzdCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1Njcm9sbGVkVG9MYXRlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VDb250YWluZXIpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLm1lc3NhZ2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBjb25zdCBjdXJyZW50U2Nyb2xsID0gZWwuc2Nyb2xsVG9wO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUb3RhbCA9IGVsLnNjcm9sbEhlaWdodCAtIGVsLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTY3JvbGwgPiBjdXJyZW50VG90YWwgLSAxMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZW50KG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUNvbnRhaW5lcilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbFRvTGF0ZXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsVG9MYXRlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VDb250YWluZXIpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLm1lc3NhZ2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgbWVudGlvbnNNZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50VXNlcilcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAobWVzc2FnZS5tZXNzYWdlLmluY2x1ZGVzKGBAJHt0aGlzLmN1cnJlbnRVc2VyLnVzZXJuYW1lfWApKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1lbnRzL2NvbW1lbnQtdmlldy9jb21tZW50LXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFZaEUsTUFBTSxPQUFPLG9CQUFvQjtJQUM3QixZQUNZLE9BQXdCO1FBQXhCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBSzVCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVqQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN2QyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUNwQyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN0QyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN2QyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDM0Msc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN4QyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDdEMsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDckMsYUFBUSxHQUFHLElBQUksT0FB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TUFBTTt1QkFDTixNQUFNO29CQUNOLE1BQU07c0JBQ04sTUFBTTsrQkFDTixNQUFNOzZCQUNOLE1BQU07cUJBQ04sTUFBTTtzQkFDTixNQUFNO3FCQU1OLEtBQUs7K0JBMkZMLEtBQUs7K0JBR0wsU0FBUyxTQUFDLGtCQUFrQjswQkFHNUIsS0FBSztpQ0FHTCxLQUFLO3lCQUdMLEtBQUs7K0JBY0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT3V0cHV0LCBIb3N0QmluZGluZywgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBVc2VyLCBDaGF0TWVzc2FnZSwgQ29tbWVudHNPcmRlciB9IGZyb20gJ0BiYW50YS9jb21tb24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlIH0gZnJvbSBcIi4uLy4uL2NoYXQtYmFja2VuZC1iYXNlXCI7XHJcbmltcG9ydCB7IENoYXRTb3VyY2VCYXNlIH0gZnJvbSBcIi4uLy4uL2NoYXQtc291cmNlLWJhc2VcIjtcclxuaW1wb3J0IHsgTWVzc2FnZU1lbnVJdGVtIH0gZnJvbSBcIi4uLy4uL21lc3NhZ2UtbWVudS1pdGVtXCI7XHJcbmltcG9ydCB7IENvbW1lbnRDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tbWVudC9jb21tZW50LmNvbXBvbmVudFwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFZGl0RXZlbnQge1xyXG4gICAgbWVzc2FnZTogQ2hhdE1lc3NhZ2U7XHJcbiAgICBuZXdNZXNzYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYW50YS1jb21tZW50LXZpZXcnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb21tZW50LXZpZXcuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbWVudFZpZXdDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBiYWNrZW5kOiBDaGF0QmFja2VuZEJhc2VcclxuICAgICkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zb3VyY2VTdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgcHJpdmF0ZSBfc291cmNlOiBDaGF0U291cmNlQmFzZTtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9saWtlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdW5saWtlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfcmVwb3J0ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3VzZXJTZWxlY3RlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdXNlcm5hbWVTZWxlY3RlZCA9IG5ldyBTdWJqZWN0PFVzZXI+KCk7XHJcbiAgICBwcml2YXRlIF9hdmF0YXJTZWxlY3RlZCA9IG5ldyBTdWJqZWN0PFVzZXI+KCk7XHJcbiAgICBwcml2YXRlIF9zaGFyZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX2RlbGV0ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX21lc3NhZ2VFZGl0ZWQgPSBuZXcgU3ViamVjdDxFZGl0RXZlbnQ+KCk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNob3dFbXB0eVN0YXRlID0gdHJ1ZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgYWxsb3dSZXBsaWVzID0gdHJ1ZTtcclxuXHJcbiAgICBASW5wdXQoKSBjdXN0b21NZW51SXRlbXM6IE1lc3NhZ2VNZW51SXRlbVtdID0gW107XHJcblxyXG4gICAgQFZpZXdDaGlsZHJlbihDb21tZW50Q29tcG9uZW50KVxyXG4gICAgY29tbWVudHNRdWVyeTogUXVlcnlMaXN0PENvbW1lbnRDb21wb25lbnQ+O1xyXG5cclxuICAgIGdldCBjb21tZW50cygpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNvbW1lbnRzUXVlcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgbWVzc2FnZSBjYW4gYmUgZm91bmQgd2l0aGluIG9uZSBvZiB0aGUgbWVzc2FnZSBidWZmZXJzIChvbGRlciwgY3VycmVudCwgbmV3ZXIpXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBcclxuICAgICAqL1xyXG4gICAgaXNNZXNzYWdlTG9hZGVkSW5Db250ZXh0KG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2xkZXJNZXNzYWdlcy5maW5kKHggPT4geC5pZCA9PT0gbWVzc2FnZS5pZClcclxuICAgICAgICAgICAgfHwgdGhpcy5tZXNzYWdlcy5maW5kKHggPT4geC5pZCA9PT0gbWVzc2FnZS5pZClcclxuICAgICAgICAgICAgfHwgdGhpcy5uZXdNZXNzYWdlcy5maW5kKHggPT4geC5pZCA9PT0gbWVzc2FnZS5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZE1lc3NhZ2VJbkNvbnRleHQobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZUxvYWRlZDtcclxuICAgICAgICBcclxuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBtZXNzYWdlICR7bWVzc2FnZS5pZH0gaW4gY29udGV4dC4uLmApO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmhhc01vcmUgJiYgIXRoaXMuaXNNZXNzYWdlTG9hZGVkSW5Db250ZXh0KG1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAuLi5OZWVkIHRvIGxvYWQgbW9yZSBjb21tZW50cyB0byBmaW5kICR7bWVzc2FnZS5pZH1gKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93TW9yZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTWVzc2FnZUxvYWRlZEluQ29udGV4dChtZXNzYWdlKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB3aGlsZSBsb2FkaW5nIG1lc3NhZ2UgaW4gY29udGV4dDogRmFpbGVkIHRvIGZpbmQgbWVzc2FnZSAke21lc3NhZ2UuaWR9LCBtYXliZSBpdCB3YXMgZGVsZXRlZCFgKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHBhZ2VTaXplID0gdGhpcy5tYXhWaXNpYmxlTWVzc2FnZXM7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW10uY29uY2F0KHRoaXMub2xkZXJNZXNzYWdlcywgdGhpcy5tZXNzYWdlcywgdGhpcy5uZXdNZXNzYWdlcyk7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbWVzc2FnZS5pZCk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3Igd2hpbGUgbG9hZGluZyBtZXNzYWdlIGluIGNvbnRleHQ6IE1lc3NhZ2Ugd2FzIG5vdCBwcmVzZW50IGluIG1lc3NhZ2UgbGlzdCFgKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSBNYXRoLm1heCgwLCBpbmRleCAtIHBhZ2VTaXplIC8gMik7ICAgICAgICBcclxuICAgICAgICB0aGlzLm5ld01lc3NhZ2VzID0gaXRlbXMuc3BsaWNlKDAsIHN0YXJ0SW5kZXgpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBpdGVtcy5zcGxpY2UoMCwgcGFnZVNpemUpO1xyXG4gICAgICAgIHRoaXMub2xkZXJNZXNzYWdlcyA9IGl0ZW1zO1xyXG4gICAgICAgIHRoaXMuaXNWaWV3aW5nTW9yZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIENvbW1lbnRDb21wb25lbnQgaW5zdGFudGlhdGVkIGZvciB0aGUgZ2l2ZW4gQ2hhdE1lc3NhZ2UsXHJcbiAgICAgKiBpZiBpdCBleGlzdHMgaW4gdGhlIGN1cnJlbnQgdmlldy4gTm90ZSB0aGF0IG1lc3NhZ2VzIHdoaWNoIGFyZSBub3QgXHJcbiAgICAgKiBjdXJyZW50bHkgc2hvd24gdG8gdGhlIHVzZXIgd2lsbCBub3QgcmV0dXJuIGEgQ29tbWVudENvbXBvbmVudC5cclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGdldENvbW1lbnRDb21wb25lbnRGb3JNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCFtZXNzYWdlKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSB2YWxpZCBDaGF0TWVzc2FnZWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1lbnRzLmZpbmQoeCA9PiB4Lm1lc3NhZ2U/LmlkID09PSBtZXNzYWdlLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5maXhlZC1oZWlnaHQnKVxyXG4gICAgZml4ZWRIZWlnaHQ6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNlbGVjdGVkTWVzc2FnZTogQ2hhdE1lc3NhZ2U7XHJcbiAgICBcclxuICAgIEBPdXRwdXQoKVxyXG4gICAgZ2V0IHNlbGVjdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgXHJcbiAgICBnZXQgbWVzc2FnZUVkaXRlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUVkaXRlZC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlRWRpdChtZXNzYWdlOiBDaGF0TWVzc2FnZSwgbmV3TWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUVkaXRlZC5uZXh0KHsgbWVzc2FnZSwgbmV3TWVzc2FnZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgZ2V0IHVzZXJTZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX3VzZXJTZWxlY3RlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCByZXBvcnRlZCgpIHsgcmV0dXJuIHRoaXMuX3JlcG9ydGVkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IGxpa2VkKCkgeyByZXR1cm4gdGhpcy5fbGlrZWQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgdW5saWtlZCgpIHsgcmV0dXJuIHRoaXMuX3VubGlrZWQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgdXNlcm5hbWVTZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX3VzZXJuYW1lU2VsZWN0ZWQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgYXZhdGFyU2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl9hdmF0YXJTZWxlY3RlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBzaGFyZWQoKSB7IHJldHVybiB0aGlzLl9zaGFyZWQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgZGVsZXRlZCgpIHsgcmV0dXJuIHRoaXMuX2RlbGV0ZWQ7IH1cclxuXHJcbiAgICBtZW51TWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSBudWxsO1xyXG4gICAgbWVzc2FnZXM6IENoYXRNZXNzYWdlW10gPSBbXTtcclxuICAgIGN1cnJlbnRVc2VyOiBVc2VyO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc291cmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGlrZU1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9saWtlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHVubGlrZU1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl91bmxpa2VkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVwb3J0TWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0TWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0TWVzc2FnZVVzZXIobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVc2VybmFtZSh1c2VyOiBVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlcm5hbWVTZWxlY3RlZC5uZXh0KHVzZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdEF2YXRhcih1c2VyOiBVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5fYXZhdGFyU2VsZWN0ZWQubmV4dCh1c2VyKTtcclxuICAgIH1cclxuXHJcbiAgICBzaGFyZWRNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fc2hhcmVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRFZGl0aW5nKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcy5mb3JFYWNoKG0gPT4gbS50cmFuc2llbnRTdGF0ZS5lZGl0aW5nID0gZmFsc2UpO1xyXG4gICAgICAgIG1lc3NhZ2UudHJhbnNpZW50U3RhdGUuZWRpdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2RlbGV0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBjdXN0b21Tb3J0RW5hYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIG1hcmtTb3VyY2VMb2FkZWQ6ICgpID0+IHZvaWQ7XHJcbiAgICBzb3VyY2VMb2FkZWQgPSBuZXcgUHJvbWlzZTx2b2lkPihyID0+IHRoaXMubWFya1NvdXJjZUxvYWRlZCA9IHIpO1xyXG5cclxuICAgIHNldCBzb3VyY2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmN1c3RvbVNvcnRFbmFibGVkID0gdmFsdWU/LnNvcnRPcmRlciAhPT0gQ29tbWVudHNPcmRlci5ORVdFU1Q7XHJcbiAgICAgICAgdGhpcy5uZXdNZXNzYWdlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMub2xkZXJNZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgICAgICAod2luZG93IGFzIGFueSkuYmFudGFTb3VyY2VEZWJ1ZyA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fc291cmNlU3Vicykge1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gKHZhbHVlLm1lc3NhZ2VzIHx8IFtdKS5zbGljZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gbWVzc2FnZXM7XHJcbiAgICAgICAgICAgIHRoaXMub2xkZXJNZXNzYWdlcyA9IG1lc3NhZ2VzLnNwbGljZSh0aGlzLm1heFZpc2libGVNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgdGhpcy5oYXNNb3JlID0gdHJ1ZTsgLy90aGlzLm9sZGVyTWVzc2FnZXMubGVuZ3RoID4gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnMuYWRkKHRoaXMuX3NvdXJjZS5tZXNzYWdlUmVjZWl2ZWQuc3Vic2NyaWJlKG1zZyA9PiB0aGlzLm1lc3NhZ2VSZWNlaXZlZChtc2cpKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnMuYWRkKHRoaXMuX3NvdXJjZS5tZXNzYWdlU2VudC5zdWJzY3JpYmUobXNnID0+IHRoaXMubWVzc2FnZVNlbnQobXNnKSkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3Vicy5hZGQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2tlbmQudXNlckNoYW5nZWQuc3Vic2NyaWJlKHVzZXIgPT4gdGhpcy5jdXJyZW50VXNlciA9IHVzZXIpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldEluaXRpYWxNZXNzYWdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldEluaXRpYWxNZXNzYWdlcygpIHtcclxuICAgICAgICBsZXQgbWVzc2FnZXMgPSAoYXdhaXQgdGhpcy5fc291cmNlLmdldEV4aXN0aW5nTWVzc2FnZXMoKSk7XHJcbiAgICAgICAgbWVzc2FnZXMuZm9yRWFjaChtID0+IG0udHJhbnNpZW50U3RhdGUgPz89IHt9KTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5uZXdlc3RMYXN0ID8gbWVzc2FnZXMuc2xpY2UoKS5yZXZlcnNlKCkgOiBtZXNzYWdlcztcclxuICAgICAgICB0aGlzLnNvcnRNZXNzYWdlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLm1hcmtTb3VyY2VMb2FkZWQpXHJcbiAgICAgICAgICAgIHRoaXMubWFya1NvdXJjZUxvYWRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZW5lcmljQXZhdGFyVXJsOiBzdHJpbmc7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbWVzc2FnZUNvbnRhaW5lcicpXHJcbiAgICBtZXNzYWdlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgbWF4TWVzc2FnZXMgPSAyMDAwO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBtYXhWaXNpYmxlTWVzc2FnZXM6IG51bWJlciA9IDIwMDtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgbmV3ZXN0TGFzdCA9IGZhbHNlO1xyXG5cclxuICAgIGlzVmlld2luZ01vcmUgPSBmYWxzZTtcclxuICAgIGlzTG9hZGluZ01vcmUgPSBmYWxzZTtcclxuICAgIGhhc01vcmUgPSBmYWxzZTtcclxuXHJcbiAgICBuZXdNZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSA9IFtdO1xyXG4gICAgb2xkZXJNZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSA9IFtdO1xyXG5cclxuICAgIG1lc3NhZ2VJZGVudGl0eShpbmRleDogbnVtYmVyLCBjaGF0TWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICByZXR1cm4gY2hhdE1lc3NhZ2UuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBzb3J0T3JkZXJDaGFuZ2VkID0gbmV3IFN1YmplY3Q8Q29tbWVudHNPcmRlcj4oKTtcclxuXHJcbiAgICBhc3luYyBzaG93TmV3KCkge1xyXG4gICAgICAgIGxldCBuYXR1cmFsT3JkZXIgPSBDb21tZW50c09yZGVyLk5FV0VTVDtcclxuICAgICAgICBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2Uuc29ydE9yZGVyICE9PSBuYXR1cmFsT3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3J0T3JkZXJDaGFuZ2VkLm5leHQobmF0dXJhbE9yZGVyKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1ZpZXdpbmdNb3JlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5ld2VzdExhc3QpXHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzLmNvbmNhdCh0aGlzLm5ld01lc3NhZ2VzLnNwbGljZSgwLCB0aGlzLm5ld01lc3NhZ2VzLmxlbmd0aCkpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHRoaXMubmV3TWVzc2FnZXMuc3BsaWNlKDAsIHRoaXMubmV3TWVzc2FnZXMubGVuZ3RoKS5jb25jYXQodGhpcy5tZXNzYWdlcyk7XHJcbiAgICAgICAgbGV0IG92ZXJmbG93ID0gdGhpcy5tZXNzYWdlcy5zcGxpY2UodGhpcy5tYXhWaXNpYmxlTWVzc2FnZXMsIHRoaXMubWVzc2FnZXMubGVuZ3RoKTtcclxuICAgICAgICB0aGlzLm9sZGVyTWVzc2FnZXMgPSBvdmVyZmxvdy5jb25jYXQodGhpcy5vbGRlck1lc3NhZ2VzKTtcclxuICAgICAgICB0aGlzLm9sZGVyTWVzc2FnZXMuc3BsaWNlKHRoaXMubWF4TWVzc2FnZXMgLSB0aGlzLm1heFZpc2libGVNZXNzYWdlcywgdGhpcy5vbGRlck1lc3NhZ2VzLmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy5oYXNNb3JlID0gdGhpcy5vbGRlck1lc3NhZ2VzLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd01vcmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc1ZpZXdpbmdNb3JlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub2xkZXJNZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlcy5jb25jYXQodGhpcy5vbGRlck1lc3NhZ2VzLnNwbGljZSgwLCA1MCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmUgPSB0cnVlO1xyXG5cclxuICAgICAgICBsZXQgbmV4dFBhZ2VTaXplID0gMjA7XHJcbiAgICAgICAgbGV0IGxhc3RNZXNzYWdlOiBDaGF0TWVzc2FnZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmV3ZXN0TGFzdCkge1xyXG4gICAgICAgICAgICBsYXN0TWVzc2FnZSA9IHRoaXMub2xkZXJNZXNzYWdlc1swXSA/PyB0aGlzLm1lc3NhZ2VzWzBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxhc3RNZXNzYWdlID0gdGhpcy5vbGRlck1lc3NhZ2VzW3RoaXMub2xkZXJNZXNzYWdlcy5sZW5ndGggLSAxXSA/PyB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWxhc3RNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmhhc01vcmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5zb3VyY2UubG9hZEFmdGVyKGxhc3RNZXNzYWdlLCBuZXh0UGFnZVNpemUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5uZXdlc3RMYXN0KVxyXG4gICAgICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzLnNsaWNlKCkucmV2ZXJzZSgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG1lc3NhZ2VzLmZvckVhY2gobSA9PiBtLnRyYW5zaWVudFN0YXRlID8/PSB7fSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5ld2VzdExhc3QpXHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSBtZXNzYWdlcy5jb25jYXQodGhpcy5tZXNzYWdlcyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlcy5jb25jYXQobWVzc2FnZXMpO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbGlzdC5gKTtcclxuICAgICAgICAgICAgdGhpcy5oYXNNb3JlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG5cclxuICAgICAgICBpZiAoIW1lc3NhZ2UudHJhbnNpZW50U3RhdGUpXHJcbiAgICAgICAgICAgIG1lc3NhZ2UudHJhbnNpZW50U3RhdGUgPz89IHt9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBkZXN0aW5hdGlvbiA9IHRoaXMubWVzc2FnZXM7XHJcbiAgICAgICAgbGV0IGJ1Y2tldCA9IHRoaXMub2xkZXJNZXNzYWdlcztcclxuICAgICAgICBsZXQgbmV3ZXN0TGFzdCA9IHRoaXMubmV3ZXN0TGFzdDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNWaWV3aW5nTW9yZSkge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHRoaXMubmV3TWVzc2FnZXM7XHJcbiAgICAgICAgICAgIGJ1Y2tldCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBcclxuICAgICAgICBpZiAobmV3ZXN0TGFzdCkge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5wdXNoKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBsZXQgb3ZlcmZsb3cgPSBkZXN0aW5hdGlvbi5zcGxpY2UodGhpcy5tYXhWaXNpYmxlTWVzc2FnZXMsIGRlc3RpbmF0aW9uLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGJ1Y2tldD8ucHVzaCguLi5vdmVyZmxvdyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb24udW5zaGlmdChtZXNzYWdlKTtcclxuICAgICAgICAgICAgbGV0IG92ZXJmbG93ID0gZGVzdGluYXRpb24uc3BsaWNlKHRoaXMubWF4VmlzaWJsZU1lc3NhZ2VzLCBkZXN0aW5hdGlvbi5sZW5ndGgpO1xyXG4gICAgICAgICAgICBidWNrZXQ/LnVuc2hpZnQoLi4ub3ZlcmZsb3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJ1Y2tldD8ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5oYXNNb3JlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgbWVzc2FnZS5wYWdpbmdDdXJzb3IgPSBTdHJpbmcodGhpcy5pbmNyZW1lbnRQYWdpbmdDdXJzb3JzKCkpO1xyXG4gICAgICAgIHRoaXMuc29ydE1lc3NhZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbmNyZW1lbnRQYWdpbmdDdXJzb3JzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZS5zb3J0T3JkZXIgIT09IENvbW1lbnRzT3JkZXIuTkVXRVNUKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IG1heFBhZ2luZ0N1cnNvciA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgZ3JvdXAgb2YgW3RoaXMubWVzc2FnZXMsIHRoaXMub2xkZXJNZXNzYWdlcywgdGhpcy5uZXdNZXNzYWdlc10pIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbWVzc2FnZSBvZiBncm91cCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFnaW5nQ3Vyc29yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhZ2luZ0N1cnNvciA9IE51bWJlcihtZXNzYWdlLnBhZ2luZ0N1cnNvcikgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYWdpbmdDdXJzb3IgPiBtYXhQYWdpbmdDdXJzb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFBhZ2luZ0N1cnNvciA9IHBhZ2luZ0N1cnNvcjtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnBhZ2luZ0N1cnNvciA9IFN0cmluZyhwYWdpbmdDdXJzb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWF4UGFnaW5nQ3Vyc29yO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2FpdCBmb3IgYWxsIGN1cnJlbnRseSB2aXNpYmxlIGNvbW1lbnRzIHRvIGJlIGZ1bGx5IGxvYWRlZCwgaW5jbHVkaW5nIGFsbCBhdHRhY2htZW50cy5cclxuICAgICAqIERvaW5nIHRoaXMgd2lsbCBwcmV2ZW50IGxheW91dCBzaGlmdCB3aGVuIHNjcm9sbGluZyB0byBhIHNwZWNpZmljIGNvbW1lbnQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHdhaXRGb3JBbGxDb21tZW50c1RvTG9hZCgpIHtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTAwKSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2VMb2FkZWQ7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5jb21tZW50cy5tYXAoeCA9PiB4LndhaXRGb3JMb2FkKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNvcnRNZXNzYWdlcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc291cmNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHNvcnRlcjogKGE6IENoYXRNZXNzYWdlLCBiOiBDaGF0TWVzc2FnZSkgPT4gbnVtYmVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zb3VyY2Uuc29ydE9yZGVyID09PSBDb21tZW50c09yZGVyLkxJS0VTKVxyXG4gICAgICAgICAgICBzb3J0ZXIgPSAoYSwgYikgPT4gYi5saWtlcyAtIGEubGlrZXM7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zb3VyY2Uuc29ydE9yZGVyID09PSBDb21tZW50c09yZGVyLk5FV0VTVClcclxuICAgICAgICAgICAgc29ydGVyID0gKGEsIGIpID0+IChiLnNlbnRBdCAtIGEuc2VudEF0KSAqICh0aGlzLm5ld2VzdExhc3QgPyAtMSA6IDEpO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc291cmNlLnNvcnRPcmRlciA9PT0gQ29tbWVudHNPcmRlci5PTERFU1QpXHJcbiAgICAgICAgICAgIHNvcnRlciA9IChhLCBiKSA9PiAoYS5zZW50QXQgLSBiLnNlbnRBdCkgKiAodGhpcy5uZXdlc3RMYXN0ID8gLTEgOiAxKTtcclxuXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcy5zb3J0KHNvcnRlcik7XHJcbiAgICAgICAgdGhpcy5vbGRlck1lc3NhZ2VzLnNvcnQoc29ydGVyKTtcclxuICAgICAgICB0aGlzLm5ld01lc3NhZ2VzLnNvcnQoc29ydGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VSZWNlaXZlZChtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShtZXNzYWdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxlZFRvTGF0ZXN0KCkpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zY3JvbGxUb0xhdGVzdCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1Njcm9sbGVkVG9MYXRlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VDb250YWluZXIpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLm1lc3NhZ2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBjb25zdCBjdXJyZW50U2Nyb2xsID0gZWwuc2Nyb2xsVG9wO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUb3RhbCA9IGVsLnNjcm9sbEhlaWdodCAtIGVsLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTY3JvbGwgPiBjdXJyZW50VG90YWwgLSAxMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZW50KG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUNvbnRhaW5lcilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbFRvTGF0ZXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsVG9MYXRlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VDb250YWluZXIpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLm1lc3NhZ2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgbWVudGlvbnNNZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50VXNlcilcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAobWVzc2FnZS5tZXNzYWdlLmluY2x1ZGVzKGBAJHt0aGlzLmN1cnJlbnRVc2VyLnVzZXJuYW1lfWApKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==