ng2-iq-select2-exe 16.2.0 → 16.2.1

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/README.md CHANGED
@@ -35,7 +35,7 @@ import { IqSelect2Module } from 'ng2-iq-select2';
35
35
  *html file*
36
36
  ```html
37
37
  <form [formGroup]="form">
38
- <iq-select2 css="form-control input-sm"
38
+ <iq-select2 inputContainerClass="form-control input-sm"
39
39
  formControlName="country"
40
40
  [dataSourceProvider]="listCountries"
41
41
  [selectedProvider]="loadFromIds"
@@ -46,7 +46,7 @@ import { IqSelect2Module } from 'ng2-iq-select2';
46
46
  *html file (custom template)*
47
47
  ```html
48
48
  <form [formGroup]="form">
49
- <iq-select2 css="form-control input-sm"
49
+ <iq-select2 inputContainerClass="form-control input-sm"
50
50
  formControlName="country"
51
51
  [dataSourceProvider]="listCountries"
52
52
  [selectedProvider]="loadFromIds"
@@ -1,9 +1,9 @@
1
- import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
1
+ import { Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
2
2
  import { IqSelect2ResultsComponent } from '../iq-select2-results/iq-select2-results.component';
3
- import { UntypedFormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { Messages } from './messages';
3
+ import { NG_VALUE_ACCESSOR, UntypedFormControl } from '@angular/forms';
5
4
  import { of } from 'rxjs';
6
5
  import { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap, tap } from 'rxjs/operators';
6
+ import Messages from "./messages";
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/common";
9
9
  import * as i2 from "@angular/forms";
@@ -18,33 +18,31 @@ const VALUE_ACCESSOR = {
18
18
  useExisting: forwardRef(() => IqSelect2Component),
19
19
  multi: true
20
20
  };
21
- const noop = () => {
22
- };
23
21
  export class IqSelect2Component {
24
22
  constructor() {
25
- this.MORE_RESULTS_MSG = 'Showing ' + Messages.PARTIAL_COUNT_VAR + ' of ' + Messages.TOTAL_COUNT_VAR + ' results. Refine your search to show more results.';
26
- this.NO_RESULTS_MSG = 'No results available';
27
23
  this.referenceMode = 'id';
28
24
  this.multiple = false;
29
- this.searchDelay = 250;
30
25
  this.placeholder = '';
31
- this.minimumInputLength = 2;
32
26
  this.disabled = false;
33
- this.messages = {
34
- moreResultsAvailableMsg: this.MORE_RESULTS_MSG,
35
- noResultsAvailableMsg: this.NO_RESULTS_MSG
36
- };
37
27
  this.clientMode = false;
38
28
  this.badgeColor = 'info';
29
+ this.wrapSelectedText = 'initial';
30
+ this.debounceDelay = 250;
31
+ this.debounceLength = 2;
32
+ this.iconCaret = '&#9660;';
33
+ this.iconDelete = '&#215;';
34
+ this.messageMoreResults = Messages.MORE_RESULTS;
35
+ this.messageNoResults = Messages.NO_RESULTS;
39
36
  this.onSelect = new EventEmitter();
40
37
  this.onRemove = new EventEmitter();
41
38
  this.term = new UntypedFormControl();
42
39
  this.resultsVisible = false;
40
+ this.listData = [];
43
41
  this.selectedItems = [];
44
42
  this.searchFocused = false;
45
43
  this.placeholderSelected = '';
46
- this.onTouchedCallback = noop;
47
- this.onChangeCallback = noop;
44
+ this.onTouchedCallback = () => false;
45
+ this.onChangeCallback = () => false;
48
46
  }
49
47
  ngAfterViewInit() {
50
48
  this.subscribeToChangesAndLoadDataFromObservable();
@@ -73,11 +71,10 @@ export class IqSelect2Component {
73
71
  this.disabled = isDisabled;
74
72
  }
75
73
  subscribeToChangesAndLoadDataFromObservable() {
76
- const observable = this.term.valueChanges.pipe(debounceTime(this.searchDelay), distinctUntilChanged());
77
- this.subscribeToResults(observable);
74
+ this.subscribeToResults(this.term.valueChanges.pipe(debounceTime(this.debounceDelay), distinctUntilChanged()));
78
75
  }
79
76
  subscribeToResults(observable) {
80
- observable.pipe(tap(() => this.resultsVisible = false), filter((term) => term.length >= this.minimumInputLength), switchMap(term => this.loadDataFromObservable(term)), map(items => items.filter(item => !(this.multiple && this.alreadySelected(item)))), tap(() => this.resultsVisible = this.searchFocused)).subscribe((items) => this.listData = items);
77
+ observable.pipe(tap(() => this.resultsVisible = false), filter((term) => term.length >= this.debounceLength), switchMap(term => this.loadDataFromObservable(term)), map(items => items.filter(item => !(this.multiple && this.alreadySelected(item)))), tap(() => this.resultsVisible = this.searchFocused)).subscribe((items) => this.listData = items);
81
78
  }
82
79
  loadDataFromObservable(term) {
83
80
  return this.clientMode ? this.fetchAndfilterLocalData(term) : this.fetchData(term);
@@ -100,15 +97,7 @@ export class IqSelect2Component {
100
97
  return item.text.toUpperCase().indexOf(term.toUpperCase()) !== -1;
101
98
  }
102
99
  fetchData(term) {
103
- return this
104
- .dataSourceProvider(term, this.buildValue())
105
- .pipe(map((items) => this.adaptItems(items)));
106
- }
107
- adaptItems(items) {
108
- const convertedItems = [];
109
- items.map((item) => this.iqSelect2ItemAdapter(item))
110
- .forEach((iqSelect2Item) => convertedItems.push(iqSelect2Item));
111
- return convertedItems;
100
+ return this.dataSourceProvider(term, this.buildValue()).pipe(map((items) => items.map((item) => this.iqSelect2ItemAdapter(item))));
112
101
  }
113
102
  populateItemsFromEntities(selectedValues) {
114
103
  if (this.multiple) {
@@ -194,9 +183,7 @@ export class IqSelect2Component {
194
183
  }
195
184
  getSelectedIds() {
196
185
  if (this.multiple) {
197
- const ids = [];
198
- this.selectedItems.forEach(item => ids.push(item.id));
199
- return ids;
186
+ return this.selectedItems.map(item => item.id);
200
187
  }
201
188
  else {
202
189
  return this.selectedItems.length === 0 ? null : this.selectedItems[0].id;
@@ -204,11 +191,7 @@ export class IqSelect2Component {
204
191
  }
205
192
  getEntities() {
206
193
  if (this.multiple) {
207
- const entities = [];
208
- this.selectedItems.forEach(item => {
209
- entities.push(item.entity);
210
- });
211
- return entities;
194
+ return this.selectedItems.map(item => item.entity);
212
195
  }
213
196
  else {
214
197
  return this.selectedItems.length === 0 ? null : this.selectedItems[0].entity;
@@ -264,7 +247,7 @@ export class IqSelect2Component {
264
247
  }
265
248
  }
266
249
  else {
267
- if (this.minimumInputLength === 0) {
250
+ if (this.debounceLength === 0) {
268
251
  if (ev.keyCode === KEY_CODE_ENTER || ev.keyCode === KEY_CODE_DOWN_ARROW) {
269
252
  this.focusAndShowResults();
270
253
  }
@@ -272,6 +255,9 @@ export class IqSelect2Component {
272
255
  }
273
256
  }
274
257
  onKeyDown(ev) {
258
+ if (ev.keyCode === KEY_CODE_ENTER) {
259
+ ev.preventDefault();
260
+ }
275
261
  if (this.results) {
276
262
  if (ev.keyCode === KEY_CODE_TAB) {
277
263
  this.results.selectCurrentItem();
@@ -284,32 +270,15 @@ export class IqSelect2Component {
284
270
  }
285
271
  }
286
272
  }
287
- onKeyPress(ev) {
288
- if (ev.keyCode === KEY_CODE_ENTER) {
289
- ev.preventDefault();
290
- }
291
- }
292
- getCss() {
293
- return 'select2-selection-container ' + (this.css === undefined ? '' : this.css);
294
- }
295
273
  getPlaceholder() {
296
274
  return this.selectedItems.length > 0 ? this.placeholderSelected : this.placeholder;
297
275
  }
298
- getCountMessage() {
299
- let msg = this.messages && this.messages.moreResultsAvailableMsg ? this.messages.moreResultsAvailableMsg : this.MORE_RESULTS_MSG;
300
- msg = msg.replace(Messages.PARTIAL_COUNT_VAR, String(this.listData.length));
301
- msg = msg.replace(Messages.TOTAL_COUNT_VAR, String(this.resultsCount - this.selectedItems.length));
302
- return msg;
303
- }
304
- getBadgeColor() {
305
- return this.multiple ? 'bg-' + this.badgeColor : '';
306
- }
307
276
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: IqSelect2Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
308
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: IqSelect2Component, selector: "iq-select2", inputs: { dataSourceProvider: "dataSourceProvider", selectedProvider: "selectedProvider", iqSelect2ItemAdapter: "iqSelect2ItemAdapter", referenceMode: "referenceMode", multiple: "multiple", searchDelay: "searchDelay", css: "css", placeholder: "placeholder", minimumInputLength: "minimumInputLength", disabled: "disabled", searchIcon: "searchIcon", deleteIcon: "deleteIcon", messages: "messages", resultsCount: "resultsCount", clientMode: "clientMode", badgeColor: "badgeColor" }, outputs: { onSelect: "onSelect", onRemove: "onRemove" }, providers: [VALUE_ACCESSOR], viewQueries: [{ propertyName: "termInput", first: true, predicate: ["termInput"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }], ngImport: i0, template: "<div class=\"select2-container\">\r\n <ul (click)=\"focusAndShowResults()\"\r\n [class]=\"getCss()\"\r\n [class.simple-selection]=\"!multiple\"\r\n [class.multiple-selection]=\"multiple\"\r\n [class.search-focused]=\"searchFocused\"\r\n [class.readonly]=\"disabled\">\r\n\r\n <ng-container *ngIf=\"!searchFocused || multiple\">\r\n <li *ngFor=\"let item of selectedItems\"\r\n [class]=\"'select2-selected ' + getBadgeColor()\"\r\n [class.badge]=\"multiple\">\r\n\r\n <span class=\"selectedItemText\">{{item.text}}</span>\r\n <div *ngIf=\"!disabled\" class=\"select2-selection-remove\" (click)=\"removeItem(item)\">\r\n <i *ngIf=\"deleteIcon\" [class]=\"deleteIcon\"></i>\r\n <button *ngIf=\"!deleteIcon\" (click)=\"removeItem(item)\" type=\"button\" class=\"btn-close\" [class.btn-close-white]=\"multiple\" aria-label=\"Close\"></button>\r\n </div>\r\n\r\n </li>\r\n </ng-container>\r\n <li class=\"select2-input\">\r\n <input #termInput type=\"text\"\r\n [placeholder]=\"getPlaceholder()\"\r\n [formControl]=\"term\"\r\n [class.transparent]=\"!multiple && selectedItems.length > 0 && !searchFocused\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keyup)=\"onKeyUp($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (keypress)=\"onKeyPress($event)\"\r\n *ngIf=\"!disabled\"/>\r\n </li>\r\n\r\n <div *ngIf=\"!disabled && (multiple || (!multiple && selectedItems.length === 0))\" class=\"caret\">\r\n <span *ngIf=\"!searchIcon\" class=\"caret-symbol\">&#9660;</span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength===0\"\r\n (click)=\"focusAndShowResults()\"></span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength!==0\"></span>\r\n </div>\r\n\r\n </ul>\r\n\r\n <div class=\"results-container\" *ngIf=\"resultsVisible\">\r\n <span class=\"results-msg\" *ngIf=\"listData && (listData.length + selectedItems.length) < resultsCount\">\r\n {{getCountMessage()}}\r\n </span>\r\n <span class=\"results-msg no-results-msg\" *ngIf=\"searchFocused && listData && listData.length === 0\">\r\n {{messages && messages.noResultsAvailableMsg ? messages.noResultsAvailableMsg : NO_RESULTS_MSG}}\r\n </span>\r\n <iq-select2-results #results [selectedItems]=\"selectedItems\" [items]=\"listData\"\r\n (itemSelectedEvent)=\"onItemSelected($event);\"\r\n [templateRef]=\"templateRef\"\r\n [searchFocused]=\"searchFocused\"></iq-select2-results>\r\n </div>\r\n</div>\r\n", styles: ["ul{list-style-type:none;position:relative}ul li{display:inline-block}ul.simple-selection li{display:block}input{border:none;padding:0}input:focus{outline:none}.simple-selection input.transparent{opacity:0;position:absolute;inset:0 30px 0 0}.form-control-sm ul,.form-control-lg ul{padding:2px 8px}.caret{position:absolute;right:8px;font-size:8px;top:0;bottom:0;line-height:38px}.form-control-sm .caret{line-height:31px}.form-control-lg .caret{line-height:48px;right:12px}.select2-container{position:relative}.results-container{position:absolute;margin-top:-6px;width:100%;z-index:3}div.select2-selection-remove{position:absolute;right:10px;top:0;display:inline-block}.multiple-selection .select2-selected{margin:0 1px 2px;--bs-badge-font-size: 1em;display:inline-flex;align-items:center;gap:.2em}.multiple-selection div.select2-selection-remove{position:relative;right:initial}div.select2-selection-remove:hover{cursor:pointer}.multiple-selection div.select2-selection-remove{display:flex;align-items:center}div.select2-selection-remove .btn-close{width:.3em;height:.3em;padding:.2em}.select2-container .search-focused{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem #007bff40}.results-msg{display:block;position:relative;margin-top:-10px;margin-bottom:10px;font-size:.8em;padding:3px 5px;border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-bottom:1px solid #ced4da;background:#fafafa}.readonly{background-color:#eaecf0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.IqSelect2ResultsComponent, selector: "iq-select2-results", inputs: ["items", "searchFocused", "selectedItems", "templateRef"], outputs: ["itemSelectedEvent"] }] }); }
277
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: IqSelect2Component, selector: "iq-select2", inputs: { dataSourceProvider: "dataSourceProvider", selectedProvider: "selectedProvider", iqSelect2ItemAdapter: "iqSelect2ItemAdapter", referenceMode: "referenceMode", multiple: "multiple", inputContainerClass: "inputContainerClass", placeholder: "placeholder", disabled: "disabled", maxResults: "maxResults", clientMode: "clientMode", badgeColor: "badgeColor", wrapSelectedText: "wrapSelectedText", debounceDelay: "debounceDelay", debounceLength: "debounceLength", iconCaret: "iconCaret", iconDelete: "iconDelete", messageMoreResults: "messageMoreResults", messageNoResults: "messageNoResults" }, outputs: { onSelect: "onSelect", onRemove: "onRemove" }, providers: [VALUE_ACCESSOR], viewQueries: [{ propertyName: "termInput", first: true, predicate: ["termInput"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }], ngImport: i0, template: "<div class=\"select2-container\">\r\n <div\r\n class=\"select2-inner-container\" [ngClass]=\"inputContainerClass ? inputContainerClass : ''\"\r\n [class.simple-selection]=\"!multiple\" [class.multiple-selection]=\"multiple\"\r\n [class.search-focused]=\"searchFocused\" [class.readonly]=\"disabled\"\r\n (click)=\"focusAndShowResults()\"\r\n >\r\n <ul class=\"select2-selection-container\">\r\n <ng-container *ngIf=\"!searchFocused || multiple\">\r\n <li *ngFor=\"let item of selectedItems\" class=\"select2-selected\">\r\n <span class=\"select2-selected-item\" [ngStyle]=\"{whitespace: wrapSelectedText}\" [title]=\"item.text\">{{item.text}}</span>\r\n <button *ngIf=\"!disabled\" class=\"select2-icon\" aria-label=\"Close\" (click)=\"removeItem(item)\">\r\n <span class=\"select2-selection-remove\" [innerHTML]=\"iconDelete\"></span>\r\n </button>\r\n </li>\r\n </ng-container>\r\n\r\n <li class=\"select2-input-container\">\r\n <input #termInput *ngIf=\"!disabled\" [formControl]=\"term\" type=\"text\" [placeholder]=\"getPlaceholder()\"\r\n [class.transparent]=\"!multiple && selectedItems.length > 0 && !searchFocused\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\"\r\n />\r\n </li>\r\n </ul>\r\n\r\n <div *ngIf=\"!disabled && (multiple || (!multiple && selectedItems.length === 0))\" class=\"select2-icon\">\r\n <span class=\"select2-selection-caret\" [innerHTML]=\"iconCaret\"></span>\r\n </div>\r\n </div>\r\n\r\n <iq-select2-results #results [resultsVisible]=\"resultsVisible\"\r\n [items]=\"listData\" [selectedItems]=\"selectedItems\" [maxResults]=\"maxResults\"\r\n [messageMoreResults]=\"messageMoreResults\" [messageNoResults]=\"messageNoResults\"\r\n [templateRef]=\"templateRef\" (onItemSelected)=\"onItemSelected($event);\"\r\n >\r\n </iq-select2-results>\r\n</div>\r\n", styles: [".select2-container{position:relative;width:100%;--select2-color-background: hsl(0, 0%, 96%);--select2-color-border: hsl(0, 0%, 90%);--select2-color-disabled: hsl(220, 20%, 90%);--select2-color-focused-border: hsl(220, 100%, 80%);--select2-color-focused-shadow: hsla(220, 80%, 40%);--select2-color-scrollbar-track: hsl(0, 0%, 90%);--select2-color-scrollbar-thumb: hsl(220, 25%, 25%);--select2-color-item-text: hsl(0, 0%, 96%);--select2-color-item-background: hsl(200, 90%, 50%);--select2-color-list-active: hsl(200, 70%, 70%);--select2-color-list-selected: hsl(200, 70%, 50%)}.select2-inner-container{display:grid;grid-template-columns:1fr min-content;gap:.2em}.select2-inner-container.search-focused{color:invert(var(--select2-color-item-text));background-color:var(--select2-color-background);border-color:var(--select2-color-focused-border);outline:0;box-shadow:0 0 0 .1rem var(--select2-color-focused-shadow)}.simple-selection .select2-selection-container{display:grid;grid-auto-columns:100%}.simple-selection .select2-selection-container>*{grid-area:1 / 1}.simple-selection .select2-selected{width:100%;padding:0}.simple-selection input.transparent{opacity:0}.multiple-selection .select2-selected{color:var(--select2-color-item-text);background-color:var(--select2-color-item-background);padding:.1em .4em;border-radius:.25em;max-width:100%}.select2-selection-container{width:100%;display:flex;flex-flow:row wrap;align-items:baseline;justify-content:flex-start;gap:.2em;list-style-type:none;padding:0;margin:0}.select2-selected{display:inline-flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;gap:.2em;padding:.25em}.select2-input-container{flex-grow:1}.select2-input-container input{background-color:transparent;border:none;outline:none;padding:0;width:100%}.select2-icon{color:inherit;cursor:pointer;font-size:1em;z-index:5;display:grid}.select2-icon:is(button){background-color:transparent;border:0;outline:0;padding:0}.select2-selected-item{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.readonly{background-color:var(--select2-color-disabled)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.IqSelect2ResultsComponent, selector: "iq-select2-results", inputs: ["items", "maxResults", "messageMoreResults", "messageNoResults", "resultsVisible", "selectedItems", "templateRef"], outputs: ["onItemSelected"] }] }); }
309
278
  }
310
279
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: IqSelect2Component, decorators: [{
311
280
  type: Component,
312
- args: [{ selector: 'iq-select2', providers: [VALUE_ACCESSOR], template: "<div class=\"select2-container\">\r\n <ul (click)=\"focusAndShowResults()\"\r\n [class]=\"getCss()\"\r\n [class.simple-selection]=\"!multiple\"\r\n [class.multiple-selection]=\"multiple\"\r\n [class.search-focused]=\"searchFocused\"\r\n [class.readonly]=\"disabled\">\r\n\r\n <ng-container *ngIf=\"!searchFocused || multiple\">\r\n <li *ngFor=\"let item of selectedItems\"\r\n [class]=\"'select2-selected ' + getBadgeColor()\"\r\n [class.badge]=\"multiple\">\r\n\r\n <span class=\"selectedItemText\">{{item.text}}</span>\r\n <div *ngIf=\"!disabled\" class=\"select2-selection-remove\" (click)=\"removeItem(item)\">\r\n <i *ngIf=\"deleteIcon\" [class]=\"deleteIcon\"></i>\r\n <button *ngIf=\"!deleteIcon\" (click)=\"removeItem(item)\" type=\"button\" class=\"btn-close\" [class.btn-close-white]=\"multiple\" aria-label=\"Close\"></button>\r\n </div>\r\n\r\n </li>\r\n </ng-container>\r\n <li class=\"select2-input\">\r\n <input #termInput type=\"text\"\r\n [placeholder]=\"getPlaceholder()\"\r\n [formControl]=\"term\"\r\n [class.transparent]=\"!multiple && selectedItems.length > 0 && !searchFocused\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keyup)=\"onKeyUp($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (keypress)=\"onKeyPress($event)\"\r\n *ngIf=\"!disabled\"/>\r\n </li>\r\n\r\n <div *ngIf=\"!disabled && (multiple || (!multiple && selectedItems.length === 0))\" class=\"caret\">\r\n <span *ngIf=\"!searchIcon\" class=\"caret-symbol\">&#9660;</span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength===0\"\r\n (click)=\"focusAndShowResults()\"></span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength!==0\"></span>\r\n </div>\r\n\r\n </ul>\r\n\r\n <div class=\"results-container\" *ngIf=\"resultsVisible\">\r\n <span class=\"results-msg\" *ngIf=\"listData && (listData.length + selectedItems.length) < resultsCount\">\r\n {{getCountMessage()}}\r\n </span>\r\n <span class=\"results-msg no-results-msg\" *ngIf=\"searchFocused && listData && listData.length === 0\">\r\n {{messages && messages.noResultsAvailableMsg ? messages.noResultsAvailableMsg : NO_RESULTS_MSG}}\r\n </span>\r\n <iq-select2-results #results [selectedItems]=\"selectedItems\" [items]=\"listData\"\r\n (itemSelectedEvent)=\"onItemSelected($event);\"\r\n [templateRef]=\"templateRef\"\r\n [searchFocused]=\"searchFocused\"></iq-select2-results>\r\n </div>\r\n</div>\r\n", styles: ["ul{list-style-type:none;position:relative}ul li{display:inline-block}ul.simple-selection li{display:block}input{border:none;padding:0}input:focus{outline:none}.simple-selection input.transparent{opacity:0;position:absolute;inset:0 30px 0 0}.form-control-sm ul,.form-control-lg ul{padding:2px 8px}.caret{position:absolute;right:8px;font-size:8px;top:0;bottom:0;line-height:38px}.form-control-sm .caret{line-height:31px}.form-control-lg .caret{line-height:48px;right:12px}.select2-container{position:relative}.results-container{position:absolute;margin-top:-6px;width:100%;z-index:3}div.select2-selection-remove{position:absolute;right:10px;top:0;display:inline-block}.multiple-selection .select2-selected{margin:0 1px 2px;--bs-badge-font-size: 1em;display:inline-flex;align-items:center;gap:.2em}.multiple-selection div.select2-selection-remove{position:relative;right:initial}div.select2-selection-remove:hover{cursor:pointer}.multiple-selection div.select2-selection-remove{display:flex;align-items:center}div.select2-selection-remove .btn-close{width:.3em;height:.3em;padding:.2em}.select2-container .search-focused{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem #007bff40}.results-msg{display:block;position:relative;margin-top:-10px;margin-bottom:10px;font-size:.8em;padding:3px 5px;border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-bottom:1px solid #ced4da;background:#fafafa}.readonly{background-color:#eaecf0}\n"] }]
281
+ args: [{ selector: 'iq-select2', providers: [VALUE_ACCESSOR], template: "<div class=\"select2-container\">\r\n <div\r\n class=\"select2-inner-container\" [ngClass]=\"inputContainerClass ? inputContainerClass : ''\"\r\n [class.simple-selection]=\"!multiple\" [class.multiple-selection]=\"multiple\"\r\n [class.search-focused]=\"searchFocused\" [class.readonly]=\"disabled\"\r\n (click)=\"focusAndShowResults()\"\r\n >\r\n <ul class=\"select2-selection-container\">\r\n <ng-container *ngIf=\"!searchFocused || multiple\">\r\n <li *ngFor=\"let item of selectedItems\" class=\"select2-selected\">\r\n <span class=\"select2-selected-item\" [ngStyle]=\"{whitespace: wrapSelectedText}\" [title]=\"item.text\">{{item.text}}</span>\r\n <button *ngIf=\"!disabled\" class=\"select2-icon\" aria-label=\"Close\" (click)=\"removeItem(item)\">\r\n <span class=\"select2-selection-remove\" [innerHTML]=\"iconDelete\"></span>\r\n </button>\r\n </li>\r\n </ng-container>\r\n\r\n <li class=\"select2-input-container\">\r\n <input #termInput *ngIf=\"!disabled\" [formControl]=\"term\" type=\"text\" [placeholder]=\"getPlaceholder()\"\r\n [class.transparent]=\"!multiple && selectedItems.length > 0 && !searchFocused\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\"\r\n />\r\n </li>\r\n </ul>\r\n\r\n <div *ngIf=\"!disabled && (multiple || (!multiple && selectedItems.length === 0))\" class=\"select2-icon\">\r\n <span class=\"select2-selection-caret\" [innerHTML]=\"iconCaret\"></span>\r\n </div>\r\n </div>\r\n\r\n <iq-select2-results #results [resultsVisible]=\"resultsVisible\"\r\n [items]=\"listData\" [selectedItems]=\"selectedItems\" [maxResults]=\"maxResults\"\r\n [messageMoreResults]=\"messageMoreResults\" [messageNoResults]=\"messageNoResults\"\r\n [templateRef]=\"templateRef\" (onItemSelected)=\"onItemSelected($event);\"\r\n >\r\n </iq-select2-results>\r\n</div>\r\n", styles: [".select2-container{position:relative;width:100%;--select2-color-background: hsl(0, 0%, 96%);--select2-color-border: hsl(0, 0%, 90%);--select2-color-disabled: hsl(220, 20%, 90%);--select2-color-focused-border: hsl(220, 100%, 80%);--select2-color-focused-shadow: hsla(220, 80%, 40%);--select2-color-scrollbar-track: hsl(0, 0%, 90%);--select2-color-scrollbar-thumb: hsl(220, 25%, 25%);--select2-color-item-text: hsl(0, 0%, 96%);--select2-color-item-background: hsl(200, 90%, 50%);--select2-color-list-active: hsl(200, 70%, 70%);--select2-color-list-selected: hsl(200, 70%, 50%)}.select2-inner-container{display:grid;grid-template-columns:1fr min-content;gap:.2em}.select2-inner-container.search-focused{color:invert(var(--select2-color-item-text));background-color:var(--select2-color-background);border-color:var(--select2-color-focused-border);outline:0;box-shadow:0 0 0 .1rem var(--select2-color-focused-shadow)}.simple-selection .select2-selection-container{display:grid;grid-auto-columns:100%}.simple-selection .select2-selection-container>*{grid-area:1 / 1}.simple-selection .select2-selected{width:100%;padding:0}.simple-selection input.transparent{opacity:0}.multiple-selection .select2-selected{color:var(--select2-color-item-text);background-color:var(--select2-color-item-background);padding:.1em .4em;border-radius:.25em;max-width:100%}.select2-selection-container{width:100%;display:flex;flex-flow:row wrap;align-items:baseline;justify-content:flex-start;gap:.2em;list-style-type:none;padding:0;margin:0}.select2-selected{display:inline-flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;gap:.2em;padding:.25em}.select2-input-container{flex-grow:1}.select2-input-container input{background-color:transparent;border:none;outline:none;padding:0;width:100%}.select2-icon{color:inherit;cursor:pointer;font-size:1em;z-index:5;display:grid}.select2-icon:is(button){background-color:transparent;border:0;outline:0;padding:0}.select2-selected-item{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.readonly{background-color:var(--select2-color-disabled)}\n"] }]
313
282
  }], ctorParameters: function () { return []; }, propDecorators: { dataSourceProvider: [{
314
283
  type: Input
315
284
  }], selectedProvider: [{
@@ -320,27 +289,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImpor
320
289
  type: Input
321
290
  }], multiple: [{
322
291
  type: Input
323
- }], searchDelay: [{
324
- type: Input
325
- }], css: [{
292
+ }], inputContainerClass: [{
326
293
  type: Input
327
294
  }], placeholder: [{
328
295
  type: Input
329
- }], minimumInputLength: [{
330
- type: Input
331
296
  }], disabled: [{
332
297
  type: Input
333
- }], searchIcon: [{
298
+ }], maxResults: [{
334
299
  type: Input
335
- }], deleteIcon: [{
300
+ }], clientMode: [{
336
301
  type: Input
337
- }], messages: [{
302
+ }], badgeColor: [{
338
303
  type: Input
339
- }], resultsCount: [{
304
+ }], wrapSelectedText: [{
340
305
  type: Input
341
- }], clientMode: [{
306
+ }], debounceDelay: [{
342
307
  type: Input
343
- }], badgeColor: [{
308
+ }], debounceLength: [{
309
+ type: Input
310
+ }], iconCaret: [{
311
+ type: Input
312
+ }], iconDelete: [{
313
+ type: Input
314
+ }], messageMoreResults: [{
315
+ type: Input
316
+ }], messageNoResults: [{
344
317
  type: Input
345
318
  }], onSelect: [{
346
319
  type: Output
@@ -353,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImpor
353
326
  type: ViewChild,
354
327
  args: ['results']
355
328
  }] } });
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEtc2VsZWN0Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhILE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQzdGLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRXpHLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sY0FBYyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFB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Q0FBQyxFQUFFLENBQUM7SUFDeEQsQ0FBQzs4R0F2VlEsa0JBQWtCO2tHQUFsQixrQkFBa0IsOGpCQUZoQixDQUFDLGNBQWMsQ0FBQyx1TkN6Qi9CLG03RkF3REE7OzJGRDdCYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0ksWUFBWSxhQUdYLENBQUMsY0FBYyxDQUFDOzBFQU9sQixrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ3lCLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVztnQkFDQSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtJcVNlbGVjdDJJdGVtfSBmcm9tICcuL2lxLXNlbGVjdDItaXRlbSc7XHJcbmltcG9ydCB7SXFTZWxlY3QyUmVzdWx0c0NvbXBvbmVudH0gZnJvbSAnLi4vaXEtc2VsZWN0Mi1yZXN1bHRzL2lxLXNlbGVjdDItcmVzdWx0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TWVzc2FnZXN9IGZyb20gJy4vbWVzc2FnZXMnO1xyXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5jb25zdCBLRVlfQ09ERV9ET1dOX0FSUk9XID0gNDA7XHJcbmNvbnN0IEtFWV9DT0RFX1VQX0FSUk9XID0gMzg7XHJcbmNvbnN0IEtFWV9DT0RFX0VOVEVSID0gMTM7XHJcbmNvbnN0IEtFWV9DT0RFX1RBQiA9IDk7XHJcbmNvbnN0IEtFWV9DT0RFX0RFTEVURSA9IDg7XHJcbmNvbnN0IFZBTFVFX0FDQ0VTU09SID0ge1xyXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJcVNlbGVjdDJDb21wb25lbnQpLFxyXG4gICAgbXVsdGk6IHRydWVcclxufTtcclxuY29uc3Qgbm9vcCA9ICgpID0+IHtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdpcS1zZWxlY3QyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9pcS1zZWxlY3QyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2lxLXNlbGVjdDIuY29tcG9uZW50LmNzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbVkFMVUVfQUNDRVNTT1JdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJcVNlbGVjdDJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgTU9SRV9SRVNVTFRTX01TRyA9ICdTaG93aW5nICcgKyBNZXNzYWdlcy5QQVJUSUFMX0NPVU5UX1ZBUiArICcgb2YgJyArIE1lc3NhZ2VzLlRPVEFMX0NPVU5UX1ZBUiArICcgcmVzdWx0cy4gUmVmaW5lIHlvdXIgc2VhcmNoIHRvIHNob3cgbW9yZSByZXN1bHRzLic7XHJcbiAgICBOT19SRVNVTFRTX01TRyA9ICdObyByZXN1bHRzIGF2YWlsYWJsZSc7XHJcblxyXG4gICAgQElucHV0KCkgZGF0YVNvdXJjZVByb3ZpZGVyOiAodGVybTogc3RyaW5nLCBzZWxlY3RlZD86IGFueVtdKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkUHJvdmlkZXI6IChpZHM6IHN0cmluZ1tdKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICAgIEBJbnB1dCgpIGlxU2VsZWN0Mkl0ZW1BZGFwdGVyOiAoZW50aXR5OiBhbnkpID0+IElxU2VsZWN0Mkl0ZW07XHJcbiAgICBASW5wdXQoKSByZWZlcmVuY2VNb2RlOiAnaWQnIHwgJ2VudGl0eScgPSAnaWQnO1xyXG4gICAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNlYXJjaERlbGF5ID0gMjUwO1xyXG4gICAgQElucHV0KCkgY3NzOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xyXG4gICAgQElucHV0KCkgbWluaW11bUlucHV0TGVuZ3RoID0gMjtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZWFyY2hJY29uO1xyXG4gICAgQElucHV0KCkgZGVsZXRlSWNvbjtcclxuICAgIEBJbnB1dCgpIG1lc3NhZ2VzOiBNZXNzYWdlcyA9IHtcclxuICAgICAgICBtb3JlUmVzdWx0c0F2YWlsYWJsZU1zZzogdGhpcy5NT1JFX1JFU1VMVFNfTVNHLFxyXG4gICAgICAgIG5vUmVzdWx0c0F2YWlsYWJsZU1zZzogdGhpcy5OT19SRVNVTFRTX01TR1xyXG4gICAgfTtcclxuICAgIEBJbnB1dCgpIHJlc3VsdHNDb3VudDtcclxuICAgIEBJbnB1dCgpIGNsaWVudE1vZGUgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGJhZGdlQ29sb3IgPSAnaW5mbyc7XHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8SXFTZWxlY3QySXRlbT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlbW92ZTogRXZlbnRFbWl0dGVyPElxU2VsZWN0Mkl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPigpO1xyXG4gICAgQFZpZXdDaGlsZCgndGVybUlucHV0JykgcHJpdmF0ZSB0ZXJtSW5wdXQ7XHJcbiAgICBAVmlld0NoaWxkKCdyZXN1bHRzJykgcmVzdWx0czogSXFTZWxlY3QyUmVzdWx0c0NvbXBvbmVudDtcclxuICAgIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgdGVybSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgIHJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICBsaXN0RGF0YTogSXFTZWxlY3QySXRlbVtdO1xyXG4gICAgZnVsbERhdGFMaXN0OiBJcVNlbGVjdDJJdGVtW107XHJcbiAgICBzZWxlY3RlZEl0ZW1zOiBJcVNlbGVjdDJJdGVtW10gPSBbXTtcclxuICAgIHNlYXJjaEZvY3VzZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgcGxhY2Vob2xkZXJTZWxlY3RlZCA9ICcnO1xyXG4gICAgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xyXG4gICAgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9DaGFuZ2VzQW5kTG9hZERhdGFGcm9tT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWRWYWx1ZXM6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZWZlcmVuY2VNb2RlID09PSAnaWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVJdGVtc0Zyb21FbnRpdGllcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0NoYW5nZXNBbmRMb2FkRGF0YUZyb21PYnNlcnZhYmxlKCkge1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLnRlcm0udmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLnNlYXJjaERlbGF5KSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1Jlc3VsdHMob2JzZXJ2YWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1Jlc3VsdHMob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxzdHJpbmc+KTogdm9pZCB7XHJcbiAgICAgICAgb2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlKSxcclxuICAgICAgICAgICAgZmlsdGVyKCh0ZXJtKSA9PiB0ZXJtLmxlbmd0aCA+PSB0aGlzLm1pbmltdW1JbnB1dExlbmd0aCksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHRoaXMubG9hZERhdGFGcm9tT2JzZXJ2YWJsZSh0ZXJtKSksXHJcbiAgICAgICAgICAgIG1hcChpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiAhKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5hbHJlYWR5U2VsZWN0ZWQoaXRlbSkpKSksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnJlc3VsdHNWaXNpYmxlID0gdGhpcy5zZWFyY2hGb2N1c2VkKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChpdGVtcykgPT4gdGhpcy5saXN0RGF0YSA9IGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWREYXRhRnJvbU9ic2VydmFibGUodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnRNb2RlID8gdGhpcy5mZXRjaEFuZGZpbHRlckxvY2FsRGF0YSh0ZXJtKSA6IHRoaXMuZmV0Y2hEYXRhKHRlcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmV0Y2hBbmRmaWx0ZXJMb2NhbERhdGEodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZnVsbERhdGFMaXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoRGF0YSgnJykucGlwZShcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChpdGVtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnVsbERhdGFMaXN0ID0gaXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyTG9jYWxEYXRhKHRlcm0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJMb2NhbERhdGEodGVybSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsdGVyTG9jYWxEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8SXFTZWxlY3QySXRlbVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuZnVsbERhdGFMaXN0LmZpbHRlcigoaXRlbSkgPT4gdGhpcy5jb250YWluc1RleHQoaXRlbSwgdGVybSkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnRhaW5zVGV4dChpdGVtLCB0ZXJtOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS50ZXh0LnRvVXBwZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvVXBwZXJDYXNlKCkpICE9PSAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZldGNoRGF0YSh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElxU2VsZWN0Mkl0ZW1bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5kYXRhU291cmNlUHJvdmlkZXIodGVybSwgdGhpcy5idWlsZFZhbHVlKCkpXHJcbiAgICAgICAgICAgIC5waXBlKG1hcCgoaXRlbXM6IGFueVtdKSA9PiB0aGlzLmFkYXB0SXRlbXMoaXRlbXMpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGFwdEl0ZW1zKGl0ZW1zOiBhbnlbXSk6IElxU2VsZWN0Mkl0ZW1bXSB7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkSXRlbXMgPSBbXTtcclxuICAgICAgICBpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIoaXRlbSkpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChpcVNlbGVjdDJJdGVtKSA9PiBjb252ZXJ0ZWRJdGVtcy5wdXNoKGlxU2VsZWN0Mkl0ZW0pKTtcclxuICAgICAgICByZXR1cm4gY29udmVydGVkSXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwb3B1bGF0ZUl0ZW1zRnJvbUVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpcVNlbGVjdDJJdGVtID0gdGhpcy5pcVNlbGVjdDJJdGVtQWRhcHRlcihzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtpcVNlbGVjdDJJdGVtXTtcclxuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gaXFTZWxlY3QySXRlbS50ZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgICAgICBzZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIoZW50aXR5KTtcclxuICAgICAgICAgICAgY29uc3QgaWRzID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlkcy5pbmRleE9mKGl0ZW0uaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVTaW5nbGVXaXRoSWQoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkVmFsdWVzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RlZFByb3ZpZGVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdW5pcXVlSWRzID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVzLmZvckVhY2goKGlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pcXVlSWRzLmluZGV4T2YoaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZUlkcy5wdXNoKGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmlkZXIodW5pcXVlSWRzKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gaXRlbXMubWFwKHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVTaW5nbGVXaXRoSWQoaWQ6IGFueSkge1xyXG4gICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRQcm92aWRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aWRlcihbaWRdKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlxU2VsZWN0Mkl0ZW0gPSB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtpcVNlbGVjdDJJdGVtXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSBpcVNlbGVjdDJJdGVtLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWxyZWFkeVNlbGVjdGVkKGl0ZW06IElxU2VsZWN0Mkl0ZW0pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goc2VsZWN0ZWRJdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbS5pZCA9PT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgb25JdGVtU2VsZWN0ZWQoaXRlbTogSXFTZWxlY3QySXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdERhdGEuaW5kZXhPZihpdGVtLCAwKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmJ1aWxkVmFsdWUoKSk7XHJcbiAgICAgICAgdGhpcy50ZXJtLnBhdGNoVmFsdWUoJycsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzKCksIDEpO1xyXG4gICAgICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoaXRlbSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IGl0ZW0udGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZElkcygpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaWRzLnB1c2goaXRlbS5pZCkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGlkcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RW50aXRpZXMoKTogYW55W10ge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVudGl0aWVzID0gW107XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGVudGl0aWVzLnB1c2goaXRlbS5lbnRpdHkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBlbnRpdGllcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uZW50aXR5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVJdGVtKGl0ZW06IElxU2VsZWN0Mkl0ZW0pIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0sIDApO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmJ1aWxkVmFsdWUoKSk7XHJcbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KGl0ZW0pO1xyXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiAnaWQnID09PSB0aGlzLnJlZmVyZW5jZU1vZGUgPyB0aGlzLmdldFNlbGVjdGVkSWRzKCkgOiB0aGlzLmdldEVudGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb2N1cygpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1cigpIHtcclxuICAgICAgICB0aGlzLnRlcm0ucGF0Y2hWYWx1ZSgnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRlcm1JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gIXRoaXMuZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXNBbmRTaG93UmVzdWx0cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy50ZXJtSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvUmVzdWx0cyhvZignJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSAhdGhpcy5kaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBvbktleVVwKGV2KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0cykge1xyXG4gICAgICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRE9XTl9BUlJPVykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZU5leHQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9VUF9BUlJPVykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZVByZXZpb3VzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cy5zZWxlY3RDdXJyZW50SXRlbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWluaW11bUlucHV0TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIgfHwgZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRE9XTl9BUlJPVykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTaG93UmVzdWx0cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5RG93bihldikge1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFX1RBQikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLnNlbGVjdEN1cnJlbnRJdGVtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9ERUxFVEUpIHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dEVudGVyZWQgPSAhdGhpcy50ZXJtLnZhbHVlIHx8IHRoaXMudGVybS52YWx1ZS5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0RW50ZXJlZCAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5UHJlc3MoZXYpIHtcclxuICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIpIHtcclxuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3NzKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdzZWxlY3QyLXNlbGVjdGlvbi1jb250YWluZXIgJyArICh0aGlzLmNzcyA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzLmNzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgPyB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgOiB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvdW50TWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBtc2cgPSB0aGlzLm1lc3NhZ2VzICYmIHRoaXMubWVzc2FnZXMubW9yZVJlc3VsdHNBdmFpbGFibGVNc2cgPyB0aGlzLm1lc3NhZ2VzLm1vcmVSZXN1bHRzQXZhaWxhYmxlTXNnIDogdGhpcy5NT1JFX1JFU1VMVFNfTVNHO1xyXG4gICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKE1lc3NhZ2VzLlBBUlRJQUxfQ09VTlRfVkFSLCBTdHJpbmcodGhpcy5saXN0RGF0YS5sZW5ndGgpKTtcclxuICAgICAgICBtc2cgPSBtc2cucmVwbGFjZShNZXNzYWdlcy5UT1RBTF9DT1VOVF9WQVIsIFN0cmluZyh0aGlzLnJlc3VsdHNDb3VudCAtIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpKTtcclxuICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhZGdlQ29sb3IoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICdiZy0nICsgdGhpcy5iYWRnZUNvbG9yIDogJyc7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzZWxlY3QyLWNvbnRhaW5lclwiPlxyXG4gICAgPHVsIChjbGljayk9XCJmb2N1c0FuZFNob3dSZXN1bHRzKClcIlxyXG4gICAgICAgIFtjbGFzc109XCJnZXRDc3MoKVwiXHJcbiAgICAgICAgW2NsYXNzLnNpbXBsZS1zZWxlY3Rpb25dPVwiIW11bHRpcGxlXCJcclxuICAgICAgICBbY2xhc3MubXVsdGlwbGUtc2VsZWN0aW9uXT1cIm11bHRpcGxlXCJcclxuICAgICAgICBbY2xhc3Muc2VhcmNoLWZvY3VzZWRdPVwic2VhcmNoRm9jdXNlZFwiXHJcbiAgICAgICAgW2NsYXNzLnJlYWRvbmx5XT1cImRpc2FibGVkXCI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VhcmNoRm9jdXNlZCB8fCBtdWx0aXBsZVwiPlxyXG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ3NlbGVjdDItc2VsZWN0ZWQgJyArIGdldEJhZGdlQ29sb3IoKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYmFkZ2VdPVwibXVsdGlwbGVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdGVkSXRlbVRleHRcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkaXNhYmxlZFwiIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb24tcmVtb3ZlXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImRlbGV0ZUljb25cIiBbY2xhc3NdPVwiZGVsZXRlSWNvblwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWRlbGV0ZUljb25cIiAoY2xpY2spPVwicmVtb3ZlSXRlbShpdGVtKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIFtjbGFzcy5idG4tY2xvc2Utd2hpdGVdPVwibXVsdGlwbGVcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJzZWxlY3QyLWlucHV0XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCAjdGVybUlucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRQbGFjZWhvbGRlcigpXCJcclxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0ZXJtXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy50cmFuc3BhcmVudF09XCIhbXVsdGlwbGUgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmICFzZWFyY2hGb2N1c2VkXCJcclxuICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib25LZXlQcmVzcygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpc2FibGVkXCIvPlxyXG4gICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZGlzYWJsZWQgJiYgKG11bHRpcGxlIHx8ICghbXVsdGlwbGUgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApKVwiIGNsYXNzPVwiY2FyZXRcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhc2VhcmNoSWNvblwiIGNsYXNzPVwiY2FyZXQtc3ltYm9sXCI+JiM5NjYwOzwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cInNlYXJjaEljb25cIiAqbmdJZj1cInNlYXJjaEljb24gJiYgbWluaW11bUlucHV0TGVuZ3RoPT09MFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb2N1c0FuZFNob3dSZXN1bHRzKClcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJzZWFyY2hJY29uXCIgKm5nSWY9XCJzZWFyY2hJY29uICYmIG1pbmltdW1JbnB1dExlbmd0aCE9PTBcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicmVzdWx0cy1jb250YWluZXJcIiAqbmdJZj1cInJlc3VsdHNWaXNpYmxlXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXN1bHRzLW1zZ1wiICpuZ0lmPVwibGlzdERhdGEgJiYgKGxpc3REYXRhLmxlbmd0aCArIHNlbGVjdGVkSXRlbXMubGVuZ3RoKSA8IHJlc3VsdHNDb3VudFwiPlxyXG4gICAgICAgICAgICB7e2dldENvdW50TWVzc2FnZSgpfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXN1bHRzLW1zZyBuby1yZXN1bHRzLW1zZ1wiICpuZ0lmPVwic2VhcmNoRm9jdXNlZCAmJiBsaXN0RGF0YSAmJiBsaXN0RGF0YS5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAge3ttZXNzYWdlcyAmJiBtZXNzYWdlcy5ub1Jlc3VsdHNBdmFpbGFibGVNc2cgPyBtZXNzYWdlcy5ub1Jlc3VsdHNBdmFpbGFibGVNc2cgOiBOT19SRVNVTFRTX01TR319XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxpcS1zZWxlY3QyLXJlc3VsdHMgI3Jlc3VsdHMgW3NlbGVjdGVkSXRlbXNdPVwic2VsZWN0ZWRJdGVtc1wiIFtpdGVtc109XCJsaXN0RGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbVNlbGVjdGVkRXZlbnQpPVwib25JdGVtU2VsZWN0ZWQoJGV2ZW50KTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGb2N1c2VkXT1cInNlYXJjaEZvY3VzZWRcIj48L2lxLXNlbGVjdDItcmVzdWx0cz5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEtc2VsZWN0Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFlLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVwSSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUM3RixPQUFPLEVBQXVCLGlCQUFpQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RyxPQUFPLFFBQVEsTUFBTSxZQUFZLENBQUM7Ozs7O0FBRWxDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFB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YUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRXlCLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVztnQkFDQSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtJcVNlbGVjdDJJdGVtfSBmcm9tICcuL2lxLXNlbGVjdDItaXRlbSc7XHJcbmltcG9ydCB7SXFTZWxlY3QyUmVzdWx0c0NvbXBvbmVudH0gZnJvbSAnLi4vaXEtc2VsZWN0Mi1yZXN1bHRzL2lxLXNlbGVjdDItcmVzdWx0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IE1lc3NhZ2VzIGZyb20gXCIuL21lc3NhZ2VzXCI7XHJcblxyXG5jb25zdCBLRVlfQ09ERV9ET1dOX0FSUk9XID0gNDA7XHJcbmNvbnN0IEtFWV9DT0RFX1VQX0FSUk9XID0gMzg7XHJcbmNvbnN0IEtFWV9DT0RFX0VOVEVSID0gMTM7XHJcbmNvbnN0IEtFWV9DT0RFX1RBQiA9IDk7XHJcbmNvbnN0IEtFWV9DT0RFX0RFTEVURSA9IDg7XHJcbmNvbnN0IFZBTFVFX0FDQ0VTU09SID0ge1xyXG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElxU2VsZWN0MkNvbXBvbmVudCksXHJcbiAgbXVsdGk6IHRydWVcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaXEtc2VsZWN0MicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lxLXNlbGVjdDIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lxLXNlbGVjdDIuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1ZBTFVFX0FDQ0VTU09SXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXFTZWxlY3QyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICBASW5wdXQoKSBkYXRhU291cmNlUHJvdmlkZXI6ICh0ZXJtOiBzdHJpbmcsIHNlbGVjdGVkPzogYW55W10pID0+IE9ic2VydmFibGU8YW55W10+O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkUHJvdmlkZXI6IChpZHM6IHN0cmluZ1tdKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICBASW5wdXQoKSBpcVNlbGVjdDJJdGVtQWRhcHRlcjogKGVudGl0eTogYW55KSA9PiBJcVNlbGVjdDJJdGVtO1xyXG5cclxuICBASW5wdXQoKSByZWZlcmVuY2VNb2RlOiAnaWQnIHwgJ2VudGl0eScgPSAnaWQnO1xyXG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5wdXRDb250YWluZXJDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtYXhSZXN1bHRzOiBudW1iZXI7XHJcbiAgQElucHV0KCkgY2xpZW50TW9kZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGJhZGdlQ29sb3IgPSAnaW5mbyc7XHJcbiAgQElucHV0KCkgd3JhcFNlbGVjdGVkVGV4dCA9ICdpbml0aWFsJ1xyXG5cclxuICBASW5wdXQoKSBkZWJvdW5jZURlbGF5ID0gMjUwXHJcbiAgQElucHV0KCkgZGVib3VuY2VMZW5ndGggPSAyXHJcbiAgQElucHV0KCkgaWNvbkNhcmV0ID0gJyYjOTY2MDsnXHJcbiAgQElucHV0KCkgaWNvbkRlbGV0ZSA9ICcmIzIxNTsnXHJcbiAgQElucHV0KCkgbWVzc2FnZU1vcmVSZXN1bHRzOiBzdHJpbmcgPSBNZXNzYWdlcy5NT1JFX1JFU1VMVFM7XHJcbiAgQElucHV0KCkgbWVzc2FnZU5vUmVzdWx0czogc3RyaW5nID0gTWVzc2FnZXMuTk9fUkVTVUxUUztcclxuXHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8SXFTZWxlY3QySXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPElxU2VsZWN0Mkl0ZW0+KCk7XHJcbiAgQE91dHB1dCgpIG9uUmVtb3ZlOiBFdmVudEVtaXR0ZXI8SXFTZWxlY3QySXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPElxU2VsZWN0Mkl0ZW0+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Rlcm1JbnB1dCcpIHByaXZhdGUgdGVybUlucHV0OiBFbGVtZW50UmVmXHJcbiAgQFZpZXdDaGlsZCgncmVzdWx0cycpIHJlc3VsdHM6IElxU2VsZWN0MlJlc3VsdHNDb21wb25lbnQ7XHJcblxyXG4gIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHRlcm0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgcmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICBsaXN0RGF0YTogSXFTZWxlY3QySXRlbVtdID0gW11cclxuICBmdWxsRGF0YUxpc3Q6IElxU2VsZWN0Mkl0ZW1bXTtcclxuICBzZWxlY3RlZEl0ZW1zOiBJcVNlbGVjdDJJdGVtW10gPSBbXTtcclxuICBzZWFyY2hGb2N1c2VkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBwbGFjZWhvbGRlclNlbGVjdGVkID0gJyc7XHJcblxyXG4gIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gKCkgPT4gZmFsc2VcclxuICBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gKCkgPT4gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXNBbmRMb2FkRGF0YUZyb21PYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHNlbGVjdGVkVmFsdWVzOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChzZWxlY3RlZFZhbHVlcykge1xyXG4gICAgICBpZiAodGhpcy5yZWZlcmVuY2VNb2RlID09PSAnaWQnKSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUl0ZW1zRnJvbUlkcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUl0ZW1zRnJvbUVudGl0aWVzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gJyc7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZVRvQ2hhbmdlc0FuZExvYWREYXRhRnJvbU9ic2VydmFibGUoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvUmVzdWx0cyh0aGlzLnRlcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VEZWxheSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9SZXN1bHRzKG9ic2VydmFibGU6IE9ic2VydmFibGU8c3RyaW5nPik6IHZvaWQge1xyXG4gICAgb2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICB0YXAoKCkgPT4gdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlKSxcclxuICAgICAgZmlsdGVyKCh0ZXJtKSA9PiB0ZXJtLmxlbmd0aCA+PSB0aGlzLmRlYm91bmNlTGVuZ3RoKSxcclxuICAgICAgc3dpdGNoTWFwKHRlcm0gPT4gdGhpcy5sb2FkRGF0YUZyb21PYnNlcnZhYmxlKHRlcm0pKSxcclxuICAgICAgbWFwKGl0ZW1zID0+IGl0ZW1zLmZpbHRlcihpdGVtID0+ICEodGhpcy5tdWx0aXBsZSAmJiB0aGlzLmFscmVhZHlTZWxlY3RlZChpdGVtKSkpKSxcclxuICAgICAgdGFwKCgpID0+IHRoaXMucmVzdWx0c1Zpc2libGUgPSB0aGlzLnNlYXJjaEZvY3VzZWQpXHJcbiAgICApLnN1YnNjcmliZSgoaXRlbXMpID0+IHRoaXMubGlzdERhdGEgPSBpdGVtcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREYXRhRnJvbU9ic2VydmFibGUodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmNsaWVudE1vZGUgPyB0aGlzLmZldGNoQW5kZmlsdGVyTG9jYWxEYXRhKHRlcm0pIDogdGhpcy5mZXRjaERhdGEodGVybSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoQW5kZmlsdGVyTG9jYWxEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8SXFTZWxlY3QySXRlbVtdPiB7XHJcbiAgICBpZiAoIXRoaXMuZnVsbERhdGFMaXN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZldGNoRGF0YSgnJykucGlwZShcclxuICAgICAgICBtZXJnZU1hcCgoaXRlbXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuZnVsbERhdGFMaXN0ID0gaXRlbXM7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJMb2NhbERhdGEodGVybSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckxvY2FsRGF0YSh0ZXJtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyTG9jYWxEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8SXFTZWxlY3QySXRlbVtdPiB7XHJcbiAgICByZXR1cm4gb2YodGhpcy5mdWxsRGF0YUxpc3QuZmlsdGVyKChpdGVtKSA9PiB0aGlzLmNvbnRhaW5zVGV4dChpdGVtLCB0ZXJtKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb250YWluc1RleHQoaXRlbSwgdGVybTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gaXRlbS50ZXh0LnRvVXBwZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvVXBwZXJDYXNlKCkpICE9PSAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmV0Y2hEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8SXFTZWxlY3QySXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlUHJvdmlkZXIodGVybSwgdGhpcy5idWlsZFZhbHVlKCkpLnBpcGUobWFwKChpdGVtczogYW55W10pID0+IGl0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5pcVNlbGVjdDJJdGVtQWRhcHRlcihpdGVtKSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9wdWxhdGVJdGVtc0Zyb21FbnRpdGllcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGlxU2VsZWN0Mkl0ZW0gPSB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW2lxU2VsZWN0Mkl0ZW1dO1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSBpcVNlbGVjdDJJdGVtLnRleHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG5cclxuICAgIHNlbGVjdGVkVmFsdWVzLmZvckVhY2goKGVudGl0eSkgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5pcVNlbGVjdDJJdGVtQWRhcHRlcihlbnRpdHkpO1xyXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XHJcblxyXG4gICAgICBpZiAoaWRzLmluZGV4T2YoaXRlbS5pZCkgPT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUl0ZW1zRnJvbUlkcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhhbmRsZVNpbmdsZVdpdGhJZChzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICBpZiAoc2VsZWN0ZWRWYWx1ZXMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkUHJvdmlkZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCB1bmlxdWVJZHMgPSBbXTtcclxuICAgICAgc2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoaWQpID0+IHtcclxuICAgICAgICBpZiAodW5pcXVlSWRzLmluZGV4T2YoaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgdW5pcXVlSWRzLnB1c2goaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvdmlkZXIodW5pcXVlSWRzKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGl0ZW1zLm1hcCh0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVNpbmdsZVdpdGhJZChpZDogYW55KSB7XHJcbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkUHJvdmlkZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvdmlkZXIoW2lkXSkuc3Vic2NyaWJlKChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpcVNlbGVjdDJJdGVtID0gdGhpcy5pcVNlbGVjdDJJdGVtQWRhcHRlcihpdGVtKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtpcVNlbGVjdDJJdGVtXTtcclxuICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IGlxU2VsZWN0Mkl0ZW0udGV4dDtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFscmVhZHlTZWxlY3RlZChpdGVtOiBJcVNlbGVjdDJJdGVtKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goc2VsZWN0ZWRJdGVtID0+IHtcclxuICAgICAgaWYgKHNlbGVjdGVkSXRlbS5pZCA9PT0gaXRlbS5pZCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1TZWxlY3RlZChpdGVtOiBJcVNlbGVjdDJJdGVtKSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxpc3REYXRhLmluZGV4T2YoaXRlbSwgMCk7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5saXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuYnVpbGRWYWx1ZSgpKTtcclxuICAgIHRoaXMudGVybS5wYXRjaFZhbHVlKCcnLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzKCksIDEpO1xyXG4gICAgdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5vblNlbGVjdC5lbWl0KGl0ZW0pO1xyXG5cclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSBpdGVtLnRleHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdGVkSWRzKCk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uaWQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uaWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEVudGl0aWVzKCk6IGFueVtdIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5lbnRpdHkpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uZW50aXR5O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSXRlbShpdGVtOiBJcVNlbGVjdDJJdGVtKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0sIDApO1xyXG5cclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmJ1aWxkVmFsdWUoKSk7XHJcbiAgICB0aGlzLm9uUmVtb3ZlLmVtaXQoaXRlbSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFZhbHVlKCkge1xyXG4gICAgcmV0dXJuICdpZCcgPT09IHRoaXMucmVmZXJlbmNlTW9kZSA/IHRoaXMuZ2V0U2VsZWN0ZWRJZHMoKSA6IHRoaXMuZ2V0RW50aXRpZXMoKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKCkge1xyXG4gICAgdGhpcy50ZXJtLnBhdGNoVmFsdWUoJycsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSBmYWxzZTtcclxuICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIGZvY3VzKCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMudGVybUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoRm9jdXNlZCA9ICF0aGlzLmRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNBbmRTaG93UmVzdWx0cygpIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnRlcm1JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9SZXN1bHRzKG9mKCcnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gIXRoaXMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBvbktleVVwKGV2KSB7XHJcbiAgICBpZiAodGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9ET1dOX0FSUk9XKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZU5leHQoKTtcclxuICAgICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9VUF9BUlJPVykge1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5hY3RpdmVQcmV2aW91cygpO1xyXG4gICAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFX0VOVEVSKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLnNlbGVjdEN1cnJlbnRJdGVtKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmRlYm91bmNlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFX0VOVEVSIHx8IGV2LmtleUNvZGUgPT09IEtFWV9DT0RFX0RPV05fQVJST1cpIHtcclxuICAgICAgICAgIHRoaXMuZm9jdXNBbmRTaG93UmVzdWx0cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25LZXlEb3duKGV2KSB7XHJcbiAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIpIHtcclxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9UQUIpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdHMuc2VsZWN0Q3VycmVudEl0ZW0oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9ERUxFVEUpIHtcclxuICAgICAgY29uc3QgdGV4dEVudGVyZWQgPSAhdGhpcy50ZXJtLnZhbHVlIHx8IHRoaXMudGVybS52YWx1ZS5sZW5ndGggPT09IDA7XHJcbiAgICAgIGlmICh0ZXh0RW50ZXJlZCAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbSh0aGlzLnNlbGVjdGVkSXRlbXNbdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCA/IHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA6IHRoaXMucGxhY2Vob2xkZXI7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic2VsZWN0Mi1jb250YWluZXJcIj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cInNlbGVjdDItaW5uZXItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiaW5wdXRDb250YWluZXJDbGFzcyA/IGlucHV0Q29udGFpbmVyQ2xhc3MgOiAnJ1wiXHJcbiAgICBbY2xhc3Muc2ltcGxlLXNlbGVjdGlvbl09XCIhbXVsdGlwbGVcIiBbY2xhc3MubXVsdGlwbGUtc2VsZWN0aW9uXT1cIm11bHRpcGxlXCJcclxuICAgIFtjbGFzcy5zZWFyY2gtZm9jdXNlZF09XCJzZWFyY2hGb2N1c2VkXCIgW2NsYXNzLnJlYWRvbmx5XT1cImRpc2FibGVkXCJcclxuICAgIChjbGljayk9XCJmb2N1c0FuZFNob3dSZXN1bHRzKClcIlxyXG4gID5cclxuICAgIDx1bCBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uLWNvbnRhaW5lclwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlYXJjaEZvY3VzZWQgfHwgbXVsdGlwbGVcIj5cclxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGVkLWl0ZW1cIiBbbmdTdHlsZV09XCJ7d2hpdGVzcGFjZTogd3JhcFNlbGVjdGVkVGV4dH1cIiBbdGl0bGVdPVwiaXRlbS50ZXh0XCI+e3tpdGVtLnRleHR9fTwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhZGlzYWJsZWRcIiBjbGFzcz1cInNlbGVjdDItaWNvblwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJyZW1vdmVJdGVtKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb24tcmVtb3ZlXCIgW2lubmVySFRNTF09XCJpY29uRGVsZXRlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bGkgY2xhc3M9XCJzZWxlY3QyLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbnB1dCAjdGVybUlucHV0ICpuZ0lmPVwiIWRpc2FibGVkXCIgW2Zvcm1Db250cm9sXT1cInRlcm1cIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJnZXRQbGFjZWhvbGRlcigpXCJcclxuICAgICAgICAgIFtjbGFzcy50cmFuc3BhcmVudF09XCIhbXVsdGlwbGUgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmICFzZWFyY2hGb2N1c2VkXCJcclxuICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgICAgICAoa2V5dXApPVwib25LZXlVcCgkZXZlbnQpXCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhZGlzYWJsZWQgJiYgKG11bHRpcGxlIHx8ICghbXVsdGlwbGUgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApKVwiIGNsYXNzPVwic2VsZWN0Mi1pY29uXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb24tY2FyZXRcIiBbaW5uZXJIVE1MXT1cImljb25DYXJldFwiPjwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8aXEtc2VsZWN0Mi1yZXN1bHRzICNyZXN1bHRzIFtyZXN1bHRzVmlzaWJsZV09XCJyZXN1bHRzVmlzaWJsZVwiXHJcbiAgICBbaXRlbXNdPVwibGlzdERhdGFcIiBbc2VsZWN0ZWRJdGVtc109XCJzZWxlY3RlZEl0ZW1zXCIgW21heFJlc3VsdHNdPVwibWF4UmVzdWx0c1wiXHJcbiAgICBbbWVzc2FnZU1vcmVSZXN1bHRzXT1cIm1lc3NhZ2VNb3JlUmVzdWx0c1wiIFttZXNzYWdlTm9SZXN1bHRzXT1cIm1lc3NhZ2VOb1Jlc3VsdHNcIlxyXG4gICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCIgKG9uSXRlbVNlbGVjdGVkKT1cIm9uSXRlbVNlbGVjdGVkKCRldmVudCk7XCJcclxuICA+XHJcbiAgPC9pcS1zZWxlY3QyLXJlc3VsdHM+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,8 +1,7 @@
1
- /**
2
- * Created by diego on 3/13/17.
3
- */
4
- export class Messages {
5
- static { this.PARTIAL_COUNT_VAR = '%PARTIAL_COUNT%'; }
6
- static { this.TOTAL_COUNT_VAR = '%TOTAL_COUNT%'; }
1
+ export default class Messages {
2
+ static { this.VISIBLE_COUNT_VAR = '%VISIBLE_COUNT%'; }
3
+ static { this.MAX_COUNT_VAR = '%MAX_COUNT%'; }
4
+ static { this.MORE_RESULTS = 'Showing ' + this.VISIBLE_COUNT_VAR + ' of ' + this.MAX_COUNT_VAR + ' results. Refine your search to show more results.'; }
5
+ static { this.NO_RESULTS = 'No results available'; }
7
6
  }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTthQUVELHNCQUFpQixHQUFHLGlCQUFpQixDQUFDO2FBQ3RDLG9CQUFlLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENyZWF0ZWQgYnkgZGllZ28gb24gMy8xMy8xNy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlcyB7XHJcblxyXG4gICAgc3RhdGljIHJlYWRvbmx5IFBBUlRJQUxfQ09VTlRfVkFSID0gJyVQQVJUSUFMX0NPVU5UJSc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgVE9UQUxfQ09VTlRfVkFSID0gJyVUT1RBTF9DT1VOVCUnO1xyXG5cclxuICAgIG1vcmVSZXN1bHRzQXZhaWxhYmxlTXNnPzogc3RyaW5nO1xyXG4gICAgbm9SZXN1bHRzQXZhaWxhYmxlTXNnPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE9BQU8sT0FBTyxRQUFRO2FBRVgsc0JBQWlCLEdBQUcsaUJBQWlCLENBQUM7YUFDdEMsa0JBQWEsR0FBRyxhQUFhLENBQUM7YUFFOUIsaUJBQVksR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLG9EQUFvRCxDQUFDO2FBQ3hJLGVBQVUsR0FBRyxzQkFBc0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc3NhZ2VzIHtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFZJU0lCTEVfQ09VTlRfVkFSID0gJyVWSVNJQkxFX0NPVU5UJSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1BWF9DT1VOVF9WQVIgPSAnJU1BWF9DT1VOVCUnO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTU9SRV9SRVNVTFRTID0gJ1Nob3dpbmcgJyArIHRoaXMuVklTSUJMRV9DT1VOVF9WQVIgKyAnIG9mICcgKyB0aGlzLk1BWF9DT1VOVF9WQVIgKyAnIHJlc3VsdHMuIFJlZmluZSB5b3VyIHNlYXJjaCB0byBzaG93IG1vcmUgcmVzdWx0cy4nO1xyXG4gIHN0YXRpYyByZWFkb25seSBOT19SRVNVTFRTID0gJ05vIHJlc3VsdHMgYXZhaWxhYmxlJ1xyXG5cclxufVxyXG4iXX0=