@rangertechnologies/ngnxt 2.1.250 → 2.1.252
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/environments/version.mjs +2 -2
- package/esm2022/lib/components/datatable/datatable.component.mjs +13 -10
- package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +3 -3
- package/esm2022/lib/components/search-box/search-box.component.mjs +5 -3
- package/esm2022/lib/pages/booklet/booklet.component.mjs +24 -14
- package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +62 -55
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +3 -2
- package/fesm2022/rangertechnologies-ngnxt.mjs +105 -82
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/pages/builder/properties/common-fields.constants.d.ts +18 -0
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.252.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.250.tgz +0 -0
|
@@ -377,6 +377,7 @@ export class NxtSearchBox {
|
|
|
377
377
|
const defaultField = this.apiMeta.defaultField ||
|
|
378
378
|
(Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta.field);
|
|
379
379
|
const change = new ChangeWrapper();
|
|
380
|
+
change['isObject'] = this.apiMeta?.isObject;
|
|
380
381
|
change['fromQuestionId'] = this.id;
|
|
381
382
|
change['valueObj'] = event;
|
|
382
383
|
change['field'] = defaultField;
|
|
@@ -396,6 +397,7 @@ export class NxtSearchBox {
|
|
|
396
397
|
const defaultField = this.apiMeta.defaultField ||
|
|
397
398
|
(Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta.field);
|
|
398
399
|
const change = new ChangeWrapper();
|
|
400
|
+
change['isObject'] = this.apiMeta?.isObject;
|
|
399
401
|
change['fromQuestionId'] = this.id;
|
|
400
402
|
change['valueObj'] = this.valueObj;
|
|
401
403
|
change['field'] = defaultField;
|
|
@@ -431,7 +433,7 @@ export class NxtSearchBox {
|
|
|
431
433
|
this.clickItem(null);
|
|
432
434
|
}
|
|
433
435
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtSearchBox, deps: [{ token: i1.StorageService }, { token: i2.ChangeService }, { token: i3.DataService }, { token: i4.I18nService }, { token: i5.CountryService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
434
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtSearchBox, isStandalone: true, selector: "nxt-search-box", inputs: { placeHolderText: "placeHolderText", question: "question", apiMeta: "apiMeta", id: "id", readOnly: "readOnly", mode: "mode", from: "from" }, outputs: { searchValueChange: "searchValueChange" }, host: { listeners: { "document:click": "onDocumentClick($event)", "document:keydown.escape": "onEscapeKey($event)" } }, viewQueries: [{ propertyName: "searchWrapper", first: true, predicate: ["searchWrapper"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\" #searchWrapper>\n <nxt-input \n [type]=\"'list'\" \n [mode]=\"mode\" \n [from]=\"from\"\n [value]=\"mode === 'edit' ? filterName : viewFilterName\"\n [labelFont]=\"question.font\" \n [label]=\"question?.questionText\" \n [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\" \n [inputValueSize]=\"question.fontSize\" \n [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\" \n [showLabel]=\"question.style?.showLabel\" \n inputBorder=\"none\" \n svgHeight=\"20px\"\n svgWidth=\"20px\" \n [placeholder]=\"placeHolderText\" \n [required]=\"question.isOptional\" \n inputBgColor=\"#FAFAFA\"\n [inputId]=\"question.trackingId\" \n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\" \n (inputValue)=\"getSourceDataLocal($event); inputValue($event.value, $event.question)\" \n (onFocus)=\"onInputFocus()\"\n (onBlur)=\"onInputBlur()\"\n [showSuggestion]=\"showSuggestion\" \n ariaOwns=\"selectList\" \n ariaHasPopup=\"listbox\" \n [isLoading]=\"isLoading\" \n [question]=\"question\"\n (removeValueEmit)=\"removeValueEmit()\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\" *ngIf=\"showSuggestion\">\n <div *ngIf=\"finalResults().length > 0\" class=\"nxt-suggestions-container\">\n <div *ngFor=\"let item of finalResults(); trackBy: trackByFn\" \n (click)=\"clickItem(item)\" \n class=\"suggestion-item\" \n role=\"option\"\n tabindex=\"0\"\n (keydown.enter)=\"clickItem(item)\"\n (keydown.space)=\"clickItem(item)\">\n <div class=\"item-content\">\n <div class=\"item-details\">\n <div *ngIf=\"item.thumbnail\" class=\"thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" [alt]=\"item.name + ' avatar'\" />\n </div>\n <div class=\"item-text\">\n <!-- Primary text (first key) -->\n <ng-container *ngIf=\"getKeys(getValues(item, SearchItem)).length > 0\">\n <div class=\"item-name primary\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[getKeys(getValues(item, SearchItem))[0]], searchKeyWord)\">\n </div>\n </ng-container>\n \n <!-- Secondary text (remaining keys) -->\n <div class=\"item-secondary\" *ngIf=\"getKeys(getValues(item, SearchItem)).length > 1\">\n <ng-container *ngFor=\"let key of getKeys(getValues(item, SearchItem)); let i = index\">\n <ng-container *ngIf=\"i > 0\">\n <span class=\"secondary-text\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[key], searchKeyWord)\">\n </span>\n <span class=\"separator\" *ngIf=\"i < getKeys(getValues(item, SearchItem)).length - 1\"> | </span>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noResult && searchKeyWord\" class=\"no-results\">\n <div class=\"no-results-content\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n <p>No results found for \"{{searchKeyWord}}\"</p>\n </div>\n </div>\n </div>\n</div>", styles: [".search-wrapper{position:relative;width:100%}.suggestion-wrapper{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #e0e0e0;border-top:none;border-radius:0 0 4px 4px;box-shadow:0 2px 8px #0000001a;z-index:
|
|
436
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtSearchBox, isStandalone: true, selector: "nxt-search-box", inputs: { placeHolderText: "placeHolderText", question: "question", apiMeta: "apiMeta", id: "id", readOnly: "readOnly", mode: "mode", from: "from" }, outputs: { searchValueChange: "searchValueChange" }, host: { listeners: { "document:click": "onDocumentClick($event)", "document:keydown.escape": "onEscapeKey($event)" } }, viewQueries: [{ propertyName: "searchWrapper", first: true, predicate: ["searchWrapper"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\" #searchWrapper>\n <nxt-input \n [type]=\"'list'\" \n [mode]=\"mode\" \n [from]=\"from\"\n [value]=\"mode === 'edit' ? filterName : viewFilterName\"\n [labelFont]=\"question.font\" \n [label]=\"question?.questionText\" \n [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\" \n [inputValueSize]=\"question.fontSize\" \n [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\" \n [showLabel]=\"question.style?.showLabel\" \n inputBorder=\"none\" \n svgHeight=\"20px\"\n svgWidth=\"20px\" \n [placeholder]=\"placeHolderText\" \n [required]=\"question.isOptional\" \n inputBgColor=\"#FAFAFA\"\n [inputId]=\"question.trackingId\" \n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\" \n (inputValue)=\"getSourceDataLocal($event); inputValue($event.value, $event.question)\" \n (onFocus)=\"onInputFocus()\"\n (onBlur)=\"onInputBlur()\"\n [showSuggestion]=\"showSuggestion\" \n ariaOwns=\"selectList\" \n ariaHasPopup=\"listbox\" \n [isLoading]=\"isLoading\" \n [question]=\"question\"\n (removeValueEmit)=\"removeValueEmit()\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\" *ngIf=\"showSuggestion\">\n <div *ngIf=\"finalResults().length > 0\" class=\"nxt-suggestions-container\">\n <div *ngFor=\"let item of finalResults(); trackBy: trackByFn\" \n (click)=\"clickItem(item)\" \n class=\"suggestion-item\" \n role=\"option\"\n tabindex=\"0\"\n (keydown.enter)=\"clickItem(item)\"\n (keydown.space)=\"clickItem(item)\">\n <div class=\"item-content\">\n <div class=\"item-details\">\n <div *ngIf=\"item.thumbnail\" class=\"thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" [alt]=\"item.name + ' avatar'\" />\n </div>\n <div class=\"item-text\">\n <!-- Primary text (first key) -->\n <ng-container *ngIf=\"getKeys(getValues(item, SearchItem)).length > 0\">\n <div class=\"item-name primary\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[getKeys(getValues(item, SearchItem))[0]], searchKeyWord)\">\n </div>\n </ng-container>\n \n <!-- Secondary text (remaining keys) -->\n <div class=\"item-secondary\" *ngIf=\"getKeys(getValues(item, SearchItem)).length > 1\">\n <ng-container *ngFor=\"let key of getKeys(getValues(item, SearchItem)); let i = index\">\n <ng-container *ngIf=\"i > 0\">\n <span class=\"secondary-text\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[key], searchKeyWord)\">\n </span>\n <span class=\"separator\" *ngIf=\"i < getKeys(getValues(item, SearchItem)).length - 1\"> | </span>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noResult && searchKeyWord\" class=\"no-results\">\n <div class=\"no-results-content\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n <p>No results found for \"{{searchKeyWord}}\"</p>\n </div>\n </div>\n </div>\n</div>", styles: [".search-wrapper{position:relative;width:100%}.suggestion-wrapper{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #e0e0e0;border-top:none;border-radius:0 0 4px 4px;box-shadow:0 2px 8px #0000001a;z-index:1000;max-height:300px;overflow:hidden}.nxt-suggestions-container{max-height:300px;overflow-y:auto;min-width:100%}.suggestion-item{cursor:pointer;border-bottom:1px solid #f0f0f0;transition:background-color .2s ease;outline:none}.suggestion-item:hover,.suggestion-item:focus{background-color:#f5f5f5}.suggestion-item:last-child{border-bottom:none}.item-content{padding:5px}.item-details{display:flex;align-items:flex-start;gap:12px;text-align:left}.thumbnail-wrapper{flex-shrink:0}.thumbnail-wrapper img{width:40px;height:40px;border-radius:50%;object-fit:cover;border:1px solid #e0e0e0}.item-text{flex:1;min-width:0}.item-name{font-size:14px;font-weight:500;color:#333;line-height:1.4;margin-bottom:2px;word-wrap:break-word;overflow-wrap:break-word}.item-secondary{font-size:12px;color:#666;line-height:1.3;display:flex}.secondary-text{display:inline}.separator{color:#999;margin:0 3px}.no-results{padding:20px;text-align:center;color:#666}.no-results-content{display:flex;align-items:center;justify-content:center;gap:8px;flex-direction:column}.no-results-content svg{color:#d1d5db;margin-bottom:8px}.no-results-content p{color:#6b7280;margin:0;font-size:14px;font-weight:500}:host ::ng-deep .highlight{font-weight:700;display:inline}.nxt-suggestions-container::-webkit-scrollbar{width:6px}.nxt-suggestions-container::-webkit-scrollbar-track{background:#f1f1f1}.nxt-suggestions-container::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.nxt-suggestions-container::-webkit-scrollbar-thumb:hover{background:#a8a8a8}@media (max-width: 768px){.suggestion-wrapper,.nxt-suggestions-container{max-height:250px}.item-content{padding:10px 12px}.item-details{gap:8px}.thumbnail-wrapper img{width:32px;height:32px}.item-name{font-size:13px}.item-secondary{font-size:11px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "from", "hyperLink", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef", "removeValueEmit", "hyperlinkEmit"] }] });
|
|
435
437
|
}
|
|
436
438
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtSearchBox, decorators: [{
|
|
437
439
|
type: Component,
|
|
@@ -439,7 +441,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
439
441
|
CommonModule,
|
|
440
442
|
FormsModule,
|
|
441
443
|
NxtInput
|
|
442
|
-
], template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\" #searchWrapper>\n <nxt-input \n [type]=\"'list'\" \n [mode]=\"mode\" \n [from]=\"from\"\n [value]=\"mode === 'edit' ? filterName : viewFilterName\"\n [labelFont]=\"question.font\" \n [label]=\"question?.questionText\" \n [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\" \n [inputValueSize]=\"question.fontSize\" \n [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\" \n [showLabel]=\"question.style?.showLabel\" \n inputBorder=\"none\" \n svgHeight=\"20px\"\n svgWidth=\"20px\" \n [placeholder]=\"placeHolderText\" \n [required]=\"question.isOptional\" \n inputBgColor=\"#FAFAFA\"\n [inputId]=\"question.trackingId\" \n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\" \n (inputValue)=\"getSourceDataLocal($event); inputValue($event.value, $event.question)\" \n (onFocus)=\"onInputFocus()\"\n (onBlur)=\"onInputBlur()\"\n [showSuggestion]=\"showSuggestion\" \n ariaOwns=\"selectList\" \n ariaHasPopup=\"listbox\" \n [isLoading]=\"isLoading\" \n [question]=\"question\"\n (removeValueEmit)=\"removeValueEmit()\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\" *ngIf=\"showSuggestion\">\n <div *ngIf=\"finalResults().length > 0\" class=\"nxt-suggestions-container\">\n <div *ngFor=\"let item of finalResults(); trackBy: trackByFn\" \n (click)=\"clickItem(item)\" \n class=\"suggestion-item\" \n role=\"option\"\n tabindex=\"0\"\n (keydown.enter)=\"clickItem(item)\"\n (keydown.space)=\"clickItem(item)\">\n <div class=\"item-content\">\n <div class=\"item-details\">\n <div *ngIf=\"item.thumbnail\" class=\"thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" [alt]=\"item.name + ' avatar'\" />\n </div>\n <div class=\"item-text\">\n <!-- Primary text (first key) -->\n <ng-container *ngIf=\"getKeys(getValues(item, SearchItem)).length > 0\">\n <div class=\"item-name primary\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[getKeys(getValues(item, SearchItem))[0]], searchKeyWord)\">\n </div>\n </ng-container>\n \n <!-- Secondary text (remaining keys) -->\n <div class=\"item-secondary\" *ngIf=\"getKeys(getValues(item, SearchItem)).length > 1\">\n <ng-container *ngFor=\"let key of getKeys(getValues(item, SearchItem)); let i = index\">\n <ng-container *ngIf=\"i > 0\">\n <span class=\"secondary-text\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[key], searchKeyWord)\">\n </span>\n <span class=\"separator\" *ngIf=\"i < getKeys(getValues(item, SearchItem)).length - 1\"> | </span>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noResult && searchKeyWord\" class=\"no-results\">\n <div class=\"no-results-content\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n <p>No results found for \"{{searchKeyWord}}\"</p>\n </div>\n </div>\n </div>\n</div>", styles: [".search-wrapper{position:relative;width:100%}.suggestion-wrapper{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #e0e0e0;border-top:none;border-radius:0 0 4px 4px;box-shadow:0 2px 8px #0000001a;z-index:
|
|
444
|
+
], template: "<!-- VD 12Jun24 - readonly change -->\n<div class=\"search-wrapper\" #searchWrapper>\n <nxt-input \n [type]=\"'list'\" \n [mode]=\"mode\" \n [from]=\"from\"\n [value]=\"mode === 'edit' ? filterName : viewFilterName\"\n [labelFont]=\"question.font\" \n [label]=\"question?.questionText\" \n [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\" \n [inputValueSize]=\"question.fontSize\" \n [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\" \n [showLabel]=\"question.style?.showLabel\" \n inputBorder=\"none\" \n svgHeight=\"20px\"\n svgWidth=\"20px\" \n [placeholder]=\"placeHolderText\" \n [required]=\"question.isOptional\" \n inputBgColor=\"#FAFAFA\"\n [inputId]=\"question.trackingId\" \n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\" \n (inputValue)=\"getSourceDataLocal($event); inputValue($event.value, $event.question)\" \n (onFocus)=\"onInputFocus()\"\n (onBlur)=\"onInputBlur()\"\n [showSuggestion]=\"showSuggestion\" \n ariaOwns=\"selectList\" \n ariaHasPopup=\"listbox\" \n [isLoading]=\"isLoading\" \n [question]=\"question\"\n (removeValueEmit)=\"removeValueEmit()\">\n </nxt-input>\n\n <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\" *ngIf=\"showSuggestion\">\n <div *ngIf=\"finalResults().length > 0\" class=\"nxt-suggestions-container\">\n <div *ngFor=\"let item of finalResults(); trackBy: trackByFn\" \n (click)=\"clickItem(item)\" \n class=\"suggestion-item\" \n role=\"option\"\n tabindex=\"0\"\n (keydown.enter)=\"clickItem(item)\"\n (keydown.space)=\"clickItem(item)\">\n <div class=\"item-content\">\n <div class=\"item-details\">\n <div *ngIf=\"item.thumbnail\" class=\"thumbnail-wrapper\">\n <img [src]=\"item.thumbnail\" [alt]=\"item.name + ' avatar'\" />\n </div>\n <div class=\"item-text\">\n <!-- Primary text (first key) -->\n <ng-container *ngIf=\"getKeys(getValues(item, SearchItem)).length > 0\">\n <div class=\"item-name primary\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[getKeys(getValues(item, SearchItem))[0]], searchKeyWord)\">\n </div>\n </ng-container>\n \n <!-- Secondary text (remaining keys) -->\n <div class=\"item-secondary\" *ngIf=\"getKeys(getValues(item, SearchItem)).length > 1\">\n <ng-container *ngFor=\"let key of getKeys(getValues(item, SearchItem)); let i = index\">\n <ng-container *ngIf=\"i > 0\">\n <span class=\"secondary-text\" \n [innerHTML]=\"highlightText(getValues(item, SearchItem)[key], searchKeyWord)\">\n </span>\n <span class=\"separator\" *ngIf=\"i < getKeys(getValues(item, SearchItem)).length - 1\"> | </span>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noResult && searchKeyWord\" class=\"no-results\">\n <div class=\"no-results-content\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n <p>No results found for \"{{searchKeyWord}}\"</p>\n </div>\n </div>\n </div>\n</div>", styles: [".search-wrapper{position:relative;width:100%}.suggestion-wrapper{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #e0e0e0;border-top:none;border-radius:0 0 4px 4px;box-shadow:0 2px 8px #0000001a;z-index:1000;max-height:300px;overflow:hidden}.nxt-suggestions-container{max-height:300px;overflow-y:auto;min-width:100%}.suggestion-item{cursor:pointer;border-bottom:1px solid #f0f0f0;transition:background-color .2s ease;outline:none}.suggestion-item:hover,.suggestion-item:focus{background-color:#f5f5f5}.suggestion-item:last-child{border-bottom:none}.item-content{padding:5px}.item-details{display:flex;align-items:flex-start;gap:12px;text-align:left}.thumbnail-wrapper{flex-shrink:0}.thumbnail-wrapper img{width:40px;height:40px;border-radius:50%;object-fit:cover;border:1px solid #e0e0e0}.item-text{flex:1;min-width:0}.item-name{font-size:14px;font-weight:500;color:#333;line-height:1.4;margin-bottom:2px;word-wrap:break-word;overflow-wrap:break-word}.item-secondary{font-size:12px;color:#666;line-height:1.3;display:flex}.secondary-text{display:inline}.separator{color:#999;margin:0 3px}.no-results{padding:20px;text-align:center;color:#666}.no-results-content{display:flex;align-items:center;justify-content:center;gap:8px;flex-direction:column}.no-results-content svg{color:#d1d5db;margin-bottom:8px}.no-results-content p{color:#6b7280;margin:0;font-size:14px;font-weight:500}:host ::ng-deep .highlight{font-weight:700;display:inline}.nxt-suggestions-container::-webkit-scrollbar{width:6px}.nxt-suggestions-container::-webkit-scrollbar-track{background:#f1f1f1}.nxt-suggestions-container::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.nxt-suggestions-container::-webkit-scrollbar-thumb:hover{background:#a8a8a8}@media (max-width: 768px){.suggestion-wrapper,.nxt-suggestions-container{max-height:250px}.item-content{padding:10px 12px}.item-details{gap:8px}.thumbnail-wrapper img{width:32px;height:32px}.item-name{font-size:13px}.item-secondary{font-size:11px}}\n"] }]
|
|
443
445
|
}], ctorParameters: () => [{ type: i1.StorageService }, { type: i2.ChangeService }, { type: i3.DataService }, { type: i4.I18nService }, { type: i5.CountryService }, { type: i0.ElementRef }], propDecorators: { placeHolderText: [{
|
|
444
446
|
type: Input
|
|
445
447
|
}], question: [{
|
|
@@ -466,4 +468,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
466
468
|
type: HostListener,
|
|
467
469
|
args: ['document:keydown.escape', ['$event']]
|
|
468
470
|
}] } });
|
|
469
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBNkIsTUFBTSxFQUFtQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFak0sT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBZTVGLE1BQU0sT0FBTyxZQUFZO0lBb0NIO0lBQXVDO0lBQXFDO0lBQWlDO0lBQWtDO0lBQXdDO0lBbkNsTSxlQUFlLEdBQVcsRUFBRSxDQUFDO0lBQzdCLFFBQVEsQ0FBTTtJQUNkLE9BQU8sQ0FBTTtJQUNiLEVBQUUsR0FBVyxFQUFFLENBQUM7SUFDaEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixJQUFJLEdBQThCLE1BQU0sQ0FBQztJQUN6QyxJQUFJLENBQU07SUFFVCxpQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUMzQixhQUFhLENBQWM7SUFFekUsVUFBVSxDQUFNO0lBQ1QsWUFBWSxHQUEwQixNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsYUFBYSxHQUFXLEVBQUUsQ0FBQztJQUMzQixTQUFTLENBQU07SUFDZixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLGNBQWMsR0FBVyxFQUFFLENBQUM7SUFDNUIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQzVCLFFBQVEsQ0FBTTtJQUNkLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLFVBQVUsR0FBRSxFQUFFLENBQUE7SUFFYixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUMvQixhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUM5QyxZQUFZLENBQWU7SUFFM0IsZ0RBQWdEO0lBQ2hELFNBQVMsR0FBeUIsQ0FBQyxLQUFhLEVBQUUsSUFBUyxFQUFFLEVBQUU7UUFDN0QsT0FBTyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQztJQUVGLFlBQW9CLGNBQThCLEVBQVMsYUFBNEIsRUFBUyxXQUF3QixFQUFTLFdBQXdCLEVBQVUsY0FBOEIsRUFBVSxVQUFzQjtRQUE3TSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQy9OLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUMsQ0FBQztZQUMzRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFBO1FBQ3hDLENBQUM7UUFDRCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGFBQWE7YUFDZixJQUFJLENBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QjthQUNBLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNuQixJQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDO2dCQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUMsQ0FBQztZQUMzRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDdEMsQ0FBQzthQUFNLElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUE7WUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFBO1lBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUE7UUFDNUMsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksYUFBYSxHQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO1lBQ2hELDRCQUE0QjtZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUMvRCxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNkLElBQUcsV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUM1QixJQUFHLFdBQVcsQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksQ0FBRSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsS0FBSyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO3dCQUM3UCxJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEtBQUssYUFBYSxDQUFDLFVBQVUsRUFBQyxDQUFDOzRCQUNuSyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBQyxXQUFXLENBQUMsY0FBYyxFQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTt3QkFDdkcsQ0FBQztvQkFDSCxDQUFDO29CQUNELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDL0QsQ0FBQztZQUNILENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUMsQ0FBQztZQUN0QixnSEFBZ0g7WUFDaEgseUNBQXlDO1lBQ3pDLFdBQVc7WUFDWCwyQ0FBMkM7WUFDM0MsSUFBSTtRQUNOLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELDZDQUE2QztJQUU3QyxlQUFlLENBQUMsS0FBWTtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELHlDQUF5QztJQUV6QyxXQUFXLENBQUMsS0FBb0I7UUFDOUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQ2xHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QiwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QiwwQkFBMEI7UUFDNUIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCwyREFBMkQ7UUFDM0QsZ0RBQWdEO0lBQ2xELENBQUM7SUFFRCxTQUFTO1FBQ1Asc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN4SSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBRXpDLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztRQUVqQyxpREFBaUQ7UUFDakQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUM7WUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsbURBQW1EO1lBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdkMsQ0FBQzthQUFNLElBQUksYUFBYSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlCLHlFQUF5RTtZQUN6RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsT0FBZTtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRTFCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQWU7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsSUFBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3pDLG1DQUFtQztZQUNuQyxJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLENBQUM7Z0JBQy9CLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDakUsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO2dCQUNqSCw0QkFBNEI7Z0JBQzVCLE1BQU0sV0FBVyxHQUFHLE1BQU07cUJBQ3ZCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDOUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLDZDQUE2QztnQkFDN0MsSUFBRyxXQUFXLElBQUksV0FBVyxLQUFLLEVBQUUsRUFBQyxDQUFDO29CQUNwQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUN4QyxZQUFZLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDcEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLFlBQVksSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDO29CQUNwQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUN6RCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO29CQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO29CQUN6QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUU5QixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO29CQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO29CQUN6QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUU5QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO2dCQUVwRixNQUFNLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztnQkFFdEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDbkMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMvQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUMxQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNqRSxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFL0MsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDOUYsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7aUJBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUN2QixJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzVCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE9BQWU7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxXQUFnQixFQUFFLE9BQWU7UUFDNUQsSUFBSSxRQUFRLENBQUM7UUFFYixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLENBQUM7YUFBTSxDQUFDO1lBQ04sUUFBUSxHQUFHLFdBQVcsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLGtDQUFrQztZQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLENBQUMsaUNBQWlDO1FBQy9ELENBQUM7YUFBTSxDQUFDO1lBQ04sc0NBQXNDO1lBQ3RDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyRixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xGLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyw2Q0FBNkM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsR0FBUSxFQUFFLElBQVk7UUFDM0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUU3QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUVsQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUN2RCxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFFRCxPQUFPLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLFNBQVM7WUFDOUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUU7WUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxHQUFRLEVBQUUsT0FBaUI7UUFDOUQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVoQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTVCLEtBQUssTUFBTSxNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0MsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTSxTQUFTLENBQUMsT0FBWSxFQUFFLE9BQVk7UUFDekMsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFFeEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpFLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRXBCLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQztZQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWpDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxXQUFXO29CQUFFLE1BQU07Z0JBRXhCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3BELElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3JELENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBUTtRQUNkLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFVO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUN2QyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7YUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWYsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRXBCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtZQUM1QyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2RixNQUFNLE1BQU0sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUMzQixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsWUFBWSxDQUFDO1FBRS9CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXRCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixLQUFLLEVBQUUsTUFBTTtTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVSxFQUFFLElBQVM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBO1FBQzdFLElBQUksQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFdEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZO1lBQzVDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZGLE1BQU0sTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbkMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsWUFBWSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBRXhELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUV0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQzFCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLE1BQU07U0FDZCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVksRUFBRSxVQUFrQjtRQUM1QyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUU1QywwQkFBMEI7UUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFbEYsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLGFBQWEsQ0FBQztRQUU3QyxrQ0FBa0M7UUFDbEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUM1QyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUQsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBWTtRQUMvQixPQUFPLElBQUk7YUFDUixPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQzthQUN0QixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQzthQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQzthQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQzthQUN2QixPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN0QixDQUFDO3dHQXBkVSxZQUFZOzRGQUFaLFlBQVksZ2lCQ3ZCekIsc29IQW9GTSw2Z0VEcEVGLFlBQVksK1BBQ1osV0FBVywrQkFDWCxRQUFROzs0RkFLQyxZQUFZO2tCQVh4QixTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsUUFBUTtxQkFDVDt5TkFLUSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUksaUJBQWlCO3NCQUExQixNQUFNO2dCQUN1QyxhQUFhO3NCQUExRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBaUc1QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUzFDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFNpbXBsZUNoYW5nZXMsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwsIFRyYWNrQnlGdW5jdGlvbiwgSG9zdExpc3RlbmVyfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9jaGFuZ2VXcmFwcGVyXCI7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBOeHRJbnB1dCB9IGZyb20gXCIuLi9ueHQtaW5wdXQvbnh0LWlucHV0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ291bnRyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY291bnRyeS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnh0LXNlYXJjaC1ib3gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE54dElucHV0XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWJveC5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTnh0U2VhcmNoQm94IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHBsYWNlSG9sZGVyVGV4dDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIGFwaU1ldGE6IGFueTtcbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2RlOiAndmlldycgfCAnZWRpdCcgfCAncHJpbnQnID0gJ2VkaXQnO1xuICBASW5wdXQoKSBmcm9tOiBhbnk7XG4gIFxuICBAT3V0cHV0KCkgc2VhcmNoVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFdyYXBwZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZWFyY2hXcmFwcGVyITogRWxlbWVudFJlZjtcblxuICBTZWFyY2hJdGVtOiBhbnk7XG4gIHB1YmxpYyBmaW5hbFJlc3VsdHM6IFdyaXRhYmxlU2lnbmFsPGFueVtdPiA9IHNpZ25hbChbXSk7XG4gIHB1YmxpYyBzZWFyY2hLZXlXb3JkOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIG5ld1Jlc3VsdDogYW55O1xuICBwdWJsaWMgc2hvd1Jlc3VsdCA9IGZhbHNlO1xuICBwdWJsaWMgbm9SZXN1bHQgPSBmYWxzZTtcbiAgcHVibGljIHNob3dTdWdnZXN0aW9uID0gZmFsc2U7XG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIHZpZXdGaWx0ZXJOYW1lOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGlzU2luZ2xlRmllbGRDaGFuZ2UgPSBmYWxzZTtcbiAgcHVibGljIHZhbHVlT2JqOiBhbnk7XG4gIHB1YmxpYyBpbnB1dEZvY3VzZWQgPSBmYWxzZTtcbiAgcHVibGljIGxhc3RTZWFyY2hMZW5ndGggPSAwO1xuICBwdWJsaWMgZmlsdGVyTmFtZSA9JydcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvLyBUcmFja0J5IGZ1bmN0aW9uIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAgdHJhY2tCeUZuOiBUcmFja0J5RnVuY3Rpb248YW55PiA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IHtcbiAgICByZXR1cm4gaXRlbS5pZCB8fCBpdGVtLm5hbWUgfHwgaW5kZXg7XG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UscHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlLCBwcml2YXRlIGNvdW50cnlTZXJ2aWNlOiBDb3VudHJ5U2VydmljZSwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgaWYodGhpcy5xdWVzdGlvbj8uaW5wdXQgJiYgdHlwZW9mIHRoaXMucXVlc3Rpb24/LmlucHV0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLnF1ZXN0aW9uPy5pbnB1dCkpe1xuICAgICAgdGhpcy5jbGlja0l0ZW0odGhpcy5xdWVzdGlvbj8uaW5wdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyTmFtZSA9IHRoaXMucXVlc3Rpb24/LmlucHV0XG4gICAgfSAgICBcbiAgICAvLyBTZXR1cCBkZWJvdW5jZWQgc2VhcmNoXG4gICAgdGhpcy5zZWFyY2hTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShrZXl3b3JkID0+IHtcbiAgICAgICAgaWYodGhpcy5sYXN0U2VhcmNoTGVuZ3RoID4gMikgdGhpcy5wZXJmb3JtU2VhcmNoKGtleXdvcmQpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZih0aGlzLnF1ZXN0aW9uPy5pbnB1dCAmJiB0eXBlb2YgdGhpcy5xdWVzdGlvbj8uaW5wdXQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24/LmlucHV0KSl7XG4gICAgICB0aGlzLmNsaWNrSXRlbSh0aGlzLnF1ZXN0aW9uPy5pbnB1dClcbiAgICB9IGVsc2UgaWYoQXJyYXkuaXNBcnJheSh0aGlzLnF1ZXN0aW9uPy5pbnB1dCkpe1xuICAgICAgdGhpcy5maWx0ZXJOYW1lID0gJydcbiAgICAgIHRoaXMudmlld0ZpbHRlck5hbWUgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlck5hbWUgPSB0aGlzLnF1ZXN0aW9uPy5pbnB1dFxuICAgICAgdGhpcy52aWV3RmlsdGVyTmFtZSA9IHRoaXMucXVlc3Rpb24/LmlucHV0XG4gICAgfVxuICAgIHRoaXMucGFyc2VBcGlNZXRhKCk7XG4gICAgaWYodGhpcy5xdWVzdGlvbj8uc3ViVGV4dCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBkZXBlbmRlbmN5T2JqOiBhbnkgPSB0aGlzLnF1ZXN0aW9uPy5zdWJUZXh0O1xuICAgICAgLy8gU3Vic2NyaWJlIGZvciB0aGUgY2hhbmdlc1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xuICAgICAgICAgIGlmKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYoY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgJiYgY2hhbmdlVmFsdWUudmFsdWVPYmogIT09IHVuZGVmaW5lZCAmJiAoIEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkKT8gZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkLmluY2x1ZGVzKGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkKSA6IGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09PSBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpKSB7XG4gICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeU9iai5xdWVyeVZhbHVlKT8gZGVwZW5kZW5jeU9iai5xdWVyeVZhbHVlLmluY2x1ZGVzKGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKSA6IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkID09PSBkZXBlbmRlbmN5T2JqLnF1ZXJ5VmFsdWUpe1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UucXVlcnlWYWx1ZVN0b3JlKHRoaXMucXVlc3Rpb24uaWQsY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQsY2hhbmdlVmFsdWUudmFsdWVPYmopXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmljZS5jb25maXJtQ2hhbmdlKGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmKGNoYW5nZXNbJ3F1ZXN0aW9uJ10pe1xuICAgICAgLy8gaWYodGhpcy5xdWVzdGlvbj8uaW5wdXQgJiYgdHlwZW9mIHRoaXMucXVlc3Rpb24/LmlucHV0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLnF1ZXN0aW9uPy5pbnB1dCkpe1xuICAgICAgLy8gICB0aGlzLmNsaWNrSXRlbSh0aGlzLnF1ZXN0aW9uPy5pbnB1dClcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIHRoaXMuZmlsdGVyTmFtZSA9IHRoaXMucXVlc3Rpb24/LmlucHV0XG4gICAgICAvLyB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydtb2RlJ10pIHtcbiAgICAgIHRoaXMubW9kZSA9IGNoYW5nZXNbJ21vZGUnXS5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydhcGlNZXRhJ10gJiYgdGhpcy5hcGlNZXRhKSB7XG4gICAgICB0aGlzLnBhcnNlQXBpTWV0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBjbGlja3Mgb3V0c2lkZSB0aGUgc2VhcmNoIGNvbXBvbmVudFxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgZXNjYXBlIGtleSB0byBjbG9zZSBzdWdnZXN0aW9uc1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uRXNjYXBlS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VBcGlNZXRhKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFwaU1ldGEpIHtcbiAgICAgIHRoaXMuYXBpTWV0YSA9IHR5cGVvZiB0aGlzLmFwaU1ldGEgPT09ICdvYmplY3QnID8gdGhpcy5hcGlNZXRhIDogSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEgfHwgJ3t9Jyk7XG4gICAgICB0aGlzLlNlYXJjaEl0ZW0gPSB0aGlzLmFwaU1ldGEuZmllbGQgfHwgW107XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldENvbXBvbmVudFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7XG4gICAgdGhpcy5zZWFyY2hLZXlXb3JkID0gJyc7XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5sYXN0U2VhcmNoTGVuZ3RoID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZVN1Z2dlc3Rpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICB9XG5cbiAgb25JbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gdHJ1ZTtcbiAgICAvLyBUcmlnZ2VyIGEgc2VhcmNoIHdpdGggYW4gZW1wdHkga2V5d29yZCB0byBzaG93IGFsbCBkYXRhXG4gICAgaWYgKCF0aGlzLnNlYXJjaEtleVdvcmQpIHtcbiAgICAgIC8vIHRoaXMucGVyZm9ybVNlYXJjaCgnJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbmFsUmVzdWx0cygpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRCbHVyKCk6IHZvaWQge1xuICAgIC8vIERvbid0IGltbWVkaWF0ZWx5IGhpZGUgc3VnZ2VzdGlvbnMgdG8gYWxsb3cgZm9yIGNsaWNraW5nXG4gICAgLy8gVGhlIGRvY3VtZW50IGNsaWNrIGhhbmRsZXIgd2lsbCBoYW5kbGUgaGlkaW5nXG4gIH1cblxuICBjbGVhckxpc3QoKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIHRoZSBzZXRUaW1lb3V0IGRlbGF5IHRoYXQgd2FzIGNhdXNpbmcgaXNzdWVzXG4gICAgdGhpcy5oaWRlU3VnZ2VzdGlvbnMoKTtcbiAgfVxuXG4gIGdldFNvdXJjZURhdGFMb2NhbChldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKCFldmVudD8udmFsdWU/LnZhbHVlT2JqKSB7XG4gICAgICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2hWYWx1ZSA9ICBldmVudC52YWx1ZT8udmFsdWVPYmo/LmluY2x1ZGVzKCd8JykgPyBldmVudC52YWx1ZT8udmFsdWVPYmo/LnNwbGl0KCd8JylbMF0udHJpbSgpIDogZXZlbnQudmFsdWU/LnZhbHVlT2JqPy50cmltKCk7XG4gICAgY29uc3QgY3VycmVudExlbmd0aCA9IHNlYXJjaFZhbHVlLmxlbmd0aDtcbiAgICBcbiAgICAvLyBBbHdheXMgdXBkYXRlIHRoZSBzZWFyY2gga2V5d29yZFxuICAgIHRoaXMuc2VhcmNoS2V5V29yZCA9IHNlYXJjaFZhbHVlO1xuICAgIFxuICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB1c2VyIHR5cGVzIDMrIGNoYXJhY3RlcnNcbiAgICBpZiAoY3VycmVudExlbmd0aCA+IDIgJiYgIXRoaXMuaXNTaW5nbGVGaWVsZENoYW5nZSkge1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9ICFldmVudC5xdWVzdGlvbj8uc2luZ2xlRmllbGRDaGFuZ2U7XG4gICAgICB0aGlzLnNob3dSZXN1bHQgPSBmYWxzZTtcbiAgICAgIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbiAgICAgIC8vIEFsd2F5cyBwZXJmb3JtIHNlYXJjaCB3aGVuIHdlIGhhdmUgMysgY2hhcmFjdGVyc1xuICAgICAgdGhpcy5sYXN0U2VhcmNoTGVuZ3RoID0gY3VycmVudExlbmd0aDtcbiAgICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHNlYXJjaFZhbHVlKTtcbiAgICAgIFxuICAgIH0gZWxzZSBpZiAoY3VycmVudExlbmd0aCA8PSAyKSB7XG4gICAgICAvLyBXaGVuIGxlbmd0aCBpcyAyIG9yIGxlc3MsIGhpZGUgc3VnZ2VzdGlvbnMgYnV0IGtlZXAgdGhlIHNlYXJjaCBrZXl3b3JkXG4gICAgICB0aGlzLmlzU2luZ2xlRmllbGRDaGFuZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcbiAgICAgIHRoaXMubGFzdFNlYXJjaExlbmd0aCA9IGN1cnJlbnRMZW5ndGg7XG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dChzZWFyY2hWYWx1ZSk7XG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQoW10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGVyZm9ybVNlYXJjaChrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXBpTWV0YSkgcmV0dXJuO1xuXG4gICAgdGhpcy5wYXJzZUFwaU1ldGEoKTtcbiAgICBcbiAgICBpZiAoIXRoaXMuYXBpTWV0YS5pc1N0YXRpY0RhdGEpIHtcbiAgICAgIHRoaXMuc2VhcmNoRnJvbUFwaShrZXl3b3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hGcm9tU3RhdGljRGF0YShrZXl3b3JkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaEZyb21BcGkoa2V5d29yZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7XG4gICAgaWYoIXRoaXMuYXBpTWV0YS5lbmRwb2ludCAmJiBBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24/LmlucHV0KSApe1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMucHJvY2Vzc1NlYXJjaFJlc3VsdHModGhpcy5xdWVzdGlvbj8uaW5wdXQsIGtleXdvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZmluYWxHZXRDYWxsID0gdGhpcy5hcGlNZXRhLmVuZHBvaW50O1xuICAgICAgLy8gU0tTMThKVUwyNSBxdWVyeSBwYXJhbXMgY3JlYXRpb25cbiAgICAgIGlmKHRoaXMuYXBpTWV0YT8ucXVlcnlQYXJhbWV0ZXIpe1xuICAgICAgICBjb25zdCBpc0ZpZWxkQXJyYXkgPSBBcnJheS5pc0FycmF5KHRoaXMuYXBpTWV0YT8ucXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBpc0ZpZWxkQXJyYXkgPyB0aGlzLmFwaU1ldGEucXVlcnlQYXJhbWV0ZXIgOiBbdGhpcy5hcGlNZXRhLnF1ZXJ5UGFyYW1ldGVyXTsgLy8gYWx3YXlzIGFuIGFycmF5IG5vd1xuICAgICAgICAvLyBCdWlsZCBxdWVyeSBwYXJhbXMgc3RyaW5nXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gZmllbGRzXG4gICAgICAgICAgLm1hcChmaWVsZCA9PiBgJHtmaWVsZH09JHt0aGlzLnNlYXJjaEtleVdvcmR9YClcbiAgICAgICAgICAuam9pbignJicpO1xuICAgICAgICAvLyBDaGVjayBpZiBlbmRwb2ludCBhbHJlYWR5IGhhcyBxdWVyeSBwYXJhbXNcbiAgICAgICAgaWYocXVlcnlQYXJhbXMgJiYgcXVlcnlQYXJhbXMgIT09ICcnKXtcbiAgICAgICAgICBpZiAodGhpcy5hcGlNZXRhLmVuZHBvaW50LmluY2x1ZGVzKCc/JykpIHtcbiAgICAgICAgICAgIGZpbmFsR2V0Q2FsbCArPSBgJiR7cXVlcnlQYXJhbXN9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmluYWxHZXRDYWxsICs9IGA/JHtxdWVyeVBhcmFtc31gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYXBpTWV0YT8ucXVlcnlGaWVsZCAmJiB0aGlzLmFwaU1ldGE/LnF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgY29uc3QgcXVlcnlGaWVsZHMgPSBBcnJheS5pc0FycmF5KHRoaXMuYXBpTWV0YS5xdWVyeUZpZWxkKVxuICAgICAgICAgID8gdGhpcy5hcGlNZXRhLnF1ZXJ5RmllbGRcbiAgICAgICAgICA6IFt0aGlzLmFwaU1ldGEucXVlcnlGaWVsZF07XG4gICAgICBcbiAgICAgICAgY29uc3QgcXVlcnlWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHRoaXMuYXBpTWV0YS5xdWVyeVZhbHVlKVxuICAgICAgICAgID8gdGhpcy5hcGlNZXRhLnF1ZXJ5VmFsdWVcbiAgICAgICAgICA6IFt0aGlzLmFwaU1ldGEucXVlcnlWYWx1ZV07XG4gICAgICBcbiAgICAgICAgY29uc3Qgc3RvcmVkID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRRdWVyeVZhbHVlKHRoaXMucXVlc3Rpb24uaWQpOyAvLyBzaW5nbGUgb2JqZWN0XG4gICAgICBcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXNBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgICAgIFxuICAgICAgICBxdWVyeUZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZUtleSA9IHF1ZXJ5VmFsdWVzW2luZGV4XSA/PyBxdWVyeVZhbHVlc1swXTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHN0b3JlZFt2YWx1ZUtleV07XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zQXJyYXkucHVzaChgJHtmaWVsZH09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICBcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtc0FycmF5LmpvaW4oJyYnKTtcbiAgICAgIFxuICAgICAgICBpZiAocXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICBmaW5hbEdldENhbGwgKz0gdGhpcy5hcGlNZXRhLmVuZHBvaW50LmluY2x1ZGVzKCc/JykgPyBgJiR7cXVlcnlQYXJhbXN9YCA6IGA/JHtxdWVyeVBhcmFtc31gO1xuICAgICAgICB9XG4gICAgICB9ICAgICAgXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaVJlc3BvbnNlKGZpbmFsR2V0Q2FsbClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoYXBpUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1NlYXJjaFJlc3VsdHMoYXBpUmVzcG9uc2UsIGtleXdvcmQpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm5vUmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQoW10pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaEZyb21TdGF0aWNEYXRhKGtleXdvcmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5jb3VudHJ5U2VydmljZS5nZXRDb3VudHJ5RGF0YSh0aGlzLmFwaU1ldGEuZmllbGQpO1xuICAgIHRoaXMucHJvY2Vzc1NlYXJjaFJlc3VsdHMocmVzcG9uc2UsIGtleXdvcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU2VhcmNoUmVzdWx0cyhhcGlSZXNwb25zZTogYW55LCBrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gIFxuICAgIGlmICh0aGlzLmFwaU1ldGEudmFyaWFibGUpIHtcbiAgICAgIHJlc3BvbnNlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgdGhpcy5hcGlNZXRhLnZhcmlhYmxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzcG9uc2UgPSBhcGlSZXNwb25zZTtcbiAgICB9XG4gIFxuICAgIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZSkpIHtcbiAgICAgIHRoaXMubm9SZXN1bHQgPSB0cnVlO1xuICAgICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIFxuICAgIGlmICgha2V5d29yZCkge1xuICAgICAgLy8gSWYgbm8ga2V5d29yZCwgc2hvdyBhbGwgcmVzdWx0c1xuICAgICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KHJlc3BvbnNlKTtcbiAgICAgIHRoaXMubm9SZXN1bHQgPSByZXNwb25zZS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gdHJ1ZTsgLy8gRW5zdXJlIHN1Z2dlc3Rpb25zIGFyZSB2aXNpYmxlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZpbHRlciByZXN1bHRzIGJhc2VkIG9uIHRoZSBrZXl3b3JkXG4gICAgICBjb25zdCBzZWFyY2hUZXJtcyA9IGtleXdvcmQudG9Mb3dlckNhc2UoKS5zcGxpdChcIiBcIikuZmlsdGVyKHRlcm0gPT4gdGVybS5sZW5ndGggPiAwKTtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSByZXNwb25zZS5maWx0ZXIob2JqID0+IHtcbiAgICAgICAgY29uc3QgY29tYmluZWRWYWx1ZXMgPSB0aGlzLmdldENvbWJpbmVkVmFsdWVzRnJvbUNvbHVtbnMob2JqLCB0aGlzLmFwaU1ldGEuZmllbGQpO1xuICAgICAgICByZXR1cm4gc2VhcmNoVGVybXMuZXZlcnkodGVybSA9PiBjb21iaW5lZFZhbHVlcy5pbmNsdWRlcyh0ZXJtKSk7XG4gICAgICB9KTtcbiAgXG4gICAgICB0aGlzLm5vUmVzdWx0ID0gcmVzdWx0cy5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQocmVzdWx0cyk7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gdHJ1ZTsgLy8gU2hvdyBzdWdnZXN0aW9ucyBvbmx5IGlmIHRoZXJlIGFyZSByZXN1bHRzXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW9iaiB8fCAhcGF0aCkgcmV0dXJuICcnO1xuICAgIFxuICAgIGNvbnN0IHByb2Nlc3NlZFBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWyhcXGQrKVxcXS9nLCAnLiQxJyk7XG4gICAgY29uc3QgcGFydHMgPSBwcm9jZXNzZWRQYXRoLnNwbGl0KCcuJyk7XG4gICAgbGV0IGN1cnJlbnQgPSBvYmo7XG5cbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgIGlmICghY3VycmVudCB8fCB0eXBlb2YgY3VycmVudCAhPT0gJ29iamVjdCcpIHJldHVybiAnJztcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhcnRdO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQgIT09IHVuZGVmaW5lZCBcbiAgICAgID8gU3RyaW5nKGN1cnJlbnQpLnRvTG93ZXJDYXNlKCkudHJpbSgpIFxuICAgICAgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tYmluZWRWYWx1ZXNGcm9tQ29sdW1ucyhvYmo6IGFueSwgY29sdW1uczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGlmICghb2JqIHx8ICFjb2x1bW5zKSByZXR1cm4gJyc7XG4gICAgXG4gICAgY29uc3QgY29sdW1uQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbHVtbnMpID8gY29sdW1ucyA6IFtjb2x1bW5zXTtcbiAgICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5BcnJheSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9iaiwgY29sdW1uKTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcy5qb2luKCcgJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFsdWVzKGVsZW1lbnQ6IGFueSwgY29sdW1uczogYW55KTogYW55IHtcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICghZWxlbWVudCB8fCAhY29sdW1ucykgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNvbnN0IGNvbHVtbkFycmF5ID0gQXJyYXkuaXNBcnJheShjb2x1bW5zKSA/IGNvbHVtbnMgOiBbY29sdW1uc107XG4gICAgXG4gICAgY29sdW1uQXJyYXkuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoIWNvbHVtbikgcmV0dXJuO1xuICAgICAgXG4gICAgICBsZXQgdGVtcEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgY29uc3QgZmllbGRzID0gY29sdW1uLnNwbGl0KCcuJyk7XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgIGlmICghdGVtcEVsZW1lbnQpIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgc3BsaXRGaWVsZHMgPSBmaWVsZC5zcGxpdCgnWycpO1xuICAgICAgICBpZiAoc3BsaXRGaWVsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGVtcEVsZW1lbnQgPSB0ZW1wRWxlbWVudFtmaWVsZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaW5kZXhNYXRjaCA9IHNwbGl0RmllbGRzWzFdPy5tYXRjaCgvKFxcZCspXFxdLyk7XG4gICAgICAgICAgaWYgKGluZGV4TWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyKGluZGV4TWF0Y2hbMV0pO1xuICAgICAgICAgICAgdGVtcEVsZW1lbnQgPSB0ZW1wRWxlbWVudFtzcGxpdEZpZWxkc1swXV0/LltpbmRleF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJlc3VsdFtjb2x1bW5dID0gdGVtcEVsZW1lbnQgfHwgJyc7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0S2V5cyhvYmo6IGFueSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gb2JqID8gT2JqZWN0LmtleXMob2JqKSA6IFtdO1xuICB9XG5cbiAgcHVibGljIGNsaWNrSXRlbShldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFwaU1ldGEpIHJldHVybjtcbiAgXG4gICAgdGhpcy5wYXJzZUFwaU1ldGEoKTtcbiAgICBcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhbHVlcyhldmVudCwgdGhpcy5TZWFyY2hJdGVtKTtcbiAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBPYmplY3QudmFsdWVzKHZhbHVlcylcbiAgICAgIC5maWx0ZXIodmFsID0+IHZhbClcbiAgICAgIC5qb2luKCcgfCAnKTtcbiAgICBcbiAgICBpZiAodGhpcy5tb2RlICE9PSAnZWRpdCcpIHtcbiAgICAgIHRoaXMudmlld0ZpbHRlck5hbWUgPSBkaXNwbGF5VmFsdWU7XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyTmFtZSA9IGRpc3BsYXlWYWx1ZTtcbiAgICB0aGlzLm5nT25DaGFuZ2VzKHt9KVxuICBcbiAgICBjb25zdCBkZWZhdWx0RmllbGQgPSB0aGlzLmFwaU1ldGEuZGVmYXVsdEZpZWxkIHx8IFxuICAgICAgKEFycmF5LmlzQXJyYXkodGhpcy5hcGlNZXRhPy5maWVsZCkgPyB0aGlzLmFwaU1ldGE/LmZpZWxkPy5bMF0gOiB0aGlzLmFwaU1ldGEuZmllbGQpO1xuICAgIFxuICAgIGNvbnN0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7XG4gICAgY2hhbmdlWydmcm9tUXVlc3Rpb25JZCddID0gdGhpcy5pZDtcbiAgICBjaGFuZ2VbJ3ZhbHVlT2JqJ10gPSBldmVudDtcbiAgICBjaGFuZ2VbJ2ZpZWxkJ10gPSBkZWZhdWx0RmllbGQ7XG4gICAgXG4gICAgdGhpcy52YWx1ZU9iaiA9IGV2ZW50O1xuICAgIFxuICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zKCk7XG4gICAgXG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgdmFsdWU6IGNoYW5nZVxuICAgIH0pO1xuICB9XG5cbiAgaW5wdXRWYWx1ZShldmVudDogYW55LCBxdWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck5hbWUgPSBldmVudD8udmFsdWVPYmogPyBldmVudD8udmFsdWVPYmo/LnRyaW0oKSA6IHRoaXMuZmlsdGVyTmFtZVxuICAgIGlmICghcXVlcz8uc2luZ2xlRmllbGRDaGFuZ2UgfHwgIXRoaXMuYXBpTWV0YSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1NpbmdsZUZpZWxkQ2hhbmdlID0gdHJ1ZTtcbiAgICB0aGlzLnBhcnNlQXBpTWV0YSgpO1xuXG4gICAgY29uc3QgZGVmYXVsdEZpZWxkID0gdGhpcy5hcGlNZXRhLmRlZmF1bHRGaWVsZCB8fCBcbiAgICAgIChBcnJheS5pc0FycmF5KHRoaXMuYXBpTWV0YT8uZmllbGQpID8gdGhpcy5hcGlNZXRhPy5maWVsZD8uWzBdIDogdGhpcy5hcGlNZXRhLmZpZWxkKTtcblxuICAgIGNvbnN0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7XG4gICAgY2hhbmdlWydmcm9tUXVlc3Rpb25JZCddID0gdGhpcy5pZDtcbiAgICBjaGFuZ2VbJ3ZhbHVlT2JqJ10gPSB0aGlzLnZhbHVlT2JqO1xuICAgIGNoYW5nZVsnZmllbGQnXSA9IGRlZmF1bHRGaWVsZDtcbiAgICBjaGFuZ2VbJ3JlZmVyZW5jZUZpZWxkJ10gPSB0aGlzLnF1ZXN0aW9uLnJlZmVyZW5jZUZpZWxkO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyTmFtZSA9IHRoaXMudmlld0ZpbHRlck5hbWU7XG4gICAgXG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzLFxuICAgICAgdmFsdWU6IGNoYW5nZVxuICAgIH0pO1xuICB9XG5cbiAgaGlnaGxpZ2h0VGV4dCh0ZXh0OiBzdHJpbmcsIHNlYXJjaFRlcm06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0ZXh0IHx8ICFzZWFyY2hUZXJtKSByZXR1cm4gdGV4dCB8fCAnJztcblxuICAgIC8vIFNhbml0aXplIHRoZSBpbnB1dCB0ZXh0XG4gICAgY29uc3Qgc2FuaXRpemVkVGV4dCA9IHRoaXMuc2FuaXRpemVIdG1sKHRleHQpO1xuICAgIGNvbnN0IHRlcm1zID0gc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJykuZmlsdGVyKHRlcm0gPT4gdGVybS5sZW5ndGggPiAwKTtcbiAgICBcbiAgICBpZiAodGVybXMubGVuZ3RoID09PSAwKSByZXR1cm4gc2FuaXRpemVkVGV4dDtcblxuICAgIC8vIEVzY2FwZSBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnNcbiAgICBjb25zdCBlc2NhcGVkVGVybXMgPSB0ZXJtcy5tYXAodGVybSA9PiBcbiAgICAgIHRlcm0ucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxuICAgICk7XG5cbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYCgke2VzY2FwZWRUZXJtcy5qb2luKCd8Jyl9KWAsICdnaScpO1xuICAgIHJldHVybiBzYW5pdGl6ZWRUZXh0LnJlcGxhY2UocmVnZXgsICc8c3BhbiBjbGFzcz1cImhpZ2hsaWdodFwiPiQxPC9zcGFuPicpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZUh0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgIC5yZXBsYWNlKC8nL2csICcmIzM5OycpO1xuICB9XG4gIHJlbW92ZVZhbHVlRW1pdCgpe1xuICAgIHRoaXMuY2xpY2tJdGVtKG51bGwpXG4gIH1cbn0iLCI8IS0tIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UgLS0+XG48ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIiAjc2VhcmNoV3JhcHBlcj5cbiAgPG54dC1pbnB1dCBcbiAgICBbdHlwZV09XCInbGlzdCdcIiBcbiAgICBbbW9kZV09XCJtb2RlXCIgXG4gICAgW2Zyb21dPVwiZnJvbVwiXG4gICAgW3ZhbHVlXT1cIm1vZGUgPT09ICdlZGl0JyA/IGZpbHRlck5hbWUgOiB2aWV3RmlsdGVyTmFtZVwiXG4gICAgW2xhYmVsRm9udF09XCJxdWVzdGlvbi5mb250XCIgXG4gICAgW2xhYmVsXT1cInF1ZXN0aW9uPy5xdWVzdGlvblRleHRcIiBcbiAgICBbbGFiZWxDb2xvcl09XCJxdWVzdGlvbi5mb250Q29sb3JcIlxuICAgIFtsYWJlbFNpemVdPVwicXVlc3Rpb24uZm9udFNpemVcIiBcbiAgICBbaW5wdXRWYWx1ZVNpemVdPVwicXVlc3Rpb24uZm9udFNpemVcIiBcbiAgICBbbGFiZWxXZWlnaHRdPVwicXVlc3Rpb24uZm9udFdlaWdodFwiXG4gICAgW2lucHV0V2VpZ2h0XT1cInF1ZXN0aW9uLmZvbnRXZWlnaHRcIiBcbiAgICBbc2hvd0xhYmVsXT1cInF1ZXN0aW9uLnN0eWxlPy5zaG93TGFiZWxcIiBcbiAgICBpbnB1dEJvcmRlcj1cIm5vbmVcIiBcbiAgICBzdmdIZWlnaHQ9XCIyMHB4XCJcbiAgICBzdmdXaWR0aD1cIjIwcHhcIiBcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJUZXh0XCIgXG4gICAgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzT3B0aW9uYWxcIiBcbiAgICBpbnB1dEJnQ29sb3I9XCIjRkFGQUZBXCJcbiAgICBbaW5wdXRJZF09XCJxdWVzdGlvbi50cmFja2luZ0lkXCIgXG4gICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgIFtpbnB1dEljb25MZWZ0U3JjXT1cInF1ZXN0aW9uLmljb25MZWZ0U3JjXCIgXG4gICAgKGlucHV0VmFsdWUpPVwiZ2V0U291cmNlRGF0YUxvY2FsKCRldmVudCk7IGlucHV0VmFsdWUoJGV2ZW50LnZhbHVlLCAkZXZlbnQucXVlc3Rpb24pXCIgXG4gICAgKG9uRm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxuICAgIChvbkJsdXIpPVwib25JbnB1dEJsdXIoKVwiXG4gICAgW3Nob3dTdWdnZXN0aW9uXT1cInNob3dTdWdnZXN0aW9uXCIgXG4gICAgYXJpYU93bnM9XCJzZWxlY3RMaXN0XCIgXG4gICAgYXJpYUhhc1BvcHVwPVwibGlzdGJveFwiIFxuICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCIgXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcbiAgICAocmVtb3ZlVmFsdWVFbWl0KT1cInJlbW92ZVZhbHVlRW1pdCgpXCI+XG4gIDwvbnh0LWlucHV0PlxuXG4gIDxkaXYgaWQ9XCJzZWxlY3RMaXN0XCIgY2xhc3M9XCJzdWdnZXN0aW9uLXdyYXBwZXJcIiByb2xlPVwibGlzdGJveFwiICpuZ0lmPVwic2hvd1N1Z2dlc3Rpb25cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiZmluYWxSZXN1bHRzKCkubGVuZ3RoID4gMFwiIGNsYXNzPVwibnh0LXN1Z2dlc3Rpb25zLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaW5hbFJlc3VsdHMoKTsgdHJhY2tCeTogdHJhY2tCeUZuXCIgXG4gICAgICAgICAgIChjbGljayk9XCJjbGlja0l0ZW0oaXRlbSlcIiBcbiAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9uLWl0ZW1cIiBcbiAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsaWNrSXRlbShpdGVtKVwiXG4gICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImNsaWNrSXRlbShpdGVtKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tZGV0YWlsc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udGh1bWJuYWlsXCIgY2xhc3M9XCJ0aHVtYm5haWwtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS50aHVtYm5haWxcIiBbYWx0XT1cIml0ZW0ubmFtZSArICcgYXZhdGFyJ1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRleHRcIj5cbiAgICAgICAgICAgICAgPCEtLSBQcmltYXJ5IHRleHQgKGZpcnN0IGtleSkgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSkubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLW5hbWUgcHJpbWFyeVwiIFxuICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJoaWdobGlnaHRUZXh0KGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKVtnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSlbMF1dLCBzZWFyY2hLZXlXb3JkKVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwhLS0gU2Vjb25kYXJ5IHRleHQgKHJlbWFpbmluZyBrZXlzKSAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tc2Vjb25kYXJ5XCIgKm5nSWY9XCJnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSkubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY29uZGFyeS10ZXh0XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaGlnaGxpZ2h0VGV4dChnZXRWYWx1ZXMoaXRlbSwgU2VhcmNoSXRlbSlba2V5XSwgc2VhcmNoS2V5V29yZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiICpuZ0lmPVwiaSA8IGdldEtleXMoZ2V0VmFsdWVzKGl0ZW0sIFNlYXJjaEl0ZW0pKS5sZW5ndGggLSAxXCI+IHwgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibm9SZXN1bHQgJiYgc2VhcmNoS2V5V29yZFwiIGNsYXNzPVwibm8tcmVzdWx0c1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdHMtY29udGVudFwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjFcIj5cbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjhcIj48L2NpcmNsZT5cbiAgICAgICAgICA8cGF0aCBkPVwibTIxIDIxLTQuMzUtNC4zNVwiPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxwPk5vIHJlc3VsdHMgZm91bmQgZm9yIFwie3tzZWFyY2hLZXlXb3JkfX1cIjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBNkIsTUFBTSxFQUFtQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFak0sT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBZTVGLE1BQU0sT0FBTyxZQUFZO0lBb0NIO0lBQXVDO0lBQXFDO0lBQWlDO0lBQWtDO0lBQXdDO0lBbkNsTSxlQUFlLEdBQVcsRUFBRSxDQUFDO0lBQzdCLFFBQVEsQ0FBTTtJQUNkLE9BQU8sQ0FBTTtJQUNiLEVBQUUsR0FBVyxFQUFFLENBQUM7SUFDaEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixJQUFJLEdBQThCLE1BQU0sQ0FBQztJQUN6QyxJQUFJLENBQU07SUFFVCxpQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUMzQixhQUFhLENBQWM7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WCxRQUFRO3FCQUNUO3lOQUtRLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFSSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ3VDLGFBQWE7c0JBQTFELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFpRzVDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTMUMsV0FBVztzQkFEVixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgU2ltcGxlQ2hhbmdlcywgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCwgVHJhY2tCeUZ1bmN0aW9uLCBIb3N0TGlzdGVuZXJ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VXcmFwcGVyIH0gZnJvbSBcIi4uLy4uL21vZGVsL2NoYW5nZVdyYXBwZXJcIjtcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2kxOG4uc2VydmljZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSBcIi4uL254dC1pbnB1dC9ueHQtaW5wdXQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb3VudHJ5U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jb3VudHJ5LnNlcnZpY2VcIjtcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2VcIjtcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdueHQtc2VhcmNoLWJveCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTnh0SW5wdXRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtYm94LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOeHRTZWFyY2hCb3ggaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcGxhY2VIb2xkZXJUZXh0OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgcXVlc3Rpb246IGFueTtcbiAgQElucHV0KCkgYXBpTWV0YTogYW55O1xuICBASW5wdXQoKSBpZDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1vZGU6ICd2aWV3JyB8ICdlZGl0JyB8ICdwcmludCcgPSAnZWRpdCc7XG4gIEBJbnB1dCgpIGZyb206IGFueTtcbiAgXG4gIEBPdXRwdXQoKSBzZWFyY2hWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoV3JhcHBlcicsIHsgc3RhdGljOiB0cnVlIH0pIHNlYXJjaFdyYXBwZXIhOiBFbGVtZW50UmVmO1xuXG4gIFNlYXJjaEl0ZW06IGFueTtcbiAgcHVibGljIGZpbmFsUmVzdWx0czogV3JpdGFibGVTaWduYWw8YW55W10+ID0gc2lnbmFsKFtdKTtcbiAgcHVibGljIHNlYXJjaEtleVdvcmQ6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgbmV3UmVzdWx0OiBhbnk7XG4gIHB1YmxpYyBzaG93UmVzdWx0ID0gZmFsc2U7XG4gIHB1YmxpYyBub1Jlc3VsdCA9IGZhbHNlO1xuICBwdWJsaWMgc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgdmlld0ZpbHRlck5hbWU6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgaXNTaW5nbGVGaWVsZENoYW5nZSA9IGZhbHNlO1xuICBwdWJsaWMgdmFsdWVPYmo6IGFueTtcbiAgcHVibGljIGlucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICBwdWJsaWMgbGFzdFNlYXJjaExlbmd0aCA9IDA7XG4gIHB1YmxpYyBmaWx0ZXJOYW1lID0nJ1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIFRyYWNrQnkgZnVuY3Rpb24gZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICB0cmFja0J5Rm46IFRyYWNrQnlGdW5jdGlvbjxhbnk+ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4ge1xuICAgIHJldHVybiBpdGVtLmlkIHx8IGl0ZW0ubmFtZSB8fCBpbmRleDtcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UscHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsIHByaXZhdGUgY291bnRyeVNlcnZpY2U6IENvdW50cnlTZXJ2aWNlLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBpZih0aGlzLnF1ZXN0aW9uPy5pbnB1dCAmJiB0eXBlb2YgdGhpcy5xdWVzdGlvbj8uaW5wdXQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24/LmlucHV0KSl7XG4gICAgICB0aGlzLmNsaWNrSXRlbSh0aGlzLnF1ZXN0aW9uPy5pbnB1dClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJOYW1lID0gdGhpcy5xdWVzdGlvbj8uaW5wdXRcbiAgICB9ICAgIFxuICAgIC8vIFNldHVwIGRlYm91bmNlZCBzZWFyY2hcbiAgICB0aGlzLnNlYXJjaFN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGtleXdvcmQgPT4ge1xuICAgICAgICBpZih0aGlzLmxhc3RTZWFyY2hMZW5ndGggPiAyKSB0aGlzLnBlcmZvcm1TZWFyY2goa2V5d29yZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmKHRoaXMucXVlc3Rpb24/LmlucHV0ICYmIHR5cGVvZiB0aGlzLnF1ZXN0aW9uPy5pbnB1dCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodGhpcy5xdWVzdGlvbj8uaW5wdXQpKXtcbiAgICAgIHRoaXMuY2xpY2tJdGVtKHRoaXMucXVlc3Rpb24/LmlucHV0KVxuICAgIH0gZWxzZSBpZihBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24/LmlucHV0KSl7XG4gICAgICB0aGlzLmZpbHRlck5hbWUgPSAnJ1xuICAgICAgdGhpcy52aWV3RmlsdGVyTmFtZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyTmFtZSA9IHRoaXMucXVlc3Rpb24/LmlucHV0XG4gICAgICB0aGlzLnZpZXdGaWx0ZXJOYW1lID0gdGhpcy5xdWVzdGlvbj8uaW5wdXRcbiAgICB9XG4gICAgdGhpcy5wYXJzZUFwaU1ldGEoKTtcbiAgICBpZih0aGlzLnF1ZXN0aW9uPy5zdWJUZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IGRlcGVuZGVuY3lPYmo6IGFueSA9IHRoaXMucXVlc3Rpb24/LnN1YlRleHQ7XG4gICAgICAvLyBTdWJzY3JpYmUgZm9yIHRoZSBjaGFuZ2VzXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcbiAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCAmJiBjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPT0gdW5kZWZpbmVkICYmICggQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpPyBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQuaW5jbHVkZXMoY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQpIDogY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT09IGRlcGVuZGVuY3lPYmouc291cmNlUXVlc3Rpb25JZCkpIHtcbiAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5T2JqLnF1ZXJ5VmFsdWUpPyBkZXBlbmRlbmN5T2JqLnF1ZXJ5VmFsdWUuaW5jbHVkZXMoY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQpIDogY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQgPT09IGRlcGVuZGVuY3lPYmoucXVlcnlWYWx1ZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5xdWVyeVZhbHVlU3RvcmUodGhpcy5xdWVzdGlvbi5pZCxjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCxjaGFuZ2VWYWx1ZS52YWx1ZU9iailcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmNvbmZpcm1DaGFuZ2UoY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYoY2hhbmdlc1sncXVlc3Rpb24nXSl7XG4gICAgICAvLyBpZih0aGlzLnF1ZXN0aW9uPy5pbnB1dCAmJiB0eXBlb2YgdGhpcy5xdWVzdGlvbj8uaW5wdXQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHRoaXMucXVlc3Rpb24/LmlucHV0KSl7XG4gICAgICAvLyAgIHRoaXMuY2xpY2tJdGVtKHRoaXMucXVlc3Rpb24/LmlucHV0KVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgdGhpcy5maWx0ZXJOYW1lID0gdGhpcy5xdWVzdGlvbj8uaW5wdXRcbiAgICAgIC8vIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ21vZGUnXSkge1xuICAgICAgdGhpcy5tb2RlID0gY2hhbmdlc1snbW9kZSddLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2FwaU1ldGEnXSAmJiB0aGlzLmFwaU1ldGEpIHtcbiAgICAgIHRoaXMucGFyc2VBcGlNZXRhKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMucmVzZXRDb21wb25lbnRTdGF0ZSgpO1xuICB9XG5cbiAgLy8gSGFuZGxlIGNsaWNrcyBvdXRzaWRlIHRoZSBzZWFyY2ggY29tcG9uZW50XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBlc2NhcGUga2V5IHRvIGNsb3NlIHN1Z2dlc3Rpb25zXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSlcbiAgb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUFwaU1ldGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXBpTWV0YSkge1xuICAgICAgdGhpcy5hcGlNZXRhID0gdHlwZW9mIHRoaXMuYXBpTWV0YSA9PT0gJ29iamVjdCcgPyB0aGlzLmFwaU1ldGEgOiBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSB8fCAne30nKTtcbiAgICAgIHRoaXMuU2VhcmNoSXRlbSA9IHRoaXMuYXBpTWV0YS5maWVsZCB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Q29tcG9uZW50U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KFtdKTtcbiAgICB0aGlzLnNlYXJjaEtleVdvcmQgPSAnJztcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5ub1Jlc3VsdCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxhc3RTZWFyY2hMZW5ndGggPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlU3VnZ2VzdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZmFsc2U7XG4gIH1cblxuICBvbklucHV0Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dEZvY3VzZWQgPSB0cnVlO1xuICAgIC8vIFRyaWdnZXIgYSBzZWFyY2ggd2l0aCBhbiBlbXB0eSBrZXl3b3JkIHRvIHNob3cgYWxsIGRhdGFcbiAgICBpZiAoIXRoaXMuc2VhcmNoS2V5V29yZCkge1xuICAgICAgLy8gdGhpcy5wZXJmb3JtU2VhcmNoKCcnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmluYWxSZXN1bHRzKCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgLy8gRG9uJ3QgaW1tZWRpYXRlbHkgaGlkZSBzdWdnZXN0aW9ucyB0byBhbGxvdyBmb3IgY2xpY2tpbmdcbiAgICAvLyBUaGUgZG9jdW1lbnQgY2xpY2sgaGFuZGxlciB3aWxsIGhhbmRsZSBoaWRpbmdcbiAgfVxuXG4gIGNsZWFyTGlzdCgpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgdGhlIHNldFRpbWVvdXQgZGVsYXkgdGhhdCB3YXMgY2F1c2luZyBpc3N1ZXNcbiAgICB0aGlzLmhpZGVTdWdnZXN0aW9ucygpO1xuICB9XG5cbiAgZ2V0U291cmNlRGF0YUxvY2FsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50Py52YWx1ZT8udmFsdWVPYmopIHtcbiAgICAgIHRoaXMucmVzZXRDb21wb25lbnRTdGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gIGV2ZW50LnZhbHVlPy52YWx1ZU9iaj8uaW5jbHVkZXMoJ3wnKSA/IGV2ZW50LnZhbHVlPy52YWx1ZU9iaj8uc3BsaXQoJ3wnKVswXS50cmltKCkgOiBldmVudC52YWx1ZT8udmFsdWVPYmo/LnRyaW0oKTtcbiAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gc2VhcmNoVmFsdWUubGVuZ3RoO1xuICAgIFxuICAgIC8vIEFsd2F5cyB1cGRhdGUgdGhlIHNlYXJjaCBrZXl3b3JkXG4gICAgdGhpcy5zZWFyY2hLZXlXb3JkID0gc2VhcmNoVmFsdWU7XG4gICAgXG4gICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHVzZXIgdHlwZXMgMysgY2hhcmFjdGVyc1xuICAgIGlmIChjdXJyZW50TGVuZ3RoID4gMiAmJiAhdGhpcy5pc1NpbmdsZUZpZWxkQ2hhbmdlKSB7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gIWV2ZW50LnF1ZXN0aW9uPy5zaW5nbGVGaWVsZENoYW5nZTtcbiAgICAgIHRoaXMuc2hvd1Jlc3VsdCA9IGZhbHNlO1xuICAgICAgdGhpcy5ub1Jlc3VsdCA9IGZhbHNlO1xuICAgICAgLy8gQWx3YXlzIHBlcmZvcm0gc2VhcmNoIHdoZW4gd2UgaGF2ZSAzKyBjaGFyYWN0ZXJzXG4gICAgICB0aGlzLmxhc3RTZWFyY2hMZW5ndGggPSBjdXJyZW50TGVuZ3RoO1xuICAgICAgdGhpcy5zZWFyY2hTdWJqZWN0Lm5leHQoc2VhcmNoVmFsdWUpO1xuICAgICAgXG4gICAgfSBlbHNlIGlmIChjdXJyZW50TGVuZ3RoIDw9IDIpIHtcbiAgICAgIC8vIFdoZW4gbGVuZ3RoIGlzIDIgb3IgbGVzcywgaGlkZSBzdWdnZXN0aW9ucyBidXQga2VlcCB0aGUgc2VhcmNoIGtleXdvcmRcbiAgICAgIHRoaXMuaXNTaW5nbGVGaWVsZENoYW5nZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5ub1Jlc3VsdCA9IGZhbHNlO1xuICAgICAgdGhpcy5sYXN0U2VhcmNoTGVuZ3RoID0gY3VycmVudExlbmd0aDtcbiAgICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHNlYXJjaFZhbHVlKTtcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwZXJmb3JtU2VhcmNoKGtleXdvcmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hcGlNZXRhKSByZXR1cm47XG5cbiAgICB0aGlzLnBhcnNlQXBpTWV0YSgpO1xuICAgIFxuICAgIGlmICghdGhpcy5hcGlNZXRhLmlzU3RhdGljRGF0YSkge1xuICAgICAgdGhpcy5zZWFyY2hGcm9tQXBpKGtleXdvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaEZyb21TdGF0aWNEYXRhKGtleXdvcmQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoRnJvbUFwaShrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5maW5hbFJlc3VsdHMuc2V0KFtdKTtcbiAgICBpZighdGhpcy5hcGlNZXRhLmVuZHBvaW50ICYmIEFycmF5LmlzQXJyYXkodGhpcy5xdWVzdGlvbj8uaW5wdXQpICl7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5wcm9jZXNzU2VhcmNoUmVzdWx0cyh0aGlzLnF1ZXN0aW9uPy5pbnB1dCwga2V5d29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaW5hbEdldENhbGwgPSB0aGlzLmFwaU1ldGEuZW5kcG9pbnQ7XG4gICAgICAvLyBTS1MxOEpVTDI1IHF1ZXJ5IHBhcmFtcyBjcmVhdGlvblxuICAgICAgaWYodGhpcy5hcGlNZXRhPy5xdWVyeVBhcmFtZXRlcil7XG4gICAgICAgIGNvbnN0IGlzRmllbGRBcnJheSA9IEFycmF5LmlzQXJyYXkodGhpcy5hcGlNZXRhPy5xdWVyeVBhcmFtZXRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IGlzRmllbGRBcnJheSA/IHRoaXMuYXBpTWV0YS5xdWVyeVBhcmFtZXRlciA6IFt0aGlzLmFwaU1ldGEucXVlcnlQYXJhbWV0ZXJdOyAvLyBhbHdheXMgYW4gYXJyYXkgbm93XG4gICAgICAgIC8vIEJ1aWxkIHF1ZXJ5IHBhcmFtcyBzdHJpbmdcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBmaWVsZHNcbiAgICAgICAgICAubWFwKGZpZWxkID0+IGAke2ZpZWxkfT0ke3RoaXMuc2VhcmNoS2V5V29yZH1gKVxuICAgICAgICAgIC5qb2luKCcmJyk7XG4gICAgICAgIC8vIENoZWNrIGlmIGVuZHBvaW50IGFscmVhZHkgaGFzIHF1ZXJ5IHBhcmFtc1xuICAgICAgICBpZihxdWVyeVBhcmFtcyAmJiBxdWVyeVBhcmFtcyAhPT0gJycpe1xuICAgICAgICAgIGlmICh0aGlzLmFwaU1ldGEuZW5kcG9pbnQuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICAgICAgZmluYWxHZXRDYWxsICs9IGAmJHtxdWVyeVBhcmFtc31gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbEdldENhbGwgKz0gYD8ke3F1ZXJ5UGFyYW1zfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hcGlNZXRhPy5xdWVyeUZpZWxkICYmIHRoaXMuYXBpTWV0YT8ucXVlcnlWYWx1ZSkge1xuICAgICAgICBjb25zdCBxdWVyeUZpZWxkcyA9IEFycmF5LmlzQXJyYXkodGhpcy5hcGlNZXRhLnF1ZXJ5RmllbGQpXG4gICAgICAgICAgPyB0aGlzLmFwaU1ldGEucXVlcnlGaWVsZFxuICAgICAgICAgIDogW3RoaXMuYXBpTWV0YS5xdWVyeUZpZWxkXTtcbiAgICAgIFxuICAgICAgICBjb25zdCBxdWVyeVZhbHVlcyA9IEFycmF5LmlzQXJyYXkodGhpcy5hcGlNZXRhLnF1ZXJ5VmFsdWUpXG4gICAgICAgICAgPyB0aGlzLmFwaU1ldGEucXVlcnlWYWx1ZVxuICAgICAgICAgIDogW3RoaXMuYXBpTWV0YS5xdWVyeVZhbHVlXTtcbiAgICAgIFxuICAgICAgICBjb25zdCBzdG9yZWQgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFF1ZXJ5VmFsdWUodGhpcy5xdWVzdGlvbi5pZCk7IC8vIHNpbmdsZSBvYmplY3RcbiAgICAgIFxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgXG4gICAgICAgIHF1ZXJ5RmllbGRzLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gcXVlcnlWYWx1ZXNbaW5kZXhdID8/IHF1ZXJ5VmFsdWVzWzBdO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gc3RvcmVkW3ZhbHVlS2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXNBcnJheS5wdXNoKGAke2ZpZWxkfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIFxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zQXJyYXkuam9pbignJicpO1xuICAgICAgXG4gICAgICAgIGlmIChxdWVyeVBhcmFtcykge1xuICAgICAgICAgIGZpbmFsR2V0Q2FsbCArPSB0aGlzLmFwaU1ldGEuZW5kcG9pbnQuaW5jbHVkZXMoJz8nKSA/IGAmJHtxdWVyeVBhcmFtc31gIDogYD8ke3F1ZXJ5UGFyYW1zfWA7XG4gICAgICAgIH1cbiAgICAgIH0gICAgICBcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoZmluYWxHZXRDYWxsKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChhcGlSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2VhcmNoUmVzdWx0cyhhcGlSZXNwb25zZSwga2V5d29yZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMubm9SZXN1bHQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChbXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoRnJvbVN0YXRpY0RhdGEoa2V5d29yZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmNvdW50cnlTZXJ2aWNlLmdldENvdW50cnlEYXRhKHRoaXMuYXBpTWV0YS5maWVsZCk7XG4gICAgdGhpcy5wcm9jZXNzU2VhcmNoUmVzdWx0cyhyZXNwb25zZSwga2V5d29yZCk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTZWFyY2hSZXN1bHRzKGFwaVJlc3BvbnNlOiBhbnksIGtleXdvcmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCByZXNwb25zZTtcbiAgXG4gICAgaWYgKHRoaXMuYXBpTWV0YS52YXJpYWJsZSkge1xuICAgICAgcmVzcG9uc2UgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGFwaVJlc3BvbnNlLCB0aGlzLmFwaU1ldGEudmFyaWFibGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZSA9IGFwaVJlc3BvbnNlO1xuICAgIH1cbiAgXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlKSkge1xuICAgICAgdGhpcy5ub1Jlc3VsdCA9IHRydWU7XG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQoW10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgaWYgKCFrZXl3b3JkKSB7XG4gICAgICAvLyBJZiBubyBrZXl3b3JkLCBzaG93IGFsbCByZXN1bHRzXG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cy5zZXQocmVzcG9uc2UpO1xuICAgICAgdGhpcy5ub1Jlc3VsdCA9IHJlc3BvbnNlLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSB0cnVlOyAvLyBFbnN1cmUgc3VnZ2VzdGlvbnMgYXJlIHZpc2libGVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmlsdGVyIHJlc3VsdHMgYmFzZWQgb24gdGhlIGtleXdvcmRcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm1zID0ga2V5d29yZC50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKS5maWx0ZXIodGVybSA9PiB0ZXJtLmxlbmd0aCA+IDApO1xuICAgICAgY29uc3QgcmVzdWx0cyA9IHJlc3BvbnNlLmZpbHRlcihvYmogPT4ge1xuICAgICAgICBjb25zdCBjb21iaW5lZFZhbHVlcyA9IHRoaXMuZ2V0Q29tYmluZWRWYWx1ZXNGcm9tQ29sdW1ucyhvYmosIHRoaXMuYXBpTWV0YS5maWVsZCk7XG4gICAgICAgIHJldHVybiBzZWFyY2hUZXJtcy5ldmVyeSh0ZXJtID0+IGNvbWJpbmVkVmFsdWVzLmluY2x1ZGVzKHRlcm0pKTtcbiAgICAgIH0pO1xuICBcbiAgICAgIHRoaXMubm9SZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzLnNldChyZXN1bHRzKTtcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSB0cnVlOyAvLyBTaG93IHN1Z2dlc3Rpb25zIG9ubHkgaWYgdGhlcmUgYXJlIHJlc3VsdHNcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghb2JqIHx8ICFwYXRoKSByZXR1cm4gJyc7XG4gICAgXG4gICAgY29uc3QgcHJvY2Vzc2VkUGF0aCA9IHBhdGgucmVwbGFjZSgvXFxbKFxcZCspXFxdL2csICcuJDEnKTtcbiAgICBjb25zdCBwYXJ0cyA9IHByb2Nlc3NlZFBhdGguc3BsaXQoJy4nKTtcbiAgICBsZXQgY3VycmVudCA9IG9iajtcblxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgaWYgKCFjdXJyZW50IHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JykgcmV0dXJuICcnO1xuICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGFydF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudCAhPT0gdW5kZWZpbmVkIFxuICAgICAgPyBTdHJpbmcoY3VycmVudCkudG9Mb3dlckNhc2UoKS50cmltKCkgXG4gICAgICA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb21iaW5lZFZhbHVlc0Zyb21Db2x1bW5zKG9iajogYW55LCBjb2x1bW5zOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgaWYgKCFvYmogfHwgIWNvbHVtbnMpIHJldHVybiAnJztcbiAgICBcbiAgICBjb25zdCBjb2x1bW5BcnJheSA9IEFycmF5LmlzQXJyYXkoY29sdW1ucykgPyBjb2x1bW5zIDogW2NvbHVtbnNdO1xuICAgIGNvbnN0IHZhbHVlczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbkFycmF5KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUob2JqLCBjb2x1bW4pO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWx1ZXMoZWxlbWVudDogYW55LCBjb2x1bW5zOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKCFlbGVtZW50IHx8ICFjb2x1bW5zKSByZXR1cm4gcmVzdWx0O1xuXG4gICAgY29uc3QgY29sdW1uQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbHVtbnMpID8gY29sdW1ucyA6IFtjb2x1bW5zXTtcbiAgICBcbiAgICBjb2x1bW5BcnJheS5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmICghY29sdW1uKSByZXR1cm47XG4gICAgICBcbiAgICAgIGxldCB0ZW1wRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICBjb25zdCBmaWVsZHMgPSBjb2x1bW4uc3BsaXQoJy4nKTtcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgaWYgKCF0ZW1wRWxlbWVudCkgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBzcGxpdEZpZWxkcyA9IGZpZWxkLnNwbGl0KCdbJyk7XG4gICAgICAgIGlmIChzcGxpdEZpZWxkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0ZW1wRWxlbWVudCA9IHRlbXBFbGVtZW50W2ZpZWxkXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpbmRleE1hdGNoID0gc3BsaXRGaWVsZHNbMV0/Lm1hdGNoKC8oXFxkKylcXF0vKTtcbiAgICAgICAgICBpZiAoaW5kZXhNYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIoaW5kZXhNYXRjaFsxXSk7XG4gICAgICAgICAgICB0ZW1wRWxlbWVudCA9IHRlbXBFbGVtZW50W3NwbGl0RmllbGRzWzBdXT8uW2luZGV4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmVzdWx0W2NvbHVtbl0gPSB0ZW1wRWxlbWVudCB8fCAnJztcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRLZXlzKG9iajogYW55KTogc3RyaW5nW10ge1xuICAgIHJldHVybiBvYmogPyBPYmplY3Qua2V5cyhvYmopIDogW107XG4gIH1cblxuICBwdWJsaWMgY2xpY2tJdGVtKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXBpTWV0YSkgcmV0dXJuO1xuICBcbiAgICB0aGlzLnBhcnNlQXBpTWV0YSgpO1xuICAgIFxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFsdWVzKGV2ZW50LCB0aGlzLlNlYXJjaEl0ZW0pO1xuICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IE9iamVjdC52YWx1ZXModmFsdWVzKVxuICAgICAgLmZpbHRlcih2YWwgPT4gdmFsKVxuICAgICAgLmpvaW4oJyB8ICcpO1xuICAgIFxuICAgIGlmICh0aGlzLm1vZGUgIT09ICdlZGl0Jykge1xuICAgICAgdGhpcy52aWV3RmlsdGVyTmFtZSA9IGRpc3BsYXlWYWx1ZTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJOYW1lID0gZGlzcGxheVZhbHVlO1xuICAgIHRoaXMubmdPbkNoYW5nZXMoe30pXG4gIFxuICAgIGNvbnN0IGRlZmF1bHRGaWVsZCA9IHRoaXMuYXBpTWV0YS5kZWZhdWx0RmllbGQgfHwgXG4gICAgICAoQXJyYXkuaXNBcnJheSh0aGlzLmFwaU1ldGE/LmZpZWxkKSA/IHRoaXMuYXBpTWV0YT8uZmllbGQ/LlswXSA6IHRoaXMuYXBpTWV0YS5maWVsZCk7XG4gICAgXG4gICAgY29uc3QgY2hhbmdlID0gbmV3IENoYW5nZVdyYXBwZXIoKTtcbiAgICBjaGFuZ2VbJ2lzT2JqZWN0J10gPSB0aGlzLmFwaU1ldGE/LmlzT2JqZWN0XG4gICAgY2hhbmdlWydmcm9tUXVlc3Rpb25JZCddID0gdGhpcy5pZDtcbiAgICBjaGFuZ2VbJ3ZhbHVlT2JqJ10gPSBldmVudDtcbiAgICBjaGFuZ2VbJ2ZpZWxkJ10gPSBkZWZhdWx0RmllbGQ7XG4gICAgXG4gICAgdGhpcy52YWx1ZU9iaiA9IGV2ZW50O1xuICAgIFxuICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb25zKCk7XG4gICAgXG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgdmFsdWU6IGNoYW5nZVxuICAgIH0pO1xuICB9XG5cbiAgaW5wdXRWYWx1ZShldmVudDogYW55LCBxdWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck5hbWUgPSBldmVudD8udmFsdWVPYmogPyBldmVudD8udmFsdWVPYmo/LnRyaW0oKSA6IHRoaXMuZmlsdGVyTmFtZVxuICAgIGlmICghcXVlcz8uc2luZ2xlRmllbGRDaGFuZ2UgfHwgIXRoaXMuYXBpTWV0YSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1NpbmdsZUZpZWxkQ2hhbmdlID0gdHJ1ZTtcbiAgICB0aGlzLnBhcnNlQXBpTWV0YSgpO1xuXG4gICAgY29uc3QgZGVmYXVsdEZpZWxkID0gdGhpcy5hcGlNZXRhLmRlZmF1bHRGaWVsZCB8fCBcbiAgICAgIChBcnJheS5pc0FycmF5KHRoaXMuYXBpTWV0YT8uZmllbGQpID8gdGhpcy5hcGlNZXRhPy5maWVsZD8uWzBdIDogdGhpcy5hcGlNZXRhLmZpZWxkKTtcblxuICAgIGNvbnN0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7XG4gICAgY2hhbmdlWydpc09iamVjdCddID0gdGhpcy5hcGlNZXRhPy5pc09iamVjdFxuICAgIGNoYW5nZVsnZnJvbVF1ZXN0aW9uSWQnXSA9IHRoaXMuaWQ7XG4gICAgY2hhbmdlWyd2YWx1ZU9iaiddID0gdGhpcy52YWx1ZU9iajtcbiAgICBjaGFuZ2VbJ2ZpZWxkJ10gPSBkZWZhdWx0RmllbGQ7XG4gICAgY2hhbmdlWydyZWZlcmVuY2VGaWVsZCddID0gdGhpcy5xdWVzdGlvbi5yZWZlcmVuY2VGaWVsZDtcbiAgICBcbiAgICB0aGlzLmZpbHRlck5hbWUgPSB0aGlzLnZpZXdGaWx0ZXJOYW1lO1xuICAgIFxuICAgIHRoaXMuc2VhcmNoVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICBxdWVzdGlvbjogcXVlcyxcbiAgICAgIHZhbHVlOiBjaGFuZ2VcbiAgICB9KTtcbiAgfVxuXG4gIGhpZ2hsaWdodFRleHQodGV4dDogc3RyaW5nLCBzZWFyY2hUZXJtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGV4dCB8fCAhc2VhcmNoVGVybSkgcmV0dXJuIHRleHQgfHwgJyc7XG5cbiAgICAvLyBTYW5pdGl6ZSB0aGUgaW5wdXQgdGV4dFxuICAgIGNvbnN0IHNhbml0aXplZFRleHQgPSB0aGlzLnNhbml0aXplSHRtbCh0ZXh0KTtcbiAgICBjb25zdCB0ZXJtcyA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpLmZpbHRlcih0ZXJtID0+IHRlcm0ubGVuZ3RoID4gMCk7XG4gICAgXG4gICAgaWYgKHRlcm1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHNhbml0aXplZFRleHQ7XG5cbiAgICAvLyBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzXG4gICAgY29uc3QgZXNjYXBlZFRlcm1zID0gdGVybXMubWFwKHRlcm0gPT4gXG4gICAgICB0ZXJtLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJylcbiAgICApO1xuXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoJHtlc2NhcGVkVGVybXMuam9pbignfCcpfSlgLCAnZ2knKTtcbiAgICByZXR1cm4gc2FuaXRpemVkVGV4dC5yZXBsYWNlKHJlZ2V4LCAnPHNwYW4gY2xhc3M9XCJoaWdobGlnaHRcIj4kMTwvc3Bhbj4nKTtcbiAgfVxuXG4gIHByaXZhdGUgc2FuaXRpemVIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRleHRcbiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgICAucmVwbGFjZSgvJy9nLCAnJiMzOTsnKTtcbiAgfVxuICByZW1vdmVWYWx1ZUVtaXQoKXtcbiAgICB0aGlzLmNsaWNrSXRlbShudWxsKVxuICB9XG59IiwiPCEtLSBWRCAxMkp1bjI0IC0gcmVhZG9ubHkgY2hhbmdlIC0tPlxuPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCIgI3NlYXJjaFdyYXBwZXI+XG4gIDxueHQtaW5wdXQgXG4gICAgW3R5cGVdPVwiJ2xpc3QnXCIgXG4gICAgW21vZGVdPVwibW9kZVwiIFxuICAgIFtmcm9tXT1cImZyb21cIlxuICAgIFt2YWx1ZV09XCJtb2RlID09PSAnZWRpdCcgPyBmaWx0ZXJOYW1lIDogdmlld0ZpbHRlck5hbWVcIlxuICAgIFtsYWJlbEZvbnRdPVwicXVlc3Rpb24uZm9udFwiIFxuICAgIFtsYWJlbF09XCJxdWVzdGlvbj8ucXVlc3Rpb25UZXh0XCIgXG4gICAgW2xhYmVsQ29sb3JdPVwicXVlc3Rpb24uZm9udENvbG9yXCJcbiAgICBbbGFiZWxTaXplXT1cInF1ZXN0aW9uLmZvbnRTaXplXCIgXG4gICAgW2lucHV0VmFsdWVTaXplXT1cInF1ZXN0aW9uLmZvbnRTaXplXCIgXG4gICAgW2xhYmVsV2VpZ2h0XT1cInF1ZXN0aW9uLmZvbnRXZWlnaHRcIlxuICAgIFtpbnB1dFdlaWdodF09XCJxdWVzdGlvbi5mb250V2VpZ2h0XCIgXG4gICAgW3Nob3dMYWJlbF09XCJxdWVzdGlvbi5zdHlsZT8uc2hvd0xhYmVsXCIgXG4gICAgaW5wdXRCb3JkZXI9XCJub25lXCIgXG4gICAgc3ZnSGVpZ2h0PVwiMjBweFwiXG4gICAgc3ZnV2lkdGg9XCIyMHB4XCIgXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyVGV4dFwiIFxuICAgIFtyZXF1aXJlZF09XCJxdWVzdGlvbi5pc09wdGlvbmFsXCIgXG4gICAgaW5wdXRCZ0NvbG9yPVwiI0ZBRkFGQVwiXG4gICAgW2lucHV0SWRdPVwicXVlc3Rpb24udHJhY2tpbmdJZFwiIFxuICAgIFtlcnJvck1lc3NhZ2VzXT1cInsgcmVxdWlyZWQ6ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJyB9XCJcbiAgICBbaW5wdXRJY29uTGVmdFNyY109XCJxdWVzdGlvbi5pY29uTGVmdFNyY1wiIFxuICAgIChpbnB1dFZhbHVlKT1cImdldFNvdXJjZURhdGFMb2NhbCgkZXZlbnQpOyBpbnB1dFZhbHVlKCRldmVudC52YWx1ZSwgJGV2ZW50LnF1ZXN0aW9uKVwiIFxuICAgIChvbkZvY3VzKT1cIm9uSW5wdXRGb2N1cygpXCJcbiAgICAob25CbHVyKT1cIm9uSW5wdXRCbHVyKClcIlxuICAgIFtzaG93U3VnZ2VzdGlvbl09XCJzaG93U3VnZ2VzdGlvblwiIFxuICAgIGFyaWFPd25zPVwic2VsZWN0TGlzdFwiIFxuICAgIGFyaWFIYXNQb3B1cD1cImxpc3Rib3hcIiBcbiAgICBbaXNMb2FkaW5nXT1cImlzTG9hZGluZ1wiIFxuICAgIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiXG4gICAgKHJlbW92ZVZhbHVlRW1pdCk9XCJyZW1vdmVWYWx1ZUVtaXQoKVwiPlxuICA8L254dC1pbnB1dD5cblxuICA8ZGl2IGlkPVwic2VsZWN0TGlzdFwiIGNsYXNzPVwic3VnZ2VzdGlvbi13cmFwcGVyXCIgcm9sZT1cImxpc3Rib3hcIiAqbmdJZj1cInNob3dTdWdnZXN0aW9uXCI+XG4gICAgPGRpdiAqbmdJZj1cImZpbmFsUmVzdWx0cygpLmxlbmd0aCA+IDBcIiBjbGFzcz1cIm54dC1zdWdnZXN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmluYWxSZXN1bHRzKCk7IHRyYWNrQnk6IHRyYWNrQnlGblwiIFxuICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tJdGVtKGl0ZW0pXCIgXG4gICAgICAgICAgIGNsYXNzPVwic3VnZ2VzdGlvbi1pdGVtXCIgXG4gICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbGlja0l0ZW0oaXRlbSlcIlxuICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJjbGlja0l0ZW0oaXRlbSlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWRldGFpbHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnRodW1ibmFpbFwiIGNsYXNzPVwidGh1bWJuYWlsLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW0udGh1bWJuYWlsXCIgW2FsdF09XCJpdGVtLm5hbWUgKyAnIGF2YXRhcidcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS10ZXh0XCI+XG4gICAgICAgICAgICAgIDwhLS0gUHJpbWFyeSB0ZXh0IChmaXJzdCBrZXkpIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0S2V5cyhnZXRWYWx1ZXMoaXRlbSwgU2VhcmNoSXRlbSkpLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1uYW1lIHByaW1hcnlcIiBcbiAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaGlnaGxpZ2h0VGV4dChnZXRWYWx1ZXMoaXRlbSwgU2VhcmNoSXRlbSlbZ2V0S2V5cyhnZXRWYWx1ZXMoaXRlbSwgU2VhcmNoSXRlbSkpWzBdXSwgc2VhcmNoS2V5V29yZClcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8IS0tIFNlY29uZGFyeSB0ZXh0IChyZW1haW5pbmcga2V5cykgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXNlY29uZGFyeVwiICpuZ0lmPVwiZ2V0S2V5cyhnZXRWYWx1ZXMoaXRlbSwgU2VhcmNoSXRlbSkpLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2YgZ2V0S2V5cyhnZXRWYWx1ZXMoaXRlbSwgU2VhcmNoSXRlbSkpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaSA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWNvbmRhcnktdGV4dFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImhpZ2hsaWdodFRleHQoZ2V0VmFsdWVzKGl0ZW0sIFNlYXJjaEl0ZW0pW2tleV0sIHNlYXJjaEtleVdvcmQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXBhcmF0b3JcIiAqbmdJZj1cImkgPCBnZXRLZXlzKGdldFZhbHVlcyhpdGVtLCBTZWFyY2hJdGVtKSkubGVuZ3RoIC0gMVwiPiB8IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIm5vUmVzdWx0ICYmIHNlYXJjaEtleVdvcmRcIiBjbGFzcz1cIm5vLXJlc3VsdHNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuby1yZXN1bHRzLWNvbnRlbnRcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxXCI+XG4gICAgICAgICAgPGNpcmNsZSBjeD1cIjExXCIgY3k9XCIxMVwiIHI9XCI4XCI+PC9jaXJjbGU+XG4gICAgICAgICAgPHBhdGggZD1cIm0yMSAyMS00LjM1LTQuMzVcIj48L3BhdGg+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8cD5ObyByZXN1bHRzIGZvdW5kIGZvciBcInt7c2VhcmNoS2V5V29yZH19XCI8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|