ngx-amap
Version:
[][npm-badge-url] [][npm-badge-url] [][ci-url]
292 lines • 21.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: directives/amap-marker-clusterer/amap-marker-clusterer.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, Input, Output, EventEmitter, ContentChildren, QueryList, NgZone, } from '@angular/core';
import { zip, combineLatest } from 'rxjs';
import { map } from 'rxjs/operators';
import { AmapMarkerClustererService } from './amap-marker-clusterer.service';
import { LoggerService } from '../../shared/logger/logger.service';
import { EventBinderService } from '../../shared/event-binder.service';
import { getOptions, ChangeFilter } from '../../utils';
import { PixelService } from '../../shared/pixel.service';
import { SizeService } from '../../shared/size.service';
import { AmapMarkerDirective } from '../amap-marker/amap-marker.directive';
import { AMapService } from '../../shared/amap.service';
/** @type {?} */
const TAG = 'amap-marker-clusterer';
/** @type {?} */
const MarkerClusterOptions = [
'gridSize',
'minClusterSize',
'maxZoom',
'averageCenter',
'styles',
'renderClusterMarker',
'zoomOnClick',
];
export class AmapMarkerClustererDirective {
/**
* @param {?} os
* @param {?} binder
* @param {?} amaps
* @param {?} pixels
* @param {?} sizes
* @param {?} logger
* @param {?} ngZone
*/
constructor(os, binder, amaps, pixels, sizes, logger, ngZone) {
this.os = os;
this.binder = binder;
this.amaps = amaps;
this.pixels = pixels;
this.sizes = sizes;
this.logger = logger;
this.ngZone = ngZone;
// ---- Events ----
this.naReady = new EventEmitter();
// amap-marker directives:
this.markerList = new QueryList();
this.inited = false;
/** @type {?} */
const target = this.os.get();
this.naClick = this.binder.bindEvent(target, 'click');
}
/**
* @return {?}
*/
ngOnDestroy() {
this.os.destroy();
}
/**
* @return {?}
*/
ngOnInit() {
this.amaps.get().subscribe((/**
* @return {?}
*/
() => {
this.logger.d(TAG, 'initializing ...');
/** @type {?} */
const options = getOptions(this, MarkerClusterOptions);
if (options.styles) {
options.styles = options.styles.map((/**
* @param {?} style
* @return {?}
*/
style => {
if (style.size) {
style.size = (/** @type {?} */ (this.sizes.create(style.size)));
}
if (style.offset) {
style.offset = this.pixels.create(style.offset);
}
if (style.imageOffset) {
style.imageOffset = this.pixels.create(style.imageOffset);
}
return style;
}));
}
this.logger.d(TAG, 'options:', options);
this.os.create(options).subscribe();
this.inited = true;
}));
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (!this.inited) {
return;
}
/** @type {?} */
const filter = ChangeFilter.of(changes);
/** @type {?} */
const cluster = this.get();
zip(filter.notEmpty('gridSize'), cluster).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, c]) => c.setGridSize(v)));
zip(filter.notEmpty('minClusterSize'), cluster).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, c]) => c.setMinClusterSize(v)));
zip(filter.has('maxZoom'), cluster).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, c]) => c.setMaxZoom(v)));
zip(filter.has('averageCenter'), cluster).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, c]) => c.setAverageCenter(v)));
zip(filter.has('styles'), cluster).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, c]) => c.setStyles(v)));
}
/**
* @return {?}
*/
ngAfterContentInit() {
this.updateMarkers().subscribe((/**
* @param {?} c
* @return {?}
*/
c => {
this.ngZone.run((/**
* @return {?}
*/
() => this.naReady.emit(c)));
this.logger.d(TAG, 'markerClusterer is ready.');
}));
this.markerList.changes.subscribe((/**
* @return {?}
*/
() => this.updateMarkers().subscribe()));
}
/**
* @private
* @return {?}
*/
updateMarkers() {
return zip(combineLatest(this.markerList.map((/**
* @param {?} d
* @return {?}
*/
d => d.get()))), this.get()).pipe(map((/**
* @param {?} __0
* @return {?}
*/
([markers, cluster]) => {
cluster.setMarkers(markers);
return cluster;
})));
}
/**
* 获取已创建的 AMap.MarkerClusterer 对象
* @return {?}
*/
get() {
return this.os.get();
}
}
AmapMarkerClustererDirective.decorators = [
{ type: Directive, args: [{
selector: 'amap-marker-clusterer',
exportAs: 'marker-clusterer',
providers: [AmapMarkerClustererService],
},] }
];
/** @nocollapse */
AmapMarkerClustererDirective.ctorParameters = () => [
{ type: AmapMarkerClustererService },
{ type: EventBinderService },
{ type: AMapService },
{ type: PixelService },
{ type: SizeService },
{ type: LoggerService },
{ type: NgZone }
];
AmapMarkerClustererDirective.propDecorators = {
gridSize: [{ type: Input }],
minClusterSize: [{ type: Input }],
maxZoom: [{ type: Input }],
averageCenter: [{ type: Input }],
styles: [{ type: Input }],
renderClusterMarker: [{ type: Input }],
zoomOnClick: [{ type: Input }],
naReady: [{ type: Output }],
naClick: [{ type: Output }],
markerList: [{ type: ContentChildren, args: [AmapMarkerDirective,] }]
};
if (false) {
/**
* 聚合计算时网格的像素大小,默认60
* @type {?}
*/
AmapMarkerClustererDirective.prototype.gridSize;
/**
* 聚合的最小数量。默认值为2,即小于2个点则不能成为一个聚合
* @type {?}
*/
AmapMarkerClustererDirective.prototype.minClusterSize;
/**
* 最大的聚合级别,大于该级别就不进行相应的聚合。默认值为18
* @type {?}
*/
AmapMarkerClustererDirective.prototype.maxZoom;
/**
* 聚合点的图标位置是否是所有聚合内点的中心点。默认为否
* @type {?}
*/
AmapMarkerClustererDirective.prototype.averageCenter;
/**
* 指定聚合后的点标记的图标样式,可缺省,缺省时为默认样式
* @type {?}
*/
AmapMarkerClustererDirective.prototype.styles;
/**
* 该方法用来实现聚合点的自定义绘制
* @type {?}
*/
AmapMarkerClustererDirective.prototype.renderClusterMarker;
/**
* 点击聚合点时,是否散开,默认值为:true
* @type {?}
*/
AmapMarkerClustererDirective.prototype.zoomOnClick;
/** @type {?} */
AmapMarkerClustererDirective.prototype.naReady;
/** @type {?} */
AmapMarkerClustererDirective.prototype.naClick;
/** @type {?} */
AmapMarkerClustererDirective.prototype.markerList;
/**
* @type {?}
* @private
*/
AmapMarkerClustererDirective.prototype.inited;
/**
* @type {?}
* @protected
*/
AmapMarkerClustererDirective.prototype.os;
/**
* @type {?}
* @protected
*/
AmapMarkerClustererDirective.prototype.binder;
/**
* @type {?}
* @private
*/
AmapMarkerClustererDirective.prototype.amaps;
/**
* @type {?}
* @private
*/
AmapMarkerClustererDirective.prototype.pixels;
/**
* @type {?}
* @private
*/
AmapMarkerClustererDirective.prototype.sizes;
/**
* @type {?}
* @private
*/
AmapMarkerClustererDirective.prototype.logger;
/**
* @type {?}
* @private
*/
AmapMarkerClustererDirective.prototype.ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hcC1tYXJrZXItY2x1c3RlcmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hbWFwLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy9hbWFwLW1hcmtlci1jbHVzdGVyZXIvYW1hcC1tYXJrZXItY2x1c3RlcmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLE1BQU0sRUFDTixZQUFZLEVBR1osZUFBZSxFQUNmLFNBQVMsRUFFVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSwwQkFBMEIsRUFBdUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7O01BRWxELEdBQUcsR0FBRyx1QkFBdUI7O01BQzdCLG9CQUFvQixHQUFHO0lBQzNCLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsU0FBUztJQUNULGVBQWU7SUFDZixRQUFRO0lBQ1IscUJBQXFCO0lBQ3JCLGFBQWE7Q0FDZDtBQU9ELE1BQU0sT0FBTyw0QkFBNEI7Ozs7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Ozs7O0lBSTFCLHNEQUFnQzs7Ozs7SUFJaEMsK0NBQXlCOzs7OztJQUl6QixxREFBZ0M7Ozs7O0lBSWhDLDhDQUFtRDs7Ozs7SUFJbkQsMkRBSVc7Ozs7O0lBSVgsbURBQThCOztJQUc5QiwrQ0FBdUM7O0lBQ3ZDLCtDQUFxQzs7SUFHckMsa0RBQXdGOzs7OztJQUV4Riw4Q0FBdUI7Ozs7O0lBR3JCLDBDQUF3Qzs7Ozs7SUFDeEMsOENBQW9DOzs7OztJQUNwQyw2Q0FBMEI7Ozs7O0lBQzFCLDhDQUE0Qjs7Ozs7SUFDNUIsNkNBQTBCOzs7OztJQUMxQiw4Q0FBNkI7Ozs7O0lBQzdCLDhDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25DaGFuZ2VzLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgTmdab25lLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHppcCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQW1hcE1hcmtlckNsdXN0ZXJlclNlcnZpY2UsIEFNYXBNYXJrZXJDbHVzdGVyZXIgfSBmcm9tICcuL2FtYXAtbWFya2VyLWNsdXN0ZXJlci5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50QmluZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9ldmVudC1iaW5kZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRPcHRpb25zLCBDaGFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBQaXhlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGl4ZWwuc2VydmljZSc7XG5pbXBvcnQgeyBTaXplU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW1hcE1hcmtlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2FtYXAtbWFya2VyL2FtYXAtbWFya2VyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBTWFwU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9hbWFwLnNlcnZpY2UnO1xuXG5jb25zdCBUQUcgPSAnYW1hcC1tYXJrZXItY2x1c3RlcmVyJztcbmNvbnN0IE1hcmtlckNsdXN0ZXJPcHRpb25zID0gW1xuICAnZ3JpZFNpemUnLFxuICAnbWluQ2x1c3RlclNpemUnLFxuICAnbWF4Wm9vbScsXG4gICdhdmVyYWdlQ2VudGVyJyxcbiAgJ3N0eWxlcycsXG4gICdyZW5kZXJDbHVzdGVyTWFya2VyJyxcbiAgJ3pvb21PbkNsaWNrJyxcbl07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2FtYXAtbWFya2VyLWNsdXN0ZXJlcicsXG4gIGV4cG9ydEFzOiAnbWFya2VyLWNsdXN0ZXJlcicsXG4gIHByb3ZpZGVyczogW0FtYXBNYXJrZXJDbHVzdGVyZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQW1hcE1hcmtlckNsdXN0ZXJlckRpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICAvLyAtLS0tIE9wdGlvbnMgLS0tLVxuICAvKipcbiAgICog6IGa5ZCI6K6h566X5pe2572R5qC855qE5YOP57Sg5aSn5bCP77yM6buY6K6kNjBcbiAgICovXG4gIEBJbnB1dCgpIGdyaWRTaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiDogZrlkIjnmoTmnIDlsI/mlbDph4/jgILpu5jorqTlgLzkuLoy77yM5Y2z5bCP5LqOMuS4queCueWImeS4jeiDveaIkOS4uuS4gOS4quiBmuWQiFxuICAgKi9cbiAgQElucHV0KCkgbWluQ2x1c3RlclNpemU6IG51bWJlcjtcbiAgLyoqXG4gICAqIOacgOWkp+eahOiBmuWQiOe6p+WIq++8jOWkp+S6juivpee6p+WIq+WwseS4jei/m+ihjOebuOW6lOeahOiBmuWQiOOAgum7mOiupOWAvOS4ujE4XG4gICAqL1xuICBASW5wdXQoKSBtYXhab29tOiBudW1iZXI7XG4gIC8qKlxuICAgKiDogZrlkIjngrnnmoTlm77moIfkvY3nva7mmK/lkKbmmK/miYDmnInogZrlkIjlhoXngrnnmoTkuK3lv4PngrnjgILpu5jorqTkuLrlkKZcbiAgICovXG4gIEBJbnB1dCgpIGF2ZXJhZ2VDZW50ZXI6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDmjIflrprogZrlkIjlkI7nmoTngrnmoIforrDnmoTlm77moIfmoLflvI/vvIzlj6/nvLrnnIHvvIznvLrnnIHml7bkuLrpu5jorqTmoLflvI9cbiAgICovXG4gIEBJbnB1dCgpIHN0eWxlczogQU1hcE1hcmtlckNsdXN0ZXJlci5TdHlsZU9iamVjdFtdO1xuICAvKipcbiAgICog6K+l5pa55rOV55So5p2l5a6e546w6IGa5ZCI54K555qE6Ieq5a6a5LmJ57uY5Yi2XG4gICAqL1xuICBASW5wdXQoKSByZW5kZXJDbHVzdGVyTWFya2VyOiAob2JqOiB7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBtYXJrZXJzOiBBTWFwLk1hcmtlcjxhbnk+W107XG4gICAgbWFya2VyOiBBTWFwLk1hcmtlcjxhbnk+O1xuICB9KSA9PiB2b2lkO1xuICAvKipcbiAgICog54K55Ye76IGa5ZCI54K55pe277yM5piv5ZCm5pWj5byA77yM6buY6K6k5YC85Li677yadHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgem9vbU9uQ2xpY2s6IGJvb2xlYW47XG5cbiAgLy8gLS0tLSBFdmVudHMgLS0tLVxuICBAT3V0cHV0KCkgbmFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG5hQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIC8vIGFtYXAtbWFya2VyIGRpcmVjdGl2ZXM6XG4gIEBDb250ZW50Q2hpbGRyZW4oQW1hcE1hcmtlckRpcmVjdGl2ZSkgbWFya2VyTGlzdCA9IG5ldyBRdWVyeUxpc3Q8QW1hcE1hcmtlckRpcmVjdGl2ZT4oKTtcblxuICBwcml2YXRlIGluaXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvczogQW1hcE1hcmtlckNsdXN0ZXJlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGJpbmRlcjogRXZlbnRCaW5kZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYW1hcHM6IEFNYXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGl4ZWxzOiBQaXhlbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzaXplczogU2l6ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5vcy5nZXQoKTtcbiAgICB0aGlzLm5hQ2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQodGFyZ2V0LCAnY2xpY2snKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub3MuZGVzdHJveSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hbWFwcy5nZXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdpbml0aWFsaXppbmcgLi4uJyk7XG4gICAgICBjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uczxBTWFwTWFya2VyQ2x1c3RlcmVyLk9wdGlvbnM+KHRoaXMsIE1hcmtlckNsdXN0ZXJPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLnN0eWxlcykge1xuICAgICAgICBvcHRpb25zLnN0eWxlcyA9IG9wdGlvbnMuc3R5bGVzLm1hcChzdHlsZSA9PiB7XG4gICAgICAgICAgaWYgKHN0eWxlLnNpemUpIHtcbiAgICAgICAgICAgIHN0eWxlLnNpemUgPSB0aGlzLnNpemVzLmNyZWF0ZShzdHlsZS5zaXplKSBhcyBBTWFwLlNpemU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHlsZS5vZmZzZXQpIHtcbiAgICAgICAgICAgIHN0eWxlLm9mZnNldCA9IHRoaXMucGl4ZWxzLmNyZWF0ZShzdHlsZS5vZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3R5bGUuaW1hZ2VPZmZzZXQpIHtcbiAgICAgICAgICAgIHN0eWxlLmltYWdlT2Zmc2V0ID0gdGhpcy5waXhlbHMuY3JlYXRlKHN0eWxlLmltYWdlT2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnb3B0aW9uczonLCBvcHRpb25zKTtcbiAgICAgIHRoaXMub3MuY3JlYXRlKG9wdGlvbnMpLnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICghdGhpcy5pbml0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gQ2hhbmdlRmlsdGVyLm9mKGNoYW5nZXMpO1xuICAgIGNvbnN0IGNsdXN0ZXIgPSB0aGlzLmdldCgpO1xuICAgIHppcChmaWx0ZXIubm90RW1wdHk8bnVtYmVyPignZ3JpZFNpemUnKSwgY2x1c3Rlcikuc3Vic2NyaWJlKChbdiwgY10pID0+IGMuc2V0R3JpZFNpemUodikpO1xuICAgIHppcChmaWx0ZXIubm90RW1wdHk8bnVtYmVyPignbWluQ2x1c3RlclNpemUnKSwgY2x1c3Rlcikuc3Vic2NyaWJlKChbdiwgY10pID0+XG4gICAgICBjLnNldE1pbkNsdXN0ZXJTaXplKHYpLFxuICAgICk7XG4gICAgemlwKGZpbHRlci5oYXM8bnVtYmVyPignbWF4Wm9vbScpLCBjbHVzdGVyKS5zdWJzY3JpYmUoKFt2LCBjXSkgPT4gYy5zZXRNYXhab29tKHYpKTtcbiAgICB6aXAoZmlsdGVyLmhhczxib29sZWFuPignYXZlcmFnZUNlbnRlcicpLCBjbHVzdGVyKS5zdWJzY3JpYmUoKFt2LCBjXSkgPT4gYy5zZXRBdmVyYWdlQ2VudGVyKHYpKTtcbiAgICB6aXAoZmlsdGVyLmhhczxBTWFwTWFya2VyQ2x1c3RlcmVyLlN0eWxlT2JqZWN0W10+KCdzdHlsZXMnKSwgY2x1c3Rlcikuc3Vic2NyaWJlKChbdiwgY10pID0+XG4gICAgICBjLnNldFN0eWxlcyh2KSxcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMudXBkYXRlTWFya2VycygpLnN1YnNjcmliZShjID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLm5hUmVhZHkuZW1pdChjKSk7XG4gICAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ21hcmtlckNsdXN0ZXJlciBpcyByZWFkeS4nKTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcmtlckxpc3QuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVNYXJrZXJzKCkuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXJrZXJzKCkge1xuICAgIHJldHVybiB6aXAoY29tYmluZUxhdGVzdCh0aGlzLm1hcmtlckxpc3QubWFwKGQgPT4gZC5nZXQoKSkpLCB0aGlzLmdldCgpKS5waXBlKFxuICAgICAgbWFwKChbbWFya2VycywgY2x1c3Rlcl0pID0+IHtcbiAgICAgICAgY2x1c3Rlci5zZXRNYXJrZXJzKG1hcmtlcnMpO1xuICAgICAgICByZXR1cm4gY2x1c3RlcjtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5bey5Yib5bu655qEIEFNYXAuTWFya2VyQ2x1c3RlcmVyIOWvueixoVxuICAgKi9cbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9zLmdldCgpO1xuICB9XG59XG4iXX0=