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]

588 lines 41.2 kB
/** * @fileoverview added by tsickle * Generated from: components/ngx-amap/ngx-amap.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, ElementRef, Output, EventEmitter, NgZone, } from '@angular/core'; import { zip } from 'rxjs'; import { AMapService } from '../../shared/amap.service'; import { EventBinderService } from '../../shared/event-binder.service'; import { PluginLoaderService } from '../../shared/plugin-loader.service'; import { LoggerService } from '../../shared/logger/logger.service'; import { getOptions, ChangeFilter } from '../../utils'; /** @type {?} */ const TAG = 'ngx-amap'; /** @type {?} */ const ALL_OPTIONS = [ 'view', 'layers', 'zoom', 'center', 'labelzIndex', 'zooms', 'lang', 'defaultCursor', 'crs', 'animateEnable', 'isHotspot', 'defaultLayer', 'rotateEnable', 'resizeEnable', 'showIndoorMap', 'indoorMap', 'expandZoomRange', 'dragEnable', 'zoomEnable', 'doubleClickZoom', 'keyboardEnable', 'jogEnable', 'scrollWheel', 'touchZoom', 'touchZoomCenter', 'mapStyle', 'features', 'showBuildingBlock', 'viewMode', 'pitch', 'pitchEnable', 'buildingAnimation', 'skyColor', 'preloadMode', 'mask', 'maxPitch', 'rotation', 'forceVector', 'gridMapForeign', 'vectorMapForeign', ]; export class NgxAmapComponent { /** * @param {?} el * @param {?} amap * @param {?} pluginLoader * @param {?} logger * @param {?} binder * @param {?} ngZone */ constructor(el, amap, pluginLoader, logger, binder, ngZone) { this.el = el; this.amap = amap; this.pluginLoader = pluginLoader; this.logger = logger; this.binder = binder; this.ngZone = ngZone; // ---- Map Events ---- this.naReady = new EventEmitter(); this.naPluginsLoaded = new EventEmitter(); this.inited = false; /** @type {?} */ const m = this.amap.get(); this.naComplete = this.binder.bindEvent(m, 'complete'); this.naClick = this.binder.bindEvent(m, 'click'); this.naDblClick = this.binder.bindEvent(m, 'dblclick'); this.naRightClick = this.binder.bindEvent(m, 'rightclick'); this.naMouseMove = this.binder.bindEvent(m, 'mousemove'); this.naMouseOver = this.binder.bindEvent(m, 'mouseover'); this.naMouseWheel = this.binder.bindEvent(m, 'mousewheel'); this.naMouseUp = this.binder.bindEvent(m, 'mouseup'); this.naMouseOut = this.binder.bindEvent(m, 'mouseout'); this.naMouseDown = this.binder.bindEvent(m, 'mousedown'); this.naTouchStart = this.binder.bindEvent(m, 'touchstart'); this.naTouchMove = this.binder.bindEvent(m, 'touchmove'); this.naTouchEnd = this.binder.bindEvent(m, 'touchend'); this.naHotspotClick = this.binder.bindEvent(m, 'hotspotclick'); this.naHotspotOver = this.binder.bindEvent(m, 'hotspotover'); this.naHotspotOut = this.binder.bindEvent(m, 'hotspotout'); this.naDragStart = this.binder.bindEvent(m, 'dragstart'); this.naDragging = this.binder.bindEvent(m, 'dragging'); this.naDragEnd = this.binder.bindEvent(m, 'dragend'); this.naResize = this.binder.bindEvent(m, 'resize'); this.naZoomStart = this.binder.bindEvent(m, 'zoomstart'); this.naZoomEnd = this.binder.bindEvent(m, 'zoomend'); this.naZoomChange = this.binder.bindEvent(m, 'zoomchange'); this.naMoveStart = this.binder.bindEvent(m, 'movestart'); this.naMoveEnd = this.binder.bindEvent(m, 'moveend'); this.naMove = this.binder.bindEvent(m, 'mapmove'); } /** * @return {?} */ ngOnInit() { this.logger.d(TAG, 'initializing ...'); /** @type {?} */ const container = this.el.nativeElement.querySelector('div.ngx-amap-container-inner'); /** @type {?} */ const options = getOptions(this, ALL_OPTIONS); this.logger.d(TAG, 'options:', options); this.amap.create(container, options).subscribe((/** * @param {?} amap * @return {?} */ amap => { this.logger.d(TAG, 'map is ready.'); this.ngZone.run((/** * @return {?} */ () => this.naReady.emit(amap))); })); this.inited = true; } /** * @return {?} */ ngOnDestroy() { this.amap.destroy(); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { /** @type {?} */ const filter = ChangeFilter.of(changes); /** @type {?} */ const amap = this.get(); if (this.inited) { zip(filter.has('zoom'), amap).subscribe((/** * @param {?} __0 * @return {?} */ ([v, m]) => { this.logger.d(TAG, 'setZoom:', v); m.setZoom(v); })); zip(filter.has('center'), amap).subscribe((/** * @param {?} __0 * @return {?} */ ([v, m]) => { this.logger.d(TAG, 'setCenter:', v); m.setCenter(v); })); } // Not included in OPTIONS zip(filter.has('city'), amap).subscribe((/** * @param {?} __0 * @return {?} */ ([v, m]) => { m.setCity(v, (/** * @return {?} */ () => { this.logger.d(TAG, 'setCity:', v); })); })); zip(filter.notEmpty('plugins'), amap).subscribe((/** * @param {?} __0 * @return {?} */ ([v, m]) => { this.pluginLoader.load(v).subscribe((/** * @return {?} */ () => { this.logger.d(TAG, 'plugins loaded.'); this.ngZone.run((/** * @return {?} */ () => this.naPluginsLoaded.emit(m))); })); })); } /** * 获取已创建的 AMap.Map 对象 * @return {?} */ get() { return this.amap.get(); } } NgxAmapComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-amap', exportAs: 'amap', template: "<div class='ngx-amap-container-inner'></div>\n<div class='ngx-amap-content'>\n <ng-content></ng-content>\n</div>", providers: [AMapService, PluginLoaderService], styles: [".ngx-amap-container-inner{width:inherit;height:inherit}.ngx-amap-content{display:none}"] }] } ]; /** @nocollapse */ NgxAmapComponent.ctorParameters = () => [ { type: ElementRef }, { type: AMapService }, { type: PluginLoaderService }, { type: LoggerService }, { type: EventBinderService }, { type: NgZone } ]; NgxAmapComponent.propDecorators = { view: [{ type: Input }], layers: [{ type: Input }], zoom: [{ type: Input }], center: [{ type: Input }], labelzIndex: [{ type: Input }], zooms: [{ type: Input }], lang: [{ type: Input }], defaultCursor: [{ type: Input }], crs: [{ type: Input }], animateEnable: [{ type: Input }], isHotspot: [{ type: Input }], defaultLayer: [{ type: Input }], rotateEnable: [{ type: Input }], resizeEnable: [{ type: Input }], showIndoorMap: [{ type: Input }], indoorMap: [{ type: Input }], expandZoomRange: [{ type: Input }], dragEnable: [{ type: Input }], zoomEnable: [{ type: Input }], doubleClickZoom: [{ type: Input }], keyboardEnable: [{ type: Input }], jogEnable: [{ type: Input }], scrollWheel: [{ type: Input }], touchZoom: [{ type: Input }], touchZoomCenter: [{ type: Input }], mapStyle: [{ type: Input }], features: [{ type: Input }], showBuildingBlock: [{ type: Input }], viewMode: [{ type: Input }], pitch: [{ type: Input }], pitchEnable: [{ type: Input }], buildingAnimation: [{ type: Input }], skyColor: [{ type: Input }], preloadMode: [{ type: Input }], mask: [{ type: Input }], maxPitch: [{ type: Input }], rotation: [{ type: Input }], forceVector: [{ type: Input }], gridMapForeign: [{ type: Input }], vectorMapForeign: [{ type: Input }], city: [{ type: Input }], name: [{ type: Input }], plugins: [{ type: Input }], naReady: [{ type: Output }], naComplete: [{ type: Output }], naClick: [{ type: Output }], naDblClick: [{ type: Output }], naRightClick: [{ type: Output }], naMouseMove: [{ type: Output }], naMouseOver: [{ type: Output }], naMouseWheel: [{ type: Output }], naMouseUp: [{ type: Output }], naMouseOut: [{ type: Output }], naMouseDown: [{ type: Output }], naTouchStart: [{ type: Output }], naTouchMove: [{ type: Output }], naTouchEnd: [{ type: Output }], naHotspotClick: [{ type: Output }], naHotspotOver: [{ type: Output }], naHotspotOut: [{ type: Output }], naDragStart: [{ type: Output }], naDragging: [{ type: Output }], naDragEnd: [{ type: Output }], naResize: [{ type: Output }], naZoomStart: [{ type: Output }], naZoomEnd: [{ type: Output }], naZoomChange: [{ type: Output }], naMoveStart: [{ type: Output }], naMoveEnd: [{ type: Output }], naMove: [{ type: Output }], naPluginsLoaded: [{ type: Output }] }; if (false) { /** * 地图视口,用于控制影响地图静态显示的属性 * @type {?} */ NgxAmapComponent.prototype.view; /** * 地图图层数组,数组可以是图层 中的一个或多个,默认为普通二维地图 * @type {?} */ NgxAmapComponent.prototype.layers; /** * 地图显示的缩放级别 * @type {?} */ NgxAmapComponent.prototype.zoom; /** * 地图中心点坐标值 * @type {?} */ NgxAmapComponent.prototype.center; /** * 地图标注显示顺序 * @type {?} */ NgxAmapComponent.prototype.labelzIndex; /** * 地图显示的缩放级别范围 * @type {?} */ NgxAmapComponent.prototype.zooms; /** * 地图语言类型 * @type {?} */ NgxAmapComponent.prototype.lang; /** * 地图默认鼠标样式 * @type {?} */ NgxAmapComponent.prototype.defaultCursor; /** * 地图显示的参考坐标系 * @type {?} */ NgxAmapComponent.prototype.crs; /** * 地图平移过程中是否使用动画 * @type {?} */ NgxAmapComponent.prototype.animateEnable; /** * 是否开启地图热点和标注的hover效果 * @type {?} */ NgxAmapComponent.prototype.isHotspot; /** * 当前地图中默认显示的图层 * @type {?} */ NgxAmapComponent.prototype.defaultLayer; /** * 地图是否可旋转 * @type {?} */ NgxAmapComponent.prototype.rotateEnable; /** * 是否监控地图容器尺寸变化 * @type {?} */ NgxAmapComponent.prototype.resizeEnable; /** * 是否在有矢量底图的时候自动展示室内地图 * @type {?} */ NgxAmapComponent.prototype.showIndoorMap; /** * 在展示矢量图的时候自动展示室内地图图层 * @type {?} */ NgxAmapComponent.prototype.indoorMap; /** * 是否支持可以扩展最大缩放级别 * @type {?} */ NgxAmapComponent.prototype.expandZoomRange; /** * 地图是否可通过鼠标拖拽平移 * @type {?} */ NgxAmapComponent.prototype.dragEnable; /** * 地图是否可缩放 * @type {?} */ NgxAmapComponent.prototype.zoomEnable; /** * 地图是否可通过双击鼠标放大地图 * @type {?} */ NgxAmapComponent.prototype.doubleClickZoom; /** * 地图是否可通过键盘控制 * @type {?} */ NgxAmapComponent.prototype.keyboardEnable; /** * 地图是否使用缓动效果 * @type {?} */ NgxAmapComponent.prototype.jogEnable; /** * 地图是否可通过鼠标滚轮缩放浏览 * @type {?} */ NgxAmapComponent.prototype.scrollWheel; /** * 地图在移动终端上是否可通过多点触控缩放浏览地图 * @type {?} */ NgxAmapComponent.prototype.touchZoom; /** * 当touchZoomCenter=1的时候,手机端双指缩放的以地图中心为中心,否则默认以双指中间点为中心 * @type {?} */ NgxAmapComponent.prototype.touchZoomCenter; /** * 设置地图的显示样式 * @type {?} */ NgxAmapComponent.prototype.mapStyle; /** * 设置地图上显示的元素种类 * @type {?} */ NgxAmapComponent.prototype.features; /** * 设置地图显示3D楼块效果 * @type {?} */ NgxAmapComponent.prototype.showBuildingBlock; /** * 视图模式 * @type {?} */ NgxAmapComponent.prototype.viewMode; /** * 俯仰角度 * @type {?} */ NgxAmapComponent.prototype.pitch; /** * 是否允许设置俯仰角度 * @type {?} */ NgxAmapComponent.prototype.pitchEnable; /** * 楼块出现和消失的时候是否显示动画过程 * @type {?} */ NgxAmapComponent.prototype.buildingAnimation; /** * 调整天空颜色 * @type {?} */ NgxAmapComponent.prototype.skyColor; /** * 设置地图的预加载模式 * @type {?} */ NgxAmapComponent.prototype.preloadMode; /** * 为 Map 实例指定掩模的路径,各图层将只显示路径范围内图像 * @type {?} */ NgxAmapComponent.prototype.mask; /** @type {?} */ NgxAmapComponent.prototype.maxPitch; /** @type {?} */ NgxAmapComponent.prototype.rotation; /** @type {?} */ NgxAmapComponent.prototype.forceVector; /** @type {?} */ NgxAmapComponent.prototype.gridMapForeign; /** * 额外: 海外⽮量地图样式 * @type {?} */ NgxAmapComponent.prototype.vectorMapForeign; /** * 额外: 设置城市 * @type {?} */ NgxAmapComponent.prototype.city; /** * 额外: 设置地图名 * @type {?} */ NgxAmapComponent.prototype.name; /** * 额外:加载插件 * @type {?} */ NgxAmapComponent.prototype.plugins; /** @type {?} */ NgxAmapComponent.prototype.naReady; /** @type {?} */ NgxAmapComponent.prototype.naComplete; /** @type {?} */ NgxAmapComponent.prototype.naClick; /** @type {?} */ NgxAmapComponent.prototype.naDblClick; /** @type {?} */ NgxAmapComponent.prototype.naRightClick; /** @type {?} */ NgxAmapComponent.prototype.naMouseMove; /** @type {?} */ NgxAmapComponent.prototype.naMouseOver; /** @type {?} */ NgxAmapComponent.prototype.naMouseWheel; /** @type {?} */ NgxAmapComponent.prototype.naMouseUp; /** @type {?} */ NgxAmapComponent.prototype.naMouseOut; /** @type {?} */ NgxAmapComponent.prototype.naMouseDown; /** @type {?} */ NgxAmapComponent.prototype.naTouchStart; /** @type {?} */ NgxAmapComponent.prototype.naTouchMove; /** @type {?} */ NgxAmapComponent.prototype.naTouchEnd; /** @type {?} */ NgxAmapComponent.prototype.naHotspotClick; /** @type {?} */ NgxAmapComponent.prototype.naHotspotOver; /** @type {?} */ NgxAmapComponent.prototype.naHotspotOut; /** @type {?} */ NgxAmapComponent.prototype.naDragStart; /** @type {?} */ NgxAmapComponent.prototype.naDragging; /** @type {?} */ NgxAmapComponent.prototype.naDragEnd; /** @type {?} */ NgxAmapComponent.prototype.naResize; /** @type {?} */ NgxAmapComponent.prototype.naZoomStart; /** @type {?} */ NgxAmapComponent.prototype.naZoomEnd; /** @type {?} */ NgxAmapComponent.prototype.naZoomChange; /** @type {?} */ NgxAmapComponent.prototype.naMoveStart; /** @type {?} */ NgxAmapComponent.prototype.naMoveEnd; /** @type {?} */ NgxAmapComponent.prototype.naMove; /** @type {?} */ NgxAmapComponent.prototype.naPluginsLoaded; /** * @type {?} * @private */ NgxAmapComponent.prototype.inited; /** * @type {?} * @private */ NgxAmapComponent.prototype.el; /** * @type {?} * @private */ NgxAmapComponent.prototype.amap; /** * @type {?} * @private */ NgxAmapComponent.prototype.pluginLoader; /** * @type {?} * @private */ NgxAmapComponent.prototype.logger; /** * @type {?} * @private */ NgxAmapComponent.prototype.binder; /** * @type {?} * @private */ NgxAmapComponent.prototype.ngZone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFtYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWFtYXAvIiwic291cmNlcyI6WyJjb21wb25lbnRzL25neC1hbWFwL25neC1hbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFVBQVUsRUFFVixNQUFNLEVBQ04sWUFBWSxFQUdaLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7O01BRWpELEdBQUcsR0FBRyxVQUFVOztNQUNoQixXQUFXLEdBQUc7SUFDbEIsTUFBTTtJQUNOLFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtJQUNSLGFBQWE7SUFDYixPQUFPO0lBQ1AsTUFBTTtJQUNOLGVBQWU7SUFDZixLQUFLO0lBQ0wsZUFBZTtJQUNmLFdBQVc7SUFDWCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxlQUFlO0lBQ2YsV0FBVztJQUNYLGlCQUFpQjtJQUNqQixZQUFZO0lBQ1osWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLGFBQWE7SUFDYixXQUFXO0lBQ1gsaUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixVQUFVO0lBQ1YsbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixPQUFPO0lBQ1AsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsYUFBYTtJQUNiLE1BQU07SUFDTixVQUFVO0lBQ1YsVUFBVTtJQUNWLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsa0JBQWtCO0NBQ25CO0FBU0QsTUFBTSxPQUFPLGdCQUFnQjs7Ozs7Ozs7O0lBb00zQixZQUNVLEVBQWMsRUFDZCxJQUFpQixFQUNqQixZQUFpQyxFQUNqQyxNQUFxQixFQUNyQixNQUEwQixFQUMxQixNQUFjO1FBTGQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTs7UUFyQ2QsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUEyQjdCLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUVqRCxXQUFNLEdBQUcsS0FBSyxDQUFDOztjQVVmLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJ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OztJQUM5QiwwQ0FBaUM7Ozs7O0lBSWpDLDRDQUFrQzs7Ozs7SUFLbEMsZ0NBQXNCOzs7OztJQUl0QixnQ0FBc0I7Ozs7O0lBSXRCLG1DQUEyQjs7SUFHM0IsbUNBQXVDOztJQUN2QyxzQ0FBd0M7O0lBQ3hDLG1DQUFxQzs7SUFDckMsc0NBQXdDOztJQUN4Qyx3Q0FBMEM7O0lBQzFDLHVDQUF5Qzs7SUFDekMsdUNBQXlDOztJQUN6Qyx3Q0FBMEM7O0lBQzFDLHFDQUF1Qzs7SUFDdkMsc0NBQXdDOztJQUN4Qyx1Q0FBeUM7O0lBQ3pDLHdDQUEwQzs7SUFDMUMsdUNBQXlDOztJQUN6QyxzQ0FBd0M7O0lBQ3hDLDBDQUE0Qzs7SUFDNUMseUNBQTJDOztJQUMzQyx3Q0FBMEM7O0lBQzFDLHVDQUF5Qzs7SUFDekMsc0NBQXdDOztJQUN4QyxxQ0FBdUM7O0lBQ3ZDLG9DQUFzQzs7SUFDdEMsdUNBQXlDOztJQUN6QyxxQ0FBdUM7O0lBQ3ZDLHdDQUEwQzs7SUFDMUMsdUNBQXlDOztJQUN6QyxxQ0FBdUM7O0lBQ3ZDLGtDQUFvQzs7SUFDcEMsMkNBQXlEOzs7OztJQUV6RCxrQ0FBdUI7Ozs7O0lBR3JCLDhCQUFzQjs7Ozs7SUFDdEIsZ0NBQXlCOzs7OztJQUN6Qix3Q0FBeUM7Ozs7O0lBQ3pDLGtDQUE2Qjs7Ozs7SUFDN0Isa0NBQWtDOzs7OztJQUNsQyxrQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlcyxcbiAgTmdab25lLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQU1hcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvYW1hcC5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50QmluZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9ldmVudC1iaW5kZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQbHVnaW5Mb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsdWdpbi1sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRPcHRpb25zLCBDaGFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IFRBRyA9ICduZ3gtYW1hcCc7XG5jb25zdCBBTExfT1BUSU9OUyA9IFtcbiAgJ3ZpZXcnLFxuICAnbGF5ZXJzJyxcbiAgJ3pvb20nLFxuICAnY2VudGVyJyxcbiAgJ2xhYmVsekluZGV4JyxcbiAgJ3pvb21zJyxcbiAgJ2xhbmcnLFxuICAnZGVmYXVsdEN1cnNvcicsXG4gICdjcnMnLFxuICAnYW5pbWF0ZUVuYWJsZScsXG4gICdpc0hvdHNwb3QnLFxuICAnZGVmYXVsdExheWVyJyxcbiAgJ3JvdGF0ZUVuYWJsZScsXG4gICdyZXNpemVFbmFibGUnLFxuICAnc2hvd0luZG9vck1hcCcsXG4gICdpbmRvb3JNYXAnLFxuICAnZXhwYW5kWm9vbVJhbmdlJyxcbiAgJ2RyYWdFbmFibGUnLFxuICAnem9vbUVuYWJsZScsXG4gICdkb3VibGVDbGlja1pvb20nLFxuICAna2V5Ym9hcmRFbmFibGUnLFxuICAnam9nRW5hYmxlJyxcbiAgJ3Njcm9sbFdoZWVsJyxcbiAgJ3RvdWNoWm9vbScsXG4gICd0b3VjaFpvb21DZW50ZXInLFxuICAnbWFwU3R5bGUnLFxuICAnZmVhdHVyZXMnLFxuICAnc2hvd0J1aWxkaW5nQmxvY2snLFxuICAndmlld01vZGUnLFxuICAncGl0Y2gnLFxuICAncGl0Y2hFbmFibGUnLFxuICAnYnVpbGRpbmdBbmltYXRpb24nLFxuICAnc2t5Q29sb3InLFxuICAncHJlbG9hZE1vZGUnLFxuICAnbWFzaycsXG4gICdtYXhQaXRjaCcsXG4gICdyb3RhdGlvbicsXG4gICdmb3JjZVZlY3RvcicsXG4gICdncmlkTWFwRm9yZWlnbicsXG4gICd2ZWN0b3JNYXBGb3JlaWduJyxcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1hbWFwJyxcbiAgZXhwb3J0QXM6ICdhbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25neC1hbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LWFtYXAuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbQU1hcFNlcnZpY2UsIFBsdWdpbkxvYWRlclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hBbWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIC8vIC0tLS0gTWFwIE9wdGlvbnMgLS0tLVxuICAvKipcbiAgICog5Zyw5Zu+6KeG5Y+j77yM55So5LqO5o6n5Yi25b2x5ZON5Zyw5Zu+6Z2Z5oCB5pi+56S655qE5bGe5oCnXG4gICAqL1xuICBASW5wdXQoKSB2aWV3OiBBTWFwLlZpZXcyRDtcbiAgLyoqXG4gICAqIOWcsOWbvuWbvuWxguaVsOe7hO+8jOaVsOe7hOWPr+S7peaYr+WbvuWxgiDkuK3nmoTkuIDkuKrmiJblpJrkuKrvvIzpu5jorqTkuLrmma7pgJrkuoznu7TlnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIGxheWVyczogQU1hcC5MYXllcltdO1xuICAvKipcbiAgICog5Zyw5Zu+5pi+56S655qE57yp5pS+57qn5YirXG4gICAqL1xuICBASW5wdXQoKSB6b29tOiBudW1iZXI7XG4gIC8qKlxuICAgKiDlnLDlm77kuK3lv4PngrnlnZDmoIflgLxcbiAgICovXG4gIEBJbnB1dCgpIGNlbnRlcjogQU1hcC5Mb2NhdGlvblZhbHVlO1xuICAvKipcbiAgICog5Zyw5Zu+5qCH5rOo5pi+56S66aG65bqPXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbHpJbmRleDogbnVtYmVyO1xuICAvKipcbiAgICog5Zyw5Zu+5pi+56S655qE57yp5pS+57qn5Yir6IyD5Zu0XG4gICAqL1xuICBASW5wdXQoKSB6b29tczogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqXG4gICAqIOWcsOWbvuivreiogOexu+Wei1xuICAgKi9cbiAgQElucHV0KCkgbGFuZzogQU1hcC5MYW5nO1xuICAvKipcbiAgICog5Zyw5Zu+6buY6K6k6byg5qCH5qC35byPXG4gICAqL1xuICBASW5wdXQoKSBkZWZhdWx0Q3Vyc29yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDlnLDlm77mmL7npLrnmoTlj4LogIPlnZDmoIfns7tcbiAgICovXG4gIEBJbnB1dCgpIGNyczogJ0VQU0czODU3JyB8ICdFUFNHMzM5NScgfCAnRVBTRzQzMjYnO1xuICAvKipcbiAgICog5Zyw5Zu+5bmz56e76L+H56iL5Lit5piv5ZCm5L2/55So5Yqo55S7XG4gICAqL1xuICBASW5wdXQoKSBhbmltYXRlRW5hYmxlOiBib29sZWFuO1xuICAvKipcbiAgICog5piv5ZCm5byA5ZCv5Zyw5Zu+54Ot54K55ZKM5qCH5rOo55qEaG92ZXLmlYjmnpxcbiAgICovXG4gIEBJbnB1dCgpIGlzSG90c3BvdDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOW9k+WJjeWcsOWbvuS4rem7mOiupOaYvuekuueahOWbvuWxglxuICAgKi9cbiAgQElucHV0KCkgZGVmYXVsdExheWVyOiBBTWFwLlRpbGVMYXllcjtcbiAgLyoqXG4gICAqIOWcsOWbvuaYr+WQpuWPr+aXi+i9rFxuICAgKi9cbiAgQElucHV0KCkgcm90YXRlRW5hYmxlOiBib29sZWFuO1xuICAvKipcbiAgICog5piv5ZCm55uR5o6n5Zyw5Zu+5a655Zmo5bC65a+45Y+Y5YyWXG4gICAqL1xuICBASW5wdXQoKSByZXNpemVFbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDmmK/lkKblnKjmnInnn6Lph4/lupXlm77nmoTml7blgJnoh6rliqjlsZXnpLrlrqTlhoXlnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIHNob3dJbmRvb3JNYXA6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnKjlsZXnpLrnn6Lph4/lm77nmoTml7blgJnoh6rliqjlsZXnpLrlrqTlhoXlnLDlm77lm77lsYJcbiAgICovXG4gIEBJbnB1dCgpIGluZG9vck1hcDogYW55O1xuICAvKipcbiAgICog5piv5ZCm5pSv5oyB5Y+v5Lul5omp5bGV5pyA5aSn57yp5pS+57qn5YirXG4gICAqL1xuICBASW5wdXQoKSBleHBhbmRab29tUmFuZ2U6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKblj6/pgJrov4fpvKDmoIfmi5bmi73lubPnp7tcbiAgICovXG4gIEBJbnB1dCgpIGRyYWdFbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKblj6/nvKnmlL5cbiAgICovXG4gIEBJbnB1dCgpIHpvb21FbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKblj6/pgJrov4flj4zlh7vpvKDmoIfmlL7lpKflnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIGRvdWJsZUNsaWNrWm9vbTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOWcsOWbvuaYr+WQpuWPr+mAmui/h+mUruebmOaOp+WItlxuICAgKi9cbiAgQElucHV0KCkga2V5Ym9hcmRFbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKbkvb/nlKjnvJPliqjmlYjmnpxcbiAgICovXG4gIEBJbnB1dCgpIGpvZ0VuYWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOWcsOWbvuaYr+WQpuWPr+mAmui/h+m8oOagh+a7mui9rue8qeaUvua1j+iniFxuICAgKi9cbiAgQElucHV0KCkgc2Nyb2xsV2hlZWw6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77lnKjnp7vliqjnu4jnq6/kuIrmmK/lkKblj6/pgJrov4flpJrngrnop6bmjqfnvKnmlL7mtY/op4jlnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIHRvdWNoWm9vbTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOW9k3RvdWNoWm9vbUNlbnRlcj0x55qE5pe25YCZ77yM5omL5py656uv5Y+M5oyH57yp5pS+55qE5Lul5Zyw5Zu+5Lit5b+D5Li65Lit5b+D77yM5ZCm5YiZ6buY6K6k5Lul5Y+M5oyH5Lit6Ze054K55Li65Lit5b+DXG4gICAqL1xuICBASW5wdXQoKSB0b3VjaFpvb21DZW50ZXI6IG51bWJlcjtcbiAgLyoqXG4gICAqIOiuvue9ruWcsOWbvueahOaYvuekuuagt+W8j1xuICAgKi9cbiAgQElucHV0KCkgbWFwU3R5bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIOiuvue9ruWcsOWbvuS4iuaYvuekuueahOWFg+e0oOenjeexu1xuICAgKi9cbiAgQElucHV0KCkgZmVhdHVyZXM6IEFNYXAuTWFwLkZlYXR1cmVbXSB8ICdhbGwnIHwgQU1hcC5NYXAuRmVhdHVyZTtcbiAgLyoqXG4gICAqIOiuvue9ruWcsOWbvuaYvuekujNE5qW85Z2X5pWI5p6cXG4gICAqL1xuICBASW5wdXQoKSBzaG93QnVpbGRpbmdCbG9jazogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOinhuWbvuaooeW8j1xuICAgKi9cbiAgQElucHV0KCkgdmlld01vZGU6IEFNYXAuTWFwLlZpZXdNb2RlO1xuICAvKipcbiAgICog5L+v5Luw6KeS5bqmXG4gICAqL1xuICBASW5wdXQoKSBwaXRjaDogbnVtYmVyO1xuICAvKipcbiAgICog5piv5ZCm5YWB6K646K6+572u5L+v5Luw6KeS5bqmXG4gICAqL1xuICBASW5wdXQoKSBwaXRjaEVuYWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOalvOWdl+WHuueOsOWSjOa2iOWkseeahOaXtuWAmeaYr+WQpuaYvuekuuWKqOeUu+i/h+eoi1xuICAgKi9cbiAgQElucHV0KCkgYnVpbGRpbmdBbmltYXRpb246IGJvb2xlYW47XG4gIC8qKlxuICAgKiDosIPmlbTlpKnnqbrpopzoibJcbiAgICovXG4gIEBJbnB1dCgpIHNreUNvbG9yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDorr7nva7lnLDlm77nmoTpooTliqDovb3mqKHlvI9cbiAgICovXG4gIEBJbnB1dCgpIHByZWxvYWRNb2RlOiBib29sZWFuO1xuICAvKipcbiAgICog5Li6IE1hcCDlrp7kvovmjIflrprmjqnmqKHnmoTot6/lvoTvvIzlkITlm77lsYLlsIblj6rmmL7npLrot6/lvoTojIPlm7TlhoXlm77lg49cbiAgICovXG4gIEBJbnB1dCgpIG1hc2s6IFtudW1iZXIsIG51bWJlcl1bXSB8IFtudW1iZXIsIG51bWJlcl1bXVtdIHwgW251bWJlciwgbnVtYmVyXVtdW11bXTtcbiAgQElucHV0KCkgbWF4UGl0Y2g6IG51bWJlcjtcbiAgQElucHV0KCkgcm90YXRpb246IG51bWJlcjtcbiAgQElucHV0KCkgZm9yY2VWZWN0b3I6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGdyaWRNYXBGb3JlaWduOiBib29sZWFuO1xuICAvKipcbiAgICog6aKd5aSWOiDmtbflpJbiva7ph4/lnLDlm77moLflvI9cbiAgICovXG4gIEBJbnB1dCgpIHZlY3Rvck1hcEZvcmVpZ246IHN0cmluZztcblxuICAvKipcbiAgICog6aKd5aSWOiDorr7nva7ln47luIJcbiAgICovXG4gIEBJbnB1dCgpIGNpdHk6IHN0cmluZztcbiAgLyoqXG4gICAqIOmineWkljog6K6+572u5Zyw5Zu+5ZCNXG4gICAqL1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDpop3lpJbvvJrliqDovb3mj5Lku7ZcbiAgICovXG4gIEBJbnB1dCgpIHBsdWdpbnM6IHN0cmluZ1tdO1xuXG4gIC8vIC0tLS0gTWFwIEV2ZW50cyAtLS0tXG4gIEBPdXRwdXQoKSBuYVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbmFDb21wbGV0ZTogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYUNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hRGJsQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFSaWdodENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW91c2VNb3ZlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW91c2VPdmVyOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW91c2VXaGVlbDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYU1vdXNlVXA6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFNb3VzZU91dDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYU1vdXNlRG93bjogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVRvdWNoU3RhcnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFUb3VjaE1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFUb3VjaEVuZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYUhvdHNwb3RDbGljazogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYUhvdHNwb3RPdmVyOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hSG90c3BvdE91dDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYURyYWdTdGFydDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYURyYWdnaW5nOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hRHJhZ0VuZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVJlc2l6ZTogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVpvb21TdGFydDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVpvb21FbmQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFab29tQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW92ZVN0YXJ0OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW92ZUVuZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYU1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFQbHVnaW5zTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBTWFwLk1hcD4oKTtcblxuICBwcml2YXRlIGluaXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBhbWFwOiBBTWFwU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpbkxvYWRlcjogUGx1Z2luTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGJpbmRlcjogRXZlbnRCaW5kZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICkge1xuICAgIGNvbnN0IG0gPSB0aGlzLmFtYXAuZ2V0KCk7XG4gICAgdGhpcy5uYUNvbXBsZXRlID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdjb21wbGV0ZScpO1xuICAgIHRoaXMubmFDbGljayA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnY2xpY2snKTtcbiAgICB0aGlzLm5hRGJsQ2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ2RibGNsaWNrJyk7XG4gICAgdGhpcy5uYVJpZ2h0Q2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3JpZ2h0Y2xpY2snKTtcbiAgICB0aGlzLm5hTW91c2VNb3ZlID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZW1vdmUnKTtcbiAgICB0aGlzLm5hTW91c2VPdmVyID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZW92ZXInKTtcbiAgICB0aGlzLm5hTW91c2VXaGVlbCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnbW91c2V3aGVlbCcpO1xuICAgIHRoaXMubmFNb3VzZVVwID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZXVwJyk7XG4gICAgdGhpcy5uYU1vdXNlT3V0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZW91dCcpO1xuICAgIHRoaXMubmFNb3VzZURvd24gPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ21vdXNlZG93bicpO1xuICAgIHRoaXMubmFUb3VjaFN0YXJ0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICd0b3VjaHN0YXJ0Jyk7XG4gICAgdGhpcy5uYVRvdWNoTW92ZSA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAndG91Y2htb3ZlJyk7XG4gICAgdGhpcy5uYVRvdWNoRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICd0b3VjaGVuZCcpO1xuICAgIHRoaXMubmFIb3RzcG90Q2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ2hvdHNwb3RjbGljaycpO1xuICAgIHRoaXMubmFIb3RzcG90T3ZlciA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnaG90c3BvdG92ZXInKTtcbiAgICB0aGlzLm5hSG90c3BvdE91dCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnaG90c3BvdG91dCcpO1xuICAgIHRoaXMubmFEcmFnU3RhcnQgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ2RyYWdzdGFydCcpO1xuICAgIHRoaXMubmFEcmFnZ2luZyA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnZHJhZ2dpbmcnKTtcbiAgICB0aGlzLm5hRHJhZ0VuZCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnZHJhZ2VuZCcpO1xuICAgIHRoaXMubmFSZXNpemUgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3Jlc2l6ZScpO1xuICAgIHRoaXMubmFab29tU3RhcnQgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3pvb21zdGFydCcpO1xuICAgIHRoaXMubmFab29tRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICd6b29tZW5kJyk7XG4gICAgdGhpcy5uYVpvb21DaGFuZ2UgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3pvb21jaGFuZ2UnKTtcbiAgICB0aGlzLm5hTW92ZVN0YXJ0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3Zlc3RhcnQnKTtcbiAgICB0aGlzLm5hTW92ZUVuZCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnbW92ZWVuZCcpO1xuICAgIHRoaXMubmFNb3ZlID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtYXBtb3ZlJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ2luaXRpYWxpemluZyAuLi4nKTtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZGl2Lm5neC1hbWFwLWNvbnRhaW5lci1pbm5lcicpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zPEFNYXAuTWFwLk9wdGlvbnM+KHRoaXMsIEFMTF9PUFRJT05TKTtcbiAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ29wdGlvbnM6Jywgb3B0aW9ucyk7XG4gICAgdGhpcy5hbWFwLmNyZWF0ZShjb250YWluZXIsIG9wdGlvbnMpLnN1YnNjcmliZShhbWFwID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbWFwIGlzIHJlYWR5LicpO1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMubmFSZWFkeS5lbWl0KGFtYXApKTtcbiAgICB9KTtcbiAgICB0aGlzLmluaXRlZCA9IHRydWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmFtYXAuZGVzdHJveSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IGZpbHRlciA9IENoYW5nZUZpbHRlci5vZihjaGFuZ2VzKTtcbiAgICBjb25zdCBhbWFwID0gdGhpcy5nZXQoKTtcblxuICAgIGlmICh0aGlzLmluaXRlZCkge1xuICAgICAgemlwKGZpbHRlci5oYXM8bnVtYmVyPignem9vbScpLCBhbWFwKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ3NldFpvb206Jywgdik7XG4gICAgICAgIG0uc2V0Wm9vbSh2KTtcbiAgICAgIH0pO1xuICAgICAgemlwKGZpbHRlci5oYXM8QU1hcC5Mb2NhdGlvblZhbHVlPignY2VudGVyJyksIGFtYXApLnN1YnNjcmliZSgoW3YsIG1dKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnc2V0Q2VudGVyOicsIHYpO1xuICAgICAgICBtLnNldENlbnRlcih2KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE5vdCBpbmNsdWRlZCBpbiBPUFRJT05TXG4gICAgemlwKGZpbHRlci5oYXM8c3RyaW5nPignY2l0eScpLCBhbWFwKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4ge1xuICAgICAgbS5zZXRDaXR5KHYsICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdzZXRDaXR5OicsIHYpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgemlwKGZpbHRlci5ub3RFbXB0eTxzdHJpbmdbXT4oJ3BsdWdpbnMnKSwgYW1hcCkuc3Vic2NyaWJlKChbdiwgbV0pID0+IHtcbiAgICAgIHRoaXMucGx1Z2luTG9hZGVyLmxvYWQodikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdwbHVnaW5zIGxvYWRlZC4nKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMubmFQbHVnaW5zTG9hZGVkLmVtaXQobSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5bey5Yib5bu655qEIEFNYXAuTWFwIOWvueixoVxuICAgKi9cbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmFtYXAuZ2V0KCk7XG4gIH1cbn1cbiJdfQ==