UNPKG

@gpa-gemstone/react-graph

Version:
229 lines 26.6 kB
"use strict"; // ****************************************************************************************************** // ValueAxis.tsx - Gbtc // // Copyright © 2021, Grid Protection Alliance. All Rights Reserved. // // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See // the NOTICE file distributed with this work for additional information regarding copyright ownership. // The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this // file except in compliance with the License. You may obtain a copy of the License at: // // http://opensource.org/licenses/MIT // // Unless agreed to in writing, the subject software distributed under the License is distributed on an // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the // License for the specific language governing permissions and limitations. // // Code Modification History: // ---------------------------------------------------------------------------------------------------- // 03/19/2021 - C. lackner // Generated original version of source code. // // ****************************************************************************************************** var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); var React = require("react"); var GraphContext_1 = require("./GraphContext"); var helper_functions_1 = require("@gpa-gemstone/helper-functions"); function ValueAxis(props) { var context = React.useContext(GraphContext_1.GraphContext); var _a = __read(React.useState([]), 2), ticks = _a[0], setTicks = _a[1]; var _b = __read(React.useState(1), 2), tickFontSize = _b[0], setTickFontSize = _b[1]; var _c = __read(React.useState(0), 2), labelHeight = _c[0], setLabelHeight = _c[1]; var _d = __read(React.useState(1), 2), labelFontSize = _d[0], setLabelFontSize = _d[1]; var _e = __read(React.useState(0), 2), hAxis = _e[0], setHAxis = _e[1]; var _f = __read(React.useState(1), 2), nDigits = _f[0], setNdigits = _f[1]; var _g = __read(React.useState(1), 2), factor = _g[0], setFactor = _g[1]; //Effect to set the ticks React.useEffect(function () { var axis = GraphContext_1.AxisMap.get(props.axis); var dY = context.YDomain[axis][1] - context.YDomain[axis][0]; if (!isFinite(dY) || isNaN(dY)) { setTicks([]); return; } var newTicks; if (dY === 0) { newTicks = [context.YDomain[axis][0]]; } else { var exp = 0; while ((dY * Math.pow(10, exp)) < 1) { exp = exp + 1; } while ((dY * Math.pow(10, exp)) > 10) { exp = exp - 1; } var scale = 1.0 / Math.pow(10, exp); if (dY * Math.pow(10, exp) < 6 && dY * Math.pow(10, exp) >= 2.5) scale = 0.5 / Math.pow(10, exp); if (dY * Math.pow(10, exp) < 2.5 && dY * Math.pow(10, exp) >= 1.2) scale = 0.2 / Math.pow(10, exp); if (dY * Math.pow(10, exp) < 1.2) scale = 0.1 / Math.pow(10, exp); var offset = Math.floor(context.YDomain[axis][0] / scale) * scale; newTicks = [offset + scale]; while (newTicks[newTicks.length - 1] < (context.YDomain[axis][1] - scale)) newTicks.push(newTicks[newTicks.length - 1] + scale); } setTicks(newTicks); }, [context.YDomain, props.useFactor, props.axis, props.height]); React.useEffect(function () { if (ticks.length === 0) return; // Use first tick as they should all be same height var sampleLabel = (ticks[0] * factor).toFixed(nDigits); var availableHeightPerTick = props.height / ticks.length; var newFontSize = 1; var sampleHeight = (0, helper_functions_1.GetTextHeight)('Segoe UI', newFontSize + 'em', sampleLabel); // Decrease font size until we fit, down to a mini of 0.5em. while (sampleHeight > availableHeightPerTick && newFontSize > 0.5) { newFontSize = newFontSize - 0.05; sampleHeight = (0, helper_functions_1.GetTextHeight)('Segoe UI', newFontSize + 'em', sampleLabel); } setTickFontSize(newFontSize); }, [ticks, factor, nDigits, props.height]); //Effect to set the factor React.useEffect(function () { if (!props.useFactor) { setFactor(1); return; } var axis = GraphContext_1.AxisMap.get(props.axis); var dY = context.YDomain[axis][1] - context.YDomain[axis][0]; var expF = 0; var Ymax = Math.max(Math.abs(context.YDomain[axis][0]), Math.abs(context.YDomain[axis][1])); while ((Ymax * Math.pow(10, expF)) < 1) { expF = expF + 1; } while ((Ymax * Math.pow(10, expF)) > 10) { expF = expF - 1; } expF = Math.sign(expF) * (Math.floor(Math.abs(expF) / 3)) * 3; // adjust to avoid same value on axis scenario if (dY * Math.pow(10, expF) < 0.1 && dY !== 0) expF = expF + 3; setFactor(Math.pow(10, expF)); }, [context.YDomain, props.useFactor, props.axis]); //Effect to set nDigitss React.useEffect(function () { var axis = GraphContext_1.AxisMap.get(props.axis); var dY = context.YDomain[axis][1] - context.YDomain[axis][0]; dY = dY * factor; if (dY === 0) dY = Math.abs(context.YDomain[axis][0] * factor); if (dY >= 15) setNdigits(0); if (dY < 15 && dY >= 1.5) setNdigits(1); if (dY < 1.5 && dY >= 0.15) setNdigits(2); if (dY < 0.15) setNdigits(3); if (dY < 0.015) setNdigits(4); if (dY < 0.0015) setNdigits(5); if (dY === 0) setNdigits(2); }, [factor, context.YDomain, props.axis]); React.useEffect(function () { var h = 0; if (factor !== 1) h = (0, helper_functions_1.GetTextHeight)("Segoe UI", '1em', 'x' + (1 / factor).toString()); if (h !== props.hFactor) props.setHeightFactor(h); }, [factor, props.hFactor, props.setHeightFactor]); React.useEffect(function () { if (props.label === undefined) { setLabelHeight(0); return; } var h = (0, helper_functions_1.GetTextHeight)("Segoe UI", labelFontSize + 'em', props.label) + 4; setLabelHeight(h); }, [props.label, props.height, props.offsetTop, props.offsetBottom, labelFontSize]); React.useEffect(function () { var dY = Math.max.apply(Math, __spreadArray([], __read(ticks.map(function (t) { return (0, helper_functions_1.GetTextWidth)("Segoe UI", '1em', (t * factor).toFixed(nDigits)); })), false)); dY = (isFinite(dY) ? dY : 0) + 8; if (dY !== hAxis) setHAxis(dY); }, [ticks, nDigits]); React.useEffect(function () { if (props.hAxis !== hAxis + labelHeight) props.setWidthAxis(hAxis + labelHeight); }, [hAxis, labelHeight, props.hAxis]); // use effect resets us in case this becomes unmounted React.useEffect(function () { return function () { return props.setWidthAxis(0); }; }, []); React.useEffect(function () { if (props.label === undefined) return; var h = (0, helper_functions_1.GetTextWidth)("Segoe UI", '1em', props.label); var size = 1; while (h > props.height && size > 0.1) { size = size - 0.1; h = (0, helper_functions_1.GetTextWidth)("Segoe UI", size + 'em', props.label); } if (labelFontSize !== size) setLabelFontSize(size); }, [props.label, props.height]); var leftPosition = React.useMemo(function () { if (props.axis === undefined || props.axis === 'left') return props.offsetLeft; else return props.width - props.offsetRight; }, [props.offsetLeft, props.offsetRight, props.width, props.axis]); var tickDirection = React.useMemo(function () { if (props.axis === undefined || props.axis === 'left') return -1; else return 1; }, [props.axis]); return (React.createElement("g", null, React.createElement("path", { stroke: 'currentColor', style: { strokeWidth: 1, transition: 'd 0.5s' }, d: "M ".concat(leftPosition, " ").concat(props.height - props.offsetBottom + 8, " V ").concat(props.offsetTop) }), React.createElement("path", { stroke: 'currentColor', style: { strokeWidth: 1, transition: 'd 0.5s' }, d: "M ".concat(leftPosition, " ").concat(props.offsetTop, " h ").concat(tickDirection * 8) }), ticks.map(function (tick, i) { var _a; return React.createElement("path", { key: i, stroke: ((props.axis === undefined || props.axis === 'left') ? 'lightgrey' : 'darkgrey'), strokeOpacity: ((_a = props.showGrid) !== null && _a !== void 0 ? _a : false) ? '0.8' : '0.0', style: { strokeWidth: 1, transition: 'd 0.5s' }, d: "M ".concat(props.offsetLeft, " ").concat(context.YTransformation(tick, GraphContext_1.AxisMap.get(props.axis)), " h ").concat(props.width - props.offsetLeft - props.offsetRight) }); }), ticks.map(function (tick, i) { return React.createElement("path", { key: i, stroke: 'currentColor', style: { strokeWidth: 1, transition: 'd 1s' }, d: "M ".concat(leftPosition, " ").concat(context.YTransformation(tick, GraphContext_1.AxisMap.get(props.axis)), " h ").concat(tickDirection * 6) }); }), ticks.map(function (tick, i) { return React.createElement("text", { fill: 'currentColor', key: i, style: { fontSize: "".concat(tickFontSize, "em"), textAnchor: (props.axis === undefined || props.axis === 'left') ? 'end' : 'start', transition: 'x 0.5s, y 0.5s' }, dominantBaseline: 'middle', x: leftPosition + tickDirection * 8, y: context.YTransformation(tick, GraphContext_1.AxisMap.get(props.axis)) }, (tick * factor).toFixed(nDigits)); }), props.label !== undefined ? React.createElement("text", { fill: 'currentColor', style: { fontSize: labelFontSize + 'em', textAnchor: 'middle' }, dominantBaseline: 'text-bottom', transform: "rotate(".concat(tickDirection * 90, ",").concat(leftPosition + tickDirection * (hAxis + 4), ",").concat((props.offsetTop - props.offsetBottom + props.height) / 2.0, ")"), x: leftPosition + tickDirection * (hAxis + 4), y: (props.offsetTop - props.offsetBottom + props.height) / 2.0 }, props.label) : null, factor !== 1 ? React.createElement("text", { fill: 'currentColor', style: { fontSize: '1em' }, x: leftPosition, y: props.offsetTop - 5 }, "x", 1 / factor) : null)); } exports.default = React.memo(ValueAxis); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWVZhbHVlQXhpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ZVmFsdWVBeGlzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUMseUdBQXlHO0FBQzFHLHdCQUF3QjtBQUN4QixFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLEVBQUU7QUFDRix3R0FBd0c7QUFDeEcsd0dBQXdHO0FBQ3hHLHNHQUFzRztBQUN0Ryx3RkFBd0Y7QUFDeEYsRUFBRTtBQUNGLDBDQUEwQztBQUMxQyxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4Ryw0RUFBNEU7QUFDNUUsRUFBRTtBQUNGLDhCQUE4QjtBQUM5Qix3R0FBd0c7QUFDeEcsMkJBQTJCO0FBQzNCLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YseUdBQXlHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFekcsNkJBQStCO0FBQy9CLCtDQUFzRTtBQUN0RSxtRUFBNkU7QUFtQjdFLFNBQVMsU0FBUyxDQUFDLEtBQWE7SUFDOUIsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQywyQkFBWSxDQUFDLENBQUE7SUFDeEMsSUFBQSxLQUFBLE9BQW9CLEtBQUssQ0FBQyxRQUFRLENBQVcsRUFBRSxDQUFDLElBQUEsRUFBL0MsS0FBSyxRQUFBLEVBQUUsUUFBUSxRQUFnQyxDQUFDO0lBQ2pELElBQUEsS0FBQSxPQUFrQyxLQUFLLENBQUMsUUFBUSxDQUFTLENBQUMsQ0FBQyxJQUFBLEVBQTFELFlBQVksUUFBQSxFQUFFLGVBQWUsUUFBNkIsQ0FBQztJQUU1RCxJQUFBLEtBQUEsT0FBZ0MsS0FBSyxDQUFDLFFBQVEsQ0FBUyxDQUFDLENBQUMsSUFBQSxFQUF4RCxXQUFXLFFBQUEsRUFBRSxjQUFjLFFBQTZCLENBQUM7SUFDMUQsSUFBQSxLQUFBLE9BQW9DLEtBQUssQ0FBQyxRQUFRLENBQVMsQ0FBQyxDQUFDLElBQUEsRUFBNUQsYUFBYSxRQUFBLEVBQUUsZ0JBQWdCLFFBQTZCLENBQUM7SUFFOUQsSUFBQSxLQUFBLE9BQW9CLEtBQUssQ0FBQyxRQUFRLENBQVMsQ0FBQyxDQUFDLElBQUEsRUFBNUMsS0FBSyxRQUFBLEVBQUUsUUFBUSxRQUE2QixDQUFDO0lBRTlDLElBQUEsS0FBQSxPQUF3QixLQUFLLENBQUMsUUFBUSxDQUFTLENBQUMsQ0FBQyxJQUFBLEVBQWhELE9BQU8sUUFBQSxFQUFFLFVBQVUsUUFBNkIsQ0FBQztJQUNsRCxJQUFBLEtBQUEsT0FBc0IsS0FBSyxDQUFDLFFBQVEsQ0FBUyxDQUFDLENBQUMsSUFBQSxFQUE5QyxNQUFNLFFBQUEsRUFBRSxTQUFTLFFBQTZCLENBQUM7SUFFdEQseUJBQXlCO0lBQ3pCLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDZCxJQUFNLElBQUksR0FBRyxzQkFBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDL0IsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2IsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZDLENBQUM7YUFDSSxDQUFDO1lBRUosSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ1osT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNoQixDQUFDO1lBQ0QsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNoQixDQUFDO1lBRUQsSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRztnQkFDN0QsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUc7Z0JBQy9ELEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRztnQkFDOUIsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVsQyxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBRXBFLFFBQVEsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQztZQUM1QixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNwQixDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVqRSxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRS9CLG1EQUFtRDtRQUNuRCxJQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekQsSUFBTSxzQkFBc0IsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFM0QsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksWUFBWSxHQUFHLElBQUEsZ0NBQWEsRUFBQyxVQUFVLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUU5RSw0REFBNEQ7UUFDNUQsT0FBTyxZQUFZLEdBQUcsc0JBQXNCLElBQUksV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2xFLFdBQVcsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLFlBQVksR0FBRyxJQUFBLGdDQUFhLEVBQUMsVUFBVSxFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUUzQywwQkFBMEI7SUFDMUIsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ1osT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFNLElBQUksR0FBRyxzQkFBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9ELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUNELE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFOUQsOENBQThDO1FBQzlDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUMzQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUVsQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFbkQsd0JBQXdCO0lBQ3hCLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDZCxJQUFNLElBQUksR0FBRyxzQkFBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ2pCLElBQUksRUFBRSxLQUFLLENBQUM7WUFDVixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELElBQUksRUFBRSxJQUFJLEVBQUU7WUFDVixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHO1lBQ3RCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxJQUFJLElBQUk7WUFDeEIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksRUFBRSxHQUFHLElBQUk7WUFDWCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDZixJQUFJLEVBQUUsR0FBRyxLQUFLO1lBQ1osVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2YsSUFBSSxFQUFFLEdBQUcsTUFBTTtZQUNiLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLEVBQUUsS0FBSyxDQUFDO1lBQ1YsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxCLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBRXpDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixJQUFJLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQyxHQUFHLElBQUEsZ0NBQWEsRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxPQUFPO1lBQ3JCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFFbkQsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFNLENBQUMsR0FBRyxJQUFBLGdDQUFhLEVBQUMsVUFBVSxFQUFFLGFBQWEsR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRXBGLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFSLElBQUksMkJBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLElBQUEsK0JBQVksRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUE5RCxDQUE4RCxDQUFDLFVBQUMsQ0FBQztRQUNyRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLElBQUksRUFBRSxLQUFLLEtBQUs7WUFDZCxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFFcEIsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsV0FBVztZQUNyQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQztJQUU1QyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRXRDLHNEQUFzRDtJQUN0RCxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2QsT0FBTyxjQUFNLE9BQUEsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBckIsQ0FBcUIsQ0FBQztJQUNyQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFDM0IsT0FBTztRQUVULElBQUksQ0FBQyxHQUFHLElBQUEsK0JBQVksRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFFYixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUN0QyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUNsQixDQUFDLEdBQUcsSUFBQSwrQkFBWSxFQUFDLFVBQVUsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxhQUFhLEtBQUssSUFBSTtZQUN4QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUzQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWhDLElBQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDakMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU07WUFDbkQsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDOztZQUV4QixPQUFPLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQTtJQUMxQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVuRSxJQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNO1lBQ25ELE9BQU8sQ0FBQyxDQUFDLENBQUM7O1lBRVYsT0FBTyxDQUFDLENBQUE7SUFDWixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVqQixPQUFPLENBQ0w7UUFDRSw4QkFDRSxNQUFNLEVBQUMsY0FBYyxFQUNyQixLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFDL0MsQ0FBQyxFQUFFLFlBQUssWUFBWSxjQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksR0FBRyxDQUFDLGdCQUFNLEtBQUssQ0FBQyxTQUFTLENBQUUsR0FDcEY7UUFFRiw4QkFDRSxNQUFNLEVBQUMsY0FBYyxFQUNyQixLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFDL0MsQ0FBQyxFQUFFLFlBQUssWUFBWSxjQUFJLEtBQUssQ0FBQyxTQUFTLGdCQUFNLGFBQWEsR0FBRyxDQUFDLENBQUUsR0FDaEU7UUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBSSxFQUFFLENBQUM7O1lBQ2pCLE9BQUEsOEJBQ0UsR0FBRyxFQUFFLENBQUMsRUFDTixNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQ3hGLGFBQWEsRUFBRSxDQUFDLE1BQUEsS0FBSyxDQUFDLFFBQVEsbUNBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUN4RCxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFDL0MsQ0FBQyxFQUFFLFlBQUssS0FBSyxDQUFDLFVBQVUsY0FBSSxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxzQkFBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQU0sS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUUsR0FDNUksQ0FBQTtTQUFBLENBQ0g7UUFFQSxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsT0FBQSw4QkFDRSxHQUFHLEVBQUUsQ0FBQyxFQUNOLE1BQU0sRUFBQyxjQUFjLEVBQ3JCLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUM3QyxDQUFDLEVBQUUsWUFBSyxZQUFZLGNBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsc0JBQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFNLGFBQWEsR0FBRyxDQUFDLENBQUUsR0FDdkc7UUFMRixDQUtFLENBQUM7UUFFSixLQUFLLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsT0FBQSw4QkFDRSxJQUFJLEVBQUUsY0FBYyxFQUNwQixHQUFHLEVBQUUsQ0FBQyxFQUNOLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxVQUFHLFlBQVksT0FBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxFQUN6SixnQkFBZ0IsRUFBRSxRQUFRLEVBQzFCLENBQUMsRUFBRSxZQUFZLEdBQUcsYUFBYSxHQUFHLENBQUMsRUFDbkMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLHNCQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUV4RCxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQzVCO1FBVFAsQ0FTTyxDQUNSO1FBRUEsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztZQUMxQiw4QkFDRSxJQUFJLEVBQUUsY0FBYyxFQUNwQixLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsYUFBYSxHQUFHLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQy9ELGdCQUFnQixFQUFFLGFBQWEsRUFDL0IsU0FBUyxFQUFFLGlCQUFVLGFBQWEsR0FBRyxFQUFFLGNBQUksWUFBWSxHQUFHLGFBQWEsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsY0FBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFHLEVBQ3ZKLENBQUMsRUFBRSxZQUFZLEdBQUcsYUFBYSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUM3QyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFFN0QsS0FBSyxDQUFDLEtBQUssQ0FDUCxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQ2YsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2IsOEJBQ0UsSUFBSSxFQUFFLGNBQWMsRUFDcEIsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUMxQixDQUFDLEVBQUUsWUFBWSxFQUNmLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUM7O2dCQUVwQixDQUFDLEdBQUcsTUFBTSxDQUNQLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDZCxDQUNMLENBQUE7QUFDSCxDQUFDO0FBRUQsa0JBQWUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyJ9