@seniorsistemas/data-seniorx-core 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/constants/editable-overlay.const.d.ts +4 -0
- package/core/constants/help-popover.const.d.ts +7 -0
- package/core/constants/input-mask.const.d.ts +5 -0
- package/core/constants/navigation-button.const.d.ts +3 -0
- package/core/constants/object-card.const.d.ts +21 -0
- package/core/constants/thumbnail.const.d.ts +6 -0
- package/core/constants/thumbnails.const.d.ts +4 -0
- package/core/constants/token-list.const.d.ts +3 -0
- package/core/types/button.type.d.ts +1 -1
- package/core/types/datepicker.type.d.ts +28 -0
- package/core/types/dynamic-form.type.d.ts +29 -0
- package/core/types/editable-overlay.type.d.ts +15 -0
- package/core/types/help-popover.type.d.ts +2 -0
- package/core/types/input-mask.type.d.ts +6 -0
- package/core/types/lookup.type.d.ts +45 -0
- package/core/types/navigation-button.type.d.ts +9 -0
- package/core/types/row-card.type.d.ts +5 -0
- package/core/types/semantics.type.d.ts +1 -1
- package/core/types/table-options.type.d.ts +1 -0
- package/core/types/thumbnail.type.d.ts +1 -0
- package/core/types/thumbnails.type.d.ts +20 -0
- package/core/types/token-list.type.d.ts +6 -0
- package/core/utils/emoji-support.util.d.ts +12 -0
- package/core/utils/overlay-dismiss.util.d.ts +25 -0
- package/esm2022/core/config/row-card.type.config.mjs +3 -1
- package/esm2022/core/constants/country-phone-picker.const.mjs +6 -6
- package/esm2022/core/constants/editable-overlay.const.mjs +5 -0
- package/esm2022/core/constants/help-popover.const.mjs +7 -0
- package/esm2022/core/constants/input-mask.const.mjs +6 -0
- package/esm2022/core/constants/navigation-button.const.mjs +4 -0
- package/esm2022/core/constants/object-card.const.mjs +23 -0
- package/esm2022/core/constants/thumbnail.const.mjs +14 -0
- package/esm2022/core/constants/thumbnails.const.mjs +5 -0
- package/esm2022/core/constants/token-list.const.mjs +4 -0
- package/esm2022/core/types/button.type.mjs +1 -1
- package/esm2022/core/types/datepicker.type.mjs +2 -0
- package/esm2022/core/types/dynamic-form.type.mjs +2 -0
- package/esm2022/core/types/editable-overlay.type.mjs +2 -0
- package/esm2022/core/types/help-popover.type.mjs +2 -0
- package/esm2022/core/types/input-mask.type.mjs +2 -0
- package/esm2022/core/types/lookup.type.mjs +2 -0
- package/esm2022/core/types/navigation-button.type.mjs +2 -0
- package/esm2022/core/types/row-card.type.mjs +1 -1
- package/esm2022/core/types/semantics.type.mjs +1 -1
- package/esm2022/core/types/table-options.type.mjs +1 -1
- package/esm2022/core/types/thumbnail.type.mjs +2 -0
- package/esm2022/core/types/thumbnails.type.mjs +2 -0
- package/esm2022/core/types/token-list.type.mjs +2 -0
- package/esm2022/core/utils/emoji-support.util.mjs +48 -0
- package/esm2022/core/utils/mask.util.mjs +2 -2
- package/esm2022/core/utils/overlay-dismiss.util.mjs +38 -0
- package/esm2022/features/alert/alert.component.mjs +5 -2
- package/esm2022/features/autocomplete/autocomplete.component.mjs +30 -8
- package/esm2022/features/bignumber-input/bignumber-input.component.mjs +1 -1
- package/esm2022/features/button/button.component.mjs +13 -5
- package/esm2022/features/card-list/card/card.component.mjs +2 -2
- package/esm2022/features/card-list/card-list.component.mjs +2 -2
- package/esm2022/features/checkbox-list/checkbox-list.component.mjs +25 -5
- package/esm2022/features/chips/chips.component.mjs +3 -3
- package/esm2022/features/code-editor/code-editor.component.mjs +12 -3
- package/esm2022/features/combobox/combobox.component.mjs +3 -3
- package/esm2022/features/confirm/confirm.component.mjs +2 -2
- package/esm2022/features/context-selector/context-selector.component.mjs +1 -1
- package/esm2022/features/country-phone-picker/country-phone-picker.component.mjs +22 -18
- package/esm2022/features/currency/currency.component.mjs +3 -3
- package/esm2022/features/datepicker/datepicker.component.mjs +814 -0
- package/esm2022/features/dynamic-form/dynamic-form-field.directive.mjs +178 -0
- package/esm2022/features/dynamic-form/dynamic-form.component.mjs +60 -0
- package/esm2022/features/dynamic-form/dynamic-form.registry.mjs +13 -0
- package/esm2022/features/editable-overlay/editable-overlay-editor.directive.mjs +31 -0
- package/esm2022/features/editable-overlay/editable-overlay.component.mjs +217 -0
- package/esm2022/features/editor/editor.component.mjs +173 -0
- package/esm2022/features/empty-state/empty-state.component.mjs +3 -3
- package/esm2022/features/fileupload/fileupload.component.mjs +3 -3
- package/esm2022/features/help-popover/help-popover.component.mjs +204 -0
- package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
- package/esm2022/features/icon-picker/icon-picker.component.mjs +4 -4
- package/esm2022/features/image-cropper/image-cropper.component.mjs +2 -2
- package/esm2022/features/info-sign/info-sign.component.mjs +6 -3
- package/esm2022/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
- package/esm2022/features/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +2 -2
- package/esm2022/features/input-mask/input-mask.directive.mjs +510 -0
- package/esm2022/features/list/list.component.mjs +2 -2
- package/esm2022/features/localized-number-input/localized-number-input.component.mjs +3 -3
- package/esm2022/features/lookup/lookup.component.mjs +351 -0
- package/esm2022/features/modal/modal.component.mjs +6 -3
- package/esm2022/features/modalc/modalc.component.mjs +6 -3
- package/esm2022/features/navigation-button/navigation-button.component.mjs +172 -0
- package/esm2022/features/number-input/number-input.component.mjs +10 -4
- package/esm2022/features/object-card/components/object-card-field/object-card-field.component.mjs +89 -0
- package/esm2022/features/object-card/components/object-card-main/object-card-main.component.mjs +114 -0
- package/esm2022/features/object-card/object-card.component.mjs +199 -0
- package/esm2022/features/password-strength/password-strength.component.mjs +3 -3
- package/esm2022/features/pin-code-field/pin-code-field.component.mjs +14 -4
- package/esm2022/features/popover/popover.component.mjs +29 -3
- package/esm2022/features/profile-picture-picker/profile-picture-picker.component.mjs +13 -4
- package/esm2022/features/rating-scale/rating-scale.component.mjs +24 -4
- package/esm2022/features/row-card-list/row-card/row-card.component.mjs +19 -4
- package/esm2022/features/row-card-list/row-card-list.component.mjs +12 -3
- package/esm2022/features/scaffold/scaffold.component.mjs +3 -3
- package/esm2022/features/searchbox/searchbox.component.mjs +2 -2
- package/esm2022/features/select-button/select-button.component.mjs +26 -4
- package/esm2022/features/slider/slider.component.mjs +3 -3
- package/esm2022/features/split-button/split-button.component.mjs +1 -1
- package/esm2022/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.mjs +15 -18
- package/esm2022/features/spotlight/spotlight.component.mjs +2 -2
- package/esm2022/features/star-rating/star-rating.component.mjs +25 -4
- package/esm2022/features/table/components/table-cell-content.component.mjs +2 -2
- package/esm2022/features/table/table.component.mjs +30 -9
- package/esm2022/features/textarea/textarea.component.mjs +3 -3
- package/esm2022/features/thumbnail/thumbnail.component.mjs +86 -0
- package/esm2022/features/thumbnails/components/thumbnail-item/thumbnail-item.component.mjs +59 -0
- package/esm2022/features/thumbnails/components/thumbnail-item-image/thumbnail-item-image.component.mjs +25 -0
- package/esm2022/features/thumbnails/components/thumbnail-item-video/thumbnail-item-video.component.mjs +50 -0
- package/esm2022/features/thumbnails/thumbnails.component.mjs +76 -0
- package/esm2022/features/tiered-menu/directives/tiered-menu.directive.mjs +13 -1
- package/esm2022/features/token-list/token-list.component.mjs +64 -0
- package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2 -2
- package/esm2022/locales/en.json +409 -1
- package/esm2022/locales/es-CO.json +423 -2
- package/esm2022/locales/pt.json +1037 -630
- package/esm2022/providers/features.provider.mjs +20 -2
- package/esm2022/providers/primeng-config.provider.mjs +14 -128
- package/esm2022/providers/translate.provider.mjs +2 -2
- package/esm2022/public-api.mjs +31 -1
- package/features/alert/alert.component.d.ts +1 -0
- package/features/autocomplete/autocomplete.component.d.ts +9 -3
- package/features/button/button.component.d.ts +3 -1
- package/features/checkbox-list/checkbox-list.component.d.ts +8 -1
- package/features/code-editor/code-editor.component.d.ts +5 -1
- package/features/country-phone-picker/country-phone-picker.component.d.ts +3 -0
- package/features/datepicker/datepicker.component.d.ts +118 -0
- package/features/dynamic-form/dynamic-form-field.directive.d.ts +26 -0
- package/features/dynamic-form/dynamic-form.component.d.ts +15 -0
- package/features/dynamic-form/dynamic-form.registry.d.ts +11 -0
- package/features/editable-overlay/editable-overlay-editor.directive.d.ts +22 -0
- package/features/editable-overlay/editable-overlay.component.d.ts +60 -0
- package/features/editor/editor.component.d.ts +47 -0
- package/features/help-popover/help-popover.component.d.ts +81 -0
- package/features/info-sign/info-sign.component.d.ts +2 -1
- package/features/input-mask/input-mask.directive.d.ts +117 -0
- package/features/lookup/lookup.component.d.ts +104 -0
- package/features/modal/modal.component.d.ts +2 -1
- package/features/modalc/modalc.component.d.ts +2 -1
- package/features/navigation-button/navigation-button.component.d.ts +58 -0
- package/features/number-input/number-input.component.d.ts +3 -1
- package/features/object-card/components/object-card-field/object-card-field.component.d.ts +48 -0
- package/features/object-card/components/object-card-main/object-card-main.component.d.ts +57 -0
- package/features/object-card/object-card.component.d.ts +70 -0
- package/features/pin-code-field/pin-code-field.component.d.ts +6 -1
- package/features/popover/popover.component.d.ts +4 -1
- package/features/profile-picture-picker/profile-picture-picker.component.d.ts +5 -1
- package/features/rating-scale/rating-scale.component.d.ts +9 -1
- package/features/row-card-list/row-card/row-card.component.d.ts +6 -1
- package/features/row-card-list/row-card-list.component.d.ts +4 -1
- package/features/select-button/select-button.component.d.ts +9 -1
- package/features/star-rating/star-rating.component.d.ts +9 -1
- package/features/table/table.component.d.ts +2 -1
- package/features/thumbnail/thumbnail.component.d.ts +48 -0
- package/features/thumbnails/components/thumbnail-item/thumbnail-item.component.d.ts +29 -0
- package/features/thumbnails/components/thumbnail-item-image/thumbnail-item-image.component.d.ts +13 -0
- package/features/thumbnails/components/thumbnail-item-video/thumbnail-item-video.component.d.ts +19 -0
- package/features/thumbnails/thumbnails.component.d.ts +46 -0
- package/features/tiered-menu/directives/tiered-menu.directive.d.ts +2 -0
- package/features/token-list/token-list.component.d.ts +31 -0
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs +11288 -6613
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
- package/package.json +12 -3
- package/providers/primeng-config.provider.d.ts +12 -0
- package/public-api.d.ts +38 -0
- package/src/locales/en.json +409 -1
- package/src/locales/es-CO.json +423 -2
- package/src/locales/pt.json +1037 -630
- package/styles/sdc-global-variables.scss +38 -0
- package/styles.css +132 -0
- package/styles.scss +2 -0
- package/esm2022/providers/custom/button.mjs +0 -93
- package/esm2022/providers/custom/toast.mjs +0 -75
- package/providers/custom/button.d.ts +0 -16
- package/providers/custom/toast.d.ts +0 -14
|
@@ -14,6 +14,9 @@ export class PinCodeFieldComponent {
|
|
|
14
14
|
helpText = '';
|
|
15
15
|
invalid = false;
|
|
16
16
|
disabled = false;
|
|
17
|
+
label = false;
|
|
18
|
+
required = false;
|
|
19
|
+
groupLabelId = nextSequentialId('sdc-pin-code-field-label');
|
|
17
20
|
codeFilled = new EventEmitter();
|
|
18
21
|
pinInputs;
|
|
19
22
|
groupAriaLabelKey = PIN_CODE_FIELD_GROUP_ARIA_LABEL_KEY;
|
|
@@ -59,6 +62,9 @@ export class PinCodeFieldComponent {
|
|
|
59
62
|
this.disabled = isDisabled;
|
|
60
63
|
this.cdr.markForCheck();
|
|
61
64
|
}
|
|
65
|
+
labelKey() {
|
|
66
|
+
return typeof this.label === 'string' ? this.label : '';
|
|
67
|
+
}
|
|
62
68
|
// Keyboard & input handlers
|
|
63
69
|
onFocus(event) {
|
|
64
70
|
const input = event.target;
|
|
@@ -196,13 +202,13 @@ export class PinCodeFieldComponent {
|
|
|
196
202
|
}
|
|
197
203
|
}
|
|
198
204
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PinCodeFieldComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
199
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PinCodeFieldComponent, isStandalone: true, selector: "sdc-pin-code-field", inputs: { id: "id", length: "length", alphanumeric: "alphanumeric", helpText: "helpText", invalid: "invalid", disabled: "disabled" }, outputs: { codeFilled: "codeFilled" }, providers: [
|
|
205
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PinCodeFieldComponent, isStandalone: true, selector: "sdc-pin-code-field", inputs: { id: "id", length: "length", alphanumeric: "alphanumeric", helpText: "helpText", invalid: "invalid", disabled: "disabled", label: "label", required: "required" }, outputs: { codeFilled: "codeFilled" }, providers: [
|
|
200
206
|
{
|
|
201
207
|
provide: NG_VALUE_ACCESSOR,
|
|
202
208
|
useExisting: forwardRef(() => PinCodeFieldComponent),
|
|
203
209
|
multi: true
|
|
204
210
|
}
|
|
205
|
-
], viewQueries: [{ propertyName: "pinInputs", predicate: ["pinInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-pin-code-field\">\n <div\n class=\"sdc-pin-code-field__inputs\"\n [attr.aria-label]=\"groupAriaLabelKey | translate\"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n >\n @for (value of inputs; track $index) {\n <input\n #pinInput\n type=\"text\"\n class=\"sdc-pin-code-field__input\"\n [class.sdc-pin-code-field__input--error]=\"hasError\"\n [class.sdc-pin-code-field__input--disabled]=\"disabled\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"\n (alphanumeric ? characterAriaLabelKey : digitAriaLabelKey)\n | translate : { n: $index + 1, total: length }\n \"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"true\"\n [attr.aria-invalid]=\"hasError\"\n [attr.inputmode]=\"alphanumeric ? 'text' : 'numeric'\"\n [attr.maxlength]=\"1\"\n autocomplete=\"off\"\n (focus)=\"onFocus($event)\"\n (input)=\"onInput($event, $index)\"\n (keydown)=\"onKeydown($event, $index)\"\n (paste)=\"onPaste($event, $index)\"\n (blur)=\"onBlur($index)\"\n />\n }\n </div>\n\n @if (helpText) {\n <div\n [id]=\"'pin-help-' + id\"\n class=\"sdc-pin-code-field__help\"\n >{{ helpText }}</div>\n }\n</div>\n", styles: [":host{display:block}.sdc-pin-code-field{--sdc-pin-code-field-input-size: 3rem;--sdc-pin-code-field-gap: .5rem;--sdc-pin-code-field-border: var(--sdc-color-border, #dedce5);--sdc-pin-code-field-border-focus: var(--sdc-color-primary, #428bca);--sdc-pin-code-field-border-error: var(--sdc-color-danger, #c13018);--sdc-pin-code-field-bg: #fff;--sdc-pin-code-field-bg-disabled: #f5f5f5;--sdc-pin-code-field-text: #212533;--sdc-pin-code-field-text-disabled: #697882;--sdc-pin-code-field-radius: .375rem;--sdc-pin-code-field-font-size: 1.125rem;--sdc-pin-code-field-help-color: #697882;display:flex;flex-direction:column;gap:.375rem}.sdc-pin-code-field__inputs{display:flex;flex-direction:row;gap:var(--sdc-pin-code-field-gap);align-items:center}.sdc-pin-code-field__input{
|
|
211
|
+
], viewQueries: [{ propertyName: "pinInputs", predicate: ["pinInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-pin-code-field\">\n @if (labelKey()) {\n <div class=\"sdc-pin-code-field__label-row\">\n <div class=\"sdc-pin-code-field__group-label\" [id]=\"groupLabelId\">\n <span class=\"sdc-pin-code-field__group-label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">{{ 'platform.datacore.accessibility.required_field' | translate }}</span>\n }\n </span>\n </div>\n </div>\n }\n\n <div\n class=\"sdc-pin-code-field__inputs\"\n [attr.aria-label]=\"labelKey() ? null : (groupAriaLabelKey | translate)\"\n [attr.aria-labelledby]=\"labelKey() ? groupLabelId : null\"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"hasError\"\n >\n @for (value of inputs; track $index) {\n <input\n #pinInput\n type=\"text\"\n class=\"sdc-pin-code-field__input\"\n [class.sdc-pin-code-field__input--error]=\"hasError\"\n [class.sdc-pin-code-field__input--disabled]=\"disabled\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"\n (alphanumeric ? characterAriaLabelKey : digitAriaLabelKey)\n | translate : { n: $index + 1, total: length }\n \"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"true\"\n [attr.aria-invalid]=\"hasError\"\n [attr.inputmode]=\"alphanumeric ? 'text' : 'numeric'\"\n [attr.maxlength]=\"1\"\n autocomplete=\"off\"\n (focus)=\"onFocus($event)\"\n (input)=\"onInput($event, $index)\"\n (keydown)=\"onKeydown($event, $index)\"\n (paste)=\"onPaste($event, $index)\"\n (blur)=\"onBlur($index)\"\n />\n }\n </div>\n\n @if (helpText) {\n <div\n [id]=\"'pin-help-' + id\"\n class=\"sdc-pin-code-field__help\"\n >{{ helpText }}</div>\n }\n</div>\n", styles: [":host{display:block}.sdc-pin-code-field__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-pin-code-field__group-label{display:inline-flex;align-items:center;font-size:var(--sdc-form-label-font-size);font-weight:var(--sdc-form-label-font-weight);color:var(--sdc-form-label-color);line-height:var(--sdc-form-label-lh);padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py)}.sdc-pin-code-field__group-label-text{display:inline-flex;align-items:center}.sdc-pin-code-field{--sdc-pin-code-field-input-size: 3rem;--sdc-pin-code-field-gap: .5rem;--sdc-pin-code-field-border: var(--sdc-color-border, #dedce5);--sdc-pin-code-field-border-focus: var(--sdc-color-primary, #428bca);--sdc-pin-code-field-border-error: var(--sdc-color-danger, #c13018);--sdc-pin-code-field-bg: #fff;--sdc-pin-code-field-bg-disabled: #f5f5f5;--sdc-pin-code-field-text: #212533;--sdc-pin-code-field-text-disabled: #697882;--sdc-pin-code-field-radius: .375rem;--sdc-pin-code-field-font-size: 1.125rem;--sdc-pin-code-field-help-color: #697882;display:flex;flex-direction:column;gap:.375rem}.sdc-pin-code-field__inputs{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sdc-pin-code-field-gap);align-items:center;max-width:100%}.sdc-pin-code-field__input{flex:0 1 var(--sdc-pin-code-field-input-size);min-width:0;max-width:var(--sdc-pin-code-field-input-size);aspect-ratio:1/1;height:auto;border:1px solid var(--sdc-pin-code-field-border);border-radius:var(--sdc-pin-code-field-radius);background-color:var(--sdc-pin-code-field-bg);color:var(--sdc-pin-code-field-text);font-size:var(--sdc-pin-code-field-font-size);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);text-align:center;outline:none;padding:0;transition:border-color .15s ease,box-shadow .15s ease;appearance:none;-moz-appearance:textfield}.sdc-pin-code-field__input::-webkit-outer-spin-button,.sdc-pin-code-field__input::-webkit-inner-spin-button{appearance:none;margin:0}.sdc-pin-code-field__input:focus{border-color:var(--sdc-pin-code-field-border-focus);box-shadow:0 0 0 3px #428bca33}.sdc-pin-code-field__input--error{border-color:var(--sdc-pin-code-field-border-error)}.sdc-pin-code-field__input--error:focus{border-color:var(--sdc-pin-code-field-border-error);box-shadow:0 0 0 3px #c1301833}.sdc-pin-code-field__input--disabled,.sdc-pin-code-field__input:disabled{background-color:var(--sdc-pin-code-field-bg-disabled);color:var(--sdc-pin-code-field-text-disabled);cursor:not-allowed;border-color:var(--sdc-pin-code-field-border)}.sdc-pin-code-field__help{font-size:.75rem;color:var(--sdc-pin-code-field-help-color);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);line-height:1.4}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
206
212
|
}
|
|
207
213
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PinCodeFieldComponent, decorators: [{
|
|
208
214
|
type: Component,
|
|
@@ -212,7 +218,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
212
218
|
useExisting: forwardRef(() => PinCodeFieldComponent),
|
|
213
219
|
multi: true
|
|
214
220
|
}
|
|
215
|
-
], template: "<div class=\"sdc-pin-code-field\">\n <div\n class=\"sdc-pin-code-field__inputs\"\n [attr.aria-label]=\"groupAriaLabelKey | translate\"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n >\n @for (value of inputs; track $index) {\n <input\n #pinInput\n type=\"text\"\n class=\"sdc-pin-code-field__input\"\n [class.sdc-pin-code-field__input--error]=\"hasError\"\n [class.sdc-pin-code-field__input--disabled]=\"disabled\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"\n (alphanumeric ? characterAriaLabelKey : digitAriaLabelKey)\n | translate : { n: $index + 1, total: length }\n \"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"true\"\n [attr.aria-invalid]=\"hasError\"\n [attr.inputmode]=\"alphanumeric ? 'text' : 'numeric'\"\n [attr.maxlength]=\"1\"\n autocomplete=\"off\"\n (focus)=\"onFocus($event)\"\n (input)=\"onInput($event, $index)\"\n (keydown)=\"onKeydown($event, $index)\"\n (paste)=\"onPaste($event, $index)\"\n (blur)=\"onBlur($index)\"\n />\n }\n </div>\n\n @if (helpText) {\n <div\n [id]=\"'pin-help-' + id\"\n class=\"sdc-pin-code-field__help\"\n >{{ helpText }}</div>\n }\n</div>\n", styles: [":host{display:block}.sdc-pin-code-field{--sdc-pin-code-field-input-size: 3rem;--sdc-pin-code-field-gap: .5rem;--sdc-pin-code-field-border: var(--sdc-color-border, #dedce5);--sdc-pin-code-field-border-focus: var(--sdc-color-primary, #428bca);--sdc-pin-code-field-border-error: var(--sdc-color-danger, #c13018);--sdc-pin-code-field-bg: #fff;--sdc-pin-code-field-bg-disabled: #f5f5f5;--sdc-pin-code-field-text: #212533;--sdc-pin-code-field-text-disabled: #697882;--sdc-pin-code-field-radius: .375rem;--sdc-pin-code-field-font-size: 1.125rem;--sdc-pin-code-field-help-color: #697882;display:flex;flex-direction:column;gap:.375rem}.sdc-pin-code-field__inputs{display:flex;flex-direction:row;gap:var(--sdc-pin-code-field-gap);align-items:center}.sdc-pin-code-field__input{
|
|
221
|
+
], template: "<div class=\"sdc-pin-code-field\">\n @if (labelKey()) {\n <div class=\"sdc-pin-code-field__label-row\">\n <div class=\"sdc-pin-code-field__group-label\" [id]=\"groupLabelId\">\n <span class=\"sdc-pin-code-field__group-label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">{{ 'platform.datacore.accessibility.required_field' | translate }}</span>\n }\n </span>\n </div>\n </div>\n }\n\n <div\n class=\"sdc-pin-code-field__inputs\"\n [attr.aria-label]=\"labelKey() ? null : (groupAriaLabelKey | translate)\"\n [attr.aria-labelledby]=\"labelKey() ? groupLabelId : null\"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"hasError\"\n >\n @for (value of inputs; track $index) {\n <input\n #pinInput\n type=\"text\"\n class=\"sdc-pin-code-field__input\"\n [class.sdc-pin-code-field__input--error]=\"hasError\"\n [class.sdc-pin-code-field__input--disabled]=\"disabled\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"\n (alphanumeric ? characterAriaLabelKey : digitAriaLabelKey)\n | translate : { n: $index + 1, total: length }\n \"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"true\"\n [attr.aria-invalid]=\"hasError\"\n [attr.inputmode]=\"alphanumeric ? 'text' : 'numeric'\"\n [attr.maxlength]=\"1\"\n autocomplete=\"off\"\n (focus)=\"onFocus($event)\"\n (input)=\"onInput($event, $index)\"\n (keydown)=\"onKeydown($event, $index)\"\n (paste)=\"onPaste($event, $index)\"\n (blur)=\"onBlur($index)\"\n />\n }\n </div>\n\n @if (helpText) {\n <div\n [id]=\"'pin-help-' + id\"\n class=\"sdc-pin-code-field__help\"\n >{{ helpText }}</div>\n }\n</div>\n", styles: [":host{display:block}.sdc-pin-code-field__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-pin-code-field__group-label{display:inline-flex;align-items:center;font-size:var(--sdc-form-label-font-size);font-weight:var(--sdc-form-label-font-weight);color:var(--sdc-form-label-color);line-height:var(--sdc-form-label-lh);padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py)}.sdc-pin-code-field__group-label-text{display:inline-flex;align-items:center}.sdc-pin-code-field{--sdc-pin-code-field-input-size: 3rem;--sdc-pin-code-field-gap: .5rem;--sdc-pin-code-field-border: var(--sdc-color-border, #dedce5);--sdc-pin-code-field-border-focus: var(--sdc-color-primary, #428bca);--sdc-pin-code-field-border-error: var(--sdc-color-danger, #c13018);--sdc-pin-code-field-bg: #fff;--sdc-pin-code-field-bg-disabled: #f5f5f5;--sdc-pin-code-field-text: #212533;--sdc-pin-code-field-text-disabled: #697882;--sdc-pin-code-field-radius: .375rem;--sdc-pin-code-field-font-size: 1.125rem;--sdc-pin-code-field-help-color: #697882;display:flex;flex-direction:column;gap:.375rem}.sdc-pin-code-field__inputs{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sdc-pin-code-field-gap);align-items:center;max-width:100%}.sdc-pin-code-field__input{flex:0 1 var(--sdc-pin-code-field-input-size);min-width:0;max-width:var(--sdc-pin-code-field-input-size);aspect-ratio:1/1;height:auto;border:1px solid var(--sdc-pin-code-field-border);border-radius:var(--sdc-pin-code-field-radius);background-color:var(--sdc-pin-code-field-bg);color:var(--sdc-pin-code-field-text);font-size:var(--sdc-pin-code-field-font-size);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);text-align:center;outline:none;padding:0;transition:border-color .15s ease,box-shadow .15s ease;appearance:none;-moz-appearance:textfield}.sdc-pin-code-field__input::-webkit-outer-spin-button,.sdc-pin-code-field__input::-webkit-inner-spin-button{appearance:none;margin:0}.sdc-pin-code-field__input:focus{border-color:var(--sdc-pin-code-field-border-focus);box-shadow:0 0 0 3px #428bca33}.sdc-pin-code-field__input--error{border-color:var(--sdc-pin-code-field-border-error)}.sdc-pin-code-field__input--error:focus{border-color:var(--sdc-pin-code-field-border-error);box-shadow:0 0 0 3px #c1301833}.sdc-pin-code-field__input--disabled,.sdc-pin-code-field__input:disabled{background-color:var(--sdc-pin-code-field-bg-disabled);color:var(--sdc-pin-code-field-text-disabled);cursor:not-allowed;border-color:var(--sdc-pin-code-field-border)}.sdc-pin-code-field__help{font-size:.75rem;color:var(--sdc-pin-code-field-help-color);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);line-height:1.4}\n"] }]
|
|
216
222
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { id: [{
|
|
217
223
|
type: Input
|
|
218
224
|
}], length: [{
|
|
@@ -225,10 +231,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
225
231
|
type: Input
|
|
226
232
|
}], disabled: [{
|
|
227
233
|
type: Input
|
|
234
|
+
}], label: [{
|
|
235
|
+
type: Input
|
|
236
|
+
}], required: [{
|
|
237
|
+
type: Input
|
|
228
238
|
}], codeFilled: [{
|
|
229
239
|
type: Output
|
|
230
240
|
}], pinInputs: [{
|
|
231
241
|
type: ViewChildren,
|
|
232
242
|
args: ['pinInput']
|
|
233
243
|
}] } });
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9waW4tY29kZS1maWVsZC9waW4tY29kZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Bpbi1jb2RlLWZpZWxkL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFHTixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQ0wsdUNBQXVDLEVBQ3ZDLG1DQUFtQyxFQUNuQyw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLG1DQUFtQyxFQUNwQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFrQjVELE1BQU0sT0FBTyxxQkFBcUI7SUFzQkg7SUFyQnBCLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxNQUFNLEdBQUcsNkJBQTZCLENBQUM7SUFDdkMsWUFBWSxHQUFHLG1DQUFtQyxDQUFDO0lBQ25ELFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDZCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFaEIsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENB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QUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7d0dBNU9VLHFCQUFxQjs0RkFBckIscUJBQXFCLDhPQVJyQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUM7Z0JBQ3BELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRix5SUMxQ0gsNDJDQXlDQSx1cEVEVlksWUFBWSw4QkFBRSxlQUFlLDJGQUFFLFdBQVc7OzRGQWF6QyxxQkFBcUI7a0JBaEJqQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQyxtQkFHcEMsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsUUFBUSxhQUM5Qjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7c0ZBR1EsRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFFbUIsU0FBUztzQkFBbEMsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQge1xuICBQSU5fQ09ERV9GSUVMRF9DSEFSQUNURVJfQVJJQV9MQUJFTF9LRVksXG4gIFBJTl9DT0RFX0ZJRUxEX0RFRkFVTFRfQUxQSEFOVU1FUklDLFxuICBQSU5fQ09ERV9GSUVMRF9ERUZBVUxUX0xFTkdUSCxcbiAgUElOX0NPREVfRklFTERfRElHSVRfQVJJQV9MQUJFTF9LRVksXG4gIFBJTl9DT0RFX0ZJRUxEX0dST1VQX0FSSUFfTEFCRUxfS0VZXG59IGZyb20gJy4uLy4uL2NvcmUvY29uc3RhbnRzL3Bpbi1jb2RlLWZpZWxkLmNvbnN0JztcbmltcG9ydCB7IG5leHRTZXF1ZW50aWFsSWQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2lkLnV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtcGluLWNvZGUtZmllbGQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBpbkNvZGVGaWVsZENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQaW5Db2RlRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgaWQgPSBuZXh0U2VxdWVudGlhbElkKCdzZGMtcGluJyk7XG4gIEBJbnB1dCgpIGxlbmd0aCA9IFBJTl9DT0RFX0ZJRUxEX0RFRkFVTFRfTEVOR1RIO1xuICBASW5wdXQoKSBhbHBoYW51bWVyaWMgPSBQSU5fQ09ERV9GSUVMRF9ERUZBVUxUX0FMUEhBTlVNRVJJQztcbiAgQElucHV0KCkgaGVscFRleHQgPSAnJztcbiAgQElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBjb2RlRmlsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQFZpZXdDaGlsZHJlbigncGluSW5wdXQnKSBwaW5JbnB1dHMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj47XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdyb3VwQXJpYUxhYmVsS2V5ID0gUElOX0NPREVfRklFTERfR1JPVVBfQVJJQV9MQUJFTF9LRVk7XG4gIHByb3RlY3RlZCByZWFkb25seSBkaWdpdEFyaWFMYWJlbEtleSA9IFBJTl9DT0RFX0ZJRUxEX0RJR0lUX0FSSUFfTEFCRUxfS0VZO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2hhcmFjdGVyQXJpYUxhYmVsS2V5ID0gUElOX0NPREVfRklFTERfQ0hBUkFDVEVSX0FSSUFfTEFCRUxfS0VZO1xuXG4gIHByb3RlY3RlZCBpbnB1dHM6IHN0cmluZ1tdID0gW107XG4gIHByb3RlY3RlZCB0b3VjaGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkPzogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLmlucHV0cyA9IEFycmF5KHRoaXMubGVuZ3RoKS5maWxsKCcnKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dHMuam9pbignJyk7XG4gIH1cblxuICBnZXQgaXNDb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dHMuZXZlcnkodiA9PiB2Lmxlbmd0aCA9PT0gMSk7XG4gIH1cblxuICBnZXQgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snbGVuZ3RoJ10pIHtcbiAgICAgIGNvbnN0IG5ld0xlbmd0aCA9IGNoYW5nZXNbJ2xlbmd0aCddLmN1cnJlbnRWYWx1ZSBhcyBudW1iZXI7XG4gICAgICBjb25zdCBvbGRJbnB1dHMgPSB0aGlzLmlucHV0cy5zbGljZSgpO1xuICAgICAgdGhpcy5pbnB1dHMgPSBBcnJheShuZXdMZW5ndGgpLmZpbGwoJycpLm1hcCgoXywgaSkgPT4gb2xkSW5wdXRzW2ldID8/ICcnKTtcbiAgICB9XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvclxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBzdHIgPSB2YWx1ZSA/PyAnJztcbiAgICB0aGlzLmlucHV0cyA9IEFycmF5KHRoaXMubGVuZ3RoKS5maWxsKCcnKS5tYXAoKF8sIGkpID0+IHN0cltpXSA/PyAnJyk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBLZXlib2FyZCAmIGlucHV0IGhhbmRsZXJzXG5cbiAgb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaW5wdXQuc2VsZWN0KCk7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCByYXcgPSBpbnB1dC52YWx1ZTtcbiAgICBjb25zdCB2YWxpZENoYXIgPSB0aGlzLmV4dHJhY3RWYWxpZENoYXIocmF3KTtcblxuICAgIGlmICh2YWxpZENoYXIpIHtcbiAgICAgIHRoaXMuaW5wdXRzW2luZGV4XSA9IHZhbGlkQ2hhcjtcbiAgICAgIGlucHV0LnZhbHVlID0gdmFsaWRDaGFyO1xuICAgICAgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcbiAgICAgIHRoaXMuYWR2YW5jZUZvY3VzKGluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dHNbaW5kZXhdID0gJyc7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuXG4gICAgaWYgKGtleSA9PT0gJ0JhY2tzcGFjZScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGlmICh0aGlzLmlucHV0c1tpbmRleF0pIHtcbiAgICAgICAgdGhpcy5pbnB1dHNbaW5kZXhdID0gJyc7XG4gICAgICAgIGNvbnN0IGlucHV0RWwgPSB0aGlzLmdldElucHV0RWwoaW5kZXgpO1xuICAgICAgICBpZiAoaW5wdXRFbCkge1xuICAgICAgICAgIGlucHV0RWwudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vdGlmeUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXMoaW5kZXggLSAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5tb3ZlRm9jdXMoaW5kZXggKyAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMubW92ZUZvY3VzKGluZGV4IC0gMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gS2VlcCBicmFuY2ggZXhwbGljaXQgZm9yIHN0YXRpYy1hbmFseXNpcyBydWxlIHJlcXVpcmluZyBlbHNlL2RlZmF1bHQgaGFuZGxpbmcuXG4gICAgaWYgKGtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50LCBzdGFydEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgcGFzdGVkID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpID8/ICcnO1xuICAgIGNvbnN0IHZhbGlkQ2hhcnMgPSB0aGlzLmV4dHJhY3RWYWxpZENoYXJzRnJvbVN0cmluZyhwYXN0ZWQpO1xuICAgIGxldCBjdXJzb3IgPSBzdGFydEluZGV4O1xuXG4gICAgZm9yIChjb25zdCBjaGFyIG9mIHZhbGlkQ2hhcnMpIHtcbiAgICAgIGlmIChjdXJzb3IgPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLmlucHV0c1tjdXJzb3JdID0gY2hhcjtcbiAgICAgIGNvbnN0IGlucHV0RWwgPSB0aGlzLmdldElucHV0RWwoY3Vyc29yKTtcbiAgICAgIGlmIChpbnB1dEVsKSB7XG4gICAgICAgIGlucHV0RWwudmFsdWUgPSBjaGFyO1xuICAgICAgfVxuICAgICAgY3Vyc29yID0gY3Vyc29yICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeUNoYW5nZSgpO1xuXG4gICAgY29uc3QgZm9jdXNUYXJnZXQgPSBNYXRoLm1pbihjdXJzb3IsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5tb3ZlRm9jdXMoZm9jdXNUYXJnZXQpO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkJsdXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpbmRleCA9PT0gdGhpcy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkPy4oKTtcbiAgICB9XG4gIH1cblxuICAvLyBQcml2YXRlIGhlbHBlcnNcblxuICBwcml2YXRlIGV4dHJhY3RWYWxpZENoYXIocmF3OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghcmF3KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhcnMgPSByYXcuc3BsaXQoJycpO1xuXG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkQ2hhcihjaGFyKSkge1xuICAgICAgICByZXR1cm4gY2hhcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RWYWxpZENoYXJzRnJvbVN0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gc3RyLnNwbGl0KCcnKS5maWx0ZXIoYyA9PiB0aGlzLmlzVmFsaWRDaGFyKGMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZENoYXIoY2hhcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYWxwaGFudW1lcmljKSB7XG4gICAgICByZXR1cm4gY2hhci50cmltKCkubGVuZ3RoID09PSAxO1xuICAgIH1cblxuICAgIHJldHVybiAvXFxkLy50ZXN0KGNoYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZHZhbmNlRm9jdXMoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubW92ZUZvY3VzKGluZGV4ICsgMSk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVGb2N1cyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0RWwgPSB0aGlzLmdldElucHV0RWwoaW5kZXgpO1xuICAgIGlucHV0RWw/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGdldElucHV0RWwoaW5kZXg6IG51bWJlcik6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5waW5JbnB1dHM/LnRvQXJyYXkoKTtcblxuICAgIGlmICghbGlzdCB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gbGlzdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0W2luZGV4XT8ubmF0aXZlRWxlbWVudCA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBub3RpZnlDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2U/Lih0aGlzLmN1cnJlbnRWYWx1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0NvbXBsZXRlKSB7XG4gICAgICB0aGlzLmNvZGVGaWxsZWQuZW1pdCh0aGlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2RjLXBpbi1jb2RlLWZpZWxkXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZF9faW5wdXRzXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdyb3VwQXJpYUxhYmVsS2V5IHwgdHJhbnNsYXRlXCJcbiAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImhlbHBUZXh0ID8gJ3Bpbi1oZWxwLScgKyBpZCA6IG51bGxcIlxuICA+XG4gICAgQGZvciAodmFsdWUgb2YgaW5wdXRzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgIDxpbnB1dFxuICAgICAgICAjcGluSW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZF9faW5wdXRcIlxuICAgICAgICBbY2xhc3Muc2RjLXBpbi1jb2RlLWZpZWxkX19pbnB1dC0tZXJyb3JdPVwiaGFzRXJyb3JcIlxuICAgICAgICBbY2xhc3Muc2RjLXBpbi1jb2RlLWZpZWxkX19pbnB1dC0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgIChhbHBoYW51bWVyaWMgPyBjaGFyYWN0ZXJBcmlhTGFiZWxLZXkgOiBkaWdpdEFyaWFMYWJlbEtleSlcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlIDogeyBuOiAkaW5kZXggKyAxLCB0b3RhbDogbGVuZ3RoIH1cbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJoZWxwVGV4dCA/ICdwaW4taGVscC0nICsgaWQgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yXCJcbiAgICAgICAgW2F0dHIuaW5wdXRtb2RlXT1cImFscGhhbnVtZXJpYyA/ICd0ZXh0JyA6ICdudW1lcmljJ1wiXG4gICAgICAgIFthdHRyLm1heGxlbmd0aF09XCIxXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChpbnB1dCk9XCJvbklucHV0KCRldmVudCwgJGluZGV4KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQsICRpbmRleClcIlxuICAgICAgICAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQsICRpbmRleClcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGluZGV4KVwiXG4gICAgICAvPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgQGlmIChoZWxwVGV4dCkge1xuICAgIDxkaXZcbiAgICAgIFtpZF09XCIncGluLWhlbHAtJyArIGlkXCJcbiAgICAgIGNsYXNzPVwic2RjLXBpbi1jb2RlLWZpZWxkX19oZWxwXCJcbiAgICA+e3sgaGVscFRleHQgfX08L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9waW4tY29kZS1maWVsZC9waW4tY29kZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Bpbi1jb2RlLWZpZWxkL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFHTixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQ0wsdUNBQXVDLEVBQ3ZDLG1DQUFtQyxFQUNuQyw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLG1DQUFtQyxFQUNwQyxNQUFNLDJDQUEyQyxDQUFDO0FBRW5ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFrQjVELE1BQU0sT0FBTyxxQkFBcUI7SUEwQkg7SUF6QnBCLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxNQUFNLEdBQUcsNkJBQTZCLENBQUM7SUFDdkMsWUFBWSxHQUFHLG1DQUFtQyxDQUFDO0lBQ25ELFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDZCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsS0FBSyxHQUFrQixLQUFLLENBQUM7SUFDN0Is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O2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRW1CLFNBQVM7c0JBQWxDLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHtcbiAgUElOX0NPREVfRklFTERfQ0hBUkFDVEVSX0FSSUFfTEFCRUxfS0VZLFxuICBQSU5fQ09ERV9GSUVMRF9ERUZBVUxUX0FMUEhBTlVNRVJJQyxcbiAgUElOX0NPREVfRklFTERfREVGQVVMVF9MRU5HVEgsXG4gIFBJTl9DT0RFX0ZJRUxEX0RJR0lUX0FSSUFfTEFCRUxfS0VZLFxuICBQSU5fQ09ERV9GSUVMRF9HUk9VUF9BUklBX0xBQkVMX0tFWVxufSBmcm9tICcuLi8uLi9jb3JlL2NvbnN0YW50cy9waW4tY29kZS1maWVsZC5jb25zdCc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NlbWFudGljcy50eXBlJztcbmltcG9ydCB7IG5leHRTZXF1ZW50aWFsSWQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2lkLnV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtcGluLWNvZGUtZmllbGQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBpbkNvZGVGaWVsZENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQaW5Db2RlRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgaWQgPSBuZXh0U2VxdWVudGlhbElkKCdzZGMtcGluJyk7XG4gIEBJbnB1dCgpIGxlbmd0aCA9IFBJTl9DT0RFX0ZJRUxEX0RFRkFVTFRfTEVOR1RIO1xuICBASW5wdXQoKSBhbHBoYW51bWVyaWMgPSBQSU5fQ09ERV9GSUVMRF9ERUZBVUxUX0FMUEhBTlVNRVJJQztcbiAgQElucHV0KCkgaGVscFRleHQgPSAnJztcbiAgQElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBsYWJlbDogU3RyaW5nQm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBncm91cExhYmVsSWQgPSBuZXh0U2VxdWVudGlhbElkKCdzZGMtcGluLWNvZGUtZmllbGQtbGFiZWwnKTtcblxuICBAT3V0cHV0KCkgY29kZUZpbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ3BpbklucHV0JykgcGluSW5wdXRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBncm91cEFyaWFMYWJlbEtleSA9IFBJTl9DT0RFX0ZJRUxEX0dST1VQX0FSSUFfTEFCRUxfS0VZO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlnaXRBcmlhTGFiZWxLZXkgPSBQSU5fQ09ERV9GSUVMRF9ESUdJVF9BUklBX0xBQkVMX0tFWTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoYXJhY3RlckFyaWFMYWJlbEtleSA9IFBJTl9DT0RFX0ZJRUxEX0NIQVJBQ1RFUl9BUklBX0xBQkVMX0tFWTtcblxuICBwcm90ZWN0ZWQgaW5wdXRzOiBzdHJpbmdbXSA9IFtdO1xuICBwcm90ZWN0ZWQgdG91Y2hlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgX29uVG91Y2hlZD86ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5pbnB1dHMgPSBBcnJheSh0aGlzLmxlbmd0aCkuZmlsbCgnJyk7XG4gIH1cblxuICBnZXQgY3VycmVudFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRzLmpvaW4oJycpO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRzLmV2ZXJ5KHYgPT4gdi5sZW5ndGggPT09IDEpO1xuICB9XG5cbiAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2xlbmd0aCddKSB7XG4gICAgICBjb25zdCBuZXdMZW5ndGggPSBjaGFuZ2VzWydsZW5ndGgnXS5jdXJyZW50VmFsdWUgYXMgbnVtYmVyO1xuICAgICAgY29uc3Qgb2xkSW5wdXRzID0gdGhpcy5pbnB1dHMuc2xpY2UoKTtcbiAgICAgIHRoaXMuaW5wdXRzID0gQXJyYXkobmV3TGVuZ3RoKS5maWxsKCcnKS5tYXAoKF8sIGkpID0+IG9sZElucHV0c1tpXSA/PyAnJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3JcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3Qgc3RyID0gdmFsdWUgPz8gJyc7XG4gICAgdGhpcy5pbnB1dHMgPSBBcnJheSh0aGlzLmxlbmd0aCkuZmlsbCgnJykubWFwKChfLCBpKSA9PiBzdHJbaV0gPz8gJycpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbGFiZWxLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMubGFiZWwgPT09ICdzdHJpbmcnID8gdGhpcy5sYWJlbCA6ICcnO1xuICB9XG5cbiAgLy8gS2V5Ym9hcmQgJiBpbnB1dCBoYW5kbGVyc1xuXG4gIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlucHV0LnNlbGVjdCgpO1xuICB9XG5cbiAgb25JbnB1dChldmVudDogRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgcmF3ID0gaW5wdXQudmFsdWU7XG4gICAgY29uc3QgdmFsaWRDaGFyID0gdGhpcy5leHRyYWN0VmFsaWRDaGFyKHJhdyk7XG5cbiAgICBpZiAodmFsaWRDaGFyKSB7XG4gICAgICB0aGlzLmlucHV0c1tpbmRleF0gPSB2YWxpZENoYXI7XG4gICAgICBpbnB1dC52YWx1ZSA9IHZhbGlkQ2hhcjtcbiAgICAgIHRoaXMubm90aWZ5Q2hhbmdlKCk7XG4gICAgICB0aGlzLmFkdmFuY2VGb2N1cyhpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5wdXRzW2luZGV4XSA9ICcnO1xuICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMubm90aWZ5Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcblxuICAgIGlmIChrZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAodGhpcy5pbnB1dHNbaW5kZXhdKSB7XG4gICAgICAgIHRoaXMuaW5wdXRzW2luZGV4XSA9ICcnO1xuICAgICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5nZXRJbnB1dEVsKGluZGV4KTtcbiAgICAgICAgaWYgKGlucHV0RWwpIHtcbiAgICAgICAgICBpbnB1dEVsLnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzKGluZGV4IC0gMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMubW92ZUZvY3VzKGluZGV4ICsgMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm1vdmVGb2N1cyhpbmRleCAtIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEtlZXAgYnJhbmNoIGV4cGxpY2l0IGZvciBzdGF0aWMtYW5hbHlzaXMgcnVsZSByZXF1aXJpbmcgZWxzZS9kZWZhdWx0IGhhbmRsaW5nLlxuICAgIGlmIChrZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgc3RhcnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHBhc3RlZCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSA/PyAnJztcbiAgICBjb25zdCB2YWxpZENoYXJzID0gdGhpcy5leHRyYWN0VmFsaWRDaGFyc0Zyb21TdHJpbmcocGFzdGVkKTtcbiAgICBsZXQgY3Vyc29yID0gc3RhcnRJbmRleDtcblxuICAgIGZvciAoY29uc3QgY2hhciBvZiB2YWxpZENoYXJzKSB7XG4gICAgICBpZiAoY3Vyc29yID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dHNbY3Vyc29yXSA9IGNoYXI7XG4gICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5nZXRJbnB1dEVsKGN1cnNvcik7XG4gICAgICBpZiAoaW5wdXRFbCkge1xuICAgICAgICBpbnB1dEVsLnZhbHVlID0gY2hhcjtcbiAgICAgIH1cbiAgICAgIGN1cnNvciA9IGN1cnNvciArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcblxuICAgIGNvbnN0IGZvY3VzVGFyZ2V0ID0gTWF0aC5taW4oY3Vyc29yLCB0aGlzLmxlbmd0aCAtIDEpO1xuICAgIHRoaXMubW92ZUZvY3VzKGZvY3VzVGFyZ2V0KTtcblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25CbHVyKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXJzXG5cbiAgcHJpdmF0ZSBleHRyYWN0VmFsaWRDaGFyKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXJhdykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJzID0gcmF3LnNwbGl0KCcnKTtcblxuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZENoYXIoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIGNoYXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0VmFsaWRDaGFyc0Zyb21TdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHN0ci5zcGxpdCgnJykuZmlsdGVyKGMgPT4gdGhpcy5pc1ZhbGlkQ2hhcihjKSk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRDaGFyKGNoYXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFscGhhbnVtZXJpYykge1xuICAgICAgcmV0dXJuIGNoYXIudHJpbSgpLmxlbmd0aCA9PT0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gL1xcZC8udGVzdChjaGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgYWR2YW5jZUZvY3VzKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1vdmVGb2N1cyhpbmRleCArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXMoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5nZXRJbnB1dEVsKGluZGV4KTtcbiAgICBpbnB1dEVsPy5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnB1dEVsKGluZGV4OiBudW1iZXIpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMucGluSW5wdXRzPy50b0FycmF5KCk7XG5cbiAgICBpZiAoIWxpc3QgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IGxpc3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdFtpbmRleF0/Lm5hdGl2ZUVsZW1lbnQgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlPy4odGhpcy5jdXJyZW50VmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuaXNDb21wbGV0ZSkge1xuICAgICAgdGhpcy5jb2RlRmlsbGVkLmVtaXQodGhpcy5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZFwiPlxuICBAaWYgKGxhYmVsS2V5KCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwic2RjLXBpbi1jb2RlLWZpZWxkX19sYWJlbC1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtcGluLWNvZGUtZmllbGRfX2dyb3VwLWxhYmVsXCIgW2lkXT1cImdyb3VwTGFiZWxJZFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZF9fZ3JvdXAtbGFiZWwtdGV4dFwiPlxuICAgICAgICAgIHt7IGxhYmVsS2V5KCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkLWZpZWxkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7ICdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5LnJlcXVpcmVkX2ZpZWxkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2RjLXBpbi1jb2RlLWZpZWxkX19pbnB1dHNcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxLZXkoKSA/IG51bGwgOiAoZ3JvdXBBcmlhTGFiZWxLZXkgfCB0cmFuc2xhdGUpXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxLZXkoKSA/IGdyb3VwTGFiZWxJZCA6IG51bGxcIlxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGVscFRleHQgPyAncGluLWhlbHAtJyArIGlkIDogbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yXCJcbiAgPlxuICAgIEBmb3IgKHZhbHVlIG9mIGlucHV0czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgI3BpbklucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJzZGMtcGluLWNvZGUtZmllbGRfX2lucHV0XCJcbiAgICAgICAgW2NsYXNzLnNkYy1waW4tY29kZS1maWVsZF9faW5wdXQtLWVycm9yXT1cImhhc0Vycm9yXCJcbiAgICAgICAgW2NsYXNzLnNkYy1waW4tY29kZS1maWVsZF9faW5wdXQtLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAoYWxwaGFudW1lcmljID8gY2hhcmFjdGVyQXJpYUxhYmVsS2V5IDogZGlnaXRBcmlhTGFiZWxLZXkpXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZSA6IHsgbjogJGluZGV4ICsgMSwgdG90YWw6IGxlbmd0aCB9XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGVscFRleHQgPyAncGluLWhlbHAtJyArIGlkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvclwiXG4gICAgICAgIFthdHRyLmlucHV0bW9kZV09XCJhbHBoYW51bWVyaWMgPyAndGV4dCcgOiAnbnVtZXJpYydcIlxuICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwiMVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQsICRpbmRleClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRpbmRleClcIlxuICAgICAgLz5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIEBpZiAoaGVscFRleHQpIHtcbiAgICA8ZGl2XG4gICAgICBbaWRdPVwiJ3Bpbi1oZWxwLScgKyBpZFwiXG4gICAgICBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZF9faGVscFwiXG4gICAgPnt7IGhlbHBUZXh0IH19PC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { CommonModule, DOCUMENT } from '@angular/common';
|
|
2
2
|
import { ChangeDetectorRef, ChangeDetectionStrategy, Component, EventEmitter, Input, NgZone, Output, ViewChild, ViewEncapsulation, inject } from '@angular/core';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
3
4
|
import { TranslateService } from '@ngx-translate/core';
|
|
4
5
|
import { Subscription } from 'rxjs';
|
|
5
6
|
import { POPOVER_DEFAULT_MAX_HEIGHT, POPOVER_DEFAULT_OFFSET, POPOVER_DEFAULT_PLACEMENT, POPOVER_DEFAULT_Z_INDEX, POPOVER_VIEWPORT_MARGIN } from '../../core/constants/popover.const';
|
|
6
7
|
import { focusFirstDescendant, restoreFocus, trapFocusInContainer } from '../../core/utils/focus.util';
|
|
7
8
|
import { nextSequentialId } from '../../core/utils/id.util';
|
|
8
9
|
import { resolveTranslatableText } from '../../core/utils/i18n.util';
|
|
10
|
+
import { watchOverlayDismiss } from '../../core/utils/overlay-dismiss.util';
|
|
9
11
|
import * as i0 from "@angular/core";
|
|
10
12
|
import * as i1 from "@angular/common";
|
|
11
13
|
const POPOVER_MIN_PANEL_HEIGHT_PX = 80;
|
|
@@ -46,11 +48,13 @@ export class PopoverComponent {
|
|
|
46
48
|
zone = inject(NgZone);
|
|
47
49
|
cdr = inject(ChangeDetectorRef);
|
|
48
50
|
translate = inject(TranslateService);
|
|
51
|
+
router = inject(Router, { optional: true });
|
|
49
52
|
subscriptions = new Subscription();
|
|
50
53
|
open = false;
|
|
51
54
|
disabled = false;
|
|
52
55
|
toggleOnTriggerClick = true;
|
|
53
56
|
closeOnOutsideClick = true;
|
|
57
|
+
closeOnScroll = false;
|
|
54
58
|
closeOnEscape = true;
|
|
55
59
|
trapFocus = false;
|
|
56
60
|
focusOnOpen = false;
|
|
@@ -75,6 +79,7 @@ export class PopoverComponent {
|
|
|
75
79
|
overlayHost = null;
|
|
76
80
|
previouslyFocusedElement = null;
|
|
77
81
|
listenersBound = false;
|
|
82
|
+
dismissWatcher = null;
|
|
78
83
|
constructor() {
|
|
79
84
|
this.subscriptions.add(this.translate.onLangChange.subscribe(() => {
|
|
80
85
|
this.applyPanelState();
|
|
@@ -116,6 +121,10 @@ export class PopoverComponent {
|
|
|
116
121
|
if (!this.open) {
|
|
117
122
|
return;
|
|
118
123
|
}
|
|
124
|
+
if (this.closeOnScroll) {
|
|
125
|
+
this.zone.run(() => this.closePanel());
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
119
128
|
this.reposition();
|
|
120
129
|
};
|
|
121
130
|
ngAfterViewInit() {
|
|
@@ -250,7 +259,14 @@ export class PopoverComponent {
|
|
|
250
259
|
computePosition(triggerRect, panelRect) {
|
|
251
260
|
const viewportWidth = this.documentRef.defaultView?.innerWidth ?? 0;
|
|
252
261
|
const viewportHeight = this.documentRef.defaultView?.innerHeight ?? 0;
|
|
253
|
-
|
|
262
|
+
// NOTE: `panelRect.height` is measured AFTER the real CSS (including any consumer
|
|
263
|
+
// `::ng-deep` override of `max-height`, e.g. the datepicker disabling the scroll cap) has
|
|
264
|
+
// been applied, so it already reflects the true rendered height. Re-clamping it against
|
|
265
|
+
// `panelMaxHeight` here would force the position math to assume a smaller box than what
|
|
266
|
+
// actually renders, causing the panel to overlap the trigger when placed above it
|
|
267
|
+
// (worse the taller the real content is, e.g. datetime/time pickers). Only fall back to
|
|
268
|
+
// `panelMaxHeight` when the panel hasn't rendered any height yet.
|
|
269
|
+
const usableHeight = panelRect.height || this.panelMaxHeight;
|
|
254
270
|
const usableWidth = panelRect.width || triggerRect.width;
|
|
255
271
|
const placement = this.resolvePlacement(triggerRect, usableHeight, viewportHeight);
|
|
256
272
|
let top = this.resolveTop(triggerRect, usableHeight, placement);
|
|
@@ -294,6 +310,12 @@ export class PopoverComponent {
|
|
|
294
310
|
this.documentRef.addEventListener('keydown', this.onDocumentKeydown, true);
|
|
295
311
|
view?.addEventListener('resize', this.onViewportChange, true);
|
|
296
312
|
view?.addEventListener('scroll', this.onViewportChange, true);
|
|
313
|
+
this.dismissWatcher = watchOverlayDismiss({
|
|
314
|
+
getTriggerElement: () => this.triggerRef?.nativeElement ?? null,
|
|
315
|
+
isOpen: () => this.open,
|
|
316
|
+
onDismiss: () => this.zone.run(() => this.closePanel()),
|
|
317
|
+
router: this.router
|
|
318
|
+
});
|
|
297
319
|
});
|
|
298
320
|
this.listenersBound = true;
|
|
299
321
|
}
|
|
@@ -306,6 +328,8 @@ export class PopoverComponent {
|
|
|
306
328
|
this.documentRef.removeEventListener('keydown', this.onDocumentKeydown, true);
|
|
307
329
|
view?.removeEventListener('resize', this.onViewportChange, true);
|
|
308
330
|
view?.removeEventListener('scroll', this.onViewportChange, true);
|
|
331
|
+
this.dismissWatcher?.destroy();
|
|
332
|
+
this.dismissWatcher = null;
|
|
309
333
|
this.listenersBound = false;
|
|
310
334
|
}
|
|
311
335
|
hasInputChanged(changes, key) {
|
|
@@ -380,7 +404,7 @@ export class PopoverComponent {
|
|
|
380
404
|
return triggerRect.left;
|
|
381
405
|
}
|
|
382
406
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
383
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PopoverComponent, isStandalone: true, selector: "sdc-popover", inputs: { open: "open", disabled: "disabled", toggleOnTriggerClick: "toggleOnTriggerClick", closeOnOutsideClick: "closeOnOutsideClick", closeOnEscape: "closeOnEscape", trapFocus: "trapFocus", focusOnOpen: "focusOnOpen", restoreFocusOnClose: "restoreFocusOnClose", ariaLabel: "ariaLabel", appendTo: "appendTo", zIndex: "zIndex", offset: "offset", placement: "placement", role: "role", matchTriggerWidth: "matchTriggerWidth", panelWidth: "panelWidth", panelMinWidth: "panelMinWidth", panelMaxWidth: "panelMaxWidth", panelMaxHeight: "panelMaxHeight", panelClass: "panelClass" }, outputs: { openChange: "openChange" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerRef"], descendants: true, static: true }, { propertyName: "panelRef", first: true, predicate: ["panelRef"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-popover\">\n <div\n #triggerRef\n class=\"sdc-popover__trigger\"\n [class.sdc-popover__trigger--disabled]=\"disabled\"\n (click)=\"onTriggerContainerClick($event)\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <ng-content select=\"[sdc-popover-trigger]\"></ng-content>\n </div>\n\n <div\n #panelRef\n class=\"sdc-popover__panel\"\n [ngClass]=\"panelClass\"\n [class.sdc-popover__panel--open]=\"open\"\n [attr.id]=\"panelId\"\n [attr.role]=\"role\"\n [attr.aria-hidden]=\"!open\"\n [attr.aria-label]=\"ariaLabelText || null\"\n [attr.data-placement]=\"resolvedPlacement\"\n tabindex=\"-1\"\n >\n <ng-content select=\"[sdc-popover-content]\"></ng-content>\n </div>\n</div>\n", styles: [".sdc-popover,.sdc-popover__trigger{display:block;width:100%}.sdc-popover__trigger--disabled{cursor:not-allowed}.sdc-popover__panel{position:fixed;top:0;left:0;box-sizing:border-box;border:1px solid var(--sdc-formfield-default-border, #d1d5db);border-radius:var(--sdc-formfield-border-radius, 8px);background:var(--sdc-formfield-default-bg, #ffffff);box-shadow:0 18px 48px #0f172a2e;max-width:min(90vw,32rem);overflow:auto;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .16s ease,transform .16s ease;transform:translateY(-4px)}.sdc-popover__panel--open{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
407
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PopoverComponent, isStandalone: true, selector: "sdc-popover", inputs: { open: "open", disabled: "disabled", toggleOnTriggerClick: "toggleOnTriggerClick", closeOnOutsideClick: "closeOnOutsideClick", closeOnScroll: "closeOnScroll", closeOnEscape: "closeOnEscape", trapFocus: "trapFocus", focusOnOpen: "focusOnOpen", restoreFocusOnClose: "restoreFocusOnClose", ariaLabel: "ariaLabel", appendTo: "appendTo", zIndex: "zIndex", offset: "offset", placement: "placement", role: "role", matchTriggerWidth: "matchTriggerWidth", panelWidth: "panelWidth", panelMinWidth: "panelMinWidth", panelMaxWidth: "panelMaxWidth", panelMaxHeight: "panelMaxHeight", panelClass: "panelClass" }, outputs: { openChange: "openChange" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerRef"], descendants: true, static: true }, { propertyName: "panelRef", first: true, predicate: ["panelRef"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-popover\">\n <div\n #triggerRef\n class=\"sdc-popover__trigger\"\n [class.sdc-popover__trigger--disabled]=\"disabled\"\n (click)=\"onTriggerContainerClick($event)\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <ng-content select=\"[sdc-popover-trigger]\"></ng-content>\n </div>\n\n <div\n #panelRef\n class=\"sdc-popover__panel\"\n [ngClass]=\"panelClass\"\n [class.sdc-popover__panel--open]=\"open\"\n [attr.id]=\"panelId\"\n [attr.role]=\"role\"\n [attr.aria-hidden]=\"!open\"\n [attr.aria-label]=\"ariaLabelText || null\"\n [attr.data-placement]=\"resolvedPlacement\"\n tabindex=\"-1\"\n >\n <ng-content select=\"[sdc-popover-content]\"></ng-content>\n </div>\n</div>\n", styles: [".sdc-popover,.sdc-popover__trigger{display:block;width:100%}.sdc-popover__trigger--disabled{cursor:not-allowed}.sdc-popover__panel{position:fixed;top:0;left:0;box-sizing:border-box;border:1px solid var(--sdc-formfield-default-border, #d1d5db);border-radius:var(--sdc-formfield-border-radius, 8px);background:var(--sdc-formfield-default-bg, #ffffff);box-shadow:0 18px 48px #0f172a2e;max-width:min(90vw,32rem);overflow:auto;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .16s ease,transform .16s ease;transform:translateY(-4px)}.sdc-popover__panel--open{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
384
408
|
}
|
|
385
409
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PopoverComponent, decorators: [{
|
|
386
410
|
type: Component,
|
|
@@ -393,6 +417,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
393
417
|
type: Input
|
|
394
418
|
}], closeOnOutsideClick: [{
|
|
395
419
|
type: Input
|
|
420
|
+
}], closeOnScroll: [{
|
|
421
|
+
type: Input
|
|
396
422
|
}], closeOnEscape: [{
|
|
397
423
|
type: Input
|
|
398
424
|
}], trapFocus: [{
|
|
@@ -434,4 +460,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
434
460
|
type: ViewChild,
|
|
435
461
|
args: ['panelRef', { static: true }]
|
|
436
462
|
}] } });
|
|
437
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN4QixNQUFNLG9DQUFvQyxDQUFDO0FBRzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBSXJFLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsUUFBUTtJQUNSLFdBQVc7SUFDWCxRQUFRO0lBQ1IsbUJBQW1CO0lBQ25CLFlBQVk7SUFDWixlQUFlO0lBQ2YsZUFBZTtJQUNmLGdCQUFnQjtD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QUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUVvQyxVQUFVO3NCQUFwRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0EsUUFBUTtzQkFBaEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgUE9QT1ZFUl9ERUZBVUxUX01BWF9IRUlHSFQsXG4gIFBPUE9WRVJfREVGQVVMVF9PRkZTRVQsXG4gIFBPUE9WRVJfREVGQVVMVF9QTEFDRU1FTlQsXG4gIFBPUE9WRVJfREVGQVVMVF9aX0lOREVYLFxuICBQT1BPVkVSX1ZJRVdQT1JUX01BUkdJTlxufSBmcm9tICcuLi8uLi9jb3JlL2NvbnN0YW50cy9wb3BvdmVyLmNvbnN0JztcbmltcG9ydCB0eXBlIHsgRGltZW5zaW9uIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9zZW1hbnRpY3MudHlwZSc7XG5pbXBvcnQgdHlwZSB7IFBvcG92ZXJQbGFjZW1lbnQsIFBvcG92ZXJQb3NpdGlvbiwgUG9wb3ZlclJvbGUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3BvcG92ZXIudHlwZSc7XG5pbXBvcnQgeyBmb2N1c0ZpcnN0RGVzY2VuZGFudCwgcmVzdG9yZUZvY3VzLCB0cmFwRm9jdXNJbkNvbnRhaW5lciB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZm9jdXMudXRpbCc7XG5pbXBvcnQgeyBuZXh0U2VxdWVudGlhbElkIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pZC51dGlsJztcbmltcG9ydCB7IHJlc29sdmVUcmFuc2xhdGFibGVUZXh0IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pMThuLnV0aWwnO1xuXG50eXBlIFBvcG92ZXJQYW5lbENsYXNzID0gc3RyaW5nIHwgc3RyaW5nW10gfCBTZXQ8c3RyaW5nPiB8IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuXG5jb25zdCBQT1BPVkVSX01JTl9QQU5FTF9IRUlHSFRfUFggPSA4MDtcbmNvbnN0IFJFUE9TSVRJT05fQ0hBTkdFX0tFWVMgPSBbXG4gICd6SW5kZXgnLFxuICAncGxhY2VtZW50JyxcbiAgJ29mZnNldCcsXG4gICdtYXRjaFRyaWdnZXJXaWR0aCcsXG4gICdwYW5lbFdpZHRoJyxcbiAgJ3BhbmVsTWluV2lkdGgnLFxuICAncGFuZWxNYXhXaWR0aCcsXG4gICdwYW5lbE1heEhlaWdodCdcbl0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGZvcm1hdERpbWVuc2lvbih2YWx1ZTogRGltZW5zaW9uIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmF3ID0gU3RyaW5nKHZhbHVlKS50cmltKCk7XG5cbiAgaWYgKCFyYXcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChyYXcudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dG8nKSB7XG4gICAgcmV0dXJuICdhdXRvJztcbiAgfVxuXG4gIGlmIChyYXcgPT09ICd3LWZpbGwnKSB7XG4gICAgcmV0dXJuICcxMDAlJztcbiAgfVxuXG4gIGlmICgvXlxcZCsoXFwuXFxkKyk/KHB4fCV8cmVtfGVtfHZofHZ3fGNoKSQvLnRlc3QocmF3KSkge1xuICAgIHJldHVybiByYXc7XG4gIH1cblxuICBpZiAoL15cXGQrKFxcLlxcZCspPyQvLnRlc3QocmF3KSkge1xuICAgIHJldHVybiBgJHtyYXd9cHhgO1xuICB9XG5cbiAgcmV0dXJuIHJhdztcbn1cblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnc2RjLXBvcG92ZXInLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxufSlcbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50UmVmID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBASW5wdXQoKSBvcGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRvZ2dsZU9uVHJpZ2dlckNsaWNrID0gdHJ1ZTtcbiAgQElucHV0KCkgY2xvc2VPbk91dHNpZGVDbGljayA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NlT25Fc2NhcGUgPSB0cnVlO1xuICBASW5wdXQoKSB0cmFwRm9jdXMgPSBmYWxzZTtcbiAgQElucHV0KCkgZm9jdXNPbk9wZW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcmVzdG9yZUZvY3VzT25DbG9zZSA9IGZhbHNlO1xuICBASW5wdXQoKSBhcmlhTGFiZWw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwcGVuZFRvPzogc3RyaW5nO1xuICBASW5wdXQoKSB6SW5kZXggPSBQT1BPVkVSX0RFRkFVTFRfWl9JTkRFWDtcbiAgQElucHV0KCkgb2Zmc2V0ID0gUE9QT1ZFUl9ERUZBVUxUX09GRlNFVDtcbiAgQElucHV0KCkgcGxhY2VtZW50OiBQb3BvdmVyUGxhY2VtZW50ID0gUE9QT1ZFUl9ERUZBVUxUX1BMQUNFTUVOVDtcbiAgQElucHV0KCkgcm9sZTogUG9wb3ZlclJvbGUgPSAnZGlhbG9nJztcbiAgQElucHV0KCkgbWF0Y2hUcmlnZ2VyV2lkdGggPSBmYWxzZTtcbiAgQElucHV0KCkgcGFuZWxXaWR0aD86IERpbWVuc2lvbjtcbiAgQElucHV0KCkgcGFuZWxNaW5XaWR0aD86IERpbWVuc2lvbjtcbiAgQElucHV0KCkgcGFuZWxNYXhXaWR0aD86IERpbWVuc2lvbjtcbiAgQElucHV0KCkgcGFuZWxNYXhIZWlnaHQgPSBQT1BPVkVSX0RFRkFVTFRfTUFYX0hFSUdIVDtcbiAgQElucHV0KCkgcGFuZWxDbGFzcz86IFBvcG92ZXJQYW5lbENsYXNzO1xuXG4gIEBPdXRwdXQoKSBvcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3RyaWdnZXJSZWYnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0cmlnZ2VyUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BhbmVsUmVmJywgeyBzdGF0aWM6IHRydWUgfSkgcGFuZWxSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICByZWFkb25seSBwYW5lbElkID0gbmV4dFNlcXVlbnRpYWxJZCgnc2RjLXBvcG92ZXItcGFuZWwnKTtcblxuICBwdWJsaWMgcmVzb2x2ZWRQbGFjZW1lbnQ6IFBvcG92ZXJQbGFjZW1lbnQgPSB0aGlzLnBsYWNlbWVudDtcblxuICBwcml2YXRlIG92ZXJsYXlIb3N0OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHByZXZpb3VzbHlGb2N1c2VkRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsaXN0ZW5lcnNCb3VuZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseVBhbmVsU3RhdGUoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXQgYXJpYUxhYmVsVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5hcmlhTGFiZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvbkRvY3VtZW50UG9pbnRlckRvd24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMub3BlbiB8fCAhdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgTm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy50cmlnZ2VyUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5wYW5lbFJlZj8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICh0cmlnZ2VyPy5jb250YWlucyh0YXJnZXQpIHx8IHBhbmVsPy5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmNsb3NlUGFuZWwoKSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvbkRvY3VtZW50S2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5vcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScgJiYgdGhpcy5jbG9zZU9uRXNjYXBlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmNsb3NlUGFuZWwoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgJiYgdGhpcy50cmFwRm9jdXMgJiYgdGhpcy5wYW5lbFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdHJhcEZvY3VzSW5Db250YWluZXIoXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLnBhbmVsUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHRoaXMuZG9jdW1lbnRSZWYuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IG51bGwsXG4gICAgICAgIHRoaXMucGFuZWxSZWYubmF0aXZlRWxlbWVudFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvblZpZXdwb3J0Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5vcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZXBvc2l0aW9uKCk7XG4gIH07XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlT3ZlcmxheUhvc3QoKTtcbiAgICB0aGlzLmFwcGx5UGFuZWxTdGF0ZSgpO1xuXG4gICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgdGhpcy5vcGVuUGFuZWwoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNJbnB1dENoYW5nZWQoY2hhbmdlcywgJ2FwcGVuZFRvJykpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuZW5zdXJlT3ZlcmxheUhvc3QodHJ1ZSkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5wYW5lbFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0lucHV0Q2hhbmdlZChjaGFuZ2VzLCAnb3BlbicpKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLnN5bmNPcGVuU3RhdGUoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzUmVwb3NpdGlvbmluZ0NoYW5nZXMoY2hhbmdlcykpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMucmVwb3NpdGlvbigpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnVucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoKTtcblxuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5wYW5lbFJlZj8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmIChwYW5lbD8ucGFyZW50Tm9kZSkge1xuICAgICAgcGFuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwYW5lbCk7XG4gICAgfVxuICB9XG5cbiAgb25UcmlnZ2VyQ29udGFpbmVyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy50b2dnbGVPblRyaWdnZXJDbGljaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudG9nZ2xlKCk7XG4gIH1cblxuICBvblRyaWdnZXJLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMudG9nZ2xlT25UcmlnZ2VyQ2xpY2spIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmIGV2ZW50LmtleSAhPT0gJyAnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRvZ2dsZSgpO1xuICB9XG5cbiAgb3BlblBhbmVsKGVtaXQgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIHRoaXMuZW5zdXJlT3ZlcmxheUhvc3QoKTtcbiAgICB0aGlzLmNhcHR1cmVGb2N1c09yaWdpbigpO1xuICAgIHRoaXMuYXBwbHlQYW5lbFN0YXRlKCk7XG4gICAgdGhpcy5yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpO1xuICAgIHRoaXMucmVwb3NpdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuZm9jdXNPbk9wZW4pIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnBhbmVsUmVmPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICAgIGZvY3VzRmlyc3REZXNjZW5kYW50KHBhbmVsLCBwYW5lbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChlbWl0KSB7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZVBhbmVsKGVtaXQgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy51bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5hcHBseVBhbmVsU3RhdGUoKTtcblxuICAgIGlmICh0aGlzLnJlc3RvcmVGb2N1c09uQ2xvc2UpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHJlc3RvcmVGb2N1cyh0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCA/PyB0aGlzLnRyaWdnZXJSZWY/Lm5hdGl2ZUVsZW1lbnQgPz8gbnVsbCkpO1xuICAgIH1cblxuICAgIGlmIChlbWl0KSB7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlblBhbmVsKCk7XG4gIH1cblxuICByZXBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcGVuKSB7XG4gICAgICB0aGlzLmFwcGx5UGFuZWxTdGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgcGFuZWwgPSB0aGlzLnBhbmVsUmVmPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKCF0cmlnZ2VyIHx8ICFwYW5lbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZW5zdXJlT3ZlcmxheUhvc3QoKTtcbiAgICB0aGlzLmFwcGx5UGFuZWxEaW1lbnNpb25zKHRyaWdnZXIsIHBhbmVsKTtcblxuICAgIHBhbmVsLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICBwYW5lbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgIHBhbmVsLnN0eWxlLm9wYWNpdHkgPSAnMCc7XG5cbiAgICBjb25zdCB0cmlnZ2VyUmVjdCA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcGFuZWxSZWN0ID0gcGFuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbmV4dFBvc2l0aW9uID0gdGhpcy5jb21wdXRlUG9zaXRpb24odHJpZ2dlclJlY3QsIHBhbmVsUmVjdCk7XG5cbiAgICB0aGlzLnJlc29sdmVkUGxhY2VtZW50ID0gbmV4dFBvc2l0aW9uLnBsYWNlbWVudDtcbiAgICBwYW5lbC5zdHlsZS50b3AgPSBgJHtuZXh0UG9zaXRpb24udG9wfXB4YDtcbiAgICBwYW5lbC5zdHlsZS5sZWZ0ID0gYCR7bmV4dFBvc2l0aW9uLmxlZnR9cHhgO1xuICAgIHRoaXMuYXBwbHlQYW5lbFN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UGFuZWxTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBwYW5lbCA9IHRoaXMucGFuZWxSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIXBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFuZWwuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgIHBhbmVsLnN0eWxlLnpJbmRleCA9IFN0cmluZyh0aGlzLnpJbmRleCk7XG4gICAgcGFuZWwuc3R5bGUudmlzaWJpbGl0eSA9IHRoaXMub3BlbiA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xuICAgIHBhbmVsLnN0eWxlLnBvaW50ZXJFdmVudHMgPSB0aGlzLm9wZW4gPyAnYXV0bycgOiAnbm9uZSc7XG4gICAgcGFuZWwuc3R5bGUub3BhY2l0eSA9IHRoaXMub3BlbiA/ICcxJyA6ICcwJztcbiAgICBwYW5lbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgU3RyaW5nKCF0aGlzLm9wZW4pKTtcblxuICAgIGlmICh0aGlzLmFyaWFMYWJlbFRleHQpIHtcbiAgICAgIHBhbmVsLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRoaXMuYXJpYUxhYmVsVGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhbmVsLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZVBvc2l0aW9uKHRyaWdnZXJSZWN0OiBET01SZWN0LCBwYW5lbFJlY3Q6IERPTVJlY3QpOiBQb3BvdmVyUG9zaXRpb24ge1xuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB0aGlzLmRvY3VtZW50UmVmLmRlZmF1bHRWaWV3Py5pbm5lcldpZHRoID8/IDA7XG4gICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB0aGlzLmRvY3VtZW50UmVmLmRlZmF1bHRWaWV3Py5pbm5lckhlaWdodCA/PyAwO1xuICAgIGNvbnN0IHVzYWJsZUhlaWdodCA9IE1hdGgubWluKHBhbmVsUmVjdC5oZWlnaHQgfHwgdGhpcy5wYW5lbE1heEhlaWdodCwgdGhpcy5wYW5lbE1heEhlaWdodCk7XG4gICAgY29uc3QgdXNhYmxlV2lkdGggPSBwYW5lbFJlY3Qud2lkdGggfHwgdHJpZ2dlclJlY3Qud2lkdGg7XG4gICAgY29uc3QgcGxhY2VtZW50ID0gdGhpcy5yZXNvbHZlUGxhY2VtZW50KHRyaWdnZXJSZWN0LCB1c2FibGVIZWlnaHQsIHZpZXdwb3J0SGVpZ2h0KTtcbiAgICBsZXQgdG9wID0gdGhpcy5yZXNvbHZlVG9wKHRyaWdnZXJSZWN0LCB1c2FibGVIZWlnaHQsIHBsYWNlbWVudCk7XG4gICAgbGV0IGxlZnQgPSB0aGlzLnJlc29sdmVMZWZ0KHRyaWdnZXJSZWN0LCB1c2FibGVXaWR0aCwgcGxhY2VtZW50KTtcblxuICAgIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChQT1BPVkVSX1ZJRVdQT1JUX01BUkdJTiwgdmlld3BvcnRXaWR0aCAtIHVzYWJsZVdpZHRoIC0gUE9QT1ZFUl9WSUVXUE9SVF9NQVJHSU4pO1xuICAgIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KFBPUE9WRVJfVklFV1BPUlRfTUFSR0lOLCB2aWV3cG9ydEhlaWdodCAtIHVzYWJsZUhlaWdodCAtIFBPUE9WRVJfVklFV1BPUlRfTUFSR0lOKTtcblxuICAgIGxlZnQgPSBNYXRoLm1pbihNYXRoLm1heChsZWZ0LCBQT1BPVkVSX1ZJRVdQT1JUX01BUkdJTiksIG1heExlZnQpO1xuICAgIHRvcCA9IE1hdGgubWluKE1hdGgubWF4KHRvcCwgUE9QT1ZFUl9WSUVXUE9SVF9NQVJHSU4pLCBtYXhUb3ApO1xuXG4gICAgcmV0dXJuIHsgdG9wLCBsZWZ0LCBwbGFjZW1lbnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlT3ZlcmxheUhvc3QoZm9yY2UgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5wYW5lbFJlZj8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghcGFuZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0SG9zdCA9IHRoaXMucmVzb2x2ZU92ZXJsYXlIb3N0KCk7XG5cbiAgICBpZiAoIWZvcmNlICYmIHRoaXMub3ZlcmxheUhvc3QgPT09IG5leHRIb3N0ICYmIHBhbmVsLnBhcmVudEVsZW1lbnQgPT09IG5leHRIb3N0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV4dEhvc3QuYXBwZW5kQ2hpbGQocGFuZWwpO1xuICAgIHRoaXMub3ZlcmxheUhvc3QgPSBuZXh0SG9zdDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU92ZXJsYXlIb3N0KCk6IEhUTUxFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuYXBwZW5kVG8gfHwgdGhpcy5hcHBlbmRUbyA9PT0gJ2JvZHknKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFJlZi5ib2R5O1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJpZWRIb3N0ID0gdGhpcy5kb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pih0aGlzLmFwcGVuZFRvKTtcbiAgICByZXR1cm4gcXVlcmllZEhvc3QgPz8gdGhpcy5kb2N1bWVudFJlZi5ib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBjYXB0dXJlRm9jdXNPcmlnaW4oKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5kb2N1bWVudFJlZi5hY3RpdmVFbGVtZW50O1xuICAgIHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50ID0gYWN0aXZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBhY3RpdmUgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlckdsb2JhbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnNCb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXcgPSB0aGlzLmRvY3VtZW50UmVmLmRlZmF1bHRWaWV3O1xuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnRSZWYuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbkRvY3VtZW50UG9pbnRlckRvd24sIHRydWUpO1xuICAgICAgdGhpcy5kb2N1bWVudFJlZi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbkRvY3VtZW50S2V5ZG93biwgdHJ1ZSk7XG4gICAgICB2aWV3Py5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uVmlld3BvcnRDaGFuZ2UsIHRydWUpO1xuICAgICAgdmlldz8uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblZpZXdwb3J0Q2hhbmdlLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMubGlzdGVuZXJzQm91bmQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnNCb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXcgPSB0aGlzLmRvY3VtZW50UmVmLmRlZmF1bHRWaWV3O1xuXG4gICAgdGhpcy5kb2N1bWVudFJlZi5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uRG9jdW1lbnRQb2ludGVyRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5kb2N1bWVudFJlZi5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbkRvY3VtZW50S2V5ZG93biwgdHJ1ZSk7XG4gICAgdmlldz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vblZpZXdwb3J0Q2hhbmdlLCB0cnVlKTtcbiAgICB2aWV3Py5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uVmlld3BvcnRDaGFuZ2UsIHRydWUpO1xuXG4gICAgdGhpcy5saXN0ZW5lcnNCb3VuZCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNJbnB1dENoYW5nZWQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcywga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFjaGFuZ2VzW2tleV0gJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUmVwb3NpdGlvbmluZ0NoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBSRVBPU0lUSU9OX0NIQU5HRV9LRVlTLnNvbWUoKGtleSkgPT4gdGhpcy5oYXNJbnB1dENoYW5nZWQoY2hhbmdlcywga2V5KSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNPcGVuU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgdGhpcy5vcGVuUGFuZWwoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQYW5lbERpbWVuc2lvbnModHJpZ2dlcjogSFRNTEVsZW1lbnQsIHBhbmVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHBhbmVsLnN0eWxlLnpJbmRleCA9IFN0cmluZyh0aGlzLnpJbmRleCk7XG4gICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgodGhpcy5wYW5lbE1heEhlaWdodCwgUE9QT1ZFUl9NSU5fUEFORUxfSEVJR0hUX1BYKX1weGA7XG4gICAgcGFuZWwuc3R5bGUud2lkdGggPSAnJztcbiAgICBwYW5lbC5zdHlsZS5taW5XaWR0aCA9ICcnO1xuICAgIHBhbmVsLnN0eWxlLm1heFdpZHRoID0gJyc7XG5cbiAgICB0aGlzLmFwcGx5UGFuZWxXaWR0aCh0cmlnZ2VyLCBwYW5lbCk7XG4gICAgdGhpcy5hcHBseURpbWVuc2lvblN0eWxlKHBhbmVsLCAnbWluV2lkdGgnLCB0aGlzLnBhbmVsTWluV2lkdGgpO1xuICAgIGlmICghdGhpcy5tYXRjaFRyaWdnZXJXaWR0aCkge1xuICAgICAgdGhpcy5hcHBseURpbWVuc2lvblN0eWxlKHBhbmVsLCAnbWF4V2lkdGgnLCB0aGlzLnBhbmVsTWF4V2lkdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQYW5lbFdpZHRoKHRyaWdnZXI6IEhUTUxFbGVtZW50LCBwYW5lbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXRjaFRyaWdnZXJXaWR0aCkge1xuICAgICAgY29uc3QgdyA9IGAke01hdGgubWF4KHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsIDApfXB4YDtcbiAgICAgIHBhbmVsLnN0eWxlLndpZHRoID0gdztcbiAgICAgIHBhbmVsLnN0eWxlLm1heFdpZHRoID0gdztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYW5lbFdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhbmVsLnN0eWxlLndpZHRoID0gZm9ybWF0RGltZW5zaW9uKHRoaXMucGFuZWxXaWR0aCkgPz8gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhbmVsLnN0eWxlLndpZHRoID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURpbWVuc2lvblN0eWxlKFxuICAgIHBhbmVsOiBIVE1MRWxlbWVudCxcbiAgICBzdHlsZU5hbWU6ICdtaW5XaWR0aCcgfCAnbWF4V2lkdGgnLFxuICAgIHZhbHVlOiBEaW1lbnNpb24gfCB1bmRlZmluZWRcbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhbmVsLnN0eWxlW3N0eWxlTmFtZV0gPSBmb3JtYXREaW1lbnNpb24odmFsdWUpID8/ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYW5lbC5zdHlsZVtzdHlsZU5hbWVdID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUGxhY2VtZW50KHRyaWdnZXJSZWN0OiBET01SZWN0LCB1c2FibGVIZWlnaHQ6IG51bWJlciwgdmlld3BvcnRIZWlnaHQ6IG51bWJlcik6IFBvcG92ZXJQbGFjZW1lbnQge1xuICAgIGNvbnN0IGhhc0JvdHRvbVNwYWNlID0gdHJpZ2dlclJlY3QuYm90dG9tICsgdGhpcy5vZmZzZXQgKyB1c2FibGVIZWlnaHQgPD0gdmlld3BvcnRIZWlnaHQgLSBQT1BPVkVSX1ZJRVdQT1JUX01BUkdJTjtcbiAgICBjb25zdCBoYXNUb3BTcGFjZSA9IHRyaWdnZXJSZWN0LnRvcCAtIHRoaXMub2Zmc2V0IC0gdXNhYmxlSGVpZ2h0ID49IFBPUE9WRVJfVklFV1BPUlRfTUFSR0lOO1xuXG4gICAgaWYgKHRoaXMucGxhY2VtZW50LnN0YXJ0c1dpdGgoJ2JvdHRvbScpICYmICFoYXNCb3R0b21TcGFjZSAmJiBoYXNUb3BTcGFjZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxhY2VtZW50LnJlcGxhY2UoJ2JvdHRvbScsICd0b3AnKSBhcyBQb3BvdmVyUGxhY2VtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBsYWNlbWVudC5zdGFydHNXaXRoKCd0b3AnKSAmJiAhaGFzVG9wU3BhY2UgJiYgaGFzQm90dG9tU3BhY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYWNlbWVudC5yZXBsYWNlKCd0b3AnLCAnYm90dG9tJykgYXMgUG9wb3ZlclBsYWNlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGFjZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUb3AodHJpZ2dlclJlY3Q6IERPTVJlY3QsIHVzYWJsZUhlaWdodDogbnVtYmVyLCBwbGFjZW1lbnQ6IFBvcG92ZXJQbGFjZW1lbnQpOiBudW1iZXIge1xuICAgIGlmIChwbGFjZW1lbnQuc3RhcnRzV2l0aCgndG9wJykpIHtcbiAgICAgIHJldHVybiB0cmlnZ2VyUmVjdC50b3AgLSB1c2FibGVIZWlnaHQgLSB0aGlzLm9mZnNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJpZ2dlclJlY3QuYm90dG9tICsgdGhpcy5vZmZzZXQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVMZWZ0KHRyaWdnZXJSZWN0OiBET01SZWN0LCB1c2FibGVXaWR0aDogbnVtYmVyLCBwbGFjZW1lbnQ6IFBvcG92ZXJQbGFjZW1lbnQpOiBudW1iZXIge1xuICAgIGlmIChwbGFjZW1lbnQuZW5kc1dpdGgoJ2VuZCcpKSB7XG4gICAgICByZXR1cm4gdHJpZ2dlclJlY3QucmlnaHQgLSB1c2FibGVXaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJpZ2dlclJlY3QubGVmdDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNkYy1wb3BvdmVyXCI+XG4gIDxkaXZcbiAgICAjdHJpZ2dlclJlZlxuICAgIGNsYXNzPVwic2RjLXBvcG92ZXJfX3RyaWdnZXJcIlxuICAgIFtjbGFzcy5zZGMtcG9wb3Zlcl9fdHJpZ2dlci0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJvblRyaWdnZXJDb250YWluZXJDbGljaygkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJvblRyaWdnZXJLZXlkb3duKCRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3NkYy1wb3BvdmVyLXRyaWdnZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgI3BhbmVsUmVmXG4gICAgY2xhc3M9XCJzZGMtcG9wb3Zlcl9fcGFuZWxcIlxuICAgIFtuZ0NsYXNzXT1cInBhbmVsQ2xhc3NcIlxuICAgIFtjbGFzcy5zZGMtcG9wb3Zlcl9fcGFuZWwtLW9wZW5dPVwib3BlblwiXG4gICAgW2F0dHIuaWRdPVwicGFuZWxJZFwiXG4gICAgW2F0dHIucm9sZV09XCJyb2xlXCJcbiAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhb3BlblwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxUZXh0IHx8IG51bGxcIlxuICAgIFthdHRyLmRhdGEtcGxhY2VtZW50XT1cInJlc29sdmVkUGxhY2VtZW50XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzZGMtcG9wb3Zlci1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
463
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDeEIsTUFBTSxvQ0FBb0MsQ0FBQztBQUc1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUE4QixNQUFNLHVDQUF1QyxDQUFDOzs7QUFJeEcsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7QUFDdkMsTUFBTSxzQkFBc0IsR0FB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cEQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNBLFFBQVE7c0JBQWhELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBQT1BPVkVSX0RFRkFVTFRfTUFYX0hFSUdIVCxcbiAgUE9QT1ZFUl9ERUZBVUxUX09GRlNFVCxcbiAgUE9QT1ZFUl9ERUZBVUxUX1BMQUNFTUVOVCxcbiAgUE9QT1ZFUl9ERUZBVUxUX1pfSU5ERVgsXG4gIFBPUE9WRVJfVklFV1BPUlRfTUFSR0lOXG59IGZyb20gJy4uLy4uL2NvcmUvY29uc3RhbnRzL3BvcG92ZXIuY29uc3QnO1xuaW1wb3J0IHR5cGUgeyBEaW1lbnNpb24gfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NlbWFudGljcy50eXBlJztcbmltcG9ydCB0eXBlIHsgUG9wb3ZlclBsYWNlbWVudCwgUG9wb3ZlclBvc2l0aW9uLCBQb3BvdmVyUm9sZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvcG9wb3Zlci50eXBlJztcbmltcG9ydCB7IGZvY3VzRmlyc3REZXNjZW5kYW50LCByZXN0b3JlRm9jdXMsIHRyYXBGb2N1c0luQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9mb2N1cy51dGlsJztcbmltcG9ydCB7IG5leHRTZXF1ZW50aWFsSWQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2lkLnV0aWwnO1xuaW1wb3J0IHsgcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2kxOG4udXRpbCc7XG5pbXBvcnQgeyB3YXRjaE92ZXJsYXlEaXNtaXNzLCB0eXBlIE92ZXJsYXlEaXNtaXNzV2F0Y2hlciB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvb3ZlcmxheS1kaXNtaXNzLnV0aWwnO1xuXG50eXBlIFBvcG92ZXJQYW5lbENsYXNzID0gc3RyaW5nIHwgc3RyaW5nW10gfCBTZXQ8c3RyaW5nPiB8IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuXG5jb25zdCBQT1BPVkVSX01JTl9QQU5FTF9IRUlHSFRfUFggPSA4MDtcbmNvbnN0IFJFUE9TSVRJT05fQ0hBTkdFX0tFWVMgPSBbXG4gICd6SW5kZXgnLFxuICAncGxhY2VtZW50JyxcbiAgJ29mZnNldCcsXG4gICdtYXRjaFRyaWdnZXJXaWR0aCcsXG4gICdwYW5lbFdpZHRoJyxcbiAgJ3BhbmVsTWluV2lkdGgnLFxuICAncGFuZWxNYXhXaWR0aCcsXG4gICdwYW5lbE1heEhlaWdodCdcbl0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGZvcm1hdERpbWVuc2lvbih2YWx1ZTogRGltZW5zaW9uIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmF3ID0gU3RyaW5nKHZhbHVlKS50cmltKCk7XG5cbiAgaWYgKCFyYXcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChyYXcudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dG8nKSB7XG4gICAgcmV0dXJuICdhdXRvJztcbiAgfVxuXG4gIGlmIChyYXcgPT09ICd3LWZpbGwnKSB7XG4gICAgcmV0dXJuICcxMDAlJztcbiAgfVxuXG4gIGlmICgvXlxcZCsoXFwuXFxkKyk/KHB4fCV8cmVtfGVtfHZofHZ3fGNoKSQvLnRlc3QocmF3KSkge1xuICAgIHJldHVybiByYXc7XG4gIH1cblxuICBpZiAoL15cXGQrKFxcLlxcZCspPyQvLnRlc3QocmF3KSkge1xuICAgIHJldHVybiBgJHtyYXd9cHhgO1xuICB9XG5cbiAgcmV0dXJuIHJhdztcbn1cblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnc2RjLXBvcG92ZXInLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxufSlcbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50UmVmID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIEBJbnB1dCgpIG9wZW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgdG9nZ2xlT25UcmlnZ2VyQ2xpY2sgPSB0cnVlO1xuICBASW5wdXQoKSBjbG9zZU9uT3V0c2lkZUNsaWNrID0gdHJ1ZTtcbiAgQElucHV0KCkgY2xvc2VPblNjcm9sbCA9IGZhbHNlO1xuICBASW5wdXQoKSBjbG9zZU9uRXNjYXBlID0gdHJ1ZTtcbiAgQElucHV0KCkgdHJhcEZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvY3VzT25PcGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlc3RvcmVGb2N1c09uQ2xvc2UgPSBmYWxzZTtcbiAgQElucHV0KCkgYXJpYUxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBhcHBlbmRUbz86IHN0cmluZztcbiAgQElucHV0KCkgekluZGV4ID0gUE9QT1ZFUl9ERUZBVUxUX1pfSU5ERVg7XG4gIEBJbnB1dCgpIG9mZnNldCA9IFBPUE9WRVJfREVGQVVMVF9PRkZTRVQ7XG4gIEBJbnB1dCgpIHBsYWNlbWVudDogUG9wb3ZlclBsYWNlbWVudCA9IFBPUE9WRVJfREVGQVVMVF9QTEFDRU1FTlQ7XG4gIEBJbnB1dCgpIHJvbGU6IFBvcG92ZXJSb2xlID0gJ2RpYWxvZyc7XG4gIEBJbnB1dCgpIG1hdGNoVHJpZ2dlcldpZHRoID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBhbmVsV2lkdGg/OiBEaW1lbnNpb247XG4gIEBJbnB1dCgpIHBhbmVsTWluV2lkdGg/OiBEaW1lbnNpb247XG4gIEBJbnB1dCgpIHBhbmVsTWF4V2lkdGg/OiBEaW1lbnNpb247XG4gIEBJbnB1dCgpIHBhbmVsTWF4SGVpZ2h0ID0gUE9QT1ZFUl9ERUZBVUxUX01BWF9IRUlHSFQ7XG4gIEBJbnB1dCgpIHBhbmVsQ2xhc3M/OiBQb3BvdmVyUGFuZWxDbGFzcztcblxuICBAT3V0cHV0KCkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyUmVmJywgeyBzdGF0aWM6IHRydWUgfSkgdHJpZ2dlclJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdwYW5lbFJlZicsIHsgc3RhdGljOiB0cnVlIH0pIHBhbmVsUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcmVhZG9ubHkgcGFuZWxJZCA9IG5leHRTZXF1ZW50aWFsSWQoJ3NkYy1wb3BvdmVyLXBhbmVsJyk7XG5cbiAgcHVibGljIHJlc29sdmVkUGxhY2VtZW50OiBQb3BvdmVyUGxhY2VtZW50ID0gdGhpcy5wbGFjZW1lbnQ7XG5cbiAgcHJpdmF0ZSBvdmVybGF5SG9zdDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbGlzdGVuZXJzQm91bmQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkaXNtaXNzV2F0Y2hlcjogT3ZlcmxheURpc21pc3NXYXRjaGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcGx5UGFuZWxTdGF0ZSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldCBhcmlhTGFiZWxUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLmFyaWFMYWJlbCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG9uRG9jdW1lbnRQb2ludGVyRG93biA9IChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5vcGVuIHx8ICF0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2spIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBOb2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgcGFuZWwgPSB0aGlzLnBhbmVsUmVmPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKHRyaWdnZXI/LmNvbnRhaW5zKHRhcmdldCkgfHwgcGFuZWw/LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY2xvc2VQYW5lbCgpKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9uRG9jdW1lbnRLZXlkb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJiB0aGlzLmNsb3NlT25Fc2NhcGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY2xvc2VQYW5lbCgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiB0aGlzLnRyYXBGb2N1cyAmJiB0aGlzLnBhbmVsUmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0cmFwRm9jdXNJbkNvbnRhaW5lcihcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHRoaXMucGFuZWxSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgdGhpcy5kb2N1bWVudFJlZi5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50IHwgbnVsbCxcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9uVmlld3BvcnRDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbG9zZU9uU2Nyb2xsKSB7XG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY2xvc2VQYW5lbCgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlcG9zaXRpb24oKTtcbiAgfTtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVPdmVybGF5SG9zdCgpO1xuICAgIHRoaXMuYXBwbHlQYW5lbFN0YXRlKCk7XG5cbiAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICB0aGlzLm9wZW5QYW5lbChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc0lucHV0Q2hhbmdlZChjaGFuZ2VzLCAnYXBwZW5kVG8nKSkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5lbnN1cmVPdmVybGF5SG9zdCh0cnVlKSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBhbmVsUmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzSW5wdXRDaGFuZ2VkKGNoYW5nZXMsICdvcGVuJykpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuc3luY09wZW5TdGF0ZSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNSZXBvc2l0aW9uaW5nQ2hhbmdlcyhjaGFuZ2VzKSkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5yZXBvc2l0aW9uKCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpO1xuXG4gICAgY29uc3QgcGFuZWwgPSB0aGlzLnBhbmVsUmVmPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKHBhbmVsPy5wYXJlbnROb2RlKSB7XG4gICAgICBwYW5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBhbmVsKTtcbiAgICB9XG4gIH1cblxuICBvblRyaWdnZXJDb250YWluZXJDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLnRvZ2dsZU9uVHJpZ2dlckNsaWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIG9uVHJpZ2dlcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy50b2dnbGVPblRyaWdnZXJDbGljaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgZXZlbnQua2V5ICE9PSAnICcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudG9nZ2xlKCk7XG4gIH1cblxuICBvcGVuUGFuZWwoZW1pdCA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgdGhpcy5lbnN1cmVPdmVybGF5SG9zdCgpO1xuICAgIHRoaXMuY2FwdHVyZUZvY3VzT3JpZ2luKCk7XG4gICAgdGhpcy5hcHBseVBhbmVsU3RhdGUoKTtcbiAgICB0aGlzLnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5yZXBvc2l0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5mb2N1c09uT3Blbikge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHRoaXMucGFuZWxSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgICAgZm9jdXNGaXJzdERlc2NlbmRhbnQocGFuZWwsIHBhbmVsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlUGFuZWwoZW1pdCA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnVucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLmFwcGx5UGFuZWxTdGF0ZSgpO1xuXG4gICAgaWYgKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVzdG9yZUZvY3VzKHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50ID8/IHRoaXMudHJpZ2dlclJlZj8ubmF0aXZlRWxlbWVudCA/PyBudWxsKSk7XG4gICAgfVxuXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgfVxuXG4gIHJlcG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuYXBwbHlQYW5lbFN0YXRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZ2dlciA9IHRoaXMudHJpZ2dlclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBwYW5lbCA9IHRoaXMucGFuZWxSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIXRyaWdnZXIgfHwgIXBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5lbnN1cmVPdmVybGF5SG9zdCgpO1xuICAgIHRoaXMuYXBwbHlQYW5lbERpbWVuc2lvbnModHJpZ2dlciwgcGFuZWwpO1xuXG4gICAgcGFuZWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIHBhbmVsLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgcGFuZWwuc3R5bGUub3BhY2l0eSA9ICcwJztcblxuICAgIGNvbnN0IHRyaWdnZXJSZWN0ID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBwYW5lbFJlY3QgPSBwYW5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBuZXh0UG9zaXRpb24gPSB0aGlzLmNvbXB1dGVQb3NpdGlvbih0cmlnZ2VyUmVjdCwgcGFuZWxSZWN0KTtcblxuICAgIHRoaXMucmVzb2x2ZWRQbGFjZW1lbnQgPSBuZXh0UG9zaXRpb24ucGxhY2VtZW50O1xuICAgIHBhbmVsLnN0eWxlLnRvcCA9IGAke25leHRQb3NpdGlvbi50b3B9cHhgO1xuICAgIHBhbmVsLnN0eWxlLmxlZnQgPSBgJHtuZXh0UG9zaXRpb24ubGVmdH1weGA7XG4gICAgdGhpcy5hcHBseVBhbmVsU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQYW5lbFN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5wYW5lbFJlZj8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghcGFuZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYW5lbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgcGFuZWwuc3R5bGUuekluZGV4ID0gU3RyaW5nKHRoaXMuekluZGV4KTtcbiAgICBwYW5lbC5zdHlsZS52aXNpYmlsaXR5ID0gdGhpcy5vcGVuID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgcGFuZWwuc3R5bGUucG9pbnRlckV2ZW50cyA9IHRoaXMub3BlbiA/ICdhdXRvJyA6ICdub25lJztcbiAgICBwYW5lbC5zdHlsZS5vcGFjaXR5ID0gdGhpcy5vcGVuID8gJzEnIDogJzAnO1xuICAgIHBhbmVsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCBTdHJpbmcoIXRoaXMub3BlbikpO1xuXG4gICAgaWYgKHRoaXMuYXJpYUxhYmVsVGV4dCkge1xuICAgICAgcGFuZWwuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGhpcy5hcmlhTGFiZWxUZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFuZWwucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlUG9zaXRpb24odHJpZ2dlclJlY3Q6IERPTVJlY3QsIHBhbmVsUmVjdDogRE9NUmVjdCk6IFBvcG92ZXJQb3NpdGlvbiB7XG4gICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHRoaXMuZG9jdW1lbnRSZWYuZGVmYXVsdFZpZXc/LmlubmVyV2lkdGggPz8gMDtcbiAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHRoaXMuZG9jdW1lbnRSZWYuZGVmYXVsdFZpZXc/LmlubmVySGVpZ2h0ID8/IDA7XG4gICAgLy8gTk9URTogYHBhbmVsUmVjdC5oZWlnaHRgIGlzIG1lYXN1cmVkIEFGVEVSIHRoZSByZWFsIENTUyAoaW5jbHVkaW5nIGFueSBjb25zdW1lclxuICAgIC8vIGA6Om5nLWRlZXBgIG92ZXJyaWRlIG9mIGBtYXgtaGVpZ2h0YCwgZS5nLiB0aGUgZGF0ZXBpY2tlciBkaXNhYmxpbmcgdGhlIHNjcm9sbCBjYXApIGhhc1xuICAgIC8vIGJlZW4gYXBwbGllZCwgc28gaXQgYWxyZWFkeSByZWZsZWN0cyB0aGUgdHJ1ZSByZW5kZXJlZCBoZWlnaHQuIFJlLWNsYW1waW5nIGl0IGFnYWluc3RcbiAgICAvLyBgcGFuZWxNYXhIZWlnaHRgIGhlcmUgd291bGQgZm9yY2UgdGhlIHBvc2l0aW9uIG1hdGggdG8gYXNzdW1lIGEgc21hbGxlciBib3ggdGhhbiB3aGF0XG4gICAgLy8gYWN0dWFsbHkgcmVuZGVycywgY2F1c2luZyB0aGUgcGFuZWwgdG8gb3ZlcmxhcCB0aGUgdHJpZ2dlciB3aGVuIHBsYWNlZCBhYm92ZSBpdFxuICAgIC8vICh3b3JzZSB0aGUgdGFsbGVyIHRoZSByZWFsIGNvbnRlbnQgaXMsIGUuZy4gZGF0ZXRpbWUvdGltZSBwaWNrZXJzKS4gT25seSBmYWxsIGJhY2sgdG9cbiAgICAvLyBgcGFuZWxNYXhIZWlnaHRgIHdoZW4gdGhlIHBhbmVsIGhhc24ndCByZW5kZXJlZCBhbnkgaGVpZ2h0IHlldC5cbiAgICBjb25zdCB1c2FibGVIZWlnaHQgPSBwYW5lbFJlY3QuaGVpZ2h0IHx8IHRoaXMucGFuZWxNYXhIZWlnaHQ7XG4gICAgY29uc3QgdXNhYmxlV2lkdGggPSBwYW5lbFJlY3Qud2lkdGggfHwgdHJpZ2dlclJlY3Qud2lkdGg7XG4gICAgY29uc3QgcGxhY2VtZW50ID0gdGhpcy5yZXNvbHZlUGxhY2VtZW50KHRyaWdnZXJSZWN0LCB1c2FibGVIZWlnaHQsIHZpZXdwb3J0SGVpZ2h0KTtcbiAgICBsZXQgdG9wID0gdGhpcy5yZXNvbHZlVG9wKHRyaWdnZXJSZWN0LCB1c2FibGVIZWlnaHQsIHBsYWNlbWVudCk7XG4gICAgbGV0IGxlZnQgPSB0aGlzLnJlc29sdmVMZWZ0KHRyaWdnZXJSZWN0LCB1c2FibGVXaWR0aCwgcGxhY2VtZW50KTtcblxuICAgIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChQT1BPVkVSX1ZJRVdQT1JUX01BUkdJTiwgdmlld3BvcnRXaWR0aCAtIHVzYWJsZVdpZHRoIC0gUE9QT1ZFUl9WSUVXUE9SVF9NQVJHSU4pO1xuICAgIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KFBPUE9WRVJfVklFV1BPUlRfTUFSR0lOLCB2aWV3cG9ydEhlaWdodCAtIHVzYWJsZUhlaWdodCAtIFBPUE9WRVJfVklFV1BPUlRfTUFSR0lOKTtcblxuICAgIGxlZnQgPSBNYXRoLm1pbihNYXRoLm1heChsZWZ0LCBQT1BPVkVSX1ZJRVdQT1JUX01BUkdJTiksIG1heExlZnQpO1xuICAgIHRvcCA9IE1hdGgubWluKE1hdGgubWF4KHRvcCwgUE9QT1ZFUl9WSUVXUE9SVF9NQVJHSU4pLCBtYXhUb3ApO1xuXG4gICAgcmV0dXJuIHsgdG9wLCBsZWZ0LCBwbGFjZW1lbnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlT3ZlcmxheUhvc3QoZm9yY2UgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5wYW5lbFJlZj8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghcGFuZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0SG9zdCA9IHRoaXMucmVzb2x2ZU92ZXJsYXlIb3N0KCk7XG5cbiAgICBpZiAoIWZvcmNlICYmIHRoaXMub3ZlcmxheUhvc3QgPT09IG5leHRIb3N0ICYmIHBhbmVsLnBhcmVudEVsZW1lbnQgPT09IG5leHRIb3N0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV4dEhvc3QuYXBwZW5kQ2hpbGQocGFuZWwpO1xuICAgIHRoaXMub3ZlcmxheUhvc3QgPSBuZXh0SG9zdDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU92ZXJsYXlIb3N0KCk6IEhUTUxFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuYXBwZW5kVG8gfHwgdGhpcy5hcHBlbmRUbyA9PT0gJ2JvZHknKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFJlZi5ib2R5O1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJpZWRIb3N0ID0gdGhpcy5kb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pih0aGlzLmFwcGVuZFRvKTtcbiAgICByZXR1cm4gcXVlcmllZEhvc3QgPz8gdGhpcy5kb2N1bWVudFJlZi5ib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBjYXB0dXJlRm9jdXNPcmlnaW4oKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5kb2N1bWVudFJlZi5hY3RpdmVFbGVtZW50O1xuICAgIHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50ID0gYWN0aXZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBhY3RpdmUgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlckdsb2JhbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnNCb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXcgPSB0aGlzLmRvY3VtZW50UmVmLmRlZmF1bHRWaWV3O1xuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnRSZWYuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbkRvY3VtZW50UG9pbnRlckRvd24sIHRydWUpO1xuICAgICAgdGhpcy5kb2N1bWVudFJlZi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbkRvY3VtZW50S2V5ZG93biwgdHJ1ZSk7XG4gICAgICB2aWV3Py5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uVmlld3BvcnRDaGFuZ2UsIHRydWUpO1xuICAgICAgdmlldz8uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblZpZXdwb3J0Q2hhbmdlLCB0cnVlKTtcblxuICAgICAgdGhpcy5kaXNtaXNzV2F0Y2hlciA9IHdhdGNoT3ZlcmxheURpc21pc3Moe1xuICAgICAgICBnZXRUcmlnZ2VyRWxlbWVudDogKCkgPT4gdGhpcy50cmlnZ2VyUmVmPy5uYXRpdmVFbGVtZW50ID8/IG51bGwsXG4gICAgICAgIGlzT3BlbjogKCkgPT4gdGhpcy5vcGVuLFxuICAgICAgICBvbkRpc21pc3M6ICgpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5jbG9zZVBhbmVsKCkpLFxuICAgICAgICByb3V0ZXI6IHRoaXMucm91dGVyXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMubGlzdGVuZXJzQm91bmQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnNCb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXcgPSB0aGlzLmRvY3VtZW50UmVmLmRlZmF1bHRWaWV3O1xuXG4gICAgdGhpcy5kb2N1bWVudFJlZi5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uRG9jdW1lbnRQb2ludGVyRG93biwgdHJ1ZSk7XG4gICAgdGhpcy5kb2N1bWVudFJlZi5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbkRvY3VtZW50S2V5ZG93biwgdHJ1ZSk7XG4gICAgdmlldz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vblZpZXdwb3J0Q2hhbmdlLCB0cnVlKTtcbiAgICB2aWV3Py5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uVmlld3BvcnRDaGFuZ2UsIHRydWUpO1xuXG4gICAgdGhpcy5kaXNtaXNzV2F0Y2hlcj8uZGVzdHJveSgpO1xuICAgIHRoaXMuZGlzbWlzc1dhdGNoZXIgPSBudWxsO1xuXG4gICAgdGhpcy5saXN0ZW5lcnNCb3VuZCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNJbnB1dENoYW5nZWQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcywga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFjaGFuZ2VzW2tleV0gJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUmVwb3NpdGlvbmluZ0NoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBSRVBPU0lUSU9OX0NIQU5HRV9LRVlTLnNvbWUoKGtleSkgPT4gdGhpcy5oYXNJbnB1dENoYW5nZWQoY2hhbmdlcywga2V5KSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNPcGVuU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgdGhpcy5vcGVuUGFuZWwoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQYW5lbERpbWVuc2lvbnModHJpZ2dlcjogSFRNTEVsZW1lbnQsIHBhbmVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHBhbmVsLnN0eWxlLnpJbmRleCA9IFN0cmluZyh0aGlzLnpJbmRleCk7XG4gICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgodGhpcy5wYW5lbE1heEhlaWdodCwgUE9QT1ZFUl9NSU5fUEFORUxfSEVJR0hUX1BYKX1weGA7XG4gICAgcGFuZWwuc3R5bGUud2lkdGggPSAnJztcbiAgICBwYW5lbC5zdHlsZS5taW5XaWR0aCA9ICcnO1xuICAgIHBhbmVsLnN0eWxlLm1heFdpZHRoID0gJyc7XG5cbiAgICB0aGlzLmFwcGx5UGFuZWxXaWR0aCh0cmlnZ2VyLCBwYW5lbCk7XG4gICAgdGhpcy5hcHBseURpbWVuc2lvblN0eWxlKHBhbmVsLCAnbWluV2lkdGgnLCB0aGlzLnBhbmVsTWluV2lkdGgpO1xuICAgIGlmICghdGhpcy5tYXRjaFRyaWdnZXJXaWR0aCkge1xuICAgICAgdGhpcy5hcHBseURpbWVuc2lvblN0eWxlKHBhbmVsLCAnbWF4V2lkdGgnLCB0aGlzLnBhbmVsTWF4V2lkdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQYW5lbFdpZHRoKHRyaWdnZXI6IEhUTUxFbGVtZW50LCBwYW5lbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXRjaFRyaWdnZXJXaWR0aCkge1xuICAgICAgY29uc3QgdyA9IGAke01hdGgubWF4KHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsIDApfXB4YDtcbiAgICAgIHBhbmVsLnN0eWxlLndpZHRoID0gdztcbiAgICAgIHBhbmVsLnN0eWxlLm1heFdpZHRoID0gdztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYW5lbFdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhbmVsLnN0eWxlLndpZHRoID0gZm9ybWF0RGltZW5zaW9uKHRoaXMucGFuZWxXaWR0aCkgPz8gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhbmVsLnN0eWxlLndpZHRoID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURpbWVuc2lvblN0eWxlKFxuICAgIHBhbmVsOiBIVE1MRWxlbWVudCxcbiAgICBzdHlsZU5hbWU6ICdtaW5XaWR0aCcgfCAnbWF4V2lkdGgnLFxuICAgIHZhbHVlOiBEaW1lbnNpb24gfCB1bmRlZmluZWRcbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhbmVsLnN0eWxlW3N0eWxlTmFtZV0gPSBmb3JtYXREaW1lbnNpb24odmFsdWUpID8/ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYW5lbC5zdHlsZVtzdHlsZU5hbWVdID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUGxhY2VtZW50KHRyaWdnZXJSZWN0OiBET01SZWN0LCB1c2FibGVIZWlnaHQ6IG51bWJlciwgdmlld3BvcnRIZWlnaHQ6IG51bWJlcik6IFBvcG92ZXJQbGFjZW1lbnQge1xuICAgIGNvbnN0IGhhc0JvdHRvbVNwYWNlID0gdHJpZ2dlclJlY3QuYm90dG9tICsgdGhpcy5vZmZzZXQgKyB1c2FibGVIZWlnaHQgPD0gdmlld3BvcnRIZWlnaHQgLSBQT1BPVkVSX1ZJRVdQT1JUX01BUkdJTjtcbiAgICBjb25zdCBoYXNUb3BTcGFjZSA9IHRyaWdnZXJSZWN0LnRvcCAtIHRoaXMub2Zmc2V0IC0gdXNhYmxlSGVpZ2h0ID49IFBPUE9WRVJfVklFV1BPUlRfTUFSR0lOO1xuXG4gICAgaWYgKHRoaXMucGxhY2VtZW50LnN0YXJ0c1dpdGgoJ2JvdHRvbScpICYmICFoYXNCb3R0b21TcGFjZSAmJiBoYXNUb3BTcGFjZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxhY2VtZW50LnJlcGxhY2UoJ2JvdHRvbScsICd0b3AnKSBhcyBQb3BvdmVyUGxhY2VtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBsYWNlbWVudC5zdGFydHNXaXRoKCd0b3AnKSAmJiAhaGFzVG9wU3BhY2UgJiYgaGFzQm90dG9tU3BhY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYWNlbWVudC5yZXBsYWNlKCd0b3AnLCAnYm90dG9tJykgYXMgUG9wb3ZlclBsYWNlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGFjZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUb3AodHJpZ2dlclJlY3Q6IERPTVJlY3QsIHVzYWJsZUhlaWdodDogbnVtYmVyLCBwbGFjZW1lbnQ6IFBvcG92ZXJQbGFjZW1lbnQpOiBudW1iZXIge1xuICAgIGlmIChwbGFjZW1lbnQuc3RhcnRzV2l0aCgndG9wJykpIHtcbiAgICAgIHJldHVybiB0cmlnZ2VyUmVjdC50b3AgLSB1c2FibGVIZWlnaHQgLSB0aGlzLm9mZnNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJpZ2dlclJlY3QuYm90dG9tICsgdGhpcy5vZmZzZXQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVMZWZ0KHRyaWdnZXJSZWN0OiBET01SZWN0LCB1c2FibGVXaWR0aDogbnVtYmVyLCBwbGFjZW1lbnQ6IFBvcG92ZXJQbGFjZW1lbnQpOiBudW1iZXIge1xuICAgIGlmIChwbGFjZW1lbnQuZW5kc1dpdGgoJ2VuZCcpKSB7XG4gICAgICByZXR1cm4gdHJpZ2dlclJlY3QucmlnaHQgLSB1c2FibGVXaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJpZ2dlclJlY3QubGVmdDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNkYy1wb3BvdmVyXCI+XG4gIDxkaXZcbiAgICAjdHJpZ2dlclJlZlxuICAgIGNsYXNzPVwic2RjLXBvcG92ZXJfX3RyaWdnZXJcIlxuICAgIFtjbGFzcy5zZGMtcG9wb3Zlcl9fdHJpZ2dlci0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJvblRyaWdnZXJDb250YWluZXJDbGljaygkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJvblRyaWdnZXJLZXlkb3duKCRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3NkYy1wb3BvdmVyLXRyaWdnZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgI3BhbmVsUmVmXG4gICAgY2xhc3M9XCJzZGMtcG9wb3Zlcl9fcGFuZWxcIlxuICAgIFtuZ0NsYXNzXT1cInBhbmVsQ2xhc3NcIlxuICAgIFtjbGFzcy5zZGMtcG9wb3Zlcl9fcGFuZWwtLW9wZW5dPVwib3BlblwiXG4gICAgW2F0dHIuaWRdPVwicGFuZWxJZFwiXG4gICAgW2F0dHIucm9sZV09XCJyb2xlXCJcbiAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhb3BlblwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxUZXh0IHx8IG51bGxcIlxuICAgIFthdHRyLmRhdGEtcGxhY2VtZW50XT1cInJlc29sdmVkUGxhY2VtZW50XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzZGMtcG9wb3Zlci1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|