igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
180 lines • 16.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Pipe } from '@angular/core';
import { DataUtil } from '../../data-operations/data-util';
import { GridBaseAPIService } from '../api.service';
import { BaseFilteringStrategy } from '../../data-operations/filtering-strategy';
/**
* @hidden
*/
export class TreeGridFilteringStrategy extends BaseFilteringStrategy {
/**
* @param {?} data
* @param {?} expressionsTree
* @return {?}
*/
filter(data, expressionsTree) {
return this.filterImpl(data, expressionsTree, undefined);
}
/**
* @private
* @param {?} data
* @param {?} expressionsTree
* @param {?} parent
* @return {?}
*/
filterImpl(data, expressionsTree, parent) {
/** @type {?} */
let i;
/** @type {?} */
let rec;
/** @type {?} */
const len = data.length;
/** @type {?} */
const res = [];
if (!expressionsTree || !expressionsTree.filteringOperands || expressionsTree.filteringOperands.length === 0 || !len) {
return data;
}
for (i = 0; i < len; i++) {
rec = DataUtil.cloneTreeGridRecord(data[i]);
rec.parent = parent;
if (rec.children) {
/** @type {?} */
const filteredChildren = this.filterImpl(rec.children, expressionsTree, rec);
rec.children = filteredChildren.length > 0 ? filteredChildren : null;
}
if (this.matchRecord(rec, expressionsTree)) {
res.push(rec);
}
else if (rec.children && rec.children.length > 0) {
rec.isFilteredOutParent = true;
res.push(rec);
}
}
return res;
}
/**
* @protected
* @param {?} rec
* @param {?} fieldName
* @return {?}
*/
getFieldValue(rec, fieldName) {
/** @type {?} */
const hierarchicalRecord = (/** @type {?} */ (rec));
return hierarchicalRecord.data[fieldName];
}
}
/**
* @hidden
*/
export class IgxTreeGridFilteringPipe {
/**
* @param {?} gridAPI
*/
constructor(gridAPI) {
this.gridAPI = (/** @type {?} */ (gridAPI));
}
/**
* @param {?} hierarchyData
* @param {?} expressionsTree
* @param {?} id
* @param {?} pipeTrigger
* @return {?}
*/
transform(hierarchyData, expressionsTree, id, pipeTrigger) {
/** @type {?} */
const grid = this.gridAPI.grid;
/** @type {?} */
const state = {
expressionsTree: expressionsTree,
strategy: new TreeGridFilteringStrategy()
};
this.resetFilteredOutProperty(grid.records);
if (!state.expressionsTree ||
!state.expressionsTree.filteringOperands ||
state.expressionsTree.filteringOperands.length === 0) {
grid.filteredData = null;
return hierarchyData;
}
/** @type {?} */
const result = this.filter(hierarchyData, state);
/** @type {?} */
const filteredData = [];
this.expandAllRecursive(grid, result, grid.expansionStates, filteredData);
grid.filteredData = filteredData;
return result;
}
/**
* @private
* @param {?} map
* @return {?}
*/
resetFilteredOutProperty(map) {
/** @type {?} */
const keys = Array.from(map.keys());
for (let i = 0; i < keys.length; i++) {
map.get(keys[i]).isFilteredOutParent = undefined;
}
}
/**
* @private
* @param {?} grid
* @param {?} data
* @param {?} expandedStates
* @param {?} filteredData
* @return {?}
*/
expandAllRecursive(grid, data, expandedStates, filteredData) {
for (let i = 0; i < data.length; i++) {
/** @type {?} */
const rec = data[i];
filteredData.push(rec.data);
this.updateNonProcessedRecord(grid, rec);
if (rec.children && rec.children.length > 0) {
expandedStates.set(rec.rowID, true);
this.expandAllRecursive(grid, rec.children, expandedStates, filteredData);
}
}
}
/**
* @private
* @param {?} grid
* @param {?} record
* @return {?}
*/
updateNonProcessedRecord(grid, record) {
/** @type {?} */
const rec = grid.records.get(record.rowID);
rec.isFilteredOutParent = record.isFilteredOutParent;
}
/**
* @private
* @param {?} data
* @param {?} state
* @return {?}
*/
filter(data, state) {
return state.strategy.filter(data, state.expressionsTree);
}
}
IgxTreeGridFilteringPipe.decorators = [
{ type: Pipe, args: [{
name: 'treeGridFiltering',
pure: true
},] }
];
/** @nocollapse */
IgxTreeGridFilteringPipe.ctorParameters = () => [
{ type: GridBaseAPIService }
];
if (false) {
/**
* @type {?}
* @private
*/
IgxTreeGridFilteringPipe.prototype.gridAPI;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLmZpbHRlcmluZy5waXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy90cmVlLWdyaWQvdHJlZS1ncmlkLmZpbHRlcmluZy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7QUFPakYsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHFCQUFxQjs7Ozs7O0lBQ3pELE1BQU0sQ0FBQyxJQUF1QixFQUFFLGVBQTBDO1FBQzdFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzdELENBQUM7Ozs7Ozs7O0lBRU8sVUFBVSxDQUFDLElBQXVCLEVBQUUsZUFBMEMsRUFBRSxNQUF1Qjs7WUFDdkcsQ0FBUzs7WUFDVCxHQUFvQjs7Y0FDbEIsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNOztjQUNqQixHQUFHLEdBQXNCLEVBQUU7UUFDakMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsSUFBSSxlQUFlLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNsSCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O2tCQUM1QixHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuQixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRXpDLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQzthQUM3RTtTQUNKO0lBQ0wsQ0FBQzs7Ozs7OztJQUVPLHdCQUF3QixDQUFDLElBQTBCLEVBQUUsTUFBdUI7O2NBQzFFLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUM7SUFDekQsQ0FBQzs7Ozs7OztJQUVPLE1BQU0sQ0FBQyxJQUF1QixFQUFFLEtBQXNCO1FBQzFELE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5RCxDQUFDOzs7WUFoRUosSUFBSSxTQUFDO2dCQUNGLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSxJQUFJO2FBQ2I7Ozs7WUFuRFEsa0JBQWtCOzs7Ozs7O0lBcUR2QiwyQ0FBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZUdyaWRDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBCYXNlRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElGaWx0ZXJpbmdTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4vdHJlZS1ncmlkLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgSWd4VHJlZUdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLWdyaWQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZEJhc2VDb21wb25lbnQsIElHcmlkRGF0YUJpbmRhYmxlIH0gZnJvbSAnLi4vZ3JpZCc7XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgY2xhc3MgVHJlZUdyaWRGaWx0ZXJpbmdTdHJhdGVneSBleHRlbmRzIEJhc2VGaWx0ZXJpbmdTdHJhdGVneSB7XG4gICAgcHVibGljIGZpbHRlcihkYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSwgZXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogSVRyZWVHcmlkUmVjb3JkW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJJbXBsKGRhdGEsIGV4cHJlc3Npb25zVHJlZSwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlckltcGwoZGF0YTogSVRyZWVHcmlkUmVjb3JkW10sIGV4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgcGFyZW50OiBJVHJlZUdyaWRSZWNvcmQpOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGxldCBpOiBudW1iZXI7XG4gICAgICAgIGxldCByZWM6IElUcmVlR3JpZFJlY29yZDtcbiAgICAgICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlczogSVRyZWVHcmlkUmVjb3JkW10gPSBbXTtcbiAgICAgICAgaWYgKCFleHByZXNzaW9uc1RyZWUgfHwgIWV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcyB8fCBleHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID09PSAwIHx8ICFsZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgcmVjID0gRGF0YVV0aWwuY2xvbmVUcmVlR3JpZFJlY29yZChkYXRhW2ldKTtcbiAgICAgICAgICAgIHJlYy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICBpZiAocmVjLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRDaGlsZHJlbiA9IHRoaXMuZmlsdGVySW1wbChyZWMuY2hpbGRyZW4sIGV4cHJlc3Npb25zVHJlZSwgcmVjKTtcbiAgICAgICAgICAgICAgICByZWMuY2hpbGRyZW4gPSBmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZENoaWxkcmVuIDogbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hSZWNvcmQocmVjLCBleHByZXNzaW9uc1RyZWUpKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2gocmVjKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjLmNoaWxkcmVuICYmIHJlYy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjLmlzRmlsdGVyZWRPdXRQYXJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHJlYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RmllbGRWYWx1ZShyZWM6IG9iamVjdCwgZmllbGROYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxSZWNvcmQgPSA8SVRyZWVHcmlkUmVjb3JkPnJlYztcbiAgICAgICAgcmV0dXJuIGhpZXJhcmNoaWNhbFJlY29yZC5kYXRhW2ZpZWxkTmFtZV07XG4gICAgfVxufVxuXG4vKiogQGhpZGRlbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICd0cmVlR3JpZEZpbHRlcmluZycsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZEZpbHRlcmluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwcml2YXRlIGdyaWRBUEk6IElneFRyZWVHcmlkQVBJU2VydmljZTtcblxuICAgIGNvbnN0cnVjdG9yKGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZUNvbXBvbmVudCAmIElHcmlkRGF0YUJpbmRhYmxlPikge1xuICAgICAgICB0aGlzLmdyaWRBUEkgPSA8SWd4VHJlZUdyaWRBUElTZXJ2aWNlPmdyaWRBUEk7XG4gICAgIH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oaGllcmFyY2h5RGF0YTogSVRyZWVHcmlkUmVjb3JkW10sIGV4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgaWQ6IHN0cmluZywgcGlwZVRyaWdnZXI6IG51bWJlcik6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgY29uc3QgZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGV4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgIHN0cmF0ZWd5OiBuZXcgVHJlZUdyaWRGaWx0ZXJpbmdTdHJhdGVneSgpXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yZXNldEZpbHRlcmVkT3V0UHJvcGVydHkoZ3JpZC5yZWNvcmRzKTtcblxuICAgICAgICBpZiAoIXN0YXRlLmV4cHJlc3Npb25zVHJlZSB8fFxuICAgICAgICAgICAgIXN0YXRlLmV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcyB8fFxuICAgICAgICAgICAgc3RhdGUuZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZ3JpZC5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIGhpZXJhcmNoeURhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbHRlcihoaWVyYXJjaHlEYXRhLCBzdGF0ZSk7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkRGF0YTogYW55W10gPSBbXTtcbiAgICAgICAgdGhpcy5leHBhbmRBbGxSZWN1cnNpdmUoZ3JpZCwgcmVzdWx0LCBncmlkLmV4cGFuc2lvblN0YXRlcywgZmlsdGVyZWREYXRhKTtcbiAgICAgICAgZ3JpZC5maWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGE7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0RmlsdGVyZWRPdXRQcm9wZXJ0eShtYXA6IE1hcDxhbnksIElUcmVlR3JpZFJlY29yZD4pIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IEFycmF5LmZyb20obWFwLmtleXMoKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbWFwLmdldChrZXlzW2ldKS5pc0ZpbHRlcmVkT3V0UGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRBbGxSZWN1cnNpdmUoZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQsIGRhdGE6IElUcmVlR3JpZFJlY29yZFtdLFxuICAgICAgICBleHBhbmRlZFN0YXRlczogTWFwPGFueSwgYm9vbGVhbj4sIGZpbHRlcmVkRGF0YTogYW55W10pIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZWMgPSBkYXRhW2ldO1xuICAgICAgICAgICAgZmlsdGVyZWREYXRhLnB1c2gocmVjLmRhdGEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOb25Qcm9jZXNzZWRSZWNvcmQoZ3JpZCwgcmVjKTtcblxuICAgICAgICAgICAgaWYgKHJlYy5jaGlsZHJlbiAmJiByZWMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkU3RhdGVzLnNldChyZWMucm93SUQsIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsUmVjdXJzaXZlKGdyaWQsIHJlYy5jaGlsZHJlbiwgZXhwYW5kZWRTdGF0ZXMsIGZpbHRlcmVkRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU5vblByb2Nlc3NlZFJlY29yZChncmlkOiBJZ3hUcmVlR3JpZENvbXBvbmVudCwgcmVjb3JkOiBJVHJlZUdyaWRSZWNvcmQpIHtcbiAgICAgICAgY29uc3QgcmVjID0gZ3JpZC5yZWNvcmRzLmdldChyZWNvcmQucm93SUQpO1xuICAgICAgICByZWMuaXNGaWx0ZXJlZE91dFBhcmVudCA9IHJlY29yZC5pc0ZpbHRlcmVkT3V0UGFyZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyKGRhdGE6IElUcmVlR3JpZFJlY29yZFtdLCBzdGF0ZTogSUZpbHRlcmluZ1N0YXRlKTogSVRyZWVHcmlkUmVjb3JkW10ge1xuICAgICAgICByZXR1cm4gc3RhdGUuc3RyYXRlZ3kuZmlsdGVyKGRhdGEsIHN0YXRlLmV4cHJlc3Npb25zVHJlZSk7XG4gICAgfVxufVxuIl19