@sumaris-net/ngx-components 2.0.0-rc3 → 2.0.0-rc4
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/doc/changelog.md +13 -0
- package/esm2020/src/app/core/form/editor.class.mjs +4 -1
- package/esm2020/src/app/core/form/entity-editor-modal.class.mjs +19 -5
- package/esm2020/src/app/core/form/form.class.mjs +4 -1
- package/esm2020/src/app/core/form/form.utils.mjs +3 -3
- package/esm2020/src/app/core/icon/icon.component.mjs +2 -2
- package/esm2020/src/app/core/services/model/peer.model.mjs +3 -3
- package/esm2020/src/app/core/services/model/referential.model.mjs +11 -3
- package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +1 -1
- package/esm2020/src/app/core/table/table.class.mjs +162 -159
- package/esm2020/src/app/shared/events.mjs +2 -2
- package/esm2020/src/app/shared/graph/graph-colors.mjs +17 -63
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +3 -5
- package/esm2020/src/app/shared/material/chips/material.chips.mjs +2 -3
- package/esm2020/src/app/shared/material/material.animations.mjs +1 -1
- package/esm2020/src/app/shared/material/material.testing.module.mjs +18 -6
- package/esm2020/src/app/shared/observables.mjs +29 -22
- package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +12 -6
- package/esm2020/src/app/shared/testing/observable.test.mjs +96 -0
- package/fesm2015/sumaris-net.ngx-components.mjs +489 -422
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +359 -266
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/form/editor.class.d.ts +1 -0
- package/src/app/core/form/entity-editor-modal.class.d.ts +13 -4
- package/src/app/core/form/form.class.d.ts +1 -0
- package/src/app/core/form/form.utils.d.ts +2 -2
- package/src/app/core/services/model/referential.model.d.ts +6 -1
- package/src/app/core/table/table.class.d.ts +34 -47
- package/src/app/shared/events.d.ts +4 -4
- package/src/app/shared/graph/graph-colors.d.ts +8 -8
- package/src/app/shared/material/material.testing.module.d.ts +9 -8
- package/src/app/shared/observables.d.ts +1 -1
- package/src/app/shared/services/memory-entity-service.class.d.ts +5 -0
- package/src/app/shared/testing/observable.test.d.ts +25 -0
- package/src/theme/_ionic.globals.scss +4 -0
- package/src/theme/_material.globals.scss +3 -1
- package/src/theme/_mixins.scss +3 -3
|
@@ -6,7 +6,7 @@ export function createPromiseEventEmitter() {
|
|
|
6
6
|
}
|
|
7
7
|
export function createPromiseEvent(eventType, promise, initArg) {
|
|
8
8
|
const detail = {
|
|
9
|
-
...(initArg
|
|
9
|
+
...(initArg?.detail || {}),
|
|
10
10
|
...promise
|
|
11
11
|
};
|
|
12
12
|
return new CustomEvent(eventType, { detail });
|
|
@@ -61,4 +61,4 @@ export function fromScrollEndEvent(element, threshold, dueTime) {
|
|
|
61
61
|
return fromEvent(element, 'scroll')
|
|
62
62
|
.pipe(filter(() => isEnd()));
|
|
63
63
|
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN4QyxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE9BQU8sSUFBSSxZQUFZLENBQXFCLElBQUksQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQXFCLFNBQWlCLEVBQ2xCLE9BQStCLEVBQy9CLE9BQTRCO0lBR2hGLE1BQU0sTUFBTSxHQUE0QjtRQUN0QyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDMUIsR0FBRyxPQUFPO0tBQ1gsQ0FBQztJQUNGLE9BQU8sSUFBSSxXQUFXLENBQTZCLFNBQVMsRUFBRSxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBb0IsT0FBeUMsRUFDMUMsU0FBaUIsRUFDakIsT0FBNEI7SUFDN0UsT0FBTyxJQUFJLE9BQU8sQ0FBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUN4QyxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUU7WUFDMUMsT0FBTyxFQUFFLE9BQU87WUFDaEIsS0FBSyxFQUFFLE1BQU07U0FDZCxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFNRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQW9CLEVBQUUsU0FBa0IsRUFBRSxPQUFnQjtJQUUzRixTQUFTLEdBQUcsU0FBUyxJQUFJLEtBQUssQ0FBQztJQUMvQixJQUFJLEtBQW9CLENBQUM7SUFFekIsMEJBQTBCO0lBQzFCLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMzQixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNoRixLQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ1gsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUMxRixPQUFPLFdBQVcsR0FBRyxjQUFjLENBQUM7UUFDdEMsQ0FBQyxDQUFDO0tBQ0g7SUFFRCxzQkFBc0I7U0FDakIsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUNYLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRixPQUFPLFFBQVEsR0FBRyxXQUFXLENBQUM7UUFDaEMsQ0FBQyxDQUFDO0tBQ0g7U0FDSTtRQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsdUVBQXVFLENBQUMsQ0FBQTtLQUN6RjtJQUVELG1GQUFtRjtJQUNuRixJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDZixPQUFPLEtBQUssQ0FDVixTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUM1QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQ2Y7YUFDRSxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQ3RCLENBQUM7S0FDTDtJQUVELE9BQU8sU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7U0FDaEMsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUN0QixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgT2JzZXJ2YWJsZSwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9taXNlRXZlbnRQYXlsb2FkPFIgPSBhbnk+IHtcbiAgc3VjY2VzczogKFIpID0+IHZvaWQ7XG4gIGVycm9yOiAoZXJyOiBhbnkpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFByb21pc2VFdmVudDxSID0gYW55LCBEID0gdm9pZD4gPSBDdXN0b21FdmVudDxQcm9taXNlRXZlbnRQYXlsb2FkPFI+ICYgRD47XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPFIgPSBhbnksIEQgPSB2b2lkPigpOiBFdmVudEVtaXR0ZXI8UHJvbWlzZUV2ZW50PFIsIEQ+PiB7XG4gIHJldHVybiBuZXcgRXZlbnRFbWl0dGVyPFByb21pc2VFdmVudDxSLCBEPj4odHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9taXNlRXZlbnQ8VCA9IHZvaWQsIEQgPSB2b2lkPihldmVudFR5cGU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IFByb21pc2VFdmVudFBheWxvYWQ8VD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0QXJnPzogQ3VzdG9tRXZlbnRJbml0PEQ+XG4gICk6IFByb21pc2VFdmVudDxULCBEPiB7XG5cbiAgY29uc3QgZGV0YWlsID0gPFByb21pc2VFdmVudFBheWxvYWQgJiBEPntcbiAgICAuLi4oaW5pdEFyZz8uZGV0YWlsIHx8IHt9KSxcbiAgICAuLi5wcm9taXNlXG4gIH07XG4gIHJldHVybiBuZXcgQ3VzdG9tRXZlbnQ8UHJvbWlzZUV2ZW50UGF5bG9hZDxUPiAmIEQ+KGV2ZW50VHlwZSwge2RldGFpbH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdFByb21pc2VFdmVudDxUID0gYW55LCBEID0gdm9pZD4oZW1pdHRlcjogRXZlbnRFbWl0dGVyPFByb21pc2VFdmVudDxULCBEPj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRBcmc/OiBDdXN0b21FdmVudEluaXQ8RD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBldmVudCA9IGNyZWF0ZVByb21pc2VFdmVudChldmVudFR5cGUsIHtcbiAgICAgIHN1Y2Nlc3M6IHJlc29sdmUsXG4gICAgICBlcnJvcjogcmVqZWN0XG4gICAgfSwgaW5pdEFyZyk7XG4gICAgZW1pdHRlci5lbWl0KGV2ZW50KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxldGFibGVFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgdGFyZ2V0OiBFdmVudFRhcmdldCAmIHsgY29tcGxldGU/OiAoKSA9PiB2b2lkIH07XG59XG5cbi8qKlxuICogTGlzdGVuIGVuZCBvZiBzY3JvbGwuXG4gKiA8cD5cbiAqICAgVGhlIHRocmVzaG9sZCBkaXN0YW5jZSBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGNvbnRlbnQgdG8gY2FsbCB0aGUgaW5maW5pdGUgb3V0cHV0IGV2ZW50IHdoZW4gc2Nyb2xsZWQuXG4gKiAgIFRoZSB0aHJlc2hvbGQgdmFsdWUgY2FuIGJlIGVpdGhlciBhIHBlcmNlbnQsIG9yIGluIHBpeGVscy5cbiAqICAgRm9yIGV4YW1wbGUsIHVzZSB0aGUgdmFsdWUgb2YgMTAlIGZvciB0aGUgaW5maW5pdGUgb3V0cHV0IGV2ZW50IHRvIGdldCBjYWxsZWQgd2hlbiB0aGUgdXNlciBoYXMgc2Nyb2xsZWRcbiAqICAgMTAlIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZS4gVXNlIHRoZSB2YWx1ZSAxMDBweCB3aGVuIHRoZSBzY3JvbGwgaXMgd2l0aGluIDEwMCBwaXhlbHMgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBwYWdlLlxuICogPC9wPlxuICogQHBhcmFtIGVsZW1lbnRcbiAqIEBwYXJhbSB0aHJlc2hvbGQgZGVmYXVsdCB0byAnMTUlJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVNjcm9sbEVuZEV2ZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0aHJlc2hvbGQ/OiBzdHJpbmcsIGR1ZVRpbWU/OiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gIHRocmVzaG9sZCA9IHRocmVzaG9sZCB8fCAnMTUlJztcbiAgbGV0IGlzRW5kOiAoKSA9PiBib29sZWFuO1xuXG4gIC8vIExpc3RlbiB1c2luZyBwZXJjZW50YWdlXG4gIGlmICh0aHJlc2hvbGQuZW5kc1dpdGgoJyUnKSkge1xuICAgIGNvbnN0IHRocmVzaG9sZFJhdGlvID0gcGFyc2VJbnQodGhyZXNob2xkLnNsaWNlKDAsIHRocmVzaG9sZC5sZW5ndGggLSAxKSkgLyAxMDA7XG4gICAgaXNFbmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbmRQb3NSYXRpbyA9IDEgLSAoZWxlbWVudC5zY3JvbGxUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCkgLyBlbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIHJldHVybiBlbmRQb3NSYXRpbyA8IHRocmVzaG9sZFJhdGlvO1xuICAgIH07XG4gIH1cblxuICAvLyBMaXN0ZW4gdXNpbmcgcGl4ZWxzXG4gIGVsc2UgaWYgKHRocmVzaG9sZC5lbmRzV2l0aCgncHgnKSkge1xuICAgIGNvbnN0IHRocmVzaG9sZFB4ID0gcGFyc2VJbnQodGhyZXNob2xkLnNsaWNlKDAsIHRocmVzaG9sZC5sZW5ndGggLSAyKSk7XG4gICAgaXNFbmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbmRQb3NQeCA9IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gKGVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQpO1xuICAgICAgcmV0dXJuIGVuZFBvc1B4IDwgdGhyZXNob2xkUHg7XG4gICAgfTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXFwndGhyZXNob2xkXFwnLiBFeHBlY3RlZCB2YWx1ZSB1bml0OiBcXCdweFxcJyBvciBcXCclXFwnICcpXG4gIH1cblxuICAvLyBDaGVjayBib3R0b20gcmVhY2gsIGV2ZW4gaWYgTk8gc2Nyb2xsIGV2ZW50IChlLmcuIHdoZW4gYWxyZWFkeSByZWFjaCB0aGUgYm90dG9tKVxuICBpZiAoZHVlVGltZSA+IDApIHtcbiAgICByZXR1cm4gbWVyZ2UoXG4gICAgICBmcm9tRXZlbnQoZWxlbWVudCwgJ3Njcm9sbCcpLFxuICAgICAgdGltZXIoZHVlVGltZSlcbiAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IGlzRW5kKCkpXG4gICAgICApO1xuICB9XG5cbiAgcmV0dXJuIGZyb21FdmVudChlbGVtZW50LCAnc2Nyb2xsJylcbiAgICAucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiBpc0VuZCgpKVxuICAgICk7XG59XG4iXX0=
|
|
@@ -79,14 +79,13 @@ Color.transparent = function () {
|
|
|
79
79
|
// @dynamic
|
|
80
80
|
export class ColorScale {
|
|
81
81
|
constructor(colorArray, options) {
|
|
82
|
-
this.colorArray = colorArray;
|
|
83
82
|
options = options || {};
|
|
84
83
|
// reserved last colors for value > max
|
|
85
84
|
const nbIntervalBeforeUpper = !options.upperMax ? colorArray.length : (colorArray.length - 1);
|
|
86
85
|
this._min = options.min || 0;
|
|
87
86
|
this._max = options.max || nbIntervalBeforeUpper;
|
|
88
87
|
this._rangeSize = Math.round((this._max - this._min) / nbIntervalBeforeUpper);
|
|
89
|
-
this._legendItems = this.
|
|
88
|
+
this._legendItems = this.computeLegendItems(colorArray);
|
|
90
89
|
}
|
|
91
90
|
static default() {
|
|
92
91
|
return ColorScale.custom(25);
|
|
@@ -110,15 +109,21 @@ export class ColorScale {
|
|
|
110
109
|
};
|
|
111
110
|
}
|
|
112
111
|
getValueColor(value) {
|
|
113
|
-
|
|
114
|
-
return this.colorArray[index];
|
|
112
|
+
return this.getLegendForValue(value).color;
|
|
115
113
|
}
|
|
116
|
-
|
|
117
|
-
|
|
114
|
+
getLegendForValue(value) {
|
|
115
|
+
const index = Math.floor(value * (this._legendItems.length - 1) / this._max);
|
|
116
|
+
return this._legendItems[index];
|
|
117
|
+
}
|
|
118
|
+
getLegendAtIndex(index) {
|
|
119
|
+
return this._legendItems[index];
|
|
120
|
+
}
|
|
121
|
+
computeLegendItems(colorArray) {
|
|
122
|
+
return colorArray.map((color, index) => {
|
|
118
123
|
const start = index * this._rangeSize;
|
|
119
124
|
const end = start + this._rangeSize;
|
|
120
125
|
return {
|
|
121
|
-
color,
|
|
126
|
+
color: new Color(color),
|
|
122
127
|
label: (end < this._max) ? `${start.toLocaleString()} - ${end.toLocaleString()}` : ` >= ${start}`
|
|
123
128
|
};
|
|
124
129
|
});
|
|
@@ -127,12 +132,10 @@ export class ColorScale {
|
|
|
127
132
|
ColorScale.custom = (count, options) => {
|
|
128
133
|
options = options || {};
|
|
129
134
|
return new ColorScale(linearColorGradientWithIntermediate(count, {
|
|
130
|
-
opacity: options.opacity,
|
|
131
135
|
startColor: options.startColor || undefined,
|
|
132
136
|
mainColor: options.mainColor || undefined,
|
|
133
137
|
mainColorIndex: isNotNil(options.mainColorIndex) ? options.mainColorIndex : undefined,
|
|
134
|
-
endColor: options.endColor || undefined
|
|
135
|
-
format: options.format
|
|
138
|
+
endColor: options.endColor || undefined
|
|
136
139
|
}), options);
|
|
137
140
|
};
|
|
138
141
|
// Fill colorsMap
|
|
@@ -140,28 +143,6 @@ Object.getOwnPropertyNames(rgbArrayMap)
|
|
|
140
143
|
.forEach((key) => {
|
|
141
144
|
colorsMap[key] = new Color(rgbArrayMap[key], 1, key);
|
|
142
145
|
});
|
|
143
|
-
// Internal function
|
|
144
|
-
function state2side(state) {
|
|
145
|
-
switch (state) {
|
|
146
|
-
case 0:
|
|
147
|
-
return 0;
|
|
148
|
-
case 1:
|
|
149
|
-
return -1;
|
|
150
|
-
case 2:
|
|
151
|
-
return 0;
|
|
152
|
-
case 3:
|
|
153
|
-
return 1;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
const SCALE_OPTIONS_DEFAULT = {
|
|
157
|
-
startColor: rgbArrayMap.red,
|
|
158
|
-
startStates: [0, 2, 3],
|
|
159
|
-
startStepsFn: (defaultStateSize) => [
|
|
160
|
-
Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
|
|
161
|
-
Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
|
|
162
|
-
Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
|
|
163
|
-
]
|
|
164
|
-
};
|
|
165
146
|
/**
|
|
166
147
|
* Internal function, that create a colors scale, using iteration
|
|
167
148
|
*
|
|
@@ -174,34 +155,26 @@ const SCALE_OPTIONS_DEFAULT = {
|
|
|
174
155
|
function linearColorGradientWithIntermediate(count, options) {
|
|
175
156
|
options = options || {};
|
|
176
157
|
// From [0,1]
|
|
177
|
-
options.opacity = (options.opacity > 0 && options.opacity < 1) ? options.opacity : 1;
|
|
178
158
|
options.startColor = options.startColor || [255, 255, 190]; // default start = creme
|
|
179
159
|
options.mainColorIndex = options.mainColorIndex && options.mainColorIndex < count - 1 ? options.mainColorIndex : count - 1;
|
|
180
160
|
options.endColor = options.endColor || [255, 0, 0]; // default main = red
|
|
181
|
-
options.format = options.format || 'rgb';
|
|
182
161
|
if (!options.mainColor) {
|
|
183
162
|
return linearColorGradient(count, {
|
|
184
|
-
opacity: options.opacity,
|
|
185
163
|
startColor: options.startColor,
|
|
186
|
-
endColor: options.endColor
|
|
187
|
-
format: options.format
|
|
164
|
+
endColor: options.endColor
|
|
188
165
|
});
|
|
189
166
|
}
|
|
190
167
|
else {
|
|
191
168
|
// Step 1: startColor -> mainColor
|
|
192
169
|
const result = linearColorGradient(options.mainColorIndex + 1, {
|
|
193
|
-
opacity: options.opacity,
|
|
194
170
|
startColor: options.startColor,
|
|
195
|
-
endColor: options.mainColor
|
|
196
|
-
format: options.format
|
|
171
|
+
endColor: options.mainColor
|
|
197
172
|
});
|
|
198
173
|
// Step 2: mainColor -> endColor
|
|
199
174
|
if (options.mainColorIndex < count - 1) {
|
|
200
175
|
return result.concat(linearColorGradient(count - options.mainColorIndex, {
|
|
201
|
-
opacity: options.opacity,
|
|
202
176
|
startColor: options.mainColor,
|
|
203
|
-
endColor: options.endColor
|
|
204
|
-
format: options.format
|
|
177
|
+
endColor: options.endColor
|
|
205
178
|
}));
|
|
206
179
|
}
|
|
207
180
|
else {
|
|
@@ -212,10 +185,8 @@ function linearColorGradientWithIntermediate(count, options) {
|
|
|
212
185
|
function linearColorGradient(count, options) {
|
|
213
186
|
options = options || {};
|
|
214
187
|
// From [0,1]
|
|
215
|
-
options.opacity = (options.opacity > 0 && options.opacity < 1) ? options.opacity : 1;
|
|
216
188
|
options.startColor = options.startColor || [255, 255, 255]; // default start = white
|
|
217
189
|
options.endColor = options.endColor || [255, 0, 0]; // default end = red
|
|
218
|
-
options.format = options.format || 'rgb';
|
|
219
190
|
const result = [];
|
|
220
191
|
const color = options.startColor.slice(); // copy the start color
|
|
221
192
|
const delta = [
|
|
@@ -232,23 +203,6 @@ function linearColorGradient(count, options) {
|
|
|
232
203
|
// Force last color = end color
|
|
233
204
|
result.push(options.endColor.slice());
|
|
234
205
|
// Output as array
|
|
235
|
-
if (options.format === 'array') {
|
|
236
|
-
return result;
|
|
237
|
-
}
|
|
238
|
-
// Output as rgb(r,g,b) string
|
|
239
|
-
if (options.format === 'rgb') {
|
|
240
|
-
if (options.opacity >= 1) {
|
|
241
|
-
return result.map(color => 'rgb(' + color.join(',') + ')');
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
return result.map(color => 'rgba(' + color.concat(options.opacity).join(',') + ')');
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
// Output as hex
|
|
248
|
-
// TODO
|
|
249
|
-
// return result.map(color => {
|
|
250
|
-
// return "rgb(" + color.join(',') + ")";
|
|
251
|
-
// });
|
|
252
206
|
return result;
|
|
253
207
|
}
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZ3JhcGgvZ3JhcGgtY29sb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBUzdDOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQUc7SUFDbEIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdEIsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDdEIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDMUIsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDdkIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDckIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdEIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdkIsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEIsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7Q0FDbEIsQ0FBQztBQUVGLDhCQUE4QjtBQUM5QixNQUFNLFNBQVMsR0FBNkIsRUFBRSxDQUFDO0FBRy9DOztHQUVHO0FBQ0gsV0FBVztBQUNYLE1BQU0sT0FBTyxLQUFLO0lBNEJoQixZQUNVLFNB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dGVudCI6WyJpbXBvcnQge1ByZWRlZmluZWRDb2xvcnN9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7aXNOaWwsIGlzTm90TmlsfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIENvbG9yTmFtZSA9IFByZWRlZmluZWRDb2xvcnMgfFxuICAnd2hpdGUnXG4gIHwgJ3JlZCdcbiAgfCAnZ3JlZW4nXG4gIHwgJ2JsdWUnO1xuXG5cbi8qKlxuICogRGVmaW5lIGhlcmUgdGhlbWUgY29sb3JzXG4gKi9cbmNvbnN0IHJnYkFycmF5TWFwID0ge1xuICB3aGl0ZTogWzI1NSwgMjU1LCAyNTVdLFxuICBwcmltYXJ5OiBbMjAsIDY3LCAxNDVdLCAvLyBva1xuICBzZWNvbmRhcnk6IFsxMTcsIDE5NiwgMjUzXSwgLy8gb2tcbiAgdGVydGlhcnk6IFs5MSwgOTQsIDI0NF0sIC8vIG9rXG4gIGRhbmdlcjogWzI0NSwgNjEsIDYxXSwgLy8gb2tcbiAgbGlnaHQ6IFsyNDQsIDI0NSwgMjQ4XSwgLy8gb2tcbiAgbWVkaXVtOiBbMTUyLCAxNTQsIDE2Ml0sIC8vIG9rXG4gIGRhcms6IFszNCwgMzYsIDQwXSwgLy8gb2tcbiAgcmVkOiBbMjU1LCAwLCAwXSxcbiAgZ3JlZW46IFswLCAyNTUsIDBdLFxuICBibHVlOiBbMCwgMCwgMjU1XVxufTtcblxuLy8gRmlsbCBhIG1hcCBvZiBDb2xvciBvYmplY3RzXG5jb25zdCBjb2xvcnNNYXA6IHsgW2tleTogc3RyaW5nXTogQ29sb3IgfSA9IHt9O1xuXG5cbi8qKlxuICogVXNlZnVsIGNsYXNzIGZvciBjb2xvciBjb252ZXJzaW9uXG4gKi9cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgQ29sb3Ige1xuXG4gIC8vIEhlbHBlciBtZXRob2QsIHRvIHJldHJpZXZlIGEgY29sb3JcbiAgc3RhdGljIGdldChuYW1lOiBDb2xvck5hbWUpOiBDb2xvciB7XG4gICAgcmV0dXJuIGNvbG9yc01hcFtuYW1lXSBhcyBDb2xvcjtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVJnYmEocmdiYTogc3RyaW5nKTogQ29sb3J8bnVsbHtcbiAgICAgIGlmICghcmdiYSB8fCAoIXJnYmEuc3RhcnRzV2l0aCgncmdiKCcpICYmICFyZ2JhLnN0YXJ0c1dpdGgoJ3JnYmEoJykpKSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gUGFyc2UgcGFydHNcbiAgICAgIGNvbnN0IHBhcnRzID0gcmdiYVxuICAgICAgICAucmVwbGFjZSgncmdiKCcsICcnKVxuICAgICAgICAucmVwbGFjZSgncmdiYSgnLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJyknLCAnJylcbiAgICAgICAgLnNwbGl0KCcsJyk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMgJiYgcGFydHMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIG5ldyBDb2xvcihbK3BhcnRzWzBdLCArcGFydHNbMV0sICtwYXJ0c1syXV0sXG4gICAgICAgIHBhcnRzLmxlbmd0aCA9PT0gNCAmJiArcGFydHNbM10gfHwgMSxcbiAgICAgICAgJ2N1c3RvbScpO1xuICB9XG5cbiAgc3RhdGljIHRyYW5zcGFyZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihbMCwwLDBdLCAwLCAndHJhbnNsdWNlbnQnKTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9yZ2JBcnJheTogbnVtYmVyW10sXG4gICAgcHJpdmF0ZSBfb3BhY2l0eT86IG51bWJlcixcbiAgICBwcml2YXRlIF9uYW1lOiBzdHJpbmcgPSAnY3VzdG9tJ1xuICApIHtcbiAgfVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIGdldCBvcGFjaXR5KCk6IG51bWJlcntcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fb3BhY2l0eSkgPyB0aGlzLl9vcGFjaXR5IDogMTtcbiAgfVxuICBnZXQgcmdiKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiQXJyYXk7XG4gIH1cblxuICBnZXQgcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZ2JBcnJheVswXTtcbiAgfVxuXG4gIGdldCBnKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JnYkFycmF5WzFdO1xuICB9XG5cbiAgZ2V0IGIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiQXJyYXlbMl07XG4gIH1cblxuICByZ2JhKG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIG9wYWNpdHkgPSBpc05vdE5pbChvcGFjaXR5KSA/IG9wYWNpdHkgOiB0aGlzLl9vcGFjaXR5O1xuICAgIGlmIChpc05pbChvcGFjaXR5KSB8fCBvcGFjaXR5IDwgMCB8fCBvcGFjaXR5ID4gMSkge1xuICAgICAgcmV0dXJuICdyZ2IoJyArIHRoaXMuX3JnYkFycmF5LmpvaW4oJywnKSArICcpJztcbiAgICB9XG4gICAgcmV0dXJuICdyZ2JhKCcgKyB0aGlzLl9yZ2JBcnJheS5qb2luKCcsJykgKyAnLCcgKyBvcGFjaXR5ICsgJyknO1xuICB9XG5cbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvbG9yR3JhZGllbnRPcHRpb25zIHtcbiAgb3BhY2l0eT86IG51bWJlcjtcbiAgc3RhcnRDb2xvcj86IG51bWJlcltdO1xuICBtYWluQ29sb3I/OiBudW1iZXJbXTtcbiAgbWFpbkNvbG9ySW5kZXg/OiBudW1iZXI7XG4gIGVuZENvbG9yPzogbnVtYmVyW107XG4gIGZvcm1hdD86ICdyZ2InfCdoZXgnfCdhcnJheSc7XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb2xvclNjYWxlT3B0aW9ucyBleHRlbmRzIENvbG9yR3JhZGllbnRPcHRpb25ze1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgdXBwZXJNYXg/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29sb3JTY2FsZUxlZ2VuZEl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29sb3JTY2FsZUxlZ2VuZCB7XG4gIGl0ZW1zOiBDb2xvclNjYWxlTGVnZW5kSXRlbVtdO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgY29sb3JzIHNjYWxlXG4gKi9cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgQ29sb3JTY2FsZSB7XG5cbiAgc3RhdGljIGN1c3RvbSA9IChjb3VudDogbnVtYmVyLCBvcHRpb25zPzogQ29sb3JTY2FsZU9wdGlvbnMpID0+IHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gbmV3IENvbG9yU2NhbGUoXG4gICAgICBsaW5lYXJDb2xvckdyYWRpZW50V2l0aEludGVybWVkaWF0ZShjb3VudCwge1xuICAgICAgICBvcGFjaXR5OiBvcHRpb25zLm9wYWNpdHksXG4gICAgICAgIHN0YXJ0Q29sb3I6IG9wdGlvbnMuc3RhcnRDb2xvciB8fCB1bmRlZmluZWQsXG4gICAgICAgIG1haW5Db2xvcjogb3B0aW9ucy5tYWluQ29sb3IgfHwgdW5kZWZpbmVkLFxuICAgICAgICBtYWluQ29sb3JJbmRleDogaXNOb3ROaWwob3B0aW9ucy5tYWluQ29sb3JJbmRleCkgPyBvcHRpb25zLm1haW5Db2xvckluZGV4IDogdW5kZWZpbmVkLFxuICAgICAgICBlbmRDb2xvcjogb3B0aW9ucy5lbmRDb2xvciB8fCB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1hdDogb3B0aW9ucy5mb3JtYXRcbiAgICAgIH0pIGFzIHN0cmluZ1tdLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHQoKSB7XG4gICAgcmV0dXJuIENvbG9yU2NhbGUuY3VzdG9tKDI1KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBhcnJheSB3aXRoIHRoZSBnaXZlbiBjb2xvclxuICAgKiovXG4gIHN0YXRpYyBmaXgobGVuZ3RoPzogbnVtYmVyLCBjb2xvck5hbWU/OiBDb2xvck5hbWUpOiBhbnlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmFwcGx5KG51bGwsIEFycmF5KGxlbmd0aCB8fCAyNSkpXG4gICAgICAubWFwKFN0cmluZy5wcm90b3R5cGUudmFsdWVPZiwgQ29sb3IuZ2V0KGNvbG9yTmFtZSB8fCAncHJpbWFyeScpLnJnYmEoMC41KSk7XG4gIH1cblxuICBwcml2YXRlIF9taW46IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXI7XG4gIHByaXZhdGUgX3JhbmdlU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9sZWdlbmRJdGVtczogQ29sb3JTY2FsZUxlZ2VuZEl0ZW1bXTtcblxuICBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfVxuICBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29sb3JBcnJheTogc3RyaW5nW10sIG9wdGlvbnM/OiBDb2xvclNjYWxlT3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIC8vIHJlc2VydmVkIGxhc3QgY29sb3JzIGZvciB2YWx1ZSA+IG1heFxuICAgIGNvbnN0IG5iSW50ZXJ2YWxCZWZvcmVVcHBlciA9ICFvcHRpb25zLnVwcGVyTWF4ID8gY29sb3JBcnJheS5sZW5ndGggOiAoY29sb3JBcnJheS5sZW5ndGggLSAxKTtcbiAgICB0aGlzLl9taW4gPSBvcHRpb25zLm1pbiB8fCAwO1xuICAgIHRoaXMuX21heCA9IG9wdGlvbnMubWF4IHx8IG5iSW50ZXJ2YWxCZWZvcmVVcHBlcjtcbiAgICB0aGlzLl9yYW5nZVNpemUgPSBNYXRoLnJvdW5kKCh0aGlzLl9tYXggLSB0aGlzLl9taW4pIC8gbmJJbnRlcnZhbEJlZm9yZVVwcGVyKTtcbiAgICB0aGlzLl9sZWdlbmRJdGVtcyA9IHRoaXMuY29tcHV0ZUxlZ2VuZCgpO1xuICB9XG5cbiAgZ2V0IGxlZ2VuZCgpOiBDb2xvclNjYWxlTGVnZW5kIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHRoaXMuX2xlZ2VuZEl0ZW1zXG4gICAgfTtcbiAgfVxuXG4gIGdldFZhbHVlQ29sb3IodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKHZhbHVlICogKHRoaXMuY29sb3JBcnJheS5sZW5ndGggLSAxKSAvIHRoaXMuX21heCk7XG4gICAgcmV0dXJuIHRoaXMuY29sb3JBcnJheVtpbmRleF07XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZUxlZ2VuZCgpOiBDb2xvclNjYWxlTGVnZW5kSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb2xvckFycmF5Lm1hcCgoY29sb3IsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4ICogdGhpcy5fcmFuZ2VTaXplO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLl9yYW5nZVNpemU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcixcbiAgICAgICAgbGFiZWw6IChlbmQgPCB0aGlzLl9tYXgpID8gYCR7c3RhcnQudG9Mb2NhbGVTdHJpbmcoKX0gLSAke2VuZC50b0xvY2FsZVN0cmluZygpfWAgOiBgID49ICR7c3RhcnR9YFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuXG5cbi8vIEZpbGwgY29sb3JzTWFwXG5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyZ2JBcnJheU1hcClcbiAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbG9yc01hcFtrZXldID0gbmV3IENvbG9yKHJnYkFycmF5TWFwW2tleV0sIDEsIGtleSk7XG4gIH0pO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvblxuZnVuY3Rpb24gc3RhdGUyc2lkZShzdGF0ZSkge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIC0xO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiAxO1xuICB9XG59XG5cblxuY29uc3QgU0NBTEVfT1BUSU9OU19ERUZBVUxUID0ge1xuICBzdGFydENvbG9yOiByZ2JBcnJheU1hcC5yZWQsXG4gIHN0YXJ0U3RhdGVzOiBbMCwgMiwgM10sIC8vIFI9a2VlcCwgVj1rZWVwLCBCPWluY3JlYXNlXG4gIHN0YXJ0U3RlcHNGbjogKGRlZmF1bHRTdGF0ZVNpemU6IG51bWJlcikgPT4gW1xuICAgICAgTWF0aC5yb3VuZCgocmdiQXJyYXlNYXAucmVkWzBdIC0gNTApIC8gZGVmYXVsdFN0YXRlU2l6ZSksXG4gICAgICBNYXRoLnJvdW5kKCgyNTUgLSByZ2JBcnJheU1hcC5yZWRbMV0pIC8gZGVmYXVsdFN0YXRlU2l6ZSksXG4gICAgICBNYXRoLnJvdW5kKCgyNTUgLSByZ2JBcnJheU1hcC5yZWRbMl0pIC8gZGVmYXVsdFN0YXRlU2l6ZSlcbiAgICBdXG59O1xuXG4vKipcbiAqIEludGVybmFsIGZ1bmN0aW9uLCB0aGF0IGNyZWF0ZSBhIGNvbG9ycyBzY2FsZSwgdXNpbmcgaXRlcmF0aW9uXG4gKlxuICogQHBhcmFtIGNvdW50XG4gKiBAcGFyYW0gb3BhY2l0eVxuICogQHBhcmFtIHN0YXJ0Q29sb3JcbiAqIEBwYXJhbSBzdGFydFN0YXRlXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBsaW5lYXJDb2xvckdyYWRpZW50V2l0aEludGVybWVkaWF0ZShjb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz86IENvbG9yR3JhZGllbnRPcHRpb25zKTogYW55W10ge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBGcm9tIFswLDFdXG4gIG9wdGlvbnMub3BhY2l0eSA9IChvcHRpb25zLm9wYWNpdHkgPiAwICYmIG9wdGlvbnMub3BhY2l0eSA8IDEpID8gb3B0aW9ucy5vcGFjaXR5IDogMTtcbiAgb3B0aW9ucy5zdGFydENvbG9yID0gb3B0aW9ucy5zdGFydENvbG9yIHx8IFsyNTUsIDI1NSwgMTkwXTsgLy8gZGVmYXVsdCBzdGFydCA9IGNyZW1lXG4gIG9wdGlvbnMubWFpbkNvbG9ySW5kZXggPSBvcHRpb25zLm1haW5Db2xvckluZGV4ICYmIG9wdGlvbnMubWFpbkNvbG9ySW5kZXggPCBjb3VudCAtIDEgPyBvcHRpb25zLm1haW5Db2xvckluZGV4IDogY291bnQgLSAxO1xuICBvcHRpb25zLmVuZENvbG9yID0gb3B0aW9ucy5lbmRDb2xvciB8fCBbMjU1LCAwLCAwXTsgLy8gZGVmYXVsdCBtYWluID0gcmVkXG4gIG9wdGlvbnMuZm9ybWF0ID0gb3B0aW9ucy5mb3JtYXQgfHwgJ3JnYic7XG5cbiAgaWYgKCFvcHRpb25zLm1haW5Db2xvcikge1xuICAgIHJldHVybiBsaW5lYXJDb2xvckdyYWRpZW50KGNvdW50LCB7XG4gICAgICBvcGFjaXR5OiBvcHRpb25zLm9wYWNpdHksXG4gICAgICBzdGFydENvbG9yOiBvcHRpb25zLnN0YXJ0Q29sb3IsXG4gICAgICBlbmRDb2xvcjogb3B0aW9ucy5lbmRDb2xvcixcbiAgICAgIGZvcm1hdDogb3B0aW9ucy5mb3JtYXRcbiAgICB9KTtcbiAgfVxuXG4gIGVsc2Uge1xuICAgIC8vIFN0ZXAgMTogc3RhcnRDb2xvciAtPiBtYWluQ29sb3JcbiAgICBjb25zdCByZXN1bHQgPSBsaW5lYXJDb2xvckdyYWRpZW50KG9wdGlvbnMubWFpbkNvbG9ySW5kZXggKyAxLCB7XG4gICAgICBvcGFjaXR5OiBvcHRpb25zLm9wYWNpdHksXG4gICAgICBzdGFydENvbG9yOiBvcHRpb25zLnN0YXJ0Q29sb3IsXG4gICAgICBlbmRDb2xvcjogb3B0aW9ucy5tYWluQ29sb3IsXG4gICAgICBmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0XG4gICAgfSk7XG5cbiAgICAvLyBTdGVwIDI6IG1haW5Db2xvciAtPiBlbmRDb2xvclxuICAgIGlmIChvcHRpb25zLm1haW5Db2xvckluZGV4IDwgY291bnQgLSAxKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmNvbmNhdChcbiAgICAgICAgbGluZWFyQ29sb3JHcmFkaWVudChjb3VudCAtIG9wdGlvbnMubWFpbkNvbG9ySW5kZXgsIHtcbiAgICAgICAgICBvcGFjaXR5OiBvcHRpb25zLm9wYWNpdHksXG4gICAgICAgICAgc3RhcnRDb2xvcjogb3B0aW9ucy5tYWluQ29sb3IsXG4gICAgICAgICAgZW5kQ29sb3I6IG9wdGlvbnMuZW5kQ29sb3IsXG4gICAgICAgICAgZm9ybWF0OiBvcHRpb25zLmZvcm1hdFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluZWFyQ29sb3JHcmFkaWVudChjb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzogQ29sb3JHcmFkaWVudE9wdGlvbnMpOiBhbnlbXSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRnJvbSBbMCwxXVxuICBvcHRpb25zLm9wYWNpdHkgPSAob3B0aW9ucy5vcGFjaXR5ID4gMCAmJiBvcHRpb25zLm9wYWNpdHkgPCAxKSA/IG9wdGlvbnMub3BhY2l0eSA6IDE7XG4gIG9wdGlvbnMuc3RhcnRDb2xvciA9IG9wdGlvbnMuc3RhcnRDb2xvciB8fCBbMjU1LCAyNTUsIDI1NV07IC8vIGRlZmF1bHQgc3RhcnQgPSB3aGl0ZVxuICBvcHRpb25zLmVuZENvbG9yID0gb3B0aW9ucy5lbmRDb2xvciB8fCBbMjU1LCAwLCAwXTsgLy8gZGVmYXVsdCBlbmQgPSByZWRcbiAgb3B0aW9ucy5mb3JtYXQgPSBvcHRpb25zLmZvcm1hdCB8fCAncmdiJztcblxuICBjb25zdCByZXN1bHQ6IG51bWJlcltdW10gPSBbXTtcbiAgY29uc3QgY29sb3IgPSBvcHRpb25zLnN0YXJ0Q29sb3Iuc2xpY2UoKTsgLy8gY29weSB0aGUgc3RhcnQgY29sb3JcbiAgY29uc3QgZGVsdGEgPSBbXG4gICAgTWF0aC5yb3VuZCgob3B0aW9ucy5lbmRDb2xvclswXSAtIG9wdGlvbnMuc3RhcnRDb2xvclswXSkgLyBjb3VudCksXG4gICAgTWF0aC5yb3VuZCgob3B0aW9ucy5lbmRDb2xvclsxXSAtIG9wdGlvbnMuc3RhcnRDb2xvclsxXSkgLyBjb3VudCksXG4gICAgTWF0aC5yb3VuZCgob3B0aW9ucy5lbmRDb2xvclsyXSAtIG9wdGlvbnMuc3RhcnRDb2xvclsyXSkgLyBjb3VudClcbiAgXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50IC0gMTsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAzOyBqKyspIHtcbiAgICAgIGNvbG9yW2pdICs9IGRlbHRhW2pdO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChjb2xvci5zbGljZSgpKTtcbiAgfVxuXG4gIC8vIEZvcmNlIGxhc3QgY29sb3IgPSBlbmQgY29sb3JcbiAgcmVzdWx0LnB1c2gob3B0aW9ucy5lbmRDb2xvci5zbGljZSgpKTtcblxuICAvLyBPdXRwdXQgYXMgYXJyYXlcbiAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnYXJyYXknKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIE91dHB1dCBhcyByZ2IocixnLGIpIHN0cmluZ1xuICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdyZ2InKSB7XG4gICAgaWYgKG9wdGlvbnMub3BhY2l0eSA+PSAxKSB7XG4gICAgICByZXR1cm4gcmVzdWx0Lm1hcChjb2xvciA9PiAncmdiKCcgKyBjb2xvci5qb2luKCcsJykgKyAnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0Lm1hcChjb2xvciA9PiAncmdiYSgnICsgY29sb3IuY29uY2F0KG9wdGlvbnMub3BhY2l0eSkuam9pbignLCcpICsgJyknKTtcbiAgICB9XG4gIH1cblxuICAvLyBPdXRwdXQgYXMgaGV4XG4gIC8vIFRPRE9cbiAgLy8gcmV0dXJuIHJlc3VsdC5tYXAoY29sb3IgPT4ge1xuICAvLyAgIHJldHVybiBcInJnYihcIiArIGNvbG9yLmpvaW4oJywnKSArIFwiKVwiO1xuICAvLyB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZ3JhcGgvZ3JhcGgtY29sb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBVTdDOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQUc7SUFDbEIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdEIsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDdEIsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDMUIsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDdkIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDckIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdEIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDdkIsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEIsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7Q0FDbEIsQ0FBQztBQUVGLDhCQUE4QjtBQUM5QixNQUFNLFNBQVMsR0FBNkIsRUFBRSxDQUFDO0FBRy9DOztHQUVHO0FBQ0gsV0FBVztBQUNYLE1BQU0sT0FBTyxLQUFLO0lBNEJoQixZQUNVLFNB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LENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDNUI7SUFFRCwrQkFBK0I7SUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFdEMsa0JBQWtCO0lBQ2xCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1ByZWRlZmluZWRDb2xvcnN9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7aXNOaWwsIGlzTm90TmlsfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtoZXhUb1JnYiwgaGV4VG9SZ2JBcnJheSwgcmdiQXJyYXlUb0hleH0gZnJvbSAnLi9jb2xvcnMudXRpbHMnO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIENvbG9yTmFtZSA9IFByZWRlZmluZWRDb2xvcnMgfFxuICAnd2hpdGUnXG4gIHwgJ3JlZCdcbiAgfCAnZ3JlZW4nXG4gIHwgJ2JsdWUnO1xuXG5cbi8qKlxuICogRGVmaW5lIGhlcmUgdGhlbWUgY29sb3JzXG4gKi9cbmNvbnN0IHJnYkFycmF5TWFwID0ge1xuICB3aGl0ZTogWzI1NSwgMjU1LCAyNTVdLFxuICBwcmltYXJ5OiBbMjAsIDY3LCAxNDVdLCAvLyBva1xuICBzZWNvbmRhcnk6IFsxMTcsIDE5NiwgMjUzXSwgLy8gb2tcbiAgdGVydGlhcnk6IFs5MSwgOTQsIDI0NF0sIC8vIG9rXG4gIGRhbmdlcjogWzI0NSwgNjEsIDYxXSwgLy8gb2tcbiAgbGlnaHQ6IFsyNDQsIDI0NSwgMjQ4XSwgLy8gb2tcbiAgbWVkaXVtOiBbMTUyLCAxNTQsIDE2Ml0sIC8vIG9rXG4gIGRhcms6IFszNCwgMzYsIDQwXSwgLy8gb2tcbiAgcmVkOiBbMjU1LCAwLCAwXSxcbiAgZ3JlZW46IFswLCAyNTUsIDBdLFxuICBibHVlOiBbMCwgMCwgMjU1XVxufTtcblxuLy8gRmlsbCBhIG1hcCBvZiBDb2xvciBvYmplY3RzXG5jb25zdCBjb2xvcnNNYXA6IHsgW2tleTogc3RyaW5nXTogQ29sb3IgfSA9IHt9O1xuXG5cbi8qKlxuICogVXNlZnVsIGNsYXNzIGZvciBjb2xvciBjb252ZXJzaW9uXG4gKi9cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgQ29sb3Ige1xuXG4gIC8vIEhlbHBlciBtZXRob2QsIHRvIHJldHJpZXZlIGEgY29sb3JcbiAgc3RhdGljIGdldChuYW1lOiBDb2xvck5hbWUpOiBDb2xvciB7XG4gICAgcmV0dXJuIGNvbG9yc01hcFtuYW1lXSBhcyBDb2xvcjtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVJnYmEocmdiYTogc3RyaW5nKTogQ29sb3J8bnVsbHtcbiAgICAgIGlmICghcmdiYSB8fCAoIXJnYmEuc3RhcnRzV2l0aCgncmdiKCcpICYmICFyZ2JhLnN0YXJ0c1dpdGgoJ3JnYmEoJykpKSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gUGFyc2UgcGFydHNcbiAgICAgIGNvbnN0IHBhcnRzID0gcmdiYVxuICAgICAgICAucmVwbGFjZSgncmdiKCcsICcnKVxuICAgICAgICAucmVwbGFjZSgncmdiYSgnLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJyknLCAnJylcbiAgICAgICAgLnNwbGl0KCcsJyk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMgJiYgcGFydHMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIG5ldyBDb2xvcihbK3BhcnRzWzBdLCArcGFydHNbMV0sICtwYXJ0c1syXV0sXG4gICAgICAgIHBhcnRzLmxlbmd0aCA9PT0gNCAmJiArcGFydHNbM10gfHwgMSxcbiAgICAgICAgJ2N1c3RvbScpO1xuICB9XG5cbiAgc3RhdGljIHRyYW5zcGFyZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihbMCwwLDBdLCAwLCAndHJhbnNsdWNlbnQnKTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9yZ2JBcnJheTogbnVtYmVyW10sXG4gICAgcHJpdmF0ZSBfb3BhY2l0eT86IG51bWJlcixcbiAgICBwcml2YXRlIF9uYW1lOiBzdHJpbmcgPSAnY3VzdG9tJ1xuICApIHtcbiAgfVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIGdldCBvcGFjaXR5KCk6IG51bWJlcntcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fb3BhY2l0eSkgPyB0aGlzLl9vcGFjaXR5IDogMTtcbiAgfVxuICBnZXQgcmdiKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiQXJyYXk7XG4gIH1cblxuICBnZXQgcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZ2JBcnJheVswXTtcbiAgfVxuXG4gIGdldCBnKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JnYkFycmF5WzFdO1xuICB9XG5cbiAgZ2V0IGIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiQXJyYXlbMl07XG4gIH1cblxuICByZ2JhKG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIG9wYWNpdHkgPSBpc05vdE5pbChvcGFjaXR5KSA/IG9wYWNpdHkgOiB0aGlzLl9vcGFjaXR5O1xuICAgIGlmIChpc05pbChvcGFjaXR5KSB8fCBvcGFjaXR5IDwgMCB8fCBvcGFjaXR5ID4gMSkge1xuICAgICAgcmV0dXJuICdyZ2IoJyArIHRoaXMuX3JnYkFycmF5LmpvaW4oJywnKSArICcpJztcbiAgICB9XG4gICAgcmV0dXJuICdyZ2JhKCcgKyB0aGlzLl9yZ2JBcnJheS5qb2luKCcsJykgKyAnLCcgKyBvcGFjaXR5ICsgJyknO1xuICB9XG5cbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvbG9yR3JhZGllbnRPcHRpb25zIHtcbiAgc3RhcnRDb2xvcj86IG51bWJlcltdO1xuICBtYWluQ29sb3I/OiBudW1iZXJbXTtcbiAgbWFpbkNvbG9ySW5kZXg/OiBudW1iZXI7XG4gIGVuZENvbG9yPzogbnVtYmVyW107XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb2xvclNjYWxlT3B0aW9ucyBleHRlbmRzIENvbG9yR3JhZGllbnRPcHRpb25zIHtcbiAgb3BhY2l0eT86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIHVwcGVyTWF4PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvbG9yU2NhbGVMZWdlbmRJdGVtIHtcbiAgbGFiZWw6IHN0cmluZ3xudW1iZXJbXTtcbiAgY29sb3I6IENvbG9yO1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29sb3JTY2FsZUxlZ2VuZCB7XG4gIGl0ZW1zOiBDb2xvclNjYWxlTGVnZW5kSXRlbVtdO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgY29sb3JzIHNjYWxlXG4gKi9cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgQ29sb3JTY2FsZSB7XG5cbiAgc3RhdGljIGN1c3RvbSA9IChjb3VudDogbnVtYmVyLCBvcHRpb25zPzogQ29sb3JTY2FsZU9wdGlvbnMpID0+IHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gbmV3IENvbG9yU2NhbGUoXG4gICAgICBsaW5lYXJDb2xvckdyYWRpZW50V2l0aEludGVybWVkaWF0ZShjb3VudCwge1xuICAgICAgICBzdGFydENvbG9yOiBvcHRpb25zLnN0YXJ0Q29sb3IgfHwgdW5kZWZpbmVkLFxuICAgICAgICBtYWluQ29sb3I6IG9wdGlvbnMubWFpbkNvbG9yIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgbWFpbkNvbG9ySW5kZXg6IGlzTm90TmlsKG9wdGlvbnMubWFpbkNvbG9ySW5kZXgpID8gb3B0aW9ucy5tYWluQ29sb3JJbmRleCA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW5kQ29sb3I6IG9wdGlvbnMuZW5kQ29sb3IgfHwgdW5kZWZpbmVkXG4gICAgICB9KSxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0KCkge1xuICAgIHJldHVybiBDb2xvclNjYWxlLmN1c3RvbSgyNSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYXJyYXkgd2l0aCB0aGUgZ2l2ZW4gY29sb3JcbiAgICoqL1xuICBzdGF0aWMgZml4KGxlbmd0aD86IG51bWJlciwgY29sb3JOYW1lPzogQ29sb3JOYW1lKTogYW55W10ge1xuICAgIHJldHVybiBBcnJheS5hcHBseShudWxsLCBBcnJheShsZW5ndGggfHwgMjUpKVxuICAgICAgLm1hcChTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YsIENvbG9yLmdldChjb2xvck5hbWUgfHwgJ3ByaW1hcnknKS5yZ2JhKDAuNSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWluOiBudW1iZXI7XG4gIHByaXZhdGUgX21heDogbnVtYmVyO1xuICBwcml2YXRlIF9yYW5nZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGVnZW5kSXRlbXM6IENvbG9yU2NhbGVMZWdlbmRJdGVtW107XG5cbiAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cbiAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXg7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihjb2xvckFycmF5OiBudW1iZXJbXVtdLCBvcHRpb25zPzogQ29sb3JTY2FsZU9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAvLyByZXNlcnZlZCBsYXN0IGNvbG9ycyBmb3IgdmFsdWUgPiBtYXhcbiAgICBjb25zdCBuYkludGVydmFsQmVmb3JlVXBwZXIgPSAhb3B0aW9ucy51cHBlck1heCA/IGNvbG9yQXJyYXkubGVuZ3RoIDogKGNvbG9yQXJyYXkubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5fbWluID0gb3B0aW9ucy5taW4gfHwgMDtcbiAgICB0aGlzLl9tYXggPSBvcHRpb25zLm1heCB8fCBuYkludGVydmFsQmVmb3JlVXBwZXI7XG4gICAgdGhpcy5fcmFuZ2VTaXplID0gTWF0aC5yb3VuZCgodGhpcy5fbWF4IC0gdGhpcy5fbWluKSAvIG5iSW50ZXJ2YWxCZWZvcmVVcHBlcik7XG4gICAgdGhpcy5fbGVnZW5kSXRlbXMgPSB0aGlzLmNvbXB1dGVMZWdlbmRJdGVtcyhjb2xvckFycmF5KTtcbiAgfVxuXG4gIGdldCBsZWdlbmQoKTogQ29sb3JTY2FsZUxlZ2VuZCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiB0aGlzLl9sZWdlbmRJdGVtc1xuICAgIH07XG4gIH1cblxuICBnZXRWYWx1ZUNvbG9yKHZhbHVlOiBudW1iZXIpOiBDb2xvciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGVnZW5kRm9yVmFsdWUodmFsdWUpLmNvbG9yO1xuICB9XG5cbiAgZ2V0TGVnZW5kRm9yVmFsdWUodmFsdWU6IG51bWJlcik6IENvbG9yU2NhbGVMZWdlbmRJdGVtIHtcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IodmFsdWUgKiAodGhpcy5fbGVnZW5kSXRlbXMubGVuZ3RoIC0gMSkgLyB0aGlzLl9tYXgpO1xuICAgIHJldHVybiB0aGlzLl9sZWdlbmRJdGVtc1tpbmRleF07XG4gIH1cblxuICBnZXRMZWdlbmRBdEluZGV4KGluZGV4OiBudW1iZXIpOiBDb2xvclNjYWxlTGVnZW5kSXRlbSB7XG4gICAgcmV0dXJuIHRoaXMuX2xlZ2VuZEl0ZW1zW2luZGV4XTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wdXRlTGVnZW5kSXRlbXMoY29sb3JBcnJheTogbnVtYmVyW11bXSk6IENvbG9yU2NhbGVMZWdlbmRJdGVtW10ge1xuICAgIHJldHVybiBjb2xvckFycmF5Lm1hcCgoY29sb3IsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4ICogdGhpcy5fcmFuZ2VTaXplO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLl9yYW5nZVNpemU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogbmV3IENvbG9yKGNvbG9yKSxcbiAgICAgICAgbGFiZWw6IChlbmQgPCB0aGlzLl9tYXgpID8gYCR7c3RhcnQudG9Mb2NhbGVTdHJpbmcoKX0gLSAke2VuZC50b0xvY2FsZVN0cmluZygpfWAgOiBgID49ICR7c3RhcnR9YFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuXG5cbi8vIEZpbGwgY29sb3JzTWFwXG5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyZ2JBcnJheU1hcClcbiAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbG9yc01hcFtrZXldID0gbmV3IENvbG9yKHJnYkFycmF5TWFwW2tleV0sIDEsIGtleSk7XG4gIH0pO1xuXG5cbi8qKlxuICogSW50ZXJuYWwgZnVuY3Rpb24sIHRoYXQgY3JlYXRlIGEgY29sb3JzIHNjYWxlLCB1c2luZyBpdGVyYXRpb25cbiAqXG4gKiBAcGFyYW0gY291bnRcbiAqIEBwYXJhbSBvcGFjaXR5XG4gKiBAcGFyYW0gc3RhcnRDb2xvclxuICogQHBhcmFtIHN0YXJ0U3RhdGVcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGxpbmVhckNvbG9yR3JhZGllbnRXaXRoSW50ZXJtZWRpYXRlKGNvdW50OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzogQ29sb3JHcmFkaWVudE9wdGlvbnMpOiBudW1iZXJbXVtdIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRnJvbSBbMCwxXVxuICBvcHRpb25zLnN0YXJ0Q29sb3IgPSBvcHRpb25zLnN0YXJ0Q29sb3IgfHwgWzI1NSwgMjU1LCAxOTBdOyAvLyBkZWZhdWx0IHN0YXJ0ID0gY3JlbWVcbiAgb3B0aW9ucy5tYWluQ29sb3JJbmRleCA9IG9wdGlvbnMubWFpbkNvbG9ySW5kZXggJiYgb3B0aW9ucy5tYWluQ29sb3JJbmRleCA8IGNvdW50IC0gMSA/IG9wdGlvbnMubWFpbkNvbG9ySW5kZXggOiBjb3VudCAtIDE7XG4gIG9wdGlvbnMuZW5kQ29sb3IgPSBvcHRpb25zLmVuZENvbG9yIHx8IFsyNTUsIDAsIDBdOyAvLyBkZWZhdWx0IG1haW4gPSByZWRcblxuICBpZiAoIW9wdGlvbnMubWFpbkNvbG9yKSB7XG4gICAgcmV0dXJuIGxpbmVhckNvbG9yR3JhZGllbnQoY291bnQsIHtcbiAgICAgIHN0YXJ0Q29sb3I6IG9wdGlvbnMuc3RhcnRDb2xvcixcbiAgICAgIGVuZENvbG9yOiBvcHRpb25zLmVuZENvbG9yXG4gICAgfSk7XG4gIH1cblxuICBlbHNlIHtcbiAgICAvLyBTdGVwIDE6IHN0YXJ0Q29sb3IgLT4gbWFpbkNvbG9yXG4gICAgY29uc3QgcmVzdWx0ID0gbGluZWFyQ29sb3JHcmFkaWVudChvcHRpb25zLm1haW5Db2xvckluZGV4ICsgMSwge1xuICAgICAgc3RhcnRDb2xvcjogb3B0aW9ucy5zdGFydENvbG9yLFxuICAgICAgZW5kQ29sb3I6IG9wdGlvbnMubWFpbkNvbG9yXG4gICAgfSk7XG5cbiAgICAvLyBTdGVwIDI6IG1haW5Db2xvciAtPiBlbmRDb2xvclxuICAgIGlmIChvcHRpb25zLm1haW5Db2xvckluZGV4IDwgY291bnQgLSAxKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmNvbmNhdChcbiAgICAgICAgbGluZWFyQ29sb3JHcmFkaWVudChjb3VudCAtIG9wdGlvbnMubWFpbkNvbG9ySW5kZXgsIHtcbiAgICAgICAgICBzdGFydENvbG9yOiBvcHRpb25zLm1haW5Db2xvcixcbiAgICAgICAgICBlbmRDb2xvcjogb3B0aW9ucy5lbmRDb2xvclxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluZWFyQ29sb3JHcmFkaWVudChjb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzogQ29sb3JHcmFkaWVudE9wdGlvbnMpOiBhbnlbXSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRnJvbSBbMCwxXVxuICBvcHRpb25zLnN0YXJ0Q29sb3IgPSBvcHRpb25zLnN0YXJ0Q29sb3IgfHwgWzI1NSwgMjU1LCAyNTVdOyAvLyBkZWZhdWx0IHN0YXJ0ID0gd2hpdGVcbiAgb3B0aW9ucy5lbmRDb2xvciA9IG9wdGlvbnMuZW5kQ29sb3IgfHwgWzI1NSwgMCwgMF07IC8vIGRlZmF1bHQgZW5kID0gcmVkXG5cbiAgY29uc3QgcmVzdWx0OiBudW1iZXJbXVtdID0gW107XG4gIGNvbnN0IGNvbG9yID0gb3B0aW9ucy5zdGFydENvbG9yLnNsaWNlKCk7IC8vIGNvcHkgdGhlIHN0YXJ0IGNvbG9yXG4gIGNvbnN0IGRlbHRhID0gW1xuICAgIE1hdGgucm91bmQoKG9wdGlvbnMuZW5kQ29sb3JbMF0gLSBvcHRpb25zLnN0YXJ0Q29sb3JbMF0pIC8gY291bnQpLFxuICAgIE1hdGgucm91bmQoKG9wdGlvbnMuZW5kQ29sb3JbMV0gLSBvcHRpb25zLnN0YXJ0Q29sb3JbMV0pIC8gY291bnQpLFxuICAgIE1hdGgucm91bmQoKG9wdGlvbnMuZW5kQ29sb3JbMl0gLSBvcHRpb25zLnN0YXJ0Q29sb3JbMl0pIC8gY291bnQpXG4gIF07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudCAtIDE7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMzsgaisrKSB7XG4gICAgICBjb2xvcltqXSArPSBkZWx0YVtqXTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goY29sb3Iuc2xpY2UoKSk7XG4gIH1cblxuICAvLyBGb3JjZSBsYXN0IGNvbG9yID0gZW5kIGNvbG9yXG4gIHJlc3VsdC5wdXNoKG9wdGlvbnMuZW5kQ29sb3Iuc2xpY2UoKSk7XG5cbiAgLy8gT3V0cHV0IGFzIGFycmF5XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
|