UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

177 lines (175 loc) 19.2 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { isPlatformBrowser } from '@angular/common'; import { booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, inject, Input, numberAttribute, Output, PLATFORM_ID, ViewChild } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { NzButtonModule } from 'ng-zorro-antd/button'; import { NzIconModule } from 'ng-zorro-antd/icon'; import { NzSpinModule } from 'ng-zorro-antd/spin'; import { drawCanvas, plotQRCodeData } from './qrcode'; import * as i0 from "@angular/core"; import * as i1 from "ng-zorro-antd/i18n"; import * as i2 from "ng-zorro-antd/spin"; import * as i3 from "ng-zorro-antd/button"; import * as i4 from "ng-zorro-antd/core/transition-patch"; import * as i5 from "ng-zorro-antd/icon"; export class NzQRCodeComponent { constructor(i18n, el, cdr) { this.i18n = i18n; this.el = el; this.cdr = cdr; this.nzValue = ''; this.nzPadding = 0; this.nzColor = '#000000'; this.nzBgColor = '#FFFFFF'; this.nzSize = 160; this.nzIcon = ''; this.nzIconSize = 40; this.nzBordered = true; this.nzStatus = 'active'; this.nzLevel = 'M'; this.nzRefresh = new EventEmitter(); // https://github.com/angular/universal-starter/issues/538#issuecomment-365518693 // canvas is not supported by the SSR DOM this.isBrowser = true; this.destroy$ = new Subject(); this.platformId = inject(PLATFORM_ID); this.isBrowser = isPlatformBrowser(this.platformId); this.cdr.markForCheck(); } ngOnInit() { this.el.nativeElement.style.backgroundColor = this.nzBgColor; this.i18n.localeChange.pipe(takeUntil(this.destroy$)).subscribe(() => { this.locale = this.i18n.getLocaleData('QRCode'); this.cdr.markForCheck(); }); } ngOnChanges(changes) { const { nzValue, nzIcon, nzLevel, nzSize, nzIconSize, nzColor, nzPadding, nzBgColor } = changes; if ((nzValue || nzIcon || nzLevel || nzSize || nzIconSize || nzColor || nzPadding || nzBgColor) && this.canvas) { this.drawCanvasQRCode(); } if (nzBgColor) { this.el.nativeElement.style.backgroundColor = this.nzBgColor; } } ngAfterViewInit() { this.drawCanvasQRCode(); } reloadQRCode() { this.drawCanvasQRCode(); this.nzRefresh.emit('refresh'); } drawCanvasQRCode() { if (this.canvas) { drawCanvas(this.canvas.nativeElement, plotQRCodeData(this.nzValue, this.nzLevel), this.nzSize, 10, this.nzPadding, this.nzColor, this.nzBgColor, this.nzIconSize, this.nzIcon); } } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NzQRCodeComponent, deps: [{ token: i1.NzI18nService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: NzQRCodeComponent, isStandalone: true, selector: "nz-qrcode", inputs: { nzValue: "nzValue", nzPadding: "nzPadding", nzColor: "nzColor", nzBgColor: "nzBgColor", nzSize: ["nzSize", "nzSize", numberAttribute], nzIcon: "nzIcon", nzIconSize: ["nzIconSize", "nzIconSize", numberAttribute], nzBordered: ["nzBordered", "nzBordered", booleanAttribute], nzStatus: "nzStatus", nzLevel: "nzLevel" }, outputs: { nzRefresh: "nzRefresh" }, host: { properties: { "class.ant-qrcode-border": "nzBordered" }, classAttribute: "ant-qrcode" }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }], exportAs: ["nzQRCode"], usesOnChanges: true, ngImport: i0, template: ` @if (nzStatus !== 'active') { <div class="ant-qrcode-mask"> @switch (nzStatus) { @case ('loading') { <nz-spin /> } @case ('expired') { <div> <p class="ant-qrcode-expired">{{ locale.expired }}</p> <button nz-button nzType="link" (click)="reloadQRCode()"> <span nz-icon nzType="reload" nzTheme="outline"></span> <span>{{ locale.refresh }}</span> </button> </div> } @case ('scanned') { <div> <p class="ant-qrcode-expired">{{ locale.scanned }}</p> </div> } } </div> } @if (isBrowser) { <canvas #canvas></canvas> } `, isInline: true, dependencies: [{ kind: "ngmodule", type: NzSpinModule }, { kind: "component", type: i2.NzSpinComponent, selector: "nz-spin", inputs: ["nzIndicator", "nzSize", "nzTip", "nzDelay", "nzSimple", "nzSpinning"], exportAs: ["nzSpin"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NzQRCodeComponent, decorators: [{ type: Component, args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'nz-qrcode', exportAs: 'nzQRCode', template: ` @if (nzStatus !== 'active') { <div class="ant-qrcode-mask"> @switch (nzStatus) { @case ('loading') { <nz-spin /> } @case ('expired') { <div> <p class="ant-qrcode-expired">{{ locale.expired }}</p> <button nz-button nzType="link" (click)="reloadQRCode()"> <span nz-icon nzType="reload" nzTheme="outline"></span> <span>{{ locale.refresh }}</span> </button> </div> } @case ('scanned') { <div> <p class="ant-qrcode-expired">{{ locale.scanned }}</p> </div> } } </div> } @if (isBrowser) { <canvas #canvas></canvas> } `, host: { class: 'ant-qrcode', '[class.ant-qrcode-border]': `nzBordered` }, imports: [NzSpinModule, NzButtonModule, NzIconModule], standalone: true }] }], ctorParameters: () => [{ type: i1.NzI18nService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { canvas: [{ type: ViewChild, args: ['canvas', { static: false }] }], nzValue: [{ type: Input }], nzPadding: [{ type: Input }], nzColor: [{ type: Input }], nzBgColor: [{ type: Input }], nzSize: [{ type: Input, args: [{ transform: numberAttribute }] }], nzIcon: [{ type: Input }], nzIconSize: [{ type: Input, args: [{ transform: numberAttribute }] }], nzBordered: [{ type: Input, args: [{ transform: booleanAttribute }] }], nzStatus: [{ type: Input }], nzLevel: [{ type: Input }], nzRefresh: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJjb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvcXItY29kZS9xcmNvZGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBSWYsTUFBTSxFQUNOLFdBQVcsRUFFWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxFQUFFLFVBQVUsRUFBbUIsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7O0FBMEN2RSxNQUFNLE9BQU8saUJBQWlCO0lBc0I1QixZQUNVLElBQW1CLEVBQ25CLEVBQWMsRUFDZCxHQUFzQjtRQUZ0QixTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXZCdkIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixjQUFTLEdBQXNCLENBQUMsQ0FBQztRQUNqQyxZQUFPLEdBQVcsU0FBUyxDQUFDO1FBQzVCLGNBQVMsR0FBVyxTQUFTLENBQUM7UUFDQSxXQUFNLEdBQVcsR0FBRyxDQUFDO1FBQ25ELFdBQU0sR0FBVyxFQUFF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Ozs7Ozs7Ozs7R0E0QlQsMkRBS1MsWUFBWSwyTUFBRSxjQUFjLG9mQUFFLFlBQVk7OzJGQUd6QyxpQkFBaUI7a0JBeEM3QixTQUFTO21CQUFDO29CQUNULGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCVDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLFlBQVk7d0JBQ25CLDJCQUEyQixFQUFFLFlBQVk7cUJBQzFDO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsWUFBWSxDQUFDO29CQUNyRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7MklBRXlDLE1BQU07c0JBQTdDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDN0IsT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ2lDLE1BQU07c0JBQTVDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUM1QixNQUFNO3NCQUFkLEtBQUs7Z0JBQ2lDLFVBQVU7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUNHLFVBQVU7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzdCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVhLFNBQVM7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUExBVEZPUk1fSUQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnpCdXR0b25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2J1dHRvbic7XG5pbXBvcnQgeyBOekkxOG5TZXJ2aWNlLCBOelFSQ29kZUkxOG5JbnRlcmZhY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2kxOG4nO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IE56U3Bpbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvc3Bpbic7XG5cbmltcG9ydCB7IGRyYXdDYW52YXMsIEVSUk9SX0xFVkVMX01BUCwgcGxvdFFSQ29kZURhdGEgfSBmcm9tICcuL3FyY29kZSc7XG5cbkBDb21wb25lbnQoe1xuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc2VsZWN0b3I6ICduei1xcmNvZGUnLFxuICBleHBvcnRBczogJ256UVJDb2RlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKG56U3RhdHVzICE9PSAnYWN0aXZlJykge1xuICAgICAgPGRpdiBjbGFzcz1cImFudC1xcmNvZGUtbWFza1wiPlxuICAgICAgICBAc3dpdGNoIChuelN0YXR1cykge1xuICAgICAgICAgIEBjYXNlICgnbG9hZGluZycpIHtcbiAgICAgICAgICAgIDxuei1zcGluIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlICgnZXhwaXJlZCcpIHtcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYW50LXFyY29kZS1leHBpcmVkXCI+e3sgbG9jYWxlLmV4cGlyZWQgfX08L3A+XG4gICAgICAgICAgICAgIDxidXR0b24gbnotYnV0dG9uIG56VHlwZT1cImxpbmtcIiAoY2xpY2spPVwicmVsb2FkUVJDb2RlKClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cInJlbG9hZFwiIG56VGhlbWU9XCJvdXRsaW5lXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGxvY2FsZS5yZWZyZXNoIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ3NjYW5uZWQnKSB7XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImFudC1xcmNvZGUtZXhwaXJlZFwiPnt7IGxvY2FsZS5zY2FubmVkIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGlzQnJvd3Nlcikge1xuICAgICAgPGNhbnZhcyAjY2FudmFzPjwvY2FudmFzPlxuICAgIH1cbiAgYCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYW50LXFyY29kZScsXG4gICAgJ1tjbGFzcy5hbnQtcXJjb2RlLWJvcmRlcl0nOiBgbnpCb3JkZXJlZGBcbiAgfSxcbiAgaW1wb3J0czogW056U3Bpbk1vZHVsZSwgTnpCdXR0b25Nb2R1bGUsIE56SWNvbk1vZHVsZV0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTnpRUkNvZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnY2FudmFzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuICBASW5wdXQoKSBuelZhbHVlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbnpQYWRkaW5nOiBudW1iZXIgfCBudW1iZXJbXSA9IDA7XG4gIEBJbnB1dCgpIG56Q29sb3I6IHN0cmluZyA9ICcjMDAwMDAwJztcbiAgQElucHV0KCkgbnpCZ0NvbG9yOiBzdHJpbmcgPSAnI0ZGRkZGRic7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIG56U2l6ZTogbnVtYmVyID0gMTYwO1xuICBASW5wdXQoKSBuekljb246IHN0cmluZyA9ICcnO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBuekljb25TaXplOiBudW1iZXIgPSA0MDtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG56Qm9yZGVyZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBuelN0YXR1czogJ2FjdGl2ZScgfCAnZXhwaXJlZCcgfCAnbG9hZGluZycgfCAnc2Nhbm5lZCcgPSAnYWN0aXZlJztcbiAgQElucHV0KCkgbnpMZXZlbDoga2V5b2YgdHlwZW9mIEVSUk9SX0xFVkVMX01BUCA9ICdNJztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgbnpSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgbG9jYWxlITogTnpRUkNvZGVJMThuSW50ZXJmYWNlO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci91bml2ZXJzYWwtc3RhcnRlci9pc3N1ZXMvNTM4I2lzc3VlY29tbWVudC0zNjU1MTg2OTNcbiAgLy8gY2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFNTUiBET01cbiAgaXNCcm93c2VyID0gdHJ1ZTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpMThuOiBOekkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuaXNCcm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLm56QmdDb2xvcjtcbiAgICB0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2NhbGUgPSB0aGlzLmkxOG4uZ2V0TG9jYWxlRGF0YSgnUVJDb2RlJyk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IG56VmFsdWUsIG56SWNvbiwgbnpMZXZlbCwgbnpTaXplLCBuekljb25TaXplLCBuekNvbG9yLCBuelBhZGRpbmcsIG56QmdDb2xvciB9ID0gY2hhbmdlcztcbiAgICBpZiAoKG56VmFsdWUgfHwgbnpJY29uIHx8IG56TGV2ZWwgfHwgbnpTaXplIHx8IG56SWNvblNpemUgfHwgbnpDb2xvciB8fCBuelBhZGRpbmcgfHwgbnpCZ0NvbG9yKSAmJiB0aGlzLmNhbnZhcykge1xuICAgICAgdGhpcy5kcmF3Q2FudmFzUVJDb2RlKCk7XG4gICAgfVxuXG4gICAgaWYgKG56QmdDb2xvcikge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMubnpCZ0NvbG9yO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXdDYW52YXNRUkNvZGUoKTtcbiAgfVxuXG4gIHJlbG9hZFFSQ29kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXdDYW52YXNRUkNvZGUoKTtcbiAgICB0aGlzLm56UmVmcmVzaC5lbWl0KCdyZWZyZXNoJyk7XG4gIH1cblxuICBkcmF3Q2FudmFzUVJDb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbnZhcykge1xuICAgICAgZHJhd0NhbnZhcyhcbiAgICAgICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudCxcbiAgICAgICAgcGxvdFFSQ29kZURhdGEodGhpcy5uelZhbHVlLCB0aGlzLm56TGV2ZWwpLFxuICAgICAgICB0aGlzLm56U2l6ZSxcbiAgICAgICAgMTAsXG4gICAgICAgIHRoaXMubnpQYWRkaW5nLFxuICAgICAgICB0aGlzLm56Q29sb3IsXG4gICAgICAgIHRoaXMubnpCZ0NvbG9yLFxuICAgICAgICB0aGlzLm56SWNvblNpemUsXG4gICAgICAgIHRoaXMubnpJY29uXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19