@niur/ng-gpt
Version:
A Angular implementation of the google GPT API.
165 lines • 18.5 kB
JavaScript
import { filter, switchMap, takeUntil } from 'rxjs/operators';
import { NavigationEnd } from '@angular/router';
import { isPlatformBrowser } from '@angular/common';
import { Subject, timer } from 'rxjs';
import { Directive, EventEmitter, Inject, Input, Optional, Output, PLATFORM_ID, } from '@angular/core';
import { DELAY_TIME } from './constants';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "./ng-gpt.service";
import * as i3 from "./utils";
export class NgGptDirective {
constructor(router, platformId, elementRef, gptService, idGenerator) {
this.router = router;
this.platformId = platformId;
this.elementRef = elementRef;
this.gptService = gptService;
this.idGenerator = idGenerator;
this.$update = new Subject();
this.$destroy = new Subject();
this.adUnitPath = '';
this.id = '';
// Events
this.impressionViewable = new EventEmitter();
this.rewardedSlotClosed = new EventEmitter();
this.rewardedSlotGranted = new EventEmitter();
this.rewardedSlotReady = new EventEmitter();
this.slotOnload = new EventEmitter();
this.slotRenderEnded = new EventEmitter();
this.slotRequested = new EventEmitter();
this.slotResponseReceived = new EventEmitter();
this.slotVisibilityChanged = new EventEmitter();
if (isPlatformBrowser(platformId)) {
this.init();
}
}
ngAfterViewInit() {
if (this.elementRef.nativeElement && this.elementRef.nativeElement.id) {
this.destroy();
this.create();
}
}
ngOnInit() {
if (isPlatformBrowser(this.platformId) && !this.id) {
this.idGenerator.generate(this.elementRef.nativeElement);
}
}
ngDoCheck() {
if (this.elementRef.nativeElement &&
this.elementRef.nativeElement.id &&
this.id !== this.elementRef.nativeElement.id) {
this.id = this.elementRef.nativeElement.id;
this.destroy();
this.create();
}
}
ngOnDestroy() {
if (this.slot) {
googletag.destroySlots([this.slot]);
}
if (this.onSameNavigation) {
this.onSameNavigation.unsubscribe();
}
}
display() {
if (this.slot) {
this.gptService.define(this, this.slot);
this.gptService.refresh(this.slot);
}
else {
this.destroy();
this.slot = this.gptService.define(Object.assign({}, this, {
id: this.id || this.elementRef.nativeElement?.id,
}));
this.gptService.display(this.slot);
}
}
checkRequiredFields(input, name) {
if (!input) {
throw new Error(`Attribute ${name} is required`);
}
}
destroy() {
if (this.slot) {
this.gptService.destroy(this.slot);
this.slot = undefined;
}
}
init() {
this.$update
.pipe(switchMap(() => timer(DELAY_TIME)), takeUntil(this.$destroy))
.subscribe(() => {
this.checkRequiredFields(this.adUnitPath, 'adUnitPath');
this.gptService.defineTask(() => this.display());
});
if (this.router) {
this.onSameNavigation = this.router.events
.pipe(filter((event) => event instanceof NavigationEnd), takeUntil(this.$destroy))
.subscribe(() => {
this.$update.next();
});
}
}
create() {
if (this.adUnitPath) {
this.$update.next();
}
else {
this.destroy();
}
}
}
NgGptDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgGptDirective, deps: [{ token: i1.Router, optional: true }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: i2.NgGptService }, { token: i3.IdGeneratorUtil }], target: i0.ɵɵFactoryTarget.Directive });
NgGptDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: NgGptDirective, selector: "gpt-ad", inputs: { adUnitPath: "adUnitPath", id: "id", size: "size", sizeMapping: "sizeMapping", categoryExclusion: "categoryExclusion", collapseEmptyDiv: "collapseEmptyDiv", forceSafeFrame: "forceSafeFrame", safeFrameConfig: "safeFrameConfig", targeting: "targeting", clickUrl: "clickUrl", refresh: "refresh" }, outputs: { impressionViewable: "impressionViewable", rewardedSlotClosed: "rewardedSlotClosed", rewardedSlotGranted: "rewardedSlotGranted", rewardedSlotReady: "rewardedSlotReady", slotOnload: "slotOnload", slotRenderEnded: "slotRenderEnded", slotRequested: "slotRequested", slotResponseReceived: "slotResponseReceived", slotVisibilityChanged: "slotVisibilityChanged" }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgGptDirective, decorators: [{
type: Directive,
args: [{
selector: 'gpt-ad',
}]
}], ctorParameters: function () { return [{ type: i1.Router, decorators: [{
type: Optional
}] }, { type: Object, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }, { type: i0.ElementRef }, { type: i2.NgGptService }, { type: i3.IdGeneratorUtil }]; }, propDecorators: { adUnitPath: [{
type: Input
}], id: [{
type: Input
}], size: [{
type: Input
}], sizeMapping: [{
type: Input
}], categoryExclusion: [{
type: Input
}], collapseEmptyDiv: [{
type: Input
}], forceSafeFrame: [{
type: Input
}], safeFrameConfig: [{
type: Input
}], targeting: [{
type: Input
}], clickUrl: [{
type: Input
}], refresh: [{
type: Input
}], impressionViewable: [{
type: Output
}], rewardedSlotClosed: [{
type: Output
}], rewardedSlotGranted: [{
type: Output
}], rewardedSlotReady: [{
type: Output
}], slotOnload: [{
type: Output
}], slotRenderEnded: [{
type: Output
}], slotRequested: [{
type: Output
}], slotResponseReceived: [{
type: Output
}], slotVisibilityChanged: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZ3B0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWdwdC9zcmMvbGliL25nLWdwdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBRUwsU0FBUyxFQUdULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7O0FBS3pDLE1BQU0sT0FBTyxjQUFjO0lBZ0N6QixZQUNzQixNQUFjLEVBQ0wsVUFBa0IsRUFDdkMsVUFBc0IsRUFDdEIsVUFBd0IsRUFDeEIsV0FBNEI7UUFKaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNMLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQWxDOUIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDOUIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFLOUIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixPQUFFLEdBQVksRUFBRSxDQUFDO1FBVzFCLFNBQVM7UUFDQyx1QkFBa0IsR0FBd0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RCx1QkFB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QUUsQ0FBQztTQUNoQjtJQUNILENBQUM7OzJHQXRJVSxjQUFjLHdEQWtDZixXQUFXOytGQWxDVixjQUFjOzJGQUFkLGNBQWM7a0JBSDFCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFFBQVE7aUJBQ25COzswQkFrQ0ksUUFBUTs4QkFDZ0MsTUFBTTswQkFBOUMsTUFBTTsyQkFBQyxXQUFXOzhIQXpCWixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUdJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmdHcHRTZXJ2aWNlIH0gZnJvbSAnLi9uZy1ncHQuc2VydmljZSc7XG5pbXBvcnQgeyBJZEdlbmVyYXRvclV0aWwgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERFTEFZX1RJTUUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2dwdC1hZCcsXG59KVxuZXhwb3J0IGNsYXNzIE5nR3B0RGlyZWN0aXZlXG4gIGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgcHJpdmF0ZSAkdXBkYXRlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSAkZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgc2xvdD86IGdvb2dsZXRhZy5TbG90O1xuXG4gIHByaXZhdGUgb25TYW1lTmF2aWdhdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIEBJbnB1dCgpIGFkVW5pdFBhdGg6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBpZD86IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzaXplPzogZ29vZ2xldGFnLkdlbmVyYWxTaXplO1xuICBASW5wdXQoKSBzaXplTWFwcGluZz86IGdvb2dsZXRhZy5TaXplTWFwcGluZ0FycmF5O1xuICBASW5wdXQoKSBjYXRlZ29yeUV4Y2x1c2lvbj86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBASW5wdXQoKSBjb2xsYXBzZUVtcHR5RGl2PzogYm9vbGVhbiB8IFtib29sZWFuLCBib29sZWFuXTtcbiAgQElucHV0KCkgZm9yY2VTYWZlRnJhbWU/OiBib29sZWFuO1xuICBASW5wdXQoKSBzYWZlRnJhbWVDb25maWc/OiBnb29nbGV0YWcuU2FmZUZyYW1lQ29uZmlnO1xuICBASW5wdXQoKSB0YXJnZXRpbmc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT47XG4gIEBJbnB1dCgpIGNsaWNrVXJsPzogc3RyaW5nO1xuICBASW5wdXQoKSByZWZyZXNoPzogbnVtYmVyO1xuXG4gIC8vIEV2ZW50c1xuICBAT3V0cHV0KCkgaW1wcmVzc2lvblZpZXdhYmxlOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmV3YXJkZWRTbG90Q2xvc2VkOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmV3YXJkZWRTbG90R3JhbnRlZDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJld2FyZGVkU2xvdFJlYWR5OiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2xvdE9ubG9hZDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNsb3RSZW5kZXJFbmRlZDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNsb3RSZXF1ZXN0ZWQ6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzbG90UmVzcG9uc2VSZWNlaXZlZDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNsb3RWaXNpYmlsaXR5Q2hhbmdlZDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGdwdFNlcnZpY2U6IE5nR3B0U2VydmljZSxcbiAgICBwcml2YXRlIGlkR2VuZXJhdG9yOiBJZEdlbmVyYXRvclV0aWxcbiAgKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pZCkge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpICYmICF0aGlzLmlkKSB7XG4gICAgICB0aGlzLmlkR2VuZXJhdG9yLmdlbmVyYXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmlkICYmXG4gICAgICB0aGlzLmlkICE9PSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pZFxuICAgICkge1xuICAgICAgdGhpcy5pZCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmlkO1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnNsb3QpIHtcbiAgICAgIGdvb2dsZXRhZy5kZXN0cm95U2xvdHMoW3RoaXMuc2xvdF0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblNhbWVOYXZpZ2F0aW9uKSB7XG4gICAgICB0aGlzLm9uU2FtZU5hdmlnYXRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBkaXNwbGF5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNsb3QpIHtcbiAgICAgIHRoaXMuZ3B0U2VydmljZS5kZWZpbmUodGhpcywgdGhpcy5zbG90KTtcbiAgICAgIHRoaXMuZ3B0U2VydmljZS5yZWZyZXNoKHRoaXMuc2xvdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgdGhpcy5zbG90ID0gdGhpcy5ncHRTZXJ2aWNlLmRlZmluZShcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgdGhpcywge1xuICAgICAgICAgIGlkOiB0aGlzLmlkIHx8IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5pZCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmdwdFNlcnZpY2UuZGlzcGxheSh0aGlzLnNsb3QpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrUmVxdWlyZWRGaWVsZHMoaW5wdXQ6IGFueSwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdHRyaWJ1dGUgJHtuYW1lfSBpcyByZXF1aXJlZGApO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc2xvdCkge1xuICAgICAgdGhpcy5ncHRTZXJ2aWNlLmRlc3Ryb3kodGhpcy5zbG90KTtcbiAgICAgIHRoaXMuc2xvdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4kdXBkYXRlXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRpbWVyKERFTEFZX1RJTUUpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuJGRlc3Ryb3kpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkRmllbGRzKHRoaXMuYWRVbml0UGF0aCwgJ2FkVW5pdFBhdGgnKTtcbiAgICAgICAgdGhpcy5ncHRTZXJ2aWNlLmRlZmluZVRhc2soKCkgPT4gdGhpcy5kaXNwbGF5KCkpO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5yb3V0ZXIpIHtcbiAgICAgIHRoaXMub25TYW1lTmF2aWdhdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuJHVwZGF0ZS5uZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZSgpIHtcbiAgICBpZiAodGhpcy5hZFVuaXRQYXRoKSB7XG4gICAgICB0aGlzLiR1cGRhdGUubmV4dCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==