UNPKG

@linid-dm/directory-manager-client-core

Version:

Core package by providing a set of angular components for the Directory Manager app.

120 lines 15.5 kB
/** * Copyright (C) 2020-2024 Linagora * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version, provided you comply with the Additional Terms applicable for * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU * Affero General Public License, subsections (b), (c), and (e), pursuant to * which these Appropriate Legal Notices must notably (i) retain the display of * the "LinID™" trademark/logo at the top of the interface window, the display * of the “You are using the Open Source and free version of LinID™, powered by * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise * offer!” infobox and in the e-mails sent with the Program, notice appended to * any type of outbound messages (e.g. e-mail and meeting requests) as well as * in the LinID Directory Manager user interface, (ii) retain all hypertext * links between LinID Directory Manager and https://linid.org/, as well as * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA * intellectual property rights over its trademarks and commercial brands. Other * Additional Terms apply, see <http://www.linagora.com/licenses/> for more * details. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more * details. * * You should have received a copy of the GNU Affero General Public License and * its applicable Additional Terms for LinID Directory Manager along with this * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero * General Public License version 3 and <http://www.linagora.com/licenses/> for * the Additional Terms applicable to the LinID Directory Manager software. */ import { isLinkObject } from '../helpers/data-table.helper'; import { CHECK_ATTRIBUTE_PRESENCE, EComponentName, EScimOperator, } from '../interfaces/data.interface'; export function getSearchRequestScimBody(attributes) { let scimBody = { schemas: ['urn:ietf:params:scim:api:messages:2.0:SearchRequest'], }; if (!!attributes) { scimBody = { ...scimBody, attributes }; } return scimBody; } /** * Performs the simple search for each field type. * * @export * @param {string} searchFormValue - A simple string value corresponding to the search. * @param {string[]} [filteredEntryFields] - A list of fields used on filtering. * @returns {string} */ export function simpleSearchFormDataElement(searchFormValue, filteredEntryFields) { let filterScim = ''; filteredEntryFields.forEach((columnId, index) => { filterScim = filterScim + getAttributeScimFilter(columnId, EScimOperator.CO, searchFormValue); if (index < filteredEntryFields.length - 1) { filterScim = filterScim + ' OR '; } }); return filterScim; } /** * Get the scim filter for an attribute and its value * * @export * @param {string} attributeModelRef - the id of an attribute * @param {string} operator - scim filter operator (cf EScimOperator) * @param {string} value - attribute value (not specified if operator is "pr") * @returns {string} the scim filter */ export function getAttributeScimFilter(attributeModelRef, operator, value = null) { if (value) { return attributeModelRef + ' ' + operator + ' ' + '"' + value + '"'; } else { return attributeModelRef + ' ' + operator; } } export function getChipValue(chip) { return isLinkObject(chip.value) ? chip.value.id : chip.value; } export function isAttributeValueMatchingChip(chipValue, attributeValue, attributeConfig) { let isMatching = false; const componentName = attributeConfig.value.field.componentName; switch (componentName) { case EComponentName.select: isMatching = chipValue !== CHECK_ATTRIBUTE_PRESENCE ? chipValue === attributeValue : true; break; case EComponentName.datepicker: case EComponentName.slideToggle: case EComponentName.autocomplete: isMatching = chipValue === attributeValue; break; case EComponentName.input: if (attributeConfig.value.field.props.type === 'date') { isMatching = chipValue === attributeValue; } else { isMatching = attributeValue.includes(chipValue); } break; default: isMatching = attributeValue.includes(chipValue); break; } return isMatching; } const matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; export function escapeStringRegexp(str) { return str.replace(matchOperatorsRe, '\\$&'); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xpYnMvY2xpZW50LWNvcmUvc3JjL2xpYi9zaGFyZWQvaGVscGVycy9zZWFyY2guaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU1RCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCxhQUFhLEdBRWQsTUFBTSw4QkFBOEIsQ0FBQztBQUd0QyxNQUFNLFVBQVUsd0JBQXdCLENBQUMsVUFBcUI7SUFDNUQsSUFBSSxRQUFRLEdBQVE7UUFDbEIsT0FBTyxFQUFFLENBQUMscURBQXFELENBQUM7S0FDakUsQ0FBQztJQUNGLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pCLFFBQVEsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsZUFBdUIsRUFDdkIsbUJBQTZCO0lBRTdCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNwQixtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDOUMsVUFBVTtZQUNSLFVBQVU7Z0JBQ1Ysc0JBQXNCLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDdEUsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLFVBQVUsR0FBRyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsaUJBQXlCLEVBQ3pCLFFBQWdCLEVBQ2hCLFFBQWdCLElBQUk7SUFFcEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE9BQU8saUJBQWlCLEdBQUcsR0FBRyxHQUFHLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDdEUsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDNUMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQXlCO0lBQ3BELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFFLElBQUksQ0FBQyxLQUFlLENBQUMsRUFBRTtRQUMxQixDQUFDLENBQUUsSUFBSSxDQUFDLEtBQTBCLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsU0FBMkIsRUFDM0IsY0FBZ0MsRUFDaEMsZUFBMkI7SUFFM0IsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sYUFBYSxHQUFXLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztJQUN4RSxRQUFRLGFBQWEsRUFBRSxDQUFDO1FBQ3RCLEtBQUssY0FBYyxDQUFDLE1BQU07WUFDeEIsVUFBVTtnQkFDUixTQUFTLEtBQUssd0JBQXdCO29CQUNwQyxDQUFDLENBQUMsU0FBUyxLQUFLLGNBQWM7b0JBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDWCxNQUFNO1FBQ1IsS0FBSyxjQUFjLENBQUMsVUFBVSxDQUFDO1FBQy9CLEtBQUssY0FBYyxDQUFDLFdBQVcsQ0FBQztRQUNoQyxLQUFLLGNBQWMsQ0FBQyxZQUFZO1lBQzlCLFVBQVUsR0FBRyxTQUFTLEtBQUssY0FBYyxDQUFDO1lBQzFDLE1BQU07UUFFUixLQUFLLGNBQWMsQ0FBQyxLQUFLO1lBQ3ZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDdEQsVUFBVSxHQUFHLFNBQVMsS0FBSyxjQUFjLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsR0FBSSxjQUF5QixDQUFDLFFBQVEsQ0FBQyxTQUFtQixDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUNELE1BQU07UUFFUjtZQUNFLFVBQVUsR0FBSSxjQUF5QixDQUFDLFFBQVEsQ0FBQyxTQUFtQixDQUFDLENBQUM7WUFDdEUsTUFBTTtJQUNWLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQztBQUUvQyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBVztJQUM1QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjQgTGluYWdvcmFcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlclxuICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueVxuICogbGF0ZXIgdmVyc2lvbiwgcHJvdmlkZWQgeW91IGNvbXBseSB3aXRoIHRoZSBBZGRpdGlvbmFsIFRlcm1zIGFwcGxpY2FibGUgZm9yXG4gKiBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciBzb2Z0d2FyZSBieSBMSU5BR09SQSBwdXJzdWFudCB0byBTZWN0aW9uIDcgb2YgdGhlIEdOVVxuICogQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHN1YnNlY3Rpb25zIChiKSwgKGMpLCBhbmQgKGUpLCBwdXJzdWFudCB0b1xuICogd2hpY2ggdGhlc2UgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyBtdXN0IG5vdGFibHkgKGkpIHJldGFpbiB0aGUgZGlzcGxheSBvZlxuICogdGhlIFwiTGluSUTihKJcIiB0cmFkZW1hcmsvbG9nbyBhdCB0aGUgdG9wIG9mIHRoZSBpbnRlcmZhY2Ugd2luZG93LCB0aGUgZGlzcGxheVxuICogb2YgdGhlIOKAnFlvdSBhcmUgdXNpbmcgdGhlIE9wZW4gU291cmNlIGFuZCBmcmVlIHZlcnNpb24gb2YgTGluSUTihKIsIHBvd2VyZWQgYnlcbiAqIExpbmFnb3JhIMKpIDIwMDnigJMyMDEzLiBDb250cmlidXRlIHRvIExpbklEIFImRCBieSBzdWJzY3JpYmluZyB0byBhbiBFbnRlcnByaXNlXG4gKiBvZmZlciHigJ0gaW5mb2JveCBhbmQgaW4gdGhlIGUtbWFpbHMgc2VudCB3aXRoIHRoZSBQcm9ncmFtLCBub3RpY2UgYXBwZW5kZWQgdG9cbiAqIGFueSB0eXBlIG9mIG91dGJvdW5kIG1lc3NhZ2VzIChlLmcuIGUtbWFpbCBhbmQgbWVldGluZyByZXF1ZXN0cykgYXMgd2VsbCBhc1xuICogaW4gdGhlIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIHVzZXIgaW50ZXJmYWNlLCAoaWkpIHJldGFpbiBhbGwgaHlwZXJ0ZXh0XG4gKiBsaW5rcyBiZXR3ZWVuIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIGFuZCBodHRwczovL2xpbmlkLm9yZy8sIGFzIHdlbGwgYXNcbiAqIGJldHdlZW4gTElOQUdPUkEgYW5kIExJTkFHT1JBLmNvbSwgYW5kIChpaWkpIHJlZnJhaW4gZnJvbSBpbmZyaW5naW5nIExJTkFHT1JBXG4gKiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG92ZXIgaXRzIHRyYWRlbWFya3MgYW5kIGNvbW1lcmNpYWwgYnJhbmRzLiBPdGhlclxuICogQWRkaXRpb25hbCBUZXJtcyBhcHBseSwgc2VlIDxodHRwOi8vd3d3LmxpbmFnb3JhLmNvbS9saWNlbnNlcy8+IGZvciBtb3JlXG4gKiBkZXRhaWxzLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1NcbiAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmVcbiAqIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZFxuICogaXRzIGFwcGxpY2FibGUgQWRkaXRpb25hbCBUZXJtcyBmb3IgTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgYWxvbmcgd2l0aCB0aGlzXG4gKiBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4gZm9yIHRoZSBHTlUgQWZmZXJvXG4gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyBhbmQgPGh0dHA6Ly93d3cubGluYWdvcmEuY29tL2xpY2Vuc2VzLz4gZm9yXG4gKiB0aGUgQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciBzb2Z0d2FyZS5cbiAqL1xuXG5pbXBvcnQgeyBpc0xpbmtPYmplY3QgfSBmcm9tICcuLi9oZWxwZXJzL2RhdGEtdGFibGUuaGVscGVyJztcbmltcG9ydCB7IElBdHRyaWJ1dGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIENIRUNLX0FUVFJJQlVURV9QUkVTRU5DRSxcbiAgRUNvbXBvbmVudE5hbWUsXG4gIEVTY2ltT3BlcmF0b3IsXG4gIElMaW5rLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2RhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IElBZHZhbmNlZFNlYXJjaENoaXAgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3VpLmludGVyZmFjZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXF1ZXN0U2NpbUJvZHkoYXR0cmlidXRlcz86IHN0cmluZ1tdKTogYW55IHtcbiAgbGV0IHNjaW1Cb2R5OiBhbnkgPSB7XG4gICAgc2NoZW1hczogWyd1cm46aWV0ZjpwYXJhbXM6c2NpbTphcGk6bWVzc2FnZXM6Mi4wOlNlYXJjaFJlcXVlc3QnXSxcbiAgfTtcbiAgaWYgKCEhYXR0cmlidXRlcykge1xuICAgIHNjaW1Cb2R5ID0geyAuLi5zY2ltQm9keSwgYXR0cmlidXRlcyB9O1xuICB9XG4gIHJldHVybiBzY2ltQm9keTtcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgc2ltcGxlIHNlYXJjaCBmb3IgZWFjaCBmaWVsZCB0eXBlLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hGb3JtVmFsdWUgLSBBIHNpbXBsZSBzdHJpbmcgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgc2VhcmNoLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2ZpbHRlcmVkRW50cnlGaWVsZHNdIC0gQSBsaXN0IG9mIGZpZWxkcyB1c2VkIG9uIGZpbHRlcmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGVTZWFyY2hGb3JtRGF0YUVsZW1lbnQoXG4gIHNlYXJjaEZvcm1WYWx1ZTogc3RyaW5nLFxuICBmaWx0ZXJlZEVudHJ5RmllbGRzOiBzdHJpbmdbXVxuKTogc3RyaW5nIHtcbiAgbGV0IGZpbHRlclNjaW0gPSAnJztcbiAgZmlsdGVyZWRFbnRyeUZpZWxkcy5mb3JFYWNoKChjb2x1bW5JZCwgaW5kZXgpID0+IHtcbiAgICBmaWx0ZXJTY2ltID1cbiAgICAgIGZpbHRlclNjaW0gK1xuICAgICAgZ2V0QXR0cmlidXRlU2NpbUZpbHRlcihjb2x1bW5JZCwgRVNjaW1PcGVyYXRvci5DTywgc2VhcmNoRm9ybVZhbHVlKTtcbiAgICBpZiAoaW5kZXggPCBmaWx0ZXJlZEVudHJ5RmllbGRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGZpbHRlclNjaW0gPSBmaWx0ZXJTY2ltICsgJyBPUiAnO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmaWx0ZXJTY2ltO1xufVxuXG4vKipcbiAqICBHZXQgdGhlIHNjaW0gZmlsdGVyIGZvciBhbiBhdHRyaWJ1dGUgYW5kIGl0cyB2YWx1ZVxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVNb2RlbFJlZiAtIHRoZSBpZCBvZiBhbiBhdHRyaWJ1dGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciAtIHNjaW0gZmlsdGVyIG9wZXJhdG9yIChjZiBFU2NpbU9wZXJhdG9yKVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gYXR0cmlidXRlIHZhbHVlIChub3Qgc3BlY2lmaWVkIGlmIG9wZXJhdG9yIGlzIFwicHJcIilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBzY2ltIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXR0cmlidXRlU2NpbUZpbHRlcihcbiAgYXR0cmlidXRlTW9kZWxSZWY6IHN0cmluZyxcbiAgb3BlcmF0b3I6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyA9IG51bGxcbik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVNb2RlbFJlZiArICcgJyArIG9wZXJhdG9yICsgJyAnICsgJ1wiJyArIHZhbHVlICsgJ1wiJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXR0cmlidXRlTW9kZWxSZWYgKyAnICcgKyBvcGVyYXRvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpcFZhbHVlKGNoaXA6IElBZHZhbmNlZFNlYXJjaENoaXApOiBzdHJpbmcgfCBib29sZWFuIHtcbiAgcmV0dXJuIGlzTGlua09iamVjdChjaGlwLnZhbHVlKVxuICAgID8gKGNoaXAudmFsdWUgYXMgSUxpbmspLmlkXG4gICAgOiAoY2hpcC52YWx1ZSBhcyBzdHJpbmcgfCBib29sZWFuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXR0cmlidXRlVmFsdWVNYXRjaGluZ0NoaXAoXG4gIGNoaXBWYWx1ZTogc3RyaW5nIHwgYm9vbGVhbixcbiAgYXR0cmlidXRlVmFsdWU6IHN0cmluZyB8IGJvb2xlYW4sXG4gIGF0dHJpYnV0ZUNvbmZpZzogSUF0dHJpYnV0ZVxuKTogYm9vbGVhbiB7XG4gIGxldCBpc01hdGNoaW5nID0gZmFsc2U7XG4gIGNvbnN0IGNvbXBvbmVudE5hbWU6IHN0cmluZyA9IGF0dHJpYnV0ZUNvbmZpZy52YWx1ZS5maWVsZC5jb21wb25lbnROYW1lO1xuICBzd2l0Y2ggKGNvbXBvbmVudE5hbWUpIHtcbiAgICBjYXNlIEVDb21wb25lbnROYW1lLnNlbGVjdDpcbiAgICAgIGlzTWF0Y2hpbmcgPVxuICAgICAgICBjaGlwVmFsdWUgIT09IENIRUNLX0FUVFJJQlVURV9QUkVTRU5DRVxuICAgICAgICAgID8gY2hpcFZhbHVlID09PSBhdHRyaWJ1dGVWYWx1ZVxuICAgICAgICAgIDogdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRUNvbXBvbmVudE5hbWUuZGF0ZXBpY2tlcjpcbiAgICBjYXNlIEVDb21wb25lbnROYW1lLnNsaWRlVG9nZ2xlOlxuICAgIGNhc2UgRUNvbXBvbmVudE5hbWUuYXV0b2NvbXBsZXRlOlxuICAgICAgaXNNYXRjaGluZyA9IGNoaXBWYWx1ZSA9PT0gYXR0cmlidXRlVmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgRUNvbXBvbmVudE5hbWUuaW5wdXQ6XG4gICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLnZhbHVlLmZpZWxkLnByb3BzLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICBpc01hdGNoaW5nID0gY2hpcFZhbHVlID09PSBhdHRyaWJ1dGVWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTWF0Y2hpbmcgPSAoYXR0cmlidXRlVmFsdWUgYXMgc3RyaW5nKS5pbmNsdWRlcyhjaGlwVmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlzTWF0Y2hpbmcgPSAoYXR0cmlidXRlVmFsdWUgYXMgc3RyaW5nKS5pbmNsdWRlcyhjaGlwVmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBpc01hdGNoaW5nO1xufVxuXG5jb25zdCBtYXRjaE9wZXJhdG9yc1JlID0gL1t8XFxcXHt9KClbXFxdXiQrKj8uXS9nO1xuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlU3RyaW5nUmVnZXhwKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShtYXRjaE9wZXJhdG9yc1JlLCAnXFxcXCQmJyk7XG59XG4iXX0=