UNPKG

@syncfusion/ej2-angular-charts

Version:

Feature-rich chart control with built-in support for over 25 chart types, technical indictors, trendline, zooming, tooltip, selection, crosshair and trackball. for Angular

58 lines 31.9 kB
import { Directive, ContentChildren, ContentChild } from '@angular/core'; import { ComplexBase, ArrayBase, setValue } from '@syncfusion/ej2-angular-base'; import { StripLinesDirective } from './striplines.directive'; import { MultiLevelLabelsDirective } from './multilevellabels.directive'; import * as i0 from "@angular/core"; let input = ['border', 'coefficient', 'columnIndex', 'crossesAt', 'crossesInAxis', 'crosshairTooltip', 'description', 'desiredIntervals', 'edgeLabelPlacement', 'enableAutoIntervalOnZooming', 'enableScrollbarOnZooming', 'enableTrim', 'enableWrap', 'interval', 'intervalOffset', 'intervalType', 'isIndexed', 'isInversed', 'labelFormat', 'labelIntersectAction', 'labelPadding', 'labelPlacement', 'labelPosition', 'labelRotation', 'labelStyle', 'lineBreakAlignment', 'lineStyle', 'logBase', 'majorGridLines', 'majorTickLines', 'maximum', 'maximumLabelWidth', 'maximumLabels', 'minimum', 'minorGridLines', 'minorTickLines', 'minorTicksPerInterval', 'multiLevelLabels', 'name', 'opposedPosition', 'placeNextToAxisLine', 'plotOffset', 'plotOffsetBottom', 'plotOffsetLeft', 'plotOffsetRight', 'plotOffsetTop', 'rangePadding', 'rowIndex', 'scrollbarSettings', 'skeleton', 'skeletonType', 'span', 'startAngle', 'startFromZero', 'stripLines', 'tabIndex', 'tickPosition', 'title', 'titlePadding', 'titleRotation', 'titleStyle', 'valueType', 'visible', 'zoomFactor', 'zoomPosition']; let outputs = []; /** * Axis Directive * ```html * <e-axes><e-axis></e-axis></e-axes> * ``` */ export class AxisDirective extends ComplexBase { constructor(viewContainerRef) { super(); this.viewContainerRef = viewContainerRef; this.tags = ['stripLines', 'multiLevelLabels']; setValue('currentInstance', this, this.viewContainerRef); this.registerEvents(outputs); this.directivePropList = input; } } AxisDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AxisDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); AxisDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: AxisDirective, selector: "e-axes>e-axis", inputs: { border: "border", coefficient: "coefficient", columnIndex: "columnIndex", crossesAt: "crossesAt", crossesInAxis: "crossesInAxis", crosshairTooltip: "crosshairTooltip", description: "description", desiredIntervals: "desiredIntervals", edgeLabelPlacement: "edgeLabelPlacement", enableAutoIntervalOnZooming: "enableAutoIntervalOnZooming", enableScrollbarOnZooming: "enableScrollbarOnZooming", enableTrim: "enableTrim", enableWrap: "enableWrap", interval: "interval", intervalOffset: "intervalOffset", intervalType: "intervalType", isIndexed: "isIndexed", isInversed: "isInversed", labelFormat: "labelFormat", labelIntersectAction: "labelIntersectAction", labelPadding: "labelPadding", labelPlacement: "labelPlacement", labelPosition: "labelPosition", labelRotation: "labelRotation", labelStyle: "labelStyle", lineBreakAlignment: "lineBreakAlignment", lineStyle: "lineStyle", logBase: "logBase", majorGridLines: "majorGridLines", majorTickLines: "majorTickLines", maximum: "maximum", maximumLabelWidth: "maximumLabelWidth", maximumLabels: "maximumLabels", minimum: "minimum", minorGridLines: "minorGridLines", minorTickLines: "minorTickLines", minorTicksPerInterval: "minorTicksPerInterval", multiLevelLabels: "multiLevelLabels", name: "name", opposedPosition: "opposedPosition", placeNextToAxisLine: "placeNextToAxisLine", plotOffset: "plotOffset", plotOffsetBottom: "plotOffsetBottom", plotOffsetLeft: "plotOffsetLeft", plotOffsetRight: "plotOffsetRight", plotOffsetTop: "plotOffsetTop", rangePadding: "rangePadding", rowIndex: "rowIndex", scrollbarSettings: "scrollbarSettings", skeleton: "skeleton", skeletonType: "skeletonType", span: "span", startAngle: "startAngle", startFromZero: "startFromZero", stripLines: "stripLines", tabIndex: "tabIndex", tickPosition: "tickPosition", title: "title", titlePadding: "titlePadding", titleRotation: "titleRotation", titleStyle: "titleStyle", valueType: "valueType", visible: "visible", zoomFactor: "zoomFactor", zoomPosition: "zoomPosition" }, queries: [{ propertyName: "childStripLines", first: true, predicate: StripLinesDirective, descendants: true }, { propertyName: "childMultiLevelLabels", first: true, predicate: MultiLevelLabelsDirective, descendants: true }], usesInheritance: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AxisDirective, decorators: [{ type: Directive, args: [{ selector: 'e-axes>e-axis', inputs: input, outputs: outputs, queries: { childStripLines: new ContentChild(StripLinesDirective), childMultiLevelLabels: new ContentChild(MultiLevelLabelsDirective) } }] }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } }); /** * Axis Array Directive * @private */ export class AxesDirective extends ArrayBase { constructor() { super('axes'); } } AxesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AxesDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); AxesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: AxesDirective, selector: "ejs-chart>e-axes", queries: [{ propertyName: "children", predicate: AxisDirective }], usesInheritance: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AxesDirective, decorators: [{ type: Directive, args: [{ selector: 'ejs-chart>e-axes', queries: { children: new ContentChildren(AxisDirective) }, }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhlcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2hhcnQvYXhlcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFFekUsSUFBSSxLQUFLLEdBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN4akMsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO0FBQzNCOzs7OztHQUtHO0FBVUgsTUFBTSxPQUFPLGFBQWMsU0FBUSxXQUEwQjtJQW9YekQsWUFBb0IsZ0JBQWlDO1FBQ2pELEtBQUssRUFBRSxDQUFDO1FBRFEscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQS9XOUMsU0FBSSxHQUFhLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFpWHZELFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7OzBHQXpYUSxhQUFhOzhGQUFiLGFBQWEsOGlFQUpnQixtQkFBbUIsd0ZBQ2IseUJBQXlCOzJGQUc1RCxhQUFhO2tCQVR6QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxlQUFlO29CQUN6QixNQUFNLEVBQUUsS0FBSztvQkFDYixPQUFPLEVBQUUsT0FBTztvQkFDaEIsT0FBTyxFQUFFO3dCQUNMLGVBQWUsRUFBRSxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQzt3QkFDdEQscUJBQXFCLEVBQUUsSUFBSSxZQUFZLENBQUMseUJBQXlCLENBQUM7cUJBQ3JFO2lCQUNKOztBQTZYRDs7O0dBR0c7QUFPSCxNQUFNLE9BQU8sYUFBYyxTQUFRLFNBQXdCO0lBQ3ZEO1FBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xCLENBQUM7OzBHQUhRLGFBQWE7OEZBQWIsYUFBYSxpRkFIWSxhQUFhOzJGQUd0QyxhQUFhO2tCQU56QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLE9BQU8sRUFBRTt3QkFDTCxRQUFRLEVBQUUsSUFBSSxlQUFlLENBQUMsYUFBYSxDQUFDO3FCQUMvQztpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgVmlld0NvbnRhaW5lclJlZiwgQ29udGVudENoaWxkcmVuLCBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBsZXhCYXNlLCBBcnJheUJhc2UsIHNldFZhbHVlIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItYmFzZSc7XG5cbmltcG9ydCB7IFN0cmlwTGluZXNEaXJlY3RpdmUgfSBmcm9tICcuL3N0cmlwbGluZXMuZGlyZWN0aXZlJztcbmltcG9ydCB7IE11bHRpTGV2ZWxMYWJlbHNEaXJlY3RpdmUgfSBmcm9tICcuL211bHRpbGV2ZWxsYWJlbHMuZGlyZWN0aXZlJztcblxubGV0IGlucHV0OiBzdHJpbmdbXSA9IFsnYm9yZGVyJywgJ2NvZWZmaWNpZW50JywgJ2NvbHVtbkluZGV4JywgJ2Nyb3NzZXNBdCcsICdjcm9zc2VzSW5BeGlzJywgJ2Nyb3NzaGFpclRvb2x0aXAnLCAnZGVzY3JpcHRpb24nLCAnZGVzaXJlZEludGVydmFscycsICdlZGdlTGFiZWxQbGFjZW1lbnQnLCAnZW5hYmxlQXV0b0ludGVydmFsT25ab29taW5nJywgJ2VuYWJsZVNjcm9sbGJhck9uWm9vbWluZycsICdlbmFibGVUcmltJywgJ2VuYWJsZVdyYXAnLCAnaW50ZXJ2YWwnLCAnaW50ZXJ2YWxPZmZzZXQnLCAnaW50ZXJ2YWxUeXBlJywgJ2lzSW5kZXhlZCcsICdpc0ludmVyc2VkJywgJ2xhYmVsRm9ybWF0JywgJ2xhYmVsSW50ZXJzZWN0QWN0aW9uJywgJ2xhYmVsUGFkZGluZycsICdsYWJlbFBsYWNlbWVudCcsICdsYWJlbFBvc2l0aW9uJywgJ2xhYmVsUm90YXRpb24nLCAnbGFiZWxTdHlsZScsICdsaW5lQnJlYWtBbGlnbm1lbnQnLCAnbGluZVN0eWxlJywgJ2xvZ0Jhc2UnLCAnbWFqb3JHcmlkTGluZXMnLCAnbWFqb3JUaWNrTGluZXMnLCAnbWF4aW11bScsICdtYXhpbXVtTGFiZWxXaWR0aCcsICdtYXhpbXVtTGFiZWxzJywgJ21pbmltdW0nLCAnbWlub3JHcmlkTGluZXMnLCAnbWlub3JUaWNrTGluZXMnLCAnbWlub3JUaWNrc1BlckludGVydmFsJywgJ211bHRpTGV2ZWxMYWJlbHMnLCAnbmFtZScsICdvcHBvc2VkUG9zaXRpb24nLCAncGxhY2VOZXh0VG9BeGlzTGluZScsICdwbG90T2Zmc2V0JywgJ3Bsb3RPZmZzZXRCb3R0b20nLCAncGxvdE9mZnNldExlZnQnLCAncGxvdE9mZnNldFJpZ2h0JywgJ3Bsb3RPZmZzZXRUb3AnLCAncmFuZ2VQYWRkaW5nJywgJ3Jvd0luZGV4JywgJ3Njcm9sbGJhclNldHRpbmdzJywgJ3NrZWxldG9uJywgJ3NrZWxldG9uVHlwZScsICdzcGFuJywgJ3N0YXJ0QW5nbGUnLCAnc3RhcnRGcm9tWmVybycsICdzdHJpcExpbmVzJywgJ3RhYkluZGV4JywgJ3RpY2tQb3NpdGlvbicsICd0aXRsZScsICd0aXRsZVBhZGRpbmcnLCAndGl0bGVSb3RhdGlvbicsICd0aXRsZVN0eWxlJywgJ3ZhbHVlVHlwZScsICd2aXNpYmxlJywgJ3pvb21GYWN0b3InLCAnem9vbVBvc2l0aW9uJ107XG5sZXQgb3V0cHV0czogc3RyaW5nW10gPSBbXTtcbi8qKlxuICogQXhpcyBEaXJlY3RpdmVcbiAqIGBgYGh0bWxcbiAqIDxlLWF4ZXM+PGUtYXhpcz48L2UtYXhpcz48L2UtYXhlcz5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2UtYXhlcz5lLWF4aXMnLFxuICAgIGlucHV0czogaW5wdXQsXG4gICAgb3V0cHV0czogb3V0cHV0cywgICAgXG4gICAgcXVlcmllczoge1xuICAgICAgICBjaGlsZFN0cmlwTGluZXM6IG5ldyBDb250ZW50Q2hpbGQoU3RyaXBMaW5lc0RpcmVjdGl2ZSksIFxuICAgICAgICBjaGlsZE11bHRpTGV2ZWxMYWJlbHM6IG5ldyBDb250ZW50Q2hpbGQoTXVsdGlMZXZlbExhYmVsc0RpcmVjdGl2ZSlcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEF4aXNEaXJlY3RpdmUgZXh0ZW5kcyBDb21wbGV4QmFzZTxBeGlzRGlyZWN0aXZlPiB7XG4gICAgcHVibGljIGRpcmVjdGl2ZVByb3BMaXN0OiBhbnk7XG5cdFxuICAgIHB1YmxpYyBjaGlsZFN0cmlwTGluZXM6IGFueTtcbiAgICBwdWJsaWMgY2hpbGRNdWx0aUxldmVsTGFiZWxzOiBhbnk7XG4gICAgcHVibGljIHRhZ3M6IHN0cmluZ1tdID0gWydzdHJpcExpbmVzJywgJ211bHRpTGV2ZWxMYWJlbHMnXTtcbiAgICAvKiogXG4gICAgICogQ29uZmlndXJlcyB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgYm9yZGVyIGFyb3VuZCBtdWx0aS1sZXZlbCBsYWJlbHMsIGluY2x1ZGluZyB0aGUgY29sb3IsIHdpZHRoLCBhbmQgdHlwZSBvZiB0aGUgYm9yZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBib3JkZXI6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGBjb2VmZmljaWVudGAgdmFsdWUgYWRqdXN0cyB0aGUgc2l6ZSBvZiB0aGUgcG9sYXIgcmFkYXIgY2hhcnQncyByYWRpdXMuIEEgaGlnaGVyIHZhbHVlIGluY3JlYXNlcyB0aGUgcmFkaXVzIHNpemUsIHdoaWxlIGEgc21hbGxlciB2YWx1ZSBkZWNyZWFzZXMgaXQuXG4gICAgICogQGRlZmF1bHQgMTAwXG4gICAgICovXG4gICAgcHVibGljIGNvZWZmaWNpZW50OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgaW5kZXggb2YgdGhlIGNvbHVtbiB3aGVyZSB0aGUgYXhpcyBpcyBhc3NvY2lhdGVkIHdoZW4gdGhlIGNoYXJ0IGFyZWEgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIHBsb3QgYXJlYXMgdXNpbmcgYGNvbHVtbnNgLiBcbiAgICAgKiBcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIGNvbHVtbkluZGV4OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgYXQgd2hpY2ggdGhlIGF4aXMgbGluZSBpbnRlcnNlY3RzIHdpdGggdGhlIHZlcnRpY2FsIGF4aXMgb3IgdmljZSB2ZXJzYS5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGNyb3NzZXNBdDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF4aXMgd2l0aCB3aGljaCB0aGUgYXhpcyBsaW5lIHNob3VsZCBpbnRlcnNlY3QuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcm9zc2VzSW5BeGlzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBhcHBlYXJhbmNlIGFuZCBiZWhhdmlvciBvZiB0aGUgY3Jvc3NoYWlyIHRvb2x0aXAgdGhhdCBhcHBlYXJzIHdoZW4gaG92ZXJpbmcgb3ZlciB0aGUgY2hhcnQuXG4gICAgICovXG4gICAgcHVibGljIGNyb3NzaGFpclRvb2x0aXA6IGFueTtcbiAgICAvKiogXG4gICAgICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGF4aXMgdGhhdCBwcm92aWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGl0cyBjb250ZW50IGZvciBzY3JlZW4gcmVhZGVycy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgZGVzaXJlZEludGVydmFsc2AgcHJvcGVydHkgYWxsb3dzIHRoZSBheGlzIHRvIGNhbGN1bGF0ZSBpbnRlcnZhbHMgdGhhdCBhcmUgcm91Z2hseSBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciwgcHJvbW90aW5nIGEgbW9yZSByZWFkYWJsZSBhbmQgZXZlbmx5IHNwYWNlZCBheGlzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKiBAYXNwZGVmYXVsdHZhbHVlaWdub3JlIFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNpcmVkSW50ZXJ2YWxzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgZWRnZUxhYmVsUGxhY2VtZW50YCBwcm9wZXJ0eSBlbnN1cmVzIHRoYXQgbGFiZWxzIHBvc2l0aW9uZWQgYXQgdGhlIGVkZ2VzIG9mIHRoZSBheGlzIGRvIG5vdCBvdmVybGFwIHdpdGggdGhlIGF4aXMgYm91bmRhcmllcyBvciBvdGhlciBjaGFydCBlbGVtZW50cywgb2ZmZXJpbmcgc2V2ZXJhbCBvcHRpb25zIHRvIGltcHJvdmUgY2hhcnQgcmVhZGFiaWxpdHkgYnkgbWFuYWdpbmcgZWRnZSBsYWJlbHMgZWZmZWN0aXZlbHkuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiBOb25lOiBObyBhY3Rpb24gd2lsbCBiZSBwZXJmb3JtZWQgb24gZWRnZSBsYWJlbHMuIFxuICAgICAqICogSGlkZTogRWRnZSBsYWJlbHMgd2lsbCBiZSBoaWRkZW4gdG8gcHJldmVudCBvdmVybGFwLiBcbiAgICAgKiAqIFNoaWZ0OiBFZGdlIGxhYmVscyB3aWxsIGJlIHNoaWZ0ZWQgdG8gZml0IHdpdGhpbiB0aGUgYXhpcyBib3VuZHMgd2l0aG91dCBvdmVybGFwcGluZy5cbiAgICAgKiBAZGVmYXVsdCAnU2hpZnQnXG4gICAgICovXG4gICAgcHVibGljIGVkZ2VMYWJlbFBsYWNlbWVudDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGF4aXMgaW50ZXJ2YWwgd2lsbCBiZSBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIHpvb21lZCByYW5nZS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcHVibGljIGVuYWJsZUF1dG9JbnRlcnZhbE9uWm9vbWluZzogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgYSBzY3JvbGxiYXIgd2lsbCBhcHBlYXIgd2hpbGUgem9vbWluZyB0byBoZWxwIG5hdmlnYXRlIHRocm91Z2ggdGhlIHpvb21lZCBjb250ZW50LlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5hYmxlU2Nyb2xsYmFyT25ab29taW5nOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIElmIHNldCB0byB0cnVlLCBheGlzIGxhYmVscyB3aWxsIGJlIHRyaW1tZWQgYmFzZWQgb24gdGhlIGBtYXhpbXVtTGFiZWxXaWR0aGAuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5hYmxlVHJpbTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgYXhpcyBsYWJlbHMgc2hvdWxkIGJlIHdyYXBwZWQgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBgbWF4aW11bUxhYmVsV2lkdGhgLiBcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBheGlzIGxhYmVscyB3aWxsIGF1dG9tYXRpY2FsbHkgd3JhcCB0byBmaXQgd2l0aGluIHRoZSBhdmFpbGFibGUgd2lkdGggZGVmaW5lZCBieSBgbWF4aW11bUxhYmVsV2lkdGhgLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGVuYWJsZVdyYXA6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBpbnRlcnZhbCBmb3IgdGhlIGF4aXMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqIEBhc3BkZWZhdWx0dmFsdWVpZ25vcmUgXG4gICAgICovXG4gICAgcHVibGljIGludGVydmFsOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyBhbiBvZmZzZXQgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHdoZXJlIHRoZSBmaXJzdCBsYWJlbCBhcHBlYXJzIG9uIHRoZSBjYXRlZ29yeSBheGlzLiBcbiAgICAgKiBUaGlzIGhlbHBzIGNvbnRyb2wgdGhlIGFsaWdubWVudCBvZiBheGlzIGxhYmVscyBieSBzaGlmdGluZyB0aGUgc3RhcnRpbmcgcG9zaXRpb24uXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBpbnRlcnZhbE9mZnNldDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYGludGVydmFsVHlwZWAgcHJvcGVydHkgZGVmaW5lcyBob3cgdGhlIGludGVydmFscyBvbiBhIGRhdGUtdGltZSBheGlzIGFyZSBjYWxjdWxhdGVkIGFuZCBkaXNwbGF5ZWQuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiBBdXRvOiBBdXRvbWF0aWNhbGx5IGRldGVybWluZXMgdGhlIGludGVydmFsIHR5cGUgYmFzZWQgb24gdGhlIGRhdGEgYW5kIGNoYXJ0IHNldHRpbmdzLiBcbiAgICAgKiAqIFllYXJzOiBTZXRzIHRoZSBpbnRlcnZhbCBvZiB0aGUgYXhpcyBpbiB5ZWFycy4gXG4gICAgICogKiBNb250aHM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIG1vbnRocy4gXG4gICAgICogKiBEYXlzOiBTZXRzIHRoZSBpbnRlcnZhbCBvZiB0aGUgYXhpcyBpbiBkYXlzLiBcbiAgICAgKiAqIEhvdXJzOiBTZXRzIHRoZSBpbnRlcnZhbCBvZiB0aGUgYXhpcyBpbiBob3Vycy4gXG4gICAgICogKiBNaW51dGVzOiBTZXRzIHRoZSBpbnRlcnZhbCBvZiB0aGUgYXhpcyBpbiBtaW51dGVzLlxuICAgICAqIEBkZWZhdWx0ICdBdXRvJ1xuICAgICAqL1xuICAgIHB1YmxpYyBpbnRlcnZhbFR5cGU6IGFueTtcbiAgICAvKiogXG4gICAgICogSWYgc2V0IHRvIHRydWUsIGRhdGEgcG9pbnRzIGFyZSByZW5kZXJlZCBiYXNlZCBvbiB0aGVpciBpbmRleC5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyBpc0luZGV4ZWQ6IGFueTtcbiAgICAvKiogXG4gICAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBheGlzIHdpbGwgYmUgcmVuZGVyZWQgaW4gYW4gaW52ZXJzZWQgbWFubmVyLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGlzSW52ZXJzZWQ6IGFueTtcbiAgICAvKiogXG4gICAgICogVXNlZCB0byBmb3JtYXQgdGhlIGF4aXMgbGFiZWwuIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBnbG9iYWwgc3RyaW5nIGZvcm1hdHMgc3VjaCBhcyBgQ2AsIGBuMWAsIGBQYCwgZXRjLiBcbiAgICAgKiBJdCBhbHNvIGFjY2VwdHMgcGxhY2Vob2xkZXJzIGxpa2UgYHt2YWx1ZX3CsENgLCB3aGVyZSBge3ZhbHVlfWAgcmVwcmVzZW50cyB0aGUgYXhpcyBsYWJlbCAoZS5nLiwgMjDCsEMpLlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIGxhYmVsRm9ybWF0OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgYWN0aW9uIHRvIHRha2Ugd2hlbiBheGlzIGxhYmVscyBpbnRlcnNlY3Qgd2l0aCBlYWNoIG90aGVyLiBcbiAgICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOiBcbiAgICAgKiAqIE5vbmU6IFNob3dzIGFsbCBsYWJlbHMgd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9uLiBcbiAgICAgKiAqIEhpZGU6IEhpZGVzIHRoZSBsYWJlbCBpZiBpdCBpbnRlcnNlY3RzIHdpdGggYW5vdGhlciBsYWJlbC4gXG4gICAgICogKiBUcmltOiBUcmltcyB0aGUgbGFiZWwgdGV4dCB0byBmaXQgd2l0aGluIHRoZSBhdmFpbGFibGUgc3BhY2UuIFxuICAgICAqICogV3JhcDogV3JhcHMgdGhlIGxhYmVsIHRleHQgdG8gZml0IHdpdGhpbiB0aGUgYXZhaWxhYmxlIHNwYWNlLiBcbiAgICAgKiAqIE11bHRpcGxlUm93czogRGlzcGxheXMgdGhlIGxhYmVsIHRleHQgaW4gbXVsdGlwbGUgcm93cyB0byBhdm9pZCBpbnRlcnNlY3Rpb24uIFxuICAgICAqICogUm90YXRlNDU6IFJvdGF0ZXMgdGhlIGxhYmVsIHRleHQgYnkgNDUgZGVncmVlcyB0byBhdm9pZCBpbnRlcnNlY3Rpb24uIFxuICAgICAqICogUm90YXRlOTA6IFJvdGF0ZXMgdGhlIGxhYmVsIHRleHQgYnkgOTAgZGVncmVlcyB0byBhdm9pZCBpbnRlcnNlY3Rpb24uXG4gICAgICogQGRlZmF1bHQgVHJpbVxuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbEludGVyc2VjdEFjdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYGxhYmVsUGFkZGluZ2AgcHJvcGVydHkgYWRqdXN0cyB0aGUgZGlzdGFuY2UgdG8gZW5zdXJlIGEgY2xlYXIgc3BhY2UgYmV0d2VlbiB0aGUgYXhpcyBsYWJlbHMgYW5kIHRoZSBheGlzIGxpbmUuXG4gICAgICogQGRlZmF1bHQgNVxuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbFBhZGRpbmc6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGBsYWJlbFBsYWNlbWVudGAgcHJvcGVydHkgY29udHJvbHMgd2hlcmUgdGhlIGNhdGVnb3J5IGF4aXMgbGFiZWxzIGFyZSByZW5kZXJlZCBpbiByZWxhdGlvbiB0byB0aGUgYXhpcyB0aWNrcy4gXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOiBcbiAgICAgKiAqIEJldHdlZW5UaWNrczogUmVuZGVycyB0aGUgbGFiZWwgYmV0d2VlbiB0aGUgYXhpcyB0aWNrcy4gXG4gICAgICogKiBPblRpY2tzOiBSZW5kZXJzIHRoZSBsYWJlbCBkaXJlY3RseSBvbiB0aGUgYXhpcyB0aWNrcy5cbiAgICAgKiBAZGVmYXVsdCAnQmV0d2VlblRpY2tzJ1xuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbFBsYWNlbWVudDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYGxhYmVsUG9zaXRpb25gIHByb3BlcnR5IGRldGVybWluZXMgd2hlcmUgdGhlIGF4aXMgbGFiZWxzIGFyZSByZW5kZXJlZCBpbiByZWxhdGlvbiB0byB0aGUgYXhpcyBsaW5lLiBcbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6IFxuICAgICAqICogSW5zaWRlOiBSZW5kZXJzIHRoZSBsYWJlbHMgaW5zaWRlIHRoZSBheGlzIGxpbmUuIFxuICAgICAqICogT3V0c2lkZTogUmVuZGVycyB0aGUgbGFiZWxzIG91dHNpZGUgdGhlIGF4aXMgbGluZS5cbiAgICAgKiBAZGVmYXVsdCAnT3V0c2lkZSdcbiAgICAgKi9cbiAgICBwdWJsaWMgbGFiZWxQb3NpdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYW5nbGUgdG8gd2hpY2ggdGhlIGF4aXMgbGFiZWwgZ2V0cyByb3RhdGVkLlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgbGFiZWxSb3RhdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGlzIHByb3BlcnR5IGFsbG93cyBkZWZpbmluZyB2YXJpb3VzIGZvbnQgc2V0dGluZ3MgdG8gY29udHJvbCBob3cgdGhlIGxhYmVscyBhcmUgZGlzcGxheWVkIG9uIHRoZSBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbFN0eWxlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIERldGVybWluZXMgdGhlIGFsaWdubWVudCBvZiBsYWJlbHMgd2hlbiBhIGxpbmUgYnJlYWsgb2NjdXJzIGluIHRoZSBheGlzIGxhYmVscy5cbiAgICAgKiBAZGVmYXVsdCAnQ2VudGVyJ1xuICAgICAqL1xuICAgIHB1YmxpYyBsaW5lQnJlYWtBbGlnbm1lbnQ6IGFueTtcbiAgICAvKiogXG4gICAgICogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgdGhlIGF4aXMgbGluZXMuXG4gICAgICovXG4gICAgcHVibGljIGxpbmVTdHlsZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGJhc2UgdmFsdWUgZm9yIGEgbG9nYXJpdGhtaWMgYXhpcy4gXG4gICAgICogPiBOb3RlIHRoYXQgYHZhbHVlVHlwZWAgbXVzdCBiZSBzZXQgdG8gYExvZ2FyaXRobWljYCBmb3IgdGhpcyBmZWF0dXJlIHRvIHdvcmsuXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9nQmFzZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIGZvciBjdXN0b21pemluZyBtYWpvciBncmlkIGxpbmVzIG9uIHRoZSBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYWpvckdyaWRMaW5lczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIGZvciBjdXN0b21pemluZyBtYWpvciB0aWNrIGxpbmVzIG9uIHRoZSBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYWpvclRpY2tMaW5lczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGF4aXMgcmFuZ2UsIHdoaWNoIHNldHMgdGhlIHVwcGVyIGJvdW5kIG9mIHRoZSBheGlzIGFuZCBkZWZpbmVzIHRoZSBsYXJnZXN0IHZhbHVlIGRpc3BsYXllZCBvbiB0aGUgY2hhcnQsIGhlbHBpbmcgdG8gY29udHJvbCB0aGUgdmlzaWJsZSByYW5nZSBvZiBkYXRhLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4aW11bTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gd2lkdGggb2YgYW4gYXhpcyBsYWJlbC5cbiAgICAgKiBAZGVmYXVsdCAzNC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4aW11bUxhYmVsV2lkdGg6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsYWJlbHMgcGVyIDEwMCBwaXhlbHMgcmVsYXRpdmUgdG8gdGhlIGF4aXMgbGVuZ3RoLlxuICAgICAqIEBkZWZhdWx0IDNcbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4aW11bUxhYmVsczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGF4aXMgcmFuZ2UsIHdoaWNoIHNldHMgdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBheGlzIGFuZCBkZWZpbmVzIHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSBjaGFydCB0byBjb250cm9sIHRoZSB2aXNpYmxlIHJhbmdlIG9mIGRhdGEuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBtaW5pbXVtOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIG1pbm9yIGdyaWQgbGluZXMgb24gdGhlIGF4aXMuXG4gICAgICovXG4gICAgcHVibGljIG1pbm9yR3JpZExpbmVzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIG1pbm9yIHRpY2sgbGluZXMgb24gdGhlIGF4aXMuXG4gICAgICovXG4gICAgcHVibGljIG1pbm9yVGlja0xpbmVzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIG1pbm9yIHRpY2tzIHBlciBpbnRlcnZhbC5cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIG1pbm9yVGlja3NQZXJJbnRlcnZhbDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBNdWx0aS1sZXZlbCBsYWJlbHMgYXJlIHVzZWQgdG8gZGlzcGxheSBoaWVyYXJjaGljYWwgb3IgZ3JvdXBlZCBsYWJlbHMgb24gdGhlIGF4aXMsIGFsbG93aW5nIGZvciBhIG1vcmUgZGV0YWlsZWQgYW5kIHN0cnVjdHVyZWQgZGF0YSByZXByZXNlbnRhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgbXVsdGlMZXZlbExhYmVsczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBhbiBheGlzLiBUbyBhc3NvY2lhdGUgYW4gYXhpcyB3aXRoIGEgc2VyaWVzLCBzZXQgdGhpcyBuYW1lIHRvIHRoZSBgeEF4aXNOYW1lYCBvciBgeUF4aXNOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBzZXJpZXMuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgbmFtZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGF4aXMgd2lsbCByZW5kZXIgb24gdGhlIG9wcG9zaXRlIHNpZGUgb2YgaXRzIGRlZmF1bHQgcG9zaXRpb24uXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgb3Bwb3NlZFBvc2l0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIGF4aXMgZWxlbWVudHMsIHN1Y2ggYXMgYXhpcyBsYWJlbHMgYW5kIHRoZSBheGlzIHRpdGxlLCBzaG91bGQgYmUgY3Jvc3NlZCBieSB0aGUgYXhpcyBsaW5lLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgcGxhY2VOZXh0VG9BeGlzTGluZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHBhZGRpbmcgb24gdGhlIHRvcCwgYm90dG9tLCBsZWZ0IGFuZCByaWdodCBzaWRlcyBvZiB0aGUgY2hhcnQgYXJlYSwgaW4gcGl4ZWxzLlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgcGxvdE9mZnNldDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGJvdHRvbSBwYWRkaW5nIGZvciB0aGUgY2hhcnQgYXJlYSwgaW4gcGl4ZWxzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgcGxvdE9mZnNldEJvdHRvbTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGxlZnQgcGFkZGluZyBmb3IgdGhlIGNoYXJ0IGFyZWEsIGluIHBpeGVscy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIHBsb3RPZmZzZXRMZWZ0OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgcmlnaHQgcGFkZGluZyBmb3IgdGhlIGNoYXJ0IGFyZWEsIGluIHBpeGVscy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIHBsb3RPZmZzZXRSaWdodDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHRvcCBwYWRkaW5nIGZvciB0aGUgY2hhcnQgYXJlYSwgaW4gcGl4ZWxzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgcGxvdE9mZnNldFRvcDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYHJhbmdlUGFkZGluZ2AgcHJvcGVydHkgZGV0ZXJtaW5lcyBob3cgcGFkZGluZyBpcyBhcHBsaWVkIHRvIHRoZSBheGlzIHJhbmdlLCBhZmZlY3RpbmcgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGNoYXJ0IGJ5IGFkanVzdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgb2YgdGhlIGF4aXMuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiBOb25lOiBObyBwYWRkaW5nIGlzIGFwcGxpZWQgdG8gdGhlIGF4aXMuIFxuICAgICAqICogTm9ybWFsOiBQYWRkaW5nIGlzIGFwcGxpZWQgYmFzZWQgb24gdGhlIHJhbmdlIGNhbGN1bGF0aW9uLiBcbiAgICAgKiAqIEFkZGl0aW9uYWw6IFRoZSBpbnRlcnZhbCBvZiB0aGUgYXhpcyBpcyBhZGRlZCBhcyBwYWRkaW5nIHRvIGJvdGggdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIG9mIHRoZSByYW5nZS4gXG4gICAgICogKiBSb3VuZDogVGhlIGF4aXMgcmFuZ2UgaXMgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBwb3NzaWJsZSB2YWx1ZSB0aGF0IGlzIGRpdmlzaWJsZSBieSB0aGUgaW50ZXJ2YWwuXG4gICAgICogQGRlZmF1bHQgJ0F1dG8nXG4gICAgICovXG4gICAgcHVibGljIHJhbmdlUGFkZGluZzogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSByb3cgd2hlcmUgdGhlIGF4aXMgaXMgYXNzb2NpYXRlZCB3aGVuIHRoZSBjaGFydCBhcmVhIGlzIGRpdmlkZWQgaW50byBtdWx0aXBsZSBwbG90IGFyZWFzIHVzaW5nIGByb3dzYC4gXG4gICAgICogXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyByb3dJbmRleDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBDb25maWd1cmVzIHRoZSBzY3JvbGxiYXIgd2l0aCBvcHRpb25zIGZvciBjdXN0b21pemF0aW9uLCBpbmNsdWRpbmcgYXBwZWFyYW5jZSwgYmVoYXZpb3IsIGFuZCBsYXp5IGxvYWRpbmcgc2V0dGluZ3MuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbGJhclNldHRpbmdzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgc2tlbGV0b24gZm9ybWF0IHVzZWQgZm9yIHByb2Nlc3NpbmcgZGF0ZS10aW1lIHZhbHVlcy5cbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBza2VsZXRvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGZvcm1hdCB0eXBlIHRvIGJlIHVzZWQgaW4gZGF0ZS10aW1lIGZvcm1hdHRpbmcuXG4gICAgICogQGRlZmF1bHQgJ0RhdGVUaW1lJ1xuICAgICAqIEBkZXByZWNhdGVkIFxuICAgICAqL1xuICAgIHB1YmxpYyBza2VsZXRvblR5cGU6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYGNvbHVtbnNgIG9yIGByb3dzYCB0aGF0IGFuIGF4aXMgc3BhbnMgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHkuXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHB1YmxpYyBzcGFuOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgc3RhcnQgYW5nbGUgZm9yIHRoZSBzZXJpZXMgaW4gYSBwb2xhciBvciByYWRhciBjaGFydCwgbWVhc3VyZWQgaW4gZGVncmVlcyBmcm9tIHRoZSBob3Jpem9udGFsIGF4aXMsIGRldGVybWluaW5nIHRoZSBpbml0aWFsIGFuZ2xlIGZyb20gd2hpY2ggdGhlIHNlcmllcyBiZWdpbnMuXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGFydEFuZ2xlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIElmIHNldCB0byB0cnVlLCB0aGUgYXhpcyBzdGFydHMgZnJvbSB6ZXJvLiBcbiAgICAgKiBJZiBzZXQgdG8gZmFsc2UsIHRoZSBheGlzIHN0YXJ0cyBmcm9tIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBkYXRhLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhcnRGcm9tWmVybzogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGNvbGxlY3Rpb24gb2Ygc3RyaXAgbGluZXMgZm9yIHRoZSBheGlzLCB3aGljaCBhcmUgdmlzdWFsIGVsZW1lbnRzIHVzZWQgdG8gbWFyayBvciBoaWdobGlnaHQgc3BlY2lmaWMgcmFuZ2VzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdHJpcExpbmVzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgdGFiSW5kZXhgIHZhbHVlIGZvciB0aGUgYXhpcywgZGV0ZXJtaW5pbmcgaXRzIHBvc2l0aW9uIGluIHRoZSB0YWIgb3JkZXIuXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIHB1YmxpYyB0YWJJbmRleDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYHRpY2tQb3NpdGlvbmAgcHJvcGVydHkgZGV0ZXJtaW5lcyB3aGVyZSB0aGUgYXhpcyB0aWNrcyBhcmUgcmVuZGVyZWQgaW4gcmVsYXRpb24gdG8gdGhlIGF4aXMgbGluZS4gXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOiBcbiAgICAgKiAqIEluc2lkZTogUmVuZGVycyB0aGUgdGlja3MgaW5zaWRlIHRoZSBheGlzIGxpbmUuIFxuICAgICAqICogT3V0c2lkZTogUmVuZGVycyB0aGUgdGlja3Mgb3V0c2lkZSB0aGUgYXhpcyBsaW5lLlxuICAgICAqIEBkZWZhdWx0ICdPdXRzaWRlJ1xuICAgICAqL1xuICAgIHB1YmxpYyB0aWNrUG9zaXRpb246IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSB0aXRsZSBvZiBhbiBheGlzLCBkaXNwbGF5ZWQgYWxvbmcgdGhlIGF4aXMgdG8gcHJvdmlkZSBjb250ZXh0IGFib3V0IHRoZSByZXByZXNlbnRlZCBkYXRhLlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIHRpdGxlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgcGFkZGluZyBiZXR3ZWVuIHRoZSBheGlzIHRpdGxlIGFuZCB0aGUgYXhpcyBsYWJlbHMuXG4gICAgICogQGRlZmF1bHQgNVxuICAgICAqL1xuICAgIHB1YmxpYyB0aXRsZVBhZGRpbmc6IGFueTtcbiAgICAvKiogXG4gICAgICogRGVmaW5lcyBhbiBhbmdsZSBmb3Igcm90YXRpbmcgdGhlIGF4aXMgdGl0bGUuIEJ5IGRlZmF1bHQsIHRoZSBhbmdsZSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBwb3NpdGlvbiBhbmQgb3JpZW50YXRpb24gb2YgdGhlIGF4aXMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyB0aXRsZVJvdGF0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBheGlzIHRpdGxlLCBpbmNsdWRpbmcgZm9udCBmYW1pbHksIHNpemUsIHN0eWxlLCB3ZWlnaHQsIGFuZCBjb2xvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgdGl0bGVTdHlsZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYHZhbHVlVHlwZWAgcHJvcGVydHkgZGVmaW5lcyB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgdGhlIGF4aXMgY2FuIG1hbmFnZSwgZW5zdXJpbmcgY29ycmVjdCByZW5kZXJpbmcgYmFzZWQgb24gdGhlIGRhdGEgdHlwZS4gVGhpcyBwcm9wZXJ0eSBzdXBwb3J0cyBtdWx0aXBsZSBkYXRhIHR5cGVzLCBlYWNoIHN1aXRlZCBmb3IgZGlmZmVyZW50IGtpbmRzIG9mIGRhdGEgdmlzdWFsaXphdGlvbi4gXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgaW5jbHVkZTogXG4gICAgICogKiBEb3VibGU6IFVzZWQgZm9yIHJlbmRlcmluZyBhIG51bWVyaWMgYXhpcyB0byBhY2NvbW1vZGF0ZSBudW1lcmljIGRhdGEuIFxuICAgICAqICogRGF0ZVRpbWU6IFV0aWxpemVkIGZvciByZW5kZXJpbmcgYSBkYXRlLXRpbWUgYXhpcyB0byBtYW5hZ2UgZGF0ZS10aW1lIGRhdGEuIFxuICAgICAqICogQ2F0ZWdvcnk6IEVtcGxveWVkIGZvciByZW5kZXJpbmcgYSBjYXRlZ29yeSBheGlzIHRvIG1hbmFnZSBjYXRlZ29yaWNhbCBkYXRhLiBcbiAgICAgKiAqIExvZ2FyaXRobWljOiBBcHBsaWVkIGZvciByZW5kZXJpbmcgYSBsb2dhcml0aG1pYyBheGlzIHRvIGhhbmRsZSBhIHdpZGUgcmFuZ2Ugb2YgdmFsdWVzLiBcbiAgICAgKiAqIERhdGVUaW1lQ2F0ZWdvcnk6IFVzZWQgdG8gcmVuZGVyIGEgZGF0ZS10aW1lIGNhdGVnb3J5IGF4aXMgZm9yIG1hbmFnaW5nIGJ1c2luZXNzIGRheXMuXG4gICAgICogQGRlZmF1bHQgJ0RvdWJsZSdcbiAgICAgKiBAYmxhem9ydHlwZSBTeW5jZnVzaW9uLkVKMi5CbGF6b3IuQ2hhcnRzLlZhbHVlVHlwZVxuICAgICAqIEBpc2VudW1lcmF0aW9uIHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsdWVUeXBlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIElmIHNldCB0byB0cnVlLCBheGlzIGxhYmVscyB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGNoYXJ0LiBCeSBkZWZhdWx0LCBheGlzIGxhYmVscyBhcmUgZW5hYmxlZC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHZpc2libGU6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGF4aXMgaXMgc2NhbGVkIGJ5IHRoaXMgZmFjdG9yLiBXaGVuIGB6b29tRmFjdG9yYCBpcyAwLjUsIHRoZSBjaGFydCBpcyBzY2FsZWQgYnkgMjAwJSBhbG9uZyB0aGlzIGF4aXMuIFxuICAgICAqID4gTm90ZSB0aGUgdmFsdWUgcmFuZ2VzIGZyb20gMCB0byAxLlxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwdWJsaWMgem9vbUZhY3RvcjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgem9vbWVkIGF4aXMgb24gdGhlIGNoYXJ0LCB3aXRoIHRoZSBgem9vbVBvc2l0aW9uYCBwcm9wZXJ0eSBzcGVjaWZ5aW5nIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIHpvb21lZCByYW5nZSwgZnJvbSAwIChzdGFydCkgdG8gMSAoZW5kKS5cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIHpvb21Qb3NpdGlvbjogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOlZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc2V0VmFsdWUoJ2N1cnJlbnRJbnN0YW5jZScsIHRoaXMsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudHMob3V0cHV0cyk7XG4gICAgICAgIHRoaXMuZGlyZWN0aXZlUHJvcExpc3QgPSBpbnB1dDtcbiAgICB9XG59XG5cbi8qKlxuICogQXhpcyBBcnJheSBEaXJlY3RpdmVcbiAqIEBwcml2YXRlXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnZWpzLWNoYXJ0PmUtYXhlcycsXG4gICAgcXVlcmllczoge1xuICAgICAgICBjaGlsZHJlbjogbmV3IENvbnRlbnRDaGlsZHJlbihBeGlzRGlyZWN0aXZlKVxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIEF4ZXNEaXJlY3RpdmUgZXh0ZW5kcyBBcnJheUJhc2U8QXhlc0RpcmVjdGl2ZT4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignYXhlcycpO1xuICAgIH1cbn0iXX0=