@norwegian/core-components 7.22.0 → 7.22.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ <svg width="141" height="32" viewBox="0 0 141 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M0 31.4681H10.9484C17.2427 31.4681 21.4093 27.8338 21.4093 22.2936C21.4093 18.9252 19.9466 16.6205 16.8881 15.1136C19.1044 13.651 20.2125 11.6122 20.2125 8.86427C20.2125 3.67867 16.1345 0 10.1949 0H0V31.4681ZM6.3829 25.5734V18.5706H10.8598C13.475 18.5706 14.9378 19.7673 14.9378 22.072C14.9378 24.3315 13.475 25.5734 10.8598 25.5734H6.3829ZM6.3829 12.8975V5.89474H9.70732C12.3225 5.89474 13.741 7.13574 13.741 9.39612C13.741 11.6565 12.3225 12.8975 9.70732 12.8975H6.3829ZM32.1804 31.4681V20.831C32.1804 15.867 35.1059 14.0942 38.7406 13.8283V7.97784C36.0811 8.06648 33.4216 9.17452 32.0483 11.169V8.42105H25.9314V31.4681H32.1804ZM53.0135 32C60.3273 32 65.4247 26.9474 65.4247 19.9446C65.4247 12.9862 60.3273 7.8892 53.0135 7.8892C45.6998 7.8892 40.6023 12.9862 40.6023 19.9446C40.6023 26.9474 45.6998 32 53.0135 32ZM53.0135 26.1939C49.4675 26.1939 46.9409 23.5346 46.9409 19.9446C46.9409 16.3546 49.4675 13.6953 53.0135 13.6953C56.5596 13.6953 59.0861 16.3546 59.0861 19.9446C59.0861 23.5346 56.5596 26.1939 53.0135 26.1939ZM69.7686 31.4681H76.0185V18.8366C76.0185 15.6011 77.7472 13.6953 80.5841 13.6953C83.288 13.6953 84.7507 15.4681 84.7507 18.7479V31.4681H91.0006V17.6842C91.0006 11.7008 87.5432 7.8892 82.0468 7.8892C79.343 7.8892 77.171 8.86427 75.8856 10.6814V8.42192H69.7686V31.4681ZM95.3889 26.6363V31.4681H113.74V25.7507H102.702C105.317 21.5845 108.597 17.8172 113.163 13.5623V8.42105H95.3889V14.1828H104.697C100.885 18.349 97.7825 22.4266 95.3889 26.6363ZM128.722 32C133.997 32 138.163 29.3407 140.379 24.554H133.021C131.958 25.7507 130.539 26.3269 128.766 26.3269C125.841 26.3269 123.713 24.687 122.959 22.072H141V20.3878C141 13.0305 135.947 7.8892 128.766 7.8892C121.63 7.8892 116.444 12.9418 116.444 19.9446C116.444 27.036 121.541 32 128.722 32ZM123.092 17.4183C123.935 15.0249 126.018 13.5623 128.811 13.5623C131.559 13.5623 133.51 14.9363 134.352 17.4183H123.092Z" fill="#CB6537"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="98" height="32" viewBox="0 0 98 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M16.2393 32C25.4878 32 31.9575 25.3297 31.9575 15.7384C31.9575 14.9101 31.914 14.1253 31.8706 13.6894H15.6748V19.6185H24.8357C23.6633 23.4986 20.3633 25.8965 16.0213 25.8965C10.5078 25.8965 6.68675 21.7984 6.68675 16C6.68675 10.2888 10.6814 6.10354 16.1958 6.10354C19.3221 6.10354 21.9273 7.49864 23.7944 10.1144H31.393C28.918 3.96816 23.0997 0 16.2393 0C6.90385 0 0 6.84469 0 16C0 25.2425 6.86043 32 16.2393 32ZM47.502 32C54.6664 32 59.6597 27.03 59.6597 20.1417C59.6597 13.297 54.6664 8.28338 47.502 8.28338C40.3376 8.28338 35.3443 13.297 35.3443 20.1417C35.3443 27.03 40.3376 32 47.502 32ZM47.502 26.2888C44.0284 26.2888 41.5534 23.673 41.5534 20.1417C41.5534 16.6104 44.0284 13.9946 47.502 13.9946C50.9756 13.9946 53.4506 16.6104 53.4506 20.1417C53.4506 23.673 50.9756 26.2888 47.502 26.2888ZM63.9149 31.4768H70.0372V0.52316H63.9149V31.4768ZM85.3646 32C88.187 32 90.5317 30.9973 92.008 29.2098V31.4768H98V0.52316H91.8777V10.8992C90.4014 9.24251 88.1436 8.28338 85.3646 8.28338C79.0253 8.28338 74.2924 13.3842 74.2924 20.1417C74.2924 26.9428 79.0253 32 85.3646 32ZM86.3199 26.2888C82.9765 26.2888 80.5016 23.7166 80.5016 20.1417C80.5016 16.5668 82.9765 13.9946 86.3199 13.9946C89.7067 13.9946 92.2251 16.6104 92.2251 20.1417C92.2251 23.673 89.7067 26.2888 86.3199 26.2888Z" fill="#A67C47"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="180" height="32" viewBox="0 0 180 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M13.3613 0H6.34772C3.418 9.83934 1.33169 20.1662 0 31.4681H6.52528C7.41307 22.072 8.47842 15.0258 10.1208 8.64266C12.2072 14.7147 13.7164 20.7424 15.8027 31.4681H23.7928C25.8792 20.7424 27.3884 14.7147 29.4747 8.64266C31.1171 15.0258 32.1825 22.072 33.0703 31.4681H39.5956C38.2639 20.1662 36.1776 9.83934 33.2478 0H26.2343C23.1705 8.5097 21.3958 15.2909 19.7978 22.6039C18.1989 15.2909 16.4242 8.5097 13.3613 0ZM54.9544 32C60.2367 32 64.4094 29.3407 66.6288 24.554H59.2602C58.1948 25.7507 56.7743 26.3269 54.9988 26.3269C52.069 26.3269 49.9383 24.687 49.1846 22.072H67.2503V20.3878C67.2503 13.0305 62.1899 7.8892 54.9988 7.8892C47.852 7.8892 42.6584 12.9418 42.6584 19.9446C42.6584 27.036 47.7633 32 54.9544 32ZM49.3169 17.4183C50.1603 15.0249 52.2466 13.5623 55.0432 13.5623C57.7953 13.5623 59.7485 14.9363 60.5919 17.4183H49.3169ZM71.6005 31.4681H77.8594V18.1274C77.8594 15.3352 79.3687 13.6953 81.811 13.6953C84.1192 13.6953 85.4065 15.1579 85.4065 18.0388V31.4681H91.6646V18.1274C91.6646 15.3352 93.1739 13.6953 95.6162 13.6953C97.9244 13.6953 99.2117 15.1579 99.2117 18.0388V31.4681H105.471V17.241C105.471 11.2576 102.053 7.8892 97.0366 7.8892C94.1957 7.8892 91.6655 9.3518 90.3338 11.3019C88.8689 9.04242 86.5163 7.8892 83.7197 7.8892C81.1007 7.8892 78.7925 9.04155 77.7271 10.6814V8.42192H71.6005V31.4681ZM123.67 32C130.15 32 134.989 26.8587 134.989 19.9446C134.989 13.0748 130.15 7.8892 123.67 7.8892C120.829 7.8892 118.52 8.86427 117.011 10.5485V0H110.752V31.4681H116.878V29.1634C118.387 30.9806 120.784 32 123.67 32ZM122.693 26.1939C119.231 26.1939 116.656 23.5346 116.656 19.9446C116.656 16.3546 119.231 13.6953 122.693 13.6953C126.111 13.6953 128.641 16.3102 128.641 19.9446C128.641 23.5789 126.111 26.1939 122.693 26.1939ZM150.525 32C155.808 32 159.98 29.3407 162.2 24.554H154.831C153.766 25.7507 152.345 26.3269 150.57 26.3269C147.64 26.3269 145.509 24.687 144.755 22.072H162.822V20.3878C162.822 13.0305 157.762 7.8892 150.571 7.8892C143.424 7.8892 138.23 12.9418 138.23 19.9446C138.229 27.036 143.334 32 150.525 32ZM144.888 17.4183C145.731 15.0249 147.818 13.5623 150.615 13.5623C153.367 13.5623 155.32 14.9363 156.164 17.4183H144.888ZM173.43 31.4681V20.831C173.43 15.867 176.36 14.0942 180 13.8283V7.97784C177.337 8.06648 174.673 9.17452 173.297 11.169V8.42105H167.171V31.4681H173.43Z" fill="#15273F"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="111" height="32" viewBox="0 0 111 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M11.07 32C16.9683 32 21.0715 28.16 21.0715 22.5707C21.0715 18.2613 18.4642 15.488 12.7796 13.696L10.3007 12.928C7.99262 12.2027 6.96683 11.1787 6.96683 9.55733C6.96683 7.59467 8.46278 6.22933 10.5998 6.22933C12.6087 6.22933 14.0191 7.38133 14.9167 9.856H21.4989C20.0884 4.05333 16.0707 0.682667 10.6426 0.682667C4.91525 0.682667 0.769343 4.608 0.769343 10.0267C0.769343 14.1227 3.4193 17.152 8.46278 18.816L11.241 19.712C13.8054 20.5227 14.8312 21.504 14.8312 23.168C14.8312 25.1733 13.378 26.4533 11.1127 26.4533C8.84745 26.4533 7.39425 25.1298 6.6249 22.4427H0C1.11127 28.3733 5.29992 32 11.07 32ZM25.6448 31.488H31.6713V9.30133H25.6448V31.488ZM28.6786 7.59467C30.8156 7.59467 32.4834 6.05867 32.4834 3.79733C32.4834 1.536 30.8165 0 28.6786 0C26.5407 0 24.8746 1.536 24.8746 3.79733C24.8746 6.05867 26.5423 7.59467 28.6794 7.59467H28.6786ZM36.9712 31.488H42.9977V1.19467H36.9712V31.488ZM54.1105 31.488H61.2483C64.3257 25.0462 67.403 17.2373 69.1554 9.30133H62.7015C60.9918 17.28 59.3677 21.6747 57.7008 25.344C55.9911 21.6747 54.3669 17.2792 52.6573 9.30133H46.2033C47.9557 17.2373 51.0331 25.0462 54.1105 31.488ZM82.6189 32C87.7051 32 91.7228 29.44 93.8599 24.832H86.7648C85.7391 25.984 84.3713 26.5387 82.6617 26.5387C79.8407 26.5387 77.7892 24.96 77.0634 22.4427H94.4583V20.8213C94.4583 13.7387 89.5858 8.78933 82.6617 8.78933C75.7803 8.78933 70.7796 13.6533 70.7796 20.3947C70.7796 27.2213 75.6948 32 82.6189 32ZM77.1908 17.9627C78.0029 15.6587 80.0117 14.2507 82.7053 14.2507C85.3552 14.2507 87.2358 15.5733 88.0479 17.9627H77.1908ZM104.674 31.488V21.248C104.674 16.4693 107.495 14.7627 111 14.5067V8.87467C108.436 8.96 105.871 10.0267 104.546 11.9467V9.30133H98.6469V31.488H104.674Z" fill="#909090"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="184" height="32" viewBox="0 0 184 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M22.6339 0H0V6.0277H8.07718V31.4681H14.5567V6.0277H22.6339V0ZM29.3796 31.4681V20.831C29.3796 15.867 32.3087 14.0942 35.9479 13.8283V7.97784C33.2851 8.06648 30.6223 9.17452 29.2465 11.169V8.42105H23.122V31.4681H29.3796ZM49.1732 32C51.9691 32 54.2769 31.0693 55.8302 29.3407V31.4681H62.0878V8.42105H55.9633V10.7258C54.4544 8.90859 52.0579 7.8892 49.1732 7.8892C42.6937 7.8892 37.8562 13.0305 37.8562 19.9446C37.8571 26.8144 42.6937 32 49.1732 32ZM50.1495 26.1939C46.7323 26.1939 44.2026 23.5789 44.2026 19.9446C44.2026 16.3102 46.7323 13.6953 50.1495 13.6953C53.6112 13.6953 56.1852 16.3546 56.1852 19.9446C56.1852 23.5346 53.6112 26.1939 50.1495 26.1939ZM73.6266 31.4681H81.0381C84.2335 24.7765 87.4288 16.6648 89.2484 8.42105H82.547C80.7718 16.7091 79.0854 21.2742 77.3546 25.0859C75.5794 21.2742 73.8929 16.7083 72.1177 8.42105H65.4163C67.235 16.6648 70.4313 24.7765 73.6266 31.4681ZM103.228 32C108.509 32 112.681 29.3407 114.9 24.554H107.533C106.468 25.7507 105.048 26.3269 103.273 26.3269C100.343 26.3269 98.2132 24.687 97.4587 22.072H115.521V20.3878C115.521 13.0305 110.462 7.8892 103.273 7.8892C96.1273 7.8892 90.9349 12.9418 90.9349 19.9446C90.9349 27.036 96.0386 32 103.228 32ZM97.5919 17.4183C98.4351 15.0249 100.521 13.5623 103.318 13.5623C106.069 13.5623 108.022 14.9363 108.865 17.4183H97.5919ZM119.871 31.4681H126.128V0H119.871V31.4681ZM131.631 31.4681H137.889V0H131.631V31.4681ZM154.532 32C159.813 32 163.985 29.3407 166.204 24.554H158.836C157.771 25.7507 156.351 26.3269 154.576 26.3269C151.647 26.3269 149.517 24.687 148.762 22.072H166.825V20.3878C166.825 13.0305 161.766 7.8892 154.576 7.8892C147.431 7.8892 142.238 12.9418 142.238 19.9446C142.238 27.036 147.342 32 154.532 32ZM148.894 17.4183C149.738 15.0249 151.824 13.5623 154.62 13.5623C157.372 13.5623 159.325 14.9363 160.168 17.4183H148.894ZM177.432 31.4681V20.831C177.432 15.867 180.361 14.0942 184 13.8283V7.97784C181.337 8.06648 178.674 9.17452 177.299 11.169V8.42105H171.175V31.4681H177.432Z" fill="#E5212D"/>
3
+ </svg>
@@ -128,6 +128,9 @@ export class AutocompleteComponent extends NasComponentBase {
128
128
  getInputId() {
129
129
  return this.id ? this.id : `nas-autocomplete-input-${this.componentId}`;
130
130
  }
131
+ getItemId(item) {
132
+ return `${item.id}-${this.componentId}`;
133
+ }
131
134
  setOpen() {
132
135
  this.input.nativeElement.select();
133
136
  this.open = true;
@@ -169,8 +172,13 @@ export class AutocompleteComponent extends NasComponentBase {
169
172
  case 'Tab':
170
173
  case 'Enter':
171
174
  if (!event.shiftKey) {
172
- event.preventDefault();
173
- this.focusOnNext.emit(event);
175
+ if (event.key === 'Enter') {
176
+ event.preventDefault();
177
+ this.focusOnNext.emit(event);
178
+ }
179
+ else if (this.open) {
180
+ this.focusOnNext.emit(event);
181
+ }
174
182
  }
175
183
  if (this.focused) {
176
184
  this.modelValue = this.focused.title;
@@ -256,7 +264,7 @@ export class AutocompleteComponent extends NasComponentBase {
256
264
  return;
257
265
  }
258
266
  const results = this.results.nativeElement;
259
- const focusedItem = this.document.querySelector('.nas-autocomplete__list-item--focus');
267
+ const focusedItem = this.document.getElementById(this.getItemId(this.focused));
260
268
  if (focusedItem) {
261
269
  results.scrollTo(0, 0);
262
270
  results.scrollTo(0, focusedItem.offsetTop + extraOffset - results.clientHeight);
@@ -273,11 +281,11 @@ export class AutocompleteComponent extends NasComponentBase {
273
281
  return this.model ? 'remove--secondary' : 'remove';
274
282
  }
275
283
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AutocompleteComponent, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
276
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AutocompleteComponent, selector: "nas-autocomplete", inputs: { id: "id", label: "label", labelInside: "labelInside", placeholder: "placeholder", icon: "icon", secondary: "secondary", items: "items", open: "open", model: "model", disableBackdrop: "disableBackdrop", nasFormControlName: "nasFormControlName", nasFormGroup: "nasFormGroup", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelClear: "ariaLabelClear" }, outputs: { focusOnNext: "focusOnNext", selectedChange: "selectedChange", openChange: "openChange", modelChange: "modelChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "span", first: true, predicate: ["span"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }, { propertyName: "labelElement", first: true, predicate: ["labelDOM"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\" [attr.aria-label]=\"label\" [nasClass]=\"getClass('wrapper', [open && 'active', labelInside && 'label-inside', exists(secondary) && 'secondary-color'])\"\n #labelElement>\n <span *ngIf=\"label\" [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input type=\"text\" role=\"combobox\" aria-haspopup=\"true\" aria-autocomplete=\"none\" autocomplete=\"off\"\n [id]=\"getInputId()\" [attr.aria-controls]=\"getResultsId()\" [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\" [nasClass]=\"getClass('input')\" [(ngModel)]=\"model\" [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\" (input)=\"filter()\" (click)=\"setOpen()\" (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"model; else isEmpty\" [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\" [attr.aria-label]=\"label\" [nasClass]=\"getClass('wrapper', [open && 'active', labelInside && 'label-inside', exists(secondary) && 'secondary-color'])\" [formGroup]=\"nasFormGroup\">\n <span *ngIf=\"label\" [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input type=\"text\" role=\"combobox\" aria-autocomplete=\"none\" autocomplete=\"off\" [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\" [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\" [formControlName]=\"nasFormControlName\" [nasClass]=\"getClass('input')\"\n [placeholder]=\"placeholder\" (focus)=\"setOpen()\" (input)=\"filter()\" (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"model; else isEmpty\" [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [id]=\"getResultsId()\" [nasClass]=\"getClass('results-wrapper', [exists(secondary) && 'secondary-color'])\" [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results role=\"listbox\" *ngIf=\"open\" [attr.aria-labelledby]=\"getLabelId()\" [nasClass]=\"getClass('results')\">\n <li role=\"option\" *ngFor=\"let item of filteredItems\" [id]=\"item.id\"\n [nasClass]=\"getClass('list-item', item.id === focused?.id && 'focus')\">\n <button type=\"button\" [nasClass]=\"getClass('item', item.id === focused?.id && 'focus')\" (click)=\"select(item)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('title')\">{{item.title}}</span>\n <span [nasClass]=\"getClass('preamble')\">{{item.preamble}}</span>\n </button>\n </li>\n </ul>\n</div>\n<nas-backdrop *ngIf=\"!exists(disableBackdrop)\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"showBackdrop\"></nas-backdrop>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-autocomplete__label{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;display:block;position:relative;z-index:3;margin-bottom:6px}.nas-autocomplete__input{height:48px;position:relative;z-index:3;line-height:1;margin:0;border:2px solid #6F6F6F}.nas-autocomplete__icon{position:absolute;z-index:4;right:16px;bottom:12px}.nas-autocomplete__wrapper{position:relative;display:block;z-index:0}.nas-autocomplete__wrapper--active{z-index:3}.nas-autocomplete__wrapper--label-inside .nas-autocomplete__label{font-size:14px;line-height:20px;background-color:#fff;padding:9px 16px 0;margin-bottom:0;border:2px solid #6F6F6F;border-bottom:none}.nas-autocomplete__wrapper--label-inside .nas-autocomplete__label~.nas-autocomplete__icon{bottom:21px;right:24px}.nas-autocomplete__wrapper--label-inside input{height:35px;padding:12px 16px;border-top:none}.nas-autocomplete__wrapper--secondary-color .nas-autocomplete__label,.nas-autocomplete__wrapper--secondary-color input{border-color:#15273f}.nas-autocomplete__results{margin-top:-8px;position:absolute;z-index:3;width:100%;top:2px;left:0;max-height:50vh;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;border:2px solid #15273F;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:results .65s ease both;scrollbar-width:none;-ms-overflow-style:none;border-top:0;border-bottom:0}.nas-autocomplete__results::-webkit-scrollbar{display:none}.nas-autocomplete__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:backdrop .7s ease-out both}.nas-autocomplete__item{display:block;position:relative;z-index:2;width:100%;text-align:left;padding:12px 16px;margin-top:-1px;outline:0;border-bottom:2px solid #E9E7E4}.nas-autocomplete__item--focus,.nas-autocomplete__item:focus{background-color:#ebf4ff;border-bottom-color:#15273f;border-top:2px solid #15273F}.nas-autocomplete__item--focus,.nas-autocomplete__item--focus .nas-autocomplete__title,.nas-autocomplete__item--focus .nas-autocomplete__preamble,.nas-autocomplete__item:focus,.nas-autocomplete__item:focus .nas-autocomplete__title,.nas-autocomplete__item:focus .nas-autocomplete__preamble{color:#15273f}.nas-autocomplete__item:hover{background-color:#f8f8f8}.nas-autocomplete__title{display:inline-block;font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;line-height:1;color:#15273f;margin-bottom:3px}.nas-autocomplete__preamble{display:block;font-size:14px}.nas-autocomplete__results-wrapper{position:relative;z-index:4;perspective:1000px}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__results{top:1px;border:1px solid #6F6F6F}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item{border-top:1px solid #E9E7E4;border-bottom:1px solid #E9E7E4}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover{border-top:1px solid #E9E7E4;border-bottom:1px solid #E9E7E4;background-color:#f1f1f1}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover{background-color:#15273f}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus .nas-autocomplete__title,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus .nas-autocomplete__preamble,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover .nas-autocomplete__title,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover .nas-autocomplete__preamble{color:#fff}@keyframes results{0%{transform:rotateX(-90deg)}40%{transform:rotateX(20deg)}to{transform:rotateX(0)}}@keyframes backdrop{0%{opacity:0}}\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.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "component", type: i5.BackdropComponent, selector: "nas-backdrop", inputs: ["showBackdrop", "ariaLabelBackdrop"], outputs: ["showBackdropChange"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
284
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AutocompleteComponent, selector: "nas-autocomplete", inputs: { id: "id", label: "label", labelInside: "labelInside", placeholder: "placeholder", icon: "icon", secondary: "secondary", items: "items", open: "open", model: "model", disableBackdrop: "disableBackdrop", nasFormControlName: "nasFormControlName", nasFormGroup: "nasFormGroup", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelClear: "ariaLabelClear" }, outputs: { focusOnNext: "focusOnNext", selectedChange: "selectedChange", openChange: "openChange", modelChange: "modelChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "span", first: true, predicate: ["span"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }, { propertyName: "labelElement", first: true, predicate: ["labelDOM"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\" [attr.aria-label]=\"label\" [nasClass]=\"getClass('wrapper', [open && 'active', labelInside && 'label-inside', exists(secondary) && 'secondary-color'])\"\n #labelElement>\n <span *ngIf=\"label\" [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input type=\"text\" role=\"combobox\" aria-haspopup=\"true\" aria-autocomplete=\"none\" autocomplete=\"off\"\n [id]=\"getInputId()\" [attr.aria-controls]=\"getResultsId()\" [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\" [nasClass]=\"getClass('input')\" [(ngModel)]=\"model\" [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\" (input)=\"filter()\" (click)=\"setOpen()\" (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"model; else isEmpty\" [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\" [attr.aria-label]=\"label\" [nasClass]=\"getClass('wrapper', [open && 'active', labelInside && 'label-inside', exists(secondary) && 'secondary-color'])\" [formGroup]=\"nasFormGroup\">\n <span *ngIf=\"label\" [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input type=\"text\" role=\"combobox\" aria-autocomplete=\"none\" autocomplete=\"off\" [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\" [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\" [formControlName]=\"nasFormControlName\" [nasClass]=\"getClass('input')\"\n [placeholder]=\"placeholder\" (focus)=\"setOpen()\" (input)=\"filter()\" (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"model; else isEmpty\" [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [id]=\"getResultsId()\" [nasClass]=\"getClass('results-wrapper', [exists(secondary) && 'secondary-color'])\" [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results role=\"listbox\" *ngIf=\"open\" [attr.aria-labelledby]=\"getLabelId()\" [nasClass]=\"getClass('results')\">\n <li role=\"option\" *ngFor=\"let item of filteredItems\" [id]=\"getItemId(item)\"\n [nasClass]=\"getClass('list-item', item.id === focused?.id && 'focus')\">\n <button type=\"button\" [nasClass]=\"getClass('item', item.id === focused?.id && 'focus')\" (click)=\"select(item)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('title')\">{{item.title}}</span>\n <span [nasClass]=\"getClass('preamble')\">{{item.preamble}}</span>\n </button>\n </li>\n </ul>\n</div>\n<nas-backdrop *ngIf=\"!exists(disableBackdrop)\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"showBackdrop\"></nas-backdrop>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-autocomplete__label{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;display:block;position:relative;z-index:3;margin-bottom:6px}.nas-autocomplete__input{height:48px;position:relative;z-index:3;line-height:1;margin:0;border:2px solid #6F6F6F}.nas-autocomplete__icon{position:absolute;z-index:4;right:16px;bottom:12px}.nas-autocomplete__wrapper{position:relative;display:block;z-index:0}.nas-autocomplete__wrapper--active{z-index:3}.nas-autocomplete__wrapper--label-inside .nas-autocomplete__label{font-size:14px;line-height:20px;background-color:#fff;padding:9px 16px 0;margin-bottom:0;border:2px solid #6F6F6F;border-bottom:none}.nas-autocomplete__wrapper--label-inside .nas-autocomplete__label~.nas-autocomplete__icon{bottom:21px;right:24px}.nas-autocomplete__wrapper--label-inside input{height:35px;padding:12px 16px;border-top:none}.nas-autocomplete__wrapper--secondary-color .nas-autocomplete__label,.nas-autocomplete__wrapper--secondary-color input{border-color:#15273f}.nas-autocomplete__results{margin-top:-8px;position:absolute;z-index:3;width:100%;top:2px;left:0;max-height:50vh;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;border:2px solid #15273F;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:results .65s ease both;scrollbar-width:none;-ms-overflow-style:none;border-top:0;border-bottom:0}.nas-autocomplete__results::-webkit-scrollbar{display:none}.nas-autocomplete__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:backdrop .7s ease-out both}.nas-autocomplete__item{display:block;position:relative;z-index:2;width:100%;text-align:left;padding:12px 16px;margin-top:-1px;outline:0;border-bottom:2px solid #E9E7E4}.nas-autocomplete__item--focus,.nas-autocomplete__item:focus{background-color:#ebf4ff;border-bottom-color:#15273f;border-top:2px solid #15273F}.nas-autocomplete__item--focus,.nas-autocomplete__item--focus .nas-autocomplete__title,.nas-autocomplete__item--focus .nas-autocomplete__preamble,.nas-autocomplete__item:focus,.nas-autocomplete__item:focus .nas-autocomplete__title,.nas-autocomplete__item:focus .nas-autocomplete__preamble{color:#15273f}.nas-autocomplete__item:hover{background-color:#f8f8f8}.nas-autocomplete__title{display:inline-block;font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;line-height:1;color:#15273f;margin-bottom:3px}.nas-autocomplete__preamble{display:block;font-size:14px}.nas-autocomplete__results-wrapper{position:relative;z-index:4;perspective:1000px}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__results{top:1px;border:1px solid #6F6F6F}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item{border-top:1px solid #E9E7E4;border-bottom:1px solid #E9E7E4}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover{border-top:1px solid #E9E7E4;border-bottom:1px solid #E9E7E4;background-color:#f1f1f1}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover{background-color:#15273f}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus .nas-autocomplete__title,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus .nas-autocomplete__preamble,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover .nas-autocomplete__title,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover .nas-autocomplete__preamble{color:#fff}@keyframes results{0%{transform:rotateX(-90deg)}40%{transform:rotateX(20deg)}to{transform:rotateX(0)}}@keyframes backdrop{0%{opacity:0}}\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.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "component", type: i5.BackdropComponent, selector: "nas-backdrop", inputs: ["showBackdrop", "ariaLabelBackdrop"], outputs: ["showBackdropChange"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
277
285
  }
278
286
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AutocompleteComponent, decorators: [{
279
287
  type: Component,
280
- args: [{ selector: 'nas-autocomplete', template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\" [attr.aria-label]=\"label\" [nasClass]=\"getClass('wrapper', [open && 'active', labelInside && 'label-inside', exists(secondary) && 'secondary-color'])\"\n #labelElement>\n <span *ngIf=\"label\" [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input type=\"text\" role=\"combobox\" aria-haspopup=\"true\" aria-autocomplete=\"none\" autocomplete=\"off\"\n [id]=\"getInputId()\" [attr.aria-controls]=\"getResultsId()\" [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\" [nasClass]=\"getClass('input')\" [(ngModel)]=\"model\" [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\" (input)=\"filter()\" (click)=\"setOpen()\" (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"model; else isEmpty\" [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\" [attr.aria-label]=\"label\" [nasClass]=\"getClass('wrapper', [open && 'active', labelInside && 'label-inside', exists(secondary) && 'secondary-color'])\" [formGroup]=\"nasFormGroup\">\n <span *ngIf=\"label\" [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input type=\"text\" role=\"combobox\" aria-autocomplete=\"none\" autocomplete=\"off\" [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\" [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\" [formControlName]=\"nasFormControlName\" [nasClass]=\"getClass('input')\"\n [placeholder]=\"placeholder\" (focus)=\"setOpen()\" (input)=\"filter()\" (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"model; else isEmpty\" [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [id]=\"getResultsId()\" [nasClass]=\"getClass('results-wrapper', [exists(secondary) && 'secondary-color'])\" [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results role=\"listbox\" *ngIf=\"open\" [attr.aria-labelledby]=\"getLabelId()\" [nasClass]=\"getClass('results')\">\n <li role=\"option\" *ngFor=\"let item of filteredItems\" [id]=\"item.id\"\n [nasClass]=\"getClass('list-item', item.id === focused?.id && 'focus')\">\n <button type=\"button\" [nasClass]=\"getClass('item', item.id === focused?.id && 'focus')\" (click)=\"select(item)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('title')\">{{item.title}}</span>\n <span [nasClass]=\"getClass('preamble')\">{{item.preamble}}</span>\n </button>\n </li>\n </ul>\n</div>\n<nas-backdrop *ngIf=\"!exists(disableBackdrop)\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"showBackdrop\"></nas-backdrop>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-autocomplete__label{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;display:block;position:relative;z-index:3;margin-bottom:6px}.nas-autocomplete__input{height:48px;position:relative;z-index:3;line-height:1;margin:0;border:2px solid #6F6F6F}.nas-autocomplete__icon{position:absolute;z-index:4;right:16px;bottom:12px}.nas-autocomplete__wrapper{position:relative;display:block;z-index:0}.nas-autocomplete__wrapper--active{z-index:3}.nas-autocomplete__wrapper--label-inside .nas-autocomplete__label{font-size:14px;line-height:20px;background-color:#fff;padding:9px 16px 0;margin-bottom:0;border:2px solid #6F6F6F;border-bottom:none}.nas-autocomplete__wrapper--label-inside .nas-autocomplete__label~.nas-autocomplete__icon{bottom:21px;right:24px}.nas-autocomplete__wrapper--label-inside input{height:35px;padding:12px 16px;border-top:none}.nas-autocomplete__wrapper--secondary-color .nas-autocomplete__label,.nas-autocomplete__wrapper--secondary-color input{border-color:#15273f}.nas-autocomplete__results{margin-top:-8px;position:absolute;z-index:3;width:100%;top:2px;left:0;max-height:50vh;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;border:2px solid #15273F;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:results .65s ease both;scrollbar-width:none;-ms-overflow-style:none;border-top:0;border-bottom:0}.nas-autocomplete__results::-webkit-scrollbar{display:none}.nas-autocomplete__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:backdrop .7s ease-out both}.nas-autocomplete__item{display:block;position:relative;z-index:2;width:100%;text-align:left;padding:12px 16px;margin-top:-1px;outline:0;border-bottom:2px solid #E9E7E4}.nas-autocomplete__item--focus,.nas-autocomplete__item:focus{background-color:#ebf4ff;border-bottom-color:#15273f;border-top:2px solid #15273F}.nas-autocomplete__item--focus,.nas-autocomplete__item--focus .nas-autocomplete__title,.nas-autocomplete__item--focus .nas-autocomplete__preamble,.nas-autocomplete__item:focus,.nas-autocomplete__item:focus .nas-autocomplete__title,.nas-autocomplete__item:focus .nas-autocomplete__preamble{color:#15273f}.nas-autocomplete__item:hover{background-color:#f8f8f8}.nas-autocomplete__title{display:inline-block;font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;line-height:1;color:#15273f;margin-bottom:3px}.nas-autocomplete__preamble{display:block;font-size:14px}.nas-autocomplete__results-wrapper{position:relative;z-index:4;perspective:1000px}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__results{top:1px;border:1px solid #6F6F6F}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item{border-top:1px solid #E9E7E4;border-bottom:1px solid #E9E7E4}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover{border-top:1px solid #E9E7E4;border-bottom:1px solid #E9E7E4;background-color:#f1f1f1}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover{background-color:#15273f}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus .nas-autocomplete__title,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus .nas-autocomplete__preamble,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover .nas-autocomplete__title,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover .nas-autocomplete__preamble{color:#fff}@keyframes results{0%{transform:rotateX(-90deg)}40%{transform:rotateX(20deg)}to{transform:rotateX(0)}}@keyframes backdrop{0%{opacity:0}}\n"] }]
288
+ args: [{ selector: 'nas-autocomplete', template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\" [attr.aria-label]=\"label\" [nasClass]=\"getClass('wrapper', [open && 'active', labelInside && 'label-inside', exists(secondary) && 'secondary-color'])\"\n #labelElement>\n <span *ngIf=\"label\" [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input type=\"text\" role=\"combobox\" aria-haspopup=\"true\" aria-autocomplete=\"none\" autocomplete=\"off\"\n [id]=\"getInputId()\" [attr.aria-controls]=\"getResultsId()\" [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\" [nasClass]=\"getClass('input')\" [(ngModel)]=\"model\" [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\" (input)=\"filter()\" (click)=\"setOpen()\" (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"model; else isEmpty\" [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\" [attr.aria-label]=\"label\" [nasClass]=\"getClass('wrapper', [open && 'active', labelInside && 'label-inside', exists(secondary) && 'secondary-color'])\" [formGroup]=\"nasFormGroup\">\n <span *ngIf=\"label\" [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input type=\"text\" role=\"combobox\" aria-autocomplete=\"none\" autocomplete=\"off\" [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\" [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\" [formControlName]=\"nasFormControlName\" [nasClass]=\"getClass('input')\"\n [placeholder]=\"placeholder\" (focus)=\"setOpen()\" (input)=\"filter()\" (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"model; else isEmpty\" [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [id]=\"getResultsId()\" [nasClass]=\"getClass('results-wrapper', [exists(secondary) && 'secondary-color'])\" [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results role=\"listbox\" *ngIf=\"open\" [attr.aria-labelledby]=\"getLabelId()\" [nasClass]=\"getClass('results')\">\n <li role=\"option\" *ngFor=\"let item of filteredItems\" [id]=\"getItemId(item)\"\n [nasClass]=\"getClass('list-item', item.id === focused?.id && 'focus')\">\n <button type=\"button\" [nasClass]=\"getClass('item', item.id === focused?.id && 'focus')\" (click)=\"select(item)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('title')\">{{item.title}}</span>\n <span [nasClass]=\"getClass('preamble')\">{{item.preamble}}</span>\n </button>\n </li>\n </ul>\n</div>\n<nas-backdrop *ngIf=\"!exists(disableBackdrop)\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"showBackdrop\"></nas-backdrop>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-autocomplete__label{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;display:block;position:relative;z-index:3;margin-bottom:6px}.nas-autocomplete__input{height:48px;position:relative;z-index:3;line-height:1;margin:0;border:2px solid #6F6F6F}.nas-autocomplete__icon{position:absolute;z-index:4;right:16px;bottom:12px}.nas-autocomplete__wrapper{position:relative;display:block;z-index:0}.nas-autocomplete__wrapper--active{z-index:3}.nas-autocomplete__wrapper--label-inside .nas-autocomplete__label{font-size:14px;line-height:20px;background-color:#fff;padding:9px 16px 0;margin-bottom:0;border:2px solid #6F6F6F;border-bottom:none}.nas-autocomplete__wrapper--label-inside .nas-autocomplete__label~.nas-autocomplete__icon{bottom:21px;right:24px}.nas-autocomplete__wrapper--label-inside input{height:35px;padding:12px 16px;border-top:none}.nas-autocomplete__wrapper--secondary-color .nas-autocomplete__label,.nas-autocomplete__wrapper--secondary-color input{border-color:#15273f}.nas-autocomplete__results{margin-top:-8px;position:absolute;z-index:3;width:100%;top:2px;left:0;max-height:50vh;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;border:2px solid #15273F;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:results .65s ease both;scrollbar-width:none;-ms-overflow-style:none;border-top:0;border-bottom:0}.nas-autocomplete__results::-webkit-scrollbar{display:none}.nas-autocomplete__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:backdrop .7s ease-out both}.nas-autocomplete__item{display:block;position:relative;z-index:2;width:100%;text-align:left;padding:12px 16px;margin-top:-1px;outline:0;border-bottom:2px solid #E9E7E4}.nas-autocomplete__item--focus,.nas-autocomplete__item:focus{background-color:#ebf4ff;border-bottom-color:#15273f;border-top:2px solid #15273F}.nas-autocomplete__item--focus,.nas-autocomplete__item--focus .nas-autocomplete__title,.nas-autocomplete__item--focus .nas-autocomplete__preamble,.nas-autocomplete__item:focus,.nas-autocomplete__item:focus .nas-autocomplete__title,.nas-autocomplete__item:focus .nas-autocomplete__preamble{color:#15273f}.nas-autocomplete__item:hover{background-color:#f8f8f8}.nas-autocomplete__title{display:inline-block;font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;line-height:1;color:#15273f;margin-bottom:3px}.nas-autocomplete__preamble{display:block;font-size:14px}.nas-autocomplete__results-wrapper{position:relative;z-index:4;perspective:1000px}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__results{top:1px;border:1px solid #6F6F6F}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item{border-top:1px solid #E9E7E4;border-bottom:1px solid #E9E7E4}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover{border-top:1px solid #E9E7E4;border-bottom:1px solid #E9E7E4;background-color:#f1f1f1}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover{background-color:#15273f}.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus .nas-autocomplete__title,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item--focus .nas-autocomplete__preamble,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover .nas-autocomplete__title,.nas-autocomplete__results-wrapper--secondary-color .nas-autocomplete__item:hover .nas-autocomplete__preamble{color:#fff}@keyframes results{0%{transform:rotateX(-90deg)}40%{transform:rotateX(20deg)}to{transform:rotateX(0)}}@keyframes backdrop{0%{opacity:0}}\n"] }]
281
289
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
282
290
  type: Inject,
283
291
  args: [DOCUMENT]
@@ -330,4 +338,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
330
338
  }], modelChange: [{
331
339
  type: Output
332
340
  }] } });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7QUFJOUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWY7OztHQUdHO0FBTUgsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGdCQUFnQjtJQUt6RCxJQUFJLFlBQVk7UUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBYztRQUM3QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBaUREOzs7O09BSUc7SUFDSCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQStCO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLElB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WUFBWTtzQkFBcEIsS0FBSztnQkFPRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csY0FBYztzQkFBdEIsS0FBSztnQkFPSSxXQUFXO3NCQUFwQixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOYXNDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVNb2RlbCB9IGZyb20gJy4vbW9kZWxzL2F1dG9jb21wbGV0ZS5tb2RlbCc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogTm9yd2VnaWFuIEFpcnBvcnQgU2VsZWN0IENvbXBvbmVudCB8IEZvcm0gQ29udHJvbHMgfCBOZXcgZGVzaWduXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1hdXRvY29tcGxldGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGZpbHRlcmVkSXRlbXM6IEFycmF5PEF1dG9jb21wbGV0ZU1vZGVsPiA9IHRoaXMuaXRlbXM7XG4gIGZvY3VzZWQ6IEF1dG9jb21wbGV0ZU1vZGVsO1xuICBpbmRleCA9IC0xO1xuXG4gIGdldCBzaG93QmFja2Ryb3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVCYWNrZHJvcCkgJiYgdGhpcy5vcGVuO1xuICB9XG4gIHNldCBzaG93QmFja2Ryb3AodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzcGFuJykgc3BhbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncmVzdWx0cycpIHJlc3VsdHM6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xhYmVsRE9NJykgbGFiZWxFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50XG4gICAqL1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbnNpZGUgdGhlIHRleHQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGxhYmVsIG9mIHRoZSBpbnB1dCBpbnNpZGUgdGhlIGlucHV0IGZpZWxkLCBkZWZhdWx0IHZhbHVlIGlzIHRydWVcbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsSW5zaWRlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBhcHBlYXIgaW5zaWRlIHRoZSB0ZXh0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBpY29uIHRoYXQgd2lsbCBhcHBlYXIgaW5zaWRlIHRoZSB0ZXh0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBzZWNvbmRhcnkgY29sb3IgdGhlbWUuXG4gICAqL1xuICBASW5wdXQoKSBzZWNvbmRhcnk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgb2YgaXRlbXMgdGhhdCB3aWxsIGFwcGVhciBpbnNpZGUgdGhlIGRyb3Bkb3duIGxpc3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgaXRlbXMoKTogQXJyYXk8QXV0b2NvbXBsZXRlTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1ZhbHVlO1xuICB9XG4gIHNldCBpdGVtcyhpdGVtczogQXJyYXk8QXV0b2NvbXBsZXRlTW9kZWw+KSB7XG4gICAgaWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXNWYWx1ZSA9IGl0ZW1zO1xuXG4gICAgdGhpcy5maWx0ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENhbiBzZXQgYW5kIGxpc3RlbiB0byB3aGVhdGhlciB0aGUgZHJvcGRvd24gbGlzdCBpcyBvciBzaG91bGQgYmUgb3BlbiBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG9wZW4ob3BlbjogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm9wZW4gPT09IG9wZW4gfHwgIXRoaXMuaXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW5WYWx1ZSA9IG9wZW47XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQob3Blbik7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDYW4gc2V0IGFuZCBsaXN0ZW4gdG8gY2hhbmdlcyBpbiB0aGUgbW9kZWwgb2YgdGhlIHRleHQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbW9kZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHNldCBtb2RlbChtb2RlbDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubW9kZWxWYWx1ZSA9PT0gbW9kZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1vZGVsVmFsdWUgPSBtb2RlbDtcblxuICAgIGlmIChtb2RlbCAmJiB0aGlzLmZpbHRlcmVkSXRlbXMpIHtcbiAgICAgIHRoaXMuaW5kZXggPSB0aGlzLmZpbHRlcmVkSXRlbXMuZmluZEluZGV4KHggPT4geC50aXRsZSA9PT0gbW9kZWwpO1xuICAgIH1cblxuICAgIHRoaXMucGF0aFJlYWN0aXZlRm9ybUNvbnRyb2wobW9kZWwpO1xuXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KG1vZGVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGVzIHRoZSBiYWNrZHJvcCBvbiBmb2N1cy5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVCYWNrZHJvcDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzIHRoZSBwYXJlbnQncyBmb3JtIGdyb3VwLlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCBpcyByZXF1aWVyZWQgdG8gYmUgZmlsbGVkIGlmIG5hc0Zvcm1Db250cm9sTmFtZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgYW4gYXJpYS1sYWJlbCBhdHRyaWJ1dGUgdG8gdGhlIGJhY2tkcm9wIGJ1dHRvbi5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbEJhY2tkcm9wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyAnYXJpYS1sYWJlbCcgb24gdGhlIGNsZWFyIGJ1dHRvbiBpbnNpZGUgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxDbGVhcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJcyBmaXJlZCB3aGVuIHRoZSBuZXh0IGVsZW1lbnQgc2hvdWxkIGJlIGZvY3VzZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9jdXNPbk5leHQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIElzIGZpcmVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhbiBpdGVtIGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBdXRvY29tcGxldGVNb2RlbD4oKTtcblxuICBAT3V0cHV0KCkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZCA/IHRoaXMuaWQgOiBgbmFzLWF1dG9jb21wbGV0ZS0ke3RoaXMuY29tcG9uZW50SWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgaXRlbXNWYWx1ZTogQXJyYXk8QXV0b2NvbXBsZXRlTW9kZWw+O1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBjb21wb25lbnRJZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSkge1xuICAgIHN1cGVyKCduYXMtYXV0b2NvbXBsZXRlJyk7XG4gICAgdGhpcy5jb21wb25lbnRJZCA9IG5leHRJZCsrO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFyaWFMYWJlbENsZWFyKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbENsZWFyJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFyaWFMYWJlbEJhY2tkcm9wKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbEJhY2tkcm9wJyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVzdWx0c0lkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBuYXMtYXV0b2NvbXBsZXRlLXJlc3VsdHMtJHt0aGlzLmNvbXBvbmVudElkfWA7XG4gIH1cblxuICBnZXRMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBuYXMtYXV0b2NvbXBsZXRlLWxhYmVsLSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgZ2V0SW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkID8gdGhpcy5pZCA6IGBuYXMtYXV0b2NvbXBsZXRlLWlucHV0LSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgc2V0T3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGZpbHRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgKCF0aGlzLm5hc0Zvcm1Hcm91cCB8fCAhdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50TW9kZWwgPSB0aGlzLm1vZGVsO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKTtcblxuICAgICAgY3VycmVudE1vZGVsID0gY29udHJvbC52YWx1ZTtcbiAgICAgIHRoaXMubW9kZWwgPSBjb250cm9sLnZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKHggPT5cbiAgICAgICh4LnRpdGxlICYmIHgudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjdXJyZW50TW9kZWwudG9Mb3dlckNhc2UoKSkpIHx8XG4gICAgICAoeC5wcmVhbWJsZSAmJiB4LnByZWFtYmxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY3VycmVudE1vZGVsLnRvTG93ZXJDYXNlKCkpKSk7XG5cbiAgICBpZiAoY3VycmVudE1vZGVsID09PSAnJyB8fCB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIH1cblxuICAgIHRoaXMuaW5kZXggPSAwO1xuICAgIGlmICh0aGlzLmZpbHRlcmVkSXRlbXMpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRoaXMuZmlsdGVyZWRJdGVtc1t0aGlzLmluZGV4XTtcbiAgICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5mb2N1c09uTmV4dC5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgPSB0aGlzLmZvY3VzZWQudGl0bGU7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuZm9jdXNlZCk7XG4gICAgICAgICAgdGhpcy5wYXRoUmVhY3RpdmVGb3JtQ29udHJvbCh0aGlzLm1vZGVsVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Rvd24nOlxuICAgICAgICB0aGlzLmZvY3VzRG93bigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgY2FzZSAnVXAnOlxuICAgICAgICB0aGlzLmZvY3VzVXAoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5mb2N1c2VkID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIHRoaXMubW9kZWwgPSAnJztcbiAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIHRoaXMuaW5kZXggPSAtMTtcblxuICAgIGlmKCEhdGhpcy5pbnB1dCAmJiAhIXRoaXMuc3Bhbikge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmJvcmRlckNvbG9yID0gJyM2ZjZmNmYnO1xuICAgICAgdGhpcy5zcGFuLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzZmNmY2Zic7XG4gICAgfVxuXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBzZWxlY3QoaXRlbTogQXV0b2NvbXBsZXRlTW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWQgPSBpdGVtO1xuICAgIHRoaXMubW9kZWwgPSBpdGVtLnRpdGxlO1xuICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChpdGVtKTtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkSXRlbXMpIHtcbiAgICAgIHRoaXMuaW5kZXggPSB0aGlzLmZpbHRlcmVkSXRlbXMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy5mb2N1c09uTmV4dC5lbWl0KCk7XG4gIH1cblxuICBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNEb3duKCk6IHZvaWQge1xuICAgICsrdGhpcy5pbmRleDtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkSXRlbXMpIHtcbiAgICAgIGlmICghdGhpcy5maWx0ZXJlZEl0ZW1zW3RoaXMuaW5kZXhdKSB7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvY3VzZWQgPSB0aGlzLmZpbHRlcmVkSXRlbXNbdGhpcy5pbmRleF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMuYXV0b1Njcm9sbCgwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdXRvU2Nyb2xsKDEzMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1VwKCk6IHZvaWQge1xuICAgIC0tdGhpcy5pbmRleDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZEl0ZW1zKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0aGlzLmZpbHRlcmVkSXRlbXNbdGhpcy5pbmRleF07XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvU2Nyb2xsKDApO1xuICB9XG5cbiAgcGF0aFJlYWN0aXZlRm9ybUNvbnRyb2wobW9kZWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpO1xuICAgICAgZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdXRvU2Nyb2xsKGV4dHJhT2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVzdWx0cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gdGhpcy5yZXN1bHRzLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZm9jdXNlZEl0ZW0gPSB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uYXMtYXV0b2NvbXBsZXRlX19saXN0LWl0ZW0tLWZvY3VzJyk7XG5cbiAgICBpZiAoZm9jdXNlZEl0ZW0pIHtcbiAgICAgIHJlc3VsdHMuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICByZXN1bHRzLnNjcm9sbFRvKDAsIGZvY3VzZWRJdGVtLm9mZnNldFRvcCArIGV4dHJhT2Zmc2V0IC0gcmVzdWx0cy5jbGllbnRIZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMubGFiZWwgJiYgdGhpcy5sYWJlbC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuYm9yZGVyQ29sb3IgPSBpbnB1dEVsZW1lbnQudmFsdWUgPyAnIzE1MjczZicgOiAnIzZmNmY2Zic7XG4gICAgICB0aGlzLnNwYW4ubmF0aXZlRWxlbWVudC5zdHlsZS5ib3JkZXJDb2xvciA9IGlucHV0RWxlbWVudC52YWx1ZSA/ICcjMTUyNzNmJyA6ICcjNmY2ZjZmJztcbiAgICB9XG4gIH1cblxuICBzZXRSZW1vdmVJY29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgPyAncmVtb3ZlLS1zZWNvbmRhcnknIDogJ3JlbW92ZSc7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhbmFzRm9ybUNvbnRyb2xOYW1lOyBlbHNlIHJlYWN0aXZlRm9ybVwiPlxuICA8bGFiZWwgW2lkXT1cImdldExhYmVsSWQoKVwiIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCd3cmFwcGVyJywgW29wZW4gJiYgJ2FjdGl2ZScsIGxhYmVsSW5zaWRlICYmICdsYWJlbC1pbnNpZGUnLCBleGlzdHMoc2Vjb25kYXJ5KSAmJiAnc2Vjb25kYXJ5LWNvbG9yJ10pXCJcbiAgICAjbGFiZWxFbGVtZW50PlxuICAgIDxzcGFuICpuZ0lmPVwibGFiZWxcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2xhYmVsJylcIiAjc3Bhbj57e2xhYmVsfX08L3NwYW4+XG4gICAgPGlucHV0ICNpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJjb21ib2JveFwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIFtpZF09XCJnZXRJbnB1dElkKClcIiBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImdldFJlc3VsdHNJZCgpXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuID8gJ3RydWUnIDogJ2ZhbHNlJ1wiXG4gICAgICBbYXR0ci5hcmlhLW93bnNdPVwiZ2V0UmVzdWx0c0lkKClcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2lucHV0JylcIiBbKG5nTW9kZWwpXT1cIm1vZGVsXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIChmb2N1cyk9XCJzZXRPcGVuKClcIiAoaW5wdXQpPVwiZmlsdGVyKClcIiAoY2xpY2spPVwic2V0T3BlbigpXCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIiAvPlxuICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaWNvbicpXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiICpuZ0lmPVwibW9kZWw7IGVsc2UgaXNFbXB0eVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsQ2xlYXJcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxuYXMtaWNvbiBbdHlwZV09XCJzZXRSZW1vdmVJY29uKClcIj48L25hcy1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHk+XG4gICAgICAgIDxuYXMtaWNvbiBbdHlwZV09XCInc21hbGwnXCIgW2ljb25dPVwiaWNvblwiPjwvbmFzLWljb24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvc3Bhbj5cbiAgPC9sYWJlbD5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNyZWFjdGl2ZUZvcm0+XG4gIDxsYWJlbCBbaWRdPVwiZ2V0TGFiZWxJZCgpXCIgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3dyYXBwZXInLCBbb3BlbiAmJiAnYWN0aXZlJywgbGFiZWxJbnNpZGUgJiYgJ2xhYmVsLWluc2lkZScsIGV4aXN0cyhzZWNvbmRhcnkpICYmICdzZWNvbmRhcnktY29sb3InXSlcIiBbZm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiPlxuICAgIDxzcGFuICpuZ0lmPVwibGFiZWxcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2xhYmVsJylcIiAjc3Bhbj57e2xhYmVsfX08L3NwYW4+XG4gICAgPGlucHV0ICNpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJjb21ib2JveFwiIGFyaWEtYXV0b2NvbXBsZXRlPVwibm9uZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtpZF09XCJnZXRJbnB1dElkKClcIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJnZXRSZXN1bHRzSWQoKVwiIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlbiA/ICd0cnVlJyA6ICdmYWxzZSdcIlxuICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImdldFJlc3VsdHNJZCgpXCIgW2Zvcm1Db250cm9sTmFtZV09XCJuYXNGb3JtQ29udHJvbE5hbWVcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2lucHV0JylcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgKGZvY3VzKT1cInNldE9wZW4oKVwiIChpbnB1dCk9XCJmaWx0ZXIoKVwiIChjbGljayk9XCJzZXRPcGVuKClcIlxuICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIiAvPlxuICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaWNvbicpXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiICpuZ0lmPVwibW9kZWw7IGVsc2UgaXNFbXB0eVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsQ2xlYXJcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxuYXMtaWNvbiBbdHlwZV09XCJzZXRSZW1vdmVJY29uKClcIj48L25hcy1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHk+XG4gICAgICAgIDxuYXMtaWNvbiBbdHlwZV09XCInc21hbGwnXCIgW2ljb25dPVwiaWNvblwiPjwvbmFzLWljb24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvc3Bhbj5cbiAgPC9sYWJlbD5cbjwvbmctdGVtcGxhdGU+XG48ZGl2IFtpZF09XCJnZXRSZXN1bHRzSWQoKVwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygncmVzdWx0cy13cmFwcGVyJywgW2V4aXN0cyhzZWNvbmRhcnkpICYmICdzZWNvbmRhcnktY29sb3InXSlcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnXCI+XG4gIDx1bCAjcmVzdWx0cyByb2xlPVwibGlzdGJveFwiICpuZ0lmPVwib3BlblwiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJnZXRMYWJlbElkKClcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Jlc3VsdHMnKVwiPlxuICAgIDxsaSByb2xlPVwib3B0aW9uXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRJdGVtc1wiIFtpZF09XCJpdGVtLmlkXCJcbiAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGlzdC1pdGVtJywgaXRlbS5pZCA9PT0gZm9jdXNlZD8uaWQgJiYgJ2ZvY3VzJylcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsIGl0ZW0uaWQgPT09IGZvY3VzZWQ/LmlkICYmICdmb2N1cycpXCIgKGNsaWNrKT1cInNlbGVjdChpdGVtKVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCd0aXRsZScpXCI+e3tpdGVtLnRpdGxlfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygncHJlYW1ibGUnKVwiPnt7aXRlbS5wcmVhbWJsZX19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuPG5hcy1iYWNrZHJvcCAqbmdJZj1cIiFleGlzdHMoZGlzYWJsZUJhY2tkcm9wKVwiIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiXG4gIFsoc2hvd0JhY2tkcm9wKV09XCJzaG93QmFja2Ryb3BcIj48L25hcy1iYWNrZHJvcD4iXX0=
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7QUFJOUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWY7OztHQUdHO0FBTUgsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGdCQUFnQjtJQUt6RCxJQUFJLFlBQVk7UUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBYztRQUM3QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBaUREOzs7O09BSUc7SUFDSCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQStCO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLElB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LFVBQVU7Z0JBT1osRUFBRTtzQkFBVixLQUFLO2dCQU9HLEtBQUs7c0JBQWIsS0FBSztnQkFPRyxXQUFXO3NCQUFuQixLQUFLO2dCQU9HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBT0csSUFBSTtzQkFBWixLQUFLO2dCQU9HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBUUYsS0FBSztzQkFEUixLQUFLO2dCQW9CRixJQUFJO3NCQURQLEtBQUs7Z0JBbUJGLEtBQUs7c0JBRFIsS0FBSztnQkF5QkcsZUFBZTtzQkFBdkIsS0FBSztnQkFTRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBU0csWUFBWTtzQkFBcEIsS0FBSztnQkFPRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csY0FBYztzQkFBdEIsS0FBSztnQkFPSSxXQUFXO3NCQUFwQixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOYXNDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVNb2RlbCB9IGZyb20gJy4vbW9kZWxzL2F1dG9jb21wbGV0ZS5tb2RlbCc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogTm9yd2VnaWFuIEFpcnBvcnQgU2VsZWN0IENvbXBvbmVudCB8IEZvcm0gQ29udHJvbHMgfCBOZXcgZGVzaWduXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1hdXRvY29tcGxldGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGZpbHRlcmVkSXRlbXM6IEFycmF5PEF1dG9jb21wbGV0ZU1vZGVsPiA9IHRoaXMuaXRlbXM7XG4gIGZvY3VzZWQ6IEF1dG9jb21wbGV0ZU1vZGVsO1xuICBpbmRleCA9IC0xO1xuXG4gIGdldCBzaG93QmFja2Ryb3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVCYWNrZHJvcCkgJiYgdGhpcy5vcGVuO1xuICB9XG4gIHNldCBzaG93QmFja2Ryb3AodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzcGFuJykgc3BhbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncmVzdWx0cycpIHJlc3VsdHM6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xhYmVsRE9NJykgbGFiZWxFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50XG4gICAqL1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbnNpZGUgdGhlIHRleHQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGxhYmVsIG9mIHRoZSBpbnB1dCBpbnNpZGUgdGhlIGlucHV0IGZpZWxkLCBkZWZhdWx0IHZhbHVlIGlzIHRydWVcbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsSW5zaWRlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBhcHBlYXIgaW5zaWRlIHRoZSB0ZXh0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBpY29uIHRoYXQgd2lsbCBhcHBlYXIgaW5zaWRlIHRoZSB0ZXh0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBzZWNvbmRhcnkgY29sb3IgdGhlbWUuXG4gICAqL1xuICBASW5wdXQoKSBzZWNvbmRhcnk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgb2YgaXRlbXMgdGhhdCB3aWxsIGFwcGVhciBpbnNpZGUgdGhlIGRyb3Bkb3duIGxpc3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgaXRlbXMoKTogQXJyYXk8QXV0b2NvbXBsZXRlTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1ZhbHVlO1xuICB9XG4gIHNldCBpdGVtcyhpdGVtczogQXJyYXk8QXV0b2NvbXBsZXRlTW9kZWw+KSB7XG4gICAgaWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXNWYWx1ZSA9IGl0ZW1zO1xuXG4gICAgdGhpcy5maWx0ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENhbiBzZXQgYW5kIGxpc3RlbiB0byB3aGVhdGhlciB0aGUgZHJvcGRvd24gbGlzdCBpcyBvciBzaG91bGQgYmUgb3BlbiBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG9wZW4ob3BlbjogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm9wZW4gPT09IG9wZW4gfHwgIXRoaXMuaXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW5WYWx1ZSA9IG9wZW47XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQob3Blbik7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDYW4gc2V0IGFuZCBsaXN0ZW4gdG8gY2hhbmdlcyBpbiB0aGUgbW9kZWwgb2YgdGhlIHRleHQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbW9kZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHNldCBtb2RlbChtb2RlbDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubW9kZWxWYWx1ZSA9PT0gbW9kZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1vZGVsVmFsdWUgPSBtb2RlbDtcblxuICAgIGlmIChtb2RlbCAmJiB0aGlzLmZpbHRlcmVkSXRlbXMpIHtcbiAgICAgIHRoaXMuaW5kZXggPSB0aGlzLmZpbHRlcmVkSXRlbXMuZmluZEluZGV4KHggPT4geC50aXRsZSA9PT0gbW9kZWwpO1xuICAgIH1cblxuICAgIHRoaXMucGF0aFJlYWN0aXZlRm9ybUNvbnRyb2wobW9kZWwpO1xuXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KG1vZGVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGVzIHRoZSBiYWNrZHJvcCBvbiBmb2N1cy5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVCYWNrZHJvcDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzIHRoZSBwYXJlbnQncyBmb3JtIGdyb3VwLlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCBpcyByZXF1aWVyZWQgdG8gYmUgZmlsbGVkIGlmIG5hc0Zvcm1Db250cm9sTmFtZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgYW4gYXJpYS1sYWJlbCBhdHRyaWJ1dGUgdG8gdGhlIGJhY2tkcm9wIGJ1dHRvbi5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbEJhY2tkcm9wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyAnYXJpYS1sYWJlbCcgb24gdGhlIGNsZWFyIGJ1dHRvbiBpbnNpZGUgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxDbGVhcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJcyBmaXJlZCB3aGVuIHRoZSBuZXh0IGVsZW1lbnQgc2hvdWxkIGJlIGZvY3VzZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9jdXNPbk5leHQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIElzIGZpcmVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhbiBpdGVtIGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBdXRvY29tcGxldGVNb2RlbD4oKTtcblxuICBAT3V0cHV0KCkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZCA/IHRoaXMuaWQgOiBgbmFzLWF1dG9jb21wbGV0ZS0ke3RoaXMuY29tcG9uZW50SWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgaXRlbXNWYWx1ZTogQXJyYXk8QXV0b2NvbXBsZXRlTW9kZWw+O1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBjb21wb25lbnRJZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSkge1xuICAgIHN1cGVyKCduYXMtYXV0b2NvbXBsZXRlJyk7XG4gICAgdGhpcy5jb21wb25lbnRJZCA9IG5leHRJZCsrO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFyaWFMYWJlbENsZWFyKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbENsZWFyJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFyaWFMYWJlbEJhY2tkcm9wKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbEJhY2tkcm9wJyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVzdWx0c0lkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBuYXMtYXV0b2NvbXBsZXRlLXJlc3VsdHMtJHt0aGlzLmNvbXBvbmVudElkfWA7XG4gIH1cblxuICBnZXRMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBuYXMtYXV0b2NvbXBsZXRlLWxhYmVsLSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgZ2V0SW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkID8gdGhpcy5pZCA6IGBuYXMtYXV0b2NvbXBsZXRlLWlucHV0LSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgXG4gIGdldEl0ZW1JZChpdGVtOiBBdXRvY29tcGxldGVNb2RlbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2l0ZW0uaWR9LSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgc2V0T3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGZpbHRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgKCF0aGlzLm5hc0Zvcm1Hcm91cCB8fCAhdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50TW9kZWwgPSB0aGlzLm1vZGVsO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKTtcblxuICAgICAgY3VycmVudE1vZGVsID0gY29udHJvbC52YWx1ZTtcbiAgICAgIHRoaXMubW9kZWwgPSBjb250cm9sLnZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKHggPT5cbiAgICAgICh4LnRpdGxlICYmIHgudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjdXJyZW50TW9kZWwudG9Mb3dlckNhc2UoKSkpIHx8XG4gICAgICAoeC5wcmVhbWJsZSAmJiB4LnByZWFtYmxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY3VycmVudE1vZGVsLnRvTG93ZXJDYXNlKCkpKSk7XG5cbiAgICBpZiAoY3VycmVudE1vZGVsID09PSAnJyB8fCB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIH1cblxuICAgIHRoaXMuaW5kZXggPSAwO1xuICAgIGlmICh0aGlzLmZpbHRlcmVkSXRlbXMpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRoaXMuZmlsdGVyZWRJdGVtc1t0aGlzLmluZGV4XTtcbiAgICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzT25OZXh0LmVtaXQoZXZlbnQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzT25OZXh0LmVtaXQoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgPSB0aGlzLmZvY3VzZWQudGl0bGU7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuZm9jdXNlZCk7XG4gICAgICAgICAgdGhpcy5wYXRoUmVhY3RpdmVGb3JtQ29udHJvbCh0aGlzLm1vZGVsVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Rvd24nOlxuICAgICAgICB0aGlzLmZvY3VzRG93bigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgY2FzZSAnVXAnOlxuICAgICAgICB0aGlzLmZvY3VzVXAoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5mb2N1c2VkID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIHRoaXMubW9kZWwgPSAnJztcbiAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIHRoaXMuaW5kZXggPSAtMTtcblxuICAgIGlmKCEhdGhpcy5pbnB1dCAmJiAhIXRoaXMuc3Bhbikge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmJvcmRlckNvbG9yID0gJyM2ZjZmNmYnO1xuICAgICAgdGhpcy5zcGFuLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzZmNmY2Zic7XG4gICAgfVxuXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBzZWxlY3QoaXRlbTogQXV0b2NvbXBsZXRlTW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWQgPSBpdGVtO1xuICAgIHRoaXMubW9kZWwgPSBpdGVtLnRpdGxlO1xuICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChpdGVtKTtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkSXRlbXMpIHtcbiAgICAgIHRoaXMuaW5kZXggPSB0aGlzLmZpbHRlcmVkSXRlbXMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy5mb2N1c09uTmV4dC5lbWl0KCk7XG4gIH1cblxuICBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNEb3duKCk6IHZvaWQge1xuICAgICsrdGhpcy5pbmRleDtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkSXRlbXMpIHtcbiAgICAgIGlmICghdGhpcy5maWx0ZXJlZEl0ZW1zW3RoaXMuaW5kZXhdKSB7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvY3VzZWQgPSB0aGlzLmZpbHRlcmVkSXRlbXNbdGhpcy5pbmRleF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMuYXV0b1Njcm9sbCgwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdXRvU2Nyb2xsKDEzMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1VwKCk6IHZvaWQge1xuICAgIC0tdGhpcy5pbmRleDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZEl0ZW1zKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0aGlzLmZpbHRlcmVkSXRlbXNbdGhpcy5pbmRleF07XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvU2Nyb2xsKDApO1xuICB9XG5cbiAgcGF0aFJlYWN0aXZlRm9ybUNvbnRyb2wobW9kZWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpO1xuICAgICAgZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdXRvU2Nyb2xsKGV4dHJhT2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVzdWx0cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gdGhpcy5yZXN1bHRzLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZm9jdXNlZEl0ZW0gPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0SXRlbUlkKHRoaXMuZm9jdXNlZCkpO1xuXG4gICAgaWYgKGZvY3VzZWRJdGVtKSB7XG4gICAgICByZXN1bHRzLnNjcm9sbFRvKDAsIDApO1xuICAgICAgcmVzdWx0cy5zY3JvbGxUbygwLCBmb2N1c2VkSXRlbS5vZmZzZXRUb3AgKyBleHRyYU9mZnNldCAtIHJlc3VsdHMuY2xpZW50SGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmICh0aGlzLmxhYmVsICYmIHRoaXMubGFiZWwubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmJvcmRlckNvbG9yID0gaW5wdXRFbGVtZW50LnZhbHVlID8gJyMxNTI3M2YnIDogJyM2ZjZmNmYnO1xuICAgICAgdGhpcy5zcGFuLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYm9yZGVyQ29sb3IgPSBpbnB1dEVsZW1lbnQudmFsdWUgPyAnIzE1MjczZicgOiAnIzZmNmY2Zic7XG4gICAgfVxuICB9XG5cbiAgc2V0UmVtb3ZlSWNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1vZGVsID8gJ3JlbW92ZS0tc2Vjb25kYXJ5JyA6ICdyZW1vdmUnO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIW5hc0Zvcm1Db250cm9sTmFtZTsgZWxzZSByZWFjdGl2ZUZvcm1cIj5cbiAgPGxhYmVsIFtpZF09XCJnZXRMYWJlbElkKClcIiAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygnd3JhcHBlcicsIFtvcGVuICYmICdhY3RpdmUnLCBsYWJlbEluc2lkZSAmJiAnbGFiZWwtaW5zaWRlJywgZXhpc3RzKHNlY29uZGFyeSkgJiYgJ3NlY29uZGFyeS1jb2xvciddKVwiXG4gICAgI2xhYmVsRWxlbWVudD5cbiAgICA8c3BhbiAqbmdJZj1cImxhYmVsXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdsYWJlbCcpXCIgI3NwYW4+e3tsYWJlbH19PC9zcGFuPlxuICAgIDxpbnB1dCAjaW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwiY29tYm9ib3hcIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtYXV0b2NvbXBsZXRlPVwibm9uZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICBbaWRdPVwiZ2V0SW5wdXRJZCgpXCIgW2F0dHIuYXJpYS1jb250cm9sc109XCJnZXRSZXN1bHRzSWQoKVwiIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlbiA/ICd0cnVlJyA6ICdmYWxzZSdcIlxuICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImdldFJlc3VsdHNJZCgpXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdpbnB1dCcpXCIgWyhuZ01vZGVsKV09XCJtb2RlbFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAoZm9jdXMpPVwic2V0T3BlbigpXCIgKGlucHV0KT1cImZpbHRlcigpXCIgKGNsaWNrKT1cInNldE9wZW4oKVwiIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCIgLz5cbiAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2ljb24nKVwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiAqbmdJZj1cIm1vZGVsOyBlbHNlIGlzRW1wdHlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbENsZWFyXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwic2V0UmVtb3ZlSWNvbigpXCI+PC9uYXMtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNpc0VtcHR5PlxuICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ3NtYWxsJ1wiIFtpY29uXT1cImljb25cIj48L25hcy1pY29uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG4gIDwvbGFiZWw+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjcmVhY3RpdmVGb3JtPlxuICA8bGFiZWwgW2lkXT1cImdldExhYmVsSWQoKVwiIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCd3cmFwcGVyJywgW29wZW4gJiYgJ2FjdGl2ZScsIGxhYmVsSW5zaWRlICYmICdsYWJlbC1pbnNpZGUnLCBleGlzdHMoc2Vjb25kYXJ5KSAmJiAnc2Vjb25kYXJ5LWNvbG9yJ10pXCIgW2Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIj5cbiAgICA8c3BhbiAqbmdJZj1cImxhYmVsXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdsYWJlbCcpXCIgI3NwYW4+e3tsYWJlbH19PC9zcGFuPlxuICAgIDxpbnB1dCAjaW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwiY29tYm9ib3hcIiBhcmlhLWF1dG9jb21wbGV0ZT1cIm5vbmVcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbaWRdPVwiZ2V0SW5wdXRJZCgpXCJcbiAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiZ2V0UmVzdWx0c0lkKClcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgIFthdHRyLmFyaWEtb3duc109XCJnZXRSZXN1bHRzSWQoKVwiIFtmb3JtQ29udHJvbE5hbWVdPVwibmFzRm9ybUNvbnRyb2xOYW1lXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdpbnB1dCcpXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIChmb2N1cyk9XCJzZXRPcGVuKClcIiAoaW5wdXQpPVwiZmlsdGVyKClcIiAoY2xpY2spPVwic2V0T3BlbigpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCIgLz5cbiAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2ljb24nKVwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiAqbmdJZj1cIm1vZGVsOyBlbHNlIGlzRW1wdHlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbENsZWFyXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwic2V0UmVtb3ZlSWNvbigpXCI+PC9uYXMtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNpc0VtcHR5PlxuICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ3NtYWxsJ1wiIFtpY29uXT1cImljb25cIj48L25hcy1pY29uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG4gIDwvbGFiZWw+XG48L25nLXRlbXBsYXRlPlxuPGRpdiBbaWRdPVwiZ2V0UmVzdWx0c0lkKClcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Jlc3VsdHMtd3JhcHBlcicsIFtleGlzdHMoc2Vjb25kYXJ5KSAmJiAnc2Vjb25kYXJ5LWNvbG9yJ10pXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuID8gJ3RydWUnIDogJ2ZhbHNlJ1wiPlxuICA8dWwgI3Jlc3VsdHMgcm9sZT1cImxpc3Rib3hcIiAqbmdJZj1cIm9wZW5cIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiZ2V0TGFiZWxJZCgpXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdyZXN1bHRzJylcIj5cbiAgICA8bGkgcm9sZT1cIm9wdGlvblwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkSXRlbXNcIiBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0pXCJcbiAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGlzdC1pdGVtJywgaXRlbS5pZCA9PT0gZm9jdXNlZD8uaWQgJiYgJ2ZvY3VzJylcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsIGl0ZW0uaWQgPT09IGZvY3VzZWQ/LmlkICYmICdmb2N1cycpXCIgKGNsaWNrKT1cInNlbGVjdChpdGVtKVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCd0aXRsZScpXCI+e3tpdGVtLnRpdGxlfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygncHJlYW1ibGUnKVwiPnt7aXRlbS5wcmVhbWJsZX19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuPG5hcy1iYWNrZHJvcCAqbmdJZj1cIiFleGlzdHMoZGlzYWJsZUJhY2tkcm9wKVwiIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiXG4gIFsoc2hvd0JhY2tkcm9wKV09XCJzaG93QmFja2Ryb3BcIj48L25hcy1iYWNrZHJvcD4iXX0=