UNPKG

ngx-amap

Version:

[![npm](https://img.shields.io/npm/v/ngx-amap.svg)][npm-badge-url] [![npm](https://img.shields.io/npm/dm/ngx-amap.svg)][npm-badge-url] [![Build Status](https://travis-ci.org/xieziyu/ngx-amap.svg?branch=master)][ci-url]

601 lines 43.4 kB
/** * @fileoverview added by tsickle * Generated from: directives/amap-marker/amap-marker.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Directive, Input, Output, EventEmitter, ContentChildren, QueryList, NgZone, } from '@angular/core'; import { zip } from 'rxjs'; import { AmapMarkerService } from './amap-marker.service'; import { LoggerService } from '../../shared/logger/logger.service'; import { AMapOverlay, OverlayOptions } from '../../base/amap-overlay'; import { EventBinderService } from '../../shared/event-binder.service'; import { getOptions, ChangeFilter } from '../../utils'; import { PixelService } from '../../shared/pixel.service'; import { IconService } from '../../shared/icon.service'; import { MarkerLabelService } from '../../shared/marker-label.service'; import { AmapInfoWindowComponent } from '../../components/amap-info-window/amap-info-window.component'; import { AMapService } from '../../shared/amap.service'; /** @type {?} */ var TAG = 'amap-marker'; /** @type {?} */ var ALL_OPTIONS = tslib_1.__spread(OverlayOptions, [ 'position', 'anchor', 'offset', 'icon', 'content', 'topWhenClick', 'raiseOnDrag', 'visible', 'zIndex', 'angle', 'autoRotation', 'animation', 'shadow', 'title', 'shape', 'label', ]); var AmapMarkerDirective = /** @class */ (function (_super) { tslib_1.__extends(AmapMarkerDirective, _super); function AmapMarkerDirective(os, binder, amaps, pixels, icons, mlabels, logger, ngZone) { var _this = _super.call(this, os, binder) || this; _this.os = os; _this.binder = binder; _this.amaps = amaps; _this.pixels = pixels; _this.icons = icons; _this.mlabels = mlabels; _this.logger = logger; _this.ngZone = ngZone; /** * 额外: 是否隐藏 */ _this.hidden = false; /** * 额外: 是否包含在点聚合中 */ _this.inCluster = false; /** * 额外: 点击时是否显示信息窗体 */ _this.openInfoWindow = true; // amap-marker events: _this.naReady = new EventEmitter(); // amap info window: _this.infoWindowComponent = new QueryList(); _this.inited = false; /** @type {?} */ var target = _this.os.get(); _this.naMouseOut = _this.binder.bindEvent(target, 'mouseout'); _this.naDragStart = _this.binder.bindEvent(target, 'dragstart'); _this.naDragging = _this.binder.bindEvent(target, 'dragging'); _this.naDragEnd = _this.binder.bindEvent(target, 'dragend'); _this.naMoving = _this.binder.bindEvent(target, 'moving'); _this.naMoveEnd = _this.binder.bindEvent(target, 'moveend'); _this.naMoveAlong = _this.binder.bindEvent(target, 'movealong'); return _this; } /** * @return {?} */ AmapMarkerDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.subscription) { this.subscription.unsubscribe(); } this.os.destroy(); }; /** * @param {?} changes * @return {?} */ AmapMarkerDirective.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { var _this = this; /** @type {?} */ var filter = ChangeFilter.of(changes); /** @type {?} */ var marker = this.get(); if (!this.inited) { // do not draw marker when no poistion defined. if (!this.position) { return; } this.amaps.get().subscribe((/** * @return {?} */ function () { _this.logger.d(TAG, 'initializing ...'); // bind info window events: _this.subscription = _this.binder.bindEvent(marker, 'click').subscribe((/** * @return {?} */ function () { if (_this.openInfoWindow) { _this.infoWindowComponent.forEach((/** * @param {?} w * @return {?} */ function (w) { return w.open(); })); } })); /** @type {?} */ var options = getOptions(_this, ALL_OPTIONS); if (_this.icon) { options.icon = _this.icons.create(_this.icon); } if (_this.shadow) { options.shadow = _this.icons.create(_this.shadow); } if (_this.label) { options.label = _this.mlabels.create(_this.label); } if (_this.offset) { options.offset = _this.pixels.create(_this.offset); } _this.logger.d(TAG, 'options:', options); _this.os.create(options, !_this.inCluster).subscribe((/** * @param {?} m * @return {?} */ function (m) { _this.ngZone.run((/** * @return {?} */ function () { return _this.naReady.emit(m); })); _this.logger.d(TAG, 'marker is ready.'); })); _this.inited = true; _this.updateInfoWindow(); _this.updateInfoWindowPosition(); })); } else { zip(filter.has('icon'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setIcon(_this.icons.create(v)); })); zip(filter.has('shadow'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setShadow(_this.icons.create(v)); })); zip(filter.has('label'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setLabel(_this.mlabels.create(v)); })); zip(filter.has('title'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setTitle(v); })); zip(filter.has('content'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setContent(v); })); zip(filter.has('extData'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setExtData(v); })); zip(filter.has('clickable'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setClickable(!!v); })); zip(filter.has('draggable'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setDraggable(!!v); })); zip(filter.has('visible'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return (v ? m.show() : m.hide()); })); zip(filter.has('cursor'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setCursor(v); })); zip(filter.has('animation'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setAnimation(v); })); zip(filter.has('angle'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setAngle(v); })); zip(filter.has('zIndex'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setzIndex(v); })); zip(filter.has('shape'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setShape(v); })); zip(filter.notEmpty('offset'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setOffset(_this.pixels.create(v)); })); zip(filter.notEmpty('position'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setPosition(v); })); } zip(filter.has('isTop'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setTop(!!v); })); zip(filter.has('hidden'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return (v ? m.hide() : m.show()); })); }; /** * @return {?} */ AmapMarkerDirective.prototype.ngAfterContentInit = /** * @return {?} */ function () { var _this = this; this.updateInfoWindow(); this.infoWindowComponent.changes.subscribe((/** * @return {?} */ function () { return _this.updateInfoWindow(); })); }; /** * @private * @return {?} */ AmapMarkerDirective.prototype.updateInfoWindow = /** * @private * @return {?} */ function () { if (this.infoWindowComponent && this.inited) { if (this.infoWindowComponent.length > 1) { this.logger.e(TAG, 'Expected no more than 1 info window.'); return; } /** @type {?} */ var marker_1 = this.os.get(); this.infoWindowComponent.forEach((/** * @param {?} component * @return {?} */ function (component) { component.hostMarker = marker_1; })); } }; /** * @private * @return {?} */ AmapMarkerDirective.prototype.updateInfoWindowPosition = /** * @private * @return {?} */ function () { if (this.infoWindowComponent && this.inited) { this.infoWindowComponent.forEach((/** * @param {?} component * @return {?} */ function (component) { component.toggleOpen(); })); } }; /** * 获取已创建的 AMap.Marker 对象 */ /** * 获取已创建的 AMap.Marker 对象 * @return {?} */ AmapMarkerDirective.prototype.get = /** * 获取已创建的 AMap.Marker 对象 * @return {?} */ function () { return this.os.get(); }; AmapMarkerDirective.decorators = [ { type: Directive, args: [{ selector: 'amap-marker', exportAs: 'marker', providers: [AmapMarkerService], },] } ]; /** @nocollapse */ AmapMarkerDirective.ctorParameters = function () { return [ { type: AmapMarkerService }, { type: EventBinderService }, { type: AMapService }, { type: PixelService }, { type: IconService }, { type: MarkerLabelService }, { type: LoggerService }, { type: NgZone } ]; }; AmapMarkerDirective.propDecorators = { position: [{ type: Input }], anchor: [{ type: Input }], offset: [{ type: Input }], icon: [{ type: Input }], content: [{ type: Input }], topWhenClick: [{ type: Input }], raiseOnDrag: [{ type: Input }], visible: [{ type: Input }], zIndex: [{ type: Input }], angle: [{ type: Input }], autoRotation: [{ type: Input }], animation: [{ type: Input }], shadow: [{ type: Input }], title: [{ type: Input }], shape: [{ type: Input }], label: [{ type: Input }], isTop: [{ type: Input }], hidden: [{ type: Input }], inCluster: [{ type: Input }], openInfoWindow: [{ type: Input }], naReady: [{ type: Output }], naMouseOut: [{ type: Output }], naDragStart: [{ type: Output }], naDragging: [{ type: Output }], naDragEnd: [{ type: Output }], naMoving: [{ type: Output }], naMoveEnd: [{ type: Output }], naMoveAlong: [{ type: Output }], infoWindowComponent: [{ type: ContentChildren, args: [AmapInfoWindowComponent,] }] }; return AmapMarkerDirective; }(AMapOverlay)); export { AmapMarkerDirective }; if (false) { /** * 点标记在地图上显示的位置 * @type {?} */ AmapMarkerDirective.prototype.position; /** * 标记锚点 * @type {?} */ AmapMarkerDirective.prototype.anchor; /** * 点标记显示位置偏移量 * @type {?} */ AmapMarkerDirective.prototype.offset; /** * 需在点标记中显示的图标 * @type {?} */ AmapMarkerDirective.prototype.icon; /** * 点标记显示内容 * @type {?} */ AmapMarkerDirective.prototype.content; /** * 鼠标点击时marker是否置顶 * @type {?} */ AmapMarkerDirective.prototype.topWhenClick; /** * 拖拽点标记时是否开启点标记离开地图的效果 * @type {?} */ AmapMarkerDirective.prototype.raiseOnDrag; /** * 点标记是否可见 * @type {?} */ AmapMarkerDirective.prototype.visible; /** * 点标记的叠加顺序 * @type {?} */ AmapMarkerDirective.prototype.zIndex; /** * 点标记的旋转角度 * @type {?} */ AmapMarkerDirective.prototype.angle; /** * 是否自动旋转 * @type {?} */ AmapMarkerDirective.prototype.autoRotation; /** * 点标记的动画效果 * @type {?} */ AmapMarkerDirective.prototype.animation; /** * 点标记阴影 * @type {?} */ AmapMarkerDirective.prototype.shadow; /** * 鼠标滑过点标记时的文字提示 * @type {?} */ AmapMarkerDirective.prototype.title; /** * 可点击区域 * @type {?} */ AmapMarkerDirective.prototype.shape; /** * 文本标注 * @type {?} */ AmapMarkerDirective.prototype.label; /** * 额外: 是否置顶 * @type {?} */ AmapMarkerDirective.prototype.isTop; /** * 额外: 是否隐藏 * @type {?} */ AmapMarkerDirective.prototype.hidden; /** * 额外: 是否包含在点聚合中 * @type {?} */ AmapMarkerDirective.prototype.inCluster; /** * 额外: 点击时是否显示信息窗体 * @type {?} */ AmapMarkerDirective.prototype.openInfoWindow; /** @type {?} */ AmapMarkerDirective.prototype.naReady; /** @type {?} */ AmapMarkerDirective.prototype.naMouseOut; /** @type {?} */ AmapMarkerDirective.prototype.naDragStart; /** @type {?} */ AmapMarkerDirective.prototype.naDragging; /** @type {?} */ AmapMarkerDirective.prototype.naDragEnd; /** @type {?} */ AmapMarkerDirective.prototype.naMoving; /** @type {?} */ AmapMarkerDirective.prototype.naMoveEnd; /** @type {?} */ AmapMarkerDirective.prototype.naMoveAlong; /** @type {?} */ AmapMarkerDirective.prototype.infoWindowComponent; /** * @type {?} * @private */ AmapMarkerDirective.prototype.inited; /** * @type {?} * @private */ AmapMarkerDirective.prototype.subscription; /** * @type {?} * @protected */ AmapMarkerDirective.prototype.os; /** * @type {?} * @protected */ AmapMarkerDirective.prototype.binder; /** * @type {?} * @private */ AmapMarkerDirective.prototype.amaps; /** * @type {?} * @private */ AmapMarkerDirective.prototype.pixels; /** * @type {?} * @private */ AmapMarkerDirective.prototype.icons; /** * @type {?} * @private */ AmapMarkerDirective.prototype.mlabels; /** * @type {?} * @private */ AmapMarkerDirective.prototype.logger; /** * @type {?} * @private */ AmapMarkerDirective.prototype.ngZone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hcC1tYXJrZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWFtYXAvIiwic291cmNlcyI6WyJkaXJlY3RpdmVzL2FtYXAtbWFya2VyL2FtYXAtbWFya2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUdaLGVBQWUsRUFDZixTQUFTLEVBRVQsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztJQUVsRCxHQUFHLEdBQUcsYUFBYTs7SUFDbkIsV0FBVyxvQkFDWixjQUFjO0lBQ2pCLFVBQVU7SUFDVixRQUFRO0lBQ1IsUUFBUTtJQUNSLE1BQU07SUFDTixTQUFTO0lBQ1QsY0FBYztJQUNkLGFBQWE7SUFDYixTQUFTO0lBQ1QsUUFB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MU9ZLG1CQUFtQjs7Ozs7O0lBTTlCLHVDQUFzQzs7Ozs7SUFJdEMscUNBQW9DOzs7OztJQUlwQyxxQ0FBcUM7Ozs7O0lBSXJDLG1DQUEwQzs7Ozs7SUFJMUMsc0NBQXVDOzs7OztJQUl2QywyQ0FBK0I7Ozs7O0lBSS9CLDBDQUE4Qjs7Ozs7SUFJOUIsc0NBQTBCOzs7OztJQUkxQixxQ0FBd0I7Ozs7O0lBSXhCLG9DQUF1Qjs7Ozs7SUFJdkIsMkNBQStCOzs7OztJQUkvQix3Q0FBdUM7Ozs7O0lBSXZDLHFDQUE0Qzs7Ozs7SUFJNUMsb0NBQXVCOzs7OztJQUl2QixvQ0FBaUM7Ozs7O0lBSWpDLG9DQUFpRDs7Ozs7SUFJakQsb0NBQXdCOzs7OztJQUl4QixxQ0FBd0I7Ozs7O0lBSXhCLHdDQUEyQjs7Ozs7SUFJM0IsNkNBQStCOztJQUcvQixzQ0FBdUM7O0lBQ3ZDLHlDQUF3Qzs7SUFDeEMsMENBQXlDOztJQUN6Qyx5Q0FBd0M7O0lBQ3hDLHdDQUF1Qzs7SUFDdkMsdUNBQXNDOztJQUN0Qyx3Q0FBdUM7O0lBQ3ZDLDBDQUF5Qzs7SUFHekMsa0RBQytEOzs7OztJQUUvRCxxQ0FBdUI7Ozs7O0lBQ3ZCLDJDQUFtQzs7Ozs7SUFHakMsaUNBQStCOzs7OztJQUMvQixxQ0FBb0M7Ozs7O0lBQ3BDLG9DQUEwQjs7Ozs7SUFDMUIscUNBQTRCOzs7OztJQUM1QixvQ0FBMEI7Ozs7O0lBQzFCLHNDQUFtQzs7Ozs7SUFDbkMscUNBQTZCOzs7OztJQUM3QixxQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBOZ1pvbmUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgemlwLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFtYXBNYXJrZXJTZXJ2aWNlIH0gZnJvbSAnLi9hbWFwLW1hcmtlci5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFNYXBPdmVybGF5LCBPdmVybGF5T3B0aW9ucyB9IGZyb20gJy4uLy4uL2Jhc2UvYW1hcC1vdmVybGF5JztcbmltcG9ydCB7IEV2ZW50QmluZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9ldmVudC1iaW5kZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRPcHRpb25zLCBDaGFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBJUGl4ZWwsIElJY29uLCBJTWFya2VyTGFiZWwgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBpeGVsU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9waXhlbC5zZXJ2aWNlJztcbmltcG9ydCB7IEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ljb24uc2VydmljZSc7XG5pbXBvcnQgeyBNYXJrZXJMYWJlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbWFya2VyLWxhYmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW1hcEluZm9XaW5kb3dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FtYXAtaW5mby13aW5kb3cvYW1hcC1pbmZvLXdpbmRvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQU1hcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvYW1hcC5zZXJ2aWNlJztcblxuY29uc3QgVEFHID0gJ2FtYXAtbWFya2VyJztcbmNvbnN0IEFMTF9PUFRJT05TID0gW1xuICAuLi5PdmVybGF5T3B0aW9ucyxcbiAgJ3Bvc2l0aW9uJyxcbiAgJ2FuY2hvcicsXG4gICdvZmZzZXQnLFxuICAnaWNvbicsXG4gICdjb250ZW50JyxcbiAgJ3RvcFdoZW5DbGljaycsXG4gICdyYWlzZU9uRHJhZycsXG4gICd2aXNpYmxlJyxcbiAgJ3pJbmRleCcsXG4gICdhbmdsZScsXG4gICdhdXRvUm90YXRpb24nLFxuICAnYW5pbWF0aW9uJyxcbiAgJ3NoYWRvdycsXG4gICd0aXRsZScsXG4gICdzaGFwZScsXG4gICdsYWJlbCcsXG5dO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdhbWFwLW1hcmtlcicsXG4gIGV4cG9ydEFzOiAnbWFya2VyJyxcbiAgcHJvdmlkZXJzOiBbQW1hcE1hcmtlclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBBbWFwTWFya2VyRGlyZWN0aXZlIGV4dGVuZHMgQU1hcE92ZXJsYXk8QU1hcC5NYXJrZXI+XG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICAvLyAtLS0tIE1hcmtlciBPcHRpb25zIC0tLS1cbiAgLyoqXG4gICAqIOeCueagh+iusOWcqOWcsOWbvuS4iuaYvuekuueahOS9jee9rlxuICAgKi9cbiAgQElucHV0KCkgcG9zaXRpb246IEFNYXAuTG9jYXRpb25WYWx1ZTtcbiAgLyoqXG4gICAqIOagh+iusOmUmueCuVxuICAgKi9cbiAgQElucHV0KCkgYW5jaG9yOiBBTWFwLk1hcmtlci5BbmNob3I7XG4gIC8qKlxuICAgKiDngrnmoIforrDmmL7npLrkvY3nva7lgY/np7vph49cbiAgICovXG4gIEBJbnB1dCgpIG9mZnNldDogQU1hcC5QaXhlbCB8IElQaXhlbDtcbiAgLyoqXG4gICAqIOmcgOWcqOeCueagh+iusOS4reaYvuekuueahOWbvuagh1xuICAgKi9cbiAgQElucHV0KCkgaWNvbjogc3RyaW5nIHwgQU1hcC5JY29uIHwgSUljb247XG4gIC8qKlxuICAgKiDngrnmoIforrDmmL7npLrlhoXlrrlcbiAgICovXG4gIEBJbnB1dCgpIGNvbnRlbnQ6IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICAvKipcbiAgICog6byg5qCH54K55Ye75pe2bWFya2Vy5piv5ZCm572u6aG2XG4gICAqL1xuICBASW5wdXQoKSB0b3BXaGVuQ2xpY2s6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDmi5bmi73ngrnmoIforrDml7bmmK/lkKblvIDlkK/ngrnmoIforrDnprvlvIDlnLDlm77nmoTmlYjmnpxcbiAgICovXG4gIEBJbnB1dCgpIHJhaXNlT25EcmFnOiBib29sZWFuO1xuICAvKipcbiAgICog54K55qCH6K6w5piv5ZCm5Y+v6KeBXG4gICAqL1xuICBASW5wdXQoKSB2aXNpYmxlOiBib29sZWFuO1xuICAvKipcbiAgICog54K55qCH6K6w55qE5Y+g5Yqg6aG65bqPXG4gICAqL1xuICBASW5wdXQoKSB6SW5kZXg6IG51bWJlcjtcbiAgLyoqXG4gICAqIOeCueagh+iusOeahOaXi+i9rOinkuW6plxuICAgKi9cbiAgQElucHV0KCkgYW5nbGU6IG51bWJlcjtcbiAgLyoqXG4gICAqIOaYr+WQpuiHquWKqOaXi+i9rFxuICAgKi9cbiAgQElucHV0KCkgYXV0b1JvdGF0aW9uOiBib29sZWFuO1xuICAvKipcbiAgICog54K55qCH6K6w55qE5Yqo55S75pWI5p6cXG4gICAqL1xuICBASW5wdXQoKSBhbmltYXRpb246IEFNYXAuQW5pbWF0aW9uTmFtZTtcbiAgLyoqXG4gICAqIOeCueagh+iusOmYtOW9sVxuICAgKi9cbiAgQElucHV0KCkgc2hhZG93OiBBTWFwLkljb24gfCBzdHJpbmcgfCBJSWNvbjtcbiAgLyoqXG4gICAqIOm8oOagh+a7kei/h+eCueagh+iusOaXtueahOaWh+Wtl+aPkOekulxuICAgKi9cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIOWPr+eCueWHu+WMuuWfn1xuICAgKi9cbiAgQElucHV0KCkgc2hhcGU6IEFNYXAuTWFya2VyU2hhcGU7XG4gIC8qKlxuICAgKiDmlofmnKzmoIfms6hcbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsOiBBTWFwLk1hcmtlci5MYWJlbCB8IElNYXJrZXJMYWJlbDtcbiAgLyoqXG4gICAqIOmineWkljog5piv5ZCm572u6aG2XG4gICAqL1xuICBASW5wdXQoKSBpc1RvcDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOmineWkljog5piv5ZCm6ZqQ6JePXG4gICAqL1xuICBASW5wdXQoKSBoaWRkZW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIOmineWkljog5piv5ZCm5YyF5ZCr5Zyo54K56IGa5ZCI5LitXG4gICAqL1xuICBASW5wdXQoKSBpbkNsdXN0ZXIgPSBmYWxzZTtcbiAgLyoqXG4gICAqIOmineWkljog54K55Ye75pe25piv5ZCm5pi+56S65L+h5oGv56qX5L2TXG4gICAqL1xuICBASW5wdXQoKSBvcGVuSW5mb1dpbmRvdyA9IHRydWU7XG5cbiAgLy8gYW1hcC1tYXJrZXIgZXZlbnRzOlxuICBAT3V0cHV0KCkgbmFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG5hTW91c2VPdXQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFEcmFnU3RhcnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFEcmFnZ2luZzogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYURyYWdFbmQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFNb3Zpbmc6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFNb3ZlRW5kOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW92ZUFsb25nOiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICAvLyBhbWFwIGluZm8gd2luZG93OlxuICBAQ29udGVudENoaWxkcmVuKEFtYXBJbmZvV2luZG93Q29tcG9uZW50KVxuICBpbmZvV2luZG93Q29tcG9uZW50ID0gbmV3IFF1ZXJ5TGlzdDxBbWFwSW5mb1dpbmRvd0NvbXBvbmVudD4oKTtcblxuICBwcml2YXRlIGluaXRlZCA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvczogQW1hcE1hcmtlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGJpbmRlcjogRXZlbnRCaW5kZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYW1hcHM6IEFNYXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGl4ZWxzOiBQaXhlbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpY29uczogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtbGFiZWxzOiBNYXJrZXJMYWJlbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgKSB7XG4gICAgc3VwZXIob3MsIGJpbmRlcik7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5vcy5nZXQoKTtcbiAgICB0aGlzLm5hTW91c2VPdXQgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQodGFyZ2V0LCAnbW91c2VvdXQnKTtcbiAgICB0aGlzLm5hRHJhZ1N0YXJ0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ2RyYWdzdGFydCcpO1xuICAgIHRoaXMubmFEcmFnZ2luZyA9IHRoaXMuYmluZGVyLmJpbmRFdmVudCh0YXJnZXQsICdkcmFnZ2luZycpO1xuICAgIHRoaXMubmFEcmFnRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ2RyYWdlbmQnKTtcbiAgICB0aGlzLm5hTW92aW5nID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ21vdmluZycpO1xuICAgIHRoaXMubmFNb3ZlRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ21vdmVlbmQnKTtcbiAgICB0aGlzLm5hTW92ZUFsb25nID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ21vdmVhbG9uZycpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm9zLmRlc3Ryb3koKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBDaGFuZ2VGaWx0ZXIub2YoY2hhbmdlcyk7XG4gICAgY29uc3QgbWFya2VyID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoIXRoaXMuaW5pdGVkKSB7XG4gICAgICAvLyBkbyBub3QgZHJhdyBtYXJrZXIgd2hlbiBubyBwb2lzdGlvbiBkZWZpbmVkLlxuICAgICAgaWYgKCF0aGlzLnBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYW1hcHMuZ2V0KCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdpbml0aWFsaXppbmcgLi4uJyk7XG4gICAgICAgIC8vIGJpbmQgaW5mbyB3aW5kb3cgZXZlbnRzOlxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtYXJrZXIsICdjbGljaycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMub3BlbkluZm9XaW5kb3cpIHtcbiAgICAgICAgICAgIHRoaXMuaW5mb1dpbmRvd0NvbXBvbmVudC5mb3JFYWNoKHcgPT4gdy5vcGVuKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zPEFNYXAuTWFya2VyLk9wdGlvbnM+KHRoaXMsIEFMTF9PUFRJT05TKTtcbiAgICAgICAgaWYgKHRoaXMuaWNvbikge1xuICAgICAgICAgIG9wdGlvbnMuaWNvbiA9IHRoaXMuaWNvbnMuY3JlYXRlKHRoaXMuaWNvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hhZG93KSB7XG4gICAgICAgICAgb3B0aW9ucy5zaGFkb3cgPSB0aGlzLmljb25zLmNyZWF0ZSh0aGlzLnNoYWRvdyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBvcHRpb25zLmxhYmVsID0gdGhpcy5tbGFiZWxzLmNyZWF0ZSh0aGlzLmxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vZmZzZXQpIHtcbiAgICAgICAgICBvcHRpb25zLm9mZnNldCA9IHRoaXMucGl4ZWxzLmNyZWF0ZSh0aGlzLm9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdvcHRpb25zOicsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm9zLmNyZWF0ZShvcHRpb25zLCAhdGhpcy5pbkNsdXN0ZXIpLnN1YnNjcmliZShtID0+IHtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5uYVJlYWR5LmVtaXQobSkpO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbWFya2VyIGlzIHJlYWR5LicpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUluZm9XaW5kb3coKTtcbiAgICAgICAgdGhpcy51cGRhdGVJbmZvV2luZG93UG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB6aXAoZmlsdGVyLmhhczxzdHJpbmcgfCBBTWFwLkljb24gfCBJSWNvbj4oJ2ljb24nKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT5cbiAgICAgICAgbS5zZXRJY29uKHRoaXMuaWNvbnMuY3JlYXRlKHYpKSxcbiAgICAgICk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxzdHJpbmcgfCBBTWFwLkljb24+KCdzaGFkb3cnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT5cbiAgICAgICAgbS5zZXRTaGFkb3codGhpcy5pY29ucy5jcmVhdGUodikpLFxuICAgICAgKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPEFNYXAuTWFya2VyLkxhYmVsIHwgSU1hcmtlckxhYmVsPignbGFiZWwnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT5cbiAgICAgICAgbS5zZXRMYWJlbCh0aGlzLm1sYWJlbHMuY3JlYXRlKHYpKSxcbiAgICAgICk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxzdHJpbmc+KCd0aXRsZScpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PiBtLnNldFRpdGxlKHYpKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPGFueT4oJ2NvbnRlbnQnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRDb250ZW50KHYpKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPGFueT4oJ2V4dERhdGEnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRFeHREYXRhKHYpKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPGJvb2xlYW4+KCdjbGlja2FibGUnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRDbGlja2FibGUoISF2KSk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxib29sZWFuPignZHJhZ2dhYmxlJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IG0uc2V0RHJhZ2dhYmxlKCEhdikpO1xuICAgICAgemlwKGZpbHRlci5oYXM8Ym9vbGVhbj4oJ3Zpc2libGUnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gKHYgPyBtLnNob3coKSA6IG0uaGlkZSgpKSk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxzdHJpbmc+KCdjdXJzb3InKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRDdXJzb3IodikpO1xuICAgICAgemlwKGZpbHRlci5oYXM8QU1hcC5BbmltYXRpb25OYW1lPignYW5pbWF0aW9uJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+XG4gICAgICAgIG0uc2V0QW5pbWF0aW9uKHYpLFxuICAgICAgKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPG51bWJlcj4oJ2FuZ2xlJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IG0uc2V0QW5nbGUodikpO1xuICAgICAgemlwKGZpbHRlci5oYXM8bnVtYmVyPignekluZGV4JyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IG0uc2V0ekluZGV4KHYpKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPEFNYXAuTWFya2VyU2hhcGU+KCdzaGFwZScpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PiBtLnNldFNoYXBlKHYpKTtcbiAgICAgIHppcChmaWx0ZXIubm90RW1wdHk8QU1hcC5QaXhlbCB8IElQaXhlbD4oJ29mZnNldCcpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PlxuICAgICAgICBtLnNldE9mZnNldCh0aGlzLnBpeGVscy5jcmVhdGUodikpLFxuICAgICAgKTtcbiAgICAgIHppcChmaWx0ZXIubm90RW1wdHk8QU1hcC5Mb2NhdGlvblZhbHVlPigncG9zaXRpb24nKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT5cbiAgICAgICAgbS5zZXRQb3NpdGlvbih2KSxcbiAgICAgICk7XG4gICAgfVxuICAgIHppcChmaWx0ZXIuaGFzPGJvb2xlYW4+KCdpc1RvcCcpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PiBtLnNldFRvcCghIXYpKTtcbiAgICB6aXAoZmlsdGVyLmhhczxib29sZWFuPignaGlkZGVuJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+ICh2ID8gbS5oaWRlKCkgOiBtLnNob3coKSkpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMudXBkYXRlSW5mb1dpbmRvdygpO1xuICAgIHRoaXMuaW5mb1dpbmRvd0NvbXBvbmVudC5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUluZm9XaW5kb3coKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUluZm9XaW5kb3coKSB7XG4gICAgaWYgKHRoaXMuaW5mb1dpbmRvd0NvbXBvbmVudCAmJiB0aGlzLmluaXRlZCkge1xuICAgICAgaWYgKHRoaXMuaW5mb1dpbmRvd0NvbXBvbmVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmUoVEFHLCAnRXhwZWN0ZWQgbm8gbW9yZSB0aGFuIDEgaW5mbyB3aW5kb3cuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFya2VyID0gdGhpcy5vcy5nZXQoKTtcbiAgICAgIHRoaXMuaW5mb1dpbmRvd0NvbXBvbmVudC5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGNvbXBvbmVudC5ob3N0TWFya2VyID0gbWFya2VyO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbmZvV2luZG93UG9zaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuaW5mb1dpbmRvd0NvbXBvbmVudCAmJiB0aGlzLmluaXRlZCkge1xuICAgICAgdGhpcy5pbmZvV2luZG93Q29tcG9uZW50LmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgICAgY29tcG9uZW50LnRvZ2dsZU9wZW4oKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blt7LliJvlu7rnmoQgQU1hcC5NYXJrZXIg5a+56LGhXG4gICAqL1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3MuZ2V0KCk7XG4gIH1cbn1cbiJdfQ==