@datarailsshared/datarailsshared 1.6.208 → 1.6.212

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.
@@ -205,7 +205,7 @@ export class DrChatFormDropdownComponent {
205
205
  i0.ɵɵlistener("drop", function DrChatFormDropdownComponent_drop_HostBindingHandler($event) { return ctx.onDrop($event); })("dragover", function DrChatFormDropdownComponent_dragover_HostBindingHandler($event) { return ctx.onDragOver($event); })("dragleave", function DrChatFormDropdownComponent_dragleave_HostBindingHandler($event) { return ctx.onDragLeave($event); });
206
206
  } if (rf & 2) {
207
207
  i0.ɵɵclassProp("file-over", ctx.fileOver);
208
- } }, inputs: { isUploadingFiles: "isUploadingFiles", message: "message", messagePlaceholder: "messagePlaceholder", dropFiles: "dropFiles", dropFilePlaceholder: "dropFilePlaceholder", waitForReply: "waitForReply", showDotFlashing: "showDotFlashing" }, outputs: { send: "send", uploadFiles: "uploadFiles", abort: "abort", inputChange: "inputChange" }, ngContentSelectors: _c5, decls: 17, vars: 20, consts: [[1, "message-row", 3, "ngClass"], [1, "message-row__input", 3, "ngClass"], [3, "files", "isRemovable", "maxLengthText", "removeFileEvent", 4, "ngIf"], [1, "message-row__input-textarea-wrap"], ["type", "text", 3, "ngModel", "rows", "placeholder", "focus", "blur", "mouseenter", "mouseleave", "ngModelChange", "keydown.enter"], ["textAreaElement", ""], [1, "message-row__btns"], ["type", "file", "hidden", "", "multiple", "", 3, "change"], ["fileInput", ""], ["class", "dr-icon-send-arrow-up send-button", 3, "click", 4, "ngIf"], ["class", "dr-icon-stop abort-button", 3, "click", 4, "ngIf"], ["class", "wait-reply-dot-flashing", 4, "ngIf"], [3, "files", "isRemovable", "maxLengthText", "removeFileEvent"], [1, "dr-icon-send-arrow-up", "send-button", 3, "click"], [1, "dr-icon-stop", "abort-button", 3, "click"], [1, "wait-reply-dot-flashing"]], template: function DrChatFormDropdownComponent_Template(rf, ctx) { if (rf & 1) {
208
+ } }, inputs: { isUploadingFiles: "isUploadingFiles", message: "message", messagePlaceholder: "messagePlaceholder", dropFiles: "dropFiles", dropFilePlaceholder: "dropFilePlaceholder", waitForReply: "waitForReply", showDotFlashing: "showDotFlashing" }, outputs: { send: "send", uploadFiles: "uploadFiles", abort: "abort", inputChange: "inputChange" }, ngContentSelectors: _c5, decls: 17, vars: 20, consts: [[1, "message-row", 3, "ngClass"], [1, "message-row__input", 3, "ngClass"], [3, "files", "isRemovable", "maxLengthText", "removeFileEvent", 4, "ngIf"], [1, "message-row__input-textarea-wrap"], ["data-analytics", "ai-chat-actions-send-message", "type", "text", 3, "ngModel", "rows", "placeholder", "focus", "blur", "mouseenter", "mouseleave", "ngModelChange", "keydown.enter"], ["textAreaElement", ""], [1, "message-row__btns"], ["type", "file", "hidden", "", "multiple", "", 3, "change"], ["fileInput", ""], ["data-analytics", "ai-chat-actions-send-message", "class", "dr-icon-send-arrow-up send-button", 3, "click", 4, "ngIf"], ["data-analytics", "ai-chat-actions-abort-message", "class", "dr-icon-stop abort-button", 3, "click", 4, "ngIf"], ["class", "wait-reply-dot-flashing", 4, "ngIf"], [3, "files", "isRemovable", "maxLengthText", "removeFileEvent"], ["data-analytics", "ai-chat-actions-send-message", 1, "dr-icon-send-arrow-up", "send-button", 3, "click"], ["data-analytics", "ai-chat-actions-abort-message", 1, "dr-icon-stop", "abort-button", 3, "click"], [1, "wait-reply-dot-flashing"]], template: function DrChatFormDropdownComponent_Template(rf, ctx) { if (rf & 1) {
209
209
  i0.ɵɵprojectionDef(_c2);
210
210
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
211
211
  i0.ɵɵpipe(2, "async");
@@ -248,7 +248,7 @@ export class DrChatFormDropdownComponent {
248
248
  }
249
249
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrChatFormDropdownComponent, [{
250
250
  type: Component,
251
- args: [{ selector: 'dr-chat-form-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"message-row\" [ngClass]=\"{ 'message-row_loading': isUploadingFiles }\">\n <div\n class=\"message-row__input\"\n [ngClass]=\"{\n 'message-row__input--focused': inputFocus,\n 'message-row__input--filled': !!message?.trim()?.length || !!(droppedFiles$ | async).length,\n }\">\n <dr-chat-dropped-files\n *ngIf=\"(droppedFiles$ | async).length\"\n [files]=\"droppedFiles$ | async\"\n [isRemovable]=\"true\"\n [maxLengthText]=\"15\"\n (removeFileEvent)=\"removeFile($event)\"></dr-chat-dropped-files>\n\n <div class=\"message-row__input-textarea-wrap\">\n <textarea\n #textAreaElement\n (focus)=\"inputFocus = true\"\n (blur)=\"inputFocus = false\"\n (mouseenter)=\"inputHover = true\"\n (mouseleave)=\"inputHover = false\"\n [(ngModel)]=\"message\"\n [rows]=\"1\"\n [style]=\"getTextAreaHeight(textAreaElement)\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"text\"\n placeholder=\"{{ fileOver ? dropFilePlaceholder : messagePlaceholder }}\"\n (keydown.enter)=\"sendMessage($event)\">\n </textarea>\n </div>\n <div class=\"message-row__btns\">\n <ng-content></ng-content>\n <input #fileInput type=\"file\" hidden multiple (change)=\"onFileSelected($event)\" />\n <i *ngIf=\"!waitForReply\" (click)=\"sendMessage($event)\" class=\"dr-icon-send-arrow-up send-button\"></i>\n\n <i *ngIf=\"waitForReply && !showDotFlashing\" class=\"dr-icon-stop abort-button\" (click)=\"abortMessage()\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply && showDotFlashing\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n </div>\n <ng-content select=\"[dropItem]\"></ng-content>\n </div>\n</div>\n", styles: [":host::ng-deep{--disabled-bg: linear-gradient(270.95deg, rgba(130, 210, 240, .2) 10.98%, rgba(146, 146, 255, .2) 93.38%);display:flex;flex-direction:column;align-items:center;padding:0}:host::ng-deep .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}:host::ng-deep .message-row__input{flex-direction:column;background-color:#fff;position:relative;display:flex;align-items:center;flex-grow:1;padding:14px 8px 8px 15px;height:auto;overflow:visible;min-width:265px;border-radius:24px;border:1.5px solid transparent;box-shadow:0 2px 16px -10px #603cff29;transition:.35s ease;will-change:box-shadow}:host::ng-deep .message-row__input .abort-button,:host::ng-deep .message-row__input .send-button{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:24px;border-radius:100px;color:#fff;transition:.15s ease-in-out;background:linear-gradient(266deg,#6969ff 25.2%,#4eb7df 90.24%) border-box}:host::ng-deep .message-row__input .send-button{background:var(--disabled-bg);pointer-events:none}:host::ng-deep .message-row__input--focused{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;height:auto!important;background:#fff}:host::ng-deep .message-row__input--filled{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;background:#fff}:host::ng-deep .message-row__input--filled .send-button{background:linear-gradient(266deg,#6969ff 25.2%,#4eb7df 90.24%) border-box;pointer-events:all}:host::ng-deep .message-row__input .wait-reply-dot-flashing{display:flex;align-items:center;width:32px;height:32px}:host::ng-deep .message-row__input:before{content:\"\";position:absolute;inset:-3px;background:linear-gradient(266.3deg,#6969ff 25.2%,#4eb7df 90.24%);border-radius:25px;z-index:-1}:host::ng-deep .message-row__input textarea{color:#333;width:100%;outline:none;min-height:30px;flex-grow:1;resize:none;padding:4px 48px 4px 4px;margin:auto;border:none;border-radius:22.5px;font-size:14px;line-height:24px;font-weight:400}:host::ng-deep .message-row__input textarea:focus{border:none}:host::ng-deep .message-row__input textarea::placeholder{color:#9ea1aa}:host::ng-deep .message-row__btns{display:flex;justify-content:space-between;width:100%;align-items:center}:host::ng-deep .message-row__input-textarea-wrap{display:flex;width:100%;position:relative}:host::ng-deep dr-chat-dropped-files{margin-right:auto}:host::ng-deep dr-chat-dropped-files .dropped-files{padding:0}:host::ng-deep dr-chat-dropped-files .dropped-files__item{margin:0}:host::ng-deep .message-row_loading .send-button{background:var(--disabled-bg);pointer-events:none}:host::ng-deep .message-row_loading .dropped-files__item{opacity:.5;pointer-events:none}\n"] }]
251
+ args: [{ selector: 'dr-chat-form-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"message-row\" [ngClass]=\"{ 'message-row_loading': isUploadingFiles }\">\n <div\n class=\"message-row__input\"\n [ngClass]=\"{\n 'message-row__input--focused': inputFocus,\n 'message-row__input--filled': !!message?.trim()?.length || !!(droppedFiles$ | async).length,\n }\">\n <dr-chat-dropped-files\n *ngIf=\"(droppedFiles$ | async).length\"\n [files]=\"droppedFiles$ | async\"\n [isRemovable]=\"true\"\n [maxLengthText]=\"15\"\n (removeFileEvent)=\"removeFile($event)\"></dr-chat-dropped-files>\n\n <div class=\"message-row__input-textarea-wrap\">\n <textarea\n #textAreaElement\n data-analytics=\"ai-chat-actions-send-message\"\n (focus)=\"inputFocus = true\"\n (blur)=\"inputFocus = false\"\n (mouseenter)=\"inputHover = true\"\n (mouseleave)=\"inputHover = false\"\n [(ngModel)]=\"message\"\n [rows]=\"1\"\n [style]=\"getTextAreaHeight(textAreaElement)\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"text\"\n placeholder=\"{{ fileOver ? dropFilePlaceholder : messagePlaceholder }}\"\n (keydown.enter)=\"sendMessage($event)\">\n </textarea>\n </div>\n <div class=\"message-row__btns\">\n <ng-content></ng-content>\n <input #fileInput type=\"file\" hidden multiple (change)=\"onFileSelected($event)\" />\n <i\n *ngIf=\"!waitForReply\"\n (click)=\"sendMessage($event)\"\n data-analytics=\"ai-chat-actions-send-message\"\n class=\"dr-icon-send-arrow-up send-button\"></i>\n\n <i\n *ngIf=\"waitForReply && !showDotFlashing\"\n data-analytics=\"ai-chat-actions-abort-message\"\n class=\"dr-icon-stop abort-button\"\n (click)=\"abortMessage()\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply && showDotFlashing\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n </div>\n <ng-content select=\"[dropItem]\"></ng-content>\n </div>\n</div>\n", styles: [":host::ng-deep{--disabled-bg: linear-gradient(270.95deg, rgba(130, 210, 240, .2) 10.98%, rgba(146, 146, 255, .2) 93.38%);display:flex;flex-direction:column;align-items:center;padding:0}:host::ng-deep .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}:host::ng-deep .message-row__input{flex-direction:column;background-color:#fff;position:relative;display:flex;align-items:center;flex-grow:1;padding:14px 8px 8px 15px;height:auto;overflow:visible;min-width:265px;border-radius:24px;border:1.5px solid transparent;box-shadow:0 2px 16px -10px #603cff29;transition:.35s ease;will-change:box-shadow}:host::ng-deep .message-row__input .abort-button,:host::ng-deep .message-row__input .send-button{width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:24px;border-radius:100px;color:#fff;transition:.15s ease-in-out;background:linear-gradient(266deg,#6969ff 25.2%,#4eb7df 90.24%) border-box}:host::ng-deep .message-row__input .send-button{background:var(--disabled-bg);pointer-events:none}:host::ng-deep .message-row__input--focused{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;height:auto!important;background:#fff}:host::ng-deep .message-row__input--filled{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;background:#fff}:host::ng-deep .message-row__input--filled .send-button{background:linear-gradient(266deg,#6969ff 25.2%,#4eb7df 90.24%) border-box;pointer-events:all}:host::ng-deep .message-row__input .wait-reply-dot-flashing{display:flex;align-items:center;width:32px;height:32px}:host::ng-deep .message-row__input:before{content:\"\";position:absolute;inset:-3px;background:linear-gradient(266.3deg,#6969ff 25.2%,#4eb7df 90.24%);border-radius:25px;z-index:-1}:host::ng-deep .message-row__input textarea{color:#333;width:100%;outline:none;min-height:30px;flex-grow:1;resize:none;padding:4px 48px 4px 4px;margin:auto;border:none;border-radius:22.5px;font-size:14px;line-height:24px;font-weight:400}:host::ng-deep .message-row__input textarea:focus{border:none}:host::ng-deep .message-row__input textarea::placeholder{color:#9ea1aa}:host::ng-deep .message-row__btns{display:flex;justify-content:space-between;width:100%;align-items:center}:host::ng-deep .message-row__input-textarea-wrap{display:flex;width:100%;position:relative}:host::ng-deep dr-chat-dropped-files{margin-right:auto}:host::ng-deep dr-chat-dropped-files .dropped-files{padding:0}:host::ng-deep dr-chat-dropped-files .dropped-files__item{margin:0}:host::ng-deep .message-row_loading .send-button{background:var(--disabled-bg);pointer-events:none}:host::ng-deep .message-row_loading .dropped-files__item{opacity:.5;pointer-events:none}\n"] }]
252
252
  }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }]; }, { textAreaElementRef: [{
253
253
  type: ViewChild,
254
254
  args: ['textAreaElement']
@@ -290,4 +290,4 @@ export class DrChatFormDropdownComponent {
290
290
  type: HostListener,
291
291
  args: ['dragleave', ['$event']]
292
292
  }] }); })();
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItY2hhdC1mb3JtLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLWNoYXQvZHItY2hhdC1mb3JtLWRyb3Bkb3duL2RyLWNoYXQtZm9ybS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtZm9ybS1kcm9wZG93bi9kci1jaGF0LWZvcm0tZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7SUNQL0IsaURBSzJDO0lBQXZDLG1PQUFtQixlQUFBLHlCQUFrQixDQUFBLElBQUM7O0lBQUMsaUJBQXdCOzs7SUFIL0Qsa0VBQStCLHFCQUFBLHFCQUFBOzs7O0lBd0IvQiw2QkFBaUc7SUFBeEUsd0tBQVMsZUFBQSwwQkFBbUIsQ0FBQSxJQUFDO0lBQTJDLGlCQUFJOzs7O0lBRXJHLDZCQUF1RztJQUF6QixvS0FBUyxlQUFBLHNCQUFjLENBQUEsSUFBQztJQUFDLGlCQUFJOzs7SUFDM0csc0NBQTJHOzs7Ozs7QURkdkgsTUFBTSxPQUFPLDJCQUEyQjtJQXVFcEMsWUFDYyxHQUFzQixFQUN0QixZQUEwQjtRQUQxQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxH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QUFxQzs7O3VGRGR0RCwyQkFBMkI7Y0FOdkMsU0FBUzsyQkFDSSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU07K0ZBR2pCLGtCQUFrQjtrQkFBL0MsU0FBUzttQkFBQyxpQkFBaUI7WUFDSixTQUFTO2tCQUFoQyxTQUFTO21CQUFDLFdBQVc7WUFPYixnQkFBZ0I7a0JBQXhCLEtBQUs7WUFPRyxPQUFPO2tCQUFmLEtBQUs7WUFPRyxrQkFBa0I7a0JBQTFCLEtBQUs7WUFPRyxTQUFTO2tCQUFqQixLQUFLO1lBT0csbUJBQW1CO2tCQUEzQixLQUFLO1lBT0csWUFBWTtrQkFBcEIsS0FBSztZQU9HLGVBQWU7a0JBQXZCLEtBQUs7WUFNSSxJQUFJO2tCQUFiLE1BQU07WUFDRyxXQUFXO2tCQUFwQixNQUFNO1lBQ0csS0FBSztrQkFBZCxNQUFNO1lBUUcsV0FBVztrQkFBcEIsTUFBTTtZQUV5QixRQUFRO2tCQUF2QyxXQUFXO21CQUFDLGlCQUFpQjtZQVE5QixNQUFNO2tCQURMLFlBQVk7bUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBd0JoQyxVQUFVO2tCQURULFlBQVk7bUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBVXBDLFdBQVc7a0JBRFYsWUFBWTttQkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IElGSWxlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoYXQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHItY2hhdC1mb3JtLWRyb3Bkb3duJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHItY2hhdC1mb3JtLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kci1jaGF0LWZvcm0tZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRHJDaGF0Rm9ybURyb3Bkb3duQ29tcG9uZW50IHtcbiAgICBAVmlld0NoaWxkKCd0ZXh0QXJlYUVsZW1lbnQnKSB0ZXh0QXJlYUVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgZmlsZUlucHV0OiBFbGVtZW50UmVmO1xuICAgIF90ZXh0YXJlYUluaXRpYWxIZWlnaHQgPSB0cnVlO1xuICAgIGlucHV0Rm9jdXMgPSBmYWxzZTtcbiAgICBpbnB1dEhvdmVyID0gZmFsc2U7XG5cbiAgICBkcm9wcGVkRmlsZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRklsZVtdPihbXSk7XG5cbiAgICBASW5wdXQoKSBpc1VwbG9hZGluZ0ZpbGVzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQcmVkZWZpbmVkIG1lc3NhZ2UgdGV4dFxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBASW5wdXQoKSBtZXNzYWdlID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIHBsYWNlaG9sZGVyIHRleHRcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgQElucHV0KCkgbWVzc2FnZVBsYWNlaG9sZGVyID0gJ1R5cGUgYSBtZXNzYWdlJztcblxuICAgIC8qKlxuICAgICAqIFNob3cgc2VuZCBidXR0b25cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGRyb3BGaWxlcyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRmlsZSBkcm9wIHBsYWNlaG9sZGVyIHRleHRcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgQElucHV0KCkgZHJvcEZpbGVQbGFjZWhvbGRlciA9ICdEcm9wIGZpbGUgdG8gc2VuZCc7XG5cbiAgICAvKipcbiAgICAgKiBQYXJhbWV0ZXIgdG8gY2hlY2sgaXMgc2VuZCBtZXNzYWdlIGZ1bmN0aW9uIGF2YWlsYWJsZVxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgQElucHV0KCkgd2FpdEZvclJlcGx5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQYXJhbWV0ZXIgdG8gY2hlY2sgaXMgc2VuZCBtZXNzYWdlIGZ1bmN0aW9uIGF2YWlsYWJsZVxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgQElucHV0KCkgc2hvd0RvdEZsYXNoaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8eyBtZXNzYWdlOiBzdHJpbmcsIGZpbGVzOiBJRmlsZVtdIH0+fVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBzZW5kID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2U6IHN0cmluZzsgZmlsZXM6IElGSWxlW10gfT4oKTtcbiAgICBAT3V0cHV0KCkgdXBsb2FkRmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPElGSWxlW10+KCk7XG4gICAgQE91dHB1dCgpIGFib3J0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbiBtZXNzYWdlIGlucHV0IHZhbHVlIGhhcyBiZWVuIGNoYW5nZWRcbiAgICAgKlxuICAgICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8c3RyaW5nPn1cbiAgICAgKi9cblxuICAgIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5maWxlLW92ZXInKSBmaWxlT3ZlciA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgKSB7fVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXG4gICAgb25Ecm9wKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcEZpbGVzKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZmlsZU92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICAgICAgICAgIGlmIChmaWxlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUZpbGVzKGZpbGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUZpbGUoZmlsZTogSUZJbGUpIHtcbiAgICAgICAgY29uc3QgZHJvcHBlZEZpbGVzID0gdGhpcy5kcm9wcGVkRmlsZXMkLnZhbHVlO1xuICAgICAgICBjb25zdCBpbmRleCA9IGRyb3BwZWRGaWxlcy5pbmRleE9mKGZpbGUpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgZHJvcHBlZEZpbGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLmRyb3BwZWRGaWxlcyQubmV4dChkcm9wcGVkRmlsZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxuICAgIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZHJvcEZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVPdmVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXG4gICAgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZHJvcEZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVPdmVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZW5kTWVzc2FnZSgkZXZlbnQ6IEV2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoISRldmVudCB8fCAhKCRldmVudCBhcyBLZXlib2FyZEV2ZW50KS5zaGlmdEtleSkge1xuICAgICAgICAgICAgJGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgJGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLndhaXRGb3JSZXBseSB8fCB0aGlzLmlzVXBsb2FkaW5nRmlsZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJvcHBlZEZpbGVzJC52YWx1ZS5sZW5ndGggfHwgU3RyaW5nKHRoaXMubWVzc2FnZSkudHJpbSgpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHRhcmVhSW5pdGlhbEhlaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kLmVtaXQoeyBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsIGZpbGVzOiB0aGlzLmRyb3BwZWRGaWxlcyQudmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wcGVkRmlsZXMkLm5leHQoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWJvcnRNZXNzYWdlKCkge1xuICAgICAgICB0aGlzLmFib3J0LmVtaXQoKTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGV4dGFyZWFJbml0aWFsSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0VGV4dEFyZWFIZWlnaHQodGV4dEFyZWFFbGVtZW50OiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl90ZXh0YXJlYUluaXRpYWxIZWlnaHQpIHtcbiAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMzBweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0QXJlYUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgICAgICAgdGV4dEFyZWFFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRleHRBcmVhRWxlbWVudC5zY3JvbGxIZWlnaHQgKyAncHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3RleHRBcmVhRWxlbWVudC5zdHlsZS5oZWlnaHR9YDtcbiAgICB9XG5cbiAgICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgdGhpcy5maWxlT3ZlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWxlcyA9IGlucHV0LmZpbGVzO1xuICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVGaWxlcyhBcnJheS5mcm9tKGZpbGVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2F2ZUZpbGVzKGZpbGVzOiBBcnJheTxGaWxlPikge1xuICAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgbGV0IHJlcyA9IGZpbGUgYXMgSUZJbGU7XG4gICAgICAgICAgICByZXMuZGF0YSA9IChhd2FpdCB0aGlzLmJhc2U2NENvbnZlcnQocmVzKSkgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5kcm9wcGVkRmlsZXMkLm5leHQoWy4uLnRoaXMuZHJvcHBlZEZpbGVzJC52YWx1ZSwgcmVzXSk7XG4gICAgICAgICAgICB1cGxvYWRlZEZpbGVzLnB1c2gocmVzKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBsb2FkRmlsZXMuZW1pdCh1cGxvYWRlZEZpbGVzLm1hcCgoaXRlbSkgPT4gKHsgZGF0YTogaXRlbS5kYXRhLCBuYW1lOiBpdGVtLm5hbWUgfSkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJhc2U2NENvbnZlcnQoZmlsZTogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1lc3NhZ2Utcm93XCIgW25nQ2xhc3NdPVwieyAnbWVzc2FnZS1yb3dfbG9hZGluZyc6IGlzVXBsb2FkaW5nRmlsZXMgfVwiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtZXNzYWdlLXJvd19faW5wdXRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnbWVzc2FnZS1yb3dfX2lucHV0LS1mb2N1c2VkJzogaW5wdXRGb2N1cyxcbiAgICAgICAgICAgICdtZXNzYWdlLXJvd19faW5wdXQtLWZpbGxlZCc6ICEhbWVzc2FnZT8udHJpbSgpPy5sZW5ndGggfHwgISEoZHJvcHBlZEZpbGVzJCB8IGFzeW5jKS5sZW5ndGgsXG4gICAgICAgIH1cIj5cbiAgICAgICAgPGRyLWNoYXQtZHJvcHBlZC1maWxlc1xuICAgICAgICAgICAgKm5nSWY9XCIoZHJvcHBlZEZpbGVzJCB8IGFzeW5jKS5sZW5ndGhcIlxuICAgICAgICAgICAgW2ZpbGVzXT1cImRyb3BwZWRGaWxlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbaXNSZW1vdmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbbWF4TGVuZ3RoVGV4dF09XCIxNVwiXG4gICAgICAgICAgICAocmVtb3ZlRmlsZUV2ZW50KT1cInJlbW92ZUZpbGUoJGV2ZW50KVwiPjwvZHItY2hhdC1kcm9wcGVkLWZpbGVzPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLXJvd19faW5wdXQtdGV4dGFyZWEtd3JhcFwiPlxuICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgI3RleHRBcmVhRWxlbWVudFxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJpbnB1dEZvY3VzID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwiaW5wdXRGb2N1cyA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJpbnB1dEhvdmVyID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaW5wdXRIb3ZlciA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFtyb3dzXT1cIjFcIlxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJnZXRUZXh0QXJlYUhlaWdodCh0ZXh0QXJlYUVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IGZpbGVPdmVyID8gZHJvcEZpbGVQbGFjZWhvbGRlciA6IG1lc3NhZ2VQbGFjZWhvbGRlciB9fVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VuZE1lc3NhZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLXJvd19fYnRuc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBoaWRkZW4gbXVsdGlwbGUgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwiIXdhaXRGb3JSZXBseVwiIChjbGljayk9XCJzZW5kTWVzc2FnZSgkZXZlbnQpXCIgY2xhc3M9XCJkci1pY29uLXNlbmQtYXJyb3ctdXAgc2VuZC1idXR0b25cIj48L2k+XG5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwid2FpdEZvclJlcGx5ICYmICFzaG93RG90Rmxhc2hpbmdcIiBjbGFzcz1cImRyLWljb24tc3RvcCBhYm9ydC1idXR0b25cIiAoY2xpY2spPVwiYWJvcnRNZXNzYWdlKClcIj48L2k+XG4gICAgICAgICAgICA8ZHItZG90LWZsYXNoaW5nICpuZ0lmPVwid2FpdEZvclJlcGx5ICYmIHNob3dEb3RGbGFzaGluZ1wiIGNsYXNzPVwid2FpdC1yZXBseS1kb3QtZmxhc2hpbmdcIj48L2RyLWRvdC1mbGFzaGluZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltkcm9wSXRlbV1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItY2hhdC1mb3JtLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLWNoYXQvZHItY2hhdC1mb3JtLWRyb3Bkb3duL2RyLWNoYXQtZm9ybS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtZm9ybS1kcm9wZG93bi9kci1jaGF0LWZvcm0tZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7SUNQL0IsaURBSzJDO0lBQXZDLG1PQUFtQixlQUFBLHlCQUFrQixDQUFBLElBQUM7O0lBQUMsaUJBQXdCOzs7SUFIL0Qsa0VBQStCLHFCQUFBLHFCQUFBOzs7O0lBeUIvQiw2QkFJOEM7SUFGMUMsd0tBQVMsZUFBQSwwQkFBbUIsQ0FBQSxJQUFDO0lBRWEsaUJBQUk7Ozs7SUFFbEQsNkJBSTZCO0lBQXpCLG9LQUFTLGVBQUEsc0JBQWMsQ0FBQSxJQUFDO0lBQUMsaUJBQUk7OztJQUNqQyxzQ0FBMkc7Ozs7OztBRHZCdkgsTUFBTSxPQUFPLDJCQUEyQjtJQXVFcEMsWUFDYyxHQUFzQixFQUN0QixZQUEwQjtRQUQxQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxH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REFBcUM7Ozt1RkR2QnRELDJCQUEyQjtjQU52QyxTQUFTOzJCQUNJLHVCQUF1QixtQkFHaEIsdUJBQXVCLENBQUMsTUFBTTsrRkFHakIsa0JBQWtCO2tCQUEvQyxTQUFTO21CQUFDLGlCQUFpQjtZQUNKLFNBQVM7a0JBQWhDLFNBQVM7bUJBQUMsV0FBVztZQU9iLGdCQUFnQjtrQkFBeEIsS0FBSztZQU9HLE9BQU87a0JBQWYsS0FBSztZQU9HLGtCQUFrQjtrQkFBMUIsS0FBSztZQU9HLFNBQVM7a0JBQWpCLEtBQUs7WUFPRyxtQkFBbUI7a0JBQTNCLEtBQUs7WUFPRyxZQUFZO2tCQUFwQixLQUFLO1lBT0csZUFBZTtrQkFBdkIsS0FBSztZQU1JLElBQUk7a0JBQWIsTUFBTTtZQUNHLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxLQUFLO2tCQUFkLE1BQU07WUFRRyxXQUFXO2tCQUFwQixNQUFNO1lBRXlCLFFBQVE7a0JBQXZDLFdBQVc7bUJBQUMsaUJBQWlCO1lBUTlCLE1BQU07a0JBREwsWUFBWTttQkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUF3QmhDLFVBQVU7a0JBRFQsWUFBWTttQkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFVcEMsV0FBVztrQkFEVixZQUFZO21CQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSUZJbGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2hhdCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1jaGF0LWZvcm0tZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kci1jaGF0LWZvcm0tZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RyLWNoYXQtZm9ybS1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEckNoYXRGb3JtRHJvcGRvd25Db21wb25lbnQge1xuICAgIEBWaWV3Q2hpbGQoJ3RleHRBcmVhRWxlbWVudCcpIHRleHRBcmVhRWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBmaWxlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gICAgX3RleHRhcmVhSW5pdGlhbEhlaWdodCA9IHRydWU7XG4gICAgaW5wdXRGb2N1cyA9IGZhbHNlO1xuICAgIGlucHV0SG92ZXIgPSBmYWxzZTtcblxuICAgIGRyb3BwZWRGaWxlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElGSWxlW10+KFtdKTtcblxuICAgIEBJbnB1dCgpIGlzVXBsb2FkaW5nRmlsZXMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFByZWRlZmluZWQgbWVzc2FnZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIEBJbnB1dCgpIG1lc3NhZ2UgPSAnJztcblxuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgcGxhY2Vob2xkZXIgdGV4dFxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBASW5wdXQoKSBtZXNzYWdlUGxhY2Vob2xkZXIgPSAnVHlwZSBhIG1lc3NhZ2UnO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyBzZW5kIGJ1dHRvblxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgQElucHV0KCkgZHJvcEZpbGVzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGaWxlIGRyb3AgcGxhY2Vob2xkZXIgdGV4dFxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBASW5wdXQoKSBkcm9wRmlsZVBsYWNlaG9sZGVyID0gJ0Ryb3AgZmlsZSB0byBzZW5kJztcblxuICAgIC8qKlxuICAgICAqIFBhcmFtZXRlciB0byBjaGVjayBpcyBzZW5kIG1lc3NhZ2UgZnVuY3Rpb24gYXZhaWxhYmxlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBASW5wdXQoKSB3YWl0Rm9yUmVwbHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFBhcmFtZXRlciB0byBjaGVjayBpcyBzZW5kIG1lc3NhZ2UgZnVuY3Rpb24gYXZhaWxhYmxlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBASW5wdXQoKSBzaG93RG90Rmxhc2hpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHR5cGUge0V2ZW50RW1pdHRlcjx7IG1lc3NhZ2U6IHN0cmluZywgZmlsZXM6IElGaWxlW10gfT59XG4gICAgICovXG4gICAgQE91dHB1dCgpIHNlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogc3RyaW5nOyBmaWxlczogSUZJbGVbXSB9PigpO1xuICAgIEBPdXRwdXQoKSB1cGxvYWRGaWxlcyA9IG5ldyBFdmVudEVtaXR0ZXI8SUZJbGVbXT4oKTtcbiAgICBAT3V0cHV0KCkgYWJvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIG1lc3NhZ2UgaW5wdXQgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZFxuICAgICAqXG4gICAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxzdHJpbmc+fVxuICAgICAqL1xuXG4gICAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpbGUtb3ZlcicpIGZpbGVPdmVyID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICApIHt9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcbiAgICBvbkRyb3AoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5kcm9wRmlsZXMpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgdGhpcy5maWxlT3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xuICAgICAgICAgICAgaWYgKGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlRmlsZXMoZmlsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlRmlsZShmaWxlOiBJRklsZSkge1xuICAgICAgICBjb25zdCBkcm9wcGVkRmlsZXMgPSB0aGlzLmRyb3BwZWRGaWxlcyQudmFsdWU7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZHJvcHBlZEZpbGVzLmluZGV4T2YoZmlsZSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBkcm9wcGVkRmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuZHJvcHBlZEZpbGVzJC5uZXh0KGRyb3BwZWRGaWxlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXG4gICAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5kcm9wRmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZU92ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSlcbiAgICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5kcm9wRmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZU92ZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbmRNZXNzYWdlKCRldmVudDogRXZlbnQgfCBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghJGV2ZW50IHx8ICEoJGV2ZW50IGFzIEtleWJvYXJkRXZlbnQpLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAkZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAkZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMud2FpdEZvclJlcGx5IHx8IHRoaXMuaXNVcGxvYWRpbmdGaWxlcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcm9wcGVkRmlsZXMkLnZhbHVlLmxlbmd0aCB8fCBTdHJpbmcodGhpcy5tZXNzYWdlKS50cmltKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dGFyZWFJbml0aWFsSGVpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubWVzc2FnZSwgZmlsZXM6IHRoaXMuZHJvcHBlZEZpbGVzJC52YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BwZWRGaWxlcyQubmV4dChbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhYm9ydE1lc3NhZ2UoKSB7XG4gICAgICAgIHRoaXMuYWJvcnQuZW1pdCgpO1xuICAgIH1cblxuICAgIG9uTW9kZWxDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl90ZXh0YXJlYUluaXRpYWxIZWlnaHQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRUZXh0QXJlYUhlaWdodCh0ZXh0QXJlYUVsZW1lbnQ6IEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RleHRhcmVhSW5pdGlhbEhlaWdodCkge1xuICAgICAgICAgICAgdGV4dEFyZWFFbGVtZW50LnN0eWxlLmhlaWdodCA9ICczMHB4JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICAgICAgICB0ZXh0QXJlYUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGV4dEFyZWFFbGVtZW50LnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7dGV4dEFyZWFFbGVtZW50LnN0eWxlLmhlaWdodH1gO1xuICAgIH1cblxuICAgIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICB0aGlzLmZpbGVPdmVyID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gaW5wdXQuZmlsZXM7XG4gICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUZpbGVzKEFycmF5LmZyb20oZmlsZXMpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzYXZlRmlsZXMoZmlsZXM6IEFycmF5PEZpbGU+KSB7XG4gICAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBsZXQgcmVzID0gZmlsZSBhcyBJRklsZTtcbiAgICAgICAgICAgIHJlcy5kYXRhID0gKGF3YWl0IHRoaXMuYmFzZTY0Q29udmVydChyZXMpKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmRyb3BwZWRGaWxlcyQubmV4dChbLi4udGhpcy5kcm9wcGVkRmlsZXMkLnZhbHVlLCByZXNdKTtcbiAgICAgICAgICAgIHVwbG9hZGVkRmlsZXMucHVzaChyZXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGxvYWRGaWxlcy5lbWl0KHVwbG9hZGVkRmlsZXMubWFwKChpdGVtKSA9PiAoeyBkYXRhOiBpdGVtLmRhdGEsIG5hbWU6IGl0ZW0ubmFtZSB9KSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmFzZTY0Q29udmVydChmaWxlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgICAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWVzc2FnZS1yb3dcIiBbbmdDbGFzc109XCJ7ICdtZXNzYWdlLXJvd19sb2FkaW5nJzogaXNVcGxvYWRpbmdGaWxlcyB9XCI+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1lc3NhZ2Utcm93X19pbnB1dFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdtZXNzYWdlLXJvd19faW5wdXQtLWZvY3VzZWQnOiBpbnB1dEZvY3VzLFxuICAgICAgICAgICAgJ21lc3NhZ2Utcm93X19pbnB1dC0tZmlsbGVkJzogISFtZXNzYWdlPy50cmltKCk/Lmxlbmd0aCB8fCAhIShkcm9wcGVkRmlsZXMkIHwgYXN5bmMpLmxlbmd0aCxcbiAgICAgICAgfVwiPlxuICAgICAgICA8ZHItY2hhdC1kcm9wcGVkLWZpbGVzXG4gICAgICAgICAgICAqbmdJZj1cIihkcm9wcGVkRmlsZXMkIHwgYXN5bmMpLmxlbmd0aFwiXG4gICAgICAgICAgICBbZmlsZXNdPVwiZHJvcHBlZEZpbGVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtpc1JlbW92YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFttYXhMZW5ndGhUZXh0XT1cIjE1XCJcbiAgICAgICAgICAgIChyZW1vdmVGaWxlRXZlbnQpPVwicmVtb3ZlRmlsZSgkZXZlbnQpXCI+PC9kci1jaGF0LWRyb3BwZWQtZmlsZXM+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2Utcm93X19pbnB1dC10ZXh0YXJlYS13cmFwXCI+XG4gICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAjdGV4dEFyZWFFbGVtZW50XG4gICAgICAgICAgICAgICAgZGF0YS1hbmFseXRpY3M9XCJhaS1jaGF0LWFjdGlvbnMtc2VuZC1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwiaW5wdXRGb2N1cyA9IHRydWVcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cImlucHV0Rm9jdXMgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRIb3ZlciA9IHRydWVcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImlucHV0SG92ZXIgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbcm93c109XCIxXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwiZ2V0VGV4dEFyZWFIZWlnaHQodGV4dEFyZWFFbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBmaWxlT3ZlciA/IGRyb3BGaWxlUGxhY2Vob2xkZXIgOiBtZXNzYWdlUGxhY2Vob2xkZXIgfX1cIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbmRNZXNzYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1yb3dfX2J0bnNcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDxpbnB1dCAjZmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgaGlkZGVuIG11bHRpcGxlIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIXdhaXRGb3JSZXBseVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRNZXNzYWdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIGRhdGEtYW5hbHl0aWNzPVwiYWktY2hhdC1hY3Rpb25zLXNlbmQtbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkci1pY29uLXNlbmQtYXJyb3ctdXAgc2VuZC1idXR0b25cIj48L2k+XG5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ3YWl0Rm9yUmVwbHkgJiYgIXNob3dEb3RGbGFzaGluZ1wiXG4gICAgICAgICAgICAgICAgZGF0YS1hbmFseXRpY3M9XCJhaS1jaGF0LWFjdGlvbnMtYWJvcnQtbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkci1pY29uLXN0b3AgYWJvcnQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWJvcnRNZXNzYWdlKClcIj48L2k+XG4gICAgICAgICAgICA8ZHItZG90LWZsYXNoaW5nICpuZ0lmPVwid2FpdEZvclJlcGx5ICYmIHNob3dEb3RGbGFzaGluZ1wiIGNsYXNzPVwid2FpdC1yZXBseS1kb3QtZmxhc2hpbmdcIj48L2RyLWRvdC1mbGFzaGluZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltkcm9wSXRlbV1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -103,7 +103,7 @@ export class CustomDateAdapter extends MomentDateAdapter {
103
103
  }
104
104
  export class DrDatePickerComponent {
105
105
  set useDarkTheme(value) {
106
- this.panelClass = value ? 'dr-datepicker-dark-theme' : '';
106
+ this.panelClass = value ? this.panelClass + ' dr-datepicker-dark-theme' : this.panelClass;
107
107
  }
108
108
  set min(minDate) {
109
109
  this._min = minDate ? moment.unix(minDate).utc() : null;
@@ -139,6 +139,7 @@ export class DrDatePickerComponent {
139
139
  this.dateAdapter = dateAdapter;
140
140
  this.datePickerService = datePickerService;
141
141
  this.hostId = null;
142
+ this.panelClass = '';
142
143
  this._startAt = null;
143
144
  /**
144
145
  * @description Whether to transform date, taking end, start, middle of period (i.e. set middle of month if timeframe='month')
@@ -397,7 +398,7 @@ export class DrDatePickerComponent {
397
398
  } }, hostVars: 7, hostBindings: function DrDatePickerComponent_HostBindings(rf, ctx) { if (rf & 2) {
398
399
  i0.ɵɵattribute("id", ctx.hostId);
399
400
  i0.ɵɵclassProp("use-button-picker", ctx.useButton)("disabled", ctx.disabled)("active", ctx.active);
400
- } }, inputs: { id: "id", useButton: "useButton", buttonLabel: "buttonLabel", iconAfterButton: "iconAfterButton", useDarkTheme: "useDarkTheme", format: "format", min: "min", max: "max", startAt: "startAt", periodPosition: "periodPosition", placeholder: "placeholder", disabled: "disabled", fiscalYearMonthsModifier: "fiscalYearMonthsModifier", fiscalYearBack: "fiscalYearBack", datepickerFilter: "datepickerFilter", selectCurrentQuarter: "selectCurrentQuarter" }, features: [i0.ɵɵProvidersFeature([
401
+ } }, inputs: { id: "id", useButton: "useButton", buttonLabel: "buttonLabel", iconAfterButton: "iconAfterButton", panelClass: "panelClass", useDarkTheme: "useDarkTheme", format: "format", min: "min", max: "max", startAt: "startAt", periodPosition: "periodPosition", placeholder: "placeholder", disabled: "disabled", fiscalYearMonthsModifier: "fiscalYearMonthsModifier", fiscalYearBack: "fiscalYearBack", datepickerFilter: "datepickerFilter", selectCurrentQuarter: "selectCurrentQuarter" }, features: [i0.ɵɵProvidersFeature([
401
402
  { provide: NG_VALUE_ACCESSOR, useExisting: DrDatePickerComponent, multi: true },
402
403
  { provide: DateAdapter, useClass: CustomDateAdapter },
403
404
  { provide: MAT_DATE_RANGE_SELECTION_STRATEGY, useClass: WeekSelectionStrategy },
@@ -438,6 +439,8 @@ export class DrDatePickerComponent {
438
439
  type: Input
439
440
  }], iconAfterButton: [{
440
441
  type: Input
442
+ }], panelClass: [{
443
+ type: Input
441
444
  }], useDarkTheme: [{
442
445
  type: Input
443
446
  }], format: [{
@@ -472,4 +475,4 @@ export class DrDatePickerComponent {
472
475
  type: HostBinding,
473
476
  args: ['class.active']
474
477
  }] }); })();
475
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItaW5wdXRzL2RhdGUtcGlja2Vycy9kci1kYXRlLXBpY2tlci9kci1kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL2RyLWRhdGUtcGlja2VyL2RyLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXJHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDM0gsT0FBTyxFQUlILGlDQUFpQyxHQUNw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UzsyQkFDSSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTSxhQUNwQztvQkFDUCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLHVCQUF1QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7b0JBQy9FLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7b0JBQ3JELEVBQUUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRTtvQkFDL0UsbUJBQW1CO2lCQUN0QjtnSUFJRCxFQUFFO2tCQURELEtBQUs7WUFHTixNQUFNO2tCQURMLFdBQVc7bUJBQUMsU0FBUztZQUsyQixTQUFTO2tCQUF6RCxLQUFLOztrQkFBSSxXQUFXO21CQUFDLHlCQUF5QjtZQUN0QyxXQUFXO2tCQUFuQixLQUFLO1lBQ0csZUFBZTtrQkFBdkIsS0FBSztZQUdGLFlBQVk7a0JBRGYsS0FBSztZQVNOLE1BQU07a0JBREwsS0FBSztZQUlGLEdBQUc7a0JBRE4sS0FBSztZQU1GLEdBQUc7a0JBRE4sS0FBSztZQVVGLE9BQU87a0JBRFYsS0FBSztZQVFHLGNBQWM7a0JBQXRCLEtBQUs7WUFFRyxXQUFXO2tCQUFuQixLQUFLO1lBRWtDLFFBQVE7a0JBQS9DLEtBQUs7O2tCQUFJLFdBQVc7bUJBQUMsZ0JBQWdCO1lBRTdCLHdCQUF3QjtrQkFBaEMsS0FBSztZQUVHLGNBQWM7a0JBQXRCLEtBQUs7WUFFRyxnQkFBZ0I7a0JBQXhCLEtBQUs7WUFFWSxvQkFBb0I7a0JBQXJDLEtBQUs7WUFJSyxVQUFVO2tCQURwQixTQUFTO21CQUFDLFlBQVk7WUFXbkIsTUFBTTtrQkFEVCxXQUFXO21CQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDYWxlbmRhclZpZXcsIERhdGVQaWNrZXJQZXJpb2RQb3NpdGlvbiwgVGltZWZyYW1lT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2RhdGVQaWNrZXInO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IERhdGVBZGFwdGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBEckRhdGVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZHItZGF0ZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEckRhdGVQaWNrZXJDdXN0b21IZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9kci1kYXRlLXBpY2tlcl9jdXN0b20taGVhZGVyL2RyLWRhdGUtcGlja2VyX2N1c3RvbS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgTWF0Q2FsZW5kYXJWaWV3LFxuICAgIE1hdERhdGVwaWNrZXIsXG4gICAgTWF0RGF0ZVJhbmdlUGlja2VyLFxuICAgIE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBNb21lbnREYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7IFdlZWtTZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gJy4uL3NlcnZpY2VzL3dlZWstc2VsZWN0aW9uLXN0cmF0ZWd5JztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5leHBvcnQgY2xhc3MgQ3VzdG9tRGF0ZUFkYXB0ZXIgZXh0ZW5kcyBNb21lbnREYXRlQWRhcHRlciB7XG4gICAgZ2V0Rmlyc3REYXlPZldlZWsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2RyLWRhdGUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHItZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RyLWRhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJywgJy4vZHItZGF0ZS1waWNrZXItZGFyay5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogRHJEYXRlUGlja2VyQ29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IERhdGVBZGFwdGVyLCB1c2VDbGFzczogQ3VzdG9tRGF0ZUFkYXB0ZXIgfSxcbiAgICAgICAgeyBwcm92aWRlOiBNQVRfREFURV9SQU5HRV9TRUxFQ1RJT05fU1RSQVRFR1ksIHVzZUNsYXNzOiBXZWVrU2VsZWN0aW9uU3RyYXRlZ3kgfSxcbiAgICAgICAgRHJEYXRlUGlja2VyU2VydmljZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEckRhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBob3N0SWQgPSBudWxsO1xuXG4gICAgcGFuZWxDbGFzczogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy51c2UtYnV0dG9uLXBpY2tlcicpIHVzZUJ1dHRvbjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBidXR0b25MYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGljb25BZnRlckJ1dHRvbjogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgdXNlRGFya1RoZW1lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMucGFuZWxDbGFzcyA9IHZhbHVlID8gJ2RyLWRhdGVwaWNrZXItZGFyay10aGVtZScgOiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgZGF0ZSBwaWNrZXIgZm9ybWF0IGlucHV0IGxhYmVsLCBjYWxlbmRhciBzdGFydCB2aWV3IGFuZCB0aW1lZnJhbWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1hdDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgbWluKG1pbkRhdGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9taW4gPSBtaW5EYXRlID8gbW9tZW50LnVuaXgobWluRGF0ZSkudXRjKCkgOiBudWxsO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1heChtYXhEYXRlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbWF4RGF0ZU1vbWVudCA9IG1heERhdGUgPyBtb21lbnQudW5peChtYXhEYXRlKS51dGMoKSA6IG51bGw7XG4gICAgICAgIHRoaXMuX21heCA9IG1heERhdGVNb21lbnQ7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UubWF4RGF0ZSA9IG1heERhdGVNb21lbnQ7XG4gICAgfVxuXG4gICAgX3N0YXJ0QXQ6IE1vbWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8qKiBUaGUgZGF0ZSB0byBvcGVuIHRoZSBjYWxlbmRhciB0byBpbml0aWFsbHkuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RhcnRBdCh2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zdGFydEF0ID0gdmFsdWUgPyBtb21lbnQudW5peCh2YWx1ZSkudXRjKCkgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIHRvIHRyYW5zZm9ybSBkYXRlLCB0YWtpbmcgZW5kLCBzdGFydCwgbWlkZGxlIG9mIHBlcmlvZCAoaS5lLiBzZXQgbWlkZGxlIG9mIG1vbnRoIGlmIHRpbWVmcmFtZT0nbW9udGgnKVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBlcmlvZFBvc2l0aW9uOiBEYXRlUGlja2VyUGVyaW9kUG9zaXRpb24gPSBEYXRlUGlja2VyUGVyaW9kUG9zaXRpb24uREVGQVVMVDtcblxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdC4uLic7XG5cbiAgICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJykgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBmaXNjYWxZZWFyTW9udGhzTW9kaWZpZXIgPSAwO1xuXG4gICAgQElucHV0KCkgZmlzY2FsWWVhckJhY2sgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGRhdGVwaWNrZXJGaWx0ZXI6IChtb21lbnQ6IE1vbWVudCkgPT4gYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHJlYWRvbmx5IHNlbGVjdEN1cnJlbnRRdWFydGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9kYXRlUGlja2VyOiBNYXREYXRlcGlja2VyPGFueT4gfCBNYXREYXRlUmFuZ2VQaWNrZXI8YW55PjtcbiAgICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJylcbiAgICBwdWJsaWMgc2V0IGRhdGVQaWNrZXIodmFsdWU6IE1hdERhdGVwaWNrZXI8YW55PiB8IE1hdERhdGVSYW5nZVBpY2tlcjxhbnk+KSB7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXIgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5kYXRlUGlja2VySW5zdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlci5zdGFydFZpZXcgPSB0aGlzLmNhbGVuZGFyVmlld3NUaW1lZnJhbWVNYXBwaW5nW3RoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lXTtcbiAgICB9XG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyKCk6IE1hdERhdGVwaWNrZXI8YW55PiB8IE1hdERhdGVSYW5nZVBpY2tlcjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXI7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKVxuICAgIGdldCBhY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5lZCQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FsZW5kYXJWaWV3c1RpbWVmcmFtZU1hcHBpbmc6IGFueSA9IHtcbiAgICAgICAgeWVhcjogJ211bHRpLXllYXInLFxuICAgICAgICBtb250aDogJ3llYXInLFxuICAgICAgICBxdWFydGVyOiAnbm9uZScsXG4gICAgICAgIGRheTogJ21vbnRoJyxcbiAgICAgICAgd2VlazogJ21vbnRoJyxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbUhlYWRlciA9IERyRGF0ZVBpY2tlckN1c3RvbUhlYWRlckNvbXBvbmVudDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgPSB0cnVlO1xuICAgIHB1YmxpYyBfbWluOiBNb21lbnQ7XG4gICAgcHJvdGVjdGVkIF9tYXg6IE1vbWVudDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGltZWZyYW1lT3B0aW9uID0gVGltZWZyYW1lT3B0aW9uO1xuXG4gICAgcHJvdGVjdGVkIGdldCBpbm5lclZhbHVlKCk6IE1vbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBzZXQgaW5uZXJWYWx1ZSh2YWx1ZTogTW9tZW50KSB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwbGF5VmFsdWUkID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaW5uZXJWYWx1ZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gICAgXSkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFtudWxsLCBudWxsXSksXG4gICAgICAgIG1hcCgoW3ZhbHVlLCB0aW1lZnJhbWVdOiBbTW9tZW50LCBUaW1lZnJhbWVPcHRpb25dKSA9PiB0aGlzLnRyYW5zZm9ybURpc3BsYXllZFZhbHVlKHZhbHVlLCB0aW1lZnJhbWUpKSxcbiAgICAgICAgdGFwKCh2YWx1ZTogTW9tZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlLmFjdGl2ZURhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmNhbGVuZGFySW5zdGFuY2Uuc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICApO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcGVuZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblxuICAgIHJlYWRvbmx5IHJhbmdlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBzdGFydDogdGhpcy5mYi5jb250cm9sPE1vbWVudCB8IG51bGw+KG51bGwpLFxuICAgICAgICBlbmQ6IHRoaXMuZmIuY29udHJvbDxNb21lbnQgfCBudWxsPihudWxsKSxcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxhbnk+LFxuICAgICAgICBwdWJsaWMgZGF0ZVBpY2tlclNlcnZpY2U6IERyRGF0ZVBpY2tlclNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIGRhdGVQaWNrZXJTZXJ2aWNlLnVwZGF0ZWRRdWFydGVyJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGF0ZVBpY2tlclNlcnZpY2Uud2Vla1NlbGVjdGlvbkNoYW5nZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh7IHN0YXJ0LCBlbmQgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yYW5nZUZvcm0ucGF0Y2hWYWx1ZSh7IHN0YXJ0LCBlbmQgfSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIoc3RhcnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWUkLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yYW5nZUZvcm0ucGF0Y2hWYWx1ZSh7IHN0YXJ0OiB2YWx1ZS5jbG9uZSgpLnN0YXJ0T2YoJ2lzb1dlZWsnKSwgZW5kOiB2YWx1ZS5jbG9uZSgpLmVuZE9mKCdpc29XZWVrJykgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXRGbiA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0O1xuICAgICAgICB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdCA9IChkYXRlOiBNb21lbnQsIGRpc3BsYXlGb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IGRhdGVUb0Zvcm1hdCA9IGRhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVGltZWZyYW1lRGVwZW5kaW5nT25GWSh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlVG9Gb3JtYXQgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnN1YnRyYWN0RmlzY2FsWWVhck1vbnRoc0Zyb21EYXRlKGRhdGVUb0Zvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0ZUZvcm1hdEZuLmNhbGwodGhpcy5kYXRlQWRhcHRlciwgZGF0ZVRvRm9ybWF0LCBkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZmlzY2FsWWVhck1vbnRoc01vZGlmaWVyID0gdGhpcy5maXNjYWxZZWFyTW9udGhzTW9kaWZpZXI7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZmlzY2FsWWVhckJhY2sgPSB0aGlzLmZpc2NhbFllYXJCYWNrO1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmRhdGVwaWNrZXJGaWx0ZXIgPSB0aGlzLmRhdGVGaWx0ZXI7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2VsZWN0Q3VycmVudFF1YXJ0ZXIgPSB0aGlzLnNlbGVjdEN1cnJlbnRRdWFydGVyO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmZvcm1hdD8uY3VycmVudFZhbHVlICYmIGNoYW5nZXMuZm9ybWF0LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5mb3JtYXQucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtYXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmZpc2NhbFllYXJNb250aHNNb2RpZmllcikge1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5maXNjYWxZZWFyTW9udGhzTW9kaWZpZXIgPSB0aGlzLmZpc2NhbFllYXJNb250aHNNb2RpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmZpc2NhbFllYXJCYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmZpc2NhbFllYXJCYWNrID0gdGhpcy5maXNjYWxZZWFyQmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdEN1cnJlbnRRdWFydGVyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNlbGVjdEN1cnJlbnRRdWFydGVyID0gdGhpcy5zZWxlY3RDdXJyZW50UXVhcnRlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0aW5nIGNvbXBvbmVudCBpbm5lciB2YWx1ZSBhY2NvcmRpbmcgdG8gZGF0ZXBpY2tlciB0aW1lZnJhbWUgKGRheSwgbW9udGggZXRjLilcbiAgICAgKiBhbmQgZGF0ZSBwb3NpdGlvbiBpbiBwZXJpb2QgKHN0YXJ0LCBlbmQsIG1pZGRsZSlcbiAgICAgKi9cbiAgICB0cnlUb05vcm1hbGl6ZVRpbWVmcmFtZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGltZWZyYW1lID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWU7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZS5jbG9uZSgpO1xuICAgICAgICBjb25zdCB1bml0ID0gdGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uV0VFSyA/ICdpc29XZWVrJyA6IHRpbWVmcmFtZTtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBlcmlvZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIERhdGVQaWNrZXJQZXJpb2RQb3NpdGlvbi5TVEFSVF9PRl9QRVJJT0Q6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uUVVBUlRFUikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNldFN0YXJ0T2ZDdXJyZW50UXVhcnRlcihub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5ZRUFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0U3RhcnRPZlF1YXJ0ZXIobm9ybWFsaXplZFZhbHVlLCAxKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuc3RhcnRPZih1bml0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGVQaWNrZXJQZXJpb2RQb3NpdGlvbi5FTkRfT0ZfUEVSSU9EOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLlFVQVJURVIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRFbmRPZkN1cnJlbnRRdWFydGVyKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRFbmRPZlF1YXJ0ZXIobm9ybWFsaXplZFZhbHVlLCA0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuZW5kT2YodW5pdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRlUGlja2VyUGVyaW9kUG9zaXRpb24uTUlERExFX09GX1BFUklPRDpcbiAgICAgICAgICAgICAgICBsZXQgZW5kT2ZQZXJpb2Q6IE1vbWVudDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5RVUFSVEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZE9mUGVyaW9kID0gbm9ybWFsaXplZFZhbHVlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0U3RhcnRPZkN1cnJlbnRRdWFydGVyKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0RW5kT2ZDdXJyZW50UXVhcnRlcihlbmRPZlBlcmlvZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kT2ZQZXJpb2QgPSBub3JtYWxpemVkVmFsdWUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRTdGFydE9mUXVhcnRlcihub3JtYWxpemVkVmFsdWUsIDEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNldEVuZE9mUXVhcnRlcihlbmRPZlBlcmlvZCwgNCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLnN0YXJ0T2YodW5pdCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZE9mUGVyaW9kID0gbm9ybWFsaXplZFZhbHVlLmNsb25lKCkuZW5kT2YodW5pdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBlbmRPZlBlcmlvZC5kaWZmKG5vcm1hbGl6ZWRWYWx1ZSwgJ3NlY29uZHMnKTtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuYWRkKGRpZmYgLyAyICsgMSwgJ3NlY29uZHMnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLnN0YXJ0T2YodW5pdCkuc2V0KCdob3VycycsIDEyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWUgPSBub3JtYWxpemVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNob3NlblBlcmlvZEhhbmRsZXIoY2hvc2VuRGF0ZTogTW9tZW50LCB0aW1lZnJhbWU6IFRpbWVmcmFtZU9wdGlvbiwgcGlja2VyOiBNYXREYXRlcGlja2VyPGFueT4pIHtcbiAgICAgICAgaWYgKHRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgIGNob3NlbkRhdGUgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmFkZEZpc2NhbFllYXJNb250aHNUb0RhdGUoY2hvc2VuRGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5RVUFSVEVSICYmIHRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuY2FsZW5kYXJJbnN0YW5jZS5jdXJyZW50VmlldyA9IENhbGVuZGFyVmlldy5GT1JfUVVBUlRFUlMgYXMgTWF0Q2FsZW5kYXJWaWV3O1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlLmFjdGl2ZURhdGUgPSBjaG9zZW5EYXRlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lID09PSB0aW1lZnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkSW5DYWxlbmRhcihjaG9zZW5EYXRlKTtcbiAgICAgICAgICAgIHBpY2tlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0dGluZyB2YWx1ZSBmcm9tIG91dHNpZGUgb2YgY29tcG9uZW50IHZpYSBuZ01vZGVsIG9yIGZvcm1Db250cm9sIHVwZGF0ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFdlIG5lZWQga2VlcCBsb2NhbCB0aW1lc3RhbXAgZm9yIEVsZWN0cm9uIEFwcGxpY2F0aW9uXG4gICAgICAgICAqIElzc3VlIGluIGVsZWN0cm9uOiB3aGVuIHdlIHNlbGVjdCBkYXRlLCBkYXRlIHNlbGVjdCB3aXRoIC0xIChpZiB3ZSdyZSBjaG9vc2luZyAyMDIzLCBvdXRwdXQgd2lsbCBiZSAyMDIyKVxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgY29udmVydGVkVmFsdWUgPSAoZG9jdW1lbnQgYXMgYW55KS5pc19lbGVjdHJvbiA/IG1vbWVudC51bml4KHZhbHVlKSA6IG1vbWVudC51bml4KHZhbHVlKS51dGMoKTtcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWUgPyBjb252ZXJ0ZWRWYWx1ZSA6IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudHJ5VG9Ob3JtYWxpemVUaW1lZnJhbWUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICAgIHB1YmxpYyBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIFNob3VsZCBiZSBhcyBhcnJvdyBmdW5jdGlvbiB0byBhdm9pZCBsb3NlIHNjb3BlXG4gICAgcHVibGljIGRhdGVGaWx0ZXIgPSAobW9tZW50OiBNb21lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckZpbHRlciAmJiBtb21lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVwaWNrZXJGaWx0ZXIobW9tZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2VkSW5DYWxlbmRhcih2YWw6IE1vbWVudCkge1xuICAgICAgICBpZiAodmFsICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlVG9TZXQgPSB2YWw/LmNsb25lKCk7XG4gICAgICAgICAgICBpZiAodmFsdWVUb1NldCAmJiB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVGltZWZyYW1lRGVwZW5kaW5nT25GWSh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnN1YnRyYWN0RmlzY2FsWWVhclNoaWZ0Rm9yWWVhcih2YWx1ZVRvU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVGcm9tTW9tZW50KHZhbHVlVG9TZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGlubmVyIHZhbHVlIGZyb20gTW9tZW50IGFuZCBwcm9wYWdhdGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtb21lbnREYXRlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNldFZhbHVlRnJvbU1vbWVudChtb21lbnREYXRlOiBNb21lbnQpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShtb21lbnREYXRlLnVuaXgoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGlubmVyIHZhbHVlIGZyb20gdGltZXN0YW1wIGFuZCBwcm9wYWdhdGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aW1lc3RhbXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2V0VmFsdWUodGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gaXNWYWx1ZVVwZGF0aW5nIGlzIHJlcXVpcmVkIGZvciBtYW5hZ2UgY2xpY2tzIG9uIHNhbWUgZGF0ZXM6IGlmIGlzVmFsdWVVcGRhdGluZyAtIHRydWUgdGhlblxuICAgICAgICAvLyBkYXlzIGFyZSBkaWZmZXJlbnQgYW5kIHN1YnNjcmlwdGlvbiBvbiBjYWxlbmRhciBkYXkgY2xpY2sgYWN0aW9uIHdvbid0IHRyaWdnZXIgQWNjZXNzb3IgbmdNb2RlbCB1cGRhdGVcbiAgICAgICAgLy8gb25lIG1vcmUgdGltZVxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVmFsdWVVcGRhdGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aW1lc3RhbXApO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5pbm5lclZhbHVlLnVuaXgoKSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5pc1ZhbHVlVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyYW5zZm9ybURpc3BsYXllZFZhbHVlKHZhbHVlOiBNb21lbnQsIHRpbWVmcmFtZTogVGltZWZyYW1lT3B0aW9uKTogTW9tZW50IHtcbiAgICAgICAgY29uc3QgdmFsdWVUb1JldHVybiA9IHZhbHVlPy5jbG9uZSgpO1xuICAgICAgICBpZiAodmFsdWVUb1JldHVybiAmJiB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVGltZWZyYW1lRGVwZW5kaW5nT25GWSh0aW1lZnJhbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmFkZEZpc2NhbFllYXJTaGlmdEZvclllYXIodmFsdWVUb1JldHVybik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlVG9SZXR1cm47XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1hdCgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHRpbWVmcmFtZTtcbiAgICAgICAgbGV0IGZvcm1hdCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0Q29uZmlndXJlZEZvcm1hdCh0aGlzLmZvcm1hdCBhcyBUaW1lZnJhbWVPcHRpb24pO1xuICAgICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICB0aW1lZnJhbWUgPSB0aGlzLmZvcm1hdCBhcyBUaW1lZnJhbWVPcHRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLm5vcm1hbGl6ZVZhbHVlKHRoaXMuZm9ybWF0KTtcbiAgICAgICAgICAgIHRpbWVmcmFtZSA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0VGltZWZyYW1lKGZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPSB0aW1lZnJhbWU7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZm9ybWF0JC5uZXh0KGZvcm1hdCk7XG4gICAgfVxuXG4gICAgb25PcGVuKCkge1xuICAgICAgICB0aGlzLm9wZW5lZCQubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICBvbkNMb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5pbm5lclZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBub25Ob3JtYWxpemVkVGltZXN0YW1wID0gdGhpcy5pbm5lclZhbHVlLnVuaXgoKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShub25Ob3JtYWxpemVkVGltZXN0YW1wKTtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZS51bml4KCk7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFZhbHVlICE9PSBub25Ob3JtYWxpemVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGVuZWQkLm5leHQoZmFsc2UpO1xuICAgIH1cbn1cbiIsIjxpICpuZ0lmPVwiIXVzZUJ1dHRvblwiIGNsYXNzPVwiZHItaWNvbi1kYXRlXCIgKGNsaWNrKT1cImRhdGVQaWNrZXIub3BlbigpXCI+PC9pPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiKGRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSQgfCBhc3luYykgPT09ICd3ZWVrJ1wiPlxuICAgIDxpbnB1dFxuICAgICAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgICAgIFtuZ01vZGVsXT1cImlucHV0LnZhbHVlXCJcbiAgICAgICAgKGNsaWNrKT1cImRhdGVQaWNrZXIub3BlbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW21pbl09XCJfbWluXCJcbiAgICAgICAgW21heF09XCJfbWF4XCIgLz5cblxuICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbZm9ybUdyb3VwXT1cInJhbmdlRm9ybVwiIFtyYW5nZVBpY2tlcl09XCJkYXRlUGlja2VyXCIgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiIGNsYXNzPVwicmFuZ2UtaW5wdXRcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRTdGFydERhdGVcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgW2RyRGF0ZVBpY2tlckZvcm1hdF09XCJkYXRlUGlja2VyU2VydmljZS5mb3JtYXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRcIlxuICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwidmFsdWVDaGFuZ2VkSW5DYWxlbmRhcihyYW5nZUZvcm0udmFsdWUuc3RhcnQpXCIgLz5cbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgW2RyRGF0ZVBpY2tlckZvcm1hdF09XCJkYXRlUGlja2VyU2VydmljZS5mb3JtYXQkIHwgYXN5bmNcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIiAvPlxuICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG5cbiAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyXG4gICAgICAgICNkYXRlUGlja2VyXG4gICAgICAgIFtzdGFydEF0XT1cIl9zdGFydEF0XCJcbiAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ2RyLXdlZWstZGF0ZXBpY2tlcicgKyAocGFuZWxDbGFzcyA/ICcgJyArIHBhbmVsQ2xhc3MgOiAnJylcIlxuICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiY3VzdG9tSGVhZGVyXCJcbiAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJjaG9zZW5QZXJpb2RIYW5kbGVyKCRldmVudCwgdGltZWZyYW1lT3B0aW9uLllFQVIsIGRhdGVQaWNrZXIpXCJcbiAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwiY2hvc2VuUGVyaW9kSGFuZGxlcigkZXZlbnQsIHRpbWVmcmFtZU9wdGlvbi5NT05USCwgZGF0ZVBpY2tlcilcIlxuICAgICAgICAob3BlbmVkKT1cIm9uT3BlbigpXCJcbiAgICAgICAgKGNsb3NlZCk9XCJvbkNMb3NlKClcIj5cbiAgICA8L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiKGRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSQgfCBhc3luYykgIT09ICd3ZWVrJ1wiPlxuICAgIDxpbnB1dFxuICAgICAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgICAgIFtuZ01vZGVsXT1cImRpc3BsYXlWYWx1ZSQgfCBhc3luY1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLm9wZW4oKVwiXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlRmlsdGVyXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW2RyRGF0ZVBpY2tlckZvcm1hdF09XCJkYXRlUGlja2VyU2VydmljZS5mb3JtYXQkIHwgYXN5bmNcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbbWluXT1cIl9taW5cIlxuICAgICAgICBbbWF4XT1cIl9tYXhcIlxuICAgICAgICBbY2xhc3MuaGlkZGVuLWNhbGVuZGFyLWlucHV0XT1cInVzZUJ1dHRvblwiIC8+XG5cbiAgICA8ZHItYnV0dG9uXG4gICAgICAgICpuZ0lmPVwidXNlQnV0dG9uXCJcbiAgICAgICAgW2ljb25dPVwiJ2RyLWljb24tZGF0ZSdcIlxuICAgICAgICBbaWNvbkFmdGVyXT1cImljb25BZnRlckJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLm9wZW4oKVwiXG4gICAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1idXR0b25cIj5cbiAgICAgICAge3sgYnV0dG9uTGFiZWwgfHwgJ1NlbGVjdCBEYXRlJyB9fVxuICAgIDwvZHItYnV0dG9uPlxuXG4gICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgICNkYXRlUGlja2VyXG4gICAgICAgIFtwYW5lbENsYXNzXT1cInBhbmVsQ2xhc3NcIlxuICAgICAgICBbc3RhcnRBdF09XCJfc3RhcnRBdFwiXG4gICAgICAgIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJjdXN0b21IZWFkZXJcIlxuICAgICAgICAoeWVhclNlbGVjdGVkKT1cImNob3NlblBlcmlvZEhhbmRsZXIoJGV2ZW50LCB0aW1lZnJhbWVPcHRpb24uWUVBUiwgZGF0ZVBpY2tlcilcIlxuICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJjaG9zZW5QZXJpb2RIYW5kbGVyKCRldmVudCwgdGltZWZyYW1lT3B0aW9uLk1PTlRILCBkYXRlUGlja2VyKVwiXG4gICAgICAgIChvcGVuZWQpPVwib25PcGVuKClcIlxuICAgICAgICAoY2xvc2VkKT1cIm9uQ0xvc2UoKVwiPlxuICAgIDwvbWF0LWRhdGVwaWNrZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
478
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItaW5wdXRzL2RhdGUtcGlja2Vycy9kci1kYXRlLXBpY2tlci9kci1kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL2RyLWRhdGUtcGlja2VyL2RyLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXJHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDM0gsT0FBTyxFQUlILGlDQUFpQyxHQUNw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QUF1RDtZQWlDdkQsZUFBdUQ7WUFBdkQsd0ZBQXVEOzs7dUZEZ0J6RCxxQkFBcUI7Y0FaakMsU0FBUzsyQkFDSSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTSxhQUNwQztvQkFDUCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLHVCQUF1QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7b0JBQy9FLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7b0JBQ3JELEVBQUUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRTtvQkFDL0UsbUJBQW1CO2lCQUN0QjtnSUFJRCxFQUFFO2tCQURELEtBQUs7WUFHTixNQUFNO2tCQURMLFdBQVc7bUJBQUMsU0FBUztZQUcyQixTQUFTO2tCQUF6RCxLQUFLOztrQkFBSSxXQUFXO21CQUFDLHlCQUF5QjtZQUN0QyxXQUFXO2tCQUFuQixLQUFLO1lBQ0csZUFBZTtrQkFBdkIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFHRixZQUFZO2tCQURmLEtBQUs7WUFTTixNQUFNO2tCQURMLEtBQUs7WUFJRixHQUFHO2tCQUROLEtBQUs7WUFNRixHQUFHO2tCQUROLEtBQUs7WUFVRixPQUFPO2tCQURWLEtBQUs7WUFRRyxjQUFjO2tCQUF0QixLQUFLO1lBRUcsV0FBVztrQkFBbkIsS0FBSztZQUVrQyxRQUFRO2tCQUEvQyxLQUFLOztrQkFBSSxXQUFXO21CQUFDLGdCQUFnQjtZQUU3Qix3QkFBd0I7a0JBQWhDLEtBQUs7WUFFRyxjQUFjO2tCQUF0QixLQUFLO1lBRUcsZ0JBQWdCO2tCQUF4QixLQUFLO1lBRVksb0JBQW9CO2tCQUFyQyxLQUFLO1lBSUssVUFBVTtrQkFEcEIsU0FBUzttQkFBQyxZQUFZO1lBV25CLE1BQU07a0JBRFQsV0FBVzttQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJWaWV3LCBEYXRlUGlja2VyUGVyaW9kUG9zaXRpb24sIFRpbWVmcmFtZU9wdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kYXRlUGlja2VyJztcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgRHJEYXRlUGlja2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RyLWRhdGUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRHJEYXRlUGlja2VyQ3VzdG9tSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZHItZGF0ZS1waWNrZXJfY3VzdG9tLWhlYWRlci9kci1kYXRlLXBpY2tlcl9jdXN0b20taGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIE1hdENhbGVuZGFyVmlldyxcbiAgICBNYXREYXRlcGlja2VyLFxuICAgIE1hdERhdGVSYW5nZVBpY2tlcixcbiAgICBNQVRfREFURV9SQU5HRV9TRUxFQ1RJT05fU1RSQVRFR1ksXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgTW9tZW50RGF0ZUFkYXB0ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC1tb21lbnQtYWRhcHRlcic7XG5pbXBvcnQgeyBXZWVrU2VsZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy93ZWVrLXNlbGVjdGlvbi1zdHJhdGVneSc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVBZGFwdGVyIGV4dGVuZHMgTW9tZW50RGF0ZUFkYXB0ZXIge1xuICAgIGdldEZpcnN0RGF5T2ZXZWVrKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1kYXRlLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RyLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kci1kYXRlLXBpY2tlci5jb21wb25lbnQuc2NzcycsICcuL2RyLWRhdGUtcGlja2VyLWRhcmsuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IERyRGF0ZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBEYXRlQWRhcHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVBZGFwdGVyIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTUFUX0RBVEVfUkFOR0VfU0VMRUNUSU9OX1NUUkFURUdZLCB1c2VDbGFzczogV2Vla1NlbGVjdGlvblN0cmF0ZWd5IH0sXG4gICAgICAgIERyRGF0ZVBpY2tlclNlcnZpY2UsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRHJEYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKVxuICAgIGlkPzogc3RyaW5nO1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaG9zdElkID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MudXNlLWJ1dHRvbi1waWNrZXInKSB1c2VCdXR0b246IGJvb2xlYW47XG4gICAgQElucHV0KCkgYnV0dG9uTGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBpY29uQWZ0ZXJCdXR0b246IHN0cmluZztcbiAgICBASW5wdXQoKSBwYW5lbENsYXNzOiBzdHJpbmcgPSAnJztcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHVzZURhcmtUaGVtZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnBhbmVsQ2xhc3MgPSB2YWx1ZSA/IHRoaXMucGFuZWxDbGFzcyArICcgZHItZGF0ZXBpY2tlci1kYXJrLXRoZW1lJyA6IHRoaXMucGFuZWxDbGFzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgZGF0ZSBwaWNrZXIgZm9ybWF0IGlucHV0IGxhYmVsLCBjYWxlbmRhciBzdGFydCB2aWV3IGFuZCB0aW1lZnJhbWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1hdDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgbWluKG1pbkRhdGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9taW4gPSBtaW5EYXRlID8gbW9tZW50LnVuaXgobWluRGF0ZSkudXRjKCkgOiBudWxsO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1heChtYXhEYXRlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbWF4RGF0ZU1vbWVudCA9IG1heERhdGUgPyBtb21lbnQudW5peChtYXhEYXRlKS51dGMoKSA6IG51bGw7XG4gICAgICAgIHRoaXMuX21heCA9IG1heERhdGVNb21lbnQ7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UubWF4RGF0ZSA9IG1heERhdGVNb21lbnQ7XG4gICAgfVxuXG4gICAgX3N0YXJ0QXQ6IE1vbWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8qKiBUaGUgZGF0ZSB0byBvcGVuIHRoZSBjYWxlbmRhciB0byBpbml0aWFsbHkuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RhcnRBdCh2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zdGFydEF0ID0gdmFsdWUgPyBtb21lbnQudW5peCh2YWx1ZSkudXRjKCkgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIHRvIHRyYW5zZm9ybSBkYXRlLCB0YWtpbmcgZW5kLCBzdGFydCwgbWlkZGxlIG9mIHBlcmlvZCAoaS5lLiBzZXQgbWlkZGxlIG9mIG1vbnRoIGlmIHRpbWVmcmFtZT0nbW9udGgnKVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBlcmlvZFBvc2l0aW9uOiBEYXRlUGlja2VyUGVyaW9kUG9zaXRpb24gPSBEYXRlUGlja2VyUGVyaW9kUG9zaXRpb24uREVGQVVMVDtcblxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdC4uLic7XG5cbiAgICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJykgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBmaXNjYWxZZWFyTW9udGhzTW9kaWZpZXIgPSAwO1xuXG4gICAgQElucHV0KCkgZmlzY2FsWWVhckJhY2sgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGRhdGVwaWNrZXJGaWx0ZXI6IChtb21lbnQ6IE1vbWVudCkgPT4gYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHJlYWRvbmx5IHNlbGVjdEN1cnJlbnRRdWFydGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9kYXRlUGlja2VyOiBNYXREYXRlcGlja2VyPGFueT4gfCBNYXREYXRlUmFuZ2VQaWNrZXI8YW55PjtcbiAgICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJylcbiAgICBwdWJsaWMgc2V0IGRhdGVQaWNrZXIodmFsdWU6IE1hdERhdGVwaWNrZXI8YW55PiB8IE1hdERhdGVSYW5nZVBpY2tlcjxhbnk+KSB7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXIgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5kYXRlUGlja2VySW5zdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlci5zdGFydFZpZXcgPSB0aGlzLmNhbGVuZGFyVmlld3NUaW1lZnJhbWVNYXBwaW5nW3RoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lXTtcbiAgICB9XG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyKCk6IE1hdERhdGVwaWNrZXI8YW55PiB8IE1hdERhdGVSYW5nZVBpY2tlcjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXI7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKVxuICAgIGdldCBhY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5lZCQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FsZW5kYXJWaWV3c1RpbWVmcmFtZU1hcHBpbmc6IGFueSA9IHtcbiAgICAgICAgeWVhcjogJ211bHRpLXllYXInLFxuICAgICAgICBtb250aDogJ3llYXInLFxuICAgICAgICBxdWFydGVyOiAnbm9uZScsXG4gICAgICAgIGRheTogJ21vbnRoJyxcbiAgICAgICAgd2VlazogJ21vbnRoJyxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbUhlYWRlciA9IERyRGF0ZVBpY2tlckN1c3RvbUhlYWRlckNvbXBvbmVudDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgPSB0cnVlO1xuICAgIHB1YmxpYyBfbWluOiBNb21lbnQ7XG4gICAgcHJvdGVjdGVkIF9tYXg6IE1vbWVudDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGltZWZyYW1lT3B0aW9uID0gVGltZWZyYW1lT3B0aW9uO1xuXG4gICAgcHJvdGVjdGVkIGdldCBpbm5lclZhbHVlKCk6IE1vbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBzZXQgaW5uZXJWYWx1ZSh2YWx1ZTogTW9tZW50KSB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwbGF5VmFsdWUkID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaW5uZXJWYWx1ZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gICAgXSkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFtudWxsLCBudWxsXSksXG4gICAgICAgIG1hcCgoW3ZhbHVlLCB0aW1lZnJhbWVdOiBbTW9tZW50LCBUaW1lZnJhbWVPcHRpb25dKSA9PiB0aGlzLnRyYW5zZm9ybURpc3BsYXllZFZhbHVlKHZhbHVlLCB0aW1lZnJhbWUpKSxcbiAgICAgICAgdGFwKCh2YWx1ZTogTW9tZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlLmFjdGl2ZURhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmNhbGVuZGFySW5zdGFuY2Uuc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICApO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcGVuZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblxuICAgIHJlYWRvbmx5IHJhbmdlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBzdGFydDogdGhpcy5mYi5jb250cm9sPE1vbWVudCB8IG51bGw+KG51bGwpLFxuICAgICAgICBlbmQ6IHRoaXMuZmIuY29udHJvbDxNb21lbnQgfCBudWxsPihudWxsKSxcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxhbnk+LFxuICAgICAgICBwdWJsaWMgZGF0ZVBpY2tlclNlcnZpY2U6IERyRGF0ZVBpY2tlclNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIGRhdGVQaWNrZXJTZXJ2aWNlLnVwZGF0ZWRRdWFydGVyJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGF0ZVBpY2tlclNlcnZpY2Uud2Vla1NlbGVjdGlvbkNoYW5nZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh7IHN0YXJ0LCBlbmQgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yYW5nZUZvcm0ucGF0Y2hWYWx1ZSh7IHN0YXJ0LCBlbmQgfSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIoc3RhcnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWUkLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yYW5nZUZvcm0ucGF0Y2hWYWx1ZSh7IHN0YXJ0OiB2YWx1ZS5jbG9uZSgpLnN0YXJ0T2YoJ2lzb1dlZWsnKSwgZW5kOiB2YWx1ZS5jbG9uZSgpLmVuZE9mKCdpc29XZWVrJykgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXRGbiA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0O1xuICAgICAgICB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdCA9IChkYXRlOiBNb21lbnQsIGRpc3BsYXlGb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IGRhdGVUb0Zvcm1hdCA9IGRhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVGltZWZyYW1lRGVwZW5kaW5nT25GWSh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlVG9Gb3JtYXQgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnN1YnRyYWN0RmlzY2FsWWVhck1vbnRoc0Zyb21EYXRlKGRhdGVUb0Zvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0ZUZvcm1hdEZuLmNhbGwodGhpcy5kYXRlQWRhcHRlciwgZGF0ZVRvRm9ybWF0LCBkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZmlzY2FsWWVhck1vbnRoc01vZGlmaWVyID0gdGhpcy5maXNjYWxZZWFyTW9udGhzTW9kaWZpZXI7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZmlzY2FsWWVhckJhY2sgPSB0aGlzLmZpc2NhbFllYXJCYWNrO1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmRhdGVwaWNrZXJGaWx0ZXIgPSB0aGlzLmRhdGVGaWx0ZXI7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2VsZWN0Q3VycmVudFF1YXJ0ZXIgPSB0aGlzLnNlbGVjdEN1cnJlbnRRdWFydGVyO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmZvcm1hdD8uY3VycmVudFZhbHVlICYmIGNoYW5nZXMuZm9ybWF0LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5mb3JtYXQucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtYXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmZpc2NhbFllYXJNb250aHNNb2RpZmllcikge1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5maXNjYWxZZWFyTW9udGhzTW9kaWZpZXIgPSB0aGlzLmZpc2NhbFllYXJNb250aHNNb2RpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmZpc2NhbFllYXJCYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmZpc2NhbFllYXJCYWNrID0gdGhpcy5maXNjYWxZZWFyQmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdEN1cnJlbnRRdWFydGVyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNlbGVjdEN1cnJlbnRRdWFydGVyID0gdGhpcy5zZWxlY3RDdXJyZW50UXVhcnRlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0aW5nIGNvbXBvbmVudCBpbm5lciB2YWx1ZSBhY2NvcmRpbmcgdG8gZGF0ZXBpY2tlciB0aW1lZnJhbWUgKGRheSwgbW9udGggZXRjLilcbiAgICAgKiBhbmQgZGF0ZSBwb3NpdGlvbiBpbiBwZXJpb2QgKHN0YXJ0LCBlbmQsIG1pZGRsZSlcbiAgICAgKi9cbiAgICB0cnlUb05vcm1hbGl6ZVRpbWVmcmFtZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGltZWZyYW1lID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWU7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZS5jbG9uZSgpO1xuICAgICAgICBjb25zdCB1bml0ID0gdGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uV0VFSyA/ICdpc29XZWVrJyA6IHRpbWVmcmFtZTtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBlcmlvZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIERhdGVQaWNrZXJQZXJpb2RQb3NpdGlvbi5TVEFSVF9PRl9QRVJJT0Q6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uUVVBUlRFUikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNldFN0YXJ0T2ZDdXJyZW50UXVhcnRlcihub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5ZRUFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0U3RhcnRPZlF1YXJ0ZXIobm9ybWFsaXplZFZhbHVlLCAxKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuc3RhcnRPZih1bml0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGVQaWNrZXJQZXJpb2RQb3NpdGlvbi5FTkRfT0ZfUEVSSU9EOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLlFVQVJURVIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRFbmRPZkN1cnJlbnRRdWFydGVyKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRFbmRPZlF1YXJ0ZXIobm9ybWFsaXplZFZhbHVlLCA0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuZW5kT2YodW5pdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRlUGlja2VyUGVyaW9kUG9zaXRpb24uTUlERExFX09GX1BFUklPRDpcbiAgICAgICAgICAgICAgICBsZXQgZW5kT2ZQZXJpb2Q6IE1vbWVudDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5RVUFSVEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZE9mUGVyaW9kID0gbm9ybWFsaXplZFZhbHVlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0U3RhcnRPZkN1cnJlbnRRdWFydGVyKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0RW5kT2ZDdXJyZW50UXVhcnRlcihlbmRPZlBlcmlvZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kT2ZQZXJpb2QgPSBub3JtYWxpemVkVmFsdWUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRTdGFydE9mUXVhcnRlcihub3JtYWxpemVkVmFsdWUsIDEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNldEVuZE9mUXVhcnRlcihlbmRPZlBlcmlvZCwgNCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLnN0YXJ0T2YodW5pdCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZE9mUGVyaW9kID0gbm9ybWFsaXplZFZhbHVlLmNsb25lKCkuZW5kT2YodW5pdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBlbmRPZlBlcmlvZC5kaWZmKG5vcm1hbGl6ZWRWYWx1ZSwgJ3NlY29uZHMnKTtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuYWRkKGRpZmYgLyAyICsgMSwgJ3NlY29uZHMnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLnN0YXJ0T2YodW5pdCkuc2V0KCdob3VycycsIDEyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWUgPSBub3JtYWxpemVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNob3NlblBlcmlvZEhhbmRsZXIoY2hvc2VuRGF0ZTogTW9tZW50LCB0aW1lZnJhbWU6IFRpbWVmcmFtZU9wdGlvbiwgcGlja2VyOiBNYXREYXRlcGlja2VyPGFueT4pIHtcbiAgICAgICAgaWYgKHRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgIGNob3NlbkRhdGUgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmFkZEZpc2NhbFllYXJNb250aHNUb0RhdGUoY2hvc2VuRGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5RVUFSVEVSICYmIHRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuY2FsZW5kYXJJbnN0YW5jZS5jdXJyZW50VmlldyA9IENhbGVuZGFyVmlldy5GT1JfUVVBUlRFUlMgYXMgTWF0Q2FsZW5kYXJWaWV3O1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlLmFjdGl2ZURhdGUgPSBjaG9zZW5EYXRlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lID09PSB0aW1lZnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkSW5DYWxlbmRhcihjaG9zZW5EYXRlKTtcbiAgICAgICAgICAgIHBpY2tlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0dGluZyB2YWx1ZSBmcm9tIG91dHNpZGUgb2YgY29tcG9uZW50IHZpYSBuZ01vZGVsIG9yIGZvcm1Db250cm9sIHVwZGF0ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFdlIG5lZWQga2VlcCBsb2NhbCB0aW1lc3RhbXAgZm9yIEVsZWN0cm9uIEFwcGxpY2F0aW9uXG4gICAgICAgICAqIElzc3VlIGluIGVsZWN0cm9uOiB3aGVuIHdlIHNlbGVjdCBkYXRlLCBkYXRlIHNlbGVjdCB3aXRoIC0xIChpZiB3ZSdyZSBjaG9vc2luZyAyMDIzLCBvdXRwdXQgd2lsbCBiZSAyMDIyKVxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgY29udmVydGVkVmFsdWUgPSAoZG9jdW1lbnQgYXMgYW55KS5pc19lbGVjdHJvbiA/IG1vbWVudC51bml4KHZhbHVlKSA6IG1vbWVudC51bml4KHZhbHVlKS51dGMoKTtcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWUgPyBjb252ZXJ0ZWRWYWx1ZSA6IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudHJ5VG9Ob3JtYWxpemVUaW1lZnJhbWUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICAgIHB1YmxpYyBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIFNob3VsZCBiZSBhcyBhcnJvdyBmdW5jdGlvbiB0byBhdm9pZCBsb3NlIHNjb3BlXG4gICAgcHVibGljIGRhdGVGaWx0ZXIgPSAobW9tZW50OiBNb21lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckZpbHRlciAmJiBtb21lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVwaWNrZXJGaWx0ZXIobW9tZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2VkSW5DYWxlbmRhcih2YWw6IE1vbWVudCkge1xuICAgICAgICBpZiAodmFsICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlVG9TZXQgPSB2YWw/LmNsb25lKCk7XG4gICAgICAgICAgICBpZiAodmFsdWVUb1NldCAmJiB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVGltZWZyYW1lRGVwZW5kaW5nT25GWSh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnN1YnRyYWN0RmlzY2FsWWVhclNoaWZ0Rm9yWWVhcih2YWx1ZVRvU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVGcm9tTW9tZW50KHZhbHVlVG9TZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGlubmVyIHZhbHVlIGZyb20gTW9tZW50IGFuZCBwcm9wYWdhdGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtb21lbnREYXRlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNldFZhbHVlRnJvbU1vbWVudChtb21lbnREYXRlOiBNb21lbnQpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShtb21lbnREYXRlLnVuaXgoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGlubmVyIHZhbHVlIGZyb20gdGltZXN0YW1wIGFuZCBwcm9wYWdhdGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aW1lc3RhbXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2V0VmFsdWUodGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gaXNWYWx1ZVVwZGF0aW5nIGlzIHJlcXVpcmVkIGZvciBtYW5hZ2UgY2xpY2tzIG9uIHNhbWUgZGF0ZXM6IGlmIGlzVmFsdWVVcGRhdGluZyAtIHRydWUgdGhlblxuICAgICAgICAvLyBkYXlzIGFyZSBkaWZmZXJlbnQgYW5kIHN1YnNjcmlwdGlvbiBvbiBjYWxlbmRhciBkYXkgY2xpY2sgYWN0aW9uIHdvbid0IHRyaWdnZXIgQWNjZXNzb3IgbmdNb2RlbCB1cGRhdGVcbiAgICAgICAgLy8gb25lIG1vcmUgdGltZVxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVmFsdWVVcGRhdGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aW1lc3RhbXApO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5pbm5lclZhbHVlLnVuaXgoKSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5pc1ZhbHVlVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyYW5zZm9ybURpc3BsYXllZFZhbHVlKHZhbHVlOiBNb21lbnQsIHRpbWVmcmFtZTogVGltZWZyYW1lT3B0aW9uKTogTW9tZW50IHtcbiAgICAgICAgY29uc3QgdmFsdWVUb1JldHVybiA9IHZhbHVlPy5jbG9uZSgpO1xuICAgICAgICBpZiAodmFsdWVUb1JldHVybiAmJiB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVGltZWZyYW1lRGVwZW5kaW5nT25GWSh0aW1lZnJhbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmFkZEZpc2NhbFllYXJTaGlmdEZvclllYXIodmFsdWVUb1JldHVybik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlVG9SZXR1cm47XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1hdCgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHRpbWVmcmFtZTtcbiAgICAgICAgbGV0IGZvcm1hdCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0Q29uZmlndXJlZEZvcm1hdCh0aGlzLmZvcm1hdCBhcyBUaW1lZnJhbWVPcHRpb24pO1xuICAgICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICB0aW1lZnJhbWUgPSB0aGlzLmZvcm1hdCBhcyBUaW1lZnJhbWVPcHRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLm5vcm1hbGl6ZVZhbHVlKHRoaXMuZm9ybWF0KTtcbiAgICAgICAgICAgIHRpbWVmcmFtZSA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0VGltZWZyYW1lKGZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPSB0aW1lZnJhbWU7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZm9ybWF0JC5uZXh0KGZvcm1hdCk7XG4gICAgfVxuXG4gICAgb25PcGVuKCkge1xuICAgICAgICB0aGlzLm9wZW5lZCQubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICBvbkNMb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5pbm5lclZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBub25Ob3JtYWxpemVkVGltZXN0YW1wID0gdGhpcy5pbm5lclZhbHVlLnVuaXgoKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShub25Ob3JtYWxpemVkVGltZXN0YW1wKTtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZS51bml4KCk7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFZhbHVlICE9PSBub25Ob3JtYWxpemVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGVuZWQkLm5leHQoZmFsc2UpO1xuICAgIH1cbn1cbiIsIjxpICpuZ0lmPVwiIXVzZUJ1dHRvblwiIGNsYXNzPVwiZHItaWNvbi1kYXRlXCIgKGNsaWNrKT1cImRhdGVQaWNrZXIub3BlbigpXCI+PC9pPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiKGRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSQgfCBhc3luYykgPT09ICd3ZWVrJ1wiPlxuICAgIDxpbnB1dFxuICAgICAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgICAgIFtuZ01vZGVsXT1cImlucHV0LnZhbHVlXCJcbiAgICAgICAgKGNsaWNrKT1cImRhdGVQaWNrZXIub3BlbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW21pbl09XCJfbWluXCJcbiAgICAgICAgW21heF09XCJfbWF4XCIgLz5cblxuICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbZm9ybUdyb3VwXT1cInJhbmdlRm9ybVwiIFtyYW5nZVBpY2tlcl09XCJkYXRlUGlja2VyXCIgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiIGNsYXNzPVwicmFuZ2UtaW5wdXRcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRTdGFydERhdGVcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgW2RyRGF0ZVBpY2tlckZvcm1hdF09XCJkYXRlUGlja2VyU2VydmljZS5mb3JtYXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRcIlxuICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwidmFsdWVDaGFuZ2VkSW5DYWxlbmRhcihyYW5nZUZvcm0udmFsdWUuc3RhcnQpXCIgLz5cbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgW2RyRGF0ZVBpY2tlckZvcm1hdF09XCJkYXRlUGlja2VyU2VydmljZS5mb3JtYXQkIHwgYXN5bmNcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIiAvPlxuICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG5cbiAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyXG4gICAgICAgICNkYXRlUGlja2VyXG4gICAgICAgIFtzdGFydEF0XT1cIl9zdGFydEF0XCJcbiAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ2RyLXdlZWstZGF0ZXBpY2tlcicgKyAocGFuZWxDbGFzcyA/ICcgJyArIHBhbmVsQ2xhc3MgOiAnJylcIlxuICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiY3VzdG9tSGVhZGVyXCJcbiAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJjaG9zZW5QZXJpb2RIYW5kbGVyKCRldmVudCwgdGltZWZyYW1lT3B0aW9uLllFQVIsIGRhdGVQaWNrZXIpXCJcbiAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwiY2hvc2VuUGVyaW9kSGFuZGxlcigkZXZlbnQsIHRpbWVmcmFtZU9wdGlvbi5NT05USCwgZGF0ZVBpY2tlcilcIlxuICAgICAgICAob3BlbmVkKT1cIm9uT3BlbigpXCJcbiAgICAgICAgKGNsb3NlZCk9XCJvbkNMb3NlKClcIj5cbiAgICA8L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiKGRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSQgfCBhc3luYykgIT09ICd3ZWVrJ1wiPlxuICAgIDxpbnB1dFxuICAgICAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgICAgIFtuZ01vZGVsXT1cImRpc3BsYXlWYWx1ZSQgfCBhc3luY1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLm9wZW4oKVwiXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlRmlsdGVyXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW2RyRGF0ZVBpY2tlckZvcm1hdF09XCJkYXRlUGlja2VyU2VydmljZS5mb3JtYXQkIHwgYXN5bmNcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbbWluXT1cIl9taW5cIlxuICAgICAgICBbbWF4XT1cIl9tYXhcIlxuICAgICAgICBbY2xhc3MuaGlkZGVuLWNhbGVuZGFyLWlucHV0XT1cInVzZUJ1dHRvblwiIC8+XG5cbiAgICA8ZHItYnV0dG9uXG4gICAgICAgICpuZ0lmPVwidXNlQnV0dG9uXCJcbiAgICAgICAgW2ljb25dPVwiJ2RyLWljb24tZGF0ZSdcIlxuICAgICAgICBbaWNvbkFmdGVyXT1cImljb25BZnRlckJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLm9wZW4oKVwiXG4gICAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1idXR0b25cIj5cbiAgICAgICAge3sgYnV0dG9uTGFiZWwgfHwgJ1NlbGVjdCBEYXRlJyB9fVxuICAgIDwvZHItYnV0dG9uPlxuXG4gICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgICNkYXRlUGlja2VyXG4gICAgICAgIFtwYW5lbENsYXNzXT1cInBhbmVsQ2xhc3NcIlxuICAgICAgICBbc3RhcnRBdF09XCJfc3RhcnRBdFwiXG4gICAgICAgIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJjdXN0b21IZWFkZXJcIlxuICAgICAgICAoeWVhclNlbGVjdGVkKT1cImNob3NlblBlcmlvZEhhbmRsZXIoJGV2ZW50LCB0aW1lZnJhbWVPcHRpb24uWUVBUiwgZGF0ZVBpY2tlcilcIlxuICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJjaG9zZW5QZXJpb2RIYW5kbGVyKCRldmVudCwgdGltZWZyYW1lT3B0aW9uLk1PTlRILCBkYXRlUGlja2VyKVwiXG4gICAgICAgIChvcGVuZWQpPVwib25PcGVuKClcIlxuICAgICAgICAoY2xvc2VkKT1cIm9uQ0xvc2UoKVwiPlxuICAgIDwvbWF0LWRhdGVwaWNrZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==