UNPKG

@y3krulez/angular-archwizard

Version:

The port of angular-archwizard, supporting IVY and thus being compatible with Angular16+

133 lines 14.3 kB
import { Directive, EventEmitter, HostListener, Inject, Input, Optional, Output } from '@angular/core'; import { isStepId } from '../util/step-id.interface'; import { isStepIndex } from '../util/step-index.interface'; import { isStepOffset } from '../util/step-offset.interface'; import { WizardStep } from '../util/wizard-step.interface'; import { WIZARD_TOKEN } from '../navigation/wizard.interface'; import * as i0 from "@angular/core"; import * as i1 from "../util/wizard-step.interface"; /** * The `awGoToStep` directive can be used to navigate to a given step. * This step can be defined in one of multiple formats * * ### Syntax * * With absolute step index: * * ```html * <button [awGoToStep]="{ stepIndex: absolute step index }" (finalize)="finalize method">...</button> * ``` * * With unique step id: * * ```html * <button [awGoToStep]="{ stepId: 'step id of destination step' }" (finalize)="finalize method">...</button> * ``` * * With a wizard step object: * * ```html * <button [awGoToStep]="wizard step object" (finalize)="finalize method">...</button> * ``` * * With an offset to the defining step: * * ```html * <button [awGoToStep]="{ stepOffset: offset }" (finalize)="finalize method">...</button> * ``` * * @author Marc Arndt */ export class GoToStepDirective { /** * Constructor * * @param wizard The wizard component * @param wizardStep The wizard step, which contains this [[GoToStepDirective]] */ constructor(wizard, wizardStep) { this.wizard = wizard; this.wizardStep = wizardStep; /** * This [[EventEmitter]] is called directly before the current step is exited during a transition through a component with this directive. */ this.preFinalize = new EventEmitter(); /** * This [[EventEmitter]] is called directly after the current step is exited during a transition through a component with this directive. */ this.postFinalize = new EventEmitter(); } /** * A convenience field for `preFinalize` */ get finalize() { return this.preFinalize; } /** * A convenience name for `preFinalize` * * @param emitter The [[EventEmitter]] to be set */ set finalize(emitter) { /* istanbul ignore next */ this.preFinalize = emitter; } /** * Returns the destination step of this directive as an absolute step index inside the wizard * * @returns The index of the destination step * @throws If `targetStep` is of an unknown type an `Error` is thrown */ get destinationStep() { let destinationStep; if (isStepIndex(this.targetStep)) { destinationStep = this.targetStep.stepIndex; } else if (isStepId(this.targetStep)) { destinationStep = this.wizard.getIndexOfStepWithId(this.targetStep.stepId); } else if (isStepOffset(this.targetStep) && this.wizardStep !== null) { destinationStep = this.wizard.getIndexOfStep(this.wizardStep) + this.targetStep.stepOffset; } else if (this.targetStep instanceof WizardStep) { destinationStep = this.wizard.getIndexOfStep(this.targetStep); } else { throw new Error(`Input 'targetStep' is neither a WizardStep, StepOffset, StepIndex or StepId`); } return destinationStep; } /** * Listener method for `click` events on the component with this directive. * After this method is called the wizard will try to transition to the `destinationStep` */ onClick() { this.wizard.goToStep(this.destinationStep, this.preFinalize, this.postFinalize); } } GoToStepDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GoToStepDirective, deps: [{ token: WIZARD_TOKEN }, { token: i1.WizardStep, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); GoToStepDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GoToStepDirective, selector: "[awGoToStep]", inputs: { targetStep: ["awGoToStep", "targetStep"] }, outputs: { preFinalize: "preFinalize", postFinalize: "postFinalize", finalize: "finalize" }, host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GoToStepDirective, decorators: [{ type: Directive, args: [{ selector: '[awGoToStep]' }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [WIZARD_TOKEN] }] }, { type: i1.WizardStep, decorators: [{ type: Optional }] }]; }, propDecorators: { preFinalize: [{ type: Output }], postFinalize: [{ type: Output }], targetStep: [{ type: Input, args: ['awGoToStep'] }], finalize: [{ type: Output }], onClick: [{ type: HostListener, args: ['click'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ28tdG8tc3RlcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RpcmVjdGl2ZXMvZ28tdG8tc3RlcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQWMsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLGdDQUFnQyxDQUFDOzs7QUFHdEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBdUI1Qjs7Ozs7T0FLRztJQUNILFlBQXlDLE1BQWMsRUFBc0IsVUFBc0I7UUFBMUQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFzQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBNUJuRzs7V0FFRztRQUVJLGdCQUFXLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUQ7O1dBRUc7UUFFSSxpQkFBWSxHQUF1QixJQUFJLFlBQVksRUFBRSxDQUFDO0lBbUI3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFDVyxRQUFRLENBQUMsT0FBMkI7UUFDN0MsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQVcsZUFBZTtRQUN4QixJQUFJLGVBQXVCLENBQUM7UUFFNUIsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2hDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztTQUM3QzthQUFNLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNwQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVFO2FBQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQ3BFLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7U0FDNUY7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLFlBQVksVUFBVSxFQUFFO1lBQ2hELGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDL0Q7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsNkVBQTZFLENBQUMsQ0FBQztTQUNoRztRQUVELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFFSSxPQUFPO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRixDQUFDOzsrR0FqRlUsaUJBQWlCLGtCQTZCUixZQUFZO21HQTdCckIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBSDdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7aUJBQ3pCOzswQkE4QmMsTUFBTTsyQkFBQyxZQUFZOzswQkFBMEIsUUFBUTs0Q0F4QjNELFdBQVc7c0JBRGpCLE1BQU07Z0JBT0EsWUFBWTtzQkFEbEIsTUFBTTtnQkFXQSxVQUFVO3NCQURoQixLQUFLO3VCQUFDLFlBQVk7Z0JBeUJSLFFBQVE7c0JBRGxCLE1BQU07Z0JBbUNBLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBpc1N0ZXBJZCwgU3RlcElkIH0gZnJvbSAnLi4vdXRpbC9zdGVwLWlkLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IGlzU3RlcEluZGV4LCBTdGVwSW5kZXggfSBmcm9tICcuLi91dGlsL3N0ZXAtaW5kZXguaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgaXNTdGVwT2Zmc2V0LCBTdGVwT2Zmc2V0IH0gZnJvbSAnLi4vdXRpbC9zdGVwLW9mZnNldC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwIH0gZnJvbSAnLi4vdXRpbC93aXphcmQtc3RlcC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBXSVpBUkRfVE9LRU4sIFdpemFyZCB9IGZyb20gJy4uL25hdmlnYXRpb24vd2l6YXJkLmludGVyZmFjZSc7XHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSBgYXdHb1RvU3RlcGAgZGlyZWN0aXZlIGNhbiBiZSB1c2VkIHRvIG5hdmlnYXRlIHRvIGEgZ2l2ZW4gc3RlcC5cclxuICogVGhpcyBzdGVwIGNhbiBiZSBkZWZpbmVkIGluIG9uZSBvZiBtdWx0aXBsZSBmb3JtYXRzXHJcbiAqXHJcbiAqICMjIyBTeW50YXhcclxuICpcclxuICogV2l0aCBhYnNvbHV0ZSBzdGVwIGluZGV4OlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDxidXR0b24gW2F3R29Ub1N0ZXBdPVwieyBzdGVwSW5kZXg6IGFic29sdXRlIHN0ZXAgaW5kZXggfVwiIChmaW5hbGl6ZSk9XCJmaW5hbGl6ZSBtZXRob2RcIj4uLi48L2J1dHRvbj5cclxuICogYGBgXHJcbiAqXHJcbiAqIFdpdGggdW5pcXVlIHN0ZXAgaWQ6XHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPGJ1dHRvbiBbYXdHb1RvU3RlcF09XCJ7IHN0ZXBJZDogJ3N0ZXAgaWQgb2YgZGVzdGluYXRpb24gc3RlcCcgfVwiIChmaW5hbGl6ZSk9XCJmaW5hbGl6ZSBtZXRob2RcIj4uLi48L2J1dHRvbj5cclxuICogYGBgXHJcbiAqXHJcbiAqIFdpdGggYSB3aXphcmQgc3RlcCBvYmplY3Q6XHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPGJ1dHRvbiBbYXdHb1RvU3RlcF09XCJ3aXphcmQgc3RlcCBvYmplY3RcIiAoZmluYWxpemUpPVwiZmluYWxpemUgbWV0aG9kXCI+Li4uPC9idXR0b24+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBXaXRoIGFuIG9mZnNldCB0byB0aGUgZGVmaW5pbmcgc3RlcDpcclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8YnV0dG9uIFthd0dvVG9TdGVwXT1cInsgc3RlcE9mZnNldDogb2Zmc2V0IH1cIiAoZmluYWxpemUpPVwiZmluYWxpemUgbWV0aG9kXCI+Li4uPC9idXR0b24+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAYXV0aG9yIE1hcmMgQXJuZHRcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2F3R29Ub1N0ZXBdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgR29Ub1N0ZXBEaXJlY3RpdmUge1xyXG4gIC8qKlxyXG4gICAqIFRoaXMgW1tFdmVudEVtaXR0ZXJdXSBpcyBjYWxsZWQgZGlyZWN0bHkgYmVmb3JlIHRoZSBjdXJyZW50IHN0ZXAgaXMgZXhpdGVkIGR1cmluZyBhIHRyYW5zaXRpb24gdGhyb3VnaCBhIGNvbXBvbmVudCB3aXRoIHRoaXMgZGlyZWN0aXZlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBwcmVGaW5hbGl6ZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGlzIFtbRXZlbnRFbWl0dGVyXV0gaXMgY2FsbGVkIGRpcmVjdGx5IGFmdGVyIHRoZSBjdXJyZW50IHN0ZXAgaXMgZXhpdGVkIGR1cmluZyBhIHRyYW5zaXRpb24gdGhyb3VnaCBhIGNvbXBvbmVudCB3aXRoIHRoaXMgZGlyZWN0aXZlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBwb3N0RmluYWxpemU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGRlc3RpbmF0aW9uIHN0ZXAsIHRvIHdoaWNoIHRoZSB3aXphcmQgc2hvdWxkIG5hdmlnYXRlLCBhZnRlciB0aGUgY29tcG9uZW50LCBoYXZpbmcgdGhpcyBkaXJlY3RpdmUgaGFzIGJlZW4gYWN0aXZhdGVkLlxyXG4gICAqIFRoaXMgZGVzdGluYXRpb24gc3RlcCBjYW4gYmUgZ2l2ZW4gZWl0aGVyIGFzIGEgW1tXaXphcmRTdGVwXV0gY29udGFpbmluZyB0aGUgc3RlcCBkaXJlY3RseSxcclxuICAgKiBhIFtbU3RlcE9mZnNldF1dIGJldHdlZW4gdGhlIGN1cnJlbnQgc3RlcCBhbmQgdGhlIGB3aXphcmRTdGVwYCwgaW4gd2hpY2ggdGhpcyBkaXJlY3RpdmUgaGFzIGJlZW4gdXNlZCxcclxuICAgKiBvciBhIHN0ZXAgaW5kZXggYXMgYSBudW1iZXIgb3Igc3RyaW5nXHJcbiAgICovXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxyXG4gIEBJbnB1dCgnYXdHb1RvU3RlcCcpXHJcbiAgcHVibGljIHRhcmdldFN0ZXA6IFdpemFyZFN0ZXAgfCBTdGVwT2Zmc2V0IHwgU3RlcEluZGV4IHwgU3RlcElkO1xyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHdpemFyZCBUaGUgd2l6YXJkIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSB3aXphcmRTdGVwIFRoZSB3aXphcmQgc3RlcCwgd2hpY2ggY29udGFpbnMgdGhpcyBbW0dvVG9TdGVwRGlyZWN0aXZlXV1cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFdJWkFSRF9UT0tFTikgcHVibGljIHdpemFyZDogV2l6YXJkLCBAT3B0aW9uYWwoKSBwcml2YXRlIHdpemFyZFN0ZXA6IFdpemFyZFN0ZXApIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgY29udmVuaWVuY2UgZmllbGQgZm9yIGBwcmVGaW5hbGl6ZWBcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGZpbmFsaXplKCk6IEV2ZW50RW1pdHRlcjx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmVGaW5hbGl6ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgY29udmVuaWVuY2UgbmFtZSBmb3IgYHByZUZpbmFsaXplYFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGVtaXR0ZXIgVGhlIFtbRXZlbnRFbWl0dGVyXV0gdG8gYmUgc2V0XHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHNldCBmaW5hbGl6ZShlbWl0dGVyOiBFdmVudEVtaXR0ZXI8dm9pZD4pIHtcclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICB0aGlzLnByZUZpbmFsaXplID0gZW1pdHRlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGRlc3RpbmF0aW9uIHN0ZXAgb2YgdGhpcyBkaXJlY3RpdmUgYXMgYW4gYWJzb2x1dGUgc3RlcCBpbmRleCBpbnNpZGUgdGhlIHdpemFyZFxyXG4gICAqXHJcbiAgICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSBkZXN0aW5hdGlvbiBzdGVwXHJcbiAgICogQHRocm93cyBJZiBgdGFyZ2V0U3RlcGAgaXMgb2YgYW4gdW5rbm93biB0eXBlIGFuIGBFcnJvcmAgaXMgdGhyb3duXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBkZXN0aW5hdGlvblN0ZXAoKTogbnVtYmVyIHtcclxuICAgIGxldCBkZXN0aW5hdGlvblN0ZXA6IG51bWJlcjtcclxuXHJcbiAgICBpZiAoaXNTdGVwSW5kZXgodGhpcy50YXJnZXRTdGVwKSkge1xyXG4gICAgICBkZXN0aW5hdGlvblN0ZXAgPSB0aGlzLnRhcmdldFN0ZXAuc3RlcEluZGV4O1xyXG4gICAgfSBlbHNlIGlmIChpc1N0ZXBJZCh0aGlzLnRhcmdldFN0ZXApKSB7XHJcbiAgICAgIGRlc3RpbmF0aW9uU3RlcCA9IHRoaXMud2l6YXJkLmdldEluZGV4T2ZTdGVwV2l0aElkKHRoaXMudGFyZ2V0U3RlcC5zdGVwSWQpO1xyXG4gICAgfSBlbHNlIGlmIChpc1N0ZXBPZmZzZXQodGhpcy50YXJnZXRTdGVwKSAmJiB0aGlzLndpemFyZFN0ZXAgIT09IG51bGwpIHtcclxuICAgICAgZGVzdGluYXRpb25TdGVwID0gdGhpcy53aXphcmQuZ2V0SW5kZXhPZlN0ZXAodGhpcy53aXphcmRTdGVwKSArIHRoaXMudGFyZ2V0U3RlcC5zdGVwT2Zmc2V0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnRhcmdldFN0ZXAgaW5zdGFuY2VvZiBXaXphcmRTdGVwKSB7XHJcbiAgICAgIGRlc3RpbmF0aW9uU3RlcCA9IHRoaXMud2l6YXJkLmdldEluZGV4T2ZTdGVwKHRoaXMudGFyZ2V0U3RlcCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICd0YXJnZXRTdGVwJyBpcyBuZWl0aGVyIGEgV2l6YXJkU3RlcCwgU3RlcE9mZnNldCwgU3RlcEluZGV4IG9yIFN0ZXBJZGApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkZXN0aW5hdGlvblN0ZXA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW5lciBtZXRob2QgZm9yIGBjbGlja2AgZXZlbnRzIG9uIHRoZSBjb21wb25lbnQgd2l0aCB0aGlzIGRpcmVjdGl2ZS5cclxuICAgKiBBZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgdGhlIHdpemFyZCB3aWxsIHRyeSB0byB0cmFuc2l0aW9uIHRvIHRoZSBgZGVzdGluYXRpb25TdGVwYFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcclxuICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMud2l6YXJkLmdvVG9TdGVwKHRoaXMuZGVzdGluYXRpb25TdGVwLCB0aGlzLnByZUZpbmFsaXplLCB0aGlzLnBvc3RGaW5hbGl6ZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==