@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
167 lines • 18.6 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { CommonModule } from '@angular/common';
import { Directive, ElementRef, EventEmitter, Input, NgModule, OnChanges, Output, Pipe, PipeTransform, Renderer2, SimpleChanges } from '@angular/core';
var IgxFilterOptions = /** @class */ (function () {
function IgxFilterOptions() {
// Input text value that will be used as a filtering pattern (matching condition is based on it)
this.inputValue = '';
}
// Function - get value to be tested from the item
// item - single item of the list to be filtered
// key - property name of item, which value should be tested
// Default behavior - returns "key"- named property value of item if key si provided,
// otherwise textContent of the item's html element
IgxFilterOptions.prototype.get_value = function (item, key) {
var result = '';
if (key && item[key]) {
result = item[key].toString();
}
else if (item.element) {
if (item.element.nativeElement) {
result = item.element.nativeElement.textContent.trim();
// Check if element doesn't return the DOM element directly
}
else if (item.element.textContent) {
result = item.element.textContent.trim();
}
}
return result;
};
// Function - formats the original text before matching process
// Default behavior - returns text to lower case
IgxFilterOptions.prototype.formatter = function (valueToTest) {
return valueToTest.toLowerCase();
};
// Function - determines whether the item met the condition
// valueToTest - text value that should be tested
// inputValue - text value from input that condition is based on
// Default behavior - "contains"
IgxFilterOptions.prototype.matchFn = function (valueToTest, inputValue) {
return valueToTest.indexOf(inputValue && inputValue.toLowerCase() || '') > -1;
};
// Function - executed after matching test for every matched item
// Default behavior - shows the item
IgxFilterOptions.prototype.metConditionFn = function (item) {
if (item.hasOwnProperty('hidden')) {
item.hidden = false;
}
};
// Function - executed for every NOT matched item after matching test
// Default behavior - hides the item
IgxFilterOptions.prototype.overdueConditionFn = function (item) {
if (item.hasOwnProperty('hidden')) {
item.hidden = true;
}
};
return IgxFilterOptions;
}());
export { IgxFilterOptions };
var IgxFilterDirective = /** @class */ (function () {
function IgxFilterDirective(element, renderer) {
this.element = element;
this.filtering = new EventEmitter(false); // synchronous event emitter
this.filtered = new EventEmitter();
}
IgxFilterDirective.prototype.ngOnChanges = function (changes) {
// Detect only changes of input value
if (changes.filterOptions &&
changes.filterOptions.currentValue &&
changes.filterOptions.currentValue.inputValue !== undefined &&
changes.filterOptions.previousValue &&
changes.filterOptions.currentValue.inputValue !== changes.filterOptions.previousValue.inputValue) {
this.filter();
}
};
IgxFilterDirective.prototype.filter = function () {
if (!this.filterOptions.items) {
return;
}
var args = { cancel: false, items: this.filterOptions.items };
this.filtering.emit(args);
if (args.cancel) {
return;
}
var pipe = new IgxFilterPipe();
var filtered = pipe.transform(this.filterOptions.items, this.filterOptions);
this.filtered.emit({ filteredItems: filtered });
};
IgxFilterDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 }
]; };
__decorate([
Output(),
__metadata("design:type", Object)
], IgxFilterDirective.prototype, "filtering", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxFilterDirective.prototype, "filtered", void 0);
__decorate([
Input('igxFilter'),
__metadata("design:type", IgxFilterOptions)
], IgxFilterDirective.prototype, "filterOptions", void 0);
IgxFilterDirective = __decorate([
Directive({
selector: '[igxFilter]'
}),
__metadata("design:paramtypes", [ElementRef, Renderer2])
], IgxFilterDirective);
return IgxFilterDirective;
}());
export { IgxFilterDirective };
var IgxFilterPipe = /** @class */ (function () {
function IgxFilterPipe() {
}
IgxFilterPipe.prototype.transform = function (items,
// options - initial settings of filter functionality
options) {
var result = [];
if (!items || !items.length || !options) {
return;
}
if (options.items) {
items = options.items;
}
result = items.filter(function (item) {
var match = options.matchFn(options.formatter(options.get_value(item, options.key)), options.inputValue);
if (match) {
if (options.metConditionFn) {
options.metConditionFn(item);
}
}
else {
if (options.overdueConditionFn) {
options.overdueConditionFn(item);
}
}
return match;
});
return result;
};
IgxFilterPipe = __decorate([
Pipe({
name: 'igxFilter',
pure: false
})
], IgxFilterPipe);
return IgxFilterPipe;
}());
export { IgxFilterPipe };
/**
* @hidden
*/
var IgxFilterModule = /** @class */ (function () {
function IgxFilterModule() {
}
IgxFilterModule = __decorate([
NgModule({
declarations: [IgxFilterDirective, IgxFilterPipe],
exports: [IgxFilterDirective, IgxFilterPipe],
imports: [CommonModule]
})
], IgxFilterModule);
return IgxFilterModule;
}());
export { IgxFilterModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZGlyZWN0aXZlcy9maWx0ZXIvZmlsdGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxNQUFNLEVBQ04sSUFBSSxFQUNKLGFBQWEsRUFDYixTQUFTLEVBQ1QsYUFBYSxFQUNoQixNQUFNLGVBQWUsQ0FBQztBQUV2QjtJQUFBO1FBQ0ksZ0dBQWdHO1FBQ3pGLGVBQVUsR0FBRyxFQUFFLENBQUM7SUEyRDNCLENBQUM7SUFuREcsa0RBQWtEO0lBQ2xELGdEQUFnRDtJQUNoRCw0REFBNEQ7SUFDNUQscUZBQXFGO0lBQ3JGLG1EQUFtRDtJQUM1QyxvQ0FBUyxHQUFoQixVQUFpQixJQUFTLEVBQUUsR0FBVztRQUNuQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFaEIsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakM7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtnQkFDNUIsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0QsMkRBQTJEO2FBQzFEO2lCQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ2pDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJ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V0FBVztZQUNqQixJQUFJLEVBQUUsS0FBSztTQUNkLENBQUM7T0FFVyxhQUFhLENBaUN6QjtJQUFELG9CQUFDO0NBQUEsQUFqQ0QsSUFpQ0M7U0FqQ1ksYUFBYTtBQW1DMUI7O0dBRUc7QUFNSDtJQUFBO0lBQ0EsQ0FBQztJQURZLGVBQWU7UUFMM0IsUUFBUSxDQUFDO1lBQ04sWUFBWSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO1lBQ2pELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQztZQUM1QyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FDMUIsQ0FBQztPQUNXLGVBQWUsQ0FDM0I7SUFBRCxzQkFBQztDQUFBLEFBREQsSUFDQztTQURZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE91dHB1dCxcbiAgICBQaXBlLFxuICAgIFBpcGVUcmFuc2Zvcm0sXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBJZ3hGaWx0ZXJPcHRpb25zIHtcbiAgICAvLyBJbnB1dCB0ZXh0IHZhbHVlIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGEgZmlsdGVyaW5nIHBhdHRlcm4gKG1hdGNoaW5nIGNvbmRpdGlvbiBpcyBiYXNlZCBvbiBpdClcbiAgICBwdWJsaWMgaW5wdXRWYWx1ZSA9ICcnO1xuXG4gICAgLy8gSXRlbSBwcm9wZXJ0eSwgd2hpY2ggdmFsdWUgc2hvdWxkIGJlIHVzZWQgZm9yIGZpbHRlcmluZ1xuICAgIHB1YmxpYyBrZXk6IHN0cmluZztcblxuICAgIC8vIFJlcHJlc2VudCBpdGVtcyBvZiB0aGUgbGlzdC4gSXQgc2hvdWxkIGJlIHVzZWQgdG8gaGFuZGxlIGRlY2FsYXJhdGV2ZWx5IGRlZmluZWQgd2lkZ2V0c1xuICAgIHB1YmxpYyBpdGVtczogYW55W107XG5cbiAgICAvLyBGdW5jdGlvbiAtIGdldCB2YWx1ZSB0byBiZSB0ZXN0ZWQgZnJvbSB0aGUgaXRlbVxuICAgIC8vIGl0ZW0gLSBzaW5nbGUgaXRlbSBvZiB0aGUgbGlzdCB0byBiZSBmaWx0ZXJlZFxuICAgIC8vIGtleSAtIHByb3BlcnR5IG5hbWUgb2YgaXRlbSwgd2hpY2ggdmFsdWUgc2hvdWxkIGJlIHRlc3RlZFxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgLSByZXR1cm5zIFwia2V5XCItIG5hbWVkIHByb3BlcnR5IHZhbHVlIG9mIGl0ZW0gaWYga2V5IHNpIHByb3ZpZGVkLFxuICAgIC8vIG90aGVyd2lzZSB0ZXh0Q29udGVudCBvZiB0aGUgaXRlbSdzIGh0bWwgZWxlbWVudFxuICAgIHB1YmxpYyBnZXRfdmFsdWUoaXRlbTogYW55LCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgICAgICBpZiAoa2V5ICYmIGl0ZW1ba2V5XSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gaXRlbVtrZXldLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5lbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVtLmVsZW1lbnQubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBlbGVtZW50IGRvZXNuJ3QgcmV0dXJuIHRoZSBET00gZWxlbWVudCBkaXJlY3RseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmVsZW1lbnQudGV4dENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVtLmVsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiAtIGZvcm1hdHMgdGhlIG9yaWdpbmFsIHRleHQgYmVmb3JlIG1hdGNoaW5nIHByb2Nlc3NcbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yIC0gcmV0dXJucyB0ZXh0IHRvIGxvd2VyIGNhc2VcbiAgICBwdWJsaWMgZm9ybWF0dGVyKHZhbHVlVG9UZXN0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWVUb1Rlc3QudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiAtIGRldGVybWluZXMgd2hldGhlciB0aGUgaXRlbSBtZXQgdGhlIGNvbmRpdGlvblxuICAgIC8vIHZhbHVlVG9UZXN0IC0gdGV4dCB2YWx1ZSB0aGF0IHNob3VsZCBiZSB0ZXN0ZWRcbiAgICAvLyBpbnB1dFZhbHVlIC0gdGV4dCB2YWx1ZSBmcm9tIGlucHV0IHRoYXQgY29uZGl0aW9uIGlzIGJhc2VkIG9uXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciAtIFwiY29udGFpbnNcIlxuICAgIHB1YmxpYyBtYXRjaEZuKHZhbHVlVG9UZXN0OiBzdHJpbmcsIGlucHV0VmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWVUb1Rlc3QuaW5kZXhPZihpbnB1dFZhbHVlICYmIGlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSB8fCAnJykgPiAtMTtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiAtIGV4ZWN1dGVkIGFmdGVyIG1hdGNoaW5nIHRlc3QgZm9yIGV2ZXJ5IG1hdGNoZWQgaXRlbVxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgLSBzaG93cyB0aGUgaXRlbVxuICAgIHB1YmxpYyBtZXRDb25kaXRpb25GbihpdGVtOiBhbnkpIHtcbiAgICAgICAgaWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpKSB7XG4gICAgICAgICAgICBpdGVtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gLSBleGVjdXRlZCBmb3IgZXZlcnkgTk9UIG1hdGNoZWQgaXRlbSBhZnRlciBtYXRjaGluZyB0ZXN0XG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciAtIGhpZGVzIHRoZSBpdGVtXG4gICAgcHVibGljIG92ZXJkdWVDb25kaXRpb25GbihpdGVtOiBhbnkpIHtcbiAgICAgICAgaWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpKSB7XG4gICAgICAgICAgICBpdGVtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4RmlsdGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBAT3V0cHV0KCkgcHVibGljIGZpbHRlcmluZyA9IG5ldyBFdmVudEVtaXR0ZXIoZmFsc2UpOyAvLyBzeW5jaHJvbm91cyBldmVudCBlbWl0dGVyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBmaWx0ZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgnaWd4RmlsdGVyJykgcHVibGljIGZpbHRlck9wdGlvbnM6IElneEZpbHRlck9wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICAvLyBEZXRlY3Qgb25seSBjaGFuZ2VzIG9mIGlucHV0IHZhbHVlXG4gICAgICAgIGlmIChjaGFuZ2VzLmZpbHRlck9wdGlvbnMgJiZcbiAgICAgICAgICAgIGNoYW5nZXMuZmlsdGVyT3B0aW9ucy5jdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAgIGNoYW5nZXMuZmlsdGVyT3B0aW9ucy5jdXJyZW50VmFsdWUuaW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBjaGFuZ2VzLmZpbHRlck9wdGlvbnMucHJldmlvdXNWYWx1ZSAmJlxuICAgICAgICAgICAgY2hhbmdlcy5maWx0ZXJPcHRpb25zLmN1cnJlbnRWYWx1ZS5pbnB1dFZhbHVlICE9PSBjaGFuZ2VzLmZpbHRlck9wdGlvbnMucHJldmlvdXNWYWx1ZS5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWx0ZXJPcHRpb25zLml0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0geyBjYW5jZWw6IGZhbHNlLCBpdGVtczogdGhpcy5maWx0ZXJPcHRpb25zLml0ZW1zIH07XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nLmVtaXQoYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwaXBlID0gbmV3IElneEZpbHRlclBpcGUoKTtcblxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHBpcGUudHJhbnNmb3JtKHRoaXMuZmlsdGVyT3B0aW9ucy5pdGVtcywgdGhpcy5maWx0ZXJPcHRpb25zKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZC5lbWl0KHsgZmlsdGVyZWRJdGVtczogZmlsdGVyZWQgfSk7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2lneEZpbHRlcicsXG4gICAgcHVyZTogZmFsc2Vcbn0pXG5cbmV4cG9ydCBjbGFzcyBJZ3hGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgcHVibGljIHRyYW5zZm9ybShpdGVtczogYW55W10sXG4gICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zIC0gaW5pdGlhbCBzZXR0aW5ncyBvZiBmaWx0ZXIgZnVuY3Rpb25hbGl0eVxuICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogSWd4RmlsdGVyT3B0aW9ucykge1xuXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGggfHwgIW9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLml0ZW1zKSB7XG4gICAgICAgICAgICBpdGVtcyA9IG9wdGlvbnMuaXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSBpdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBvcHRpb25zLm1hdGNoRm4ob3B0aW9ucy5mb3JtYXR0ZXIob3B0aW9ucy5nZXRfdmFsdWUoaXRlbSwgb3B0aW9ucy5rZXkpKSwgb3B0aW9ucy5pbnB1dFZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubWV0Q29uZGl0aW9uRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXRDb25kaXRpb25GbihpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm92ZXJkdWVDb25kaXRpb25Gbikge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm92ZXJkdWVDb25kaXRpb25GbihpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneEZpbHRlckRpcmVjdGl2ZSwgSWd4RmlsdGVyUGlwZV0sXG4gICAgZXhwb3J0czogW0lneEZpbHRlckRpcmVjdGl2ZSwgSWd4RmlsdGVyUGlwZV0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyTW9kdWxlIHtcbn1cbiJdfQ==