@esfaenza/es-charts 12.2.14 → 13.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esfaenza-es-charts.d.ts +1 -6
- package/esm2020/esfaenza-es-charts.mjs +5 -0
- package/esm2020/lib/adapters/classes/BaseAdapter.mjs +50 -0
- package/{esm2015/lib/adapters/classes/IBaseAdapter.js → esm2020/lib/adapters/classes/IBaseAdapter.mjs} +0 -0
- package/{esm2015/lib/adapters/index.js → esm2020/lib/adapters/index.mjs} +0 -0
- package/esm2020/lib/components/base/base-chart.component.mjs +325 -0
- package/esm2020/lib/components/chart-pager/chart-pager.component.mjs +89 -0
- package/{esm2015/lib/components/index.js → esm2020/lib/components/index.mjs} +0 -0
- package/esm2020/lib/components/specializations/es-area-chart.component.mjs +78 -0
- package/esm2020/lib/components/specializations/es-chart.component.mjs +111 -0
- package/esm2020/lib/components/specializations/es-line-chart.component.mjs +110 -0
- package/esm2020/lib/components/specializations/es-pie-chart.component.mjs +99 -0
- package/esm2020/lib/components/specializations/es-vertical-2d-chart.component.mjs +96 -0
- package/esm2020/lib/components/specializations/es-vertical-chart.component.mjs +93 -0
- package/esm2020/lib/components/specializations/es-vertical-stacked-chart.component.mjs +93 -0
- package/esm2020/lib/es-charts.module.mjs +61 -0
- package/{esm2015/lib/models/EsChaartsModuleConfig.js → esm2020/lib/models/EsChaartsModuleConfig.mjs} +0 -0
- package/esm2020/lib/models/core/classes/ChartDispatcher.mjs +91 -0
- package/{esm2015/lib/models/core/classes/ChartLoader.js → esm2020/lib/models/core/classes/ChartLoader.mjs} +0 -0
- package/{esm2015/lib/models/core/classes/ChartThemes.js → esm2020/lib/models/core/classes/ChartThemes.mjs} +0 -0
- package/{esm2015/lib/models/core/index.js → esm2020/lib/models/core/index.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/AreaChartData.js → esm2020/lib/models/data/classes/AreaChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/LineChartData.js → esm2020/lib/models/data/classes/LineChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/PagedChartData.js → esm2020/lib/models/data/classes/PagedChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/PieChartData.js → esm2020/lib/models/data/classes/PieChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/Vertical2DChartData.js → esm2020/lib/models/data/classes/Vertical2DChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/VerticalChartData.js → esm2020/lib/models/data/classes/VerticalChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/VerticalStackedChartData.js → esm2020/lib/models/data/classes/VerticalStackedChartData.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/base/DateValue.js → esm2020/lib/models/data/classes/base/DateValue.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/base/KeyValue.js → esm2020/lib/models/data/classes/base/KeyValue.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/base/KeyValueColor.js → esm2020/lib/models/data/classes/base/KeyValueColor.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/base/Limit.js → esm2020/lib/models/data/classes/base/Limit.mjs} +0 -0
- package/{esm2015/lib/models/data/classes/base/LineSerie.js → esm2020/lib/models/data/classes/base/LineSerie.mjs} +0 -0
- package/{esm2015/lib/models/data/index.js → esm2020/lib/models/data/index.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/AreaChartSettings.js → esm2020/lib/models/settings/classes/AreaChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/LineChartSettings.js → esm2020/lib/models/settings/classes/LineChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/PieChartSettings.js → esm2020/lib/models/settings/classes/PieChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/Vertical2DChartSettings.js → esm2020/lib/models/settings/classes/Vertical2DChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/VerticalChartSettings.js → esm2020/lib/models/settings/classes/VerticalChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/VerticalStackedChartSettings.js → esm2020/lib/models/settings/classes/VerticalStackedChartSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/base/BaseInterval.js → esm2020/lib/models/settings/classes/base/BaseInterval.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/base/BaseSettings.js → esm2020/lib/models/settings/classes/base/BaseSettings.mjs} +0 -0
- package/{esm2015/lib/models/settings/classes/base/LegendPad.js → esm2020/lib/models/settings/classes/base/LegendPad.mjs} +0 -0
- package/{esm2015/lib/models/settings/index.js → esm2020/lib/models/settings/index.mjs} +0 -0
- package/esm2020/lib/services/classes/AreaChartService.mjs +134 -0
- package/esm2020/lib/services/classes/LineChartService.mjs +324 -0
- package/esm2020/lib/services/classes/PieChartService.mjs +111 -0
- package/esm2020/lib/services/classes/Vertical2DChartService.mjs +160 -0
- package/esm2020/lib/services/classes/VerticalChartService.mjs +103 -0
- package/esm2020/lib/services/classes/VerticalStackedChartService.mjs +124 -0
- package/{esm2015/lib/services/classes/base/IBaseService.js → esm2020/lib/services/classes/base/IBaseService.mjs} +0 -0
- package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
- package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
- package/esm2020/public-api.mjs +37 -0
- package/fesm2015/{esfaenza-es-charts.js → esfaenza-es-charts.mjs} +452 -352
- package/fesm2015/esfaenza-es-charts.mjs.map +1 -0
- package/fesm2020/esfaenza-es-charts.mjs +2701 -0
- package/fesm2020/esfaenza-es-charts.mjs.map +1 -0
- package/lib/adapters/classes/BaseAdapter.d.ts +3 -0
- package/lib/components/base/base-chart.component.d.ts +3 -0
- package/lib/components/chart-pager/chart-pager.component.d.ts +3 -0
- package/lib/components/specializations/es-area-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-line-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-pie-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-vertical-2d-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-vertical-chart.component.d.ts +3 -0
- package/lib/components/specializations/es-vertical-stacked-chart.component.d.ts +3 -0
- package/lib/es-charts.module.d.ts +13 -0
- package/lib/models/core/classes/ChartDispatcher.d.ts +3 -0
- package/package.json +22 -10
- package/public-api.d.ts +1 -0
- package/bundles/esfaenza-es-charts.umd.js +0 -3212
- package/bundles/esfaenza-es-charts.umd.js.map +0 -1
- package/esfaenza-es-charts.metadata.json +0 -1
- package/esm2015/esfaenza-es-charts.js +0 -11
- package/esm2015/lib/adapters/classes/BaseAdapter.js +0 -47
- package/esm2015/lib/components/base/base-chart.component.js +0 -311
- package/esm2015/lib/components/chart-pager/chart-pager.component.js +0 -84
- package/esm2015/lib/components/specializations/es-area-chart.component.js +0 -75
- package/esm2015/lib/components/specializations/es-chart.component.js +0 -108
- package/esm2015/lib/components/specializations/es-line-chart.component.js +0 -98
- package/esm2015/lib/components/specializations/es-pie-chart.component.js +0 -89
- package/esm2015/lib/components/specializations/es-vertical-2d-chart.component.js +0 -87
- package/esm2015/lib/components/specializations/es-vertical-chart.component.js +0 -85
- package/esm2015/lib/components/specializations/es-vertical-stacked-chart.component.js +0 -85
- package/esm2015/lib/es-charts.module.js +0 -42
- package/esm2015/lib/models/core/classes/ChartDispatcher.js +0 -88
- package/esm2015/lib/services/classes/AreaChartService.js +0 -135
- package/esm2015/lib/services/classes/LineChartService.js +0 -326
- package/esm2015/lib/services/classes/PieChartService.js +0 -112
- package/esm2015/lib/services/classes/Vertical2DChartService.js +0 -163
- package/esm2015/lib/services/classes/VerticalChartService.js +0 -105
- package/esm2015/lib/services/classes/VerticalStackedChartService.js +0 -127
- package/esm2015/public-api.js +0 -36
- package/fesm2015/esfaenza-es-charts.js.map +0 -1
package/esfaenza-es-charts.d.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generated bundle index. Do not edit.
|
|
3
3
|
*/
|
|
4
|
+
/// <amd-module name="@esfaenza/es-charts" />
|
|
4
5
|
export * from './public-api';
|
|
5
|
-
export { BaseAdapter as ɵi } from './lib/adapters';
|
|
6
|
-
export { EsAreaChartComponent as ɵq, EsChartComponent as ɵj, EsLineChartComponent as ɵk, EsPieChartComponent as ɵl, EsVertical2DChartComponent as ɵm, EsVerticalChartComponent as ɵn, EsVerticalStackedChartComponent as ɵo, PageChartSelector as ɵp } from './lib/components';
|
|
7
|
-
export { BaseChartComponent as ɵb } from './lib/components/base/base-chart.component';
|
|
8
|
-
export { ChartDispatcher as ɵd, ChartLoader as ɵc } from './lib/models/core';
|
|
9
|
-
export { BaseInterval as ɵa } from './lib/models/settings';
|
|
10
|
-
export { ESC_ANIMATIONS as ɵf, ESC_LOCALE as ɵe, ESC_LOGS as ɵh, ESC_THEME as ɵg } from './lib/tokens';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNmYWVuemEtZXMtY2hhcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvZXMtY2hhcnRzL3NyYy9lc2ZhZW56YS1lcy1jaGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Adapter Base da reimplementare per trasformare i dati da una libreria di grafici a questa per evitare di riscrivere tutto il codice di
|
|
5
|
+
* generazione delle serie in caso si fossero usati grafici di altre librerie
|
|
6
|
+
*/
|
|
7
|
+
export class BaseAdapter {
|
|
8
|
+
/**
|
|
9
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per gli Area Chart
|
|
10
|
+
*/
|
|
11
|
+
adaptDataForAreaChart(anyData) {
|
|
12
|
+
return anyData;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Line Chart
|
|
16
|
+
*/
|
|
17
|
+
adaptDataForLineChart(anyData) {
|
|
18
|
+
return anyData;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Line Chart
|
|
22
|
+
*/
|
|
23
|
+
adaptDataForPieChart(anyData) {
|
|
24
|
+
return anyData;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart
|
|
28
|
+
*/
|
|
29
|
+
adaptDataForVerticalChart(anyData) {
|
|
30
|
+
return anyData;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart a due dimensioni
|
|
34
|
+
*/
|
|
35
|
+
adaptDataForVertical2DChart(anyData) {
|
|
36
|
+
return anyData;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart sovrapposti
|
|
40
|
+
*/
|
|
41
|
+
adaptDataForVerticalStackedChart(anyData) {
|
|
42
|
+
return anyData;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
BaseAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
46
|
+
BaseAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseAdapter });
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseAdapter, decorators: [{
|
|
48
|
+
type: Injectable
|
|
49
|
+
}] });
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1jaGFydHMvc3JjL2xpYi9hZGFwdGVycy9jbGFzc2VzL0Jhc2VBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDOzs7R0FHRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBRXBCOztPQUVHO0lBQ0gscUJBQXFCLENBQUMsT0FBWTtRQUM5QixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxxQkFBcUIsQ0FBQyxPQUFZO1FBQzlCLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLE9BQVk7UUFDN0IsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gseUJBQXlCLENBQUMsT0FBWTtRQUNsQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSCwyQkFBMkIsQ0FBQyxPQUFZO1FBQ3BDLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNILGdDQUFnQyxDQUFDLE9BQVk7UUFDekMsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQzs7d0dBMUNRLFdBQVc7NEdBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTGluZUNoYXJ0RGF0YSwgUGllQ2hhcnREYXRhLCBWZXJ0aWNhbENoYXJ0RGF0YSwgVmVydGljYWwyRENoYXJ0RGF0YSwgVmVydGljYWxTdGFja2VkQ2hhcnREYXRhLCBBcmVhQ2hhcnREYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RhdGEnO1xyXG5pbXBvcnQgeyBJQmFzZUFkYXB0ZXIgfSBmcm9tICcuL0lCYXNlQWRhcHRlcic7XHJcblxyXG4vKipcclxuICogQWRhcHRlciBCYXNlIGRhIHJlaW1wbGVtZW50YXJlIHBlciB0cmFzZm9ybWFyZSBpIGRhdGkgZGEgdW5hIGxpYnJlcmlhIGRpIGdyYWZpY2kgYSBxdWVzdGEgcGVyIGV2aXRhcmUgZGkgcmlzY3JpdmVyZSB0dXR0byBpbCBjb2RpY2UgZGlcclxuICogZ2VuZXJhemlvbmUgZGVsbGUgc2VyaWUgaW4gY2FzbyBzaSBmb3NzZXJvIHVzYXRpIGdyYWZpY2kgZGkgYWx0cmUgbGlicmVyaWVcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJhc2VBZGFwdGVyIGltcGxlbWVudHMgSUJhc2VBZGFwdGVyIHtcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWF0b3JlIGRhaSBkYXRpIGRlbGxhIGxpYnJlcmlhIHZlY2NoaWEgYWkgZGF0aSBkZWxsYSBsaWJyZXJpYSBudW92YSBwZXIgZ2xpIEFyZWEgQ2hhcnRcclxuICAgICAqL1xyXG4gICAgYWRhcHREYXRhRm9yQXJlYUNoYXJ0KGFueURhdGE6IGFueSk6IEFyZWFDaGFydERhdGEge1xyXG4gICAgICAgIHJldHVybiBhbnlEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhc2Zvcm1hdG9yZSBkYWkgZGF0aSBkZWxsYSBsaWJyZXJpYSB2ZWNjaGlhIGFpIGRhdGkgZGVsbGEgbGlicmVyaWEgbnVvdmEgcGVyIGkgTGluZSBDaGFydFxyXG4gICAgICovXHJcbiAgICBhZGFwdERhdGFGb3JMaW5lQ2hhcnQoYW55RGF0YTogYW55KTogTGluZUNoYXJ0RGF0YSB7XHJcbiAgICAgICAgcmV0dXJuIGFueURhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWF0b3JlIGRhaSBkYXRpIGRlbGxhIGxpYnJlcmlhIHZlY2NoaWEgYWkgZGF0aSBkZWxsYSBsaWJyZXJpYSBudW92YSBwZXIgaSBMaW5lIENoYXJ0XHJcbiAgICAgKi9cclxuICAgIGFkYXB0RGF0YUZvclBpZUNoYXJ0KGFueURhdGE6IGFueSk6IFBpZUNoYXJ0RGF0YSB7XHJcbiAgICAgICAgcmV0dXJuIGFueURhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWF0b3JlIGRhaSBkYXRpIGRlbGxhIGxpYnJlcmlhIHZlY2NoaWEgYWkgZGF0aSBkZWxsYSBsaWJyZXJpYSBudW92YSBwZXIgaSBWZXJ0aWNhbCBDaGFydFxyXG4gICAgICovXHJcbiAgICBhZGFwdERhdGFGb3JWZXJ0aWNhbENoYXJ0KGFueURhdGE6IGFueSk6IFZlcnRpY2FsQ2hhcnREYXRhIHtcclxuICAgICAgICByZXR1cm4gYW55RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXNmb3JtYXRvcmUgZGFpIGRhdGkgZGVsbGEgbGlicmVyaWEgdmVjY2hpYSBhaSBkYXRpIGRlbGxhIGxpYnJlcmlhIG51b3ZhIHBlciBpIFZlcnRpY2FsIENoYXJ0IGEgZHVlIGRpbWVuc2lvbmlcclxuICAgICAqL1xyXG4gICAgYWRhcHREYXRhRm9yVmVydGljYWwyRENoYXJ0KGFueURhdGE6IGFueSk6IFZlcnRpY2FsMkRDaGFydERhdGEge1xyXG4gICAgICAgIHJldHVybiBhbnlEYXRhO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRyYXNmb3JtYXRvcmUgZGFpIGRhdGkgZGVsbGEgbGlicmVyaWEgdmVjY2hpYSBhaSBkYXRpIGRlbGxhIGxpYnJlcmlhIG51b3ZhIHBlciBpIFZlcnRpY2FsIENoYXJ0IHNvdnJhcHBvc3RpXHJcbiAgICAgKi9cclxuICAgIGFkYXB0RGF0YUZvclZlcnRpY2FsU3RhY2tlZENoYXJ0KGFueURhdGE6IGFueSk6IFZlcnRpY2FsU3RhY2tlZENoYXJ0RGF0YSB7XHJcbiAgICAgICAgcmV0dXJuIGFueURhdGE7XHJcbiAgICB9XHJcbn0iXX0=
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import { Input, Output, EventEmitter, ContentChild, Directive } from '@angular/core';
|
|
3
|
+
import * as am4core from "@amcharts/amcharts4/core";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../models/core";
|
|
6
|
+
/**
|
|
7
|
+
* Componente Grafico Base che gestisce tutte le cose comuni dei vari grafici istanziabili, come la presenza o menu di una legenda,
|
|
8
|
+
* il tema utilizzato, il locale del singolo grafico, ecc ecc...
|
|
9
|
+
*/
|
|
10
|
+
export class BaseChartComponent {
|
|
11
|
+
/**
|
|
12
|
+
* Costruttore
|
|
13
|
+
*
|
|
14
|
+
* @param {ElementRef} el Contenitore all'interno del cui viene creato il grafico. Utilizzato per estrapolarne la **ContainerHeight**
|
|
15
|
+
* @param {Object} platformId piattaforma Angular (browser, ecc...) per essere sicuri che amcharts venga attivato solo lato browser. Non utilizzando SSR nelle applicazioni che consumano questa libreria non è particolarmente significativo, ma non si sa mai
|
|
16
|
+
* @param {NgZone} zone NgZone di default per permettere di inizializzare il grafico all'infuori di Angular per avere qualche prestazione in più
|
|
17
|
+
* @param {ChartLoader} Charter Istanza del Loader che si occuperà di caricare in memoria tutto ciò che serve per il grafico attuale (temi, locale, animazioni, ecc...)
|
|
18
|
+
* @param {ChartDispatcher} Dispatcher Istanza del Dispatcher che si occupa di differire il caricamento dei grafici 1 dopo l'altro in modo che caricamenti pseudo paralleli incasinino tutto
|
|
19
|
+
* @param {boolean} logs Indica se effettuare log a console o meno, iniettato dalle classi specializzate dal token ESC_LOGS
|
|
20
|
+
* @param {boolean} animations Indica se per questo grafico devono essere attive o meno le animazioni. Impostazione generica presa dal token ESC_ANIMATIONS
|
|
21
|
+
* @param {string} locale Indica il locale specifico per questo grafico. Impostazione generica presa dal token ESC_LOCALE
|
|
22
|
+
* @param {string} theme Indica il tema specifico per questo grafico. Impostazione generica presa dal token ESC_THEME
|
|
23
|
+
*/
|
|
24
|
+
constructor(el, platformId, zone, Charter, Dispatcher, logs, animations, locale, theme) {
|
|
25
|
+
this.el = el;
|
|
26
|
+
this.platformId = platformId;
|
|
27
|
+
this.zone = zone;
|
|
28
|
+
this.Charter = Charter;
|
|
29
|
+
this.Dispatcher = Dispatcher;
|
|
30
|
+
this.logs = logs;
|
|
31
|
+
this.animations = animations;
|
|
32
|
+
this.locale = locale;
|
|
33
|
+
this.theme = theme;
|
|
34
|
+
/**
|
|
35
|
+
* Nome del grafico, fondamentale assegnarlo per permettere alla libreria di schedularne la creazione
|
|
36
|
+
*/
|
|
37
|
+
this.name = "";
|
|
38
|
+
/**
|
|
39
|
+
* Dopo aver navigato a un nuovo grafico verranno attesi questi millisecondi prima di richiedere i dati attraverso la **DataRetrieve**.
|
|
40
|
+
*
|
|
41
|
+
* Questo per evitare che l'utente cliccando velocemente "avanti" generi tonnellate di richieste inutili
|
|
42
|
+
*/
|
|
43
|
+
this.BrowseDelayMs = 500;
|
|
44
|
+
/**
|
|
45
|
+
* Evento lanciato sulla selezione di un range di dati o dalla timeline o dal grafico. Valido per tutti i grafici che supportano serie basate sulle date
|
|
46
|
+
*/
|
|
47
|
+
this.onSelectionChanged = new EventEmitter();
|
|
48
|
+
/**
|
|
49
|
+
* Evento lanciato dal click di una serie dalla Legenda, a patto che l'Input **HideSeriesOnLabelClick** sia impostato a false
|
|
50
|
+
*/
|
|
51
|
+
this.onSeriesClicked = new EventEmitter();
|
|
52
|
+
/**
|
|
53
|
+
* Evento lanciato all'inizio del caricamento di una nuova pagina del grafico
|
|
54
|
+
*/
|
|
55
|
+
this.onLoadStart = new EventEmitter();
|
|
56
|
+
/**
|
|
57
|
+
* Evento lanciato al termine del caricamento di una nuova pagina del grafico
|
|
58
|
+
*/
|
|
59
|
+
this.onLoadEnd = new EventEmitter();
|
|
60
|
+
/**
|
|
61
|
+
* Serve a decidere se sarà presente l'interfaccia di paginazione
|
|
62
|
+
*/
|
|
63
|
+
this.isPaged = false;
|
|
64
|
+
/**
|
|
65
|
+
* @ignore
|
|
66
|
+
*/
|
|
67
|
+
this.initDone = false;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Metodo di inizializzazione post valorizzazione degli input, utilizzato per valorizzare correttamente le proprietà essenziali del grafico (Animazioni, Tema e Locale)
|
|
71
|
+
*
|
|
72
|
+
* Viene data priorità ai Settings (HTML), priorità secondaria agli Input diretti (Lato HTML), priorità ultima alle impostazioni globali,
|
|
73
|
+
* impostate in fase di import del modulo assegnando valori ai token ESC_LOCALE, ESC_ANIMATIONS, ESC_THEME
|
|
74
|
+
*/
|
|
75
|
+
ngOnInit() {
|
|
76
|
+
// Qui servono solo le variabili da conoscere PRE-graficazione per il caricamento dei moduli lazy del grafico
|
|
77
|
+
this.Animations = this.Settings?.Animations != null ? this.Settings?.Animations : (this.Animations != null ? this.Animations : this.animations);
|
|
78
|
+
this.Theme = this.Settings?.Theme != null ? this.Settings?.Theme : (this.Theme != null ? this.Theme : this.theme);
|
|
79
|
+
this.Locale = this.Settings?.Locale != null ? this.Settings?.Locale : (this.Locale != null ? this.Locale : this.locale);
|
|
80
|
+
this.isPaged = (this.DataArray && this.DataArray.length > 0 && !this.Data) || (this.DataDtos && this.DataDtos.length > 0 && !!this.DataRetrieve);
|
|
81
|
+
this.log("Chart " + this.name + ": ngOnInit");
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Implementazione utilizzata per controllare eventuali proprietà chiave del grafico e rigraficare tutto qualora si rivelasse necessario
|
|
85
|
+
*
|
|
86
|
+
* @param {SimpleChanges} changes Indicazione dei cambiamenti sulle proprietà del grafico. Vedere documentazione Angular in merito
|
|
87
|
+
*/
|
|
88
|
+
ngOnChanges(changes) {
|
|
89
|
+
if (!this.initDone)
|
|
90
|
+
return;
|
|
91
|
+
this.log("Chart " + this.name + ": ngOnChanges");
|
|
92
|
+
let propsToCheck = ["Timeline", "Legend", "Settings", "Animations", "Theme", "Locale", ...this.getSpecificPropertiesToCheck()];
|
|
93
|
+
this.checkPropertiesAndRegraphicateAsNeeded(changes, propsToCheck);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Nel post inizializzazione, a patto che mi trovi in ambiente "browser", proseguo al caricamento del grafico sull'HTML
|
|
97
|
+
*/
|
|
98
|
+
ngAfterViewInit() {
|
|
99
|
+
if (!this.name)
|
|
100
|
+
throw "a Unique name is mandatory to create a chart";
|
|
101
|
+
this.log("Chart " + this.name + ": ngAfterViewInit, graphicating chart outside Angular");
|
|
102
|
+
if (!this.isPaged)
|
|
103
|
+
this.dispatchLoadChart();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* All'onDestroy scarico il grafico per liberare memoria
|
|
107
|
+
*/
|
|
108
|
+
ngOnDestroy() {
|
|
109
|
+
if (this.Chart) {
|
|
110
|
+
this.log("Chart " + this.name + ": Unloading destroyed chart");
|
|
111
|
+
this.browserOnly(() => { this.Chart.dispose(); this.Dispatcher.deregisterGraph(this.name); });
|
|
112
|
+
}
|
|
113
|
+
else
|
|
114
|
+
this.log("Chart " + this.name + ": Unloading uncreated chart component. It probably was a duplicated");
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Registra il grafico attuale nel Dispatcher in modo che venga caricato appena possibile
|
|
118
|
+
*/
|
|
119
|
+
dispatchLoadChart() {
|
|
120
|
+
this.browserOnly(() => {
|
|
121
|
+
this.Dispatcher.register(this.name, () => { return this.loadChart(); });
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Il caricamento del grafico funziona nel seguente modo:
|
|
126
|
+
*
|
|
127
|
+
* 1) Caricamento del tema e delle animazioni, qualora necessari
|
|
128
|
+
*
|
|
129
|
+
* 2) Caricamento delle impostazioni specifiche e integrazione con le impostazioni generiche
|
|
130
|
+
*
|
|
131
|
+
* 3) Graficazione
|
|
132
|
+
*
|
|
133
|
+
* 4) Caricamento del locale
|
|
134
|
+
*/
|
|
135
|
+
loadChart() {
|
|
136
|
+
this.log("Chart " + this.name + ": Start loading Modules if needed");
|
|
137
|
+
return Promise.all([
|
|
138
|
+
this.setupAmChartsThemes().then(() => {
|
|
139
|
+
this.log("Chart " + this.name + ": Graphicating after modules load");
|
|
140
|
+
var castedSettings = this.getCastedSettings();
|
|
141
|
+
this.fillSettings(castedSettings);
|
|
142
|
+
this.fillSpecificSettings(castedSettings);
|
|
143
|
+
this.ChartService = this.graphicate(castedSettings);
|
|
144
|
+
this.Chart = this.ChartService.ChartInstance;
|
|
145
|
+
if (!this.Chart)
|
|
146
|
+
this.log("Chart " + this.name + ": Could not create graph");
|
|
147
|
+
return this.Charter.applyLocale(this.Chart, this.Locale).then(() => this.initDone = true);
|
|
148
|
+
})
|
|
149
|
+
]);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Riempimento delle impostazioni nella classe Settings. Si danno priorità ai valori già impostati nei Settings,
|
|
153
|
+
* integrando eventualmente con le proprietà del grafico
|
|
154
|
+
*
|
|
155
|
+
* @param {BaseSettings} settings Impostazioni base ricevute dalla specializzazione del grafico
|
|
156
|
+
*/
|
|
157
|
+
fillSettings(settings) {
|
|
158
|
+
// Merge degli Input con i Settings, dando priorità ai Settings
|
|
159
|
+
settings.Theme = settings.Theme ? settings.Theme : this.Theme;
|
|
160
|
+
settings.Locale = settings.Locale ? settings.Locale : this.Locale;
|
|
161
|
+
settings.Animations = settings.Animations != null ? settings.Animations : this.Animations;
|
|
162
|
+
settings.Legend = settings.Legend != null ? settings.Legend : this.Legend;
|
|
163
|
+
settings.Name = settings.Name ? settings.Name : this.name;
|
|
164
|
+
settings.Timeline = settings.Timeline != null ? settings.Timeline : this.Timeline;
|
|
165
|
+
settings.AdaptLabelSizeAndOrientation = settings.AdaptLabelSizeAndOrientation != null ? settings.AdaptLabelSizeAndOrientation : this.AdaptLabelSizeAndOrientation;
|
|
166
|
+
settings.XAxisTitle = settings.XAxisTitle ? settings.XAxisTitle : this.XTitle;
|
|
167
|
+
settings.YAxisTitle = settings.YAxisTitle ? settings.YAxisTitle : this.YTitle;
|
|
168
|
+
settings.LegendPosition = settings.LegendPosition ? settings.LegendPosition : this.LegendPosition;
|
|
169
|
+
settings.HideSeriesOnLabelClick = settings.HideSeriesOnLabelClick != null ? settings.HideSeriesOnLabelClick : this.HideSeriesOnLabelClick;
|
|
170
|
+
settings.MinGridDistance = settings.MinGridDistance != null ? settings.MinGridDistance : this.MinGridDistance;
|
|
171
|
+
settings.LegendPadding = settings.LegendPadding ? settings.LegendPadding : this.LegendPadding ?? null;
|
|
172
|
+
settings.ContainerHeight = this.el.nativeElement.parentElement.offsetHeight;
|
|
173
|
+
settings.OnSeriesClickCallback = (series) => { this.onSeriesClicked.emit(series); };
|
|
174
|
+
settings.OnSelectionChangedCallback = (event) => { this.onSelectionChanged.emit({ from: event.from, to: event.to, initial: event.initial }); };
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Controlla i cambiamenti avvenuti alle proprietà chiave e rieffettua la graficazione qualora necessario
|
|
178
|
+
*
|
|
179
|
+
* @param {SimpleChanges} changes Indicazione della modifiche avvenute nei vari Input
|
|
180
|
+
* @param {string[]} propsToCheck Lista degli Input da controllare per cui una modifica causa una rigraficazione
|
|
181
|
+
*/
|
|
182
|
+
checkPropertiesAndRegraphicateAsNeeded(changes, propsToCheck) {
|
|
183
|
+
let toReGraphicate = false;
|
|
184
|
+
for (let i = 0; i < propsToCheck.length; i++)
|
|
185
|
+
toReGraphicate = toReGraphicate || (changes[propsToCheck[i]] && changes[propsToCheck[i]].currentValue);
|
|
186
|
+
if (toReGraphicate)
|
|
187
|
+
this.reloadChart();
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Funzione che effettua un cambio di pagina per i grafici paginati. Qualora **data** fosse nullo significa che è iniziato un caricamento
|
|
191
|
+
* e anche lato applicativo il DataRetrieve dovrà considerare che l'assenza di valori non è altro che un'indicazione di inizio caricamento
|
|
192
|
+
*
|
|
193
|
+
* Il caricamento di qualsiasi pagina genererà comunque una primo evento con **data** nullo in modo da indicare l'inizio caricamento e
|
|
194
|
+
* in seconda istanza un altro evento in cui **data** sarà sempre valorizzato, o con il Dto da usare per recuperare i dati, o con i dati
|
|
195
|
+
* veri e propri già presenti nel **DataArray**
|
|
196
|
+
*
|
|
197
|
+
* I callback **onLoadStart** e **onLoadEnd** vengono sempre chiamati
|
|
198
|
+
*
|
|
199
|
+
* @param {{ data: LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any, index: number }} nd Indice del caricamento dati, con eventualmente già i dati se disponibili
|
|
200
|
+
*/
|
|
201
|
+
changePage(nd) {
|
|
202
|
+
if (!nd.data) {
|
|
203
|
+
this.loadingChart = true;
|
|
204
|
+
// Serve per informare l'applicativo in listening sull'indice attualmente in visualizzazione.
|
|
205
|
+
// La mancanza di dati indica che non devono essere effettuate ricerche per ora
|
|
206
|
+
if (this.DataRetrieve)
|
|
207
|
+
this.DataRetrieve(null, nd.index);
|
|
208
|
+
this.onLoadStart.emit();
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (this.DataRetrieve)
|
|
212
|
+
this.DataRetrieve(nd.data, nd.index).then(t => { this.changePageDataReceived(t); });
|
|
213
|
+
else
|
|
214
|
+
this.changePageDataReceived(nd.data);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Al termine del caricamento dei dati di una pagina questo metodo viene chiamato per rigraficare la situazione con i nuovi dati
|
|
218
|
+
*
|
|
219
|
+
* @param {LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any} data Dati del grafico
|
|
220
|
+
*/
|
|
221
|
+
changePageDataReceived(data) {
|
|
222
|
+
this.loadingChart = false;
|
|
223
|
+
this.onLoadEnd.emit();
|
|
224
|
+
let firstBind = !this.Data;
|
|
225
|
+
this.Data = data;
|
|
226
|
+
if (!firstBind)
|
|
227
|
+
this.reloadChart();
|
|
228
|
+
else
|
|
229
|
+
this.dispatchLoadChart();
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Ricarica il grafico distruggendo il vecchio e ricreando il nuovo
|
|
233
|
+
*
|
|
234
|
+
* Le chiamate a questo metodo possono essere trasformate in chiamate al metodo **graphicate** della Service, se solo quel metodo fosse abbastanza intelligente per capire
|
|
235
|
+
* le differenze fra il grafico com'era prima e come deve diventare, in modo da non ricrearlo ma semplicemente modificare quello che già è disegnato
|
|
236
|
+
*/
|
|
237
|
+
reloadChart() {
|
|
238
|
+
this.browserOnly(() => { if (!this.Chart.isDisposed())
|
|
239
|
+
this.Chart.dispose(); this.Dispatcher.deregisterGraph(this.name); });
|
|
240
|
+
this.Dispatcher.register(this.name, () => { return this.loadChart(); });
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Funzione che si occupa di caricare i temi necessari per il grafico in oggetto. Prima applica il tema, poi, se serve, applica le animazioni
|
|
244
|
+
*/
|
|
245
|
+
setupAmChartsThemes() {
|
|
246
|
+
return Promise.all([
|
|
247
|
+
this.Charter.applyTheme(am4core, this.Theme).then(() => {
|
|
248
|
+
return this.Animations ? this.Charter.applyAnimations(am4core) : this.Charter.unapplyAnimations(am4core);
|
|
249
|
+
})
|
|
250
|
+
]);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* @ignore
|
|
254
|
+
*/
|
|
255
|
+
log(log) {
|
|
256
|
+
if (this.logs)
|
|
257
|
+
console.log("@esfaenza/es-charts: " + log);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* @ignore
|
|
261
|
+
*/
|
|
262
|
+
browserOnly(f) {
|
|
263
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
264
|
+
this.zone.runOutsideAngular(() => {
|
|
265
|
+
f();
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
BaseChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseChartComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
271
|
+
BaseChartComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaseChartComponent, inputs: { XTitle: "XTitle", YTitle: "YTitle", Settings: "Settings", Legend: "Legend", LegendPosition: "LegendPosition", Timeline: "Timeline", name: "name", Animations: "Animations", Theme: "Theme", Locale: "Locale", HideSeriesOnLabelClick: "HideSeriesOnLabelClick", MinGridDistance: "MinGridDistance", AdaptLabelSizeAndOrientation: "AdaptLabelSizeAndOrientation", LegendPadding: "LegendPadding", DataDtos: "DataDtos", DataDtoStartIndex: "DataDtoStartIndex", DataRetrieve: "DataRetrieve", BrowseDelayMs: "BrowseDelayMs" }, outputs: { onSelectionChanged: "onSelectionChanged", onSeriesClicked: "onSeriesClicked", onLoadStart: "onLoadStart", onLoadEnd: "onLoadEnd" }, queries: [{ propertyName: "header_tr", first: true, predicate: ["header"], descendants: true }, { propertyName: "loading_template", first: true, predicate: ["loading"], descendants: true }], usesOnChanges: true, ngImport: i0 });
|
|
272
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseChartComponent, decorators: [{
|
|
273
|
+
type: Directive
|
|
274
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Object }, { type: i0.NgZone }, { type: i1.ChartLoader }, { type: i1.ChartDispatcher }, { type: undefined }, { type: undefined }, { type: undefined }, { type: undefined }]; }, propDecorators: { XTitle: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], YTitle: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], Settings: [{
|
|
279
|
+
type: Input
|
|
280
|
+
}], Legend: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}], LegendPosition: [{
|
|
283
|
+
type: Input
|
|
284
|
+
}], Timeline: [{
|
|
285
|
+
type: Input
|
|
286
|
+
}], name: [{
|
|
287
|
+
type: Input
|
|
288
|
+
}], Animations: [{
|
|
289
|
+
type: Input
|
|
290
|
+
}], Theme: [{
|
|
291
|
+
type: Input
|
|
292
|
+
}], Locale: [{
|
|
293
|
+
type: Input
|
|
294
|
+
}], HideSeriesOnLabelClick: [{
|
|
295
|
+
type: Input
|
|
296
|
+
}], MinGridDistance: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], AdaptLabelSizeAndOrientation: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], LegendPadding: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], DataDtos: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], DataDtoStartIndex: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], DataRetrieve: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], BrowseDelayMs: [{
|
|
309
|
+
type: Input
|
|
310
|
+
}], header_tr: [{
|
|
311
|
+
type: ContentChild,
|
|
312
|
+
args: ['header', { static: false }]
|
|
313
|
+
}], loading_template: [{
|
|
314
|
+
type: ContentChild,
|
|
315
|
+
args: ['loading', { static: false }]
|
|
316
|
+
}], onSelectionChanged: [{
|
|
317
|
+
type: Output
|
|
318
|
+
}], onSeriesClicked: [{
|
|
319
|
+
type: Output
|
|
320
|
+
}], onLoadStart: [{
|
|
321
|
+
type: Output
|
|
322
|
+
}], onLoadEnd: [{
|
|
323
|
+
type: Output
|
|
324
|
+
}] } });
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UvYmFzZS1jaGFydC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBc0UsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQVksU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBTy9LLE9BQU8sS0FBSyxPQUFPLE1BQU0sMEJBQTBCLENBQUM7OztBQUdwRDs7O0dBR0c7QUFFSCxNQUFNLE9BQWdCLGtCQUFrQjtJQXlMdEM7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsWUFBb0IsRUFBYyxFQUFVLFVBQWtCLEVBQVUsSUFBWSxFQUFVLE9BQW9CLEVBQVUsVUFBMkIsRUFBVSxJQUFhLEVBQ3BLLFVBQW1CLEVBQVUsTUFBYyxFQUFVLEtBQWE7UUFEeEQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVE7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBUztRQUNwSyxlQUFVLEdBQVYsVUFBVSxDQUFTO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQVE7UUF2SzVFOztXQUVHO1FBQ00sU0FBSSxHQUFXLEVBQUUsQ0FBQztRQTBEM0I7Ozs7V0FJRztRQUNNLGtCQUFhLEdBQVcsR0FBRyxDQUFDO1FBWXJDOztXQUVHO1FBQ08sdUJBQWtCLEdBQTZELElBQUksWUFBWSxFQUE4QyxDQUFDO1FBRXhKOztXQUVHO1FBQ08sb0JBQWUsR0FBeUIsSUFB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QUFJLENBQUMsTUFBTSxDQUFDO1FBQzFFLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMxRCxRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2xGLFFBQVEsQ0FBQyw0QkFBNEIsR0FBRyxRQUFRLENBQUMsNEJBQTRCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztRQUNsSyxRQUFRLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDOUUsUUFBUSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzlFLFFBQVEsQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNsRyxRQUFRLENBQUMsc0JBQXNCLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDMUksUUFBUSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENB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QTNhbUIsa0JBQWtCO21HQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEdkMsU0FBUzttRkF1TWdELE1BQU0sMkxBak1yRCxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csTUFBTTtzQkFBZCxLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csTUFBTTtzQkFBZCxLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFPRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csTUFBTTtzQkFBZCxLQUFLO2dCQU1HLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFPRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBT0csYUFBYTtzQkFBckIsS0FBSztnQkFLcUMsU0FBUztzQkFBbkQsWUFBWTt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUtHLGdCQUFnQjtzQkFBM0QsWUFBWTt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUtoQyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBS0csZUFBZTtzQkFBeEIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElucHV0LCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXMsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDb250ZW50Q2hpbGQsIE9wdGlvbmFsLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IElCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgQmFzZVNldHRpbmdzLCBMZWdlbmRQYWQgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBDaGFydExvYWRlciwgQ2hhcnREaXNwYXRjaGVyIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb3JlXCI7XHJcbmltcG9ydCB7IFBhZ2VkQ2hhcnREYXRhLCBMaW5lQ2hhcnREYXRhLCBQaWVDaGFydERhdGEsIFZlcnRpY2FsMkRDaGFydERhdGEsIFZlcnRpY2FsQ2hhcnREYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RhdGEnO1xyXG5cclxuaW1wb3J0ICogYXMgYW00Y29yZSBmcm9tIFwiQGFtY2hhcnRzL2FtY2hhcnRzNC9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIGFtNGNoYXJ0cyBmcm9tIFwiQGFtY2hhcnRzL2FtY2hhcnRzNC9jaGFydHNcIjtcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIEdyYWZpY28gQmFzZSBjaGUgZ2VzdGlzY2UgdHV0dGUgbGUgY29zZSBjb211bmkgZGVpIHZhcmkgZ3JhZmljaSBpc3RhbnppYWJpbGksIGNvbWUgbGEgcHJlc2VuemEgbyBtZW51IGRpIHVuYSBsZWdlbmRhLFxyXG4gKiBpbCB0ZW1hIHV0aWxpenphdG8sIGlsIGxvY2FsZSBkZWwgc2luZ29sbyBncmFmaWNvLCBlY2MgZWNjLi4uXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICAvKipcclxuICAgKiBUaXRvbG8gcGVyIGwnYXNzZSBYXHJcbiAgICovXHJcbiAgQElucHV0KCkgWFRpdGxlOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRpdG9sbyBwZXIgbCdhc3NlIFlcclxuICAgKi9cclxuICBASW5wdXQoKSBZVGl0bGU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YXppb25pIGRpIGJhc2VcclxuICAgKi9cclxuICBASW5wdXQoKSBTZXR0aW5nczogQmFzZVNldHRpbmdzO1xyXG5cclxuICAvKipcclxuICAgKiBQcmVzZW56YSBvIG1lbm8gZGVsbGEgbGVnZW5kYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIExlZ2VuZDogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogUG9zaXppb25lIGRlbGxhIGxlZ2VuZGFcclxuICAgKi9cclxuICBASW5wdXQoKSBMZWdlbmRQb3NpdGlvbjogXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogUHJlc2VuemEgbyBtZW5vIGRlbGxhIHRpbWVsaW5lXHJcbiAgICovXHJcbiAgQElucHV0KCkgVGltZWxpbmU6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIE5vbWUgZGVsIGdyYWZpY28sIGZvbmRhbWVudGFsZSBhc3NlZ25hcmxvIHBlciBwZXJtZXR0ZXJlIGFsbGEgbGlicmVyaWEgZGkgc2NoZWR1bGFybmUgbGEgY3JlYXppb25lXHJcbiAgICovXHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogVXRpbGl6em8gbyBtZW5vIGRlbGxlIGFuaW1hemlvbmkuIFNlbnphIGFuaW1hemlvbmkgaWwgZ3JhZmljbyDDqCBsZWdnZXJtZW50ZSBwacO5IHBlcmZvcm1hbnRlLCBzcGVjaWFsbWVudGUgYWxsJ2F1bWVudGFyZSBkZWkgcHVudGkgbmVsbGEgc2VyaWVcclxuICAgKi9cclxuICBASW5wdXQoKSBBbmltYXRpb25zOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBUZW1hIGRhIHV0aWxpenphcmUsIHZhbGlkbyBzb2xvIHBlciBpbCBncmFmaWNvIGluIHF1ZXN0aW9uZS4gR2xpIGFsdHJpIGdyYWZpY2kgZGVsbGEgcGFnaW5hIHBvc3Nvbm8gYXZlcmUgc3RpbGkgZGl2ZXJzaS5cclxuICAgKiBcclxuICAgKiBFc3NlbmRvIGkgdGVtaSBjYXJpY2F0aSBpbiBtYW5pZXJhIGFzaW5jcm9uYSBpbiBiYXNlIGFsbCd1dGlsaXp6byB1dGlsaXp6YXJuZSB0YW50aSBkaXZlcnNpIGluIHVuJ3VuaWNhIHBhZ2luYSBwb3RyZWJiZSByYWxsZW50YXJlIGlsIHByaW1vIGNhcmljYW1lbnRvXHJcbiAgICovXHJcbiAgQElucHV0KCkgVGhlbWU6ICdzcGlyaXRlZGF3YXknIHwgJ21vb25yaXNla2luZ2RvbScgfCAnZnJvemVuJyB8ICdkYXJrJyB8ICdrZWxseScgfCAnbWF0ZXJpYWwnIHwgJ2RhdGF2aXonIHwgJ25vbmUnO1xyXG5cclxuICAvKipcclxuICAgKiBMb2NhbGUgZGVsIHNpbmdvbG8gZ3JhZmljb1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIExvY2FsZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2Egc2UgdXRpbGl6emFyZSBpbCBjb21wb3J0YW1lbnRvIGRpIGRlZmF1bHQgcGVyIGkgY2xpY2sgZGVsbGUgc2VyaWUgc3VsbGEgTGVnZW5kYS4gTWV0dGVuZG8gcXVlc3RhIHZhcmlhYmlsZSBhICoqZmFsc2UqKlxyXG4gICAqIGUgY29sbGVnYW5kbyBsJ291dHB1dCAqKm9uU2VyaWVzQ2xpY2tlZCoqIMOoIHBvc3NpYmlsZSBnZW5lcmFyZSB1biBldmVudG8gb2duaSB2b2x0YSBjaGUgbCd1dGVudGUgZmEgY2xpY2sgc3UgdW5hIHNlcmllIGRlbGxhIExlZ2VuZGFcclxuICAgKi9cclxuICBASW5wdXQoKSBIaWRlU2VyaWVzT25MYWJlbENsaWNrOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBNaW5pbWEgZGlzdGFuemEgbmVsbGEgZ3JpZ2xpYSBmcmEgaSB2YWxvcmksIG1vZGlmaWNhIGxhIHF1YW50aXTDoCBkaSBzdGVwIGZyYSBpIHZhbG9yaSBkZWxsJ2Fzc2UgWCBlIHF1aW5kaSBsYSBncmFudWxhcml0w6AgZGVpIGRhdGkuXHJcbiAgICogXHJcbiAgICogUGnDuSBwaWNjb2xhIMOoLCBwacO5IHZhbG9yaSB2ZXJyYW5ubyBpbnNlcml0aSBuZWxsJ2Fzc2UgWFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIE1pbkdyaWREaXN0YW5jZTogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBDZXJjYSBkaSBhZ2dpdXN0YXJlIGkgdmFyaSBzdGVwIGRlbGwnYXNzZSBYIHJ1b3RhbmRvbGkgZSBkaW1pbnVlbmRvbmUgbGUgZGltZW5zaW9uaSBhYmJhc3RhbnphIHBlciBtb3N0cmFybmUgaWwgcGnDuSBwb3NzaWJpbGVcclxuICAgKi9cclxuICBASW5wdXQoKSBBZGFwdExhYmVsU2l6ZUFuZE9yaWVudGF0aW9uOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBQYWRkaW5nIGRhIGFwcGxpY2FyZSBhbGxhIExlZ2VuZGEgaW4gY2FzbyBzaSB2b2dsaWEgc3Bvc3RhcmUgdW4gcG8nXHJcbiAgICovXHJcbiAgQElucHV0KCkgTGVnZW5kUGFkZGluZzogTGVnZW5kUGFkO1xyXG5cclxuICAvKipcclxuICAgKiBMaXN0YSBkaSBkdG8gZ2VuZXJpY2kgY2hlIHZlcnJhbm5vIGVtZXNzaSBkYWwgc2lzdGVtYSBkaSBncmFmaWNpIHVubyBwZXIgdW5vIGF0dHJhdmVyc28gbGEgZnVuemlvbmUgKipEYXRhUmV0cmlldmUqKiwgY2hlIGRvdnJhbm5vIGVzc2VyZVxyXG4gICAqIHVzYXRpIHBlciB1YW4gc29ydGEgZGkgY2FyaWNhbWVudG8gXCJwYWdpbmF0b1wiIGRlaSBncmFmaWNpXHJcbiAgICovXHJcbiAgQElucHV0KCkgRGF0YUR0b3M6IGFueVtdO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2UgZGVsbCdhcnJheSAqKkRhdGFEdG9zKiogbyBkZWxsJ2FycmF5ICoqRGF0YUFycmF5KiogZGEgY3VpIGluaXppYXJlIGFkIGVtZXR0ZXJlIGkgdmFsb3JpLCB1dGlsZSBwZXIgc3VwcG9ydGFyZSBpbCBcImJhY2tcIiBkYSB1biBldmVudHVhbGUgcGFnaW5hIGRpIGRldHRhZ2xpb1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIERhdGFEdG9TdGFydEluZGV4OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGRlZmluaXRhIGxhdG8gYXBwbGljYXRpdm8gY2hlIGluIGJhc2UgYWwgKipEYXRhRHRvKiogY29ycmVudGUgcmVzdGl0dWlzY2UgdW5hIFByb21pc2UgZGVsIHRpcG8gZGkgZGF0aSByaWNoaWVzdG8gcGVyIGlsIGdyYWZpY28gY29ycmVudGVcclxuICAgKi9cclxuICBASW5wdXQoKSBEYXRhUmV0cmlldmU6IChkdG86IGFueSwgaW5kZXg6IG51bWJlcikgPT4gUHJvbWlzZTxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBEb3BvIGF2ZXIgbmF2aWdhdG8gYSB1biBudW92byBncmFmaWNvIHZlcnJhbm5vIGF0dGVzaSBxdWVzdGkgbWlsbGlzZWNvbmRpIHByaW1hIGRpIHJpY2hpZWRlcmUgaSBkYXRpIGF0dHJhdmVyc28gbGEgKipEYXRhUmV0cmlldmUqKi5cclxuICAgKiBcclxuICAgKiBRdWVzdG8gcGVyIGV2aXRhcmUgY2hlIGwndXRlbnRlIGNsaWNjYW5kbyB2ZWxvY2VtZW50ZSBcImF2YW50aVwiIGdlbmVyaSB0b25uZWxsYXRlIGRpIHJpY2hpZXN0ZSBpbnV0aWxpXHJcbiAgICovXHJcbiAgQElucHV0KCkgQnJvd3NlRGVsYXlNczogbnVtYmVyID0gNTAwO1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlc3RhemlvbmUgZGVpIGdyYWZpY2kgbmVsIGNhc28gc2kgdXRpbGl6emkgbGEgbW9kYWxpdMOgIHBhZ2luYXRhXHJcbiAgICovXHJcbiAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGhlYWRlcl90cjtcclxuXHJcbiAgLyoqXHJcbiAgICogTWVzc2FnZ2lvIGRpIGNhcmljYW1lbnRvIGZyYSB1biBncmFmaWNvIGUgbCdhbHRybyBcclxuICAgKi9cclxuICBAQ29udGVudENoaWxkKCdsb2FkaW5nJywgeyBzdGF0aWM6IGZhbHNlIH0pIGxvYWRpbmdfdGVtcGxhdGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBzdWxsYSBzZWxlemlvbmUgZGkgdW4gcmFuZ2UgZGkgZGF0aSBvIGRhbGxhIHRpbWVsaW5lIG8gZGFsIGdyYWZpY28uIFZhbGlkbyBwZXIgdHV0dGkgaSBncmFmaWNpIGNoZSBzdXBwb3J0YW5vIHNlcmllIGJhc2F0ZSBzdWxsZSBkYXRlXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHsgZnJvbTogRGF0ZSwgdG86IERhdGUsIGluaXRpYWw6IGJvb2xlYW4gfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZnJvbTogRGF0ZSwgdG86IERhdGUsIGluaXRpYWw6IGJvb2xlYW4gfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGxhbmNpYXRvIGRhbCBjbGljayBkaSB1bmEgc2VyaWUgZGFsbGEgTGVnZW5kYSwgYSBwYXR0byBjaGUgbCdJbnB1dCAqKkhpZGVTZXJpZXNPbkxhYmVsQ2xpY2sqKiBzaWEgaW1wb3N0YXRvIGEgZmFsc2VcclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25TZXJpZXNDbGlja2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gbGFuY2lhdG8gYWxsJ2luaXppbyBkZWwgY2FyaWNhbWVudG8gZGkgdW5hIG51b3ZhIHBhZ2luYSBkZWwgZ3JhZmljb1xyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvbkxvYWRTdGFydDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gbGFuY2lhdG8gYWwgdGVybWluZSBkZWwgY2FyaWNhbWVudG8gZGkgdW5hIG51b3ZhIHBhZ2luYSBkZWwgZ3JhZmljb1xyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvbkxvYWRFbmQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2VydmUgYSBkZWNpZGVyZSBzZSBzYXLDoCBwcmVzZW50ZSBsJ2ludGVyZmFjY2lhIGRpIHBhZ2luYXppb25lXHJcbiAgICovXHJcbiAgcHVibGljIGlzUGFnZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaW5pdERvbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSXN0YW56YSBuYXRpdmEgZGVsIGdyYWZpY28gYW1jaGFydHMuIFF1YWxzaWFzaSBjb3NhIG5vbiBmYSBxdWVzdGEgbGlicmVyaWEgc2kgcHXDsiBwcmVuZGVyZSBxdWVzdGEgaXN0YW56YSBlIG1vZGlmaWNhcmUgYSBwaWFjaW1lbnRvXHJcbiAgICovXHJcbiAgcHVibGljIENoYXJ0OiBhbTRjaGFydHMuQ2hhcnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlcnZpemlvIGRpIGdyYWZpY2F6aW9uZSBkZWwgZ3JhZmljb1xyXG4gICAqL1xyXG4gIHB1YmxpYyBDaGFydFNlcnZpY2U6IElCYXNlU2VydmljZTxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBWYXJpYWJpbGUgY2hlIGluZGljYSBzZSB1bmEgbnVvdmEgcGFnaW5hIGRlbCBncmFmaWNvIMOoIGluIGZhc2UgZGkgY2FyaWNhbWVudG9cclxuICAgKi9cclxuICBwdWJsaWMgbG9hZGluZ0NoYXJ0OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBEYXRpIGRlbCBncmFmaWNvLiBPZ25pIGltcGxlbWVudGF6aW9uZSBnZXN0aXLDoCBxdWVzdGEgdmFyaWFiaWxlIGluIGJhc2UgYWwgcHJvcHJpbyB0aXBvIGRpIERhdGlcclxuICAgKi9cclxuICBhYnN0cmFjdCBEYXRhOiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGkgZGVsIGdyYWZpY28gaW4gbW9kYWxpdMOgIHBhZ2luYXRhLCBwZXIgcXVhbmRvIHR1dHRlIGxlIHBhZ2luZSBzb25vIHByZWNhcmljYXRlIGluIG1lbW9yaWEgKGluIGNhc28gY29udHJhcmlvIHZlcnJlYmJlcsOyIHV0aWxpenphdGkgaSAqKkRhdGFEdG9zKiopXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgRGF0YUFycmF5OiBQYWdlZENoYXJ0RGF0YTxhbnk+W107XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBsZSBwcm9wcmlldMOgIHNwZWNpZmljYSBwZXIgdW5hIGRhdGEgaW1wbGVtZW50YXppb25lIGNoZSBkZXZvbm8gY2F1c2FyZSB1biByZXBhaW50IGRlbCBncmFmaWNvXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgZ2V0U3BlY2lmaWNQcm9wZXJ0aWVzVG9DaGVjaygpOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGdlbmVyaWNvIGRpIGdyYWZpY2F6aW9uZSwgcmVpbXBsZW1lbnRhdG8gZGFsbGUgdmFyaWUgaW1wbGVtZW50YXppb25pXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgZ3JhcGhpY2F0ZShjYXN0ZWRTZXR0aW5ncyk6IElCYXNlU2VydmljZTxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gZ2VuZXJpY28gY2hlIHByZW5kZSBsZSBpbXBvc3RhemlvbmkgZ2VuZXJpY2hlIGRlbCBncmFmaWNvIGUgbGUgY2FzdGEgYWxsYSB0aXBvbG9naWEgZ2l1c3RhIHBlciBpbCBncmFmaWNvIHNwZWNpZmljb1xyXG4gICAqL1xyXG4gIGFic3RyYWN0IGdldENhc3RlZFNldHRpbmdzKCk6IGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBcIlJpZW1waWVcIiBsYSBjbGFzc2UgZGVsbGUgaW1wb3N0YXppb25pIGNvbiB0dXR0ZSBsZSBpbXBvc3Rhemlvbmkgc3BlY2lmaWNoZSBwYXNzYXRlIGEgdW4gZGF0byBncmFmaWNvIGNvbWUgSW5wdXRcclxuICAgKi9cclxuICBhYnN0cmFjdCBmaWxsU3BlY2lmaWNTZXR0aW5ncyhzZXR0aW5nc0Nhc3RlZCk6IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvc3RydXR0b3JlXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtFbGVtZW50UmVmfSBlbCBDb250ZW5pdG9yZSBhbGwnaW50ZXJubyBkZWwgY3VpIHZpZW5lIGNyZWF0byBpbCBncmFmaWNvLiBVdGlsaXp6YXRvIHBlciBlc3RyYXBvbGFybmUgbGEgKipDb250YWluZXJIZWlnaHQqKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwbGF0Zm9ybUlkIHBpYXR0YWZvcm1hIEFuZ3VsYXIgKGJyb3dzZXIsIGVjYy4uLikgcGVyIGVzc2VyZSBzaWN1cmkgY2hlIGFtY2hhcnRzIHZlbmdhIGF0dGl2YXRvIHNvbG8gbGF0byBicm93c2VyLiBOb24gdXRpbGl6emFuZG8gU1NSIG5lbGxlIGFwcGxpY2F6aW9uaSBjaGUgY29uc3VtYW5vIHF1ZXN0YSBsaWJyZXJpYSBub24gw6ggcGFydGljb2xhcm1lbnRlIHNpZ25pZmljYXRpdm8sIG1hIG5vbiBzaSBzYSBtYWlcclxuICAgKiBAcGFyYW0ge05nWm9uZX0gem9uZSBOZ1pvbmUgZGkgZGVmYXVsdCBwZXIgcGVybWV0dGVyZSBkaSBpbml6aWFsaXp6YXJlIGlsIGdyYWZpY28gYWxsJ2luZnVvcmkgZGkgQW5ndWxhciBwZXIgYXZlcmUgcXVhbGNoZSBwcmVzdGF6aW9uZSBpbiBwacO5XHJcbiAgICogQHBhcmFtIHtDaGFydExvYWRlcn0gQ2hhcnRlciBJc3RhbnphIGRlbCBMb2FkZXIgY2hlIHNpIG9jY3VwZXLDoCBkaSBjYXJpY2FyZSBpbiBtZW1vcmlhIHR1dHRvIGNpw7IgY2hlIHNlcnZlIHBlciBpbCBncmFmaWNvIGF0dHVhbGUgKHRlbWksIGxvY2FsZSwgYW5pbWF6aW9uaSwgZWNjLi4uKVxyXG4gICAqIEBwYXJhbSB7Q2hhcnREaXNwYXRjaGVyfSBEaXNwYXRjaGVyIElzdGFuemEgZGVsIERpc3BhdGNoZXIgY2hlIHNpIG9jY3VwYSBkaSBkaWZmZXJpcmUgaWwgY2FyaWNhbWVudG8gZGVpIGdyYWZpY2kgMSBkb3BvIGwnYWx0cm8gaW4gbW9kbyBjaGUgY2FyaWNhbWVudGkgcHNldWRvIHBhcmFsbGVsaSBpbmNhc2luaW5vIHR1dHRvXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBsb2dzIEluZGljYSBzZSBlZmZldHR1YXJlIGxvZyBhIGNvbnNvbGUgbyBtZW5vLCBpbmlldHRhdG8gZGFsbGUgY2xhc3NpIHNwZWNpYWxpenphdGUgZGFsIHRva2VuIEVTQ19MT0dTXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBhbmltYXRpb25zIEluZGljYSBzZSBwZXIgcXVlc3RvIGdyYWZpY28gZGV2b25vIGVzc2VyZSBhdHRpdmUgbyBtZW5vIGxlIGFuaW1hemlvbmkuIEltcG9zdGF6aW9uZSBnZW5lcmljYSBwcmVzYSBkYWwgdG9rZW4gRVNDX0FOSU1BVElPTlNcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxlIEluZGljYSBpbCBsb2NhbGUgc3BlY2lmaWNvIHBlciBxdWVzdG8gZ3JhZmljby4gSW1wb3N0YXppb25lIGdlbmVyaWNhIHByZXNhIGRhbCB0b2tlbiBFU0NfTE9DQUxFXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRoZW1lIEluZGljYSBpbCB0ZW1hIHNwZWNpZmljbyBwZXIgcXVlc3RvIGdyYWZpY28uIEltcG9zdGF6aW9uZSBnZW5lcmljYSBwcmVzYSBkYWwgdG9rZW4gRVNDX1RIRU1FXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3QsIHByaXZhdGUgem9uZTogTmdab25lLCBwcml2YXRlIENoYXJ0ZXI6IENoYXJ0TG9hZGVyLCBwcml2YXRlIERpc3BhdGNoZXI6IENoYXJ0RGlzcGF0Y2hlciwgcHJpdmF0ZSBsb2dzOiBib29sZWFuLCBcclxuICAgIHByaXZhdGUgYW5pbWF0aW9uczogYm9vbGVhbiwgcHJpdmF0ZSBsb2NhbGU6IHN0cmluZywgcHJpdmF0ZSB0aGVtZTogc3RyaW5nKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGRpIGluaXppYWxpenphemlvbmUgcG9zdCB2YWxvcml6emF6aW9uZSBkZWdsaSBpbnB1dCwgdXRpbGl6emF0byBwZXIgdmFsb3JpenphcmUgY29ycmV0dGFtZW50ZSBsZSBwcm9wcmlldMOgIGVzc2VuemlhbGkgZGVsIGdyYWZpY28gKEFuaW1hemlvbmksIFRlbWEgZSBMb2NhbGUpXHJcbiAgICogXHJcbiAgICogVmllbmUgZGF0YSBwcmlvcml0w6AgYWkgU2V0dGluZ3MgKEhUTUwpLCBwcmlvcml0w6Agc2Vjb25kYXJpYSBhZ2xpIElucHV0IGRpcmV0dGkgKExhdG8gSFRNTCksIHByaW9yaXTDoCB1bHRpbWEgYWxsZSBpbXBvc3RhemlvbmkgZ2xvYmFsaSxcclxuICAgKiBpbXBvc3RhdGUgaW4gZmFzZSBkaSBpbXBvcnQgZGVsIG1vZHVsbyBhc3NlZ25hbmRvIHZhbG9yaSBhaSB0b2tlbiBFU0NfTE9DQUxFLCBFU0NfQU5JTUFUSU9OUywgRVNDX1RIRU1FXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBRdWkgc2Vydm9ubyBzb2xvIGxlIHZhcmlhYmlsaSBkYSBjb25vc2NlcmUgUFJFLWdyYWZpY2F6aW9uZSBwZXIgaWwgY2FyaWNhbWVudG8gZGVpIG1vZHVsaSBsYXp5IGRlbCBncmFmaWNvXHJcblxyXG4gICAgdGhpcy5BbmltYXRpb25zID0gdGhpcy5TZXR0aW5ncz8uQW5pbWF0aW9ucyAhPSBudWxsID8gdGhpcy5TZXR0aW5ncz8uQW5pbWF0aW9ucyA6ICh0aGlzLkFuaW1hdGlvbnMgIT0gbnVsbCA/IHRoaXMuQW5pbWF0aW9ucyA6IHRoaXMuYW5pbWF0aW9ucylcclxuICAgIHRoaXMuVGhlbWUgPSB0aGlzLlNldHRpbmdzPy5UaGVtZSAhPSBudWxsID8gdGhpcy5TZXR0aW5ncz8uVGhlbWUgOiAodGhpcy5UaGVtZSAhPSBudWxsID8gdGhpcy5UaGVtZSA6IDxhbnk+dGhpcy50aGVtZSlcclxuICAgIHRoaXMuTG9jYWxlID0gdGhpcy5TZXR0aW5ncz8uTG9jYWxlICE9IG51bGwgPyB0aGlzLlNldHRpbmdzPy5Mb2NhbGUgOiAodGhpcy5Mb2NhbGUgIT0gbnVsbCA/IHRoaXMuTG9jYWxlIDogdGhpcy5sb2NhbGUpXHJcblxyXG4gICAgdGhpcy5pc1BhZ2VkID0gKHRoaXMuRGF0YUFycmF5ICYmIHRoaXMuRGF0YUFycmF5Lmxlbmd0aCA+IDAgJiYgIXRoaXMuRGF0YSkgfHwgKHRoaXMuRGF0YUR0b3MgJiYgdGhpcy5EYXRhRHRvcy5sZW5ndGggPiAwICYmICEhdGhpcy5EYXRhUmV0cmlldmUpO1xyXG4gICAgdGhpcy5sb2coXCJDaGFydCBcIiArIHRoaXMubmFtZSArIFwiOiBuZ09uSW5pdFwiKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcGxlbWVudGF6aW9uZSB1dGlsaXp6YXRhIHBlciBjb250cm9sbGFyZSBldmVudHVhbGkgcHJvcHJpZXTDoCBjaGlhdmUgZGVsIGdyYWZpY28gZSByaWdyYWZpY2FyZSB0dXR0byBxdWFsb3JhIHNpIHJpdmVsYXNzZSBuZWNlc3NhcmlvXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtTaW1wbGVDaGFuZ2VzfSBjaGFuZ2VzIEluZGljYXppb25lIGRlaSBjYW1iaWFtZW50aSBzdWxsZSBwcm9wcmlldMOgIGRlbCBncmFmaWNvLiBWZWRlcmUgZG9jdW1lbnRhemlvbmUgQW5ndWxhciBpbiBtZXJpdG9cclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdERvbmUpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmxvZyhcIkNoYXJ0IFwiICsgdGhpcy5uYW1lICsgXCI6IG5nT25DaGFuZ2VzXCIpO1xyXG5cclxuICAgIGxldCBwcm9wc1RvQ2hlY2sgPSBbXCJUaW1lbGluZVwiLCBcIkxlZ2VuZFwiLCBcIlNldHRpbmdzXCIsIFwiQW5pbWF0aW9uc1wiLCBcIlRoZW1lXCIsIFwiTG9jYWxlXCIsIC4uLnRoaXMuZ2V0U3BlY2lmaWNQcm9wZXJ0aWVzVG9DaGVjaygpXTtcclxuICAgIHRoaXMuY2hlY2tQcm9wZXJ0aWVzQW5kUmVncmFwaGljYXRlQXNOZWVkZWQoY2hhbmdlcywgcHJvcHNUb0NoZWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5lbCBwb3N0IGluaXppYWxpenphemlvbmUsIGEgcGF0dG8gY2hlIG1pIHRyb3ZpIGluIGFtYmllbnRlIFwiYnJvd3NlclwiLCBwcm9zZWd1byBhbCBjYXJpY2FtZW50byBkZWwgZ3JhZmljbyBzdWxsJ0hUTUxcclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMubmFtZSlcclxuICAgICAgdGhyb3cgXCJhIFVuaXF1ZSBuYW1lIGlzIG1hbmRhdG9yeSB0byBjcmVhdGUgYSBjaGFydFwiO1xyXG5cclxuICAgIHRoaXMubG9nKFwiQ2hhcnQgXCIgKyB0aGlzLm5hbWUgKyBcIjogbmdBZnRlclZpZXdJbml0LCBncmFwaGljYXRpbmcgY2hhcnQgb3V0c2lkZSBBbmd1bGFyXCIpO1xyXG5cclxuICAgIGlmKCF0aGlzLmlzUGFnZWQpXHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hMb2FkQ2hhcnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbCdvbkRlc3Ryb3kgc2NhcmljbyBpbCBncmFmaWNvIHBlciBsaWJlcmFyZSBtZW1vcmlhXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5DaGFydCkge1xyXG4gICAgICB0aGlzLmxvZyhcIkNoYXJ0IFwiICsgdGhpcy5uYW1lICsgXCI6IFVubG9hZGluZyBkZXN0cm95ZWQgY2hhcnRcIik7XHJcbiAgICAgIHRoaXMuYnJvd3Nlck9ubHkoKCkgPT4geyB0aGlzLkNoYXJ0LmRpc3Bvc2UoKTsgdGhpcy5EaXNwYXRjaGVyLmRlcmVnaXN0ZXJHcmFwaCh0aGlzLm5hbWUpIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmxvZyhcIkNoYXJ0IFwiICsgdGhpcy5uYW1lICsgXCI6IFVubG9hZGluZyB1bmNyZWF0ZWQgY2hhcnQgY29tcG9uZW50LiBJdCBwcm9iYWJseSB3YXMgYSBkdXBsaWNhdGVkXCIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0cmEgaWwgZ3JhZmljbyBhdHR1YWxlIG5lbCBEaXNwYXRjaGVyIGluIG1vZG8gY2hlIHZlbmdhIGNhcmljYXRvIGFwcGVuYSBwb3NzaWJpbGVcclxuICAgKi9cclxuICBwcml2YXRlIGRpc3BhdGNoTG9hZENoYXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5icm93c2VyT25seSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuRGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzLm5hbWUsICgpID0+IHsgcmV0dXJuIHRoaXMubG9hZENoYXJ0KCk7IH0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElsIGNhcmljYW1lbnRvIGRlbCBncmFmaWNvIGZ1bnppb25hIG5lbCBzZWd1ZW50ZSBtb2RvOlxyXG4gICAqIFxyXG4gICAqIDEpIENhcmljYW1lbnRvIGRlbCB0ZW1hIGUgZGVsbGUgYW5pbWF6aW9uaSwgcXVhbG9yYSBuZWNlc3NhcmlcclxuICAgKiBcclxuICAgKiAyKSBDYXJpY2FtZW50byBkZWxsZSBpbXBvc3Rhemlvbmkgc3BlY2lmaWNoZSBlIGludGVncmF6aW9uZSBjb24gbGUgaW1wb3N0YXppb25pIGdlbmVyaWNoZVxyXG4gICAqIFxyXG4gICAqIDMpIEdyYWZpY2F6aW9uZVxyXG4gICAqIFxyXG4gICAqIDQpIENhcmljYW1lbnRvIGRlbCBsb2NhbGVcclxuICAgKi9cclxuICBwcml2YXRlIGxvYWRDaGFydCgpIHtcclxuICAgIHRoaXMubG9nKFwiQ2hhcnQgXCIgKyB0aGlzLm5hbWUgKyBcIjogU3RhcnQgbG9hZGluZyBNb2R1bGVzIGlmIG5lZWRlZFwiKTtcclxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXHJcbiAgICAgIHRoaXMuc2V0dXBBbUNoYXJ0c1RoZW1lcygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9nKFwiQ2hhcnQgXCIgKyB0aGlzLm5hbWUgKyBcIjogR3JhcGhpY2F0aW5nIGFmdGVyIG1vZHVsZXMgbG9hZFwiKTtcclxuXHJcbiAgICAgICAgdmFyIGNhc3RlZFNldHRpbmdzID0gdGhpcy5nZXRDYXN0ZWRTZXR0aW5ncygpO1xyXG4gICAgICAgIHRoaXMuZmlsbFNldHRpbmdzKGNhc3RlZFNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLmZpbGxTcGVjaWZpY1NldHRpbmdzKGNhc3RlZFNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLkNoYXJ0U2VydmljZSA9IHRoaXMuZ3JhcGhpY2F0ZShjYXN0ZWRTZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5DaGFydCA9IHRoaXMuQ2hhcnRTZXJ2aWNlLkNoYXJ0SW5zdGFuY2U7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5DaGFydCkgdGhpcy5sb2coXCJDaGFydCBcIiArIHRoaXMubmFtZSArIFwiOiBDb3VsZCBub3QgY3JlYXRlIGdyYXBoXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5DaGFydGVyLmFwcGx5TG9jYWxlKHRoaXMuQ2hhcnQsIHRoaXMuTG9jYWxlKS50aGVuKCgpID0+IHRoaXMuaW5pdERvbmUgPSB0cnVlKTtcclxuICAgICAgfSlcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmllbXBpbWVudG8gZGVsbGUgaW1wb3N0YXppb25pIG5lbGxhIGNsYXNzZSBTZXR0aW5ncy4gU2kgZGFubm8gcHJpb3JpdMOgIGFpIHZhbG9yaSBnacOgIGltcG9zdGF0aSBuZWkgU2V0dGluZ3MsIFxyXG4gICAqIGludGVncmFuZG8gZXZlbnR1YWxtZW50ZSBjb24gbGUgIHByb3ByaWV0w6AgZGVsIGdyYWZpY29cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge0Jhc2VTZXR0aW5nc30gc2V0dGluZ3MgSW1wb3N0YXppb25pIGJhc2UgcmljZXZ1dGUgZGFsbGEgc3BlY2lhbGl6emF6aW9uZSBkZWwgZ3JhZmljb1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZmlsbFNldHRpbmdzKHNldHRpbmdzOiBCYXNlU2V0dGluZ3MpIHtcclxuXHJcbiAgICAvLyBNZXJnZSBkZWdsaSBJbnB1dCBjb24gaSBTZXR0aW5ncywgZGFuZG8gcHJpb3JpdMOgIGFpIFNldHRpbmdzXHJcblxyXG4gICAgc2V0dGluZ3MuVGhlbWUgPSBzZXR0aW5ncy5UaGVtZSA/IHNldHRpbmdzLlRoZW1lIDogdGhpcy5UaGVtZTtcclxuICAgIHNldHRpbmdzLkxvY2FsZSA9IHNldHRpbmdzLkxvY2FsZSA/IHNldHRpbmdzLkxvY2FsZSA6IHRoaXMuTG9jYWxlO1xyXG4gICAgc2V0dGluZ3MuQW5pbWF0aW9ucyA9IHNldHRpbmdzLkFuaW1hdGlvbnMgIT0gbnVsbCA/IHNldHRpbmdzLkFuaW1hdGlvbnMgOiB0aGlzLkFuaW1hdGlvbnM7XHJcblxyXG4gICAgc2V0dGluZ3MuTGVnZW5kID0gc2V0dGluZ3MuTGVnZW5kICE9IG51bGwgPyBzZXR0aW5ncy5MZWdlbmQgOiB0aGlzLkxlZ2VuZDtcclxuICAgIHNldHRpbmdzLk5hbWUgPSBzZXR0aW5ncy5OYW1lID8gc2V0dGluZ3MuTmFtZSA6IHRoaXMubmFtZTtcclxuICAgIHNldHRpbmdzLlRpbWVsaW5lID0gc2V0dGluZ3MuVGltZWxpbmUgIT0gbnVsbCA/IHNldHRpbmdzLlRpbWVsaW5lIDogdGhpcy5UaW1lbGluZTtcclxuICAgIHNldHRpbmdzLkFkYXB0TGFiZWxTaXplQW5kT3JpZW50YXRpb24gPSBzZXR0aW5ncy5BZGFwdExhYmVsU2l6ZUFuZE9yaWVudGF0aW9uICE9IG51bGwgPyBzZXR0aW5ncy5BZGFwdExhYmVsU2l6ZUFuZE9yaWVudGF0aW9uIDogdGhpcy5BZGFwdExhYmVsU2l6ZUFuZE9yaWVudGF0aW9uO1xyXG4gICAgc2V0dGluZ3MuWEF4aXNUaXRsZSA9IHNldHRpbmdzLlhBeGlzVGl0bGUgPyBzZXR0aW5ncy5YQXhpc1RpdGxlIDogdGhpcy5YVGl0bGU7XHJcbiAgICBzZXR0aW5ncy5ZQXhpc1RpdGxlID0gc2V0dGluZ3MuWUF4aXNUaXRsZSA/IHNldHRpbmdzLllBeGlzVGl0bGUgOiB0aGlzLllUaXRsZTtcclxuICAgIHNldHRpbmdzLkxlZ2VuZFBvc2l0aW9uID0gc2V0dGluZ3MuTGVnZW5kUG9zaXRpb24gPyBzZXR0aW5ncy5MZWdlbmRQb3NpdGlvbiA6IHRoaXMuTGVnZW5kUG9zaXRpb247XHJcbiAgICBzZXR0aW5ncy5IaWRlU2VyaWVzT25MYWJlbENsaWNrID0gc2V0dGluZ3MuSGlkZVNlcmllc09uTGFiZWxDbGljayAhPSBudWxsID8gc2V0dGluZ3MuSGlkZVNlcmllc09uTGFiZWxDbGljayA6IHRoaXMuSGlkZVNlcmllc09uTGFiZWxDbGljaztcclxuICAgIHNldHRpbmdzLk1pbkdyaWREaXN0YW5jZSA9IHNldHRpbmdzLk1pbkdyaWREaXN0YW5jZSAhPSBudWxsID8gc2V0dGluZ3MuTWluR3JpZERpc3RhbmNlIDogdGhpcy5NaW5HcmlkRGlzdGFuY2U7XHJcbiAgICBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nID0gc2V0dGluZ3MuTGVnZW5kUGFkZGluZyA/IHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcgOiB0aGlzLkxlZ2VuZFBhZGRpbmcgPz8gbnVsbDtcclxuXHJcbiAgICAoPGFueT5zZXR0aW5ncykuQ29udGFpbmVySGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgKDxhbnk+c2V0dGluZ3MpLk9uU2VyaWVzQ2xpY2tDYWxsYmFjayA9IChzZXJpZXMpID0+IHsgdGhpcy5vblNlcmllc0NsaWNrZWQuZW1pdChzZXJpZXMpOyB9O1xyXG4gICAgKDxhbnk+c2V0dGluZ3MpLk9uU2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNrID0gKGV2ZW50OiB7IGZyb206IERhdGUsIHRvOiBEYXRlLCBpbml0aWFsOiBib29sZWFuIH0pID0+IHsgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7IGZyb206IGV2ZW50LmZyb20sIHRvOiBldmVudC50bywgaW5pdGlhbDogZXZlbnQuaW5pdGlhbCB9KTsgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xsYSBpIGNhbWJpYW1lbnRpIGF2dmVudXRpIGFsbGUgcHJvcHJpZXTDoCBjaGlhdmUgZSByaWVmZmV0dHVhIGxhIGdyYWZpY2F6aW9uZSBxdWFsb3JhIG5lY2Vzc2FyaW9cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge1NpbXBsZUNoYW5nZXN9IGNoYW5nZXMgSW5kaWNhemlvbmUgZGVsbGEgbW9kaWZpY2hlIGF2dmVudXRlIG5laSB2YXJpIElucHV0XHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNUb0NoZWNrIExpc3RhIGRlZ2xpIElucHV0IGRhIGNvbnRyb2xsYXJlIHBlciBjdWkgdW5hIG1vZGlmaWNhIGNhdXNhIHVuYSByaWdyYWZpY2F6aW9uZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hlY2tQcm9wZXJ0aWVzQW5kUmVncmFwaGljYXRlQXNOZWVkZWQoY2hhbmdlczogU2ltcGxlQ2hhbmdlcywgcHJvcHNUb0NoZWNrOiBzdHJpbmdbXSkge1xyXG4gICAgbGV0IHRvUmVHcmFwaGljYXRlID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzVG9DaGVjay5sZW5ndGg7IGkrKylcclxuICAgICAgdG9SZUdyYXBoaWNhdGUgPSB0b1JlR3JhcGhpY2F0ZSB8fCAoY2hhbmdlc1twcm9wc1RvQ2hlY2tbaV1dICYmIGNoYW5nZXNbcHJvcHNUb0NoZWNrW2ldXS5jdXJyZW50VmFsdWUpXHJcblxyXG4gICAgaWYgKHRvUmVHcmFwaGljYXRlKVxyXG4gICAgICB0aGlzLnJlbG9hZENoYXJ0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW56aW9uZSBjaGUgZWZmZXR0dWEgdW4gY2FtYmlvIGRpIHBhZ2luYSBwZXIgaSBncmFmaWNpIHBhZ2luYXRpLiBRdWFsb3JhICoqZGF0YSoqIGZvc3NlIG51bGxvIHNpZ25pZmljYSBjaGUgw6ggaW5pemlhdG8gdW4gY2FyaWNhbWVudG8gXHJcbiAgICogZSBhbmNoZSBsYXRvIGFwcGxpY2F0aXZvIGlsIERhdGFSZXRyaWV2ZSBkb3Zyw6AgY29uc2lkZXJhcmUgY2hlIGwnYXNzZW56YSBkaSB2YWxvcmkgbm9uIMOoIGFsdHJvIGNoZSB1bidpbmRpY2F6aW9uZSBkaSBpbml6aW8gY2FyaWNhbWVudG9cclxuICAgKiBcclxuICAgKiBJbCBjYXJpY2FtZW50byBkaSBxdWFsc2lhc2kgcGFnaW5hIGdlbmVyZXLDoCBjb211bnF1ZSB1bmEgcHJpbW8gZXZlbnRvIGNvbiAqKmRhdGEqKiBudWxsbyBpbiBtb2RvIGRhIGluZGljYXJlIGwnaW5pemlvIGNhcmljYW1lbnRvIGVcclxuICAgKiBpbiBzZWNvbmRhIGlzdGFuemEgdW4gYWx0cm8gZXZlbnRvIGluIGN1aSAqKmRhdGEqKiBzYXLDoCBzZW1wcmUgdmFsb3JpenphdG8sIG8gY29uIGlsIER0byBkYSB1c2FyZSBwZXIgcmVjdXBlcmFyZSBpIGRhdGksIG8gY29uIGkgZGF0aVxyXG4gICAqIHZlcmkgZSBwcm9wcmkgZ2nDoCBwcmVzZW50aSBuZWwgKipEYXRhQXJyYXkqKlxyXG4gICAqIFxyXG4gICAqIEkgY2FsbGJhY2sgKipvbkxvYWRTdGFydCoqIGUgKipvbkxvYWRFbmQqKiB2ZW5nb25vIHNlbXByZSBjaGlhbWF0aVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7eyBkYXRhOiBMaW5lQ2hhcnREYXRhIHwgUGllQ2hhcnREYXRhIHwgVmVydGljYWwyRENoYXJ0RGF0YSB8IFZlcnRpY2FsQ2hhcnREYXRhIHwgYW55LCBpbmRleDogbnVtYmVyIH19IG5kIEluZGljZSBkZWwgY2FyaWNhbWVudG8gZGF0aSwgY29uIGV2ZW50dWFsbWVudGUgZ2nDoCBpIGRhdGkgc2UgZGlzcG9uaWJpbGlcclxuICAgKi9cclxuICBwdWJsaWMgY2hhbmdlUGFnZShuZDogeyBkYXRhOiBMaW5lQ2hhcnREYXRhIHwgUGllQ2hhcnREYXRhIHwgVmVydGljYWwyRENoYXJ0RGF0YSB8IFZlcnRpY2FsQ2hhcnREYXRhIHwgYW55LCBpbmRleDogbnVtYmVyIH0pIHtcclxuICAgIGlmICghbmQuZGF0YSkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdDaGFydCA9IHRydWU7XHJcbiAgICAgIC8vIFNlcnZlIHBlciBpbmZvcm1hcmUgbCdhcHBsaWNhdGl2byBpbiBsaXN0ZW5pbmcgc3VsbCdpbmRpY2UgYXR0dWFsbWVudGUgaW4gdmlzdWFsaXp6YXppb25lLiBcclxuICAgICAgLy8gTGEgbWFuY2FuemEgZGkgZGF0aSBpbmRpY2EgY2hlIG5vbiBkZXZvbm8gZXNzZXJlIGVmZmV0dHVhdGUgcmljZXJjaGUgcGVyIG9yYVxyXG4gICAgICBpZiAodGhpcy5EYXRhUmV0cmlldmUpXHJcbiAgICAgICAgdGhpcy5EYXRhUmV0cmlldmUobnVsbCwgbmQuaW5kZXgpXHJcbiAgICAgIHRoaXMub25Mb2FkU3RhcnQuZW1pdCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRGF0YVJldHJpZXZlKVxyXG4gICAgICB0aGlzLkRhdGFSZXRyaWV2ZShuZC5kYXRhLCBuZC5pbmRleCkudGhlbih0ID0+IHsgdGhpcy5jaGFuZ2VQYWdlRGF0YVJlY2VpdmVkKHQpOyB9KTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jaGFuZ2VQYWdlRGF0YVJlY2VpdmVkKG5kLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWwgdGVybWluZSBkZWwgY2FyaWNhbWVudG8gZGVpIGRhdGkgZGkgdW5hIHBhZ2luYSBxdWVzdG8gbWV0b2RvIHZpZW5lIGNoaWFtYXRvIHBlciByaWdyYWZpY2FyZSBsYSBzaXR1YXppb25lIGNvbiBpIG51b3ZpIGRhdGlcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge0xpbmVDaGFydERhdGEgfCBQaWVDaGFydERhdGEgfCBWZXJ0aWNhbDJEQ2hhcnREYXRhIHwgVmVydGljYWxDaGFydERhdGEgfCBhbnl9IGRhdGEgRGF0aSBkZWwgZ3JhZmljb1xyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hhbmdlUGFnZURhdGFSZWNlaXZlZChkYXRhOiBMaW5lQ2hhcnREYXRhIHwgUGllQ2hhcnREYXRhIHwgVmVydGljYWwyRENoYXJ0RGF0YSB8IFZlcnRpY2FsQ2hhcnREYXRhIHwgYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmdDaGFydCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkxvYWRFbmQuZW1pdCgpO1xyXG4gICAgbGV0IGZpcnN0QmluZCA9ICF0aGlzLkRhdGE7XHJcbiAgICB0aGlzLkRhdGEgPSBkYXRhO1xyXG5cclxuICAgIGlmICghZmlyc3RCaW5kKVxyXG4gICAgICB0aGlzLnJlbG9hZENoYXJ0KCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hMb2FkQ2hhcnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpY2FyaWNhIGlsIGdyYWZpY28gZGlzdHJ1Z2dlbmRvIGlsIHZlY2NoaW8gZSByaWNyZWFuZG8gaWwgbnVvdm9cclxuICAgKiBcclxuICAgKiBMZSBjaGlhbWF0ZSBhIHF1ZXN0byBtZXRvZG8gcG9zc29ubyBlc3NlcmUgdHJhc2Zvcm1hdGUgaW4gY2hpYW1hdGUgYWwgbWV0b2RvICoqZ3JhcGhpY2F0ZSoqIGRlbGxhIFNlcnZpY2UsIHNlIHNvbG8gcXVlbCBtZXRvZG8gZm9zc2UgYWJiYXN0YW56YSBpbnRlbGxpZ2VudGUgcGVyIGNhcGlyZVxyXG4gICAqIGxlIGRpZmZlcmVuemUgZnJhIGlsIGdyYWZpY28gY29tJ2VyYSBwcmltYSBlIGNvbWUgZGV2ZSBkaXZlbnRhcmUsIGluIG1vZG8gZGEgbm9uIHJpY3JlYXJsbyBtYSBzZW1wbGljZW1lbnRlIG1vZGlmaWNhcmUgcXVlbGxvIGNoZSBnacOgIMOoIGRpc2VnbmF0b1xyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkQ2hhcnQoKSB7XHJcbiAgICB0aGlzLmJyb3dzZXJPbmx5KCgpID0+IHsgaWYgKCF0aGlzLkNoYXJ0LmlzRGlzcG9zZWQoKSkgdGhpcy5DaGFydC5kaXNwb3NlKCk7IHRoaXMuRGlzcGF0Y2hlci5kZXJlZ2lzdGVyR3JhcGgodGhpcy5uYW1lKSB9KTtcclxuICAgIHRoaXMuRGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzLm5hbWUsICgpID0+IHsgcmV0dXJuIHRoaXMubG9hZENoYXJ0KCk7IH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuemlvbmUgY2hlIHNpIG9jY3VwYSBkaSBjYXJpY2FyZSBpIHRlbWkgbmVjZXNzYXJpIHBlciBpbCBncmFmaWNvIGluIG9nZ2V0dG8uIFByaW1hIGFwcGxpY2EgaWwgdGVtYSwgcG9pLCBzZSBzZXJ2ZSwgYXBwbGljYSBsZSBhbmltYXppb25pXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXR1cEFtQ2hhcnRzVGhlbWVzKCkge1xyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcclxuICAgICAgdGhpcy5DaGFydGVyLmFwcGx5VGhlbWUoYW00Y29yZSwgdGhpcy5UaGVtZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQW5pbWF0aW9ucyA/IHRoaXMuQ2hhcnRlci5hcHBseUFuaW1hdGlvbnMoYW00Y29yZSkgOiB0aGlzLkNoYXJ0ZXIudW5hcHBseUFuaW1hdGlvbnMoYW00Y29yZSk7XHJcbiAgICAgIH0pXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGxvZyhsb2c6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMubG9ncylcclxuICAgICAgY29uc29sZS5sb2coXCJAZXNmYWVuemEvZXMtY2hhcnRzOiBcIiArIGxvZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgYnJvd3Nlck9ubHkoZjogKCkgPT4gdm9pZCkge1xyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICBmKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { EventEmitter, Component, Input, ChangeDetectionStrategy, Output, ContentChild } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
/**
|
|
5
|
+
* Componente che si occupa della paginazione dei grafici qualora servisse
|
|
6
|
+
*/
|
|
7
|
+
export class PageChartSelector {
|
|
8
|
+
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* Indica un cambio di pagina ed emette un oggetto con i dati attuali e l'indice attuale.
|
|
11
|
+
*
|
|
12
|
+
* Qualora la proprietà **data** fosse null indica un evento di "loading"
|
|
13
|
+
*/
|
|
14
|
+
this.onPageChange = new EventEmitter();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @ignore
|
|
18
|
+
*/
|
|
19
|
+
ngOnChanges() {
|
|
20
|
+
if (!(this.Items || this.Dtos) || (this.Items || this.Dtos).length == 0)
|
|
21
|
+
throw new Error("Chart array cannot be empty!");
|
|
22
|
+
var idx = (this.StartIndex || 0);
|
|
23
|
+
this.currentindex = idx;
|
|
24
|
+
this.currentpage = idx + 1;
|
|
25
|
+
this.handlePageChange();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Gestisce un cambio pagina inviando al callback **onPageChange** i dati attuali (siano essi il Dto per il caricamento dati i
|
|
29
|
+
* o i dati già presenti) e l'indice di visualizzazione
|
|
30
|
+
*/
|
|
31
|
+
handlePageChange() {
|
|
32
|
+
this.finalIndex = this.currentpage - 1;
|
|
33
|
+
this.currentindex = this.currentpage - 1;
|
|
34
|
+
let data = this.Items && this.Items.length > 0 ? this.Items[this.finalIndex].data : this.Dtos[this.finalIndex];
|
|
35
|
+
this.onPageChange.emit({ data: data, index: this.finalIndex });
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Visualizza il grafico successivo
|
|
39
|
+
*/
|
|
40
|
+
Next() {
|
|
41
|
+
// Per passare da page a index è sempre un -1
|
|
42
|
+
this.currentpage++;
|
|
43
|
+
this.onPageChange.emit({ data: null, index: this.currentpage - 1 });
|
|
44
|
+
// Delay pseudo-intelligente per click compulsivi.
|
|
45
|
+
// Se dopo questo delay sono andato avanti solo di 1 effettuo il callback altrimenti incremento l'indice
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
if (this.currentindex == this.currentpage - 2)
|
|
48
|
+
this.handlePageChange();
|
|
49
|
+
else
|
|
50
|
+
this.currentindex++;
|
|
51
|
+
}, this.BrowseDelayMs);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Visualizza il grafico precedente
|
|
55
|
+
*/
|
|
56
|
+
Previous() {
|
|
57
|
+
// Per passare da page a index è sempre un -1
|
|
58
|
+
this.currentpage--;
|
|
59
|
+
this.onPageChange.emit({ data: null, index: this.currentpage - 1 });
|
|
60
|
+
// Delay pseudo-intelligente per click compulsivi.
|
|
61
|
+
// Se dopo questo delay sono andato indietro solo di 1 effettuo il callback altrimenti decremento l'indice
|
|
62
|
+
setTimeout(() => {
|
|
63
|
+
if (this.currentindex == this.currentpage)
|
|
64
|
+
this.handlePageChange();
|
|
65
|
+
else
|
|
66
|
+
this.currentindex--;
|
|
67
|
+
}, this.BrowseDelayMs);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
PageChartSelector.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PageChartSelector, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
71
|
+
PageChartSelector.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: PageChartSelector, selector: "chart-pager", inputs: { Items: "Items", Dtos: "Dtos", BrowseDelayMs: "BrowseDelayMs", StartIndex: "StartIndex" }, outputs: { onPageChange: "onPageChange" }, queries: [{ propertyName: "headerInner_tr", first: true, predicate: ["header_inner"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"(Items || Dtos) && (Items || Dtos).length > 0\" class=\"pcs-no-selection\">\r\n <div class=\"pcs-button pcs-backward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"currentpage != 1 && Previous(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"currentpage == 1 ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-left\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div class=\"pcs-infos\">\r\n <ng-container *ngIf=\"headerInner_tr\">\r\n <ng-container *ngTemplateOutlet=\"headerInner_tr; context : {$implicit: (Items || Dtos)[currentpage - 1]}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"pcs-button pcs-forward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"(Items || Dtos).length != currentpage && Next(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"(Items || Dtos).length == currentpage ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-right\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div style=\"clear: both;\"></div>\r\n</div>", styles: [".pcs-button{width:60px}.pcs-forward{float:right;text-align:end}.pcs-backward{float:left}.pcs-svg-header{width:57px;height:40px}.pcs-svg-button-container{outline:currentcolor none medium}.pcs-svg-arrow{pointer-events:none;fill:#555}.pcs-svg-arrow-right{transform:translate(44px,36px) rotate(180deg)}.pcs-svg-arrow-left{transform:translate(13px,4px)}.pcs-svg-button{fill:#d9d9d9;stroke:#fff;fill-opacity:1;stroke-opacity:1}.pcs-svg-button:hover{fill:#a3a3a3;cursor:pointer}.pcs-infos{width:calc(100% - 120px);height:44px;float:left}.pcs-no-selection{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PageChartSelector, decorators: [{
|
|
73
|
+
type: Component,
|
|
74
|
+
args: [{ selector: "chart-pager", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"(Items || Dtos) && (Items || Dtos).length > 0\" class=\"pcs-no-selection\">\r\n <div class=\"pcs-button pcs-backward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"currentpage != 1 && Previous(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"currentpage == 1 ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-left\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div class=\"pcs-infos\">\r\n <ng-container *ngIf=\"headerInner_tr\">\r\n <ng-container *ngTemplateOutlet=\"headerInner_tr; context : {$implicit: (Items || Dtos)[currentpage - 1]}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"pcs-button pcs-forward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"(Items || Dtos).length != currentpage && Next(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"(Items || Dtos).length == currentpage ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-right\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div style=\"clear: both;\"></div>\r\n</div>", styles: [".pcs-button{width:60px}.pcs-forward{float:right;text-align:end}.pcs-backward{float:left}.pcs-svg-header{width:57px;height:40px}.pcs-svg-button-container{outline:currentcolor none medium}.pcs-svg-arrow{pointer-events:none;fill:#555}.pcs-svg-arrow-right{transform:translate(44px,36px) rotate(180deg)}.pcs-svg-arrow-left{transform:translate(13px,4px)}.pcs-svg-button{fill:#d9d9d9;stroke:#fff;fill-opacity:1;stroke-opacity:1}.pcs-svg-button:hover{fill:#a3a3a3;cursor:pointer}.pcs-infos{width:calc(100% - 120px);height:44px;float:left}.pcs-no-selection{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}\n"] }]
|
|
75
|
+
}], propDecorators: { Items: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}], Dtos: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], BrowseDelayMs: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], StartIndex: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], onPageChange: [{
|
|
84
|
+
type: Output
|
|
85
|
+
}], headerInner_tr: [{
|
|
86
|
+
type: ContentChild,
|
|
87
|
+
args: ['header_inner', { static: false }]
|
|
88
|
+
}] } });
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtcGFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9jaGFydC1wYWdlci9jaGFydC1wYWdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0LXBhZ2VyL2NoYXJ0LXBhZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFHOUc7O0dBRUc7QUFPSCxNQUFNLE9BQU8saUJBQWlCO0lBTjlCO1FBOEJJOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUErQyxJQUFJLFlBQVksRUFBZ0MsQ0FBQztLQStFekg7SUEzREc7O09BRUc7SUFDSCxXQUFXO1FBQ1AsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNuRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFcEQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZ0JBQWdCO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM5RyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDUCw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBFLG1EQUFtRDtRQUNuRCx3R0FBd0c7UUFDeEcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDOztnQkFFeEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVCLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNKLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFcEUsbURBQW1EO1FBQ25ELDBHQUEwRztRQUMxRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxXQUFXO2dCQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzs7Z0JBRXhCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QixDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNCLENBQUM7OzhHQTNHUSxpQkFBaUI7a0dBQWpCLGlCQUFpQixtVUNaOUIsaWlFQXlCTTsyRkRiTyxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0ksYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNOzhCQU90QyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFPSSxZQUFZO3NCQUFyQixNQUFNO2dCQUswQyxjQUFjO3NCQUE5RCxZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPdXRwdXQsIENvbnRlbnRDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYWdlZENoYXJ0RGF0YSB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRhJztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGNoZSBzaSBvY2N1cGEgZGVsbGEgcGFnaW5hemlvbmUgZGVpIGdyYWZpY2kgcXVhbG9yYSBzZXJ2aXNzZVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJjaGFydC1wYWdlclwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiY2hhcnQtcGFnZXIuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogWydjaGFydC1wYWdlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2VDaGFydFNlbGVjdG9yIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3RhIGRlaSBkYXRpIHByZWNhcmljYXRhIGluIG1lbW9yaWFcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgSXRlbXM6IFBhZ2VkQ2hhcnREYXRhPGFueT5bXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3RhIGRlaSBEdG8gZGEgdXRpbGl6emFyZSBwZXIgY2FyaWNhcmUgaSB2YWxvcmkgZGVpIHZhcmkgZ3JhZmljaVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBEdG9zOiBhbnlbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvcG8gYXZlciBuYXZpZ2F0byBhIHVuIG51b3ZvIGdyYWZpY28gdmVycmFubm8gYXR0ZXNpIHF1ZXN0aSBtaWxsaXNlY29uZGkgcHJpbWEgZGkgcmljaGllZGVyZSBpIGRhdGkgYXR0cmF2ZXJzbyBsYSAqKkRhdGFSZXRyaWV2ZSoqLlxyXG4gICAgICogXHJcbiAgICAgKiBRdWVzdG8gcGVyIGV2aXRhcmUgY2hlIGwndXRlbnRlIGNsaWNjYW5kbyB2ZWxvY2VtZW50ZSBcImF2YW50aVwiIGdlbmVyaSB0b25uZWxsYXRlIGRpIHJpY2hpZXN0ZSBpbnV0aWxpXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIEJyb3dzZURlbGF5TXM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2UgZGVsbCdhcnJheSAqKkR0b3MqKiBvIGRlbGwnYXJyYXkgKipJdGVtcyoqIGRhIGN1aSBpbml6aWFyZSBhZCBlbWV0dGVyZSBpIHZhbG9yaSwgdXRpbGUgcGVyIHN1cHBvcnRhcmUgaWwgXCJiYWNrXCIgZGEgdW4gZXZlbnR1YWxlIHBhZ2luYSBkaSBkZXR0YWdsaW9cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgU3RhcnRJbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHVuIGNhbWJpbyBkaSBwYWdpbmEgZWQgZW1ldHRlIHVuIG9nZ2V0dG8gY29uIGkgZGF0aSBhdHR1YWxpIGUgbCdpbmRpY2UgYXR0dWFsZS5cclxuICAgICAqIFxyXG4gICAgICogUXVhbG9yYSBsYSBwcm9wcmlldMOgICoqZGF0YSoqIGZvc3NlIG51bGwgaW5kaWNhIHVuIGV2ZW50byBkaSBcImxvYWRpbmdcIlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnksIGluZGV4OiBudW1iZXIgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55LCBpbmRleDogbnVtYmVyIH0+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdmVycmlkZSBkZWwgdGl0b2xvIGRpIGRlZmF1bHRcclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyX2lubmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGhlYWRlcklubmVyX3RyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY3VycmVudHBhZ2U6IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGN1cnJlbnRpbmRleDogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmluYWxJbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBuZ09uQ2hhbmdlcygpIHtcclxuICAgICAgICBpZiAoISh0aGlzLkl0ZW1zIHx8IHRoaXMuRHRvcykgfHwgKHRoaXMuSXRlbXMgfHwgdGhpcy5EdG9zKS5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hhcnQgYXJyYXkgY2Fubm90IGJlIGVtcHR5IVwiKTtcclxuXHJcbiAgICAgICAgdmFyIGlkeCA9ICh0aGlzLlN0YXJ0SW5kZXggfHwgMCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50aW5kZXggPSBpZHg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IGlkeCArIDE7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXN0aXNjZSB1biBjYW1iaW8gcGFnaW5hIGludmlhbmRvIGFsIGNhbGxiYWNrICoqb25QYWdlQ2hhbmdlKiogaSBkYXRpIGF0dHVhbGkgKHNpYW5vIGVzc2kgaWwgRHRvIHBlciBpbCBjYXJpY2FtZW50byBkYXRpIGkgXHJcbiAgICAgKiBvIGkgZGF0aSBnacOgIHByZXNlbnRpKSBlIGwnaW5kaWNlIGRpIHZpc3VhbGl6emF6aW9uZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5maW5hbEluZGV4ID0gdGhpcy5jdXJyZW50cGFnZSAtIDE7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50aW5kZXggPSB0aGlzLmN1cnJlbnRwYWdlIC0gMTtcclxuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuSXRlbXMgJiYgdGhpcy5JdGVtcy5sZW5ndGggPiAwID8gdGhpcy5JdGVtc1t0aGlzLmZpbmFsSW5kZXhdLmRhdGEgOiB0aGlzLkR0b3NbdGhpcy5maW5hbEluZGV4XVxyXG4gICAgICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoeyBkYXRhOiBkYXRhLCBpbmRleDogdGhpcy5maW5hbEluZGV4IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmlzdWFsaXp6YSBpbCBncmFmaWNvIHN1Y2Nlc3Npdm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIE5leHQoKSB7XHJcbiAgICAgICAgLy8gUGVyIHBhc3NhcmUgZGEgcGFnZSBhIGluZGV4IMOoIHNlbXByZSB1biAtMVxyXG4gICAgICAgIHRoaXMuY3VycmVudHBhZ2UrKztcclxuICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHsgZGF0YTogbnVsbCwgaW5kZXg6IHRoaXMuY3VycmVudHBhZ2UgLSAxIH0pO1xyXG5cclxuICAgICAgICAvLyBEZWxheSBwc2V1ZG8taW50ZWxsaWdlbnRlIHBlciBjbGljayBjb21wdWxzaXZpLiBcclxuICAgICAgICAvLyBTZSBkb3BvIHF1ZXN0byBkZWxheSBzb25vIGFuZGF0byBhdmFudGkgc29sbyBkaSAxIGVmZmV0dHVvIGlsIGNhbGxiYWNrIGFsdHJpbWVudGkgaW5jcmVtZW50byBsJ2luZGljZVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50aW5kZXggPT0gdGhpcy5jdXJyZW50cGFnZSAtIDIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2UoKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50aW5kZXgrKztcclxuICAgICAgICB9LCB0aGlzLkJyb3dzZURlbGF5TXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmlzdWFsaXp6YSBpbCBncmFmaWNvIHByZWNlZGVudGVcclxuICAgICAqL1xyXG4gICAgUHJldmlvdXMoKSB7XHJcbiAgICAgICAgLy8gUGVyIHBhc3NhcmUgZGEgcGFnZSBhIGluZGV4IMOoIHNlbXByZSB1biAtMVxyXG4gICAgICAgIHRoaXMuY3VycmVudHBhZ2UtLTtcclxuICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHsgZGF0YTogbnVsbCwgaW5kZXg6IHRoaXMuY3VycmVudHBhZ2UgLSAxIH0pO1xyXG5cclxuICAgICAgICAvLyBEZWxheSBwc2V1ZG8taW50ZWxsaWdlbnRlIHBlciBjbGljayBjb21wdWxzaXZpLiBcclxuICAgICAgICAvLyBTZSBkb3BvIHF1ZXN0byBkZWxheSBzb25vIGFuZGF0byBpbmRpZXRybyBzb2xvIGRpIDEgZWZmZXR0dW8gaWwgY2FsbGJhY2sgYWx0cmltZW50aSBkZWNyZW1lbnRvIGwnaW5kaWNlXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRpbmRleCA9PSB0aGlzLmN1cnJlbnRwYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKCk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudGluZGV4LS07XHJcbiAgICAgICAgfSwgdGhpcy5Ccm93c2VEZWxheU1zKTtcclxuICAgIH1cclxufSIsIjxkaXYgKm5nSWY9XCIoSXRlbXMgfHwgRHRvcykgJiYgKEl0ZW1zIHx8IER0b3MpLmxlbmd0aCA+IDBcIiBjbGFzcz1cInBjcy1uby1zZWxlY3Rpb25cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwY3MtYnV0dG9uIHBjcy1iYWNrd2FyZFwiPlxyXG4gICAgICAgIDxzdmcgY2xhc3M9XCJwY3Mtc3ZnLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8ZyBjbGFzcz1cInBjcy1zdmctYnV0dG9uLWNvbnRhaW5lclwiIHJvbGU9XCJidXR0b25cIiAoY2xpY2spPVwiY3VycmVudHBhZ2UgIT0gMSAmJiBQcmV2aW91cygpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLVB1bHNhbnRlIGUgZnJlY2NldHRpbmEgYWxsJ2ludGVybm8tLT5cclxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwicGNzLXN2Zy1idXR0b25cIiAgW3N0eWxlLmN1cnNvcl09XCJjdXJyZW50cGFnZSA9PSAxID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJ1wiPjxwYXRoIGQ9XCJNMywwIEw1My4wMjcsMCBhMywzIDAgMCAxIDMsMyBMNTYuMDI3LDM2LjgxNyBhMywzIDAgMCAxIC0zLDMgTDMsMzkuODE3IGEzLDMgMCAwIDEgLTMsLTMgTDAsMyBhMywzIDAgMCAxIDMsLTMgWlwiPjwvcGF0aD48L2c+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBjcy1zdmctYXJyb3cgcGNzLXN2Zy1hcnJvdy1sZWZ0XCI+PHBhdGggZD1cIk0yNiwxNEgxMGw1LjE3LTYuNzlBMiwyLDAsMCwwLDEyLDQuNzlsLTcuNjIsMTBhMiwyLDAsMCwwLDAsMi40Mmw3LjYyLDEwYTIsMiwwLDAsMCwzLjE4LTIuNDJMMTAsMThIMjZhMiwyLDAsMCwwLDAtNFpcIj48L3BhdGg+PC9nPlxyXG4gICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwY3MtaW5mb3NcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVySW5uZXJfdHJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlcklubmVyX3RyOyBjb250ZXh0IDogeyRpbXBsaWNpdDogKEl0ZW1zIHx8IER0b3MpW2N1cnJlbnRwYWdlIC0gMV19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwY3MtYnV0dG9uIHBjcy1mb3J3YXJkXCI+XHJcbiAgICAgICAgPHN2ZyBjbGFzcz1cInBjcy1zdmctaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxnIGNsYXNzPVwicGNzLXN2Zy1idXR0b24tY29udGFpbmVyXCIgcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCIoSXRlbXMgfHwgRHRvcykubGVuZ3RoICE9IGN1cnJlbnRwYWdlICYmIE5leHQoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcIj5cclxuICAgICAgICAgICAgICAgIDwhLS1QdWxzYW50ZSBlIGZyZWNjZXR0aW5hIGFsbCdpbnRlcm5vLS0+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBjcy1zdmctYnV0dG9uXCIgW3N0eWxlLmN1cnNvcl09XCIoSXRlbXMgfHwgRHRvcykubGVuZ3RoID09IGN1cnJlbnRwYWdlID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJ1wiPjxwYXRoIGQ9XCJNMywwIEw1My4wMjcsMCBhMywzIDAgMCAxIDMsMyBMNTYuMDI3LDM2LjgxNyBhMywzIDAgMCAxIC0zLDMgTDMsMzkuODE3IGEzLDMgMCAwIDEgLTMsLTMgTDAsMyBhMywzIDAgMCAxIDMsLTMgWlwiPjwvcGF0aD48L2c+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBjcy1zdmctYXJyb3cgcGNzLXN2Zy1hcnJvdy1yaWdodFwiPjxwYXRoIGQ9XCJNMjYsMTRIMTBsNS4xNy02Ljc5QTIsMiwwLDAsMCwxMiw0Ljc5bC03LjYyLDEwYTIsMiwwLDAsMCwwLDIuNDJsNy42MiwxMGEyLDIsMCwwLDAsMy4xOC0yLjQyTDEwLDE4SDI2YTIsMiwwLDAsMCwwLTRaXCI+PC9wYXRoPjwvZz5cclxuICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwiY2xlYXI6IGJvdGg7XCI+PC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
File without changes
|