@grapecity/inputman.angular
Version:
このパッケージには、Angular用の[InputManJS](https://developer.mescius.jp/inputmanjs)コンポーネントが含まれます。
241 lines • 28.5 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, Input, ElementRef, Output, ContentChildren, QueryList, EventEmitter } from '@angular/core';
import { GC } from '../inputman';
import { Property } from '../common';
import { GcComponents } from './GcComponents';
import * as i0 from "@angular/core";
export class GcListBoxColumnComponent {
}
GcListBoxColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcListBoxColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
GcListBoxColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GcListBoxColumnComponent, selector: "gc-list-box-column", inputs: { name: "name", label: "label", width: "width", isValuePath: "isValuePath", visible: "visible", clickSort: "clickSort", contentAlignment: "contentAlignment", headerAlignment: "headerAlignment", showTip: "showTip" }, ngImport: i0, template: ``, isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcListBoxColumnComponent, decorators: [{
type: Component,
args: [{
selector: 'gc-list-box-column',
template: ``,
}]
}], propDecorators: { name: [{
type: Input
}], label: [{
type: Input
}], width: [{
type: Input
}], isValuePath: [{
type: Input
}], visible: [{
type: Input
}], clickSort: [{
type: Input
}], contentAlignment: [{
type: Input
}], headerAlignment: [{
type: Input
}], showTip: [{
type: Input
}] } });
export class GcListBoxComponent extends GcComponents {
constructor(ref) {
super(ref);
this.checkedChanged = new EventEmitter();
this.selectedChanged = new EventEmitter();
this.focusedChanged = new EventEmitter();
this.itemClick = new EventEmitter();
this.loadComplete = new EventEmitter();
this.itemsChanged = new EventEmitter();
this.selectedIndexChange = new EventEmitter();
this.checkedIndexChange = new EventEmitter();
this.selectedIndicesChange = new EventEmitter();
this.checkedIndicesChange = new EventEmitter();
this.dropping = new EventEmitter();
this.dropped = new EventEmitter();
}
initGcComponent() {
if (this.columnComponents && this.columnComponents.length > 0) {
this.columns = [];
this.columnComponents.forEach((column) => {
this.columns.push({
name: column.name,
label: column.label,
width: column.width,
isValuePath: column.isValuePath,
visible: column.visible,
clickSort: column.clickSort,
contentAlignment: column.contentAlignment,
headerAlignment: column.headerAlignment,
showTip: column.showTip
});
});
}
var element = document.createElement('select');
this.createTemplate(element);
this._imCtrl = new GC.InputMan.GcListBox(element, this);
}
bindEvent() {
if (!this._imCtrl) {
return;
}
this._imCtrl.addEventListener(GC.InputMan.GcListBoxEvent.CheckedChanged, (eventArgs) => {
this.checkedChanged.emit(eventArgs);
this.checkedIndexChange.emit(this._imCtrl.getCheckedIndices()[0]);
this.checkedIndicesChange.emit(this._imCtrl.getCheckedIndices());
});
this._imCtrl.addEventListener(GC.InputMan.GcListBoxEvent.SelectedChanged, (eventArgs) => {
this.selectedChanged.emit(eventArgs);
this.selectedIndexChange.emit(this._imCtrl.getSelectedIndex());
this.selectedIndicesChange.emit(this._imCtrl.getSelectedIndices());
});
this._imCtrl.addEventListener(GC.InputMan.GcListBoxEvent.FocusedChanged, (eventArgs) => {
this.focusedChanged.emit(eventArgs);
});
this._imCtrl.addEventListener(GC.InputMan.GcListBoxEvent.ItemClick, (sender, eventArgs) => {
this.itemClick.emit({ sender: sender, eArgs: eventArgs });
});
this._imCtrl.addEventListener(GC.InputMan.GcListBoxEvent.LoadComplete, (eventArgs) => {
this.loadComplete.emit(eventArgs);
});
this._imCtrl.addEventListener(GC.InputMan.GcListBoxEvent.ItemsChanged, (eventArgs) => {
this.itemsChanged.emit(eventArgs);
});
this._imCtrl.addEventListener(GC.InputMan.GcListBoxEvent.Dropping, (sender, eventArgs) => {
this.dropping.emit(eventArgs);
});
this._imCtrl.addEventListener(GC.InputMan.GcListBoxEvent.Dropped, (sender, eventArgs) => {
this.dropped.emit(eventArgs);
});
}
}
GcListBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcListBoxComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
GcListBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GcListBoxComponent, selector: "gc-list-box", inputs: { items: "items", columns: "columns", virtualMode: "virtualMode", allowResize: "allowResize", selectionMode: "selectionMode", selectedIndex: "selectedIndex", checkedIndex: "checkedIndex", selectedIndices: "selectedIndices", checkedIndices: "checkedIndices", allowColumnResize: "allowColumnResize", overflow: "overflow", width: "width", height: "height", itemHeight: "itemHeight", checkOnClick: "checkOnClick", visibleItems: "visibleItems", visible: "visible", enabled: "enabled", showTip: "showTip", multiColumn: "multiColumn", colHeaderHeight: "colHeaderHeight", showHeader: "showHeader", valueMemberPath: "valueMemberPath", displayMemberPath: "displayMemberPath", showCheckBox: "showCheckBox", itemTemplate: "itemTemplate", headerTemplate: "headerTemplate", footerTemplate: "footerTemplate", load: "load", pageSize: "pageSize", dragDrop: "dragDrop", dragSource: "dragSource", generatingItem: "generatingItem", selectTemplate: "selectTemplate", formatItem: "formatItem" }, outputs: { checkedChanged: "checkedChanged", selectedChanged: "selectedChanged", focusedChanged: "focusedChanged", itemClick: "itemClick", loadComplete: "loadComplete", itemsChanged: "itemsChanged", selectedIndexChange: "selectedIndexChange", checkedIndexChange: "checkedIndexChange", selectedIndicesChange: "selectedIndicesChange", checkedIndicesChange: "checkedIndicesChange", dropping: "dropping", dropped: "dropped" }, queries: [{ propertyName: "columnComponents", predicate: GcListBoxColumnComponent }], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
__decorate([
Property("", "", false, false),
__metadata("design:type", Number)
], GcListBoxComponent.prototype, "selectedIndex", void 0);
__decorate([
Property("", "", false, false),
__metadata("design:type", Number)
], GcListBoxComponent.prototype, "checkedIndex", void 0);
__decorate([
Property("", "", false, false),
__metadata("design:type", Array)
], GcListBoxComponent.prototype, "selectedIndices", void 0);
__decorate([
Property("", "", false, false),
__metadata("design:type", Array)
], GcListBoxComponent.prototype, "checkedIndices", void 0);
__decorate([
Property("resizeWidth"),
__metadata("design:type", Object)
], GcListBoxComponent.prototype, "width", void 0);
__decorate([
Property("resizeHeight"),
__metadata("design:type", Number)
], GcListBoxComponent.prototype, "height", void 0);
__decorate([
Property('setVisibleItemCount'),
__metadata("design:type", Number)
], GcListBoxComponent.prototype, "visibleItems", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcListBoxComponent, decorators: [{
type: Component,
args: [{
selector: 'gc-list-box',
template: ``,
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { items: [{
type: Input
}], columns: [{
type: Input
}], virtualMode: [{
type: Input
}], allowResize: [{
type: Input
}], selectionMode: [{
type: Input
}], selectedIndex: [{
type: Input
}], checkedIndex: [{
type: Input
}], selectedIndices: [{
type: Input
}], checkedIndices: [{
type: Input
}], allowColumnResize: [{
type: Input
}], overflow: [{
type: Input
}], width: [{
type: Input
}], height: [{
type: Input
}], itemHeight: [{
type: Input
}], checkOnClick: [{
type: Input
}], visibleItems: [{
type: Input
}], visible: [{
type: Input
}], enabled: [{
type: Input
}], showTip: [{
type: Input
}], multiColumn: [{
type: Input
}], colHeaderHeight: [{
type: Input
}], showHeader: [{
type: Input
}], valueMemberPath: [{
type: Input
}], displayMemberPath: [{
type: Input
}], showCheckBox: [{
type: Input
}], itemTemplate: [{
type: Input
}], headerTemplate: [{
type: Input
}], footerTemplate: [{
type: Input
}], load: [{
type: Input
}], pageSize: [{
type: Input
}], dragDrop: [{
type: Input
}], dragSource: [{
type: Input
}], generatingItem: [{
type: Input
}], selectTemplate: [{
type: Input
}], formatItem: [{
type: Input
}], checkedChanged: [{
type: Output
}], selectedChanged: [{
type: Output
}], focusedChanged: [{
type: Output
}], itemClick: [{
type: Output
}], loadComplete: [{
type: Output
}], itemsChanged: [{
type: Output
}], selectedIndexChange: [{
type: Output
}], checkedIndexChange: [{
type: Output
}], selectedIndicesChange: [{
type: Output
}], checkedIndicesChange: [{
type: Output
}], dropping: [{
type: Output
}], dropped: [{
type: Output
}], columnComponents: [{
type: ContentChildren,
args: [GcListBoxColumnComponent]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2NMaXN0Qm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy9HY0xpc3RCb3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFNOUMsTUFBTSxPQUFPLHdCQUF3Qjs7c0hBQXhCLHdCQUF3QjswR0FBeEIsd0JBQXdCLDBSQUZ2QixFQUFFOzRGQUVILHdCQUF3QjtrQkFKcEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsRUFBRTtpQkFDZjs4QkFLVSxJQUFJO3NCQURWLEtBQUs7Z0JBR0MsS0FBSztzQkFEWCxLQUFLO2dCQUdDLEtBQUs7c0JBRFgsS0FBSztnQkFHQyxXQUFXO3NCQURqQixLQUFLO2dCQUdDLE9BQU87c0JBRGIsS0FBSztnQkFHQyxTQUFTO3NCQURmLEtBQUs7Z0JBR0MsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQUdDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBR0MsT0FBTztzQkFEYixLQUFLOztBQVFWLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxZQUFtQztJQUV2RSxZQUFZLEdBQWU7UUFDdkIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBaUZSLG1CQUFjLEdBQXdDLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekUsb0JBQWUsR0FBd0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxRSxtQkFBYyxHQUF3QyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXpFLGNB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QUFNO2dCQUdBLE9BQU87c0JBRGIsTUFBTTtnQkFJQSxnQkFBZ0I7c0JBRHRCLGVBQWU7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRWxlbWVudFJlZiwgT3V0cHV0LCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHQyB9IGZyb20gJy4uL2lucHV0bWFuJztcbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IEdjQ29tcG9uZW50cyB9IGZyb20gJy4vR2NDb21wb25lbnRzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdnYy1saXN0LWJveC1jb2x1bW4nLFxuICAgIHRlbXBsYXRlOiBgYCxcbn0pXG5leHBvcnQgY2xhc3MgR2NMaXN0Qm94Q29sdW1uQ29tcG9uZW50IHtcblxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgd2lkdGg6IG51bWJlciB8IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpc1ZhbHVlUGF0aDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2aXNpYmxlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNsaWNrU29ydDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb250ZW50QWxpZ25tZW50OiBHQy5JbnB1dE1hbi5BbGlnbm1lbnQ7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVhZGVyQWxpZ25tZW50OiBHQy5JbnB1dE1hbi5BbGlnbm1lbnQ7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd1RpcDogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdnYy1saXN0LWJveCcsXG4gICAgdGVtcGxhdGU6IGBgLFxufSlcbmV4cG9ydCBjbGFzcyBHY0xpc3RCb3hDb21wb25lbnQgZXh0ZW5kcyBHY0NvbXBvbmVudHM8R0MuSW5wdXRNYW4uR2NMaXN0Qm94PiB7XG5cbiAgICBjb25zdHJ1Y3RvcihyZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgc3VwZXIocmVmKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpdGVtczogQXJyYXk8b2JqZWN0PiB8IEFycmF5PHN0cmluZz47XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sdW1uczogQXJyYXk8R0MuSW5wdXRNYW4uQ29sdW1uQ29uZmlnPjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2aXJ0dWFsTW9kZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd1Jlc2l6ZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCBHQy5JbnB1dE1hbi5MaXN0Qm94U2VsZWN0aW9uTW9kZTtcbiAgICBASW5wdXQoKVxuICAgIEBQcm9wZXJ0eShcIlwiLCBcIlwiLCBmYWxzZSwgZmFsc2UpXG4gICAgcHVibGljIHNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIEBQcm9wZXJ0eShcIlwiLCBcIlwiLCBmYWxzZSwgZmFsc2UpXG4gICAgcHVibGljIGNoZWNrZWRJbmRleDogbnVtYmVyO1xuICAgIEBJbnB1dCgpXG4gICAgQFByb3BlcnR5KFwiXCIsIFwiXCIsIGZhbHNlLCBmYWxzZSlcbiAgICBwdWJsaWMgc2VsZWN0ZWRJbmRpY2VzOiBudW1iZXJbXTtcbiAgICBASW5wdXQoKVxuICAgIEBQcm9wZXJ0eShcIlwiLCBcIlwiLCBmYWxzZSwgZmFsc2UpXG4gICAgcHVibGljIGNoZWNrZWRJbmRpY2VzOiBudW1iZXJbXTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd0NvbHVtblJlc2l6ZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVyZmxvdzogc3RyaW5nIHwgR0MuSW5wdXRNYW4uU2Nyb2xsQmFycztcbiAgICBAUHJvcGVydHkoXCJyZXNpemVXaWR0aFwiKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgQFByb3BlcnR5KFwicmVzaXplSGVpZ2h0XCIpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVpZ2h0OiBudW1iZXI7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXRlbUhlaWdodDogbnVtYmVyO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNoZWNrT25DbGljazogYm9vbGVhbjtcbiAgICBAUHJvcGVydHkoJ3NldFZpc2libGVJdGVtQ291bnQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZpc2libGVJdGVtczogbnVtYmVyO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZpc2libGU6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93VGlwOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG11bHRpQ29sdW1uOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbEhlYWRlckhlaWdodDogbnVtYmVyO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dIZWFkZXI6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmFsdWVNZW1iZXJQYXRoOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheU1lbWJlclBhdGg6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93Q2hlY2tCb3g6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXRlbVRlbXBsYXRlOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZTogc3RyaW5nXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9vdGVyVGVtcGxhdGU6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkOiAoY29udGV4dDogR0MuSW5wdXRNYW4uSUxvYWRDb250ZXh0KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZHJhZ0Ryb3A6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZHJhZ1NvdXJjZTogR0MuSW5wdXRNYW4uTGlzdEJveERyYWdTb3VyY2U7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2VuZXJhdGluZ0l0ZW06IChhcmdzOiBHQy5JbnB1dE1hbi5JSXRlbUdlbmVyYXRpbmdBcmdzKSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdFRlbXBsYXRlOiAoYXJnczogR0MuSW5wdXRNYW4uSVRlbXBsYXRlU2VsZWN0QXJncykgPT4gc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1hdEl0ZW06IChhcmdzOiBHQy5JbnB1dE1hbi5JSXRlbUFyZ3MpID0+IHZvaWQ7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNoZWNrZWRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8R0MuSW5wdXRNYW4uR2NMaXN0Qm94PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8R0MuSW5wdXRNYW4uR2NMaXN0Qm94PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZm9jdXNlZENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxHQy5JbnB1dE1hbi5HY0xpc3RCb3g+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBpdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjx7c2VuZGVyOiBHQy5JbnB1dE1hbi5HY0xpc3RCb3gsIGVBcmdzOiBhbnl9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbG9hZENvbXBsZXRlOiBFdmVudEVtaXR0ZXI8R0MuSW5wdXRNYW4uR2NMaXN0Qm94PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaXRlbXNDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8R0MuSW5wdXRNYW4uR2NMaXN0Qm94PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJbmRleENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNoZWNrZWRJbmRleENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSW5kaWNlc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PG51bWJlcj4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjaGVja2VkSW5kaWNlc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PG51bWJlcj4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkcm9wcGluZzogRXZlbnRFbWl0dGVyPEdDLklucHV0TWFuLkRyb3BFdmVudEFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkcm9wcGVkOiBFdmVudEVtaXR0ZXI8R0MuSW5wdXRNYW4uRHJvcEV2ZW50QXJncz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKEdjTGlzdEJveENvbHVtbkNvbXBvbmVudClcbiAgICBwdWJsaWMgY29sdW1uQ29tcG9uZW50czogUXVlcnlMaXN0PEdjTGlzdEJveENvbHVtbkNvbXBvbmVudD47XG5cbiAgICBwcm90ZWN0ZWQgaW5pdEdjQ29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5Db21wb25lbnRzICYmIHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uQ29tcG9uZW50cy5mb3JFYWNoKChjb2x1bW46IEdjTGlzdEJveENvbHVtbkNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2x1bW4ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGlzVmFsdWVQYXRoOiBjb2x1bW4uaXNWYWx1ZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNvbHVtbi52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICBjbGlja1NvcnQ6IGNvbHVtbi5jbGlja1NvcnQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRBbGlnbm1lbnQ6IGNvbHVtbi5jb250ZW50QWxpZ25tZW50LFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJBbGlnbm1lbnQ6IGNvbHVtbi5oZWFkZXJBbGlnbm1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHNob3dUaXA6IGNvbHVtbi5zaG93VGlwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICAgICAgICB0aGlzLmNyZWF0ZVRlbXBsYXRlKGVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9pbUN0cmwgPSBuZXcgR0MuSW5wdXRNYW4uR2NMaXN0Qm94KGVsZW1lbnQsIHRoaXMgYXMgYW55KTtcbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCBiaW5kRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5faW1DdHJsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbUN0cmwuYWRkRXZlbnRMaXN0ZW5lcihHQy5JbnB1dE1hbi5HY0xpc3RCb3hFdmVudC5DaGVja2VkQ2hhbmdlZCwgKGV2ZW50QXJncykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja2VkQ2hhbmdlZC5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRJbmRleENoYW5nZS5lbWl0KHRoaXMuX2ltQ3RybC5nZXRDaGVja2VkSW5kaWNlcygpWzBdKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZEluZGljZXNDaGFuZ2UuZW1pdCh0aGlzLl9pbUN0cmwuZ2V0Q2hlY2tlZEluZGljZXMoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9pbUN0cmwuYWRkRXZlbnRMaXN0ZW5lcihHQy5JbnB1dE1hbi5HY0xpc3RCb3hFdmVudC5TZWxlY3RlZENoYW5nZWQsIChldmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoZXZlbnRBcmdzKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZS5lbWl0KHRoaXMuX2ltQ3RybC5nZXRTZWxlY3RlZEluZGV4KCkpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGljZXNDaGFuZ2UuZW1pdCh0aGlzLl9pbUN0cmwuZ2V0U2VsZWN0ZWRJbmRpY2VzKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5faW1DdHJsLmFkZEV2ZW50TGlzdGVuZXIoR0MuSW5wdXRNYW4uR2NMaXN0Qm94RXZlbnQuRm9jdXNlZENoYW5nZWQsIChldmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZENoYW5nZWQuZW1pdChldmVudEFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5faW1DdHJsLmFkZEV2ZW50TGlzdGVuZXIoR0MuSW5wdXRNYW4uR2NMaXN0Qm94RXZlbnQuSXRlbUNsaWNrLCAoc2VuZGVyLCBldmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQoeyBzZW5kZXI6IHNlbmRlciwgZUFyZ3M6IGV2ZW50QXJncyB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2ltQ3RybC5hZGRFdmVudExpc3RlbmVyKEdDLklucHV0TWFuLkdjTGlzdEJveEV2ZW50LkxvYWRDb21wbGV0ZSwgKGV2ZW50QXJncykgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkQ29tcGxldGUuZW1pdChldmVudEFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5faW1DdHJsLmFkZEV2ZW50TGlzdGVuZXIoR0MuSW5wdXRNYW4uR2NMaXN0Qm94RXZlbnQuSXRlbXNDaGFuZ2VkLCAoZXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zQ2hhbmdlZC5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9pbUN0cmwuYWRkRXZlbnRMaXN0ZW5lcihHQy5JbnB1dE1hbi5HY0xpc3RCb3hFdmVudC5Ecm9wcGluZywgKHNlbmRlciwgZXZlbnRBcmdzOiBHQy5JbnB1dE1hbi5Ecm9wRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRyb3BwaW5nLmVtaXQoZXZlbnRBcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2ltQ3RybC5hZGRFdmVudExpc3RlbmVyKEdDLklucHV0TWFuLkdjTGlzdEJveEV2ZW50LkRyb3BwZWQsIChzZW5kZXIsIGV2ZW50QXJnczogR0MuSW5wdXRNYW4uRHJvcEV2ZW50QXJncykgPT4ge1xuICAgICAgICAgICAgdGhpcy5kcm9wcGVkLmVtaXQoZXZlbnRBcmdzKTtcbiAgICAgICAgfSlcblxuICAgIH1cblxufSJdfQ==