ngx-modialog-10
Version:
Modal / Dialog for Angular
176 lines • 14.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/models/overlay-context.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __extends } from "tslib";
import { FluentAssign } from './../framework/fluent-assign';
import { extend, arrayUnion } from './../framework/utils';
var ɵ0 = /**
* @param {?} keyCode
* @return {?}
*/
function supportsKey(keyCode) {
return ((/** @type {?} */ (this.keyboard))).indexOf(keyCode) > -1;
};
/** @type {?} */
export var DEFAULT_VALUES = {
inElement: false,
isBlocking: true,
keyboard: [27],
supportsKey: (ɵ0)
};
/** @type {?} */
var DEFAULT_SETTERS = [
'inElement',
'isBlocking',
'keyboard'
];
var OverlayContext = /** @class */ (function () {
function OverlayContext() {
}
/**
* @return {?}
*/
OverlayContext.prototype.normalize = /**
* @return {?}
*/
function () {
if (this.isBlocking !== false) {
this.isBlocking = true;
}
if (this.keyboard === null) {
this.keyboard = [];
}
else if (typeof this.keyboard === 'number') {
this.keyboard = [(/** @type {?} */ (this.keyboard))];
}
else if (!Array.isArray((/** @type {?} */ (this.keyboard)))) {
this.keyboard = DEFAULT_VALUES.keyboard;
}
};
return OverlayContext;
}());
export { OverlayContext };
if (false) {
/**
* Describes if the modal is rendered within the container element.
* The container element is the ViewContainerRef supplied.
* Defaults to false.
* @type {?}
*/
OverlayContext.prototype.inElement;
/**
* Describes if the modal is blocking modal.
* A Blocking modal is not closable by clicking outside of the modal window.
* Defaults to false.
* @type {?}
*/
OverlayContext.prototype.isBlocking;
/**
* Keyboard value/s that close the modal.
* Accepts either a single numeric value or an array of numeric values.
* A modal closed by a keyboard stroke will result in a 'reject' notification from the promise.
* Defaults to 27, set `null` implicitly to disable.
* @type {?}
*/
OverlayContext.prototype.keyboard;
}
/**
* A core context builder for a modal window instance, used to define the context upon
* a modal choose it's behaviour.
* @template T
*/
var /**
* A core context builder for a modal window instance, used to define the context upon
* a modal choose it's behaviour.
* @template T
*/
OverlayContextBuilder = /** @class */ (function (_super) {
__extends(OverlayContextBuilder, _super);
function OverlayContextBuilder(defaultValues, initialSetters, baseType) {
return _super.call(this, extend(DEFAULT_VALUES, defaultValues || {}), arrayUnion(DEFAULT_SETTERS, initialSetters || []), baseType || (/** @type {?} */ (OverlayContext)) // https://github.com/Microsoft/TypeScript/issues/7234
) || this;
}
/**
* Returns an new OverlayConfig with a context property representing the data in this builder.
* @param base A base configuration that the result will extend
*/
/**
* Returns an new OverlayConfig with a context property representing the data in this builder.
* @param {?=} base A base configuration that the result will extend
* @return {?}
*/
OverlayContextBuilder.prototype.toOverlayConfig = /**
* Returns an new OverlayConfig with a context property representing the data in this builder.
* @param {?=} base A base configuration that the result will extend
* @return {?}
*/
function (base) {
return extend(base || {}, {
context: this.toJSON()
});
};
return OverlayContextBuilder;
}(FluentAssign));
/**
* A core context builder for a modal window instance, used to define the context upon
* a modal choose it's behaviour.
* @template T
*/
export { OverlayContextBuilder };
if (false) {
/**
* Describes if the modal is rendered within the container element.
* The container element is the ViewContainerRef supplied.
* Defaults to false.
* @type {?}
*/
OverlayContextBuilder.prototype.inElement;
/**
* Describes if the modal is blocking modal.
* A Blocking modal is not closable by clicking outside of the modal window.
* Defaults to false.
* @type {?}
*/
OverlayContextBuilder.prototype.isBlocking;
/**
* Keyboard value/s that close the modal.
* Accepts either a single numeric value or an array of numeric values.
* A modal closed by a keyboard stroke will result in a 'reject' notification from the promise.
* Defaults to 27, set `null` implicitly to disable.
* @type {?}
*/
OverlayContextBuilder.prototype.keyboard;
}
/**
* @record
* @template T
*/
export function ModalControllingContextBuilder() { }
if (false) {
/**
* @param {?=} viewContainer
* @return {?}
*/
ModalControllingContextBuilder.prototype.open = function (viewContainer) { };
}
/**
* A helper to create an `OverlayConfig` on the fly.
* Since `OverlayConfig` requires context it means a builder is needed, this process had some boilerplate.
* When a quick, on the fly overlay config is needed use this helper to avoid that boilerplate.
*
* A builder is used as an API to allow setting the context and providing some operations around the modal.
* When a developers knows the context before hand we can skip this step, this is what this factory is for.
*
* @template T
* @param {?} context The context for the modal
* @param {?=} baseContextType Optional. The type/class of the context. This is the class used to init a new instance of the context
* @param {?=} baseConfig A base configuration that the result will extend
* @return {?}
*/
export function overlayConfigFactory(context, baseContextType, baseConfig) {
return new OverlayContextBuilder((/** @type {?} */ (context)), undefined, baseContextType).toOverlayConfig(baseConfig);
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1vZGlhbG9nLTEwLyIsInNvdXJjZXMiOlsibGliL21vZGVscy9vdmVybGF5LWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBc0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQVEzQyxTQUFTLFdBQVcsQ0FBQyxPQUFlO0lBQy9DLE9BQU8sQ0FBQyxtQkFBZSxJQUFJLENBQUMsUUFBUSxFQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsQ0FBQzs7QUFOSCxNQUFNLEtBQU8sY0FBYyxHQUFHO0lBQzVCLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNkLFdBQVcsTUFFVjtDQUNGOztJQUVLLGVBQWUsR0FBRztJQUN0QixXQUFXO0lBQ1gsWUFBWTtJQUNaLFVBQVU7Q0FDWDtBQUVEO0lBQUE7SUFvQ0EsQ0FBQzs7OztJQWJDLGtDQUFTOzs7SUFBVDtRQUNFLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1NBQ3BCO2FBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxtQkFBUSxJQUFJLENBQUMsUUFBUSxFQUFBLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFlLElBQUksQ0FBQyxRQUFRLEVBQUEsQ0FBQyxFQUFFO1lBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQztTQUN6QztJQUNILENBQUM7SUFDSCxxQkFBQztBQUFELENBQUMsQUFwQ0QsSUFvQ0M7Ozs7Ozs7OztJQTlCQyxtQ0FBbUI7Ozs7Ozs7SUFPbkIsb0NBQW9COzs7Ozs7OztJQVFwQixrQ0FBaUM7Ozs7Ozs7QUFxQm5DOzs7Ozs7SUFBcUUseUNBQWU7SUF3QmxGLCtCQUFZLGFBQXVCLEVBQ3ZCLGNBQXlCLEVBQ3pCLFFBQXNCO2VBQ2hDLGtCQUNFLE1BQU0sQ0FBTSxjQUFjLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQyxFQUNoRCxVQUFVLENBQVMsZUFBZSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUMsRUFDekQsUUFBUSxJQUFJLG1CQUFLLGNBQWMsRUFBQSxDQUFDLHNEQUFzRDtTQUN2RjtJQUNILENBQUM7SUFFRDs7O09BR0c7Ozs7OztJQUNILCtDQUFlOzs7OztJQUFmLFVBQWdCLElBQW9CO1FBQ2xDLE9BQU8sTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUU7WUFDeEIsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNILDRCQUFDO0FBQUQsQ0FBQyxBQTNDRCxDQUFxRSxZQUFZLEdBMkNoRjs7Ozs7Ozs7Ozs7Ozs7SUFyQ0MsMENBQTZDOzs7Ozs7O0lBTzdDLDJDQUE4Qzs7Ozs7Ozs7SUFROUMseUNBQTJEOzs7Ozs7QUF3QjdELG9EQUVDOzs7Ozs7SUFEQyw2RUFBOEM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlaEQsTUFBTSxVQUFVLG9CQUFvQixDQUFJLE9BQVUsRUFBRSxlQUFxQixFQUFFLFVBQTBCO0lBQ25HLE9BQU8sSUFBSSxxQkFBcUIsQ0FBcUIsbUJBQUssT0FBTyxFQUFBLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3SCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmx1ZW50QXNzaWduLCBGbHVlbnRBc3NpZ25NZXRob2QgfSBmcm9tICcuLy4uL2ZyYW1ld29yay9mbHVlbnQtYXNzaWduJztcbmltcG9ydCB7IGV4dGVuZCwgYXJyYXlVbmlvbiB9IGZyb20gJy4vLi4vZnJhbWV3b3JrL3V0aWxzJztcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJy4vZGlhbG9nLXJlZic7XG5pbXBvcnQgeyBXaWRlVkNSZWYsIE92ZXJsYXlDb25maWcgfSBmcm9tICcuL3Rva2Vucyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZBTFVFUyA9IHtcbiAgaW5FbGVtZW50OiBmYWxzZSxcbiAgaXNCbG9ja2luZzogdHJ1ZSxcbiAga2V5Ym9hcmQ6IFsyN10sXG4gIHN1cHBvcnRzS2V5OiBmdW5jdGlvbiBzdXBwb3J0c0tleShrZXlDb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKDxBcnJheTxudW1iZXI+PnRoaXMua2V5Ym9hcmQpLmluZGV4T2Yoa2V5Q29kZSkgPiAtMTtcbiAgfVxufTtcblxuY29uc3QgREVGQVVMVF9TRVRURVJTID0gW1xuICAnaW5FbGVtZW50JyxcbiAgJ2lzQmxvY2tpbmcnLFxuICAna2V5Ym9hcmQnXG5dO1xuXG5leHBvcnQgY2xhc3MgT3ZlcmxheUNvbnRleHQge1xuICAvKipcbiAgICogRGVzY3JpYmVzIGlmIHRoZSBtb2RhbCBpcyByZW5kZXJlZCB3aXRoaW4gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBUaGUgY29udGFpbmVyIGVsZW1lbnQgaXMgdGhlIFZpZXdDb250YWluZXJSZWYgc3VwcGxpZWQuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgaW5FbGVtZW50OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgaWYgdGhlIG1vZGFsIGlzIGJsb2NraW5nIG1vZGFsLlxuICAgKiBBIEJsb2NraW5nIG1vZGFsIGlzIG5vdCBjbG9zYWJsZSBieSBjbGlja2luZyBvdXRzaWRlIG9mIHRoZSBtb2RhbCB3aW5kb3cuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgaXNCbG9ja2luZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogS2V5Ym9hcmQgdmFsdWUvcyB0aGF0IGNsb3NlIHRoZSBtb2RhbC5cbiAgICogQWNjZXB0cyBlaXRoZXIgYSBzaW5nbGUgbnVtZXJpYyB2YWx1ZSBvciBhbiBhcnJheSBvZiBudW1lcmljIHZhbHVlcy5cbiAgICogQSBtb2RhbCBjbG9zZWQgYnkgYSBrZXlib2FyZCBzdHJva2Ugd2lsbCByZXN1bHQgaW4gYSAncmVqZWN0JyBub3RpZmljYXRpb24gZnJvbSB0aGUgcHJvbWlzZS5cbiAgICogRGVmYXVsdHMgdG8gMjcsIHNldCBgbnVsbGAgaW1wbGljaXRseSB0byBkaXNhYmxlLlxuICAgKi9cbiAga2V5Ym9hcmQ6IEFycmF5PG51bWJlcj4gfCBudW1iZXI7XG5cbiAgbm9ybWFsaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzQmxvY2tpbmcgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmlzQmxvY2tpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmtleWJvYXJkID09PSBudWxsKSB7XG4gICAgICB0aGlzLmtleWJvYXJkID0gW107XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5rZXlib2FyZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMua2V5Ym9hcmQgPSBbPG51bWJlcj50aGlzLmtleWJvYXJkXTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KDxBcnJheTxudW1iZXI+PnRoaXMua2V5Ym9hcmQpKSB7XG4gICAgICB0aGlzLmtleWJvYXJkID0gREVGQVVMVF9WQUxVRVMua2V5Ym9hcmQ7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSBjb3JlIGNvbnRleHQgYnVpbGRlciBmb3IgYSBtb2RhbCB3aW5kb3cgaW5zdGFuY2UsIHVzZWQgdG8gZGVmaW5lIHRoZSBjb250ZXh0IHVwb25cbiAqIGEgbW9kYWwgY2hvb3NlIGl0J3MgYmVoYXZpb3VyLlxuICovXG5leHBvcnQgY2xhc3MgT3ZlcmxheUNvbnRleHRCdWlsZGVyPFQgZXh0ZW5kcyBPdmVybGF5Q29udGV4dD4gZXh0ZW5kcyBGbHVlbnRBc3NpZ248VD4ge1xuICAvKipcbiAgICogRGVzY3JpYmVzIGlmIHRoZSBtb2RhbCBpcyByZW5kZXJlZCB3aXRoaW4gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBUaGUgY29udGFpbmVyIGVsZW1lbnQgaXMgdGhlIFZpZXdDb250YWluZXJSZWYgc3VwcGxpZWQuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgaW5FbGVtZW50OiBGbHVlbnRBc3NpZ25NZXRob2Q8Ym9vbGVhbiwgdGhpcz47XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyBpZiB0aGUgbW9kYWwgaXMgYmxvY2tpbmcgbW9kYWwuXG4gICAqIEEgQmxvY2tpbmcgbW9kYWwgaXMgbm90IGNsb3NhYmxlIGJ5IGNsaWNraW5nIG91dHNpZGUgb2YgdGhlIG1vZGFsIHdpbmRvdy5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBpc0Jsb2NraW5nOiBGbHVlbnRBc3NpZ25NZXRob2Q8Ym9vbGVhbiwgdGhpcz47XG5cbiAgLyoqXG4gICAqIEtleWJvYXJkIHZhbHVlL3MgdGhhdCBjbG9zZSB0aGUgbW9kYWwuXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgc2luZ2xlIG51bWVyaWMgdmFsdWUgb3IgYW4gYXJyYXkgb2YgbnVtZXJpYyB2YWx1ZXMuXG4gICAqIEEgbW9kYWwgY2xvc2VkIGJ5IGEga2V5Ym9hcmQgc3Ryb2tlIHdpbGwgcmVzdWx0IGluIGEgJ3JlamVjdCcgbm90aWZpY2F0aW9uIGZyb20gdGhlIHByb21pc2UuXG4gICAqIERlZmF1bHRzIHRvIDI3LCBzZXQgYG51bGxgIGltcGxpY2l0bHkgdG8gZGlzYWJsZS5cbiAgICovXG4gIGtleWJvYXJkOiBGbHVlbnRBc3NpZ25NZXRob2Q8QXJyYXk8bnVtYmVyPiB8IG51bWJlciwgdGhpcz47XG5cblxuICBjb25zdHJ1Y3RvcihkZWZhdWx0VmFsdWVzPzogVCB8IFRbXSxcbiAgICAgICAgICAgICAgaW5pdGlhbFNldHRlcnM/OiBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgYmFzZVR5cGU/OiBuZXcgKCkgPT4gVCkge1xuICAgIHN1cGVyKFxuICAgICAgZXh0ZW5kPGFueT4oREVGQVVMVF9WQUxVRVMsIGRlZmF1bHRWYWx1ZXMgfHwge30pLFxuICAgICAgYXJyYXlVbmlvbjxzdHJpbmc+KERFRkFVTFRfU0VUVEVSUywgaW5pdGlhbFNldHRlcnMgfHwgW10pLFxuICAgICAgYmFzZVR5cGUgfHwgPGFueT5PdmVybGF5Q29udGV4dCAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzcyMzRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gbmV3IE92ZXJsYXlDb25maWcgd2l0aCBhIGNvbnRleHQgcHJvcGVydHkgcmVwcmVzZW50aW5nIHRoZSBkYXRhIGluIHRoaXMgYnVpbGRlci5cbiAgICogQHBhcmFtIGJhc2UgQSBiYXNlIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGUgcmVzdWx0IHdpbGwgZXh0ZW5kXG4gICAqL1xuICB0b092ZXJsYXlDb25maWcoYmFzZT86IE92ZXJsYXlDb25maWcpOiBPdmVybGF5Q29uZmlnIHtcbiAgICByZXR1cm4gZXh0ZW5kKGJhc2UgfHwge30sIHtcbiAgICAgIGNvbnRleHQ6IHRoaXMudG9KU09OKClcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQ29udHJvbGxpbmdDb250ZXh0QnVpbGRlcjxUPiB7XG4gIG9wZW4odmlld0NvbnRhaW5lcj86IFdpZGVWQ1JlZik6IERpYWxvZ1JlZjxUPjtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0byBjcmVhdGUgYW4gYE92ZXJsYXlDb25maWdgIG9uIHRoZSBmbHkuXG4gKiBTaW5jZSBgT3ZlcmxheUNvbmZpZ2AgcmVxdWlyZXMgY29udGV4dCBpdCBtZWFucyBhIGJ1aWxkZXIgaXMgbmVlZGVkLCB0aGlzIHByb2Nlc3MgaGFkIHNvbWUgYm9pbGVycGxhdGUuXG4gKiBXaGVuIGEgcXVpY2ssIG9uIHRoZSBmbHkgb3ZlcmxheSBjb25maWcgaXMgbmVlZGVkIHVzZSB0aGlzIGhlbHBlciB0byBhdm9pZCB0aGF0IGJvaWxlcnBsYXRlLlxuICpcbiAqIEEgYnVpbGRlciBpcyB1c2VkIGFzIGFuIEFQSSB0byBhbGxvdyBzZXR0aW5nIHRoZSBjb250ZXh0IGFuZCBwcm92aWRpbmcgc29tZSBvcGVyYXRpb25zIGFyb3VuZCB0aGUgbW9kYWwuXG4gKiBXaGVuIGEgZGV2ZWxvcGVycyBrbm93cyB0aGUgY29udGV4dCBiZWZvcmUgaGFuZCB3ZSBjYW4gc2tpcCB0aGlzIHN0ZXAsIHRoaXMgaXMgd2hhdCB0aGlzIGZhY3RvcnkgaXMgZm9yLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgbW9kYWxcbiAqIEBwYXJhbSBiYXNlQ29udGV4dFR5cGUgT3B0aW9uYWwuIFRoZSB0eXBlL2NsYXNzIG9mIHRoZSBjb250ZXh0LiBUaGlzIGlzIHRoZSBjbGFzcyB1c2VkIHRvIGluaXQgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSBiYXNlQ29uZmlnIEEgYmFzZSBjb25maWd1cmF0aW9uIHRoYXQgdGhlIHJlc3VsdCB3aWxsIGV4dGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxheUNvbmZpZ0ZhY3Rvcnk8VD4oY29udGV4dDogVCwgYmFzZUNvbnRleHRUeXBlPzogYW55LCBiYXNlQ29uZmlnPzogT3ZlcmxheUNvbmZpZyk6IE92ZXJsYXlDb25maWcge1xuICByZXR1cm4gbmV3IE92ZXJsYXlDb250ZXh0QnVpbGRlcjxUICYgT3ZlcmxheUNvbnRleHQ+KDxhbnk+Y29udGV4dCwgdW5kZWZpbmVkLCBiYXNlQ29udGV4dFR5cGUpLnRvT3ZlcmxheUNvbmZpZyhiYXNlQ29uZmlnKTtcbn1cbiJdfQ==