UNPKG

devextreme-angular

Version:

Angular UI and visualization components based on DevExtreme widgets

789 lines (764 loc) • 72.5 kB
/*! * devextreme-angular * Version: 20.2.5 * Build date: Fri Jan 15 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE file in the root of the project for details. * * https://github.com/DevExpress/devextreme-angular */ import * as tslib_1 from "tslib"; /* tslint:disable:max-line-length */ import { BrowserTransferStateModule } from '@angular/platform-browser'; import { TransferState } from '@angular/platform-browser'; import { Component, NgModule, ElementRef, NgZone, PLATFORM_ID, Inject, Input, Output, OnDestroy, EventEmitter, OnChanges, DoCheck, SimpleChanges, ContentChildren, QueryList } from '@angular/core'; import DxMap from 'devextreme/ui/map'; import { DxComponent, DxTemplateHost, DxIntegrationModule, DxTemplateModule, NestedOptionHost, IterableDifferHelper, WatcherHelper } from 'devextreme-angular/core'; import { DxoApiKeyModule } from 'devextreme-angular/ui/nested'; import { DxiCenterModule } from 'devextreme-angular/ui/nested'; import { DxoKeyModule } from 'devextreme-angular/ui/nested'; import { DxiMarkerModule } from 'devextreme-angular/ui/nested'; import { DxiLocationModule } from 'devextreme-angular/ui/nested'; import { DxoTooltipModule } from 'devextreme-angular/ui/nested'; import { DxiRouteModule } from 'devextreme-angular/ui/nested'; import { DxiCenterComponent } from 'devextreme-angular/ui/nested'; import { DxiMarkerComponent } from 'devextreme-angular/ui/nested'; import { DxiRouteComponent } from 'devextreme-angular/ui/nested'; /** * The Map is an interactive UI component that displays a geographic map with markers and routes. */ var DxMapComponent = /** @class */ (function (_super) { tslib_1.__extends(DxMapComponent, _super); function DxMapComponent(elementRef, ngZone, templateHost, _watcherHelper, _idh, optionHost, transferState, platformId) { var _this = _super.call(this, elementRef, ngZone, templateHost, _watcherHelper, transferState, platformId) || this; _this._watcherHelper = _watcherHelper; _this._idh = _idh; _this._createEventEmitters([ { subscribe: 'click', emit: 'onClick' }, { subscribe: 'disposing', emit: 'onDisposing' }, { subscribe: 'initialized', emit: 'onInitialized' }, { subscribe: 'markerAdded', emit: 'onMarkerAdded' }, { subscribe: 'markerRemoved', emit: 'onMarkerRemoved' }, { subscribe: 'optionChanged', emit: 'onOptionChanged' }, { subscribe: 'ready', emit: 'onReady' }, { subscribe: 'routeAdded', emit: 'onRouteAdded' }, { subscribe: 'routeRemoved', emit: 'onRouteRemoved' }, { emit: 'accessKeyChange' }, { emit: 'activeStateEnabledChange' }, { emit: 'apiKeyChange' }, { emit: 'autoAdjustChange' }, { emit: 'centerChange' }, { emit: 'controlsChange' }, { emit: 'disabledChange' }, { emit: 'elementAttrChange' }, { emit: 'focusStateEnabledChange' }, { emit: 'heightChange' }, { emit: 'hintChange' }, { emit: 'hoverStateEnabledChange' }, { emit: 'keyChange' }, { emit: 'markerIconSrcChange' }, { emit: 'markersChange' }, { emit: 'providerChange' }, { emit: 'routesChange' }, { emit: 'rtlEnabledChange' }, { emit: 'tabIndexChange' }, { emit: 'typeChange' }, { emit: 'visibleChange' }, { emit: 'widthChange' }, { emit: 'zoomChange' } ]); _this._idh.setHost(_this); optionHost.setHost(_this); return _this; } Object.defineProperty(DxMapComponent.prototype, "accessKey", { /** * Specifies the shortcut key that sets focus on the UI component. */ get: function () { return this._getOption('accessKey'); }, set: function (value) { this._setOption('accessKey', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "activeStateEnabled", { /** * Specifies whether or not the UI component changes its state when interacting with a user. */ get: function () { return this._getOption('activeStateEnabled'); }, set: function (value) { this._setOption('activeStateEnabled', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "apiKey", { /** * Keys to authenticate the component within map providers. */ get: function () { return this._getOption('apiKey'); }, set: function (value) { this._setOption('apiKey', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "autoAdjust", { /** * Specifies whether the UI component automatically adjusts center and zoom property values when adding a new marker or route, or if a new UI component contains markers or routes by default. */ get: function () { return this._getOption('autoAdjust'); }, set: function (value) { this._setOption('autoAdjust', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "center", { /** * An object, a string, or an array specifying which part of the map is displayed at the UI component's center using coordinates. The UI component can change this value if autoAdjust is enabled. */ get: function () { return this._getOption('center'); }, set: function (value) { this._setOption('center', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "controls", { /** * Specifies whether or not map UI component controls are available. */ get: function () { return this._getOption('controls'); }, set: function (value) { this._setOption('controls', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "disabled", { /** * Specifies whether the UI component responds to user interaction. */ get: function () { return this._getOption('disabled'); }, set: function (value) { this._setOption('disabled', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "elementAttr", { /** * Specifies the global attributes to be attached to the UI component's container element. */ get: function () { return this._getOption('elementAttr'); }, set: function (value) { this._setOption('elementAttr', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "focusStateEnabled", { /** * Specifies whether the UI component can be focused using keyboard navigation. */ get: function () { return this._getOption('focusStateEnabled'); }, set: function (value) { this._setOption('focusStateEnabled', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "height", { /** * Specifies the UI component's height. */ get: function () { return this._getOption('height'); }, set: function (value) { this._setOption('height', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "hint", { /** * Specifies text for a hint that appears when a user pauses on the UI component. */ get: function () { return this._getOption('hint'); }, set: function (value) { this._setOption('hint', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "hoverStateEnabled", { /** * Specifies whether the UI component changes its state when a user pauses on it. */ get: function () { return this._getOption('hoverStateEnabled'); }, set: function (value) { this._setOption('hoverStateEnabled', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "key", { /** * A key used to authenticate the application within the required map provider. * @deprecated Use the apiKey option instead. */ get: function () { return this._getOption('key'); }, set: function (value) { this._setOption('key', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "markerIconSrc", { /** * A URL pointing to the custom icon to be used for map markers. */ get: function () { return this._getOption('markerIconSrc'); }, set: function (value) { this._setOption('markerIconSrc', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "markers", { /** * An array of markers displayed on a map. */ get: function () { return this._getOption('markers'); }, set: function (value) { this._setOption('markers', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "provider", { /** * The name of the current map data provider. */ get: function () { return this._getOption('provider'); }, set: function (value) { this._setOption('provider', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "routes", { /** * An array of routes shown on the map. */ get: function () { return this._getOption('routes'); }, set: function (value) { this._setOption('routes', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "rtlEnabled", { /** * Switches the UI component to a right-to-left representation. */ get: function () { return this._getOption('rtlEnabled'); }, set: function (value) { this._setOption('rtlEnabled', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "tabIndex", { /** * Specifies the number of the element when the Tab key is used for navigating. */ get: function () { return this._getOption('tabIndex'); }, set: function (value) { this._setOption('tabIndex', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "type", { /** * The type of a map to display. */ get: function () { return this._getOption('type'); }, set: function (value) { this._setOption('type', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "visible", { /** * Specifies whether the UI component is visible. */ get: function () { return this._getOption('visible'); }, set: function (value) { this._setOption('visible', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "width", { /** * Specifies the UI component's width. */ get: function () { return this._getOption('width'); }, set: function (value) { this._setOption('width', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "zoom", { /** * The map's zoom level. The UI component can change this value if autoAdjust is enabled. */ get: function () { return this._getOption('zoom'); }, set: function (value) { this._setOption('zoom', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "centerChildren", { get: function () { return this._getOption('center'); }, set: function (value) { this.setChildren('center', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "markersChildren", { get: function () { return this._getOption('markers'); }, set: function (value) { this.setChildren('markers', value); }, enumerable: true, configurable: true }); Object.defineProperty(DxMapComponent.prototype, "routesChildren", { get: function () { return this._getOption('routes'); }, set: function (value) { this.setChildren('routes', value); }, enumerable: true, configurable: true }); DxMapComponent.prototype._createInstance = function (element, options) { return new DxMap(element, options); }; DxMapComponent.prototype.ngOnDestroy = function () { this._destroyWidget(); }; DxMapComponent.prototype.ngOnChanges = function (changes) { _super.prototype.ngOnChanges.call(this, changes); this.setupChanges('center', changes); this.setupChanges('markers', changes); this.setupChanges('routes', changes); }; DxMapComponent.prototype.setupChanges = function (prop, changes) { if (!(prop in this._optionsToUpdate)) { this._idh.setup(prop, changes); } }; DxMapComponent.prototype.ngDoCheck = function () { this._idh.doCheck('center'); this._idh.doCheck('markers'); this._idh.doCheck('routes'); this._watcherHelper.checkWatchers(); _super.prototype.ngDoCheck.call(this); _super.prototype.clearChangedOptions.call(this); }; DxMapComponent.prototype._setOption = function (name, value) { var isSetup = this._idh.setupSingle(name, value); var isChanged = this._idh.getChanges(name, value) !== null; if (isSetup || isChanged) { _super.prototype._setOption.call(this, name, value); } }; DxMapComponent.ctorParameters = function () { return [ { type: ElementRef }, { type: NgZone }, { type: DxTemplateHost }, { type: WatcherHelper }, { type: IterableDifferHelper }, { type: NestedOptionHost }, { type: TransferState }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] } ]; }; tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", String), tslib_1.__metadata("design:paramtypes", [String]) ], DxMapComponent.prototype, "accessKey", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean), tslib_1.__metadata("design:paramtypes", [Boolean]) ], DxMapComponent.prototype, "activeStateEnabled", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Object), tslib_1.__metadata("design:paramtypes", [Object]) ], DxMapComponent.prototype, "apiKey", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean), tslib_1.__metadata("design:paramtypes", [Boolean]) ], DxMapComponent.prototype, "autoAdjust", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Object), tslib_1.__metadata("design:paramtypes", [Object]) ], DxMapComponent.prototype, "center", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean), tslib_1.__metadata("design:paramtypes", [Boolean]) ], DxMapComponent.prototype, "controls", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean), tslib_1.__metadata("design:paramtypes", [Boolean]) ], DxMapComponent.prototype, "disabled", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Object), tslib_1.__metadata("design:paramtypes", [Object]) ], DxMapComponent.prototype, "elementAttr", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean), tslib_1.__metadata("design:paramtypes", [Boolean]) ], DxMapComponent.prototype, "focusStateEnabled", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Object), tslib_1.__metadata("design:paramtypes", [Object]) ], DxMapComponent.prototype, "height", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", String), tslib_1.__metadata("design:paramtypes", [String]) ], DxMapComponent.prototype, "hint", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean), tslib_1.__metadata("design:paramtypes", [Boolean]) ], DxMapComponent.prototype, "hoverStateEnabled", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Object), tslib_1.__metadata("design:paramtypes", [Object]) ], DxMapComponent.prototype, "key", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", String), tslib_1.__metadata("design:paramtypes", [String]) ], DxMapComponent.prototype, "markerIconSrc", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Array), tslib_1.__metadata("design:paramtypes", [Array]) ], DxMapComponent.prototype, "markers", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", String), tslib_1.__metadata("design:paramtypes", [String]) ], DxMapComponent.prototype, "provider", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Array), tslib_1.__metadata("design:paramtypes", [Array]) ], DxMapComponent.prototype, "routes", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean), tslib_1.__metadata("design:paramtypes", [Boolean]) ], DxMapComponent.prototype, "rtlEnabled", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Number), tslib_1.__metadata("design:paramtypes", [Number]) ], DxMapComponent.prototype, "tabIndex", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", String), tslib_1.__metadata("design:paramtypes", [String]) ], DxMapComponent.prototype, "type", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean), tslib_1.__metadata("design:paramtypes", [Boolean]) ], DxMapComponent.prototype, "visible", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Object), tslib_1.__metadata("design:paramtypes", [Object]) ], DxMapComponent.prototype, "width", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Number), tslib_1.__metadata("design:paramtypes", [Number]) ], DxMapComponent.prototype, "zoom", null); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "onClick", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "onDisposing", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "onInitialized", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "onMarkerAdded", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "onMarkerRemoved", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "onOptionChanged", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "onReady", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "onRouteAdded", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "onRouteRemoved", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "accessKeyChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "activeStateEnabledChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "apiKeyChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "autoAdjustChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "centerChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "controlsChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "disabledChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "elementAttrChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "focusStateEnabledChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "heightChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "hintChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "hoverStateEnabledChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "keyChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "markerIconSrcChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "markersChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "providerChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "routesChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "rtlEnabledChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "tabIndexChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "typeChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "visibleChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "widthChange", void 0); tslib_1.__decorate([ Output(), tslib_1.__metadata("design:type", EventEmitter) ], DxMapComponent.prototype, "zoomChange", void 0); tslib_1.__decorate([ ContentChildren(DxiCenterComponent), tslib_1.__metadata("design:type", QueryList), tslib_1.__metadata("design:paramtypes", [Object]) ], DxMapComponent.prototype, "centerChildren", null); tslib_1.__decorate([ ContentChildren(DxiMarkerComponent), tslib_1.__metadata("design:type", QueryList), tslib_1.__metadata("design:paramtypes", [Object]) ], DxMapComponent.prototype, "markersChildren", null); tslib_1.__decorate([ ContentChildren(DxiRouteComponent), tslib_1.__metadata("design:type", QueryList), tslib_1.__metadata("design:paramtypes", [Object]) ], DxMapComponent.prototype, "routesChildren", null); DxMapComponent = tslib_1.__decorate([ Component({ selector: 'dx-map', template: '', providers: [ DxTemplateHost, WatcherHelper, NestedOptionHost, IterableDifferHelper ] }), tslib_1.__param(7, Inject(PLATFORM_ID)), tslib_1.__metadata("design:paramtypes", [ElementRef, NgZone, DxTemplateHost, WatcherHelper, IterableDifferHelper, NestedOptionHost, TransferState, Object]) ], DxMapComponent); return DxMapComponent; }(DxComponent)); export { DxMapComponent }; var DxMapModule = /** @class */ (function () { function DxMapModule() { } DxMapModule = tslib_1.__decorate([ NgModule({ imports: [ DxoApiKeyModule, DxiCenterModule, DxoKeyModule, DxiMarkerModule, DxiLocationModule, DxoTooltipModule, DxiRouteModule, DxIntegrationModule, DxTemplateModule, BrowserTransferStateModule ], declarations: [ DxMapComponent ], exports: [ DxMapComponent, DxoApiKeyModule, DxiCenterModule, DxoKeyModule, DxiMarkerModule, DxiLocationModule, DxoTooltipModule, DxiRouteModule, DxTemplateModule ] }) ], DxMapModule); return DxMapModule; }()); export { DxMapModule }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kZXZleHRyZW1lLWFuZ3VsYXIvdWkvbWFwLyIsInNvdXJjZXMiOlsiaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBRUgsb0NBQW9DO0FBR3BDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxPQUFPLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLFdBQVcsRUFDWCxNQUFNLEVBRU4sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxPQUFPLEVBQ1AsYUFBYSxFQUNiLGVBQWUsRUFDZixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxLQUFLLE1BQU0sbUJBQW1CLENBQUM7QUFHdEMsT0FBTyxFQUNILFdBQVcsRUFDWCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTlELE9BQU8sRUFBRSxrQkFB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QVcsR0E4b0I5QztTQTlvQlksY0FBYztBQTRxQjNCO0lBQUE7SUFBMkIsQ0FBQztJQUFmLFdBQVc7UUE1QnZCLFFBQVEsQ0FBQztZQUNSLE9BQU8sRUFBRTtnQkFDUCxlQUFlO2dCQUNmLGVBQWU7Z0JBQ2YsWUFBWTtnQkFDWixlQUFlO2dCQUNmLGlCQUFpQjtnQkFDakIsZ0JBQWdCO2dCQUNoQixjQUFjO2dCQUNkLG1CQUFtQjtnQkFDbkIsZ0JBQWdCO2dCQUNoQiwwQkFBMEI7YUFDM0I7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osY0FBYzthQUNmO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLGNBQWM7Z0JBQ2QsZUFBZTtnQkFDZixlQUFlO2dCQUNmLFlBQVk7Z0JBQ1osZUFBZTtnQkFDZixpQkFBaUI7Z0JBQ2pCLGdCQUFnQjtnQkFDaEIsY0FBYztnQkFDZCxnQkFBZ0I7YUFDakI7U0FDRixDQUFDO09BQ1csV0FBVyxDQUFJO0lBQUQsa0JBQUM7Q0FBQSxBQUE1QixJQUE0QjtTQUFmLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGRldmV4dHJlbWUtYW5ndWxhclxuICogVmVyc2lvbjogMjAuMi41XG4gKiBCdWlsZCBkYXRlOiBGcmkgSmFuIDE1IDIwMjFcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDIxIERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxuICpcbiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXNcbiAqIG9mIHRoZSBNSVQgbGljZW5zZS4gU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QgZm9yIGRldGFpbHMuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL0RldkV4cHJlc3MvZGV2ZXh0cmVtZS1hbmd1bGFyXG4gKi9cblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXHJcblxyXG5cclxuaW1wb3J0IHsgQnJvd3NlclRyYW5zZmVyU3RhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgVHJhbnNmZXJTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIE5nTW9kdWxlLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIE5nWm9uZSxcclxuICAgIFBMQVRGT1JNX0lELFxyXG4gICAgSW5qZWN0LFxyXG5cclxuICAgIElucHV0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgRG9DaGVjayxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgICBRdWVyeUxpc3RcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcblxyXG5cclxuaW1wb3J0IER4TWFwIGZyb20gJ2RldmV4dHJlbWUvdWkvbWFwJztcclxuXHJcblxyXG5pbXBvcnQge1xyXG4gICAgRHhDb21wb25lbnQsXHJcbiAgICBEeFRlbXBsYXRlSG9zdCxcclxuICAgIER4SW50ZWdyYXRpb25Nb2R1bGUsXHJcbiAgICBEeFRlbXBsYXRlTW9kdWxlLFxyXG4gICAgTmVzdGVkT3B0aW9uSG9zdCxcclxuICAgIEl0ZXJhYmxlRGlmZmVySGVscGVyLFxyXG4gICAgV2F0Y2hlckhlbHBlclxyXG59IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IER4b0FwaUtleU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeGlDZW50ZXJNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvS2V5TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4aU1hcmtlck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeGlMb2NhdGlvbk1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9Ub29sdGlwTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4aVJvdXRlTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcblxyXG5pbXBvcnQgeyBEeGlDZW50ZXJDb21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpTWFya2VyQ29tcG9uZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4aVJvdXRlQ29tcG9uZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcblxyXG5cclxuXHJcbi8qKlxyXG4gKiBbZGVzY3I6ZHhNYXBdXHJcblxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2R4LW1hcCcsXHJcbiAgICB0ZW1wbGF0ZTogJycsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBEeFRlbXBsYXRlSG9zdCxcclxuICAgICAgICBXYXRjaGVySGVscGVyLFxyXG4gICAgICAgIE5lc3RlZE9wdGlvbkhvc3QsXHJcbiAgICAgICAgSXRlcmFibGVEaWZmZXJIZWxwZXJcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIER4TWFwQ29tcG9uZW50IGV4dGVuZHMgRHhDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgRG9DaGVjayB7XHJcbiAgICBpbnN0YW5jZTogRHhNYXA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6V2lkZ2V0Lk9wdGlvbnMuYWNjZXNzS2V5XVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgYWNjZXNzS2V5KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignYWNjZXNzS2V5Jyk7XHJcbiAgICB9XHJcbiAgICBzZXQgYWNjZXNzS2V5KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2FjY2Vzc0tleScsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6V2lkZ2V0Lk9wdGlvbnMuYWN0aXZlU3RhdGVFbmFibGVkXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgYWN0aXZlU3RhdGVFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2FjdGl2ZVN0YXRlRW5hYmxlZCcpO1xyXG4gICAgfVxyXG4gICAgc2V0IGFjdGl2ZVN0YXRlRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignYWN0aXZlU3RhdGVFbmFibGVkJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeE1hcC5PcHRpb25zLmFwaUtleV1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGFwaUtleSgpOiBzdHJpbmcgfCB7IGJpbmc/OiBzdHJpbmcsIGdvb2dsZT86IHN0cmluZywgZ29vZ2xlU3RhdGljPzogc3RyaW5nIH0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2FwaUtleScpO1xyXG4gICAgfVxyXG4gICAgc2V0IGFwaUtleSh2YWx1ZTogc3RyaW5nIHwgeyBiaW5nPzogc3RyaW5nLCBnb29nbGU/OiBzdHJpbmcsIGdvb2dsZVN0YXRpYz86IHN0cmluZyB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdhcGlLZXknLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4TWFwLk9wdGlvbnMuYXV0b0FkanVzdF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGF1dG9BZGp1c3QoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignYXV0b0FkanVzdCcpO1xyXG4gICAgfVxyXG4gICAgc2V0IGF1dG9BZGp1c3QodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2F1dG9BZGp1c3QnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4TWFwLk9wdGlvbnMuY2VudGVyXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgY2VudGVyKCk6IHN0cmluZyB8IEFycmF5PG51bWJlciB8IHsgbGF0PzogbnVtYmVyLCBsbmc/OiBudW1iZXIgfT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2NlbnRlcicpO1xyXG4gICAgfVxyXG4gICAgc2V0IGNlbnRlcih2YWx1ZTogc3RyaW5nIHwgQXJyYXk8bnVtYmVyIHwgeyBsYXQ/OiBudW1iZXIsIGxuZz86IG51bWJlciB9Pikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignY2VudGVyJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeE1hcC5PcHRpb25zLmNvbnRyb2xzXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgY29udHJvbHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignY29udHJvbHMnKTtcclxuICAgIH1cclxuICAgIHNldCBjb250cm9scyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignY29udHJvbHMnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOldpZGdldC5PcHRpb25zLmRpc2FibGVkXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignZGlzYWJsZWQnKTtcclxuICAgIH1cclxuICAgIHNldCBkaXNhYmxlZCh2Y